@hienlh/ppm 0.23.12 → 0.23.14
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 +205 -0
- package/CLAUDE.md +42 -7
- package/THIRD-PARTY-NOTICES.md +2 -2
- package/assets/skills/ppm/SKILL.md +5 -4
- package/assets/skills/ppm/references/cli-reference.md +34 -8
- package/assets/skills/ppm/references/common-tasks.md +8 -4
- package/assets/skills/ppm/references/http-api.md +65 -17
- package/bun.lock +53 -41
- package/dist/web/assets/_basePickBy-DZsMzaag.js +1 -0
- package/dist/web/assets/_basePickBy-DZsMzaag.js.br +0 -0
- package/dist/web/assets/_basePickBy-DZsMzaag.js.gz +0 -0
- package/dist/web/assets/_baseUniq-BVfFdhnG.js +1 -0
- package/dist/web/assets/_baseUniq-BVfFdhnG.js.br +0 -0
- package/dist/web/assets/_baseUniq-BVfFdhnG.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-C3uzfcyx.js +1 -0
- package/dist/web/assets/accounts-settings-section-C3uzfcyx.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-C3uzfcyx.js.gz +0 -0
- package/dist/web/assets/adaptive-context-menu-v544UeQs.js +1 -0
- package/dist/web/assets/adaptive-context-menu-v544UeQs.js.br +0 -0
- package/dist/web/assets/adaptive-context-menu-v544UeQs.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-BGM_TtXa.js +2 -0
- package/dist/web/assets/agent-session-sheet-BGM_TtXa.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-BGM_TtXa.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-DXiGofzB.js +1 -0
- package/dist/web/assets/agent-session-window-content-DNa0uxco.js +1 -0
- package/dist/web/assets/agent-session-window-content-DNa0uxco.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-DNa0uxco.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Bjh12UJ5.js +1 -0
- package/dist/web/assets/ai-resource-editor-Bjh12UJ5.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Bjh12UJ5.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BUmAoa1c.js +1 -0
- package/dist/web/assets/ai-settings-section-BUmAoa1c.js.br +0 -0
- package/dist/web/assets/ai-settings-section-BUmAoa1c.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-D18U_alH.js +1 -0
- package/dist/web/assets/android-tab-DkemOp4O.js +2 -0
- package/dist/web/assets/android-tab-DkemOp4O.js.br +0 -0
- package/dist/web/assets/android-tab-DkemOp4O.js.gz +0 -0
- package/dist/web/assets/angular-html-C-EXiYxF.js +1 -0
- package/dist/web/assets/angular-html-C-EXiYxF.js.br +0 -0
- package/dist/web/assets/angular-html-C-EXiYxF.js.gz +0 -0
- package/dist/web/assets/angular-ts-7vgQKHTG.js +1 -0
- package/dist/web/assets/angular-ts-7vgQKHTG.js.br +0 -0
- package/dist/web/assets/angular-ts-7vgQKHTG.js.gz +0 -0
- package/dist/web/assets/api-client-DAQfiXg0.js +1 -0
- package/dist/web/assets/api-client-OiA8Ida1.js +1 -0
- package/dist/web/assets/api-client-OiA8Ida1.js.br +0 -0
- package/dist/web/assets/api-client-OiA8Ida1.js.gz +0 -0
- package/dist/web/assets/api-settings-BD9LvTw-.js +1 -0
- package/dist/web/assets/api-settings-obEnPtdW.js +1 -0
- package/dist/web/assets/api-settings-obEnPtdW.js.br +0 -0
- package/dist/web/assets/api-settings-obEnPtdW.js.gz +0 -0
- package/dist/web/assets/api-themes-M86KsVMo.js +1 -0
- package/dist/web/assets/apl-5jVD2fgP.js +1 -0
- package/dist/web/assets/apl-5jVD2fgP.js.br +0 -0
- package/dist/web/assets/apl-5jVD2fgP.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-ZfH6MlPQ.js +1 -0
- package/dist/web/assets/appearance-settings-section-ZfH6MlPQ.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-ZfH6MlPQ.js.gz +0 -0
- package/dist/web/assets/apps-panel-CqLd47PW.js +1 -0
- package/dist/web/assets/apps-panel-CqLd47PW.js.br +0 -0
- package/dist/web/assets/apps-panel-CqLd47PW.js.gz +0 -0
- package/dist/web/assets/arc-I7PUO0-e.js +1 -0
- package/dist/web/assets/arc-I7PUO0-e.js.br +0 -0
- package/dist/web/assets/arc-I7PUO0-e.js.gz +0 -0
- package/dist/web/assets/architecture-PBZL5I3N-B-Uky3bj.js +1 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-BRrtQjsr.js +36 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-BRrtQjsr.js.br +0 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-BRrtQjsr.js.gz +0 -0
- package/dist/web/assets/astro-QYZZ8yJJ.js +1 -0
- package/dist/web/assets/astro-QYZZ8yJJ.js.br +0 -0
- package/dist/web/assets/astro-QYZZ8yJJ.js.gz +0 -0
- package/dist/web/assets/audio-preview-COlIaXik.js +1 -0
- package/dist/web/assets/audio-preview-COlIaXik.js.br +2 -0
- package/dist/web/assets/audio-preview-COlIaXik.js.gz +0 -0
- package/dist/web/assets/blade-cgabhmsU.js +1 -0
- package/dist/web/assets/blade-cgabhmsU.js.br +0 -0
- package/dist/web/assets/blade-cgabhmsU.js.gz +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DGzimbRP.js +132 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DGzimbRP.js.br +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DGzimbRP.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-D45ZjK7j.js +1 -0
- package/dist/web/assets/branch-review-tab-D45ZjK7j.js.br +0 -0
- package/dist/web/assets/branch-review-tab-D45ZjK7j.js.gz +0 -0
- package/dist/web/assets/bsl-CJ7_JlQ8.js +1 -0
- package/dist/web/assets/bsl-CJ7_JlQ8.js.br +0 -0
- package/dist/web/assets/bsl-CJ7_JlQ8.js.gz +0 -0
- package/dist/web/assets/button-DR4_Bprq.js +1 -0
- package/dist/web/assets/button-DR4_Bprq.js.br +0 -0
- package/dist/web/assets/button-DR4_Bprq.js.gz +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-CYgja0Vj.js +10 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-CYgja0Vj.js.br +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-CYgja0Vj.js.gz +0 -0
- package/dist/web/assets/cairo-5CpV2T1P.js +1 -0
- package/dist/web/assets/cairo-5CpV2T1P.js.br +0 -0
- package/dist/web/assets/cairo-5CpV2T1P.js.gz +0 -0
- package/dist/web/assets/channel-DPtrFCA5.js +1 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js +1 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.gz +0 -0
- package/dist/web/assets/chat-tab-BxtuxnUo.js +17 -0
- package/dist/web/assets/chat-tab-BxtuxnUo.js.br +0 -0
- package/dist/web/assets/chat-tab-BxtuxnUo.js.gz +0 -0
- package/dist/web/assets/chat-tab-CWp56c6g.js +1 -0
- package/dist/web/assets/chat-tab-CWp56c6g.js.br +0 -0
- package/dist/web/assets/chat-tab-CWp56c6g.js.gz +0 -0
- package/dist/web/assets/chunk-4BX2VUAB-C34azZaK.js +1 -0
- package/dist/web/assets/chunk-55IACEB6-lLZt91qK.js +1 -0
- package/dist/web/assets/chunk-7E7YKBS2-C4ZO5Pu3.js +1 -0
- package/dist/web/assets/chunk-7R4GIKGN-D3k5MAee.js +80 -0
- package/dist/web/assets/chunk-7R4GIKGN-D3k5MAee.js.br +0 -0
- package/dist/web/assets/chunk-7R4GIKGN-D3k5MAee.js.gz +0 -0
- package/dist/web/assets/chunk-C72U2L5F-DJYrpKtC.js +1 -0
- package/dist/web/assets/chunk-EGIJ26TM-BWMmrqKU.js +1 -0
- package/dist/web/assets/chunk-FMBD7UC4-BQAL1rdi.js +15 -0
- package/dist/web/assets/chunk-GEFDOKGD-ClUT8N5D.js +2 -0
- package/dist/web/assets/chunk-GEFDOKGD-ClUT8N5D.js.br +0 -0
- package/dist/web/assets/chunk-GEFDOKGD-ClUT8N5D.js.gz +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-BPnxz1C7.js +2 -0
- package/dist/web/assets/chunk-GLR3WWYH-BPnxz1C7.js.br +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-BPnxz1C7.js.gz +0 -0
- package/dist/web/assets/chunk-HHEYEP7N-BuMrJGFc.js +1 -0
- package/dist/web/assets/chunk-JSJVCQXG-BtujOcXV.js +1 -0
- package/dist/web/assets/chunk-JSJVCQXG-BtujOcXV.js.br +0 -0
- package/dist/web/assets/chunk-JSJVCQXG-BtujOcXV.js.gz +0 -0
- package/dist/web/assets/chunk-KX2RTZJC-DUDiP7Yd.js +1 -0
- package/dist/web/assets/chunk-KYZI473N-DJeOp6mm.js +53 -0
- package/dist/web/assets/chunk-KYZI473N-DJeOp6mm.js.br +0 -0
- package/dist/web/assets/chunk-KYZI473N-DJeOp6mm.js.gz +0 -0
- package/dist/web/assets/chunk-L3YUKLVL-EJ6HIENH.js +1 -0
- package/dist/web/assets/chunk-MX3YWQON-D4w4VuVE.js +1 -0
- package/dist/web/assets/chunk-MX3YWQON-D4w4VuVE.js.br +0 -0
- package/dist/web/assets/chunk-MX3YWQON-D4w4VuVE.js.gz +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-CpKJy3xG.js +220 -0
- package/dist/web/assets/chunk-NQ4KR5QH-CpKJy3xG.js.br +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-CpKJy3xG.js.gz +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-DxH8ZaVs.js +7 -0
- package/dist/web/assets/chunk-O4XLMI2P-DxH8ZaVs.js.br +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-DxH8ZaVs.js.gz +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-Y8-7O5Mi.js +1 -0
- package/dist/web/assets/chunk-OZEHJAEY-Y8-7O5Mi.js.br +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-Y8-7O5Mi.js.gz +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-Dh4202bK.js +1 -0
- package/dist/web/assets/chunk-PQ6SQG4A-Dh4202bK.js.br +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-Dh4202bK.js.gz +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-CKcDA1rA.js +11 -0
- package/dist/web/assets/chunk-PU5JKC2W-CKcDA1rA.js.br +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-CKcDA1rA.js.gz +0 -0
- package/dist/web/assets/chunk-QZHKN3VN-L8x9oN54.js +1 -0
- package/dist/web/assets/chunk-R5LLSJPH-BCVA8OTp.js +1 -0
- package/dist/web/assets/chunk-WL4C6EOR-BBskKt7O.js +189 -0
- package/dist/web/assets/chunk-WL4C6EOR-BBskKt7O.js.br +0 -0
- package/dist/web/assets/chunk-WL4C6EOR-BBskKt7O.js.gz +0 -0
- package/dist/web/assets/chunk-XIRO2GV7-DdW94AiK.js +1 -0
- package/dist/web/assets/chunk-XPW4576I-CWknSB3b.js +32 -0
- package/dist/web/assets/chunk-XPW4576I-CWknSB3b.js.br +0 -0
- package/dist/web/assets/chunk-XPW4576I-CWknSB3b.js.gz +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BpHDY2Kb.js +94 -0
- package/dist/web/assets/chunk-XZSTWKYB-BpHDY2Kb.js.br +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BpHDY2Kb.js.gz +0 -0
- package/dist/web/assets/chunk-YBOYWFTD-bFqPImfF.js +1 -0
- package/dist/web/assets/classDiagram-VBA2DB6C-CIjURp-9.js +1 -0
- package/dist/web/assets/classDiagram-v2-RAHNMMFH-clKWjh1c.js +1 -0
- package/dist/web/assets/clipboard-D-VCry-F.js +1 -0
- package/dist/web/assets/clipboard-D-VCry-F.js.br +0 -0
- package/dist/web/assets/clipboard-D-VCry-F.js.gz +0 -0
- package/dist/web/assets/clone-Bi0DAQV-.js +1 -0
- package/dist/web/assets/cobol-Bd6KmX0J.js +1 -0
- package/dist/web/assets/cobol-Bd6KmX0J.js.br +0 -0
- package/dist/web/assets/cobol-Bd6KmX0J.js.gz +0 -0
- package/dist/web/assets/code-editor-Culc4-j-.js +10 -0
- package/dist/web/assets/code-editor-Culc4-j-.js.br +0 -0
- package/dist/web/assets/code-editor-Culc4-j-.js.gz +0 -0
- package/dist/web/assets/code-fence-C1cQ2ktb.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-Dav3UqiJ.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-Dav3UqiJ.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-Dav3UqiJ.js.gz +0 -0
- package/dist/web/assets/coffee-DvwNSvU3.js +1 -0
- package/dist/web/assets/coffee-DvwNSvU3.js.br +0 -0
- package/dist/web/assets/coffee-DvwNSvU3.js.gz +0 -0
- package/dist/web/assets/conflict-editor-Hi-bm0vI.js +19 -0
- package/dist/web/assets/conflict-editor-Hi-bm0vI.js.br +0 -0
- package/dist/web/assets/conflict-editor-Hi-bm0vI.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-DdOo2bzr.js +4 -0
- package/dist/web/assets/connection-form-tab-DdOo2bzr.js.br +0 -0
- package/dist/web/assets/connection-form-tab-DdOo2bzr.js.gz +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js +1 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js.br +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js.gz +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-ClbAPz7l.js +1 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-ClbAPz7l.js.br +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-ClbAPz7l.js.gz +0 -0
- package/dist/web/assets/cpp-e2ra-IrU.js +1 -0
- package/dist/web/assets/cpp-e2ra-IrU.js.br +0 -0
- package/dist/web/assets/cpp-e2ra-IrU.js.gz +0 -0
- package/dist/web/assets/crystal-BxSLXYRc.js +1 -0
- package/dist/web/assets/crystal-BxSLXYRc.js.br +0 -0
- package/dist/web/assets/crystal-BxSLXYRc.js.gz +0 -0
- package/dist/web/assets/csv-preview-C4B9osB_.js +10 -0
- package/dist/web/assets/csv-preview-C4B9osB_.js.br +0 -0
- package/dist/web/assets/csv-preview-C4B9osB_.js.gz +0 -0
- package/dist/web/assets/dagre-DQKD3TcA.js +1 -0
- package/dist/web/assets/dagre-DQKD3TcA.js.br +0 -0
- package/dist/web/assets/dagre-DQKD3TcA.js.gz +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-Dpb3uk5y.js +4 -0
- package/dist/web/assets/dagre-KLK3FWXG-Dpb3uk5y.js.br +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-Dpb3uk5y.js.gz +0 -0
- package/dist/web/assets/database-drivers-section-BYNY-P18.js +1 -0
- package/dist/web/assets/database-drivers-section-BYNY-P18.js.br +0 -0
- package/dist/web/assets/database-drivers-section-BYNY-P18.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-DWkvEWNP.js +1 -0
- package/dist/web/assets/db-explorer-store-DWkvEWNP.js.br +0 -0
- package/dist/web/assets/db-explorer-store-DWkvEWNP.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BrVgleMJ.js +1 -0
- package/dist/web/assets/db-tab-parts-BrVgleMJ.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BrVgleMJ.js.gz +0 -0
- package/dist/web/assets/db-types-D0vYhq7b.js +1 -0
- package/dist/web/assets/db-types-D0vYhq7b.js.br +0 -0
- package/dist/web/assets/db-types-D0vYhq7b.js.gz +0 -0
- package/dist/web/assets/design-canvas-check-1-Rp0ZRx.js +1 -0
- package/dist/web/assets/design-canvas-check-1-Rp0ZRx.js.br +0 -0
- package/dist/web/assets/design-canvas-check-1-Rp0ZRx.js.gz +0 -0
- package/dist/web/assets/design-export-client-B8EySrNZ.js +1 -0
- package/dist/web/assets/design-export-client-B8EySrNZ.js.br +0 -0
- package/dist/web/assets/design-export-client-B8EySrNZ.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-0naA94rr.js +1 -0
- package/dist/web/assets/design-responsive-dialog-0naA94rr.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-0naA94rr.js.gz +0 -0
- package/dist/web/assets/design-settings-section-BoFRA6B0.js +2 -0
- package/dist/web/assets/design-settings-section-BoFRA6B0.js.br +0 -0
- package/dist/web/assets/design-settings-section-BoFRA6B0.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-BVWan1dm.js +3 -0
- package/dist/web/assets/design-skill-suggestion-BVWan1dm.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-BVWan1dm.js.gz +0 -0
- package/dist/web/assets/design-tab--pMbjoyJ.js +57 -0
- package/dist/web/assets/design-tab--pMbjoyJ.js.br +0 -0
- package/dist/web/assets/design-tab--pMbjoyJ.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-D4aHxvNM.js +1 -0
- package/dist/web/assets/designs-sidebar-panel-D4aHxvNM.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-D4aHxvNM.js.gz +0 -0
- package/dist/web/assets/diagram-E7M64L7V-nFzFvVKn.js +24 -0
- package/dist/web/assets/diagram-E7M64L7V-nFzFvVKn.js.br +0 -0
- package/dist/web/assets/diagram-E7M64L7V-nFzFvVKn.js.gz +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DTz3twyY.js +43 -0
- package/dist/web/assets/diagram-IFDJBPK2-DTz3twyY.js.br +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DTz3twyY.js.gz +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DqAQw4f4.js +24 -0
- package/dist/web/assets/diagram-P4PSJMXO-DqAQw4f4.js.br +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DqAQw4f4.js.gz +0 -0
- package/dist/web/assets/dialog-DLrqSaHA.js +1 -0
- package/dist/web/assets/dialog-DLrqSaHA.js.br +0 -0
- package/dist/web/assets/dialog-DLrqSaHA.js.gz +0 -0
- package/dist/web/assets/diff-viewer-WZKDSphn.js +4 -0
- package/dist/web/assets/diff-viewer-WZKDSphn.js.br +0 -0
- package/dist/web/assets/diff-viewer-WZKDSphn.js.gz +0 -0
- package/dist/web/assets/docx-preview-DNNgfe62.js +12 -0
- package/dist/web/assets/docx-preview-DNNgfe62.js.br +0 -0
- package/dist/web/assets/docx-preview-DNNgfe62.js.gz +0 -0
- package/dist/web/assets/dropdown-menu-ByeFrLIJ.js +1 -0
- package/dist/web/assets/dropdown-menu-ByeFrLIJ.js.br +0 -0
- package/dist/web/assets/dropdown-menu-ByeFrLIJ.js.gz +0 -0
- package/dist/web/assets/edge-BMgSJ-Bj.js +1 -0
- package/dist/web/assets/edge-BMgSJ-Bj.js.br +0 -0
- package/dist/web/assets/edge-BMgSJ-Bj.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-jg2S1fk-.js +7 -0
- package/dist/web/assets/edit-diff-preview-jg2S1fk-.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-jg2S1fk-.js.gz +0 -0
- package/dist/web/assets/editor-dialog-Dq-Haj3-.js +1 -0
- package/dist/web/assets/editor-dialog-Dq-Haj3-.js.br +0 -0
- package/dist/web/assets/editor-dialog-Dq-Haj3-.js.gz +0 -0
- package/dist/web/assets/editor-language-service-as9g04JJ.js +1 -0
- package/dist/web/assets/editor-language-service-as9g04JJ.js.br +0 -0
- package/dist/web/assets/editor-language-service-as9g04JJ.js.gz +0 -0
- package/dist/web/assets/elixir-C-vsifv7.js +1 -0
- package/dist/web/assets/elixir-C-vsifv7.js.br +0 -0
- package/dist/web/assets/elixir-C-vsifv7.js.gz +0 -0
- package/dist/web/assets/elm-AlQORVd6.js +1 -0
- package/dist/web/assets/elm-AlQORVd6.js.br +0 -0
- package/dist/web/assets/elm-AlQORVd6.js.gz +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-iXaSunsJ.js +70 -0
- package/dist/web/assets/erDiagram-INFDFZHY-iXaSunsJ.js.br +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-iXaSunsJ.js.gz +0 -0
- package/dist/web/assets/erb-Bl2JVWWG.js +1 -0
- package/dist/web/assets/erb-Bl2JVWWG.js.br +0 -0
- package/dist/web/assets/erb-Bl2JVWWG.js.gz +0 -0
- package/dist/web/assets/erlang-BRqOjXH9.js +1 -0
- package/dist/web/assets/erlang-BRqOjXH9.js.br +0 -0
- package/dist/web/assets/erlang-BRqOjXH9.js.gz +0 -0
- package/dist/web/assets/explorer-body-D4C2wOou.js +2 -0
- package/dist/web/assets/explorer-body-D4C2wOou.js.br +0 -0
- package/dist/web/assets/explorer-body-D4C2wOou.js.gz +0 -0
- package/dist/web/assets/explorer-model-DzQgZCjd.js +1 -0
- package/dist/web/assets/explorer-model-DzQgZCjd.js.br +0 -0
- package/dist/web/assets/explorer-model-DzQgZCjd.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-8w4tzl-b.js +1 -0
- package/dist/web/assets/explorer-window-content-8w4tzl-b.js.br +0 -0
- package/dist/web/assets/explorer-window-content-8w4tzl-b.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-iiuCXwd3.js +1 -0
- package/dist/web/assets/extension-manager-section-iiuCXwd3.js.br +0 -0
- package/dist/web/assets/extension-manager-section-iiuCXwd3.js.gz +0 -0
- package/dist/web/assets/extension-webview-DT1Y9bkz.js +12 -0
- package/dist/web/assets/extension-webview-DT1Y9bkz.js.br +0 -0
- package/dist/web/assets/extension-webview-DT1Y9bkz.js.gz +0 -0
- package/dist/web/assets/file-diff-lX1a7RLF.js +1 -0
- package/dist/web/assets/file-icons-B1-viqUQ.js +1 -0
- package/dist/web/assets/file-icons-B1-viqUQ.js.br +0 -0
- package/dist/web/assets/file-icons-B1-viqUQ.js.gz +0 -0
- package/dist/web/assets/file-icons.generated-BTxvyD8L.css +1 -0
- package/dist/web/assets/file-icons.generated-BTxvyD8L.css.br +0 -0
- package/dist/web/assets/file-icons.generated-BTxvyD8L.css.gz +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js +1 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js.br +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js.gz +0 -0
- package/dist/web/assets/files-settings-section-C29D5TCc.js +1 -0
- package/dist/web/assets/files-settings-section-C29D5TCc.js.br +0 -0
- package/dist/web/assets/files-settings-section-C29D5TCc.js.gz +0 -0
- package/dist/web/assets/filter-dialog-frame-ZGzke_Zc.js +1 -0
- package/dist/web/assets/filter-dialog-frame-ZGzke_Zc.js.br +0 -0
- package/dist/web/assets/filter-dialog-frame-ZGzke_Zc.js.gz +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-Ds_IZGyf.js +162 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-Ds_IZGyf.js.br +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-Ds_IZGyf.js.gz +0 -0
- package/dist/web/assets/format-file-meta-CnLWYScm.js +1 -0
- package/dist/web/assets/format-file-meta-CnLWYScm.js.br +0 -0
- package/dist/web/assets/format-file-meta-CnLWYScm.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-CWbxmDGR.js +1 -0
- package/dist/web/assets/fortran-fixed-form-CWbxmDGR.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-CWbxmDGR.js.gz +0 -0
- package/dist/web/assets/fs-api-ssn-HsD4.js +1 -0
- package/dist/web/assets/fs-api-ssn-HsD4.js.br +0 -0
- package/dist/web/assets/fs-api-ssn-HsD4.js.gz +0 -0
- package/dist/web/assets/fsharp-DKMYbq6I.js +1 -0
- package/dist/web/assets/fsharp-DKMYbq6I.js.br +0 -0
- package/dist/web/assets/fsharp-DKMYbq6I.js.gz +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CiIdbM3n.js +292 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CiIdbM3n.js.br +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CiIdbM3n.js.gz +0 -0
- package/dist/web/assets/gdresource-B3yFau4V.js +1 -0
- package/dist/web/assets/gdresource-B3yFau4V.js.br +0 -0
- package/dist/web/assets/gdresource-B3yFau4V.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DVd5hmw7.js +1 -0
- package/dist/web/assets/general-settings-section-DVd5hmw7.js.br +0 -0
- package/dist/web/assets/general-settings-section-DVd5hmw7.js.gz +0 -0
- package/dist/web/assets/git-commit-BW0p3Ekk.js +1 -0
- package/dist/web/assets/git-commit-BW0p3Ekk.js.br +0 -0
- package/dist/web/assets/git-commit-BW0p3Ekk.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BVihXafd.js +1 -0
- package/dist/web/assets/git-log-panel-CcufNPXO.js +1 -0
- package/dist/web/assets/git-log-panel-CcufNPXO.js.br +0 -0
- package/dist/web/assets/git-log-panel-CcufNPXO.js.gz +0 -0
- package/dist/web/assets/git-rebase-CUSAK8_s.js +1 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js +1 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js.br +0 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js.gz +0 -0
- package/dist/web/assets/git-review-tab-Dfu5YxgC.js +3 -0
- package/dist/web/assets/git-review-tab-Dfu5YxgC.js.br +0 -0
- package/dist/web/assets/git-review-tab-Dfu5YxgC.js.gz +0 -0
- package/dist/web/assets/gitGraph-HDMCJU4V-YCo9XlXj.js +1 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-BbhjtccU.js +65 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-BbhjtccU.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-BbhjtccU.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-B75J0oe4.js +177 -0
- package/dist/web/assets/glide-data-grid-B75J0oe4.js.br +0 -0
- package/dist/web/assets/glide-data-grid-B75J0oe4.js.gz +0 -0
- package/dist/web/assets/glimmer-js-Dn43Q3P1.js +1 -0
- package/dist/web/assets/glimmer-js-Dn43Q3P1.js.br +0 -0
- package/dist/web/assets/glimmer-js-Dn43Q3P1.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-DZYYD22W.js +1 -0
- package/dist/web/assets/glimmer-ts-DZYYD22W.js.br +0 -0
- package/dist/web/assets/glimmer-ts-DZYYD22W.js.gz +0 -0
- package/dist/web/assets/glsl-pYErV1oY.js +1 -0
- package/dist/web/assets/glsl-pYErV1oY.js.br +0 -0
- package/dist/web/assets/glsl-pYErV1oY.js.gz +0 -0
- package/dist/web/assets/graphlib-pKiIWcwD.js +1 -0
- package/dist/web/assets/graphlib-pKiIWcwD.js.br +0 -0
- package/dist/web/assets/graphlib-pKiIWcwD.js.gz +0 -0
- package/dist/web/assets/graphql-VCU9SikS.js +1 -0
- package/dist/web/assets/graphql-VCU9SikS.js.br +0 -0
- package/dist/web/assets/graphql-VCU9SikS.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-DCZKjmfY.js +2 -0
- package/dist/web/assets/grid-save-dialog-DCZKjmfY.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-DCZKjmfY.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-CatWu-oT.js +1 -0
- package/dist/web/assets/group-chat-tab-CatWu-oT.js.br +0 -0
- package/dist/web/assets/group-chat-tab-CatWu-oT.js.gz +0 -0
- package/dist/web/assets/hack-MIhm1LlJ.js +1 -0
- package/dist/web/assets/hack-MIhm1LlJ.js.br +0 -0
- package/dist/web/assets/hack-MIhm1LlJ.js.gz +0 -0
- package/dist/web/assets/haml-D-ys61WH.js +1 -0
- package/dist/web/assets/haml-D-ys61WH.js.br +0 -0
- package/dist/web/assets/haml-D-ys61WH.js.gz +0 -0
- package/dist/web/assets/handlebars-Ci0Fz22e.js +1 -0
- package/dist/web/assets/handlebars-Ci0Fz22e.js.br +0 -0
- package/dist/web/assets/handlebars-Ci0Fz22e.js.gz +0 -0
- package/dist/web/assets/html-BfSqT2Ng.js +1 -0
- package/dist/web/assets/html-BfSqT2Ng.js.br +0 -0
- package/dist/web/assets/html-BfSqT2Ng.js.gz +0 -0
- package/dist/web/assets/html-derivative-mrGnBIXr.js +1 -0
- package/dist/web/assets/http-DwPxJWot.js +1 -0
- package/dist/web/assets/http-DwPxJWot.js.br +0 -0
- package/dist/web/assets/http-DwPxJWot.js.gz +0 -0
- package/dist/web/assets/hurl-G2E98JqX.js +1 -0
- package/dist/web/assets/hurl-G2E98JqX.js.br +0 -0
- package/dist/web/assets/hurl-G2E98JqX.js.gz +0 -0
- package/dist/web/assets/hxml-DAle7vtu.js +1 -0
- package/dist/web/assets/hxml-DAle7vtu.js.br +0 -0
- package/dist/web/assets/hxml-DAle7vtu.js.gz +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js +1 -0
- package/dist/web/assets/icons-JMA45Ifw.js.br +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js.gz +0 -0
- package/dist/web/assets/image-preview-Bhg1jHHQ.js +1 -0
- package/dist/web/assets/impexp-state-HapOpwYX.js +4 -0
- package/dist/web/assets/impexp-state-HapOpwYX.js.br +0 -0
- package/dist/web/assets/impexp-state-HapOpwYX.js.gz +0 -0
- package/dist/web/assets/impexp-tab-Cnr8ZIpb.js +1 -0
- package/dist/web/assets/impexp-tab-Cnr8ZIpb.js.br +0 -0
- package/dist/web/assets/impexp-tab-Cnr8ZIpb.js.gz +0 -0
- package/dist/web/assets/index-6UiaKItX.js +59 -0
- package/dist/web/assets/index-6UiaKItX.js.br +0 -0
- package/dist/web/assets/index-6UiaKItX.js.gz +0 -0
- package/dist/web/assets/index-Ch28kMx1.css +1 -0
- package/dist/web/assets/index-Ch28kMx1.css.br +0 -0
- package/dist/web/assets/index-Ch28kMx1.css.gz +0 -0
- package/dist/web/assets/info-3K5VOQVL-EeVpjyO8.js +1 -0
- package/dist/web/assets/infoDiagram-LFFYTUFH-Cqqn4BSQ.js +2 -0
- package/dist/web/assets/input-D-RG8dzb.js +1 -0
- package/dist/web/assets/isEmpty-DrA5f9p9.js +1 -0
- package/dist/web/assets/isEmpty-DrA5f9p9.js.br +0 -0
- package/dist/web/assets/isEmpty-DrA5f9p9.js.gz +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-DPS2-OUX.js +70 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-DPS2-OUX.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-DPS2-OUX.js.gz +0 -0
- package/dist/web/assets/jinja-ttwiOGfK.js +1 -0
- package/dist/web/assets/jinja-ttwiOGfK.js.br +0 -0
- package/dist/web/assets/jinja-ttwiOGfK.js.gz +0 -0
- package/dist/web/assets/jira-watcher-section-CPJaxMv3.js +1 -0
- package/dist/web/assets/jison-CBhlp18T.js +1 -0
- package/dist/web/assets/jison-CBhlp18T.js.br +0 -0
- package/dist/web/assets/jison-CBhlp18T.js.gz +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-DAxvmzHb.js +139 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-DAxvmzHb.js.br +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-DAxvmzHb.js.gz +0 -0
- package/dist/web/assets/julia-TzQ-uRbV.js +1 -0
- package/dist/web/assets/julia-TzQ-uRbV.js.br +0 -0
- package/dist/web/assets/julia-TzQ-uRbV.js.gz +0 -0
- package/dist/web/assets/just-_esTBNSS.js +1 -0
- package/dist/web/assets/just-_esTBNSS.js.br +0 -0
- package/dist/web/assets/just-_esTBNSS.js.gz +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-qY_uDl8T.js +89 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-qY_uDl8T.js.br +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-qY_uDl8T.js.gz +0 -0
- package/dist/web/assets/keybindings-store-DD1cJso2.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-D4Bq_kJ6.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-D4Bq_kJ6.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-D4Bq_kJ6.js.gz +0 -0
- package/dist/web/assets/language-servers-section-D--Ji4HN.js +2 -0
- package/dist/web/assets/language-servers-section-D--Ji4HN.js.br +0 -0
- package/dist/web/assets/language-servers-section-D--Ji4HN.js.gz +0 -0
- package/dist/web/assets/latex-HI6kHIHG.js +1 -0
- package/dist/web/assets/latex-HI6kHIHG.js.br +0 -0
- package/dist/web/assets/latex-HI6kHIHG.js.gz +0 -0
- package/dist/web/assets/line-BN9s1Tpq.js +1 -0
- package/dist/web/assets/linear-Di4UGcbw.js +1 -0
- package/dist/web/assets/linear-Di4UGcbw.js.br +0 -0
- package/dist/web/assets/linear-Di4UGcbw.js.gz +0 -0
- package/dist/web/assets/liquid-BA8TlMtj.js +1 -0
- package/dist/web/assets/liquid-BA8TlMtj.js.br +0 -0
- package/dist/web/assets/liquid-BA8TlMtj.js.gz +0 -0
- package/dist/web/assets/logs-app-C4OVSXwd.css +1 -0
- package/dist/web/assets/logs-app-C4OVSXwd.css.br +0 -0
- package/dist/web/assets/logs-app-C4OVSXwd.css.gz +0 -0
- package/dist/web/assets/logs-app-DVwDWcnC.js +13 -0
- package/dist/web/assets/logs-app-DVwDWcnC.js.br +0 -0
- package/dist/web/assets/logs-app-DVwDWcnC.js.gz +0 -0
- package/dist/web/assets/logs-tab-BNaMLDde.js +1 -0
- package/dist/web/assets/logs-window-content-hjhdEgZx.js +1 -0
- package/dist/web/assets/lsp-client-FPx6oPde.js +1 -0
- package/dist/web/assets/lsp-client-FPx6oPde.js.br +0 -0
- package/dist/web/assets/lsp-client-FPx6oPde.js.gz +0 -0
- package/dist/web/assets/lua-2lvvhJ5i.js +1 -0
- package/dist/web/assets/lua-2lvvhJ5i.js.br +0 -0
- package/dist/web/assets/lua-2lvvhJ5i.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-D9vn8m8E.js +1 -0
- package/dist/web/assets/markdown-renderer-PKijmP-6.js +5 -0
- package/dist/web/assets/markdown-renderer-PKijmP-6.js.br +0 -0
- package/dist/web/assets/markdown-renderer-PKijmP-6.js.gz +0 -0
- package/dist/web/assets/marko-DQFZDVmt.js +1 -0
- package/dist/web/assets/marko-DQFZDVmt.js.br +0 -0
- package/dist/web/assets/marko-DQFZDVmt.js.gz +0 -0
- package/dist/web/assets/mdc-DtRUqkf-.js +1 -0
- package/dist/web/assets/mdc-DtRUqkf-.js.br +0 -0
- package/dist/web/assets/mdc-DtRUqkf-.js.gz +0 -0
- package/dist/web/assets/media-url-524XBuIF.js +1 -0
- package/dist/web/assets/mermaid-parser.core-CAVW1Yfe.js +4 -0
- package/dist/web/assets/mermaid-parser.core-CAVW1Yfe.js.br +0 -0
- package/dist/web/assets/mermaid-parser.core-CAVW1Yfe.js.gz +0 -0
- package/dist/web/assets/mermaid.core-BXnr9nXf.js +11 -0
- package/dist/web/assets/mermaid.core-BXnr9nXf.js.br +0 -0
- package/dist/web/assets/mermaid.core-BXnr9nXf.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-B4Wlz_59.js +68 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-B4Wlz_59.js.br +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-B4Wlz_59.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-BdF6oawx.js +1 -0
- package/dist/web/assets/mobile-bottom-sheet-BdF6oawx.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-BdF6oawx.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-1Gw9WsAM.js +1 -0
- package/dist/web/assets/mobile-explorer-sheet-1Gw9WsAM.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-1Gw9WsAM.js.gz +0 -0
- package/dist/web/assets/monaco-dotenv-language-BvSPgqNj.js +1 -0
- package/dist/web/assets/new-design-dialog-ChYww1VY.js +1 -0
- package/dist/web/assets/new-design-dialog-ChYww1VY.js.br +0 -0
- package/dist/web/assets/new-design-dialog-ChYww1VY.js.gz +0 -0
- package/dist/web/assets/nextflow-DBVZnnT_.js +1 -0
- package/dist/web/assets/nextflow-DBVZnnT_.js.br +0 -0
- package/dist/web/assets/nextflow-DBVZnnT_.js.gz +0 -0
- package/dist/web/assets/nginx-C4PeWBJv.js +1 -0
- package/dist/web/assets/nginx-C4PeWBJv.js.br +0 -0
- package/dist/web/assets/nginx-C4PeWBJv.js.gz +0 -0
- package/dist/web/assets/nim-DT5bnWs7.js +1 -0
- package/dist/web/assets/nim-DT5bnWs7.js.br +0 -0
- package/dist/web/assets/nim-DT5bnWs7.js.gz +0 -0
- package/dist/web/assets/notification-store-DqWBYQnQ.js +1 -0
- package/dist/web/assets/notifications-settings-section-BDKNseLC.js +1 -0
- package/dist/web/assets/notifications-settings-section-BDKNseLC.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-BDKNseLC.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-Ce587TR6.js +1 -0
- package/dist/web/assets/onboarding-entry-Ce587TR6.js.br +0 -0
- package/dist/web/assets/onboarding-entry-Ce587TR6.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-BG3yKbth.js +1 -0
- package/dist/web/assets/onboarding-quick-orientation-BG3yKbth.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-BG3yKbth.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-BWkvLJiI.js +1 -0
- package/dist/web/assets/open-db-tabs-BWkvLJiI.js.br +0 -0
- package/dist/web/assets/open-db-tabs-BWkvLJiI.js.gz +0 -0
- package/dist/web/assets/open-settings-CJ-BQ5Co.js +1 -0
- package/dist/web/assets/ordinal-BV0jQl_h.js +1 -0
- package/dist/web/assets/ordinal-BV0jQl_h.js.br +0 -0
- package/dist/web/assets/ordinal-BV0jQl_h.js.gz +0 -0
- package/dist/web/assets/overview-panel-CmFpdkp2.js +1 -0
- package/dist/web/assets/overview-panel-CmFpdkp2.js.br +0 -0
- package/dist/web/assets/overview-panel-CmFpdkp2.js.gz +0 -0
- package/dist/web/assets/packet-RMMSAZCW-DybThnCq.js +1 -0
- package/dist/web/assets/panel-store-DFurR27n.js +1 -0
- package/dist/web/assets/panel-store-DFurR27n.js.br +0 -0
- package/dist/web/assets/panel-store-DFurR27n.js.gz +0 -0
- package/dist/web/assets/patch-tab-metadata-BUNJESEQ.js +1 -0
- package/dist/web/assets/pdf-preview-B_okpfOG.js +1 -0
- package/dist/web/assets/pdf-preview-B_okpfOG.js.br +0 -0
- package/dist/web/assets/pdf-preview-B_okpfOG.js.gz +0 -0
- package/dist/web/assets/performance-panel-zJMhzM4W.js +3 -0
- package/dist/web/assets/performance-panel-zJMhzM4W.js.br +0 -0
- package/dist/web/assets/performance-panel-zJMhzM4W.js.gz +0 -0
- package/dist/web/assets/perl-BYfk64iB.js +1 -0
- package/dist/web/assets/perl-BYfk64iB.js.br +0 -0
- package/dist/web/assets/perl-BYfk64iB.js.gz +0 -0
- package/dist/web/assets/php-jITHM5rW.js +1 -0
- package/dist/web/assets/php-jITHM5rW.js.br +0 -0
- package/dist/web/assets/php-jITHM5rW.js.gz +0 -0
- package/dist/web/assets/pie-UPGHQEXC-BV0L1ST2.js +1 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-DywbOif1.js +30 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-DywbOif1.js.br +0 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-DywbOif1.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-DUqPA3XC.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-DUqPA3XC.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-DUqPA3XC.js.gz +0 -0
- package/dist/web/assets/pptx-export-BDJ7y1G6.js +111 -0
- package/dist/web/assets/pptx-export-BDJ7y1G6.js.br +0 -0
- package/dist/web/assets/pptx-export-BDJ7y1G6.js.gz +0 -0
- package/dist/web/assets/problems-panel-Cwsfn1St.js +1 -0
- package/dist/web/assets/problems-panel-Cwsfn1St.js.br +0 -0
- package/dist/web/assets/problems-panel-Cwsfn1St.js.gz +0 -0
- package/dist/web/assets/process-row-format-B1ix3LMo.js +1 -0
- package/dist/web/assets/process-table-l1-hFLUJ.js +1 -0
- package/dist/web/assets/process-table-l1-hFLUJ.js.br +0 -0
- package/dist/web/assets/process-table-l1-hFLUJ.js.gz +0 -0
- package/dist/web/assets/project-framework-store-Bi5dyHdx.js +1 -0
- package/dist/web/assets/project-store-CEGoLMOl.js +1 -0
- package/dist/web/assets/project-store-CEGoLMOl.js.br +0 -0
- package/dist/web/assets/project-store-CEGoLMOl.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-VZ6gpJkZ.js +1 -0
- package/dist/web/assets/proxy-settings-section-VZ6gpJkZ.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-VZ6gpJkZ.js.gz +0 -0
- package/dist/web/assets/pug-C3C14waW.js +1 -0
- package/dist/web/assets/pug-C3C14waW.js.br +0 -0
- package/dist/web/assets/pug-C3C14waW.js.gz +0 -0
- package/dist/web/assets/qml-DMYSBRVt.js +1 -0
- package/dist/web/assets/qml-DMYSBRVt.js.br +0 -0
- package/dist/web/assets/qml-DMYSBRVt.js.gz +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CYGg6fRU.js +7 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CYGg6fRU.js.br +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CYGg6fRU.js.gz +0 -0
- package/dist/web/assets/query-audit-section-J5i6_AGL.js +1 -0
- package/dist/web/assets/query-audit-section-J5i6_AGL.js.br +0 -0
- package/dist/web/assets/query-audit-section-J5i6_AGL.js.gz +0 -0
- package/dist/web/assets/query-tab-Br2U5YPQ.js +22 -0
- package/dist/web/assets/query-tab-Br2U5YPQ.js.br +0 -0
- package/dist/web/assets/query-tab-Br2U5YPQ.js.gz +0 -0
- package/dist/web/assets/radar-KQ55EAFF-BZY71XNv.js +1 -0
- package/dist/web/assets/razor-C8pIPfbg.js +1 -0
- package/dist/web/assets/razor-C8pIPfbg.js.br +0 -0
- package/dist/web/assets/razor-C8pIPfbg.js.gz +0 -0
- package/dist/web/assets/remote-access-settings-section-CI-ZVbmv.js +1 -0
- package/dist/web/assets/remote-access-settings-section-CI-ZVbmv.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-CI-ZVbmv.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-B4_htemB.js +1 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-B4_htemB.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-B4_htemB.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DJMad2gK.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DJMad2gK.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DJMad2gK.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-C3CDk2Fw.js +1 -0
- package/dist/web/assets/remote-desktop-mobile-view-C3CDk2Fw.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-C3CDk2Fw.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Ch8Fuhfv.js +1 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Ch8Fuhfv.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Ch8Fuhfv.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BKM0nXJ7.js +1 -0
- package/dist/web/assets/remote-desktop-settings-section-BKM0nXJ7.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BKM0nXJ7.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-Bty8zFfF.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-Bty8zFfF.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-Bty8zFfF.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-CyJMUdup.js +1 -0
- package/dist/web/assets/rename-object-dialog-CyJMUdup.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-CyJMUdup.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BtAcFKFS.js +73 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BtAcFKFS.js.br +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BtAcFKFS.js.gz +0 -0
- package/dist/web/assets/review-code-YefYFbqb.js +5 -0
- package/dist/web/assets/review-code-YefYFbqb.js.br +0 -0
- package/dist/web/assets/review-code-YefYFbqb.js.gz +0 -0
- package/dist/web/assets/rst-BhZIcU_y.js +1 -0
- package/dist/web/assets/rst-BhZIcU_y.js.br +0 -0
- package/dist/web/assets/rst-BhZIcU_y.js.gz +0 -0
- package/dist/web/assets/ruby-DjnL4Qo1.js +1 -0
- package/dist/web/assets/ruby-DjnL4Qo1.js.br +0 -0
- package/dist/web/assets/ruby-DjnL4Qo1.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-button-C-ensVoK.js +1 -0
- package/dist/web/assets/run-in-terminal-z_H3VtlO.js +1 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-C1VJQsDx.js +10 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-C1VJQsDx.js.br +0 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-C1VJQsDx.js.gz +0 -0
- package/dist/web/assets/sas-TfkzbzI4.js +1 -0
- package/dist/web/assets/sas-TfkzbzI4.js.br +0 -0
- package/dist/web/assets/sas-TfkzbzI4.js.gz +0 -0
- package/dist/web/assets/save-as-dialog-B3UTyvHe.js +1 -0
- package/dist/web/assets/save-as-dialog-B3UTyvHe.js.br +0 -0
- package/dist/web/assets/save-as-dialog-B3UTyvHe.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-BE-0v3Tz.js +1 -0
- package/dist/web/assets/schedules-settings-section-BE-0v3Tz.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BE-0v3Tz.js.gz +0 -0
- package/dist/web/assets/scroll-area-B84ALpNT.js +1 -0
- package/dist/web/assets/scroll-area-B84ALpNT.js.br +0 -0
- package/dist/web/assets/scroll-area-B84ALpNT.js.gz +0 -0
- package/dist/web/assets/scss-nfidDCpi.js +1 -0
- package/dist/web/assets/scss-nfidDCpi.js.br +0 -0
- package/dist/web/assets/scss-nfidDCpi.js.gz +0 -0
- package/dist/web/assets/send-to-chat-B1pJKdHk.js +1 -0
- package/dist/web/assets/send-to-chat-B1pJKdHk.js.br +0 -0
- package/dist/web/assets/send-to-chat-B1pJKdHk.js.gz +0 -0
- package/dist/web/assets/separator-ClLtG2v5.js +1 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-nCGWX-jE.js +145 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-nCGWX-jE.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-nCGWX-jE.js.gz +0 -0
- package/dist/web/assets/services-panel-Dcog2FRz.js +1 -0
- package/dist/web/assets/services-panel-Dcog2FRz.js.br +0 -0
- package/dist/web/assets/services-panel-Dcog2FRz.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-CQUTTdce.js +1 -0
- package/dist/web/assets/session-changes-bar-CQUTTdce.js.br +0 -0
- package/dist/web/assets/session-changes-bar-CQUTTdce.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js +1 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.gz +0 -0
- package/dist/web/assets/session-review-tab-C_8fPRUA.js +6 -0
- package/dist/web/assets/session-review-tab-C_8fPRUA.js.br +0 -0
- package/dist/web/assets/session-review-tab-C_8fPRUA.js.gz +0 -0
- package/dist/web/assets/session-turns-NMVd_geJ.js +9 -0
- package/dist/web/assets/session-turns-NMVd_geJ.js.br +0 -0
- package/dist/web/assets/session-turns-NMVd_geJ.js.gz +0 -0
- package/dist/web/assets/settings-body-QXejvAs5.js +1 -0
- package/dist/web/assets/settings-body-QXejvAs5.js.br +0 -0
- package/dist/web/assets/settings-body-QXejvAs5.js.gz +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js +1 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js.br +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DEB1DoVo.js +2 -0
- package/dist/web/assets/settings-section-content-DEB1DoVo.js.br +0 -0
- package/dist/web/assets/settings-section-content-DEB1DoVo.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DXvUKJ01.js +1 -0
- package/dist/web/assets/settings-store-DIPe0D2_.js +2 -0
- package/dist/web/assets/settings-store-DIPe0D2_.js.br +0 -0
- package/dist/web/assets/settings-store-DIPe0D2_.js.gz +0 -0
- package/dist/web/assets/settings-tab-Dytz_a6o.js +1 -0
- package/dist/web/assets/settings-window-content-DbaJYKWz.js +1 -0
- package/dist/web/assets/shaderlab-CPu31TpY.js +1 -0
- package/dist/web/assets/shaderlab-CPu31TpY.js.br +0 -0
- package/dist/web/assets/shaderlab-CPu31TpY.js.gz +0 -0
- package/dist/web/assets/shellsession-SNCEdFDb.js +1 -0
- package/dist/web/assets/slash-command-picker-CMgT1HB0.js +1 -0
- package/dist/web/assets/slash-command-picker-CMgT1HB0.js.br +0 -0
- package/dist/web/assets/slash-command-picker-CMgT1HB0.js.gz +0 -0
- package/dist/web/assets/sortable-header-CspLHJ89.js +1 -0
- package/dist/web/assets/sortable-header-CspLHJ89.js.br +0 -0
- package/dist/web/assets/sortable-header-CspLHJ89.js.gz +0 -0
- package/dist/web/assets/soy-CnTY51wD.js +1 -0
- package/dist/web/assets/soy-CnTY51wD.js.br +0 -0
- package/dist/web/assets/soy-CnTY51wD.js.gz +0 -0
- package/dist/web/assets/sparql-Bo8ZDeqE.js +1 -0
- package/dist/web/assets/sparql-Bo8ZDeqE.js.br +0 -0
- package/dist/web/assets/sparql-Bo8ZDeqE.js.gz +0 -0
- package/dist/web/assets/sql-completion-provider-DpYWIHib.js +5 -0
- package/dist/web/assets/sql-completion-provider-DpYWIHib.js.br +0 -0
- package/dist/web/assets/sql-completion-provider-DpYWIHib.js.gz +0 -0
- package/dist/web/assets/sql-identifiers-EJ-1Q-Yo.js +1 -0
- package/dist/web/assets/sql-identifiers-EJ-1Q-Yo.js.br +0 -0
- package/dist/web/assets/sql-identifiers-EJ-1Q-Yo.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-BsWrC-2m.js +1 -0
- package/dist/web/assets/sql-object-tab-BsWrC-2m.js.br +0 -0
- package/dist/web/assets/sql-object-tab-BsWrC-2m.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-CIxKUQMo.js +1 -0
- package/dist/web/assets/sqlite-viewer-CIxKUQMo.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-CIxKUQMo.js.gz +0 -0
- package/dist/web/assets/start-ellipsis-DoNrF95a.js +1 -0
- package/dist/web/assets/stata-CRPv34qR.js +1 -0
- package/dist/web/assets/stata-CRPv34qR.js.br +0 -0
- package/dist/web/assets/stata-CRPv34qR.js.gz +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BN4MhYz8.js +1 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BN4MhYz8.js.br +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BN4MhYz8.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-FVOUBMTO-CYb4zl__.js +1 -0
- package/dist/web/assets/structure-save-dialog-CVWKQTIr.js +1 -0
- package/dist/web/assets/structure-save-dialog-CVWKQTIr.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-CVWKQTIr.js.gz +0 -0
- package/dist/web/assets/structure-tab-rs2T0F7s.js +3 -0
- package/dist/web/assets/structure-tab-rs2T0F7s.js.br +0 -0
- package/dist/web/assets/structure-tab-rs2T0F7s.js.gz +0 -0
- package/dist/web/assets/surrealql-piKAap88.js +1 -0
- package/dist/web/assets/surrealql-piKAap88.js.br +0 -0
- package/dist/web/assets/surrealql-piKAap88.js.gz +0 -0
- package/dist/web/assets/svelte-CUBWC2AD.js +1 -0
- package/dist/web/assets/svelte-CUBWC2AD.js.br +0 -0
- package/dist/web/assets/svelte-CUBWC2AD.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DyocekjK.js +2 -0
- package/dist/web/assets/system-monitor-body-DyocekjK.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DyocekjK.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-DvLaI7Nf.js +1 -0
- package/dist/web/assets/system-monitor-window-content-DCCUwpO7.js +1 -0
- package/dist/web/assets/tab-host-window-content-CwlNioCH.js +1 -0
- package/dist/web/assets/tab-host-window-content-CwlNioCH.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CwlNioCH.js.gz +0 -0
- package/dist/web/assets/tab-store-C8Zyikmj.js +1 -0
- package/dist/web/assets/table-tab-niRIXhm5.js +2 -0
- package/dist/web/assets/table-tab-niRIXhm5.js.br +0 -0
- package/dist/web/assets/table-tab-niRIXhm5.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-CcsMhJKq.js +1 -0
- package/dist/web/assets/telegram-bot-token-field-CcsMhJKq.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-CcsMhJKq.js.gz +0 -0
- package/dist/web/assets/templ-Bz1re8GV.js +1 -0
- package/dist/web/assets/templ-Bz1re8GV.js.br +0 -0
- package/dist/web/assets/templ-Bz1re8GV.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CfWWDWnb.js +3 -0
- package/dist/web/assets/terminal-tab-CfWWDWnb.js.br +0 -0
- package/dist/web/assets/terminal-tab-CfWWDWnb.js.gz +0 -0
- package/dist/web/assets/tex-BTSBmW-r.js +1 -0
- package/dist/web/assets/tex-BTSBmW-r.js.br +0 -0
- package/dist/web/assets/tex-BTSBmW-r.js.gz +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-4W8EW7Yh.js +61 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-4W8EW7Yh.js.br +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-4W8EW7Yh.js.gz +0 -0
- package/dist/web/assets/tool-cards-BRiwHLQM.js +14 -0
- package/dist/web/assets/tool-cards-BRiwHLQM.js.br +0 -0
- package/dist/web/assets/tool-cards-BRiwHLQM.js.gz +0 -0
- package/dist/web/assets/treemap-KZPCXAKY-a0uFEvBV.js +1 -0
- package/dist/web/assets/ts-tags-BKvdq53h.js +1 -0
- package/dist/web/assets/ts-tags-BKvdq53h.js.br +0 -0
- package/dist/web/assets/ts-tags-BKvdq53h.js.gz +0 -0
- package/dist/web/assets/twig-g5pUi4QE.js +1 -0
- package/dist/web/assets/twig-g5pUi4QE.js.br +0 -0
- package/dist/web/assets/twig-g5pUi4QE.js.gz +0 -0
- package/dist/web/assets/use-at-most-wide-2yOBr4it.js +1 -0
- package/dist/web/assets/use-blob-url-CKz9HiVf.js +1 -0
- package/dist/web/assets/use-db-driver-installed-BHTdleJ4.js +1 -0
- package/dist/web/assets/use-db-read-BZxd05qt.js +1 -0
- package/dist/web/assets/use-db-read-BZxd05qt.js.br +0 -0
- package/dist/web/assets/use-db-read-BZxd05qt.js.gz +0 -0
- package/dist/web/assets/use-db-tab-Cr64E4jG.js +1 -0
- package/dist/web/assets/use-db-tab-Cr64E4jG.js.br +0 -0
- package/dist/web/assets/use-db-tab-Cr64E4jG.js.gz +0 -0
- package/dist/web/assets/use-design-canvas-check-BTaQQFE7.js +1 -0
- package/dist/web/assets/use-design-canvas-check-BTaQQFE7.js.br +0 -0
- package/dist/web/assets/use-design-canvas-check-BTaQQFE7.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CDwi3wup.js +16 -0
- package/dist/web/assets/use-inline-blame-CDwi3wup.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CDwi3wup.js.gz +0 -0
- package/dist/web/assets/use-lsp-BLoLBdkC.js +6 -0
- package/dist/web/assets/use-lsp-BLoLBdkC.js.br +0 -0
- package/dist/web/assets/use-lsp-BLoLBdkC.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-CqVBeKOM.js +1 -0
- package/dist/web/assets/use-opener-focus-BJ2V4yOL.js +1 -0
- package/dist/web/assets/use-process-kill-DdZcs_r5.js +1 -0
- package/dist/web/assets/use-process-kill-DdZcs_r5.js.br +0 -0
- package/dist/web/assets/use-process-kill-DdZcs_r5.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-eLYr9ZWT.js +4 -0
- package/dist/web/assets/use-sql-schema-info-eLYr9ZWT.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-eLYr9ZWT.js.gz +0 -0
- package/dist/web/assets/use-websocket-ClfTQqfz.js +1 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js +45 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.br +0 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.gz +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-CSSSCLbo.js +34 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-CSSSCLbo.js.br +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-CSSSCLbo.js.gz +0 -0
- package/dist/web/assets/video-preview-CLgy5ToN.js +1 -0
- package/dist/web/assets/video-preview-CLgy5ToN.js.br +0 -0
- package/dist/web/assets/video-preview-CLgy5ToN.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-Bjq-jjqt.js +1 -0
- package/dist/web/assets/voice-settings-section-Bjq-jjqt.js.br +0 -0
- package/dist/web/assets/voice-settings-section-Bjq-jjqt.js.gz +0 -0
- package/dist/web/assets/vue-B0IgDz6z.js +1 -0
- package/dist/web/assets/vue-B0IgDz6z.js.br +0 -0
- package/dist/web/assets/vue-B0IgDz6z.js.gz +0 -0
- package/dist/web/assets/vue-html-hcwjAVXX.js +1 -0
- package/dist/web/assets/vue-html-hcwjAVXX.js.br +0 -0
- package/dist/web/assets/vue-html-hcwjAVXX.js.gz +0 -0
- package/dist/web/assets/vue-vine-5lyGNA4R.js +1 -0
- package/dist/web/assets/vue-vine-5lyGNA4R.js.br +0 -0
- package/dist/web/assets/vue-vine-5lyGNA4R.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-De1l63HH.js +1 -0
- package/dist/web/assets/web-preview-tab-De1l63HH.js.br +0 -0
- package/dist/web/assets/web-preview-tab-De1l63HH.js.gz +0 -0
- package/dist/web/assets/window-store-o2qUlxU1.js +1 -0
- package/dist/web/assets/window-store-o2qUlxU1.js.br +0 -0
- package/dist/web/assets/window-store-o2qUlxU1.js.gz +0 -0
- package/dist/web/assets/ws-auth-DISX8w5V.js +1 -0
- package/dist/web/assets/xml-DmDOybPe.js +1 -0
- package/dist/web/assets/xml-DmDOybPe.js.br +0 -0
- package/dist/web/assets/xml-DmDOybPe.js.gz +0 -0
- package/dist/web/assets/xsl-DIyZiiHl.js +1 -0
- package/dist/web/assets/xsl-DIyZiiHl.js.br +0 -0
- package/dist/web/assets/xsl-DIyZiiHl.js.gz +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-3FpyTslg.js +7 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-3FpyTslg.js.br +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-3FpyTslg.js.gz +0 -0
- package/dist/web/index.html +51 -35
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/docs/architecture/ai-chat-and-providers.md +393 -1
- package/docs/architecture/data-and-storage.md +108 -172
- package/docs/architecture/integrations.md +12 -4
- package/docs/architecture/workspace-and-ui.md +192 -9
- package/docs/code-standards.md +30 -1
- package/docs/codebase-summary.md +36 -23
- package/docs/deployment-guide.md +56 -12
- package/docs/project-overview-pdr.md +2 -2
- package/docs/project-roadmap.md +21 -2
- package/docs/system-architecture.md +12 -7
- package/package.json +4 -3
- package/packages/ext-git-graph/src/checkout-pathspec.test.ts +52 -0
- package/packages/ext-git-graph/src/commit-detail-escaping.test.ts +84 -30
- package/packages/ext-git-graph/src/commit-detail-status.test.ts +83 -0
- package/packages/ext-git-graph/src/commit-keeps-typing.test.ts +54 -0
- package/packages/ext-git-graph/src/commit-paging.test.ts +93 -0
- package/packages/ext-git-graph/src/discard-undo-toast.test.ts +46 -0
- package/packages/ext-git-graph/src/extension.ts +517 -308
- package/packages/ext-git-graph/src/fetch-through-ppm.test.ts +152 -0
- package/packages/ext-git-graph/src/git-log-parser.ts +3 -1
- package/packages/ext-git-graph/src/gone-branch-filter.test.ts +65 -0
- package/packages/ext-git-graph/src/inspector-file-icons.test.ts +93 -0
- package/packages/ext-git-graph/src/log-args.test.ts +2 -2
- package/packages/ext-git-graph/src/outside-ref-changes.test.ts +185 -0
- package/packages/ext-git-graph/src/panel-test-harness.ts +242 -0
- package/packages/ext-git-graph/src/ppm-git.test.ts +76 -0
- package/packages/ext-git-graph/src/ppm-git.ts +151 -0
- package/packages/ext-git-graph/src/remote-head-refs.test.ts +32 -0
- package/packages/ext-git-graph/src/request-answers.test.ts +76 -0
- package/packages/ext-git-graph/src/search-marks.test.ts +53 -0
- package/packages/ext-git-graph/src/stash-list.test.ts +56 -0
- package/packages/ext-git-graph/src/types.ts +53 -16
- package/packages/ext-git-graph/src/undo-commit-webview.test.ts +82 -0
- package/packages/ext-git-graph/src/undo-targets-through-ppm.test.ts +164 -0
- package/packages/ext-git-graph/src/webview-html.test.ts +529 -595
- package/packages/ext-git-graph/src/webview-html.ts +144 -3765
- package/packages/ext-git-graph/src/webview-icons.generated.ts +69 -0
- package/packages/ext-git-graph/src/webview-protocol.test.ts +135 -0
- package/packages/ext-git-graph/src/webview-script-actions.ts +1291 -0
- package/packages/ext-git-graph/src/webview-script-core.ts +624 -0
- package/packages/ext-git-graph/src/webview-script-graph.ts +570 -0
- package/packages/ext-git-graph/src/webview-script-inspector.ts +571 -0
- package/packages/ext-git-graph/src/webview-script-list.ts +696 -0
- package/packages/ext-git-graph/src/webview-script-main.ts +279 -0
- package/packages/ext-git-graph/src/webview-script-settings.ts +285 -0
- package/packages/ext-git-graph/src/webview-styles.ts +615 -0
- package/packages/ext-git-graph/src/wip-model.ts +299 -0
- package/scripts/gen-db-driver-locks.ts +41 -0
- package/scripts/gen-file-icons.ts +27 -0
- package/scripts/gen-git-graph-icons.ts +135 -0
- package/scripts/gen-product-icons.ts +34 -0
- package/scripts/vite-glide-eager-editors.ts +37 -0
- package/src/cli/commands/config-cmd.ts +10 -0
- package/src/cli/commands/db-cmd.ts +279 -50
- package/src/cli/commands/logs.ts +26 -7
- package/src/cli/utils/tty-prompt.ts +51 -0
- package/src/index.ts +4 -0
- package/src/lib/account-crypto.ts +6 -0
- package/src/providers/claude-agent-sdk-query-options.ts +111 -0
- package/src/providers/claude-agent-sdk.ts +326 -133
- package/src/providers/claude-warm-spare.ts +26 -9
- package/src/providers/cli-provider-base.ts +28 -5
- package/src/providers/codex-app-server/codex-event-mapper.ts +4 -9
- package/src/providers/codex-app-server/codex-file-baselines.ts +47 -0
- package/src/providers/codex-app-server/codex-history.ts +1 -1
- package/src/providers/codex-app-server/codex-jsonrpc-client.ts +57 -11
- package/src/providers/codex-app-server/codex-patch.ts +68 -4
- package/src/providers/codex-app-server/codex-provider.ts +76 -14
- package/src/providers/codex-app-server/codex-rollout-header.ts +2 -1
- package/src/providers/codex-app-server/codex-rollout-items.ts +22 -0
- package/src/providers/codex-app-server/codex-thread-params.ts +34 -1
- package/src/providers/cursor-cli/cursor-history.ts +2 -1
- package/src/providers/registry.ts +12 -7
- package/src/server/index.ts +224 -103
- package/src/server/middleware/access-log.ts +127 -0
- package/src/server/middleware/auth.ts +8 -0
- package/src/server/routes/accounts.ts +13 -2
- package/src/server/routes/android.ts +6 -0
- package/src/server/routes/chat-file-changes.ts +215 -0
- package/src/server/routes/chat-history-page.ts +116 -0
- package/src/server/routes/chat.ts +125 -38
- package/src/server/routes/database-changeset.ts +178 -0
- package/src/server/routes/database-drivers.ts +36 -0
- package/src/server/routes/database-grid-export.ts +212 -0
- package/src/server/routes/database-grid.ts +317 -0
- package/src/server/routes/database-impexp.ts +317 -0
- package/src/server/routes/database-query.ts +186 -0
- package/src/server/routes/database-route-helpers.ts +130 -0
- package/src/server/routes/database-structure.ts +292 -0
- package/src/server/routes/database.ts +539 -280
- package/src/server/routes/design-settings.ts +30 -6
- package/src/server/routes/git.ts +254 -16
- package/src/server/routes/html-preview.ts +42 -9
- package/src/server/routes/jira-watcher-routes.ts +7 -1
- package/src/server/routes/logs.ts +158 -0
- package/src/server/routes/mcp.ts +11 -1
- package/src/server/routes/notifications.ts +192 -0
- package/src/server/routes/port-forwarding.ts +19 -19
- package/src/server/routes/project-scoped.ts +0 -2
- package/src/server/routes/query-audit-hook.ts +37 -31
- package/src/server/routes/remote-desktop.ts +19 -0
- package/src/server/routes/settings.ts +141 -45
- package/src/server/routes/system-services.ts +12 -6
- package/src/server/routes/tailscale.ts +70 -0
- package/src/server/routes/trace.ts +4 -1
- package/src/server/routes/tunnel-spawn.ts +55 -12
- package/src/server/routes/tunnel.ts +5 -0
- package/src/server/routes/tunnels.ts +63 -11
- package/src/server/routes/upgrade.ts +5 -1
- package/src/server/ws/android.ts +36 -11
- package/src/server/ws/chat.ts +294 -69
- package/src/server/ws/extensions.ts +13 -10
- package/src/server/ws/global.ts +14 -0
- package/src/server/ws/group-chat.ts +5 -0
- package/src/server/ws/lsp.ts +29 -4
- package/src/server/ws/remote-desktop.ts +25 -9
- package/src/server/ws/terminal.ts +8 -1
- package/src/services/account-pick.service.ts +1 -1
- package/src/services/account-selector.service.ts +76 -14
- package/src/services/account.service.ts +54 -23
- package/src/services/agent-transcript/agent-transcript-activity.ts +11 -4
- package/src/services/ai-chat-env.ts +28 -0
- package/src/services/android/android-operations.ts +10 -0
- package/src/services/android/android-session.ts +20 -0
- package/src/services/android/android-video.ts +41 -7
- package/src/services/android/avd-manager.ts +21 -3
- package/src/services/android/emulator-launcher.ts +40 -2
- package/src/services/autostart-register.ts +24 -8
- package/src/services/bash-output-spy.ts +6 -3
- package/src/services/binary-content.ts +8 -0
- package/src/services/binary-upgrade-apply.ts +5 -0
- package/src/services/binary-upgrade-download.ts +9 -1
- package/src/services/binary-upgrade-swap.ts +18 -3
- package/src/services/chat-prepare/chat-prepare.service.ts +4 -1
- package/src/services/chat-prepare/settle-within-budget.ts +10 -3
- package/src/services/chat-search.service.ts +4 -2
- package/src/services/chat.service.ts +115 -5
- package/src/services/claude-transcript-exists.ts +24 -0
- package/src/services/cloud-ws.service.ts +46 -12
- package/src/services/cloud.service.ts +40 -9
- package/src/services/cloudflared.service.ts +25 -3
- package/src/services/codex-account-cooldown.ts +4 -0
- package/src/services/codex-account-login.ts +15 -4
- package/src/services/compact-segment.ts +156 -0
- package/src/services/compaction-savings.ts +8 -2
- package/src/services/config-secret-keys.ts +2 -0
- package/src/services/config.service.ts +44 -6
- package/src/services/database/analyser-mysql.ts +384 -0
- package/src/services/database/analyser-postgres.ts +259 -0
- package/src/services/database/analyser-sqlite.ts +411 -0
- package/src/services/database/changeset.service.ts +60 -0
- package/src/services/database/changeset.ts +473 -0
- package/src/services/database/connection-config.ts +370 -0
- package/src/services/database/connection-database.ts +90 -0
- package/src/services/database/connection-endpoint.ts +160 -0
- package/src/services/database/connection-login.ts +144 -0
- package/src/services/database/connection-test.ts +191 -0
- package/src/services/database/db-errors.ts +57 -0
- package/src/services/database/db-values.ts +45 -0
- package/src/services/database/ddl/ddl-common.ts +47 -0
- package/src/services/database/ddl/ddl-mysql.ts +202 -0
- package/src/services/database/ddl/ddl-objects.ts +116 -0
- package/src/services/database/ddl/ddl-postgres.ts +208 -0
- package/src/services/database/ddl/ddl-sqlite.ts +172 -0
- package/src/services/database/ddl/ddl-types.ts +61 -0
- package/src/services/database/ddl/sqlite-alter-plan.ts +61 -0
- package/src/services/database/ddl/sqlite-apply.ts +112 -0
- package/src/services/database/ddl/sqlite-recreate.ts +202 -0
- package/src/services/database/ddl/table-diff.ts +187 -0
- package/src/services/database/dialect-mysql.ts +58 -0
- package/src/services/database/dialect-postgres.ts +52 -0
- package/src/services/database/dialect-sqlite.ts +30 -0
- package/src/services/database/dialect.ts +108 -0
- package/src/services/database/dialects.ts +20 -0
- package/src/services/database/drivers/db-driver-catalog.ts +99 -0
- package/src/services/database/drivers/db-driver-install.ts +348 -0
- package/src/services/database/drivers/db-driver-loader.ts +103 -0
- package/src/services/database/drivers/db-driver-locks.generated.json +201 -0
- package/src/services/database/drivers/db-driver-store.ts +75 -0
- package/src/services/database/export-batch.ts +68 -0
- package/src/services/database/file-database.ts +105 -0
- package/src/services/database/grid-cell.ts +80 -0
- package/src/services/database/grid-export-text.ts +318 -0
- package/src/services/database/grid-export-tickets.ts +61 -0
- package/src/services/database/grid-export-xlsx.ts +296 -0
- package/src/services/database/grid-export.ts +13 -0
- package/src/services/database/grid-query-builder.ts +397 -0
- package/src/services/database/grid.service.ts +157 -0
- package/src/services/database/host-files.ts +52 -0
- package/src/services/database/impexp/column-map.ts +58 -0
- package/src/services/database/impexp/export-job-runner.ts +281 -0
- package/src/services/database/impexp/impexp-files.ts +118 -0
- package/src/services/database/impexp/impexp-job-store.ts +195 -0
- package/src/services/database/impexp/impexp-request.ts +279 -0
- package/src/services/database/impexp/import-job-runner.ts +181 -0
- package/src/services/database/impexp/import-table-writer.ts +319 -0
- package/src/services/database/impexp/import-uploads.ts +167 -0
- package/src/services/database/impexp/readers/csv-reader.ts +359 -0
- package/src/services/database/impexp/readers/file-rows.ts +59 -0
- package/src/services/database/impexp/readers/file-text.ts +80 -0
- package/src/services/database/impexp/readers/json-reader.ts +505 -0
- package/src/services/database/impexp/zip-output.ts +55 -0
- package/src/services/database/init-adapters.ts +4 -0
- package/src/services/database/isolation-level.ts +18 -0
- package/src/services/database/mysql-adapter.ts +62 -0
- package/src/services/database/object-scripts.ts +20 -0
- package/src/services/database/object-sql-mysql.ts +53 -0
- package/src/services/database/object-sql-postgres.ts +265 -0
- package/src/services/database/object-sql-sqlite.ts +25 -0
- package/src/services/database/postgres-adapter.ts +93 -23
- package/src/services/database/postgres-array-nulls.ts +101 -0
- package/src/services/database/postgres-connect-options.ts +92 -0
- package/src/services/database/query-script-runner.ts +203 -0
- package/src/services/database/readonly-check.ts +39 -15
- package/src/services/database/sqlite-adapter.ts +100 -17
- package/src/services/database/ssh-agent-socket.ts +50 -0
- package/src/services/database/ssh-known-hosts.ts +113 -0
- package/src/services/database/ssh-tunnel.ts +613 -0
- package/src/services/database/structure-change-request.ts +214 -0
- package/src/services/database/structure-edit.service.ts +143 -0
- package/src/services/database/tls-identity-check.ts +81 -0
- package/src/services/db-backup/db-backup-restore.ts +14 -2
- package/src/services/db.service.ts +153 -54
- package/src/services/design/bridge/bridge-script.ts +14 -6
- package/src/services/design/bridge/html-preview-bridge.ts +23 -0
- package/src/services/design/comments/design-comments-store.ts +7 -2
- package/src/services/design/design-skill-install.service.ts +269 -0
- package/src/services/design/design-turn-snapshot.ts +5 -2
- package/src/services/design/mcp/design-mcp-endpoint.ts +15 -77
- package/src/services/design/mcp/design-mcp-tokens.ts +9 -65
- package/src/services/design/preview/design-preview-html.ts +1 -1
- package/src/services/draft.service.ts +10 -3
- package/src/services/edge-forwarder.ts +50 -3
- package/src/services/event-loop-lag.ts +37 -2
- package/src/services/extension-host-worker.ts +41 -6
- package/src/services/extension-installer.ts +13 -5
- package/src/services/extension-manifest.ts +9 -2
- package/src/services/extension-rpc-handlers.ts +39 -4
- package/src/services/extension-rpc.ts +31 -2
- package/src/services/extension.service.ts +48 -13
- package/src/services/file-lines.ts +2 -2
- package/src/services/file-list-index.service.ts +17 -1
- package/src/services/file-watcher/linux-inotify.ts +47 -6
- package/src/services/file-watcher/watch-tree.ts +42 -6
- package/src/services/file-watcher.service.ts +15 -7
- package/src/services/file.service.ts +6 -0
- package/src/services/fs-ops/fs-core-ops.ts +5 -1
- package/src/services/fs-ops/fs-git-init.service.ts +13 -1
- package/src/services/fs-ops/fs-ops-copy-move.service.ts +5 -0
- package/src/services/fs-ops/fs-ops-mutate.service.ts +6 -1
- package/src/services/fs-ops/fs-ops-trash.service.ts +17 -3
- package/src/services/git-changes/diff-sections.ts +230 -0
- package/src/services/git-changes/git-changes.service.ts +471 -0
- package/src/services/git-changes/git-events.ts +28 -0
- package/src/services/git-changes/git-operation.ts +86 -0
- package/src/services/git-changes/porcelain-v2.ts +117 -0
- package/src/services/git-commit-draft.service.ts +51 -0
- package/src/services/git-discard-journal/git-discard-journal.service.ts +412 -0
- package/src/services/git-hunks/git-hunks.service.ts +50 -11
- package/src/services/git-workflow/git-workflow.service.ts +198 -0
- package/src/services/git.service.ts +64 -8
- package/src/services/group-chat/group-chat.service.ts +31 -5
- package/src/services/group-chat/responder-router.ts +15 -3
- package/src/services/host-info/host-info.service.ts +16 -0
- package/src/services/host-info/spawn-runner.ts +25 -0
- package/src/services/jira-config.service.ts +13 -1
- package/src/services/jira-debug-session.service.ts +19 -4
- package/src/services/jira-watcher.service.ts +53 -11
- package/src/services/jsonl-transcript-parser.ts +49 -19
- package/src/services/log-level-config.ts +36 -0
- package/src/services/logger.ts +280 -0
- package/src/services/logs/browser-logs.ts +84 -0
- package/src/services/logs/github-issues.ts +76 -0
- package/src/services/logs/log-ai.ts +40 -0
- package/src/services/logs/log-columns.ts +160 -0
- package/src/services/logs/log-environment.ts +94 -0
- package/src/services/logs/log-file-index.ts +355 -0
- package/src/services/logs/log-issues.ts +390 -0
- package/src/services/logs/log-live.ts +82 -0
- package/src/services/logs/log-report-draft.ts +63 -0
- package/src/services/logs/log-store.ts +609 -0
- package/src/services/lsp/lsp-install.ts +199 -11
- package/src/services/lsp/lsp-manager.ts +31 -7
- package/src/services/lsp/lsp-release-catalog.ts +87 -0
- package/src/services/lsp/lsp-session.ts +29 -2
- package/src/services/lsp/server-registry.ts +85 -18
- package/src/services/mcp-http-endpoint.ts +127 -0
- package/src/services/mcp-oauth/mcp-oauth-flows.ts +11 -4
- package/src/services/mcp-session-tokens.ts +77 -0
- package/src/services/media-transcode/ffmpeg-capabilities.ts +33 -2
- package/src/services/media-transcode/transcode-stream.ts +7 -1
- package/src/services/memory-diagnostics.ts +86 -0
- package/src/services/mysql.service.ts +1065 -0
- package/src/services/named-tunnel/cloudflared-login-helpers.ts +4 -2
- package/src/services/named-tunnel/cloudflared-login.service.ts +15 -2
- package/src/services/named-tunnel/named-tunnel-setup-confirm.ts +7 -1
- package/src/services/named-tunnel/named-tunnel-setup.service.ts +9 -1
- package/src/services/nested-subagent-spy.ts +7 -4
- package/src/services/notification-format.ts +74 -0
- package/src/services/notification-link.ts +22 -0
- package/src/services/notification.service.ts +157 -12
- package/src/services/ntfy-notification.service.ts +134 -0
- package/src/services/picked-account-binding.ts +7 -1
- package/src/services/port-forward/forward-hop.ts +296 -0
- package/src/services/port-forward/frame-ancestors.ts +117 -0
- package/src/services/port-forward/tailscale-forward.ts +261 -0
- package/src/services/postgres.service.ts +815 -21
- package/src/services/ppmbot/cli-reference-default.ts +17 -4
- package/src/services/ppmbot/ppmbot-delegation.ts +8 -0
- package/src/services/ppmbot/ppmbot-service.ts +58 -46
- package/src/services/ppmbot/ppmbot-session.ts +14 -10
- package/src/services/ppmbot/ppmbot-streamer.ts +6 -3
- package/src/services/ppmbot/ppmbot-telegram.ts +45 -13
- package/src/services/project.service.ts +12 -1
- package/src/services/provider-usage/usage-registry.ts +12 -2
- package/src/services/proxy-agent-anthropic-bridge.ts +11 -1
- package/src/services/proxy-agent-bridge.ts +11 -1
- package/src/services/proxy-agent-turn.ts +25 -2
- package/src/services/proxy-image-bridge.ts +2 -2
- package/src/services/proxy-openai-bridge.ts +1 -1
- package/src/services/proxy-sdk-bridge.ts +1 -1
- package/src/services/proxy.service.ts +32 -9
- package/src/services/query-audit/query-audit.service.ts +10 -2
- package/src/services/read-lines.ts +16 -4
- package/src/services/redact-secrets.ts +23 -2
- package/src/services/remote-desktop/ffmpeg-install.ts +85 -0
- package/src/services/remote-desktop/mediamtx-install.service.ts +11 -2
- package/src/services/remote-desktop/mediamtx-process.ts +31 -2
- package/src/services/remote-desktop/remote-desktop-audio.ts +24 -7
- package/src/services/remote-desktop/remote-desktop-capture-input.ts +7 -4
- package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +30 -10
- package/src/services/remote-desktop/remote-desktop-capture.ts +40 -6
- package/src/services/remote-desktop/remote-desktop-displays-win32.ts +92 -0
- package/src/services/remote-desktop/remote-desktop-displays.ts +8 -5
- package/src/services/remote-desktop/remote-desktop-input-uinput.ts +20 -1
- package/src/services/remote-desktop/remote-desktop-input-win32.ts +49 -9
- package/src/services/remote-desktop/remote-desktop-portal.ts +19 -3
- package/src/services/remote-desktop/remote-desktop-privacy.ts +8 -1
- package/src/services/remote-desktop/remote-desktop-requirements.ts +3 -2
- package/src/services/remote-desktop/remote-desktop-resolution.ts +6 -0
- package/src/services/remote-desktop/remote-desktop-session.ts +111 -27
- package/src/services/remote-desktop/remote-desktop-x11.ts +25 -2
- package/src/services/scheduler-core.ts +22 -10
- package/src/services/scheduler-runner.ts +28 -10
- package/src/services/sd-notify.ts +26 -2
- package/src/services/session-file-baselines/reverse-unified-diff.ts +85 -0
- package/src/services/session-file-baselines/session-file-baselines.service.ts +241 -0
- package/src/services/session-file-baselines/session-file-blame.ts +200 -0
- package/src/services/session-file-baselines/session-file-changes.service.ts +321 -0
- package/src/services/session-file-baselines/session-file-history.ts +347 -0
- package/src/services/session-file-baselines/session-review-actions.ts +560 -0
- package/src/services/session-file-baselines/session-review-blocks.ts +90 -0
- package/src/services/session-file-baselines/session-review-marks.ts +90 -0
- package/src/services/session-file-baselines/session-turn-revert.ts +374 -0
- package/src/services/session-file-baselines/shell-change-tracker.ts +489 -0
- package/src/services/session-trace/session-trace-db.ts +14 -1
- package/src/services/session-trace/session-trace-store.ts +56 -0
- package/src/services/session-trace/turn-stop-reader.ts +70 -0
- package/src/services/speech-to-text/whisper-install.service.ts +13 -1
- package/src/services/sqlite-types.ts +2 -0
- package/src/services/sqlite.service.ts +507 -13
- package/src/services/supervisor-state.ts +6 -4
- package/src/services/supervisor-stopped-page.ts +6 -6
- package/src/services/supervisor.ts +118 -44
- package/src/services/system-metrics/gpu-collector-nvidia.ts +13 -3
- package/src/services/system-metrics/kill-request-handler.ts +9 -8
- package/src/services/system-metrics/powershell-session.ts +40 -7
- package/src/services/system-metrics/process-collector-windows.ts +4 -3
- package/src/services/system-metrics/process-net-collector-darwin.ts +13 -5
- package/src/services/system-metrics/signal-request-handler.ts +9 -8
- package/src/services/system-metrics/system-metrics-platform.ts +11 -2
- package/src/services/system-metrics/system-metrics.service.ts +31 -4
- package/src/services/system-services/app-icon-service.ts +19 -1
- package/src/services/system-services/app-icons-windows.ts +105 -0
- package/src/services/system-services/apps-windows-native.ts +233 -0
- package/src/services/system-services/apps-windows.ts +156 -0
- package/src/services/system-services/launchd-collector.ts +12 -1
- package/src/services/system-services/service-backend.ts +6 -3
- package/src/services/system-services/systemd-collector.ts +9 -1
- package/src/services/system-services/windows-services-parse.ts +186 -0
- package/src/services/system-services/windows-services.ts +200 -0
- package/src/services/tab-tools-mcp/tab-open-broker.ts +135 -0
- package/src/services/tab-tools-mcp/tab-target.ts +88 -0
- package/src/services/tab-tools-mcp/tab-tools-mcp-endpoint.ts +116 -0
- package/src/services/tab-tools-mcp/tab-tools-mcp-tokens.ts +36 -0
- package/src/services/tab-tools-mcp/tab-tools-mcp-tool.ts +78 -0
- package/src/services/table-cache.service.ts +4 -2
- package/src/services/tailscale/tailscale-app-service.ts +239 -0
- package/src/services/tailscale/tailscale-cli.ts +48 -0
- package/src/services/tailscale/tailscale-login.ts +257 -0
- package/src/services/tailscale/tailscale-state.ts +198 -0
- package/src/services/telegram-bot-api.ts +80 -0
- package/src/services/telegram-bots.ts +131 -0
- package/src/services/telegram-connect.service.ts +262 -0
- package/src/services/telegram-notification.service.ts +48 -55
- package/src/services/terminal.service.ts +46 -11
- package/src/services/theme-import/fetch-url.ts +11 -2
- package/src/services/tunnel-registry-parse.ts +4 -0
- package/src/services/tunnel.service.ts +15 -0
- package/src/services/upgrade.service.ts +30 -2
- package/src/services/web-push/web-push-crypto.ts +150 -0
- package/src/services/web-push/web-push-store.ts +116 -0
- package/src/services/web-push/web-push.service.ts +240 -0
- package/src/shared/agent-transcript-protocol.ts +4 -1
- package/src/shared/chat-reply.ts +51 -0
- package/src/shared/db-changeset.ts +89 -0
- package/src/shared/db-column-kind.ts +90 -0
- package/src/shared/db-connection-config.ts +256 -0
- package/src/shared/db-connection-url.ts +252 -0
- package/src/shared/db-drivers.ts +36 -0
- package/src/shared/db-explorer-prefs.ts +123 -0
- package/src/shared/db-filter-parser.ts +534 -0
- package/src/shared/db-grid-export.ts +88 -0
- package/src/shared/db-grid.ts +234 -0
- package/src/shared/db-impexp.ts +313 -0
- package/src/shared/db-lookup-prefs.ts +37 -0
- package/src/shared/db-query-script.ts +110 -0
- package/src/shared/db-structure-change.ts +83 -0
- package/src/shared/db-structure.ts +195 -0
- package/src/shared/db-table-model.ts +500 -0
- package/src/shared/db-types.ts +31 -0
- package/src/shared/design-canvas-check-format.ts +23 -0
- package/src/shared/design-skill-suggestion.ts +20 -4
- package/src/shared/git-changes.ts +220 -0
- package/src/shared/log-fingerprint.ts +32 -0
- package/src/shared/log-levels.ts +41 -0
- package/src/shared/log-redact.ts +82 -0
- package/src/shared/logs-api.ts +145 -0
- package/src/shared/logs-model.ts +230 -0
- package/src/shared/notification-settings.ts +184 -0
- package/src/shared/ppmbot-telegram.ts +16 -0
- package/src/shared/review-blocks.ts +222 -0
- package/src/shared/session-file-changes.ts +136 -0
- package/src/shared/split-sql-statements.ts +388 -0
- package/src/shared/sql-identifiers.ts +97 -0
- package/src/shared/tab-open-protocol.ts +70 -0
- package/src/shared/tailscale-setup.ts +126 -0
- package/src/shared/terminal-size.ts +23 -0
- package/src/shared/tool-result-content.ts +5 -0
- package/src/shared/turn-stop.ts +30 -0
- package/src/shared/user-agent-label.ts +59 -0
- package/src/shared/web-push-payload.ts +41 -0
- package/src/types/api.ts +12 -3
- package/src/types/chat.ts +6 -0
- package/src/types/config.ts +25 -0
- package/src/types/database.ts +215 -7
- package/src/types/system-metrics.ts +9 -5
- package/src/types/system-services.ts +8 -3
- package/src/web/app.tsx +31 -7
- package/src/web/components/auth/login-screen.tsx +21 -10
- package/src/web/components/chat/change-file-row.tsx +1 -79
- package/src/web/components/chat/chat-history-bar.tsx +13 -8
- package/src/web/components/chat/chat-tab.tsx +186 -40
- package/src/web/components/chat/chat-toolbar-overflow-menu.tsx +7 -1
- package/src/web/components/chat/message-action-bar.tsx +3 -1
- package/src/web/components/chat/message-input.tsx +75 -14
- package/src/web/components/chat/message-list.tsx +146 -9
- package/src/web/components/chat/message-reply-reference.ts +43 -0
- package/src/web/components/chat/message-user-bubble.tsx +10 -3
- package/src/web/components/chat/model-thinking-selector.tsx +6 -4
- package/src/web/components/chat/prompt-cache-chip.tsx +1 -1
- package/src/web/components/chat/reply-card.tsx +28 -0
- package/src/web/components/chat/running-agents-bar.tsx +180 -58
- package/src/web/components/chat/session-change-row.tsx +118 -0
- package/src/web/components/chat/session-changes-bar.tsx +223 -0
- package/src/web/components/chat/session-changes-context.tsx +21 -0
- package/src/web/components/chat/tab-tool-card.tsx +93 -0
- package/src/web/components/chat/tool-cards.tsx +11 -0
- package/src/web/components/chat/turn-change-pill.tsx +20 -2
- package/src/web/components/chat/turn-change-review.tsx +383 -0
- package/src/web/components/chat/turn-change-rollup.tsx +15 -4
- package/src/web/components/chat/turn-change-sheet.tsx +103 -94
- package/src/web/components/chat/turn-change-tray.tsx +90 -93
- package/src/web/components/chat/turn-stop-bar.tsx +42 -0
- package/src/web/components/chat/user-message-parse.ts +5 -2
- package/src/web/components/database/connection-color-picker.tsx +42 -46
- package/src/web/components/database/connection-form/connection-advanced-pane.tsx +82 -0
- package/src/web/components/database/connection-form/connection-form-state.ts +719 -0
- package/src/web/components/database/connection-form/connection-form-tab.tsx +160 -0
- package/src/web/components/database/connection-form/connection-general-pane.tsx +231 -0
- package/src/web/components/database/connection-form/connection-ssh-pane.tsx +136 -0
- package/src/web/components/database/connection-form/connection-ssl-pane.tsx +68 -0
- package/src/web/components/database/connection-form/connection-test-result.tsx +90 -0
- package/src/web/components/database/connection-form/database-picker.tsx +136 -0
- package/src/web/components/database/connection-form/engine-tiles.tsx +72 -0
- package/src/web/components/database/connection-form/form-controls.tsx +219 -0
- package/src/web/components/database/connection-form/use-connection-form.ts +369 -0
- package/src/web/components/database/connection-import-export.tsx +6 -5
- package/src/web/components/database/connections-section/connection-menus.ts +100 -0
- package/src/web/components/database/connections-section/connection-tree-model.ts +113 -0
- package/src/web/components/database/connections-section/connections-section.tsx +432 -0
- package/src/web/components/database/connections-section/delete-connection-dialog.tsx +75 -0
- package/src/web/components/database/connections-section/folder-name-input.tsx +41 -0
- package/src/web/components/database/database-sidebar.tsx +55 -78
- package/src/web/components/database/db-login/db-login-dialog.tsx +255 -0
- package/src/web/components/database/db-login/db-login-store.ts +63 -0
- package/src/web/components/database/db-rows-status.tsx +32 -0
- package/src/web/components/database/db-sidebar-reveal.ts +66 -0
- package/src/web/components/database/db-tab-parts.tsx +117 -0
- package/src/web/components/database/driver-missing-notice.tsx +72 -0
- package/src/web/components/database/explorer/db-explorer-store.ts +658 -0
- package/src/web/components/database/explorer/explorer-menu.tsx +193 -0
- package/src/web/components/database/explorer/explorer-model.ts +341 -0
- package/src/web/components/database/explorer/open-db-tabs.ts +160 -0
- package/src/web/components/database/explorer/open-new-query.ts +22 -0
- package/src/web/components/database/explorer/open-new-table.ts +37 -0
- package/src/web/components/database/explorer/sql-templates.ts +110 -0
- package/src/web/components/database/explorer/tree-parts.tsx +109 -0
- package/src/web/components/database/explorer/use-db-explorer-sync.ts +25 -0
- package/src/web/components/database/explorer/use-row-menu.ts +37 -0
- package/src/web/components/database/explorer/use-tree-keys.ts +92 -0
- package/src/web/components/database/export-button.tsx +96 -113
- package/src/web/components/database/extract-query-table.ts +4 -3
- package/src/web/components/database/focused-database-prompt.tsx +85 -0
- package/src/web/components/database/glide-context-menu.tsx +52 -62
- package/src/web/components/database/glide-data-grid.tsx +1401 -157
- package/src/web/components/database/glide-grid-theme.ts +49 -2
- package/src/web/components/database/glide-grid-types.ts +222 -48
- package/src/web/components/database/glide-header-menu.tsx +52 -103
- package/src/web/components/database/glide-save-bar.tsx +4 -3
- package/src/web/components/database/grid/cell-context-menu.tsx +151 -0
- package/src/web/components/database/grid/cell-data-formats.ts +298 -0
- package/src/web/components/database/grid/cell-data-panel.tsx +662 -0
- package/src/web/components/database/grid/cell-display.ts +52 -0
- package/src/web/components/database/grid/cell-editor.tsx +55 -0
- package/src/web/components/database/grid/cell-menu.ts +210 -0
- package/src/web/components/database/grid/change-marks.ts +51 -0
- package/src/web/components/database/grid/column-filter-cell.ts +34 -0
- package/src/web/components/database/grid/column-menu.ts +51 -0
- package/src/web/components/database/grid/columns-panel.tsx +241 -0
- package/src/web/components/database/grid/columns-sheet.tsx +172 -0
- package/src/web/components/database/grid/copy-as.ts +170 -0
- package/src/web/components/database/grid/dictionary-lookup-dialog.tsx +169 -0
- package/src/web/components/database/grid/fetch-all-dialog.tsx +51 -0
- package/src/web/components/database/grid/filter-chips.tsx +107 -0
- package/src/web/components/database/grid/filter-dialog-frame.tsx +95 -0
- package/src/web/components/database/grid/filter-dialog-host.tsx +43 -0
- package/src/web/components/database/grid/filter-funnel-menu.ts +131 -0
- package/src/web/components/database/grid/filter-multiple-values-dialog.tsx +61 -0
- package/src/web/components/database/grid/filter-row.tsx +216 -0
- package/src/web/components/database/grid/filter-sheet.tsx +227 -0
- package/src/web/components/database/grid/filters-panel.tsx +163 -0
- package/src/web/components/database/grid/fk-cell-button.ts +67 -0
- package/src/web/components/database/grid/fk-cell-editor.tsx +36 -0
- package/src/web/components/database/grid/form-view-model.ts +263 -0
- package/src/web/components/database/grid/form-view.tsx +505 -0
- package/src/web/components/database/grid/generate-sql-dialog.tsx +135 -0
- package/src/web/components/database/grid/generate-sql.ts +101 -0
- package/src/web/components/database/grid/grid-changeset.ts +262 -0
- package/src/web/components/database/grid/grid-filters.ts +172 -0
- package/src/web/components/database/grid/grid-header-overlay.tsx +140 -0
- package/src/web/components/database/grid/grid-save-dialog.tsx +251 -0
- package/src/web/components/database/grid/grid-save-host.tsx +19 -0
- package/src/web/components/database/grid/grid-save-model.ts +64 -0
- package/src/web/components/database/grid/grid-save-store.ts +65 -0
- package/src/web/components/database/grid/grid-status-bar.tsx +54 -0
- package/src/web/components/database/grid/header-bands.ts +232 -0
- package/src/web/components/database/grid/json-document.ts +139 -0
- package/src/web/components/database/grid/json-tree.tsx +74 -0
- package/src/web/components/database/grid/load-more.ts +22 -0
- package/src/web/components/database/grid/master-detail-split.tsx +233 -0
- package/src/web/components/database/grid/pick-table.tsx +109 -0
- package/src/web/components/database/grid/reference-filter.ts +48 -0
- package/src/web/components/database/grid/references-panel.tsx +82 -0
- package/src/web/components/database/grid/references.ts +104 -0
- package/src/web/components/database/grid/refresh-menu.tsx +133 -0
- package/src/web/components/database/grid/row-form-sheet.tsx +234 -0
- package/src/web/components/database/grid/selection-commands.ts +124 -0
- package/src/web/components/database/grid/selection-stats.ts +131 -0
- package/src/web/components/database/grid/set-filter-dialog.tsx +93 -0
- package/src/web/components/database/grid/table-keys.ts +130 -0
- package/src/web/components/database/grid/table-toolbar.tsx +326 -0
- package/src/web/components/database/grid/table-view-state.ts +63 -0
- package/src/web/components/database/grid/text-value-dialog.tsx +80 -0
- package/src/web/components/database/grid/use-cell-long-press.ts +146 -0
- package/src/web/components/database/grid/use-changeset.ts +48 -0
- package/src/web/components/database/grid/use-filter-pickers.ts +76 -0
- package/src/web/components/database/grid/use-grid-copy.ts +99 -0
- package/src/web/components/database/grid/use-opener-focus.ts +17 -0
- package/src/web/components/database/grid/use-pick-search.ts +38 -0
- package/src/web/components/database/grid/use-table-filters.ts +84 -0
- package/src/web/components/database/grid/value-filter-text.ts +96 -0
- package/src/web/components/database/grid/value-lookup-dialog.tsx +91 -0
- package/src/web/components/database/impexp/impexp-columns-dialog.tsx +171 -0
- package/src/web/components/database/impexp/impexp-config.tsx +131 -0
- package/src/web/components/database/impexp/impexp-database-fields.tsx +107 -0
- package/src/web/components/database/impexp/impexp-file-input.tsx +118 -0
- package/src/web/components/database/impexp/impexp-format-options.tsx +127 -0
- package/src/web/components/database/impexp/impexp-map-table.tsx +187 -0
- package/src/web/components/database/impexp/impexp-parts.tsx +77 -0
- package/src/web/components/database/impexp/impexp-side-panes.tsx +191 -0
- package/src/web/components/database/impexp/impexp-state.ts +590 -0
- package/src/web/components/database/impexp/impexp-tab.tsx +222 -0
- package/src/web/components/database/impexp/impexp-tables-select.tsx +169 -0
- package/src/web/components/database/impexp/impexp-upload.ts +52 -0
- package/src/web/components/database/impexp/open-impexp-tab.ts +58 -0
- package/src/web/components/database/impexp/use-impexp-database.ts +75 -0
- package/src/web/components/database/impexp/use-impexp-job.ts +114 -0
- package/src/web/components/database/object-tree/object-menus.ts +141 -0
- package/src/web/components/database/object-tree/object-tree-model.ts +132 -0
- package/src/web/components/database/object-tree/objects-section.tsx +503 -0
- package/src/web/components/database/open-connection-form.ts +21 -0
- package/src/web/components/database/query/discard-result-edits-dialog.tsx +43 -0
- package/src/web/components/database/query/format-sql.ts +67 -0
- package/src/web/components/database/query/history-panel.tsx +177 -0
- package/src/web/components/database/query/messages-panel.tsx +98 -0
- package/src/web/components/database/query/query-file.ts +56 -0
- package/src/web/components/database/query/query-history.ts +56 -0
- package/src/web/components/database/query/query-run-state.ts +282 -0
- package/src/web/components/database/query/query-tab.tsx +397 -0
- package/src/web/components/database/query/query-target-picker.tsx +95 -0
- package/src/web/components/database/query/result-tabs.tsx +104 -0
- package/src/web/components/database/query/result-view.tsx +111 -0
- package/src/web/components/database/query/use-query-file-save.tsx +117 -0
- package/src/web/components/database/query/use-query-runner.ts +202 -0
- package/src/web/components/database/query/use-sql-schema-info.ts +40 -0
- package/src/web/components/database/reformat-cursor.ts +40 -0
- package/src/web/components/database/sidebar-split.tsx +89 -0
- package/src/web/components/database/sql-completion-provider.ts +149 -49
- package/src/web/components/database/sql-object/sql-object-model.ts +39 -0
- package/src/web/components/database/sql-object/sql-object-tab.tsx +138 -0
- package/src/web/components/database/sql-query-editor.tsx +203 -36
- package/src/web/components/database/sql-run.ts +40 -0
- package/src/web/components/database/structure/structure-model.ts +90 -0
- package/src/web/components/database/structure/structure-tab.tsx +326 -0
- package/src/web/components/database/table/table-tab.tsx +694 -0
- package/src/web/components/database/table-editor/column-dialog.tsx +129 -0
- package/src/web/components/database/table-editor/editor-dialog.tsx +122 -0
- package/src/web/components/database/table-editor/foreign-key-dialog.tsx +188 -0
- package/src/web/components/database/table-editor/key-dialog.tsx +197 -0
- package/src/web/components/database/table-editor/rename-object-dialog.tsx +45 -0
- package/src/web/components/database/table-editor/structure-save-dialog.tsx +167 -0
- package/src/web/components/database/table-editor/structure-save-host.tsx +24 -0
- package/src/web/components/database/table-editor/structure-save-model.ts +91 -0
- package/src/web/components/database/table-editor/structure-save-store.ts +52 -0
- package/src/web/components/database/table-editor/table-editor-commands.ts +27 -0
- package/src/web/components/database/table-editor/table-editor-dialogs.tsx +32 -0
- package/src/web/components/database/table-editor/table-editor-model.ts +252 -0
- package/src/web/components/database/table-editor/table-editor.tsx +485 -0
- package/src/web/components/database/table-editor/use-table-editor-tab.ts +145 -0
- package/src/web/components/database/use-connections.ts +39 -85
- package/src/web/components/database/use-database.ts +419 -214
- package/src/web/components/database/use-db-read.ts +88 -0
- package/src/web/components/database/use-db-tab.ts +68 -0
- package/src/web/components/database/use-glide-cell-content.ts +81 -88
- package/src/web/components/database/use-glide-columns.ts +16 -32
- package/src/web/components/database/use-glide-grid-actions.ts +44 -99
- package/src/web/components/database/use-glide-selection.ts +6 -18
- package/src/web/components/design/design-skill-suggestion.tsx +46 -11
- package/src/web/components/design/design-split-layout.tsx +106 -10
- package/src/web/components/design/design-tab-context.ts +2 -0
- package/src/web/components/design/design-tab.tsx +5 -1
- package/src/web/components/design/design-toolbar.tsx +13 -2
- package/src/web/components/design/use-design-layout.ts +7 -4
- package/src/web/components/editor/code-editor.tsx +81 -47
- package/src/web/components/editor/conflict-editor.tsx +4 -1
- package/src/web/components/editor/diff-viewer.tsx +40 -4
- package/src/web/components/editor/editor-fix-with-ai.tsx +111 -0
- package/src/web/components/editor/editor-selection-context.tsx +70 -0
- package/src/web/components/editor/html-preview.tsx +48 -9
- package/src/web/components/editor/lsp-status.tsx +18 -4
- package/src/web/components/editor/video-player/video-player-controls.tsx +19 -3
- package/src/web/components/editor/video-player/video-player.tsx +67 -14
- package/src/web/components/extensions/extension-webview.tsx +44 -9
- package/src/web/components/extensions/webview-external-link.ts +29 -0
- package/src/web/components/extensions/webview-file-icons.ts +87 -0
- package/src/web/components/extensions/webview-theme.ts +12 -0
- package/src/web/components/floating-window/close-window.ts +32 -0
- package/src/web/components/floating-window/floating-window.tsx +65 -24
- package/src/web/components/floating-window/open-tab-in-pip.ts +3 -0
- package/src/web/components/floating-window/use-window-drag.ts +33 -7
- package/src/web/components/floating-window/use-window-meta.ts +138 -0
- package/src/web/components/floating-window/window-chrome-contract.ts +19 -2
- package/src/web/components/floating-window/window-content-registry.ts +2 -0
- package/src/web/components/floating-window/window-dock-layout.ts +72 -0
- package/src/web/components/floating-window/window-dock-list.tsx +156 -0
- package/src/web/components/floating-window/window-dock.tsx +192 -0
- package/src/web/components/floating-window/window-geometry.ts +42 -4
- package/src/web/components/floating-window/window-layer.tsx +59 -23
- package/src/web/components/floating-window/window-persistence.ts +16 -3
- package/src/web/components/floating-window/window-store-types.ts +14 -3
- package/src/web/components/floating-window/window-store.ts +75 -8
- package/src/web/components/floating-window/window-title-identity.tsx +86 -0
- package/src/web/components/git/git-branch-row.tsx +138 -0
- package/src/web/components/git/git-change-parts.tsx +142 -0
- package/src/web/components/git/git-change-row.tsx +218 -0
- package/src/web/components/git/git-change-tree.tsx +190 -0
- package/src/web/components/git/git-commit-composer.tsx +126 -0
- package/src/web/components/git/git-confirm.tsx +84 -0
- package/src/web/components/git/git-operation-banner.tsx +48 -0
- package/src/web/components/git/git-stash-section.tsx +128 -0
- package/src/web/components/git/git-status-panel.tsx +588 -1043
- package/src/web/components/git/git-worktree-panel.tsx +7 -7
- package/src/web/components/git-review/git-review-block.tsx +356 -0
- package/src/web/components/git-review/git-review-desktop.tsx +355 -0
- package/src/web/components/git-review/git-review-parts.tsx +238 -0
- package/src/web/components/git-review/git-review-phone.tsx +230 -0
- package/src/web/components/git-review/git-review-tab.tsx +123 -0
- package/src/web/components/layout/cloud-share-named-tunnel-row.tsx +2 -2
- package/src/web/components/layout/command-palette-db-commands.ts +56 -0
- package/src/web/components/layout/command-palette.tsx +41 -16
- package/src/web/components/layout/draggable-tab.tsx +7 -0
- package/src/web/components/layout/mobile-drawer.tsx +27 -14
- package/src/web/components/layout/mobile-nav.tsx +4 -3
- package/src/web/components/layout/mobile-tab-switcher-sheet.tsx +8 -1
- package/src/web/components/layout/nav-section-rail.tsx +22 -6
- package/src/web/components/layout/sidebar.tsx +2 -2
- package/src/web/components/layout/status-bar.tsx +6 -0
- package/src/web/components/layout/tab-bar.tsx +5 -8
- package/src/web/components/layout/tab-close-confirm-dialog.tsx +62 -0
- package/src/web/components/layout/tab-content.tsx +47 -7
- package/src/web/components/layout/tab-pool.tsx +10 -2
- package/src/web/components/layout/tab-pop-out-menu-item.tsx +2 -2
- package/src/web/components/layout/upgrade-button.tsx +3 -2
- package/src/web/components/logs/logs-actions.ts +84 -0
- package/src/web/components/logs/logs-app.tsx +265 -0
- package/src/web/components/logs/logs-client.ts +31 -0
- package/src/web/components/logs/logs-issues-pane.tsx +214 -0
- package/src/web/components/logs/logs-pane.tsx +683 -0
- package/src/web/components/logs/logs-phone-pane.tsx +365 -0
- package/src/web/components/logs/logs-report-pane.tsx +440 -0
- package/src/web/components/logs/logs-report-store.ts +153 -0
- package/src/web/components/logs/logs-state.ts +93 -0
- package/src/web/components/logs/logs-tab.tsx +4 -0
- package/src/web/components/logs/logs-ui.tsx +104 -0
- package/src/web/components/logs/logs-window-content.tsx +13 -0
- package/src/web/components/logs/logs.css +440 -0
- package/src/web/components/logs/open-logs.ts +64 -0
- package/src/web/components/logs/use-follow-list.ts +90 -0
- package/src/web/components/logs/use-logs-badge.ts +57 -0
- package/src/web/components/logs/use-logs-feed.ts +251 -0
- package/src/web/components/logs/use-logs-issues.ts +61 -0
- package/src/web/components/onboarding/onboarding-quick-orientation.tsx +4 -4
- package/src/web/components/os-explorer/actions/explorer-actions-upload.ts +2 -1
- package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +17 -11
- package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +14 -5
- package/src/web/components/os-explorer/views/inline-name-input.tsx +13 -4
- package/src/web/components/remote-desktop/ffmpeg-install-button.tsx +59 -0
- package/src/web/components/remote-desktop/remote-desktop-readiness-gate.tsx +2 -0
- package/src/web/components/remote-desktop/use-remote-desktop-readiness.ts +1 -0
- package/src/web/components/session-review/review-code.tsx +507 -0
- package/src/web/components/session-review/review-desktop.tsx +256 -0
- package/src/web/components/session-review/review-parts.tsx +267 -0
- package/src/web/components/session-review/review-phone.tsx +206 -0
- package/src/web/components/session-review/review-tokens.tsx +70 -0
- package/src/web/components/session-review/review-view.tsx +158 -0
- package/src/web/components/session-review/session-review-tab.tsx +71 -0
- package/src/web/components/settings/ai-settings-section.tsx +20 -0
- package/src/web/components/settings/database-drivers-section.tsx +251 -0
- package/src/web/components/settings/design-settings-section.tsx +55 -3
- package/src/web/components/settings/design-window-setting.tsx +28 -0
- package/src/web/components/settings/language-servers-section.tsx +8 -2
- package/src/web/components/settings/notifications-settings-section.tsx +463 -24
- package/src/web/components/settings/ntfy-server-form.tsx +192 -0
- package/src/web/components/settings/open-settings.ts +11 -9
- package/src/web/components/settings/ppmbot-settings-section.tsx +6 -214
- package/src/web/components/settings/ppmbot-telegram-section.tsx +139 -0
- package/src/web/components/settings/remote-access/public-link-pane.tsx +282 -0
- package/src/web/components/settings/remote-access/remote-access-settings-section.tsx +49 -0
- package/src/web/components/settings/remote-access/remote-access-tab-store.ts +24 -0
- package/src/web/components/settings/run-in-terminal-button.tsx +32 -0
- package/src/web/components/settings/settings-body.tsx +14 -2
- package/src/web/components/settings/settings-categories.ts +14 -1
- package/src/web/components/settings/settings-rows.tsx +61 -0
- package/src/web/components/settings/settings-section-content.tsx +2 -0
- package/src/web/components/settings/tailscale/tailscale-settings-section.tsx +410 -0
- package/src/web/components/settings/tailscale/tailscale-setup-steps.tsx +248 -0
- package/src/web/components/settings/tailscale/tailscale-sign-in-dialog.tsx +98 -0
- package/src/web/components/settings/tailscale/tailscale-ui.tsx +81 -0
- package/src/web/components/settings/telegram-bot-token-field.tsx +129 -0
- package/src/web/components/settings/telegram-connect.tsx +147 -0
- package/src/web/components/settings/voice-settings-section.tsx +28 -3
- package/src/web/components/sqlite/sqlite-viewer.tsx +92 -134
- package/src/web/components/system/apps/app-rows.ts +19 -3
- package/src/web/components/system/apps/apps-panel.tsx +3 -1
- package/src/web/components/system/services/service-action-confirm.tsx +20 -1
- package/src/web/components/system/services/service-details-sheet.tsx +14 -4
- package/src/web/components/system/services/service-details-text.ts +5 -0
- package/src/web/components/system/services/services-panel.tsx +7 -5
- package/src/web/components/terminal/terminal-selection-chat.tsx +178 -0
- package/src/web/components/terminal/terminal-tab.tsx +10 -6
- package/src/web/components/tunnels/named-tunnel/named-tunnel-copy.ts +1 -20
- package/src/web/components/tunnels/named-tunnel/named-tunnel-setup-content.tsx +1 -1
- package/src/web/components/tunnels/named-tunnel/named-tunnel-setup-popup.tsx +2 -2
- package/src/web/components/tunnels/named-tunnel/use-named-tunnel-setup.ts +1 -1
- package/src/web/components/tunnels/open-port-forwarding.ts +17 -0
- package/src/web/components/tunnels/port-forwarding-panel.tsx +370 -0
- package/src/web/components/ui/adaptive-context-menu.tsx +32 -3
- package/src/web/components/ui/sidebar-header.tsx +1 -1
- package/src/web/components/web-preview/open-web-preview-tab.ts +14 -0
- package/src/web/components/web-preview/web-preview-tab.tsx +92 -0
- package/src/web/hooks/use-at-most-wide.ts +20 -0
- package/src/web/hooks/use-chat.ts +214 -11
- package/src/web/hooks/use-commit-draft.ts +59 -0
- package/src/web/hooks/use-db-driver-installed.ts +16 -0
- package/src/web/hooks/use-design-session-redirect.ts +3 -2
- package/src/web/hooks/use-draft.ts +25 -15
- package/src/web/hooks/use-extension-ws.ts +15 -1
- package/src/web/hooks/use-git-changes.ts +114 -0
- package/src/web/hooks/use-git-review.ts +617 -0
- package/src/web/hooks/use-global-events.ts +5 -0
- package/src/web/hooks/use-lsp.ts +4 -2
- package/src/web/hooks/use-notification-clicks.ts +43 -0
- package/src/web/hooks/use-session-file-changes.ts +100 -0
- package/src/web/hooks/use-session-review.ts +554 -0
- package/src/web/hooks/use-session-turns.ts +65 -0
- package/src/web/hooks/use-terminal.ts +19 -5
- package/src/web/hooks/use-turn-review.ts +204 -0
- package/src/web/hooks/use-url-sync.ts +15 -12
- package/src/web/lib/aggregate-turn-file-changes.ts +127 -35
- package/src/web/lib/ai-tab-placement.ts +102 -0
- package/src/web/lib/api-client.ts +113 -47
- package/src/web/lib/api-settings.ts +1 -0
- package/src/web/lib/api-tailscale.ts +12 -0
- package/src/web/lib/api-tunnels.ts +13 -1
- package/src/web/lib/chat-attempt-lifecycle.ts +3 -1
- package/src/web/lib/code-fence.ts +7 -0
- package/src/web/lib/db-drivers.ts +41 -0
- package/src/web/lib/db-table-edit.ts +94 -0
- package/src/web/lib/db-tabs.ts +273 -0
- package/src/web/lib/design/api-design-settings.ts +11 -0
- package/src/web/lib/design/design-layout-mode.ts +16 -1
- package/src/web/lib/design/design-view-prefs.ts +20 -1
- package/src/web/lib/design/open-design-tab.ts +54 -1
- package/src/web/lib/file-icon-name.ts +6 -0
- package/src/web/lib/file-icons.generated.ts +10 -1
- package/src/web/lib/file-icons.tsx +34 -6
- package/src/web/lib/git-changes-view.ts +292 -0
- package/src/web/lib/git-file-tree.ts +8 -8
- package/src/web/lib/git-review-model.ts +496 -0
- package/src/web/lib/html-preview-loads.ts +87 -0
- package/src/web/lib/icons.generated.tsx +41 -1
- package/src/web/lib/logs/logs-report.ts +128 -0
- package/src/web/lib/logs/logs-view-model.ts +201 -0
- package/src/web/lib/lsp/lsp-client.ts +1 -1
- package/src/web/lib/lsp/lsp-documents.ts +8 -0
- package/src/web/lib/lsp/register-providers.ts +5 -1
- package/src/web/lib/model-display-name.ts +16 -0
- package/src/web/lib/monaco-lightbulb-gutter.ts +32 -0
- package/src/web/lib/open-ai-tab.ts +160 -0
- package/src/web/lib/open-git-review.ts +24 -0
- package/src/web/lib/read-ndjson.ts +35 -0
- package/src/web/lib/running-agent-rows.ts +66 -16
- package/src/web/lib/send-to-chat.ts +55 -9
- package/src/web/lib/session-file-changes-client.ts +148 -0
- package/src/web/lib/session-file-changes.ts +69 -0
- package/src/web/lib/session-review-model.ts +379 -0
- package/src/web/lib/session-turns.ts +123 -0
- package/src/web/lib/sidebar-tabs/tab-registry.ts +1 -1
- package/src/web/lib/tab-tool-call.ts +69 -0
- package/src/web/lib/tab-type-icons.ts +12 -3
- package/src/web/lib/turn-review.ts +102 -0
- package/src/web/lib/web-preview-url.ts +31 -0
- package/src/web/lib/web-push-client.ts +91 -0
- package/src/web/lib/web-push-support.ts +88 -0
- package/src/web/stores/chat-jump-store.ts +31 -0
- package/src/web/stores/commit-draft-store.ts +119 -0
- package/src/web/stores/db-rows-status-store.ts +31 -0
- package/src/web/stores/git-status-store.ts +21 -2
- package/src/web/stores/panel-store.ts +47 -1
- package/src/web/stores/panel-utils.ts +77 -11
- package/src/web/stores/session-turns-store.ts +40 -0
- package/src/web/stores/settings-store.ts +86 -42
- package/src/web/stores/tab-close-confirm-store.ts +59 -0
- package/src/web/stores/tab-store.ts +10 -2
- package/src/web/stores/unsaved-grid-rows-store.ts +42 -0
- package/src/web/stores/window-panel-actions.ts +21 -3
- package/src/web/stores/window-panel-persistence.ts +25 -11
- package/src/web/styles/file-icons.generated.css +6 -0
- package/src/web/styles/globals.css +54 -0
- package/src/web/sw-notification-click.ts +51 -0
- package/src/web/sw.ts +35 -0
- package/src/web/theme/adapters/shiki-adapter.ts +55 -1
- package/templates/skill/SKILL.md.tmpl +4 -3
- package/templates/skill/common-tasks.md +8 -4
- package/vite.config.ts +3 -0
- package/dist/web/assets/_basePickBy-BEVUuplK.js +0 -1
- package/dist/web/assets/_basePickBy-BEVUuplK.js.br +0 -0
- package/dist/web/assets/_basePickBy-BEVUuplK.js.gz +0 -0
- package/dist/web/assets/_baseUniq-qb_BgEfK.js +0 -1
- package/dist/web/assets/_baseUniq-qb_BgEfK.js.br +0 -0
- package/dist/web/assets/_baseUniq-qb_BgEfK.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js +0 -1
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-_OeezCXB.js +0 -1
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js +0 -2
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js +0 -1
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js +0 -1
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BB8vscte.js +0 -1
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js +0 -1
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.br +0 -0
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.gz +0 -0
- package/dist/web/assets/android-tab-BIOUVVoW.js +0 -2
- package/dist/web/assets/android-tab-BIOUVVoW.js.br +0 -0
- package/dist/web/assets/android-tab-BIOUVVoW.js.gz +0 -0
- package/dist/web/assets/angular-html-Djm1KT_p.js +0 -1
- package/dist/web/assets/angular-html-Djm1KT_p.js.br +0 -0
- package/dist/web/assets/angular-html-Djm1KT_p.js.gz +0 -0
- package/dist/web/assets/angular-ts-D8ZYU4i0.js +0 -1
- package/dist/web/assets/angular-ts-D8ZYU4i0.js.br +0 -0
- package/dist/web/assets/angular-ts-D8ZYU4i0.js.gz +0 -0
- package/dist/web/assets/api-client-CbrcysYC.js +0 -1
- package/dist/web/assets/api-client-F5Zi1sR0.js +0 -1
- package/dist/web/assets/api-client-F5Zi1sR0.js.br +0 -0
- package/dist/web/assets/api-client-F5Zi1sR0.js.gz +0 -0
- package/dist/web/assets/api-settings-Cc_CpfmC.js +0 -1
- package/dist/web/assets/api-settings-Cc_CpfmC.js.br +0 -0
- package/dist/web/assets/api-settings-Cc_CpfmC.js.gz +0 -0
- package/dist/web/assets/api-settings-D1axn9vm.js +0 -1
- package/dist/web/assets/api-themes-BtMBSjuM.js +0 -1
- package/dist/web/assets/apl-Bxk9ez2r.js +0 -1
- package/dist/web/assets/apl-Bxk9ez2r.js.br +0 -0
- package/dist/web/assets/apl-Bxk9ez2r.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js +0 -1
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.gz +0 -0
- package/dist/web/assets/apps-panel-DXHF0QEv.js +0 -1
- package/dist/web/assets/apps-panel-DXHF0QEv.js.br +0 -0
- package/dist/web/assets/apps-panel-DXHF0QEv.js.gz +0 -0
- package/dist/web/assets/arc-CrBOnruw.js +0 -1
- package/dist/web/assets/arc-CrBOnruw.js.br +0 -0
- package/dist/web/assets/arc-CrBOnruw.js.gz +0 -0
- package/dist/web/assets/architecture-PBZL5I3N-bv6Z6ZTl.js +0 -1
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js +0 -36
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js.br +0 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js.gz +0 -0
- package/dist/web/assets/astro-CCE8GTuJ.js +0 -1
- package/dist/web/assets/astro-CCE8GTuJ.js.br +0 -0
- package/dist/web/assets/astro-CCE8GTuJ.js.gz +0 -0
- package/dist/web/assets/audio-preview-DpjOKEm4.js +0 -1
- package/dist/web/assets/audio-preview-DpjOKEm4.js.br +0 -0
- package/dist/web/assets/audio-preview-DpjOKEm4.js.gz +0 -0
- package/dist/web/assets/blade-pJLFJ0pe.js +0 -1
- package/dist/web/assets/blade-pJLFJ0pe.js.br +0 -0
- package/dist/web/assets/blade-pJLFJ0pe.js.gz +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js +0 -132
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js.br +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js +0 -1
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js.br +0 -0
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js.gz +0 -0
- package/dist/web/assets/bsl-DJPQP6gj.js +0 -1
- package/dist/web/assets/bsl-DJPQP6gj.js.br +0 -0
- package/dist/web/assets/bsl-DJPQP6gj.js.gz +0 -0
- package/dist/web/assets/button-DeAyLH9U.js +0 -1
- package/dist/web/assets/button-DeAyLH9U.js.br +0 -0
- package/dist/web/assets/button-DeAyLH9U.js.gz +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js +0 -10
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js.br +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js.gz +0 -0
- package/dist/web/assets/cairo-6pdze4qN.js +0 -1
- package/dist/web/assets/cairo-6pdze4qN.js.br +0 -0
- package/dist/web/assets/cairo-6pdze4qN.js.gz +0 -0
- package/dist/web/assets/channel-C97aABFT.js +0 -1
- package/dist/web/assets/chat-preparation-cache-BUCR58h4.js +0 -1
- package/dist/web/assets/chat-preparation-cache-BUCR58h4.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-BUCR58h4.js.gz +0 -0
- package/dist/web/assets/chat-tab-Bbe_77oJ.js +0 -15
- package/dist/web/assets/chat-tab-Bbe_77oJ.js.br +0 -0
- package/dist/web/assets/chat-tab-Bbe_77oJ.js.gz +0 -0
- package/dist/web/assets/chat-tab-D3i5O3dO.js +0 -1
- package/dist/web/assets/chat-tab-D3i5O3dO.js.br +0 -0
- package/dist/web/assets/chat-tab-D3i5O3dO.js.gz +0 -0
- package/dist/web/assets/chunk-4BX2VUAB-Dd8hGWzs.js +0 -1
- package/dist/web/assets/chunk-55IACEB6-BUOmRdCb.js +0 -1
- package/dist/web/assets/chunk-7E7YKBS2-D5i9aZ57.js +0 -1
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js +0 -80
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js.br +0 -0
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js.gz +0 -0
- package/dist/web/assets/chunk-C72U2L5F-CEUvONYx.js +0 -1
- package/dist/web/assets/chunk-EGIJ26TM-BG89sF-p.js +0 -1
- package/dist/web/assets/chunk-FMBD7UC4-BDtpoO-Q.js +0 -15
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js +0 -2
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js.br +0 -0
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js.gz +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js +0 -2
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js.br +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js.gz +0 -0
- package/dist/web/assets/chunk-HHEYEP7N-Cz5o2sXg.js +0 -1
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js +0 -1
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js.br +0 -0
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js.gz +0 -0
- package/dist/web/assets/chunk-KX2RTZJC-Dfwu46M7.js +0 -1
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js +0 -53
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js.br +0 -0
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js.gz +0 -0
- package/dist/web/assets/chunk-L3YUKLVL-DytBx0nd.js +0 -1
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js +0 -1
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js.br +0 -0
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js.gz +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js +0 -220
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js.br +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js.gz +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js +0 -7
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js.br +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js.gz +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js +0 -1
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js.br +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js.gz +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js +0 -1
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js.br +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js.gz +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js +0 -11
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js.br +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js.gz +0 -0
- package/dist/web/assets/chunk-QZHKN3VN-_jIwYKZ3.js +0 -1
- package/dist/web/assets/chunk-R5LLSJPH-CZY_f--s.js +0 -1
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js +0 -189
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js.br +0 -0
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js.gz +0 -0
- package/dist/web/assets/chunk-XIRO2GV7-BxPFOPRI.js +0 -1
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js +0 -32
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js.br +0 -0
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js.gz +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js +0 -94
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js.br +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js.gz +0 -0
- package/dist/web/assets/chunk-YBOYWFTD-0Is1vHmh.js +0 -1
- package/dist/web/assets/classDiagram-VBA2DB6C-HwLNQY_4.js +0 -1
- package/dist/web/assets/classDiagram-v2-RAHNMMFH-CLUQCcjH.js +0 -1
- package/dist/web/assets/clone-B5kRZECd.js +0 -1
- package/dist/web/assets/cobol-6JrtZ3xT.js +0 -1
- package/dist/web/assets/cobol-6JrtZ3xT.js.br +0 -0
- package/dist/web/assets/cobol-6JrtZ3xT.js.gz +0 -0
- package/dist/web/assets/code-editor-DXsIWoQ1.js +0 -7
- package/dist/web/assets/code-editor-DXsIWoQ1.js.br +0 -0
- package/dist/web/assets/code-editor-DXsIWoQ1.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js +0 -1
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.gz +0 -0
- package/dist/web/assets/coffee-eR0Qd-vR.js +0 -1
- package/dist/web/assets/coffee-eR0Qd-vR.js.br +0 -0
- package/dist/web/assets/coffee-eR0Qd-vR.js.gz +0 -0
- package/dist/web/assets/conflict-editor-D_RImo_V.js +0 -19
- package/dist/web/assets/conflict-editor-D_RImo_V.js.br +0 -0
- package/dist/web/assets/conflict-editor-D_RImo_V.js.gz +0 -0
- package/dist/web/assets/context-menu-7OX80HDB.js +0 -1
- package/dist/web/assets/context-menu-7OX80HDB.js.br +0 -0
- package/dist/web/assets/context-menu-7OX80HDB.js.gz +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js +0 -1
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js.br +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js.gz +0 -0
- package/dist/web/assets/cpp-Bp_Laxmd.js +0 -1
- package/dist/web/assets/cpp-Bp_Laxmd.js.br +0 -0
- package/dist/web/assets/cpp-Bp_Laxmd.js.gz +0 -0
- package/dist/web/assets/crystal-bc0lS6i8.js +0 -1
- package/dist/web/assets/crystal-bc0lS6i8.js.br +0 -0
- package/dist/web/assets/crystal-bc0lS6i8.js.gz +0 -0
- package/dist/web/assets/csv-parser-CoxPdyLw.js +0 -6
- package/dist/web/assets/csv-parser-CoxPdyLw.js.br +0 -0
- package/dist/web/assets/csv-parser-CoxPdyLw.js.gz +0 -0
- package/dist/web/assets/csv-preview-BuFdfLo3.js +0 -2
- package/dist/web/assets/csv-preview-BuFdfLo3.js.br +0 -0
- package/dist/web/assets/csv-preview-BuFdfLo3.js.gz +0 -0
- package/dist/web/assets/dagre-D__SE4Ki.js +0 -1
- package/dist/web/assets/dagre-D__SE4Ki.js.br +0 -0
- package/dist/web/assets/dagre-D__SE4Ki.js.gz +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js +0 -4
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js.br +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js +0 -1
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.gz +0 -0
- package/dist/web/assets/data-grid-types-CHD9-pon.js +0 -1
- package/dist/web/assets/data-grid-types-CHD9-pon.js.br +0 -0
- package/dist/web/assets/data-grid-types-CHD9-pon.js.gz +0 -0
- package/dist/web/assets/database-viewer-ChcbYn9E.js +0 -1
- package/dist/web/assets/database-viewer-ChcbYn9E.js.br +0 -0
- package/dist/web/assets/database-viewer-ChcbYn9E.js.gz +0 -0
- package/dist/web/assets/design-export-client-BfdZB7xK.js +0 -1
- package/dist/web/assets/design-export-client-BfdZB7xK.js.br +0 -0
- package/dist/web/assets/design-export-client-BfdZB7xK.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js +0 -1
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js.gz +0 -0
- package/dist/web/assets/design-settings-section-B_xOf51h.js +0 -2
- package/dist/web/assets/design-settings-section-B_xOf51h.js.br +0 -0
- package/dist/web/assets/design-settings-section-B_xOf51h.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js +0 -3
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.gz +0 -0
- package/dist/web/assets/design-tab-BQSYJ4cS.js +0 -57
- package/dist/web/assets/design-tab-BQSYJ4cS.js.br +0 -0
- package/dist/web/assets/design-tab-BQSYJ4cS.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js +0 -1
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.gz +0 -0
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js +0 -24
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js.br +0 -0
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js.gz +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js +0 -43
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js.br +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js.gz +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js +0 -24
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js.br +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js.gz +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js +0 -1
- package/dist/web/assets/dialog-Bocc0Fgb.js.br +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js.gz +0 -0
- package/dist/web/assets/diff-viewer-BZ6glGK-.js +0 -4
- package/dist/web/assets/diff-viewer-BZ6glGK-.js.br +0 -0
- package/dist/web/assets/diff-viewer-BZ6glGK-.js.gz +0 -0
- package/dist/web/assets/dist-CBtAY9iX.js +0 -1
- package/dist/web/assets/dist-CBtAY9iX.js.br +0 -0
- package/dist/web/assets/dist-CBtAY9iX.js.gz +0 -0
- package/dist/web/assets/dist-CWwUZUqE.js +0 -11
- package/dist/web/assets/dist-CWwUZUqE.js.br +0 -0
- package/dist/web/assets/dist-CWwUZUqE.js.gz +0 -0
- package/dist/web/assets/docx-preview-Dt6RQpfA.js +0 -12
- package/dist/web/assets/docx-preview-Dt6RQpfA.js.br +0 -0
- package/dist/web/assets/docx-preview-Dt6RQpfA.js.gz +0 -0
- package/dist/web/assets/edge-BxayftlC.js +0 -1
- package/dist/web/assets/edge-BxayftlC.js.br +0 -0
- package/dist/web/assets/edge-BxayftlC.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js +0 -7
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.gz +0 -0
- package/dist/web/assets/editor-language-service-4sbsdqBV.js +0 -1
- package/dist/web/assets/editor-language-service-4sbsdqBV.js.br +0 -0
- package/dist/web/assets/editor-language-service-4sbsdqBV.js.gz +0 -0
- package/dist/web/assets/elixir-CncTBq2d.js +0 -1
- package/dist/web/assets/elixir-CncTBq2d.js.br +0 -0
- package/dist/web/assets/elixir-CncTBq2d.js.gz +0 -0
- package/dist/web/assets/elm-1uJDe5N1.js +0 -1
- package/dist/web/assets/elm-1uJDe5N1.js.br +0 -0
- package/dist/web/assets/elm-1uJDe5N1.js.gz +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js +0 -70
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js.br +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js.gz +0 -0
- package/dist/web/assets/erb-dH8FUiNl.js +0 -1
- package/dist/web/assets/erb-dH8FUiNl.js.br +0 -0
- package/dist/web/assets/erb-dH8FUiNl.js.gz +0 -0
- package/dist/web/assets/erlang-D0F-1O48.js +0 -1
- package/dist/web/assets/erlang-D0F-1O48.js.br +0 -0
- package/dist/web/assets/erlang-D0F-1O48.js.gz +0 -0
- package/dist/web/assets/esm-C3TeLjGW.js +0 -2
- package/dist/web/assets/esm-C3TeLjGW.js.br +0 -0
- package/dist/web/assets/esm-C3TeLjGW.js.gz +0 -0
- package/dist/web/assets/explorer-body-DbgrG1fe.js +0 -2
- package/dist/web/assets/explorer-body-DbgrG1fe.js.br +0 -0
- package/dist/web/assets/explorer-body-DbgrG1fe.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js +0 -1
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js +0 -1
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js.br +0 -0
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js.gz +0 -0
- package/dist/web/assets/extension-webview-Coti6Vfw.js +0 -12
- package/dist/web/assets/extension-webview-Coti6Vfw.js.br +0 -0
- package/dist/web/assets/extension-webview-Coti6Vfw.js.gz +0 -0
- package/dist/web/assets/file-icons-CK0J4QSy.js +0 -1
- package/dist/web/assets/file-icons-CK0J4QSy.js.br +0 -0
- package/dist/web/assets/file-icons-CK0J4QSy.js.gz +0 -0
- package/dist/web/assets/file-icons.generated-BtBErEwb.css +0 -1
- package/dist/web/assets/file-icons.generated-BtBErEwb.css.br +0 -0
- package/dist/web/assets/file-icons.generated-BtBErEwb.css.gz +0 -0
- package/dist/web/assets/file-store-Cm7-pHux.js +0 -1
- package/dist/web/assets/file-store-Cm7-pHux.js.br +0 -0
- package/dist/web/assets/file-store-Cm7-pHux.js.gz +0 -0
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js +0 -1
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js.br +0 -0
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js.gz +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js +0 -162
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js.br +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js.gz +0 -0
- package/dist/web/assets/format-file-meta-Drxf2J-k.js +0 -1
- package/dist/web/assets/format-file-meta-Drxf2J-k.js.br +0 -0
- package/dist/web/assets/format-file-meta-Drxf2J-k.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js +0 -1
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js.gz +0 -0
- package/dist/web/assets/fs-api-IX9SHt5k.js +0 -1
- package/dist/web/assets/fs-api-IX9SHt5k.js.br +0 -0
- package/dist/web/assets/fs-api-IX9SHt5k.js.gz +0 -0
- package/dist/web/assets/fsharp-B5-po_gS.js +0 -1
- package/dist/web/assets/fsharp-B5-po_gS.js.br +0 -0
- package/dist/web/assets/fsharp-B5-po_gS.js.gz +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js +0 -292
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js.br +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js.gz +0 -0
- package/dist/web/assets/gdresource-DkWx6_xT.js +0 -1
- package/dist/web/assets/gdresource-DkWx6_xT.js.br +0 -0
- package/dist/web/assets/gdresource-DkWx6_xT.js.gz +0 -0
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js +0 -1
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js.br +0 -0
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js.gz +0 -0
- package/dist/web/assets/git-commit-XsMhdamD.js +0 -1
- package/dist/web/assets/git-commit-XsMhdamD.js.br +0 -0
- package/dist/web/assets/git-commit-XsMhdamD.js.gz +0 -0
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js +0 -1
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js.br +0 -0
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js.gz +0 -0
- package/dist/web/assets/git-rebase-CXs4QunZ.js +0 -1
- package/dist/web/assets/git-repo-store-B_u5RzIM.js +0 -1
- package/dist/web/assets/git-repo-store-B_u5RzIM.js.br +0 -0
- package/dist/web/assets/git-repo-store-B_u5RzIM.js.gz +0 -0
- package/dist/web/assets/gitGraph-HDMCJU4V-COyQftEp.js +0 -1
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js +0 -65
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BfByGSf1.js +0 -141
- package/dist/web/assets/glide-data-grid-BfByGSf1.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BfByGSf1.js.gz +0 -0
- package/dist/web/assets/glimmer-js-CHoxSy4K.js +0 -1
- package/dist/web/assets/glimmer-js-CHoxSy4K.js.br +0 -0
- package/dist/web/assets/glimmer-js-CHoxSy4K.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js +0 -1
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js.br +0 -0
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js.gz +0 -0
- package/dist/web/assets/glsl-E9hxFBBJ.js +0 -1
- package/dist/web/assets/glsl-E9hxFBBJ.js.br +0 -0
- package/dist/web/assets/glsl-E9hxFBBJ.js.gz +0 -0
- package/dist/web/assets/graphlib-eYluCODn.js +0 -1
- package/dist/web/assets/graphlib-eYluCODn.js.br +0 -0
- package/dist/web/assets/graphlib-eYluCODn.js.gz +0 -0
- package/dist/web/assets/graphql-DAalq3Uo.js +0 -1
- package/dist/web/assets/graphql-DAalq3Uo.js.br +0 -0
- package/dist/web/assets/graphql-DAalq3Uo.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js +0 -1
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js.br +0 -0
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js.gz +0 -0
- package/dist/web/assets/hack-e6ehmpqx.js +0 -1
- package/dist/web/assets/hack-e6ehmpqx.js.br +0 -0
- package/dist/web/assets/hack-e6ehmpqx.js.gz +0 -0
- package/dist/web/assets/haml-Pr4yq62b.js +0 -1
- package/dist/web/assets/haml-Pr4yq62b.js.br +0 -0
- package/dist/web/assets/haml-Pr4yq62b.js.gz +0 -0
- package/dist/web/assets/handlebars-ZERVZ8gn.js +0 -1
- package/dist/web/assets/handlebars-ZERVZ8gn.js.br +0 -0
- package/dist/web/assets/handlebars-ZERVZ8gn.js.gz +0 -0
- package/dist/web/assets/html-BmwVFf5D.js +0 -1
- package/dist/web/assets/html-BmwVFf5D.js.br +0 -0
- package/dist/web/assets/html-BmwVFf5D.js.gz +0 -0
- package/dist/web/assets/html-derivative-C1JIrmAY.js +0 -1
- package/dist/web/assets/http-BI6PtTvX.js +0 -1
- package/dist/web/assets/http-BI6PtTvX.js.br +0 -0
- package/dist/web/assets/http-BI6PtTvX.js.gz +0 -0
- package/dist/web/assets/hurl-CJGLGxAF.js +0 -1
- package/dist/web/assets/hurl-CJGLGxAF.js.br +0 -0
- package/dist/web/assets/hurl-CJGLGxAF.js.gz +0 -0
- package/dist/web/assets/hxml-B6i0QuF9.js +0 -1
- package/dist/web/assets/hxml-B6i0QuF9.js.br +0 -0
- package/dist/web/assets/hxml-B6i0QuF9.js.gz +0 -0
- package/dist/web/assets/icons-CO_II6D-.js +0 -1
- package/dist/web/assets/icons-CO_II6D-.js.br +0 -0
- package/dist/web/assets/icons-CO_II6D-.js.gz +0 -0
- package/dist/web/assets/image-preview-Cjlps7Pt.js +0 -1
- package/dist/web/assets/index-CyDLBddf.js +0 -52
- package/dist/web/assets/index-CyDLBddf.js.br +0 -0
- package/dist/web/assets/index-CyDLBddf.js.gz +0 -0
- package/dist/web/assets/index-Dh5apC3I.css +0 -1
- package/dist/web/assets/index-Dh5apC3I.css.br +0 -0
- package/dist/web/assets/index-Dh5apC3I.css.gz +0 -0
- package/dist/web/assets/info-3K5VOQVL-M5BVLjMe.js +0 -1
- package/dist/web/assets/infoDiagram-LFFYTUFH-BpJuT5o9.js +0 -2
- package/dist/web/assets/input-CG8PS8mS.js +0 -1
- package/dist/web/assets/isEmpty-BjAN1oSC.js +0 -1
- package/dist/web/assets/isEmpty-BjAN1oSC.js.br +0 -0
- package/dist/web/assets/isEmpty-BjAN1oSC.js.gz +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js +0 -70
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js.gz +0 -0
- package/dist/web/assets/jinja-CM-duDMo.js +0 -1
- package/dist/web/assets/jinja-CM-duDMo.js.br +0 -0
- package/dist/web/assets/jinja-CM-duDMo.js.gz +0 -0
- package/dist/web/assets/jira-watcher-section-Dz_-sUC2.js +0 -1
- package/dist/web/assets/jison-F9rAmqyI.js +0 -1
- package/dist/web/assets/jison-F9rAmqyI.js.br +0 -0
- package/dist/web/assets/jison-F9rAmqyI.js.gz +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js +0 -139
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js.br +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js.gz +0 -0
- package/dist/web/assets/julia-AVSSuAUz.js +0 -1
- package/dist/web/assets/julia-AVSSuAUz.js.br +0 -0
- package/dist/web/assets/julia-AVSSuAUz.js.gz +0 -0
- package/dist/web/assets/just-Dw8IR-fy.js +0 -1
- package/dist/web/assets/just-Dw8IR-fy.js.br +0 -0
- package/dist/web/assets/just-Dw8IR-fy.js.gz +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js +0 -89
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js.br +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js.gz +0 -0
- package/dist/web/assets/keybindings-store-BTq5Z7XP.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js +0 -2
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js.br +0 -0
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js.gz +0 -0
- package/dist/web/assets/latex-37_9fLdz.js +0 -1
- package/dist/web/assets/latex-37_9fLdz.js.br +0 -0
- package/dist/web/assets/latex-37_9fLdz.js.gz +0 -0
- package/dist/web/assets/lib-6APiJkU3.js +0 -4
- package/dist/web/assets/lib-6APiJkU3.js.br +0 -0
- package/dist/web/assets/lib-6APiJkU3.js.gz +0 -0
- package/dist/web/assets/line-CYtSrseF.js +0 -1
- package/dist/web/assets/linear-DyCrWAir.js +0 -1
- package/dist/web/assets/linear-DyCrWAir.js.br +0 -0
- package/dist/web/assets/linear-DyCrWAir.js.gz +0 -0
- package/dist/web/assets/liquid-CaR1gaJt.js +0 -1
- package/dist/web/assets/liquid-CaR1gaJt.js.br +0 -0
- package/dist/web/assets/liquid-CaR1gaJt.js.gz +0 -0
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js +0 -1
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js.br +0 -0
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js.gz +0 -0
- package/dist/web/assets/lua-IFhrYmKl.js +0 -1
- package/dist/web/assets/lua-IFhrYmKl.js.br +0 -0
- package/dist/web/assets/lua-IFhrYmKl.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js +0 -5
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-LJdVMbGl.js +0 -1
- package/dist/web/assets/marko-2g0T6atb.js +0 -1
- package/dist/web/assets/marko-2g0T6atb.js.br +0 -0
- package/dist/web/assets/marko-2g0T6atb.js.gz +0 -0
- package/dist/web/assets/mdc-Dku_3sTh.js +0 -1
- package/dist/web/assets/mdc-Dku_3sTh.js.br +0 -0
- package/dist/web/assets/mdc-Dku_3sTh.js.gz +0 -0
- package/dist/web/assets/media-url-CrT-qulZ.js +0 -1
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js +0 -4
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js.br +0 -0
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js.gz +0 -0
- package/dist/web/assets/mermaid.core-D5SAzB7L.js +0 -11
- package/dist/web/assets/mermaid.core-D5SAzB7L.js.br +0 -0
- package/dist/web/assets/mermaid.core-D5SAzB7L.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js +0 -68
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js.br +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js +0 -1
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.gz +0 -0
- package/dist/web/assets/monaco-dotenv-language-DbSss7YR.js +0 -1
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js +0 -1
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js.gz +0 -0
- package/dist/web/assets/nextflow-DwUrPV3b.js +0 -1
- package/dist/web/assets/nextflow-DwUrPV3b.js.br +0 -0
- package/dist/web/assets/nextflow-DwUrPV3b.js.gz +0 -0
- package/dist/web/assets/nginx-D10J2vrQ.js +0 -1
- package/dist/web/assets/nginx-D10J2vrQ.js.br +0 -0
- package/dist/web/assets/nginx-D10J2vrQ.js.gz +0 -0
- package/dist/web/assets/nim-BonDnBCZ.js +0 -1
- package/dist/web/assets/nim-BonDnBCZ.js.br +0 -0
- package/dist/web/assets/nim-BonDnBCZ.js.gz +0 -0
- package/dist/web/assets/notification-store-9lBSplOV.js +0 -1
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js +0 -1
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.gz +0 -0
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js +0 -9
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js.br +0 -0
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js +0 -1
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js.br +0 -0
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js +0 -1
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.gz +0 -0
- package/dist/web/assets/ordinal-CEpaoDoJ.js +0 -1
- package/dist/web/assets/ordinal-CEpaoDoJ.js.br +0 -0
- package/dist/web/assets/ordinal-CEpaoDoJ.js.gz +0 -0
- package/dist/web/assets/overview-panel-3htxfZS2.js +0 -1
- package/dist/web/assets/overview-panel-3htxfZS2.js.br +0 -0
- package/dist/web/assets/overview-panel-3htxfZS2.js.gz +0 -0
- package/dist/web/assets/packet-RMMSAZCW-DCgVLum2.js +0 -1
- package/dist/web/assets/panel-store-B6PoCwBA.js +0 -1
- package/dist/web/assets/panel-store-B6PoCwBA.js.br +0 -0
- package/dist/web/assets/panel-store-B6PoCwBA.js.gz +0 -0
- package/dist/web/assets/pdf-preview-B8A4T-ES.js +0 -1
- package/dist/web/assets/pdf-preview-B8A4T-ES.js.br +0 -0
- package/dist/web/assets/pdf-preview-B8A4T-ES.js.gz +0 -0
- package/dist/web/assets/performance-panel-V8gpnnf7.js +0 -3
- package/dist/web/assets/performance-panel-V8gpnnf7.js.br +0 -0
- package/dist/web/assets/performance-panel-V8gpnnf7.js.gz +0 -0
- package/dist/web/assets/perl-DmdIiZTm.js +0 -1
- package/dist/web/assets/perl-DmdIiZTm.js.br +0 -0
- package/dist/web/assets/perl-DmdIiZTm.js.gz +0 -0
- package/dist/web/assets/php-DXGvCIY0.js +0 -1
- package/dist/web/assets/php-DXGvCIY0.js.br +0 -0
- package/dist/web/assets/php-DXGvCIY0.js.gz +0 -0
- package/dist/web/assets/pie-UPGHQEXC-pxihnmef.js +0 -1
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js +0 -30
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js.br +0 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js +0 -3
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js.br +0 -0
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.gz +0 -0
- package/dist/web/assets/pptx-export-Ugjv0hso.js +0 -111
- package/dist/web/assets/pptx-export-Ugjv0hso.js.br +0 -0
- package/dist/web/assets/pptx-export-Ugjv0hso.js.gz +0 -0
- package/dist/web/assets/problems-panel-Gcy79pSS.js +0 -1
- package/dist/web/assets/problems-panel-Gcy79pSS.js.br +0 -0
- package/dist/web/assets/problems-panel-Gcy79pSS.js.gz +0 -0
- package/dist/web/assets/process-row-format-u6y7lOee.js +0 -1
- package/dist/web/assets/process-table-BUTIp9Oy.js +0 -1
- package/dist/web/assets/process-table-BUTIp9Oy.js.br +0 -0
- package/dist/web/assets/process-table-BUTIp9Oy.js.gz +0 -0
- package/dist/web/assets/project-store-CCimwgGF.js +0 -1
- package/dist/web/assets/project-store-CCimwgGF.js.br +0 -0
- package/dist/web/assets/project-store-CCimwgGF.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js +0 -1
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js.gz +0 -0
- package/dist/web/assets/pug-BgMlgmpT.js +0 -1
- package/dist/web/assets/pug-BgMlgmpT.js.br +0 -0
- package/dist/web/assets/pug-BgMlgmpT.js.gz +0 -0
- package/dist/web/assets/qml-DjqBS8bc.js +0 -1
- package/dist/web/assets/qml-DjqBS8bc.js.br +0 -0
- package/dist/web/assets/qml-DjqBS8bc.js.gz +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js +0 -7
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js.br +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js.gz +0 -0
- package/dist/web/assets/query-audit-section-N2DQtgJx.js +0 -1
- package/dist/web/assets/query-audit-section-N2DQtgJx.js.br +0 -0
- package/dist/web/assets/query-audit-section-N2DQtgJx.js.gz +0 -0
- package/dist/web/assets/radar-KQ55EAFF-CeeNXQSm.js +0 -1
- package/dist/web/assets/razor-CzV29vlj.js +0 -1
- package/dist/web/assets/razor-CzV29vlj.js.br +0 -0
- package/dist/web/assets/razor-CzV29vlj.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js +0 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js +0 -1
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js +0 -1
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js +0 -1
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js +0 -73
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js.br +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js.gz +0 -0
- package/dist/web/assets/rst-DffOOLD7.js +0 -1
- package/dist/web/assets/rst-DffOOLD7.js.br +0 -0
- package/dist/web/assets/rst-DffOOLD7.js.gz +0 -0
- package/dist/web/assets/ruby-C5DczJCc.js +0 -1
- package/dist/web/assets/ruby-C5DczJCc.js.br +0 -0
- package/dist/web/assets/ruby-C5DczJCc.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-DCBNtYHQ.js +0 -1
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js +0 -10
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js.br +0 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js.gz +0 -0
- package/dist/web/assets/sas-CoO1xLdH.js +0 -1
- package/dist/web/assets/sas-CoO1xLdH.js.br +0 -0
- package/dist/web/assets/sas-CoO1xLdH.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js +0 -1
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.gz +0 -0
- package/dist/web/assets/scroll-area-sjOeAfoD.js +0 -1
- package/dist/web/assets/scroll-area-sjOeAfoD.js.br +0 -0
- package/dist/web/assets/scroll-area-sjOeAfoD.js.gz +0 -0
- package/dist/web/assets/scss-d9PFDNvb.js +0 -1
- package/dist/web/assets/scss-d9PFDNvb.js.br +0 -0
- package/dist/web/assets/scss-d9PFDNvb.js.gz +0 -0
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js +0 -1
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js.br +0 -0
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js.gz +0 -0
- package/dist/web/assets/separator-dHj3Km--.js +0 -1
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js +0 -145
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js.gz +0 -0
- package/dist/web/assets/services-panel-Dm54cnW3.js +0 -1
- package/dist/web/assets/services-panel-Dm54cnW3.js.br +0 -0
- package/dist/web/assets/services-panel-Dm54cnW3.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js +0 -1
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js.gz +0 -0
- package/dist/web/assets/settings-body-DRRQNaDA.js +0 -1
- package/dist/web/assets/settings-body-DRRQNaDA.js.br +0 -0
- package/dist/web/assets/settings-body-DRRQNaDA.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DRaHfvm8.js +0 -1
- package/dist/web/assets/settings-section-content-U3mIx6hF.js +0 -2
- package/dist/web/assets/settings-section-content-U3mIx6hF.js.br +0 -0
- package/dist/web/assets/settings-section-content-U3mIx6hF.js.gz +0 -0
- package/dist/web/assets/settings-store-Cyuo8ceh.js +0 -2
- package/dist/web/assets/settings-store-Cyuo8ceh.js.br +0 -0
- package/dist/web/assets/settings-store-Cyuo8ceh.js.gz +0 -0
- package/dist/web/assets/settings-tab-CB_BhHTK.js +0 -1
- package/dist/web/assets/settings-window-content-CgZIMNX8.js +0 -1
- package/dist/web/assets/shaderlab-BkB57LhQ.js +0 -1
- package/dist/web/assets/shaderlab-BkB57LhQ.js.br +0 -0
- package/dist/web/assets/shaderlab-BkB57LhQ.js.gz +0 -0
- package/dist/web/assets/shellsession-CTpUym8_.js +0 -1
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js +0 -1
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js.br +0 -0
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js.gz +0 -0
- package/dist/web/assets/sortable-header-BOa8o7NJ.js +0 -1
- package/dist/web/assets/sortable-header-BOa8o7NJ.js.br +0 -0
- package/dist/web/assets/sortable-header-BOa8o7NJ.js.gz +0 -0
- package/dist/web/assets/soy-CGmWpNZ2.js +0 -1
- package/dist/web/assets/soy-CGmWpNZ2.js.br +0 -0
- package/dist/web/assets/soy-CGmWpNZ2.js.gz +0 -0
- package/dist/web/assets/sparql-DtdOj_MX.js +0 -1
- package/dist/web/assets/sparql-DtdOj_MX.js.br +0 -0
- package/dist/web/assets/sparql-DtdOj_MX.js.gz +0 -0
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js +0 -1
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js.br +0 -0
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js +0 -1
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.gz +0 -0
- package/dist/web/assets/stata-6W_BX14b.js +0 -1
- package/dist/web/assets/stata-6W_BX14b.js.br +0 -0
- package/dist/web/assets/stata-6W_BX14b.js.gz +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js +0 -1
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js.br +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-FVOUBMTO-DH7CpDey.js +0 -1
- package/dist/web/assets/surrealql-BhmbH4Yk.js +0 -1
- package/dist/web/assets/surrealql-BhmbH4Yk.js.br +0 -0
- package/dist/web/assets/surrealql-BhmbH4Yk.js.gz +0 -0
- package/dist/web/assets/svelte-D6EOFdO-.js +0 -1
- package/dist/web/assets/svelte-D6EOFdO-.js.br +0 -0
- package/dist/web/assets/svelte-D6EOFdO-.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-LannpU6H.js +0 -2
- package/dist/web/assets/system-monitor-body-LannpU6H.js.br +0 -0
- package/dist/web/assets/system-monitor-body-LannpU6H.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-BfVucwEF.js +0 -1
- package/dist/web/assets/system-monitor-window-content-kLNW9Ln3.js +0 -1
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js +0 -1
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js.gz +0 -0
- package/dist/web/assets/tab-store-DCpc0g0Q.js +0 -1
- package/dist/web/assets/templ-DuLJgZN8.js +0 -1
- package/dist/web/assets/templ-DuLJgZN8.js.br +0 -0
- package/dist/web/assets/templ-DuLJgZN8.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CTe2polt.js +0 -3
- package/dist/web/assets/terminal-tab-CTe2polt.js.br +0 -0
- package/dist/web/assets/terminal-tab-CTe2polt.js.gz +0 -0
- package/dist/web/assets/tex-D8IJD2J1.js +0 -1
- package/dist/web/assets/tex-D8IJD2J1.js.br +0 -0
- package/dist/web/assets/tex-D8IJD2J1.js.gz +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js +0 -61
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js.br +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js.gz +0 -0
- package/dist/web/assets/tool-cards-rxLXbBSm.js +0 -9
- package/dist/web/assets/tool-cards-rxLXbBSm.js.br +0 -0
- package/dist/web/assets/tool-cards-rxLXbBSm.js.gz +0 -0
- package/dist/web/assets/treemap-KZPCXAKY-OVcqjFQG.js +0 -1
- package/dist/web/assets/ts-tags-BxVcUOvj.js +0 -1
- package/dist/web/assets/ts-tags-BxVcUOvj.js.br +0 -0
- package/dist/web/assets/ts-tags-BxVcUOvj.js.gz +0 -0
- package/dist/web/assets/twig-BT8vDHa2.js +0 -1
- package/dist/web/assets/twig-BT8vDHa2.js.br +0 -0
- package/dist/web/assets/twig-BT8vDHa2.js.gz +0 -0
- package/dist/web/assets/use-blob-url-BC69n15x.js +0 -1
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js +0 -16
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.gz +0 -0
- package/dist/web/assets/use-lsp-gCNE5A9K.js +0 -6
- package/dist/web/assets/use-lsp-gCNE5A9K.js.br +0 -0
- package/dist/web/assets/use-lsp-gCNE5A9K.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-DvNGcCvz.js +0 -1
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js +0 -1
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js.br +0 -0
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js.gz +0 -0
- package/dist/web/assets/use-websocket-AC7EG1LK.js +0 -1
- package/dist/web/assets/vendor-ui-P9Ym7hCv.js +0 -45
- package/dist/web/assets/vendor-ui-P9Ym7hCv.js.br +0 -0
- package/dist/web/assets/vendor-ui-P9Ym7hCv.js.gz +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js +0 -34
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js.br +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js.gz +0 -0
- package/dist/web/assets/video-preview-C2Y61WUE.js +0 -1
- package/dist/web/assets/video-preview-C2Y61WUE.js.br +0 -0
- package/dist/web/assets/video-preview-C2Y61WUE.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js +0 -1
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js.br +0 -0
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js.gz +0 -0
- package/dist/web/assets/vue-BcyG2SyR.js +0 -1
- package/dist/web/assets/vue-BcyG2SyR.js.br +0 -0
- package/dist/web/assets/vue-BcyG2SyR.js.gz +0 -0
- package/dist/web/assets/vue-html-D8iVjZTe.js +0 -1
- package/dist/web/assets/vue-html-D8iVjZTe.js.br +0 -0
- package/dist/web/assets/vue-html-D8iVjZTe.js.gz +0 -0
- package/dist/web/assets/vue-vine-DxBjHHk4.js +0 -1
- package/dist/web/assets/vue-vine-DxBjHHk4.js.br +0 -0
- package/dist/web/assets/vue-vine-DxBjHHk4.js.gz +0 -0
- package/dist/web/assets/window-pip-registry-9Y9LQQYS.js +0 -1
- package/dist/web/assets/window-store-vo1N70nK.js +0 -1
- package/dist/web/assets/window-store-vo1N70nK.js.br +0 -0
- package/dist/web/assets/window-store-vo1N70nK.js.gz +0 -0
- package/dist/web/assets/ws-auth-Ytui7dXP.js +0 -1
- package/dist/web/assets/xml-Zepcw_qF.js +0 -1
- package/dist/web/assets/xml-Zepcw_qF.js.br +0 -0
- package/dist/web/assets/xml-Zepcw_qF.js.gz +0 -0
- package/dist/web/assets/xsl-_m-WMWv3.js +0 -1
- package/dist/web/assets/xsl-_m-WMWv3.js.br +0 -0
- package/dist/web/assets/xsl-_m-WMWv3.js.gz +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js +0 -7
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js.br +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js.gz +0 -0
- package/src/server/routes/fs-sqlite.ts +0 -129
- package/src/server/routes/postgres.ts +0 -92
- package/src/server/routes/sqlite.ts +0 -148
- package/src/services/database/split-sql-statements.ts +0 -95
- package/src/web/components/chat/change-edit-list.tsx +0 -50
- package/src/web/components/database/connection-form-dialog.tsx +0 -252
- package/src/web/components/database/connection-list.tsx +0 -192
- package/src/web/components/database/connection-row.tsx +0 -104
- package/src/web/components/database/database-viewer.tsx +0 -353
- package/src/web/components/database/glide-column-search.tsx +0 -81
- package/src/web/components/database/glide-data-preview-panel.tsx +0 -114
- package/src/web/components/database/glide-grid-pagination.tsx +0 -34
- package/src/web/components/database/glide-grid-toolbar.tsx +0 -105
- package/src/web/components/database/resolve-preview-data.ts +0 -62
- package/src/web/components/database/schema-table-tree.tsx +0 -98
- package/src/web/components/database/split-sql-statements.ts +0 -116
- package/src/web/components/database/use-db-tree-expansion.ts +0 -74
- package/src/web/components/database/use-glide-pending-edits.ts +0 -72
- package/src/web/components/database/use-glide-row-pinning.ts +0 -35
- package/src/web/components/postgres/postgres-viewer.tsx +0 -283
- package/src/web/components/postgres/use-postgres.ts +0 -161
- package/src/web/components/shared/bug-report-popup.tsx +0 -59
- package/src/web/components/sqlite/sqlite-data-grid.tsx +0 -213
- package/src/web/components/sqlite/sqlite-query-editor.tsx +0 -10
- package/src/web/components/sqlite/sqlite-table-list.tsx +0 -48
- package/src/web/components/sqlite/use-sqlite.ts +0 -135
- package/src/web/components/tunnels/named-tunnel/named-tunnel-section.tsx +0 -159
- package/src/web/components/tunnels/public-tunnel-switch.tsx +0 -82
- package/src/web/components/tunnels/tunnel-manager-tab.tsx +0 -207
- package/src/web/lib/report-bug.ts +0 -79
- /package/dist/web/assets/{__vite-browser-external-C5mXParC.js → __vite-browser-external-tODLo9mE.js} +0 -0
- /package/dist/web/assets/{abap-Ds6L4g_T.js → abap-D-o-bvtI.js} +0 -0
- /package/dist/web/assets/{abap-Ds6L4g_T.js.br → abap-D-o-bvtI.js.br} +0 -0
- /package/dist/web/assets/{abap-Ds6L4g_T.js.gz → abap-D-o-bvtI.js.gz} +0 -0
- /package/dist/web/assets/{actionscript-3-CLNiH4aj.js → actionscript-3-D2tIzAm8.js} +0 -0
- /package/dist/web/assets/{actionscript-3-CLNiH4aj.js.br → actionscript-3-D2tIzAm8.js.br} +0 -0
- /package/dist/web/assets/{actionscript-3-CLNiH4aj.js.gz → actionscript-3-D2tIzAm8.js.gz} +0 -0
- /package/dist/web/assets/{ada-BoiebnO1.js → ada-DxatBcxS.js} +0 -0
- /package/dist/web/assets/{ada-BoiebnO1.js.br → ada-DxatBcxS.js.br} +0 -0
- /package/dist/web/assets/{ada-BoiebnO1.js.gz → ada-DxatBcxS.js.gz} +0 -0
- /package/dist/web/assets/{andromeeda-CdMZLp1H.js → andromeeda-D0LK9YJ3.js} +0 -0
- /package/dist/web/assets/{andromeeda-CdMZLp1H.js.br → andromeeda-D0LK9YJ3.js.br} +0 -0
- /package/dist/web/assets/{andromeeda-CdMZLp1H.js.gz → andromeeda-D0LK9YJ3.js.gz} +0 -0
- /package/dist/web/assets/{apache-BKOdPQIP.js → apache-B7uMPNiW.js} +0 -0
- /package/dist/web/assets/{apache-BKOdPQIP.js.br → apache-B7uMPNiW.js.br} +0 -0
- /package/dist/web/assets/{apache-BKOdPQIP.js.gz → apache-B7uMPNiW.js.gz} +0 -0
- /package/dist/web/assets/{apex-kTmPDDVo.js → apex-B7GiXrAr.js} +0 -0
- /package/dist/web/assets/{apex-kTmPDDVo.js.br → apex-B7GiXrAr.js.br} +0 -0
- /package/dist/web/assets/{apex-kTmPDDVo.js.gz → apex-B7GiXrAr.js.gz} +0 -0
- /package/dist/web/assets/{applescript-C65SMPLe.js → applescript-D_SIFkKe.js} +0 -0
- /package/dist/web/assets/{applescript-C65SMPLe.js.br → applescript-D_SIFkKe.js.br} +0 -0
- /package/dist/web/assets/{applescript-C65SMPLe.js.gz → applescript-D_SIFkKe.js.gz} +0 -0
- /package/dist/web/assets/{apply-theme-Cc_cmrD5.js → apply-theme-ORrEdHKT.js} +0 -0
- /package/dist/web/assets/{ara-BKT6no2T.js → ara-C3iECgdg.js} +0 -0
- /package/dist/web/assets/{ara-BKT6no2T.js.br → ara-C3iECgdg.js.br} +0 -0
- /package/dist/web/assets/{ara-BKT6no2T.js.gz → ara-C3iECgdg.js.gz} +0 -0
- /package/dist/web/assets/{array-F4LNYbhF.js → array-Bn55RxR6.js} +0 -0
- /package/dist/web/assets/{asciidoc-BGur0ue3.js → asciidoc-gc8z_MMY.js} +0 -0
- /package/dist/web/assets/{asciidoc-BGur0ue3.js.br → asciidoc-gc8z_MMY.js.br} +0 -0
- /package/dist/web/assets/{asciidoc-BGur0ue3.js.gz → asciidoc-gc8z_MMY.js.gz} +0 -0
- /package/dist/web/assets/{asm-DOfgqCKD.js → asm-27qeoPOI.js} +0 -0
- /package/dist/web/assets/{asm-DOfgqCKD.js.br → asm-27qeoPOI.js.br} +0 -0
- /package/dist/web/assets/{asm-DOfgqCKD.js.gz → asm-27qeoPOI.js.gz} +0 -0
- /package/dist/web/assets/{aurora-x-D64MWGxe.js → aurora-x-C5J9fWe1.js} +0 -0
- /package/dist/web/assets/{aurora-x-D64MWGxe.js.br → aurora-x-C5J9fWe1.js.br} +0 -0
- /package/dist/web/assets/{aurora-x-D64MWGxe.js.gz → aurora-x-C5J9fWe1.js.gz} +0 -0
- /package/dist/web/assets/{awk-B_r8LcWp.js → awk-B7GBzF92.js} +0 -0
- /package/dist/web/assets/{awk-B_r8LcWp.js.br → awk-B7GBzF92.js.br} +0 -0
- /package/dist/web/assets/{awk-B_r8LcWp.js.gz → awk-B7GBzF92.js.gz} +0 -0
- /package/dist/web/assets/{ayu-dark-DlDyr9-5.js → ayu-dark-XlnQhuLL.js} +0 -0
- /package/dist/web/assets/{ayu-dark-DlDyr9-5.js.br → ayu-dark-XlnQhuLL.js.br} +0 -0
- /package/dist/web/assets/{ayu-dark-DlDyr9-5.js.gz → ayu-dark-XlnQhuLL.js.gz} +0 -0
- /package/dist/web/assets/{ayu-light-BF0a181n.js → ayu-light-DKLLilkU.js} +0 -0
- /package/dist/web/assets/{ayu-light-BF0a181n.js.br → ayu-light-DKLLilkU.js.br} +0 -0
- /package/dist/web/assets/{ayu-light-BF0a181n.js.gz → ayu-light-DKLLilkU.js.gz} +0 -0
- /package/dist/web/assets/{ayu-mirage-B6hnRsHM.js → ayu-mirage-Dv-XOprJ.js} +0 -0
- /package/dist/web/assets/{ayu-mirage-B6hnRsHM.js.br → ayu-mirage-Dv-XOprJ.js.br} +0 -0
- /package/dist/web/assets/{ayu-mirage-B6hnRsHM.js.gz → ayu-mirage-Dv-XOprJ.js.gz} +0 -0
- /package/dist/web/assets/{ballerina-CyhD34qA.js → ballerina-DACRT-sT.js} +0 -0
- /package/dist/web/assets/{ballerina-CyhD34qA.js.br → ballerina-DACRT-sT.js.br} +0 -0
- /package/dist/web/assets/{ballerina-CyhD34qA.js.gz → ballerina-DACRT-sT.js.gz} +0 -0
- /package/dist/web/assets/{bat-wHB_k1YG.js → bat-BlQCq2XE.js} +0 -0
- /package/dist/web/assets/{bat-wHB_k1YG.js.br → bat-BlQCq2XE.js.br} +0 -0
- /package/dist/web/assets/{bat-wHB_k1YG.js.gz → bat-BlQCq2XE.js.gz} +0 -0
- /package/dist/web/assets/{beancount-SUF8MnzM.js → beancount-DYDztRI0.js} +0 -0
- /package/dist/web/assets/{beancount-SUF8MnzM.js.br → beancount-DYDztRI0.js.br} +0 -0
- /package/dist/web/assets/{beancount-SUF8MnzM.js.gz → beancount-DYDztRI0.js.gz} +0 -0
- /package/dist/web/assets/{berry-BP_34_jr.js → berry-BE5YKqvx.js} +0 -0
- /package/dist/web/assets/{berry-BP_34_jr.js.br → berry-BE5YKqvx.js.br} +0 -0
- /package/dist/web/assets/{berry-BP_34_jr.js.gz → berry-BE5YKqvx.js.gz} +0 -0
- /package/dist/web/assets/{bibtex-DKgKw2bN.js → bibtex-CAm7mgEm.js} +0 -0
- /package/dist/web/assets/{bibtex-DKgKw2bN.js.br → bibtex-CAm7mgEm.js.br} +0 -0
- /package/dist/web/assets/{bibtex-DKgKw2bN.js.gz → bibtex-CAm7mgEm.js.gz} +0 -0
- /package/dist/web/assets/{bicep-BjU-KQeN.js → bicep-BKgAbfVa.js} +0 -0
- /package/dist/web/assets/{bicep-BjU-KQeN.js.br → bicep-BKgAbfVa.js.br} +0 -0
- /package/dist/web/assets/{bicep-BjU-KQeN.js.gz → bicep-BKgAbfVa.js.gz} +0 -0
- /package/dist/web/assets/{bird2-CCFmrT2P.js → bird2-yrBNbW1G.js} +0 -0
- /package/dist/web/assets/{bird2-CCFmrT2P.js.br → bird2-yrBNbW1G.js.br} +0 -0
- /package/dist/web/assets/{bird2-CCFmrT2P.js.gz → bird2-yrBNbW1G.js.gz} +0 -0
- /package/dist/web/assets/{c-BX-1170_.js → c-CD4cF1Lj.js} +0 -0
- /package/dist/web/assets/{c-BX-1170_.js.br → c-CD4cF1Lj.js.br} +0 -0
- /package/dist/web/assets/{c-BX-1170_.js.gz → c-CD4cF1Lj.js.gz} +0 -0
- /package/dist/web/assets/{c3-DSc4IcLQ.js → c3-D_DrzBUd.js} +0 -0
- /package/dist/web/assets/{c3-DSc4IcLQ.js.br → c3-D_DrzBUd.js.br} +0 -0
- /package/dist/web/assets/{c3-DSc4IcLQ.js.gz → c3-D_DrzBUd.js.gz} +0 -0
- /package/dist/web/assets/{cadence-CUaLlWyn.js → cadence-CUFCEgG9.js} +0 -0
- /package/dist/web/assets/{cadence-CUaLlWyn.js.br → cadence-CUFCEgG9.js.br} +0 -0
- /package/dist/web/assets/{cadence-CUaLlWyn.js.gz → cadence-CUFCEgG9.js.gz} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-DeE2-kd5.js → can-open-in-ppm-7M6412iz.js} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-DeE2-kd5.js.br → can-open-in-ppm-7M6412iz.js.br} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-DeE2-kd5.js.gz → can-open-in-ppm-7M6412iz.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-BT3IMDYa.js → catppuccin-frappe-Dn32MuhA.js} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-BT3IMDYa.js.br → catppuccin-frappe-Dn32MuhA.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-BT3IMDYa.js.gz → catppuccin-frappe-Dn32MuhA.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-latte-DM9i15n3.js → catppuccin-latte-Dewo7yDf.js} +0 -0
- /package/dist/web/assets/{catppuccin-latte-DM9i15n3.js.br → catppuccin-latte-Dewo7yDf.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-latte-DM9i15n3.js.gz → catppuccin-latte-Dewo7yDf.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CAEDr_h3.js → catppuccin-macchiato-D8WOWZeo.js} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CAEDr_h3.js.br → catppuccin-macchiato-D8WOWZeo.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CAEDr_h3.js.gz → catppuccin-macchiato-D8WOWZeo.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-BzOmDckq.js → catppuccin-mocha-b0md48XM.js} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-BzOmDckq.js.br → catppuccin-mocha-b0md48XM.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-BzOmDckq.js.gz → catppuccin-mocha-b0md48XM.js.gz} +0 -0
- /package/dist/web/assets/{clarity-BijZXjQ6.js → clarity-Ct3UqLBj.js} +0 -0
- /package/dist/web/assets/{clarity-BijZXjQ6.js.br → clarity-Ct3UqLBj.js.br} +0 -0
- /package/dist/web/assets/{clarity-BijZXjQ6.js.gz → clarity-Ct3UqLBj.js.gz} +0 -0
- /package/dist/web/assets/{clojure--ad2221W.js → clojure-CwP5aPEo.js} +0 -0
- /package/dist/web/assets/{clojure--ad2221W.js.br → clojure-CwP5aPEo.js.br} +0 -0
- /package/dist/web/assets/{clojure--ad2221W.js.gz → clojure-CwP5aPEo.js.gz} +0 -0
- /package/dist/web/assets/{cmake-DyjUMpXU.js → cmake-D5RF49e5.js} +0 -0
- /package/dist/web/assets/{cmake-DyjUMpXU.js.br → cmake-D5RF49e5.js.br} +0 -0
- /package/dist/web/assets/{cmake-DyjUMpXU.js.gz → cmake-D5RF49e5.js.gz} +0 -0
- /package/dist/web/assets/{codeowners-BeMhKnC9.js → codeowners-Cl5897L_.js} +0 -0
- /package/dist/web/assets/{codeql-BGtwwp5_.js → codeql-BKh1RCg0.js} +0 -0
- /package/dist/web/assets/{codeql-BGtwwp5_.js.br → codeql-BKh1RCg0.js.br} +0 -0
- /package/dist/web/assets/{codeql-BGtwwp5_.js.gz → codeql-BKh1RCg0.js.gz} +0 -0
- /package/dist/web/assets/{common-lisp--ldIKs5M.js → common-lisp-BhHuD6t0.js} +0 -0
- /package/dist/web/assets/{common-lisp--ldIKs5M.js.br → common-lisp-BhHuD6t0.js.br} +0 -0
- /package/dist/web/assets/{common-lisp--ldIKs5M.js.gz → common-lisp-BhHuD6t0.js.gz} +0 -0
- /package/dist/web/assets/{coq-CRn01_Db.js → coq-Dco3qwD8.js} +0 -0
- /package/dist/web/assets/{coq-CRn01_Db.js.br → coq-Dco3qwD8.js.br} +0 -0
- /package/dist/web/assets/{coq-CRn01_Db.js.gz → coq-Dco3qwD8.js.gz} +0 -0
- /package/dist/web/assets/{csharp-CuWM1IYq.js → csharp-Dpjw9ZA9.js} +0 -0
- /package/dist/web/assets/{csharp-CuWM1IYq.js.br → csharp-Dpjw9ZA9.js.br} +0 -0
- /package/dist/web/assets/{csharp-CuWM1IYq.js.gz → csharp-Dpjw9ZA9.js.gz} +0 -0
- /package/dist/web/assets/{css-CQ_jz6Vl.js → css-CJ8lnCAk.js} +0 -0
- /package/dist/web/assets/{css-CQ_jz6Vl.js.br → css-CJ8lnCAk.js.br} +0 -0
- /package/dist/web/assets/{css-CQ_jz6Vl.js.gz → css-CJ8lnCAk.js.gz} +0 -0
- /package/dist/web/assets/{csv-DP77pbR8.js → csv-BAcTN8Kt.js} +0 -0
- /package/dist/web/assets/{csv-DP77pbR8.js.br → csv-BAcTN8Kt.js.br} +0 -0
- /package/dist/web/assets/{csv-DP77pbR8.js.gz → csv-BAcTN8Kt.js.gz} +0 -0
- /package/dist/web/assets/{cue-DScL5ELc.js → cue-Cr6y60TA.js} +0 -0
- /package/dist/web/assets/{cue-DScL5ELc.js.br → cue-Cr6y60TA.js.br} +0 -0
- /package/dist/web/assets/{cue-DScL5ELc.js.gz → cue-Cr6y60TA.js.gz} +0 -0
- /package/dist/web/assets/{cypher-8ehI2vrw.js → cypher-DWtqXXFP.js} +0 -0
- /package/dist/web/assets/{cypher-8ehI2vrw.js.br → cypher-DWtqXXFP.js.br} +0 -0
- /package/dist/web/assets/{cypher-8ehI2vrw.js.gz → cypher-DWtqXXFP.js.gz} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BokGhmK2.js → cytoscape.esm-C-5Awcry.js} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BokGhmK2.js.br → cytoscape.esm-C-5Awcry.js.br} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BokGhmK2.js.gz → cytoscape.esm-C-5Awcry.js.gz} +0 -0
- /package/dist/web/assets/{d-BvFZUewv.js → d-BASiTZk4.js} +0 -0
- /package/dist/web/assets/{d-BvFZUewv.js.br → d-BASiTZk4.js.br} +0 -0
- /package/dist/web/assets/{d-BvFZUewv.js.gz → d-BASiTZk4.js.gz} +0 -0
- /package/dist/web/assets/{dark-plus-DKLywSFP.js → dark-plus-56kmnrcl.js} +0 -0
- /package/dist/web/assets/{dark-plus-DKLywSFP.js.br → dark-plus-56kmnrcl.js.br} +0 -0
- /package/dist/web/assets/{dark-plus-DKLywSFP.js.gz → dark-plus-56kmnrcl.js.gz} +0 -0
- /package/dist/web/assets/{dart-Cs_NJAZ7.js → dart-C5mZnjoE.js} +0 -0
- /package/dist/web/assets/{dart-Cs_NJAZ7.js.br → dart-C5mZnjoE.js.br} +0 -0
- /package/dist/web/assets/{dart-Cs_NJAZ7.js.gz → dart-C5mZnjoE.js.gz} +0 -0
- /package/dist/web/assets/{dax-BB8KgXzI.js → dax-B4I2e7d8.js} +0 -0
- /package/dist/web/assets/{dax-BB8KgXzI.js.br → dax-B4I2e7d8.js.br} +0 -0
- /package/dist/web/assets/{dax-BB8KgXzI.js.gz → dax-B4I2e7d8.js.gz} +0 -0
- /package/dist/web/assets/{defaultLocale-4xAk2LVU.js → defaultLocale-DNG1xVq7.js} +0 -0
- /package/dist/web/assets/{defaultLocale-4xAk2LVU.js.br → defaultLocale-DNG1xVq7.js.br} +0 -0
- /package/dist/web/assets/{defaultLocale-4xAk2LVU.js.gz → defaultLocale-DNG1xVq7.js.gz} +0 -0
- /package/dist/web/assets/{design-system-status-label-ekiLyjKn.js → design-system-status-label-BRbs7m2y.js} +0 -0
- /package/dist/web/assets/{desktop-Cs6Sk5Pu.js → desktop-DekGg0BT.js} +0 -0
- /package/dist/web/assets/{desktop-Cs6Sk5Pu.js.br → desktop-DekGg0BT.js.br} +0 -0
- /package/dist/web/assets/{desktop-Cs6Sk5Pu.js.gz → desktop-DekGg0BT.js.gz} +0 -0
- /package/dist/web/assets/{diff-CXSq83h3.js → diff-CWnJBd73.js} +0 -0
- /package/dist/web/assets/{diff-CXSq83h3.js.br → diff-CWnJBd73.js.br} +0 -0
- /package/dist/web/assets/{diff-CXSq83h3.js.gz → diff-CWnJBd73.js.gz} +0 -0
- /package/dist/web/assets/{dist-0EbiTA3n.js → dist-BSIakJVz.js} +0 -0
- /package/dist/web/assets/{dist-0EbiTA3n.js.br → dist-BSIakJVz.js.br} +0 -0
- /package/dist/web/assets/{dist-0EbiTA3n.js.gz → dist-BSIakJVz.js.gz} +0 -0
- /package/dist/web/assets/{dist-D7mSb2HC.js → dist-BoIxGd-y.js} +0 -0
- /package/dist/web/assets/{dist-D7mSb2HC.js.br → dist-BoIxGd-y.js.br} +0 -0
- /package/dist/web/assets/{dist-D7mSb2HC.js.gz → dist-BoIxGd-y.js.gz} +0 -0
- /package/dist/web/assets/{docker-BX5p1mZ3.js → docker-DevchDxK.js} +0 -0
- /package/dist/web/assets/{docker-BX5p1mZ3.js.br → docker-DevchDxK.js.br} +0 -0
- /package/dist/web/assets/{docker-BX5p1mZ3.js.gz → docker-DevchDxK.js.gz} +0 -0
- /package/dist/web/assets/{dotenv-D8xdMiRo.js → dotenv-DCvtdaGJ.js} +0 -0
- /package/dist/web/assets/{dotenv-D8xdMiRo.js.br → dotenv-DCvtdaGJ.js.br} +0 -0
- /package/dist/web/assets/{dotenv-D8xdMiRo.js.gz → dotenv-DCvtdaGJ.js.gz} +0 -0
- /package/dist/web/assets/{dracula-BNPKmiGE.js → dracula-8U6Vkk3l.js} +0 -0
- /package/dist/web/assets/{dracula-BNPKmiGE.js.br → dracula-8U6Vkk3l.js.br} +0 -0
- /package/dist/web/assets/{dracula-BNPKmiGE.js.gz → dracula-8U6Vkk3l.js.gz} +0 -0
- /package/dist/web/assets/{dracula-soft-Bv4lLEFc.js → dracula-soft-Bfeew5Wg.js} +0 -0
- /package/dist/web/assets/{dracula-soft-Bv4lLEFc.js.br → dracula-soft-Bfeew5Wg.js.br} +0 -0
- /package/dist/web/assets/{dracula-soft-Bv4lLEFc.js.gz → dracula-soft-Bfeew5Wg.js.gz} +0 -0
- /package/dist/web/assets/{dream-maker-Yg8FPJu3.js → dream-maker-DDTJVuoy.js} +0 -0
- /package/dist/web/assets/{dream-maker-Yg8FPJu3.js.br → dream-maker-DDTJVuoy.js.br} +0 -0
- /package/dist/web/assets/{dream-maker-Yg8FPJu3.js.gz → dream-maker-DDTJVuoy.js.gz} +0 -0
- /package/dist/web/assets/{editor-font-CBszn6vt.js → editor-font-HIW3wb51.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-kBgNJmB7.js → emacs-lisp-CEHJqI4m.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-kBgNJmB7.js.br → emacs-lisp-CEHJqI4m.js.br} +0 -0
- /package/dist/web/assets/{emacs-lisp-kBgNJmB7.js.gz → emacs-lisp-CEHJqI4m.js.gz} +0 -0
- /package/dist/web/assets/{everforest-dark-7XTfQW4s.js → everforest-dark-CHHLt7cq.js} +0 -0
- /package/dist/web/assets/{everforest-dark-7XTfQW4s.js.br → everforest-dark-CHHLt7cq.js.br} +0 -0
- /package/dist/web/assets/{everforest-dark-7XTfQW4s.js.gz → everforest-dark-CHHLt7cq.js.gz} +0 -0
- /package/dist/web/assets/{everforest-light-CmPZPQmV.js → everforest-light-TcTbK1sM.js} +0 -0
- /package/dist/web/assets/{everforest-light-CmPZPQmV.js.br → everforest-light-TcTbK1sM.js.br} +0 -0
- /package/dist/web/assets/{everforest-light-CmPZPQmV.js.gz → everforest-light-TcTbK1sM.js.gz} +0 -0
- /package/dist/web/assets/{fennel-Dm71IPM6.js → fennel-Bh4vsA1A.js} +0 -0
- /package/dist/web/assets/{fennel-Dm71IPM6.js.br → fennel-Bh4vsA1A.js.br} +0 -0
- /package/dist/web/assets/{fennel-Dm71IPM6.js.gz → fennel-Bh4vsA1A.js.gz} +0 -0
- /package/dist/web/assets/{fish-CIzcfZjZ.js → fish-D0T0fILG.js} +0 -0
- /package/dist/web/assets/{fish-CIzcfZjZ.js.br → fish-D0T0fILG.js.br} +0 -0
- /package/dist/web/assets/{fish-CIzcfZjZ.js.gz → fish-D0T0fILG.js.gz} +0 -0
- /package/dist/web/assets/{fluent-DFSMEphj.js → fluent-CgXDXdyy.js} +0 -0
- /package/dist/web/assets/{fluent-DFSMEphj.js.br → fluent-CgXDXdyy.js.br} +0 -0
- /package/dist/web/assets/{fluent-DFSMEphj.js.gz → fluent-CgXDXdyy.js.gz} +0 -0
- /package/dist/web/assets/{format-bytes-FQmpZ25A.js → format-bytes-DRt-NOUN.js} +0 -0
- /package/dist/web/assets/{format-date-BMtvCeb9.js → format-date-CSHaU2wN.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-xnlj2dLW.js → fortran-free-form-CUg3Xhz4.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-xnlj2dLW.js.br → fortran-free-form-CUg3Xhz4.js.br} +0 -0
- /package/dist/web/assets/{fortran-free-form-xnlj2dLW.js.gz → fortran-free-form-CUg3Xhz4.js.gz} +0 -0
- /package/dist/web/assets/{gdscript-DFnznHD1.js → gdscript-Cx056p_k.js} +0 -0
- /package/dist/web/assets/{gdscript-DFnznHD1.js.br → gdscript-Cx056p_k.js.br} +0 -0
- /package/dist/web/assets/{gdscript-DFnznHD1.js.gz → gdscript-Cx056p_k.js.gz} +0 -0
- /package/dist/web/assets/{gdshader-B9wvgXVU.js → gdshader-Dj1qP4I5.js} +0 -0
- /package/dist/web/assets/{gdshader-B9wvgXVU.js.br → gdshader-Dj1qP4I5.js.br} +0 -0
- /package/dist/web/assets/{gdshader-B9wvgXVU.js.gz → gdshader-Dj1qP4I5.js.gz} +0 -0
- /package/dist/web/assets/{genie-Bz0RXdFf.js → genie-SBt15wn7.js} +0 -0
- /package/dist/web/assets/{genie-Bz0RXdFf.js.br → genie-SBt15wn7.js.br} +0 -0
- /package/dist/web/assets/{genie-Bz0RXdFf.js.gz → genie-SBt15wn7.js.gz} +0 -0
- /package/dist/web/assets/{gherkin-ZD8lWd_U.js → gherkin-bTJiHIrB.js} +0 -0
- /package/dist/web/assets/{gherkin-ZD8lWd_U.js.br → gherkin-bTJiHIrB.js.br} +0 -0
- /package/dist/web/assets/{gherkin-ZD8lWd_U.js.gz → gherkin-bTJiHIrB.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-D8IE4lln.js → github-dark-BOPhyugs.js} +0 -0
- /package/dist/web/assets/{github-dark-D8IE4lln.js.br → github-dark-BOPhyugs.js.br} +0 -0
- /package/dist/web/assets/{github-dark-D8IE4lln.js.gz → github-dark-BOPhyugs.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-default-Bv2-je5j.js → github-dark-default-Cktqe6NF.js} +0 -0
- /package/dist/web/assets/{github-dark-default-Bv2-je5j.js.br → github-dark-default-Cktqe6NF.js.br} +0 -0
- /package/dist/web/assets/{github-dark-default-Bv2-je5j.js.gz → github-dark-default-Cktqe6NF.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-Dn2Abfcl.js → github-dark-dimmed-CeWfII_B.js} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-Dn2Abfcl.js.br → github-dark-dimmed-CeWfII_B.js.br} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-Dn2Abfcl.js.gz → github-dark-dimmed-CeWfII_B.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-CPYPXNHn.js → github-dark-high-contrast-CTx8LpdV.js} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-CPYPXNHn.js.br → github-dark-high-contrast-CTx8LpdV.js.br} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-CPYPXNHn.js.gz → github-dark-high-contrast-CTx8LpdV.js.gz} +0 -0
- /package/dist/web/assets/{github-light-CVOMBMvb.js → github-light-DVsO5Un1.js} +0 -0
- /package/dist/web/assets/{github-light-CVOMBMvb.js.br → github-light-DVsO5Un1.js.br} +0 -0
- /package/dist/web/assets/{github-light-CVOMBMvb.js.gz → github-light-DVsO5Un1.js.gz} +0 -0
- /package/dist/web/assets/{github-light-default-6Ayk6lJY.js → github-light-default-BiyPxicr.js} +0 -0
- /package/dist/web/assets/{github-light-default-6Ayk6lJY.js.br → github-light-default-BiyPxicr.js.br} +0 -0
- /package/dist/web/assets/{github-light-default-6Ayk6lJY.js.gz → github-light-default-BiyPxicr.js.gz} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-BTGKd6JI.js → github-light-high-contrast-BPlnke0a.js} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-BTGKd6JI.js.br → github-light-high-contrast-BPlnke0a.js.br} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-BTGKd6JI.js.gz → github-light-high-contrast-BPlnke0a.js.gz} +0 -0
- /package/dist/web/assets/{gleam-UeA7_OU8.js → gleam-CWSxvD0C.js} +0 -0
- /package/dist/web/assets/{gleam-UeA7_OU8.js.br → gleam-CWSxvD0C.js.br} +0 -0
- /package/dist/web/assets/{gleam-UeA7_OU8.js.gz → gleam-CWSxvD0C.js.gz} +0 -0
- /package/dist/web/assets/{gn-DrdNDhFj.js → gn-D7NUVJuv.js} +0 -0
- /package/dist/web/assets/{gn-DrdNDhFj.js.br → gn-D7NUVJuv.js.br} +0 -0
- /package/dist/web/assets/{gn-DrdNDhFj.js.gz → gn-D7NUVJuv.js.gz} +0 -0
- /package/dist/web/assets/{gnuplot-D8vxhaGw.js → gnuplot-c5uXmJKc.js} +0 -0
- /package/dist/web/assets/{gnuplot-D8vxhaGw.js.br → gnuplot-c5uXmJKc.js.br} +0 -0
- /package/dist/web/assets/{gnuplot-D8vxhaGw.js.gz → gnuplot-c5uXmJKc.js.gz} +0 -0
- /package/dist/web/assets/{go-atNMhmH3.js → go-CRsHi4Cw.js} +0 -0
- /package/dist/web/assets/{go-atNMhmH3.js.br → go-CRsHi4Cw.js.br} +0 -0
- /package/dist/web/assets/{go-atNMhmH3.js.gz → go-CRsHi4Cw.js.gz} +0 -0
- /package/dist/web/assets/{groovy-CLRzHDW2.js → groovy-DpV0RA5r.js} +0 -0
- /package/dist/web/assets/{groovy-CLRzHDW2.js.br → groovy-DpV0RA5r.js.br} +0 -0
- /package/dist/web/assets/{groovy-CLRzHDW2.js.gz → groovy-DpV0RA5r.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CMSNCrAk.js → gruvbox-dark-hard-DD9fguUN.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CMSNCrAk.js.br → gruvbox-dark-hard-DD9fguUN.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CMSNCrAk.js.gz → gruvbox-dark-hard-DD9fguUN.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CR5wAM1c.js → gruvbox-dark-medium-BvcwpYJ-.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CR5wAM1c.js.br → gruvbox-dark-medium-BvcwpYJ-.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CR5wAM1c.js.gz → gruvbox-dark-medium-BvcwpYJ-.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-Ba1gP2O2.js → gruvbox-dark-soft-48dCxX9M.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-Ba1gP2O2.js.br → gruvbox-dark-soft-48dCxX9M.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-Ba1gP2O2.js.gz → gruvbox-dark-soft-48dCxX9M.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-ChSY383t.js → gruvbox-light-hard-CjJ994Ip.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-ChSY383t.js.br → gruvbox-light-hard-CjJ994Ip.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-ChSY383t.js.gz → gruvbox-light-hard-CjJ994Ip.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-DebZzeA2.js → gruvbox-light-medium-DQJQZ_rV.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-DebZzeA2.js.br → gruvbox-light-medium-DQJQZ_rV.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-DebZzeA2.js.gz → gruvbox-light-medium-DQJQZ_rV.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-CEWqv8Ew.js → gruvbox-light-soft-AqsC9mKw.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-CEWqv8Ew.js.br → gruvbox-light-soft-AqsC9mKw.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-CEWqv8Ew.js.gz → gruvbox-light-soft-AqsC9mKw.js.gz} +0 -0
- /package/dist/web/assets/{haskell-CkgCblz9.js → haskell-B5V7yvmh.js} +0 -0
- /package/dist/web/assets/{haskell-CkgCblz9.js.br → haskell-B5V7yvmh.js.br} +0 -0
- /package/dist/web/assets/{haskell-CkgCblz9.js.gz → haskell-B5V7yvmh.js.gz} +0 -0
- /package/dist/web/assets/{haxe-DwOdNXRl.js → haxe-LWTKfPKr.js} +0 -0
- /package/dist/web/assets/{haxe-DwOdNXRl.js.br → haxe-LWTKfPKr.js.br} +0 -0
- /package/dist/web/assets/{haxe-DwOdNXRl.js.gz → haxe-LWTKfPKr.js.gz} +0 -0
- /package/dist/web/assets/{hcl-DXsxN8nX.js → hcl-QmNZdAtI.js} +0 -0
- /package/dist/web/assets/{hcl-DXsxN8nX.js.br → hcl-QmNZdAtI.js.br} +0 -0
- /package/dist/web/assets/{hcl-DXsxN8nX.js.gz → hcl-QmNZdAtI.js.gz} +0 -0
- /package/dist/web/assets/{hjson-oBOZxrL4.js → hjson-CboJsAzK.js} +0 -0
- /package/dist/web/assets/{hjson-oBOZxrL4.js.br → hjson-CboJsAzK.js.br} +0 -0
- /package/dist/web/assets/{hjson-oBOZxrL4.js.gz → hjson-CboJsAzK.js.gz} +0 -0
- /package/dist/web/assets/{hlsl-VEZxDU3L.js → hlsl-Bd-DO_WL.js} +0 -0
- /package/dist/web/assets/{hlsl-VEZxDU3L.js.br → hlsl-Bd-DO_WL.js.br} +0 -0
- /package/dist/web/assets/{hlsl-VEZxDU3L.js.gz → hlsl-Bd-DO_WL.js.gz} +0 -0
- /package/dist/web/assets/{horizon-C_xHTsMO.js → horizon-CU8Bi_ss.js} +0 -0
- /package/dist/web/assets/{horizon-C_xHTsMO.js.br → horizon-CU8Bi_ss.js.br} +0 -0
- /package/dist/web/assets/{horizon-C_xHTsMO.js.gz → horizon-CU8Bi_ss.js.gz} +0 -0
- /package/dist/web/assets/{horizon-bright-CJd-vMFG.js → horizon-bright-iSQ3_3jP.js} +0 -0
- /package/dist/web/assets/{horizon-bright-CJd-vMFG.js.br → horizon-bright-iSQ3_3jP.js.br} +0 -0
- /package/dist/web/assets/{horizon-bright-CJd-vMFG.js.gz → horizon-bright-iSQ3_3jP.js.gz} +0 -0
- /package/dist/web/assets/{houston-BYOfZpV9.js → houston-CTXv3Puz.js} +0 -0
- /package/dist/web/assets/{houston-BYOfZpV9.js.br → houston-CTXv3Puz.js.br} +0 -0
- /package/dist/web/assets/{houston-BYOfZpV9.js.gz → houston-CTXv3Puz.js.gz} +0 -0
- /package/dist/web/assets/{hy-DiruP4wR.js → hy-Cd4hTidD.js} +0 -0
- /package/dist/web/assets/{hy-DiruP4wR.js.br → hy-Cd4hTidD.js.br} +0 -0
- /package/dist/web/assets/{hy-DiruP4wR.js.gz → hy-Cd4hTidD.js.gz} +0 -0
- /package/dist/web/assets/{image-gallery-B16hO6Ab.js → image-gallery-CIrjkWxw.js} +0 -0
- /package/dist/web/assets/{image-preview-geometry-D4Ihz4UV.js → image-preview-geometry-DYxgeH3D.js} +0 -0
- /package/dist/web/assets/{imba-BBm5cmpQ.js → imba-BipCHEY2.js} +0 -0
- /package/dist/web/assets/{imba-BBm5cmpQ.js.br → imba-BipCHEY2.js.br} +0 -0
- /package/dist/web/assets/{imba-BBm5cmpQ.js.gz → imba-BipCHEY2.js.gz} +0 -0
- /package/dist/web/assets/{ini-DIjchSIH.js → ini-Dd1KkMrB.js} +0 -0
- /package/dist/web/assets/{ini-DIjchSIH.js.br → ini-Dd1KkMrB.js.br} +0 -0
- /package/dist/web/assets/{ini-DIjchSIH.js.gz → ini-Dd1KkMrB.js.gz} +0 -0
- /package/dist/web/assets/{init-Cf64k-PQ.js → init-D-92dhHm.js} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-DoNOpNUH.js → isArrayLikeObject-DwIR3mpY.js} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-DoNOpNUH.js.br → isArrayLikeObject-DwIR3mpY.js.br} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-DoNOpNUH.js.gz → isArrayLikeObject-DwIR3mpY.js.gz} +0 -0
- /package/dist/web/assets/{java-BjdsRxXN.js → java-Dwvg585v.js} +0 -0
- /package/dist/web/assets/{java-BjdsRxXN.js.br → java-Dwvg585v.js.br} +0 -0
- /package/dist/web/assets/{java-BjdsRxXN.js.gz → java-Dwvg585v.js.gz} +0 -0
- /package/dist/web/assets/{javascript-R2SZ_OEC.js → javascript-C5Y3hfxg.js} +0 -0
- /package/dist/web/assets/{javascript-R2SZ_OEC.js.br → javascript-C5Y3hfxg.js.br} +0 -0
- /package/dist/web/assets/{javascript-R2SZ_OEC.js.gz → javascript-C5Y3hfxg.js.gz} +0 -0
- /package/dist/web/assets/{json-CYCJeTwK.js → json--kkpOdlG.js} +0 -0
- /package/dist/web/assets/{json-CYCJeTwK.js.br → json--kkpOdlG.js.br} +0 -0
- /package/dist/web/assets/{json-CYCJeTwK.js.gz → json--kkpOdlG.js.gz} +0 -0
- /package/dist/web/assets/{json5-0Pz845K0.js → json5-mPOwTOsB.js} +0 -0
- /package/dist/web/assets/{json5-0Pz845K0.js.br → json5-mPOwTOsB.js.br} +0 -0
- /package/dist/web/assets/{json5-0Pz845K0.js.gz → json5-mPOwTOsB.js.gz} +0 -0
- /package/dist/web/assets/{jsonc-B0jdT4uM.js → jsonc-Bie0E6D3.js} +0 -0
- /package/dist/web/assets/{jsonc-B0jdT4uM.js.br → jsonc-Bie0E6D3.js.br} +0 -0
- /package/dist/web/assets/{jsonc-B0jdT4uM.js.gz → jsonc-Bie0E6D3.js.gz} +0 -0
- /package/dist/web/assets/{jsonl-CdvFKZtz.js → jsonl-CpqHmtC1.js} +0 -0
- /package/dist/web/assets/{jsonl-CdvFKZtz.js.br → jsonl-CpqHmtC1.js.br} +0 -0
- /package/dist/web/assets/{jsonl-CdvFKZtz.js.gz → jsonl-CpqHmtC1.js.gz} +0 -0
- /package/dist/web/assets/{jsonnet-BYd5ZGqe.js → jsonnet-D21Ms51e.js} +0 -0
- /package/dist/web/assets/{jsonnet-BYd5ZGqe.js.br → jsonnet-D21Ms51e.js.br} +0 -0
- /package/dist/web/assets/{jsonnet-BYd5ZGqe.js.gz → jsonnet-D21Ms51e.js.gz} +0 -0
- /package/dist/web/assets/{jssm-BlBU_IK1.js → jssm-BXnl1nur.js} +0 -0
- /package/dist/web/assets/{jssm-BlBU_IK1.js.br → jssm-BXnl1nur.js.br} +0 -0
- /package/dist/web/assets/{jssm-BlBU_IK1.js.gz → jssm-BXnl1nur.js.gz} +0 -0
- /package/dist/web/assets/{jsx-CsWR7aMm.js → jsx-D4sv2qET.js} +0 -0
- /package/dist/web/assets/{jsx-CsWR7aMm.js.br → jsx-D4sv2qET.js.br} +0 -0
- /package/dist/web/assets/{jsx-CsWR7aMm.js.gz → jsx-D4sv2qET.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-C6ogFc3X.js → kanagawa-dragon-DhxR0UjL.js} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-C6ogFc3X.js.br → kanagawa-dragon-DhxR0UjL.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-C6ogFc3X.js.gz → kanagawa-dragon-DhxR0UjL.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-8esZNUbA.js → kanagawa-lotus-fupRg5wp.js} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-8esZNUbA.js.br → kanagawa-lotus-fupRg5wp.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-8esZNUbA.js.gz → kanagawa-lotus-fupRg5wp.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-wave-C-yWQ6RD.js → kanagawa-wave-DSWbRS9M.js} +0 -0
- /package/dist/web/assets/{kanagawa-wave-C-yWQ6RD.js.br → kanagawa-wave-DSWbRS9M.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-wave-C-yWQ6RD.js.gz → kanagawa-wave-DSWbRS9M.js.gz} +0 -0
- /package/dist/web/assets/{katex-Cz0KLyXA.js → katex-CDEl5S5u.js} +0 -0
- /package/dist/web/assets/{katex-Cz0KLyXA.js.br → katex-CDEl5S5u.js.br} +0 -0
- /package/dist/web/assets/{katex-Cz0KLyXA.js.gz → katex-CDEl5S5u.js.gz} +0 -0
- /package/dist/web/assets/{kdl-D712OVXR.js → kdl-DirGHqUy.js} +0 -0
- /package/dist/web/assets/{kdl-D712OVXR.js.br → kdl-DirGHqUy.js.br} +0 -0
- /package/dist/web/assets/{kdl-D712OVXR.js.gz → kdl-DirGHqUy.js.gz} +0 -0
- /package/dist/web/assets/{kotlin-BEUa7XzN.js → kotlin-DkhUVMDC.js} +0 -0
- /package/dist/web/assets/{kotlin-BEUa7XzN.js.br → kotlin-DkhUVMDC.js.br} +0 -0
- /package/dist/web/assets/{kotlin-BEUa7XzN.js.gz → kotlin-DkhUVMDC.js.gz} +0 -0
- /package/dist/web/assets/{kusto-n4J6aIey.js → kusto-DU7OpovF.js} +0 -0
- /package/dist/web/assets/{kusto-n4J6aIey.js.br → kusto-DU7OpovF.js.br} +0 -0
- /package/dist/web/assets/{kusto-n4J6aIey.js.gz → kusto-DU7OpovF.js.gz} +0 -0
- /package/dist/web/assets/{laserwave-CddL9sH-.js → laserwave-iLKb1ZCT.js} +0 -0
- /package/dist/web/assets/{laserwave-CddL9sH-.js.br → laserwave-iLKb1ZCT.js.br} +0 -0
- /package/dist/web/assets/{laserwave-CddL9sH-.js.gz → laserwave-iLKb1ZCT.js.gz} +0 -0
- /package/dist/web/assets/{lean-CS8dnaPi.js → lean-Cuvh_QAP.js} +0 -0
- /package/dist/web/assets/{lean-CS8dnaPi.js.br → lean-Cuvh_QAP.js.br} +0 -0
- /package/dist/web/assets/{lean-CS8dnaPi.js.gz → lean-Cuvh_QAP.js.gz} +0 -0
- /package/dist/web/assets/{less-D7VWEXeK.js → less-B5tQZOdI.js} +0 -0
- /package/dist/web/assets/{less-D7VWEXeK.js.br → less-B5tQZOdI.js.br} +0 -0
- /package/dist/web/assets/{less-D7VWEXeK.js.gz → less-B5tQZOdI.js.gz} +0 -0
- /package/dist/web/assets/{libesm-5wREk7JN.js → libesm-o0l6OH-c.js} +0 -0
- /package/dist/web/assets/{libesm-5wREk7JN.js.br → libesm-o0l6OH-c.js.br} +0 -0
- /package/dist/web/assets/{libesm-5wREk7JN.js.gz → libesm-o0l6OH-c.js.gz} +0 -0
- /package/dist/web/assets/{light-plus-DUh-yC9k.js → light-plus-DiHU2KL5.js} +0 -0
- /package/dist/web/assets/{light-plus-DUh-yC9k.js.br → light-plus-DiHU2KL5.js.br} +0 -0
- /package/dist/web/assets/{light-plus-DUh-yC9k.js.gz → light-plus-DiHU2KL5.js.gz} +0 -0
- /package/dist/web/assets/{llvm-P1D8XyMB.js → llvm-sCBTKCKN.js} +0 -0
- /package/dist/web/assets/{llvm-P1D8XyMB.js.br → llvm-sCBTKCKN.js.br} +0 -0
- /package/dist/web/assets/{llvm-P1D8XyMB.js.gz → llvm-sCBTKCKN.js.gz} +0 -0
- /package/dist/web/assets/{log-BGft0RQz.js → log-DtyR34Ie.js} +0 -0
- /package/dist/web/assets/{log-BGft0RQz.js.br → log-DtyR34Ie.js.br} +0 -0
- /package/dist/web/assets/{log-BGft0RQz.js.gz → log-DtyR34Ie.js.gz} +0 -0
- /package/dist/web/assets/{logo-uFZx2JEw.js → logo-CP91aQyG.js} +0 -0
- /package/dist/web/assets/{logo-uFZx2JEw.js.br → logo-CP91aQyG.js.br} +0 -0
- /package/dist/web/assets/{logo-uFZx2JEw.js.gz → logo-CP91aQyG.js.gz} +0 -0
- /package/dist/web/assets/{luau-aDpnpIe3.js → luau-nfGo2ulP.js} +0 -0
- /package/dist/web/assets/{luau-aDpnpIe3.js.br → luau-nfGo2ulP.js.br} +0 -0
- /package/dist/web/assets/{luau-aDpnpIe3.js.gz → luau-nfGo2ulP.js.gz} +0 -0
- /package/dist/web/assets/{make-DwjpJeU5.js → make-XbDn9GHe.js} +0 -0
- /package/dist/web/assets/{make-DwjpJeU5.js.br → make-XbDn9GHe.js.br} +0 -0
- /package/dist/web/assets/{make-DwjpJeU5.js.gz → make-XbDn9GHe.js.gz} +0 -0
- /package/dist/web/assets/{markdown-DC-eWqXi.js → markdown-BB1_3xLr.js} +0 -0
- /package/dist/web/assets/{markdown-DC-eWqXi.js.br → markdown-BB1_3xLr.js.br} +0 -0
- /package/dist/web/assets/{markdown-DC-eWqXi.js.gz → markdown-BB1_3xLr.js.gz} +0 -0
- /package/dist/web/assets/{marked.esm-DDb9MclE.js → marked.esm-CWfigb9x.js} +0 -0
- /package/dist/web/assets/{marked.esm-DDb9MclE.js.br → marked.esm-CWfigb9x.js.br} +0 -0
- /package/dist/web/assets/{marked.esm-DDb9MclE.js.gz → marked.esm-CWfigb9x.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-9BivM5cB.js → material-theme-CIx_sxAy.js} +0 -0
- /package/dist/web/assets/{material-theme-9BivM5cB.js.br → material-theme-CIx_sxAy.js.br} +0 -0
- /package/dist/web/assets/{material-theme-9BivM5cB.js.gz → material-theme-CIx_sxAy.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-darker-Bg7I3WIw.js → material-theme-darker-DsQeueDD.js} +0 -0
- /package/dist/web/assets/{material-theme-darker-Bg7I3WIw.js.br → material-theme-darker-DsQeueDD.js.br} +0 -0
- /package/dist/web/assets/{material-theme-darker-Bg7I3WIw.js.gz → material-theme-darker-DsQeueDD.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BoEshpBb.js → material-theme-lighter-x_lMi74j.js} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BoEshpBb.js.br → material-theme-lighter-x_lMi74j.js.br} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BoEshpBb.js.gz → material-theme-lighter-x_lMi74j.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-ocean-CmKcBlBP.js → material-theme-ocean-Bkgh25P8.js} +0 -0
- /package/dist/web/assets/{material-theme-ocean-CmKcBlBP.js.br → material-theme-ocean-Bkgh25P8.js.br} +0 -0
- /package/dist/web/assets/{material-theme-ocean-CmKcBlBP.js.gz → material-theme-ocean-Bkgh25P8.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CUyfHC0C.js → material-theme-palenight-CoOjdbti.js} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CUyfHC0C.js.br → material-theme-palenight-CoOjdbti.js.br} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CUyfHC0C.js.gz → material-theme-palenight-CoOjdbti.js.gz} +0 -0
- /package/dist/web/assets/{math-DAaFbMeh.js → math-CpYA_I4u.js} +0 -0
- /package/dist/web/assets/{matlab-CqBfVqYF.js → matlab-D6xZas_8.js} +0 -0
- /package/dist/web/assets/{matlab-CqBfVqYF.js.br → matlab-D6xZas_8.js.br} +0 -0
- /package/dist/web/assets/{matlab-CqBfVqYF.js.gz → matlab-D6xZas_8.js.gz} +0 -0
- /package/dist/web/assets/{mdx-CdC2mVzF.js → mdx-Cl5_YNoz.js} +0 -0
- /package/dist/web/assets/{mdx-CdC2mVzF.js.br → mdx-Cl5_YNoz.js.br} +0 -0
- /package/dist/web/assets/{mdx-CdC2mVzF.js.gz → mdx-Cl5_YNoz.js.gz} +0 -0
- /package/dist/web/assets/{mermaid-B542RnGP.js → mermaid-8Eow4jz_.js} +0 -0
- /package/dist/web/assets/{mermaid-B542RnGP.js.br → mermaid-8Eow4jz_.js.br} +0 -0
- /package/dist/web/assets/{mermaid-B542RnGP.js.gz → mermaid-8Eow4jz_.js.gz} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-D7f-LQ8x.js → metric-chart-canvas-CigHBHid.js} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-D7f-LQ8x.js.br → metric-chart-canvas-CigHBHid.js.br} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-D7f-LQ8x.js.gz → metric-chart-canvas-CigHBHid.js.gz} +0 -0
- /package/dist/web/assets/{min-dark-uGP-9UE_.js → min-dark-D4DhjgRE.js} +0 -0
- /package/dist/web/assets/{min-dark-uGP-9UE_.js.br → min-dark-D4DhjgRE.js.br} +0 -0
- /package/dist/web/assets/{min-dark-uGP-9UE_.js.gz → min-dark-D4DhjgRE.js.gz} +0 -0
- /package/dist/web/assets/{min-light-BkFlXt3G.js → min-light-DzAckd0t.js} +0 -0
- /package/dist/web/assets/{min-light-BkFlXt3G.js.br → min-light-DzAckd0t.js.br} +0 -0
- /package/dist/web/assets/{min-light-BkFlXt3G.js.gz → min-light-DzAckd0t.js.gz} +0 -0
- /package/dist/web/assets/{mipsasm-CkaxcMA-.js → mipsasm-zI_zu0tj.js} +0 -0
- /package/dist/web/assets/{mipsasm-CkaxcMA-.js.br → mipsasm-zI_zu0tj.js.br} +0 -0
- /package/dist/web/assets/{mipsasm-CkaxcMA-.js.gz → mipsasm-zI_zu0tj.js.gz} +0 -0
- /package/dist/web/assets/{mojo-DDh7AQLv.js → mojo-DQnGGPHf.js} +0 -0
- /package/dist/web/assets/{mojo-DDh7AQLv.js.br → mojo-DQnGGPHf.js.br} +0 -0
- /package/dist/web/assets/{mojo-DDh7AQLv.js.gz → mojo-DQnGGPHf.js.gz} +0 -0
- /package/dist/web/assets/{monokai-BA4dkSrE.js → monokai-CrFoD2VD.js} +0 -0
- /package/dist/web/assets/{monokai-BA4dkSrE.js.br → monokai-CrFoD2VD.js.br} +0 -0
- /package/dist/web/assets/{monokai-BA4dkSrE.js.gz → monokai-CrFoD2VD.js.gz} +0 -0
- /package/dist/web/assets/{moonbit-DGxZDax4.js → moonbit-DdphIGs6.js} +0 -0
- /package/dist/web/assets/{moonbit-DGxZDax4.js.br → moonbit-DdphIGs6.js.br} +0 -0
- /package/dist/web/assets/{moonbit-DGxZDax4.js.gz → moonbit-DdphIGs6.js.gz} +0 -0
- /package/dist/web/assets/{move-C1HZaVNc.js → move-BUlkn0xW.js} +0 -0
- /package/dist/web/assets/{move-C1HZaVNc.js.br → move-BUlkn0xW.js.br} +0 -0
- /package/dist/web/assets/{move-C1HZaVNc.js.gz → move-BUlkn0xW.js.gz} +0 -0
- /package/dist/web/assets/{narrat-g4c9qhYS.js → narrat-CbOBdtCn.js} +0 -0
- /package/dist/web/assets/{narrat-g4c9qhYS.js.br → narrat-CbOBdtCn.js.br} +0 -0
- /package/dist/web/assets/{narrat-g4c9qhYS.js.gz → narrat-CbOBdtCn.js.gz} +0 -0
- /package/dist/web/assets/{nextflow-groovy-CisdbLPv.js → nextflow-groovy-CeVLUTuQ.js} +0 -0
- /package/dist/web/assets/{nextflow-groovy-CisdbLPv.js.br → nextflow-groovy-CeVLUTuQ.js.br} +0 -0
- /package/dist/web/assets/{nextflow-groovy-CisdbLPv.js.gz → nextflow-groovy-CeVLUTuQ.js.gz} +0 -0
- /package/dist/web/assets/{night-owl-ds7NNgBg.js → night-owl-Bm4LhUR1.js} +0 -0
- /package/dist/web/assets/{night-owl-ds7NNgBg.js.br → night-owl-Bm4LhUR1.js.br} +0 -0
- /package/dist/web/assets/{night-owl-ds7NNgBg.js.gz → night-owl-Bm4LhUR1.js.gz} +0 -0
- /package/dist/web/assets/{night-owl-light-DurCGAfC.js → night-owl-light-DtcBiMEf.js} +0 -0
- /package/dist/web/assets/{night-owl-light-DurCGAfC.js.br → night-owl-light-DtcBiMEf.js.br} +0 -0
- /package/dist/web/assets/{night-owl-light-DurCGAfC.js.gz → night-owl-light-DtcBiMEf.js.gz} +0 -0
- /package/dist/web/assets/{nix-D7kCv9F9.js → nix-DrdwQ70g.js} +0 -0
- /package/dist/web/assets/{nix-D7kCv9F9.js.br → nix-DrdwQ70g.js.br} +0 -0
- /package/dist/web/assets/{nix-D7kCv9F9.js.gz → nix-DrdwQ70g.js.gz} +0 -0
- /package/dist/web/assets/{nord-C-O3ceAv.js → nord-B0Head1v.js} +0 -0
- /package/dist/web/assets/{nord-C-O3ceAv.js.br → nord-B0Head1v.js.br} +0 -0
- /package/dist/web/assets/{nord-C-O3ceAv.js.gz → nord-B0Head1v.js.gz} +0 -0
- /package/dist/web/assets/{nushell-oUYTGkzu.js → nushell-CmUdltKn.js} +0 -0
- /package/dist/web/assets/{nushell-oUYTGkzu.js.br → nushell-CmUdltKn.js.br} +0 -0
- /package/dist/web/assets/{nushell-oUYTGkzu.js.gz → nushell-CmUdltKn.js.gz} +0 -0
- /package/dist/web/assets/{objective-c-CzqHoRSj.js → objective-c-BGDR33XN.js} +0 -0
- /package/dist/web/assets/{objective-c-CzqHoRSj.js.br → objective-c-BGDR33XN.js.br} +0 -0
- /package/dist/web/assets/{objective-c-CzqHoRSj.js.gz → objective-c-BGDR33XN.js.gz} +0 -0
- /package/dist/web/assets/{objective-cpp-DJ8fgF2d.js → objective-cpp-Buc1Zhd0.js} +0 -0
- /package/dist/web/assets/{objective-cpp-DJ8fgF2d.js.br → objective-cpp-Buc1Zhd0.js.br} +0 -0
- /package/dist/web/assets/{objective-cpp-DJ8fgF2d.js.gz → objective-cpp-Buc1Zhd0.js.gz} +0 -0
- /package/dist/web/assets/{ocaml-B_nWFfqA.js → ocaml-xdzl9rRD.js} +0 -0
- /package/dist/web/assets/{ocaml-B_nWFfqA.js.br → ocaml-xdzl9rRD.js.br} +0 -0
- /package/dist/web/assets/{ocaml-B_nWFfqA.js.gz → ocaml-xdzl9rRD.js.gz} +0 -0
- /package/dist/web/assets/{odin-BUQfWY13.js → odin-DiUFngnd.js} +0 -0
- /package/dist/web/assets/{odin-BUQfWY13.js.br → odin-DiUFngnd.js.br} +0 -0
- /package/dist/web/assets/{odin-BUQfWY13.js.gz → odin-DiUFngnd.js.gz} +0 -0
- /package/dist/web/assets/{one-dark-pro-DJQor_US.js → one-dark-pro-BURxmIp3.js} +0 -0
- /package/dist/web/assets/{one-dark-pro-DJQor_US.js.br → one-dark-pro-BURxmIp3.js.br} +0 -0
- /package/dist/web/assets/{one-dark-pro-DJQor_US.js.gz → one-dark-pro-BURxmIp3.js.gz} +0 -0
- /package/dist/web/assets/{one-light-BMvQ1R6M.js → one-light-BMRMInAj.js} +0 -0
- /package/dist/web/assets/{one-light-BMvQ1R6M.js.br → one-light-BMRMInAj.js.br} +0 -0
- /package/dist/web/assets/{one-light-BMvQ1R6M.js.gz → one-light-BMRMInAj.js.gz} +0 -0
- /package/dist/web/assets/{openscad-DTylcqP8.js → openscad-DAgLA5J3.js} +0 -0
- /package/dist/web/assets/{openscad-DTylcqP8.js.br → openscad-DAgLA5J3.js.br} +0 -0
- /package/dist/web/assets/{openscad-DTylcqP8.js.gz → openscad-DAgLA5J3.js.gz} +0 -0
- /package/dist/web/assets/{pascal-D0N_7LGg.js → pascal-CoDZxcRB.js} +0 -0
- /package/dist/web/assets/{pascal-D0N_7LGg.js.br → pascal-CoDZxcRB.js.br} +0 -0
- /package/dist/web/assets/{pascal-D0N_7LGg.js.gz → pascal-CoDZxcRB.js.gz} +0 -0
- /package/dist/web/assets/{path-LyOWnqX5.js → path-DdeW1k-W.js} +0 -0
- /package/dist/web/assets/{path-LyOWnqX5.js.br → path-DdeW1k-W.js.br} +0 -0
- /package/dist/web/assets/{path-LyOWnqX5.js.gz → path-DdeW1k-W.js.gz} +0 -0
- /package/dist/web/assets/{pkl-HQNdCmJT.js → pkl-DzKM6BuM.js} +0 -0
- /package/dist/web/assets/{pkl-HQNdCmJT.js.br → pkl-DzKM6BuM.js.br} +0 -0
- /package/dist/web/assets/{pkl-HQNdCmJT.js.gz → pkl-DzKM6BuM.js.gz} +0 -0
- /package/dist/web/assets/{plastic-QMrjD10f.js → plastic-vF15LmNS.js} +0 -0
- /package/dist/web/assets/{plastic-QMrjD10f.js.br → plastic-vF15LmNS.js.br} +0 -0
- /package/dist/web/assets/{plastic-QMrjD10f.js.gz → plastic-vF15LmNS.js.gz} +0 -0
- /package/dist/web/assets/{plsql-Ds9EzM4F.js → plsql-C1v07teA.js} +0 -0
- /package/dist/web/assets/{plsql-Ds9EzM4F.js.br → plsql-C1v07teA.js.br} +0 -0
- /package/dist/web/assets/{plsql-Ds9EzM4F.js.gz → plsql-C1v07teA.js.gz} +0 -0
- /package/dist/web/assets/{po-CM8JtETE.js → po-CLLC8BuA.js} +0 -0
- /package/dist/web/assets/{po-CM8JtETE.js.br → po-CLLC8BuA.js.br} +0 -0
- /package/dist/web/assets/{po-CM8JtETE.js.gz → po-CLLC8BuA.js.gz} +0 -0
- /package/dist/web/assets/{poimandres-fat7kglW.js → poimandres-Uq0xysxM.js} +0 -0
- /package/dist/web/assets/{poimandres-fat7kglW.js.br → poimandres-Uq0xysxM.js.br} +0 -0
- /package/dist/web/assets/{poimandres-fat7kglW.js.gz → poimandres-Uq0xysxM.js.gz} +0 -0
- /package/dist/web/assets/{polar-CnOzO2UD.js → polar-2-luY1Pc.js} +0 -0
- /package/dist/web/assets/{polar-CnOzO2UD.js.br → polar-2-luY1Pc.js.br} +0 -0
- /package/dist/web/assets/{polar-CnOzO2UD.js.gz → polar-2-luY1Pc.js.gz} +0 -0
- /package/dist/web/assets/{portal-container-context-NFSuymMu.js → portal-container-context-BXAsDqrB.js} +0 -0
- /package/dist/web/assets/{postcss-BaqfiaQC.js → postcss-lbFhe0rz.js} +0 -0
- /package/dist/web/assets/{postcss-BaqfiaQC.js.br → postcss-lbFhe0rz.js.br} +0 -0
- /package/dist/web/assets/{postcss-BaqfiaQC.js.gz → postcss-lbFhe0rz.js.gz} +0 -0
- /package/dist/web/assets/{powerquery-CtMX6ik_.js → powerquery-RL8O9Wie.js} +0 -0
- /package/dist/web/assets/{powerquery-CtMX6ik_.js.br → powerquery-RL8O9Wie.js.br} +0 -0
- /package/dist/web/assets/{powerquery-CtMX6ik_.js.gz → powerquery-RL8O9Wie.js.gz} +0 -0
- /package/dist/web/assets/{powershell-BaTgHUxS.js → powershell-upFWhb-b.js} +0 -0
- /package/dist/web/assets/{powershell-BaTgHUxS.js.br → powershell-upFWhb-b.js.br} +0 -0
- /package/dist/web/assets/{powershell-BaTgHUxS.js.gz → powershell-upFWhb-b.js.gz} +0 -0
- /package/dist/web/assets/{preload-helper-BEFjQwLd.js → preload-helper-CM8YhcCa.js} +0 -0
- /package/dist/web/assets/{preload-helper-BEFjQwLd.js.br → preload-helper-CM8YhcCa.js.br} +0 -0
- /package/dist/web/assets/{preload-helper-BEFjQwLd.js.gz → preload-helper-CM8YhcCa.js.gz} +0 -0
- /package/dist/web/assets/{prisma-BLaoUK-7.js → prisma-DBtYaWFk.js} +0 -0
- /package/dist/web/assets/{prisma-BLaoUK-7.js.br → prisma-DBtYaWFk.js.br} +0 -0
- /package/dist/web/assets/{prisma-BLaoUK-7.js.gz → prisma-DBtYaWFk.js.gz} +0 -0
- /package/dist/web/assets/{prolog-0I-GhZLt.js → prolog-D8jSMykJ.js} +0 -0
- /package/dist/web/assets/{prolog-0I-GhZLt.js.br → prolog-D8jSMykJ.js.br} +0 -0
- /package/dist/web/assets/{prolog-0I-GhZLt.js.gz → prolog-D8jSMykJ.js.gz} +0 -0
- /package/dist/web/assets/{proto-CHfg51WI.js → proto-BM4eadF7.js} +0 -0
- /package/dist/web/assets/{proto-CHfg51WI.js.br → proto-BM4eadF7.js.br} +0 -0
- /package/dist/web/assets/{proto-CHfg51WI.js.gz → proto-BM4eadF7.js.gz} +0 -0
- /package/dist/web/assets/{puppet-B0WZdEhx.js → puppet-BQDQ3Snu.js} +0 -0
- /package/dist/web/assets/{puppet-B0WZdEhx.js.br → puppet-BQDQ3Snu.js.br} +0 -0
- /package/dist/web/assets/{puppet-B0WZdEhx.js.gz → puppet-BQDQ3Snu.js.gz} +0 -0
- /package/dist/web/assets/{purescript-CrVZ4Uql.js → purescript-Cj2aTX4s.js} +0 -0
- /package/dist/web/assets/{purescript-CrVZ4Uql.js.br → purescript-Cj2aTX4s.js.br} +0 -0
- /package/dist/web/assets/{purescript-CrVZ4Uql.js.gz → purescript-Cj2aTX4s.js.gz} +0 -0
- /package/dist/web/assets/{python-aEpe7ZUF.js → python-BYpqq6u4.js} +0 -0
- /package/dist/web/assets/{python-aEpe7ZUF.js.br → python-BYpqq6u4.js.br} +0 -0
- /package/dist/web/assets/{python-aEpe7ZUF.js.gz → python-BYpqq6u4.js.gz} +0 -0
- /package/dist/web/assets/{qmldir-DxTPc3lc.js → qmldir-4uiTcwAu.js} +0 -0
- /package/dist/web/assets/{qss-D-nPbCGx.js → qss-D5xB-Mqo.js} +0 -0
- /package/dist/web/assets/{qss-D-nPbCGx.js.br → qss-D5xB-Mqo.js.br} +0 -0
- /package/dist/web/assets/{qss-D-nPbCGx.js.gz → qss-D5xB-Mqo.js.gz} +0 -0
- /package/dist/web/assets/{r-BLnTqw3q.js → r-Cepe6IuL.js} +0 -0
- /package/dist/web/assets/{r-BLnTqw3q.js.br → r-Cepe6IuL.js.br} +0 -0
- /package/dist/web/assets/{r-BLnTqw3q.js.gz → r-Cepe6IuL.js.gz} +0 -0
- /package/dist/web/assets/{racket-DNO4210g.js → racket-COKgCFuM.js} +0 -0
- /package/dist/web/assets/{racket-DNO4210g.js.br → racket-COKgCFuM.js.br} +0 -0
- /package/dist/web/assets/{racket-DNO4210g.js.gz → racket-COKgCFuM.js.gz} +0 -0
- /package/dist/web/assets/{raku-iZJO4hxf.js → raku-z14Q9i7K.js} +0 -0
- /package/dist/web/assets/{raku-iZJO4hxf.js.br → raku-z14Q9i7K.js.br} +0 -0
- /package/dist/web/assets/{raku-iZJO4hxf.js.gz → raku-z14Q9i7K.js.gz} +0 -0
- /package/dist/web/assets/{react-CzUPVyyG.js → react-PkBxFcos.js} +0 -0
- /package/dist/web/assets/{red-F3EQNsNx.js → red-ObAvgvQ5.js} +0 -0
- /package/dist/web/assets/{red-F3EQNsNx.js.br → red-ObAvgvQ5.js.br} +0 -0
- /package/dist/web/assets/{red-F3EQNsNx.js.gz → red-ObAvgvQ5.js.gz} +0 -0
- /package/dist/web/assets/{reg-DD_Uwu3t.js → reg-Qv4f0JFA.js} +0 -0
- /package/dist/web/assets/{reg-DD_Uwu3t.js.br → reg-Qv4f0JFA.js.br} +0 -0
- /package/dist/web/assets/{reg-DD_Uwu3t.js.gz → reg-Qv4f0JFA.js.gz} +0 -0
- /package/dist/web/assets/{regexp-D3RlqUxN.js → regexp-B2qGjhef.js} +0 -0
- /package/dist/web/assets/{regexp-D3RlqUxN.js.br → regexp-B2qGjhef.js.br} +0 -0
- /package/dist/web/assets/{regexp-D3RlqUxN.js.gz → regexp-B2qGjhef.js.gz} +0 -0
- /package/dist/web/assets/{rel-DM5GSHUR.js → rel-cWOyTUwd.js} +0 -0
- /package/dist/web/assets/{rel-DM5GSHUR.js.br → rel-cWOyTUwd.js.br} +0 -0
- /package/dist/web/assets/{rel-DM5GSHUR.js.gz → rel-cWOyTUwd.js.gz} +0 -0
- /package/dist/web/assets/{resolve-theme-STMsK2vc.js → resolve-theme-mnfVcSjJ.js} +0 -0
- /package/dist/web/assets/{resolve-theme-STMsK2vc.js.br → resolve-theme-mnfVcSjJ.js.br} +0 -0
- /package/dist/web/assets/{resolve-theme-STMsK2vc.js.gz → resolve-theme-mnfVcSjJ.js.gz} +0 -0
- /package/dist/web/assets/{riscv-C_jO4gJw.js → riscv-BZDwx-lv.js} +0 -0
- /package/dist/web/assets/{riscv-C_jO4gJw.js.br → riscv-BZDwx-lv.js.br} +0 -0
- /package/dist/web/assets/{riscv-C_jO4gJw.js.gz → riscv-BZDwx-lv.js.gz} +0 -0
- /package/dist/web/assets/{ron--r6_MG5U.js → ron-BpjosPS0.js} +0 -0
- /package/dist/web/assets/{ron--r6_MG5U.js.br → ron-BpjosPS0.js.br} +0 -0
- /package/dist/web/assets/{ron--r6_MG5U.js.gz → ron-BpjosPS0.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-NjvlliYf.js → rose-pine-DhxfJWcm.js} +0 -0
- /package/dist/web/assets/{rose-pine-NjvlliYf.js.br → rose-pine-DhxfJWcm.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-NjvlliYf.js.gz → rose-pine-DhxfJWcm.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DnsL01oA.js → rose-pine-dawn-BbGt9Wy_.js} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DnsL01oA.js.br → rose-pine-dawn-BbGt9Wy_.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DnsL01oA.js.gz → rose-pine-dawn-BbGt9Wy_.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-moon-DQTuCjVy.js → rose-pine-moon-dj4Zxgik.js} +0 -0
- /package/dist/web/assets/{rose-pine-moon-DQTuCjVy.js.br → rose-pine-moon-dj4Zxgik.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-moon-DQTuCjVy.js.gz → rose-pine-moon-dj4Zxgik.js.gz} +0 -0
- /package/dist/web/assets/{rosmsg-BQrgxzms.js → rosmsg-EciOaHo2.js} +0 -0
- /package/dist/web/assets/{rosmsg-BQrgxzms.js.br → rosmsg-EciOaHo2.js.br} +0 -0
- /package/dist/web/assets/{rosmsg-BQrgxzms.js.gz → rosmsg-EciOaHo2.js.gz} +0 -0
- /package/dist/web/assets/{rough.esm-CSLcW3u5.js → rough.esm-HBESlUxy.js} +0 -0
- /package/dist/web/assets/{rough.esm-CSLcW3u5.js.br → rough.esm-HBESlUxy.js.br} +0 -0
- /package/dist/web/assets/{rough.esm-CSLcW3u5.js.gz → rough.esm-HBESlUxy.js.gz} +0 -0
- /package/dist/web/assets/{rust-CP39BBh-.js → rust-C_eH59O_.js} +0 -0
- /package/dist/web/assets/{rust-CP39BBh-.js.br → rust-C_eH59O_.js.br} +0 -0
- /package/dist/web/assets/{rust-CP39BBh-.js.gz → rust-C_eH59O_.js.gz} +0 -0
- /package/dist/web/assets/{sass-CMiN16ff.js → sass-Dos3R5lL.js} +0 -0
- /package/dist/web/assets/{sass-CMiN16ff.js.br → sass-Dos3R5lL.js.br} +0 -0
- /package/dist/web/assets/{sass-CMiN16ff.js.gz → sass-Dos3R5lL.js.gz} +0 -0
- /package/dist/web/assets/{scala-jm4Hro87.js → scala-8lVKsTvf.js} +0 -0
- /package/dist/web/assets/{scala-jm4Hro87.js.br → scala-8lVKsTvf.js.br} +0 -0
- /package/dist/web/assets/{scala-jm4Hro87.js.gz → scala-8lVKsTvf.js.gz} +0 -0
- /package/dist/web/assets/{scheme-Ct_BnC2r.js → scheme-Bd3VdaZj.js} +0 -0
- /package/dist/web/assets/{scheme-Ct_BnC2r.js.br → scheme-Bd3VdaZj.js.br} +0 -0
- /package/dist/web/assets/{scheme-Ct_BnC2r.js.gz → scheme-Bd3VdaZj.js.gz} +0 -0
- /package/dist/web/assets/{sdbl-CnOjqCoH.js → sdbl-C4Yrjlgh.js} +0 -0
- /package/dist/web/assets/{sdbl-CnOjqCoH.js.br → sdbl-C4Yrjlgh.js.br} +0 -0
- /package/dist/web/assets/{sdbl-CnOjqCoH.js.gz → sdbl-C4Yrjlgh.js.gz} +0 -0
- /package/dist/web/assets/{shellscript-C6sdrDvR.js → shellscript-BSi71kYk.js} +0 -0
- /package/dist/web/assets/{shellscript-C6sdrDvR.js.br → shellscript-BSi71kYk.js.br} +0 -0
- /package/dist/web/assets/{shellscript-C6sdrDvR.js.gz → shellscript-BSi71kYk.js.gz} +0 -0
- /package/dist/web/assets/{slack-dark-BOdgeH19.js → slack-dark-aL6vlxZs.js} +0 -0
- /package/dist/web/assets/{slack-dark-BOdgeH19.js.br → slack-dark-aL6vlxZs.js.br} +0 -0
- /package/dist/web/assets/{slack-dark-BOdgeH19.js.gz → slack-dark-aL6vlxZs.js.gz} +0 -0
- /package/dist/web/assets/{slack-ochin-DBMQIw0j.js → slack-ochin-BKt1E7sL.js} +0 -0
- /package/dist/web/assets/{slack-ochin-DBMQIw0j.js.br → slack-ochin-BKt1E7sL.js.br} +0 -0
- /package/dist/web/assets/{slack-ochin-DBMQIw0j.js.gz → slack-ochin-BKt1E7sL.js.gz} +0 -0
- /package/dist/web/assets/{smalltalk-BMQqYubg.js → smalltalk-D6qVBL1U.js} +0 -0
- /package/dist/web/assets/{smalltalk-BMQqYubg.js.br → smalltalk-D6qVBL1U.js.br} +0 -0
- /package/dist/web/assets/{smalltalk-BMQqYubg.js.gz → smalltalk-D6qVBL1U.js.gz} +0 -0
- /package/dist/web/assets/{snazzy-light-DwnLbrVG.js → snazzy-light-BrWerT0t.js} +0 -0
- /package/dist/web/assets/{snazzy-light-DwnLbrVG.js.br → snazzy-light-BrWerT0t.js.br} +0 -0
- /package/dist/web/assets/{snazzy-light-DwnLbrVG.js.gz → snazzy-light-BrWerT0t.js.gz} +0 -0
- /package/dist/web/assets/{solarized-dark-DXJnupYd.js → solarized-dark-CzxTJgVQ.js} +0 -0
- /package/dist/web/assets/{solarized-dark-DXJnupYd.js.br → solarized-dark-CzxTJgVQ.js.br} +0 -0
- /package/dist/web/assets/{solarized-dark-DXJnupYd.js.gz → solarized-dark-CzxTJgVQ.js.gz} +0 -0
- /package/dist/web/assets/{solarized-light-DqhyrtI4.js → solarized-light-BecaDAnG.js} +0 -0
- /package/dist/web/assets/{solarized-light-DqhyrtI4.js.br → solarized-light-BecaDAnG.js.br} +0 -0
- /package/dist/web/assets/{solarized-light-DqhyrtI4.js.gz → solarized-light-BecaDAnG.js.gz} +0 -0
- /package/dist/web/assets/{solidity-BM0p0sku.js → solidity-C9t7pZ84.js} +0 -0
- /package/dist/web/assets/{solidity-BM0p0sku.js.br → solidity-C9t7pZ84.js.br} +0 -0
- /package/dist/web/assets/{solidity-BM0p0sku.js.gz → solidity-C9t7pZ84.js.gz} +0 -0
- /package/dist/web/assets/{splunk-Cq6_jbaY.js → splunk-CtxfFKtF.js} +0 -0
- /package/dist/web/assets/{splunk-Cq6_jbaY.js.br → splunk-CtxfFKtF.js.br} +0 -0
- /package/dist/web/assets/{splunk-Cq6_jbaY.js.gz → splunk-CtxfFKtF.js.gz} +0 -0
- /package/dist/web/assets/{sql-CPfIb_cO.js → sql-CCsqbgCh.js} +0 -0
- /package/dist/web/assets/{sql-CPfIb_cO.js.br → sql-CCsqbgCh.js.br} +0 -0
- /package/dist/web/assets/{sql-CPfIb_cO.js.gz → sql-CCsqbgCh.js.gz} +0 -0
- /package/dist/web/assets/{src-C7A68uNq.js → src-BMgF6h1r.js} +0 -0
- /package/dist/web/assets/{src-C7A68uNq.js.br → src-BMgF6h1r.js.br} +0 -0
- /package/dist/web/assets/{src-C7A68uNq.js.gz → src-BMgF6h1r.js.gz} +0 -0
- /package/dist/web/assets/{ssh-config-GRgzMVtG.js → ssh-config-3Fr37ACC.js} +0 -0
- /package/dist/web/assets/{ssh-config-GRgzMVtG.js.br → ssh-config-3Fr37ACC.js.br} +0 -0
- /package/dist/web/assets/{ssh-config-GRgzMVtG.js.gz → ssh-config-3Fr37ACC.js.gz} +0 -0
- /package/dist/web/assets/{stylus-DNs7ubf9.js → stylus-BP4mE1sO.js} +0 -0
- /package/dist/web/assets/{stylus-DNs7ubf9.js.br → stylus-BP4mE1sO.js.br} +0 -0
- /package/dist/web/assets/{stylus-DNs7ubf9.js.gz → stylus-BP4mE1sO.js.gz} +0 -0
- /package/dist/web/assets/{swift-BQV34vng.js → swift-0uqTFouD.js} +0 -0
- /package/dist/web/assets/{swift-BQV34vng.js.br → swift-0uqTFouD.js.br} +0 -0
- /package/dist/web/assets/{swift-BQV34vng.js.gz → swift-0uqTFouD.js.gz} +0 -0
- /package/dist/web/assets/{synthwave-84-CypcdXbA.js → synthwave-84-DQaNM3DI.js} +0 -0
- /package/dist/web/assets/{synthwave-84-CypcdXbA.js.br → synthwave-84-DQaNM3DI.js.br} +0 -0
- /package/dist/web/assets/{synthwave-84-CypcdXbA.js.gz → synthwave-84-DQaNM3DI.js.gz} +0 -0
- /package/dist/web/assets/{system-verilog-DaLPjQ4v.js → system-verilog-DUIVrZHZ.js} +0 -0
- /package/dist/web/assets/{system-verilog-DaLPjQ4v.js.br → system-verilog-DUIVrZHZ.js.br} +0 -0
- /package/dist/web/assets/{system-verilog-DaLPjQ4v.js.gz → system-verilog-DUIVrZHZ.js.gz} +0 -0
- /package/dist/web/assets/{systemd-CXHFtmNc.js → systemd-CtNo_WIh.js} +0 -0
- /package/dist/web/assets/{systemd-CXHFtmNc.js.br → systemd-CtNo_WIh.js.br} +0 -0
- /package/dist/web/assets/{systemd-CXHFtmNc.js.gz → systemd-CtNo_WIh.js.gz} +0 -0
- /package/dist/web/assets/{talonscript-DI9nO5jX.js → talonscript-B0HXaCVT.js} +0 -0
- /package/dist/web/assets/{talonscript-DI9nO5jX.js.br → talonscript-B0HXaCVT.js.br} +0 -0
- /package/dist/web/assets/{talonscript-DI9nO5jX.js.gz → talonscript-B0HXaCVT.js.gz} +0 -0
- /package/dist/web/assets/{tasl-BAQyAl0c.js → tasl-Cb7RAl11.js} +0 -0
- /package/dist/web/assets/{tasl-BAQyAl0c.js.br → tasl-Cb7RAl11.js.br} +0 -0
- /package/dist/web/assets/{tasl-BAQyAl0c.js.gz → tasl-Cb7RAl11.js.gz} +0 -0
- /package/dist/web/assets/{tcl-BP_ozI58.js → tcl-B79aC6l5.js} +0 -0
- /package/dist/web/assets/{tcl-BP_ozI58.js.br → tcl-B79aC6l5.js.br} +0 -0
- /package/dist/web/assets/{tcl-BP_ozI58.js.gz → tcl-B79aC6l5.js.gz} +0 -0
- /package/dist/web/assets/{terraform-NrndR0yZ.js → terraform-75jJDjpW.js} +0 -0
- /package/dist/web/assets/{terraform-NrndR0yZ.js.br → terraform-75jJDjpW.js.br} +0 -0
- /package/dist/web/assets/{terraform-NrndR0yZ.js.gz → terraform-75jJDjpW.js.gz} +0 -0
- /package/dist/web/assets/{tokyo-night-CbUQlN8D.js → tokyo-night-Cz9Uh9qb.js} +0 -0
- /package/dist/web/assets/{tokyo-night-CbUQlN8D.js.br → tokyo-night-Cz9Uh9qb.js.br} +0 -0
- /package/dist/web/assets/{tokyo-night-CbUQlN8D.js.gz → tokyo-night-Cz9Uh9qb.js.gz} +0 -0
- /package/dist/web/assets/{toml-BM_zrMLj.js → toml-CD6y9A-z.js} +0 -0
- /package/dist/web/assets/{toml-BM_zrMLj.js.br → toml-CD6y9A-z.js.br} +0 -0
- /package/dist/web/assets/{toml-BM_zrMLj.js.gz → toml-CD6y9A-z.js.gz} +0 -0
- /package/dist/web/assets/{tsv-CfyllNPO.js → tsv-CXJMbBrb.js} +0 -0
- /package/dist/web/assets/{tsx-BROcpVjE.js → tsx-BWhuDCm8.js} +0 -0
- /package/dist/web/assets/{tsx-BROcpVjE.js.br → tsx-BWhuDCm8.js.br} +0 -0
- /package/dist/web/assets/{tsx-BROcpVjE.js.gz → tsx-BWhuDCm8.js.gz} +0 -0
- /package/dist/web/assets/{turtle-CHmyeS9k.js → turtle-DWH-Rjse.js} +0 -0
- /package/dist/web/assets/{turtle-CHmyeS9k.js.br → turtle-DWH-Rjse.js.br} +0 -0
- /package/dist/web/assets/{turtle-CHmyeS9k.js.gz → turtle-DWH-Rjse.js.gz} +0 -0
- /package/dist/web/assets/{typescript-BVwspRg8.js → typescript-BcravxO_.js} +0 -0
- /package/dist/web/assets/{typescript-BVwspRg8.js.br → typescript-BcravxO_.js.br} +0 -0
- /package/dist/web/assets/{typescript-BVwspRg8.js.gz → typescript-BcravxO_.js.gz} +0 -0
- /package/dist/web/assets/{typespec-DXRppCgc.js → typespec-B0wvVykx.js} +0 -0
- /package/dist/web/assets/{typespec-DXRppCgc.js.br → typespec-B0wvVykx.js.br} +0 -0
- /package/dist/web/assets/{typespec-DXRppCgc.js.gz → typespec-B0wvVykx.js.gz} +0 -0
- /package/dist/web/assets/{typst-L5uwArOj.js → typst-DWG2c48-.js} +0 -0
- /package/dist/web/assets/{typst-L5uwArOj.js.br → typst-DWG2c48-.js.br} +0 -0
- /package/dist/web/assets/{typst-L5uwArOj.js.gz → typst-DWG2c48-.js.gz} +0 -0
- /package/dist/web/assets/{use-h264-canvas-decoder-BfO9QrlH.js → use-h264-canvas-decoder-JIlkOcWX.js} +0 -0
- /package/dist/web/assets/{use-h264-canvas-decoder-BfO9QrlH.js.br → use-h264-canvas-decoder-JIlkOcWX.js.br} +0 -0
- /package/dist/web/assets/{use-h264-canvas-decoder-BfO9QrlH.js.gz → use-h264-canvas-decoder-JIlkOcWX.js.gz} +0 -0
- /package/dist/web/assets/{use-is-mobile-BClDZJP5.js → use-is-mobile-BXHbkfs9.js} +0 -0
- /package/dist/web/assets/{use-visual-viewport-BGpcMnIx.js → use-visual-viewport-CHm9umK0.js} +0 -0
- /package/dist/web/assets/{utils-btZ8C8-R.js → utils-Bslrbb-G.js} +0 -0
- /package/dist/web/assets/{utils-btZ8C8-R.js.br → utils-Bslrbb-G.js.br} +0 -0
- /package/dist/web/assets/{utils-btZ8C8-R.js.gz → utils-Bslrbb-G.js.gz} +0 -0
- /package/dist/web/assets/{v-Bz99d5uk.js → v-Ch6E4Egd.js} +0 -0
- /package/dist/web/assets/{v-Bz99d5uk.js.br → v-Ch6E4Egd.js.br} +0 -0
- /package/dist/web/assets/{v-Bz99d5uk.js.gz → v-Ch6E4Egd.js.gz} +0 -0
- /package/dist/web/assets/{vala-B-CtBLX1.js → vala-CGVKwbPx.js} +0 -0
- /package/dist/web/assets/{vala-B-CtBLX1.js.br → vala-CGVKwbPx.js.br} +0 -0
- /package/dist/web/assets/{vala-B-CtBLX1.js.gz → vala-CGVKwbPx.js.gz} +0 -0
- /package/dist/web/assets/{vb-DHqiz9Cp.js → vb-BIEbSxyT.js} +0 -0
- /package/dist/web/assets/{vb-DHqiz9Cp.js.br → vb-BIEbSxyT.js.br} +0 -0
- /package/dist/web/assets/{vb-DHqiz9Cp.js.gz → vb-BIEbSxyT.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-CfasyE0m.js → vendor-xterm-DCbcQFHk.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-CfasyE0m.js.br → vendor-xterm-DCbcQFHk.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-CfasyE0m.js.gz → vendor-xterm-DCbcQFHk.js.gz} +0 -0
- /package/dist/web/assets/{verilog-DbTkSkM7.js → verilog-A-3pYPad.js} +0 -0
- /package/dist/web/assets/{verilog-DbTkSkM7.js.br → verilog-A-3pYPad.js.br} +0 -0
- /package/dist/web/assets/{verilog-DbTkSkM7.js.gz → verilog-A-3pYPad.js.gz} +0 -0
- /package/dist/web/assets/{vesper-2aVei4Le.js → vesper-CK1naZAV.js} +0 -0
- /package/dist/web/assets/{vesper-2aVei4Le.js.br → vesper-CK1naZAV.js.br} +0 -0
- /package/dist/web/assets/{vesper-2aVei4Le.js.gz → vesper-CK1naZAV.js.gz} +0 -0
- /package/dist/web/assets/{vhdl-BJJSCnQQ.js → vhdl-CVawmgMg.js} +0 -0
- /package/dist/web/assets/{vhdl-BJJSCnQQ.js.br → vhdl-CVawmgMg.js.br} +0 -0
- /package/dist/web/assets/{vhdl-BJJSCnQQ.js.gz → vhdl-CVawmgMg.js.gz} +0 -0
- /package/dist/web/assets/{viml-qxSvRN8n.js → viml-CiWjaqBY.js} +0 -0
- /package/dist/web/assets/{viml-qxSvRN8n.js.br → viml-CiWjaqBY.js.br} +0 -0
- /package/dist/web/assets/{viml-qxSvRN8n.js.gz → viml-CiWjaqBY.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-black-CjR1y0Bv.js → vitesse-black-PYXW4-BO.js} +0 -0
- /package/dist/web/assets/{vitesse-black-CjR1y0Bv.js.br → vitesse-black-PYXW4-BO.js.br} +0 -0
- /package/dist/web/assets/{vitesse-black-CjR1y0Bv.js.gz → vitesse-black-PYXW4-BO.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-dark-jrcdsqkn.js → vitesse-dark-BU5s4AuG.js} +0 -0
- /package/dist/web/assets/{vitesse-dark-jrcdsqkn.js.br → vitesse-dark-BU5s4AuG.js.br} +0 -0
- /package/dist/web/assets/{vitesse-dark-jrcdsqkn.js.gz → vitesse-dark-BU5s4AuG.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-light-DkC_qU0k.js → vitesse-light-DgkIT-N7.js} +0 -0
- /package/dist/web/assets/{vitesse-light-DkC_qU0k.js.br → vitesse-light-DgkIT-N7.js.br} +0 -0
- /package/dist/web/assets/{vitesse-light-DkC_qU0k.js.gz → vitesse-light-DgkIT-N7.js.gz} +0 -0
- /package/dist/web/assets/{vyper-WAhkfwIX.js → vyper-D8cRDPp3.js} +0 -0
- /package/dist/web/assets/{vyper-WAhkfwIX.js.br → vyper-D8cRDPp3.js.br} +0 -0
- /package/dist/web/assets/{vyper-WAhkfwIX.js.gz → vyper-D8cRDPp3.js.gz} +0 -0
- /package/dist/web/assets/{wasm-BYGI5YYa.js → wasm-Bu8IyVr8.js} +0 -0
- /package/dist/web/assets/{wasm-BYGI5YYa.js.br → wasm-Bu8IyVr8.js.br} +0 -0
- /package/dist/web/assets/{wasm-BYGI5YYa.js.gz → wasm-Bu8IyVr8.js.gz} +0 -0
- /package/dist/web/assets/{wasm-Miuao4O0.js → wasm-ClFJgzmT.js} +0 -0
- /package/dist/web/assets/{wasm-Miuao4O0.js.br → wasm-ClFJgzmT.js.br} +0 -0
- /package/dist/web/assets/{wasm-Miuao4O0.js.gz → wasm-ClFJgzmT.js.gz} +0 -0
- /package/dist/web/assets/{wenyan-Dd5qjF8u.js → wenyan-B8plxIr8.js} +0 -0
- /package/dist/web/assets/{wenyan-Dd5qjF8u.js.br → wenyan-B8plxIr8.js.br} +0 -0
- /package/dist/web/assets/{wenyan-Dd5qjF8u.js.gz → wenyan-B8plxIr8.js.gz} +0 -0
- /package/dist/web/assets/{wgsl-C3T5a0UO.js → wgsl-CVujtm3V.js} +0 -0
- /package/dist/web/assets/{wgsl-C3T5a0UO.js.br → wgsl-CVujtm3V.js.br} +0 -0
- /package/dist/web/assets/{wgsl-C3T5a0UO.js.gz → wgsl-CVujtm3V.js.gz} +0 -0
- /package/dist/web/assets/{wikitext-CvCJjxSa.js → wikitext-CmcG9B69.js} +0 -0
- /package/dist/web/assets/{wikitext-CvCJjxSa.js.br → wikitext-CmcG9B69.js.br} +0 -0
- /package/dist/web/assets/{wikitext-CvCJjxSa.js.gz → wikitext-CmcG9B69.js.gz} +0 -0
- /package/dist/web/assets/{wit-DybvG9BU.js → wit--gl2Jium.js} +0 -0
- /package/dist/web/assets/{wit-DybvG9BU.js.br → wit--gl2Jium.js.br} +0 -0
- /package/dist/web/assets/{wit-DybvG9BU.js.gz → wit--gl2Jium.js.gz} +0 -0
- /package/dist/web/assets/{wolfram-CdhnrpZ7.js → wolfram-6T_1D-NS.js} +0 -0
- /package/dist/web/assets/{wolfram-CdhnrpZ7.js.br → wolfram-6T_1D-NS.js.br} +0 -0
- /package/dist/web/assets/{wolfram-CdhnrpZ7.js.gz → wolfram-6T_1D-NS.js.gz} +0 -0
- /package/dist/web/assets/{yaml-B0HIje0z.js → yaml-CVFKoPnL.js} +0 -0
- /package/dist/web/assets/{yaml-B0HIje0z.js.br → yaml-CVFKoPnL.js.br} +0 -0
- /package/dist/web/assets/{yaml-B0HIje0z.js.gz → yaml-CVFKoPnL.js.gz} +0 -0
- /package/dist/web/assets/{zenscript-CcLSNTvD.js → zenscript-CoT4yNdA.js} +0 -0
- /package/dist/web/assets/{zenscript-CcLSNTvD.js.br → zenscript-CoT4yNdA.js.br} +0 -0
- /package/dist/web/assets/{zenscript-CcLSNTvD.js.gz → zenscript-CoT4yNdA.js.gz} +0 -0
- /package/dist/web/assets/{zig-dAelYAUr.js → zig-BWs2Qo3G.js} +0 -0
- /package/dist/web/assets/{zig-dAelYAUr.js.br → zig-BWs2Qo3G.js.br} +0 -0
- /package/dist/web/assets/{zig-dAelYAUr.js.gz → zig-BWs2Qo3G.js.gz} +0 -0
|
@@ -1,157 +1,1267 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Glide Data Grid wrapper for PPM's database tabs: a table's data and a query's results, as DBGate
|
|
3
|
+
* shows them. A title selects its column, a row number its row; a column's ⌄ opens its menu, which
|
|
4
|
+
* is where it is sorted. A table's rows arrive 100 at a time: scrolling to the last one read asks
|
|
5
|
+
* for the next ones. Rows / Count / Sum of the selection sit in the bottom-right corner; "Rows: N"
|
|
6
|
+
* of the table is the tab's, in PPM's status bar (db-rows-status.tsx).
|
|
7
|
+
*
|
|
8
|
+
* Changes wait in DBGate's change set until Save (grid/use-changeset.ts): edited cells washed
|
|
9
|
+
* yellow, new rows green under the rows read, rows to delete red and struck through — every step
|
|
10
|
+
* undone with Ctrl+Z and redone with Ctrl+Y. On a desktop F4 shows the current row as DBGate's form
|
|
11
|
+
* instead (grid/form-view.tsx), editing the same change set; a phone opens it in a sheet.
|
|
12
|
+
*/
|
|
13
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, type RefObject } from "react";
|
|
14
|
+
import DataEditor, {
|
|
15
|
+
CompactSelection, type CellClickedEventArgs, type DataEditorRef, type DrawCellCallback, type GridCell, type GridColumn, type GridMouseEventArgs,
|
|
16
|
+
type Item, type Rectangle, type Theme,
|
|
17
|
+
} from "@glideapps/glide-data-grid";
|
|
18
|
+
import { toast } from "sonner";
|
|
19
|
+
import {
|
|
20
|
+
ArrowNext, ArrowPrevious, ChevronDown, ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, Copy, Filter,
|
|
21
|
+
Info, ListFilter, Loader2, Redo2, RefreshCw, RotateCcw, Save, TableSimple, Undo2, XCircle,
|
|
22
|
+
} from "@/lib/icons";
|
|
23
|
+
import { Button } from "@/components/ui/button";
|
|
24
|
+
import { copyToClipboard } from "@/lib/clipboard";
|
|
25
|
+
import { triggerDownload } from "@/lib/file-download";
|
|
26
|
+
import { cn } from "@/lib/utils";
|
|
27
|
+
import { useIsMobile } from "@/hooks/use-is-mobile";
|
|
28
|
+
import { formatCombo } from "@/stores/keybindings-store";
|
|
29
|
+
import { setUnsavedGridRows } from "@/stores/unsaved-grid-rows-store";
|
|
30
|
+
import { GridHeaderOverlay, type GridHeaderOverlayHandle, type OverlayColumn } from "./grid/grid-header-overlay";
|
|
31
|
+
import { FilterCell } from "./grid/filter-row";
|
|
32
|
+
import { columnFilterCellProps } from "./grid/column-filter-cell";
|
|
33
|
+
import { FILTER_BAND, TITLE_BAND, TITLE_BAND_TOUCH, TITLE_SPRITES, columnTitleDrawer, rowMarkerWidth, titleIcon, type TitleColumn } from "./grid/header-bands";
|
|
34
|
+
import { sortPosition } from "./grid/column-menu";
|
|
35
|
+
import { loadMoreDecision } from "./grid/load-more";
|
|
36
|
+
import { forEachSelectedCell, selectedBlock, selectionHasCell, selectionStats } from "./grid/selection-stats";
|
|
37
|
+
import { GridCornerLabel, GridLoadingBox, GridSelectionStats } from "./grid/grid-status-bar";
|
|
38
|
+
import { drawBesideFkButton, drawFkButton, isOnFkButton } from "./grid/fk-cell-button";
|
|
39
|
+
import {
|
|
40
|
+
EMPTY_CHANGESET, addRows, cellId, cloneValues, deleteRows, isCellLocked, isNewRowId, revertRows, toGridChanges,
|
|
41
|
+
type CellChange, type LockColumn,
|
|
42
|
+
} from "./grid/grid-changeset";
|
|
43
|
+
import { useChangeset } from "./grid/use-changeset";
|
|
44
|
+
import { cellMark, drawCellMark, rowChange, rowChangeTheme } from "./grid/change-marks";
|
|
45
|
+
import { isBinaryValue } from "./grid/cell-display";
|
|
46
|
+
import { cellEditor } from "./grid/cell-editor";
|
|
47
|
+
import { fkCellEditor } from "./grid/fk-cell-editor";
|
|
48
|
+
import { DictionaryLookupDialog } from "./grid/dictionary-lookup-dialog";
|
|
49
|
+
import { RowFormSheet } from "./grid/row-form-sheet";
|
|
50
|
+
import { FormView, fieldKind, type FormMenuTarget } from "./grid/form-view";
|
|
51
|
+
import { formCopyText, navigateFormRow, parseFormText, type FormNavigation } from "./grid/form-view-model";
|
|
52
|
+
import { canChooseValues } from "./grid/value-filter-text";
|
|
53
|
+
import { NO_FILTERS, withColumnFilter } from "./grid/grid-filters";
|
|
54
|
+
import { cellFile, cellFileBase, cellFileName, selectedColumnIndices, selectedValueFilters, type CellFile } from "./grid/selection-commands";
|
|
55
|
+
import { documentChanges, newRowValues, readJsonDocuments, rowDocumentText, type DocumentColumn } from "./grid/json-document";
|
|
56
|
+
import { TextValueDialog } from "./grid/text-value-dialog";
|
|
57
|
+
import { GenerateSqlDialog } from "./grid/generate-sql-dialog";
|
|
58
|
+
import type { SqlSourceRow } from "./grid/generate-sql";
|
|
59
|
+
import type { CopySqlTarget } from "./grid/copy-as";
|
|
60
|
+
import { isGridKeyCommand, isTextField, tableKeyCommand, tableKeyPlace, type GridKeyCommand } from "./grid/table-keys";
|
|
61
|
+
import { isGridSurface, useGridCopy, type GridCopySource } from "./grid/use-grid-copy";
|
|
62
|
+
import { cellMenuEntries, summarizeSelection, type CellMenuEntry, type CellMenuSelection } from "./grid/cell-menu";
|
|
63
|
+
import { GRID_EXPORT_FORMATS, gridExportDownloadUrl } from "../../../shared/db-grid-export";
|
|
64
|
+
import { CellContextMenu } from "./grid/cell-context-menu";
|
|
65
|
+
import { useCellLongPress, type CellPoint } from "./grid/use-cell-long-press";
|
|
66
|
+
import { classifyColumnType } from "../../../shared/db-column-kind";
|
|
67
|
+
import { formatCellValue, isAutoIncrement, rowKeyOf, type GlideGridHandle, type GlideGridProps } from "./glide-grid-types";
|
|
68
|
+
import { useGlideTheme, useGridChangeColors } from "./glide-grid-theme";
|
|
6
69
|
import { useGlideColumns } from "./use-glide-columns";
|
|
7
70
|
import { useGlideCellContent } from "./use-glide-cell-content";
|
|
8
71
|
import { useGlideSelection } from "./use-glide-selection";
|
|
9
|
-
import { useGlidePendingEdits } from "./use-glide-pending-edits";
|
|
10
|
-
import { useGlideRowPinning } from "./use-glide-row-pinning";
|
|
11
72
|
import { useGlideGridActions } from "./use-glide-grid-actions";
|
|
12
73
|
import { GlideHeaderMenu } from "./glide-header-menu";
|
|
13
|
-
import { GlideContextMenu } from "./glide-context-menu";
|
|
14
|
-
import { GlideGridToolbar } from "./glide-grid-toolbar";
|
|
74
|
+
import { GlideContextMenu, type GridMenuEntry } from "./glide-context-menu";
|
|
15
75
|
import { GlideSaveBar } from "./glide-save-bar";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
76
|
+
import { CellDataPanel, CellDataSheet, keepCellDataWidth, readCellDataWidth, type CellDataSource } from "./grid/cell-data-panel";
|
|
77
|
+
import { NO_CELL_DATA, cellText, collectCellData, type CellDataChoice } from "./grid/cell-data-formats";
|
|
18
78
|
|
|
19
79
|
/** Swallows edits (paste, context-menu actions) while the grid is read-only. */
|
|
20
80
|
const NOOP_EDIT = () => {};
|
|
21
81
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
82
|
+
/** DBGate's editors in a dialog: Edit cell value, Edit row as JSON document and Add JSON document. */
|
|
83
|
+
type TextDialog =
|
|
84
|
+
| { kind: "cell"; row: Record<string, unknown>; column: string; initial: string }
|
|
85
|
+
| { kind: "row"; row: Record<string, unknown>; initial: string }
|
|
86
|
+
| { kind: "add" };
|
|
87
|
+
|
|
88
|
+
/** Save cell to file's download, typed as bytes whatever they hold, so that no browser opens it as a page. */
|
|
89
|
+
function downloadCellFile(file: Extract<CellFile, { ok: true }>) {
|
|
90
|
+
const url = URL.createObjectURL(new Blob([file.bytes], { type: "application/octet-stream" }));
|
|
91
|
+
try {
|
|
92
|
+
triggerDownload(url, file.name);
|
|
93
|
+
} finally {
|
|
94
|
+
setTimeout(() => URL.revokeObjectURL(url), 0);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Puts the keys in the grid or the form under `root` with `focus` — which answers whether they are
|
|
100
|
+
* there — now or once there is something to take them: Glide puts its canvas in only once its
|
|
101
|
+
* scroller has been measured, a few frames after the editor mounts, and focus asked for before then
|
|
102
|
+
* goes nowhere. Given up once the user has put the keys anywhere else, and by the cleanup it answers.
|
|
103
|
+
*/
|
|
104
|
+
function focusOnceDrawn(root: Element, focus: () => boolean): () => void {
|
|
105
|
+
const from = document.activeElement;
|
|
106
|
+
const moved = () => !!document.activeElement && document.activeElement !== from && document.activeElement !== document.body;
|
|
107
|
+
const done = () => moved() || focus();
|
|
108
|
+
if (done()) return () => {};
|
|
109
|
+
const watch = new MutationObserver(() => { if (done()) watch.disconnect(); });
|
|
110
|
+
watch.observe(root, { childList: true, subtree: true });
|
|
111
|
+
return () => watch.disconnect();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Puts the keys back with `refocus` when what held them under `root` leaves the page — the cell Glide
|
|
116
|
+
* focuses, gone with its row: a new row undone, deleted or reverted. Chrome drops them on the body,
|
|
117
|
+
* and Glide takes them back only while it holds them. The removal is heard from the DOM, not from a
|
|
118
|
+
* focusout, which a browser need not send for a node taken away. Never once the user has put the
|
|
119
|
+
* keys anywhere else.
|
|
120
|
+
*/
|
|
121
|
+
function keepKeysOnRemoval(root: Element, refocus: () => void): () => void {
|
|
122
|
+
let held: Element | null = null;
|
|
123
|
+
const check = () => {
|
|
124
|
+
if (!held || held.isConnected) return;
|
|
125
|
+
held = null;
|
|
126
|
+
if (!document.activeElement || document.activeElement === document.body) refocus();
|
|
127
|
+
};
|
|
128
|
+
const onIn = (e: Event) => { held = e.target as Element; };
|
|
129
|
+
// Still on the page once the event is over: the keys were moved, not dropped.
|
|
130
|
+
const onOut = (e: Event) => {
|
|
131
|
+
const left = e.target as Element;
|
|
132
|
+
queueMicrotask(() => { if (left === held && left.isConnected) held = null; });
|
|
133
|
+
};
|
|
134
|
+
const watch = new MutationObserver(check);
|
|
135
|
+
root.addEventListener("focusin", onIn);
|
|
136
|
+
root.addEventListener("focusout", onOut);
|
|
137
|
+
watch.observe(root, { childList: true, subtree: true });
|
|
138
|
+
return () => {
|
|
139
|
+
watch.disconnect();
|
|
140
|
+
root.removeEventListener("focusin", onIn);
|
|
141
|
+
root.removeEventListener("focusout", onOut);
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* DBGate's ways into a cell's editor: Glide's own, and F2. Copy is the grid's own (grid/use-grid-copy.ts),
|
|
147
|
+
* in the format Set format chose, and so is cut: Glide's would clear the cells without copying them.
|
|
148
|
+
*/
|
|
149
|
+
const KEYBINDINGS = { activateCell: " |Enter|shift+Enter|F2", copy: false, cut: false };
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Hidden field holding a key of several columns as one value, so rows are
|
|
153
|
+
* still told apart by a single field (pending edits, previews). Not
|
|
154
|
+
* enumerable, so a row preview or an export never shows it.
|
|
155
|
+
*/
|
|
156
|
+
const ROW_ID = "__ppm_row_id";
|
|
27
157
|
|
|
28
158
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
159
|
+
* The grid's scrollbars, which run the full height and width of the grid: what is laid over the
|
|
160
|
+
* header has to stop short of the vertical one, what sits at the foot above the horizontal one.
|
|
161
|
+
* Zero where scrollbars overlay the content, and while everything fits.
|
|
31
162
|
*/
|
|
32
|
-
|
|
163
|
+
function useScrollbarSize(container: RefObject<HTMLElement | null>, rowCount: number, columnCount: number, gridShown: boolean) {
|
|
164
|
+
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
165
|
+
useLayoutEffect(() => {
|
|
166
|
+
const scroller = gridShown ? container.current?.querySelector<HTMLElement>(".dvn-scroller") : null;
|
|
167
|
+
if (!scroller) {
|
|
168
|
+
setSize((s) => (s.width === 0 && s.height === 0 ? s : { width: 0, height: 0 }));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const measure = () => {
|
|
172
|
+
const width = scroller.offsetWidth - scroller.clientWidth;
|
|
173
|
+
const height = scroller.offsetHeight - scroller.clientHeight;
|
|
174
|
+
setSize((s) => (s.width === width && s.height === height ? s : { width, height }));
|
|
175
|
+
};
|
|
176
|
+
measure();
|
|
177
|
+
const observer = new ResizeObserver(measure);
|
|
178
|
+
observer.observe(scroller);
|
|
179
|
+
return () => observer.disconnect();
|
|
180
|
+
}, [container, rowCount, columnCount, gridShown]);
|
|
181
|
+
return size;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const readCssVar = (name: string) => getComputedStyle(document.documentElement).getPropertyValue(name).trim();
|
|
185
|
+
|
|
186
|
+
export const GlideDataGrid = forwardRef<GlideGridHandle, GlideGridProps>(function GlideDataGrid(props, ref) {
|
|
33
187
|
const {
|
|
34
|
-
columns: rawColumnNames, rows,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
188
|
+
columns: rawColumnNames, rows, schema, loading, onSaveChanges, rowKey, editOnly,
|
|
189
|
+
sort = [], onSortChange, viewKey, hasMore = false, onLoadMore, loadingMore = false, fetchingAll = null,
|
|
190
|
+
hiddenColumns, onShowAllColumns, onHideColumns, onFindColumn, columnWidths, onColumnWidthsChange, onEditStateChange,
|
|
191
|
+
sidePanel, onResetFilter, onOpenQuery, onOpenGeneratedSql, exporter, startCellDownload, focusOnVisible, onOpenTable, filtering, lookupFor,
|
|
192
|
+
place, selectedTable, selectedSchema, dialect, readOnly, tabId, tabSlot, onSelectedRowsChange, rowsLabel,
|
|
193
|
+
view = "table", onViewChange, formNameFilter = "", onFormNameFilterChange, rowCount = null, onFetchAll,
|
|
194
|
+
loadReference, onOpenReference, onFilterValue, onAddToFilter, onRefresh, floatCellData = false,
|
|
38
195
|
} = props;
|
|
39
196
|
|
|
40
197
|
const theme = useGlideTheme();
|
|
41
|
-
const
|
|
198
|
+
const colors = useGridChangeColors(theme);
|
|
199
|
+
const gridRef = useRef<DataEditorRef>(null);
|
|
42
200
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
43
201
|
|
|
44
202
|
const columnNames = useMemo(() => {
|
|
45
203
|
const names = new Set(schema.map((s) => s.name));
|
|
46
204
|
return rawColumnNames.filter((c) => names.has(c));
|
|
47
205
|
}, [rawColumnNames, schema]);
|
|
206
|
+
const schemaMap = useMemo(() => new Map(schema.map((s) => [s.name, s])), [schema]);
|
|
48
207
|
|
|
49
|
-
// State
|
|
50
|
-
const [pinnedCols, setPinnedCols] = useState<Set<string>>(new Set());
|
|
51
|
-
const [colWidths, setColWidths] = useState<Map<string, number>>(new Map());
|
|
52
208
|
const [headerMenu, setHeaderMenu] = useState<{ colName: string; bounds: { x: number; y: number; width: number; height: number } } | null>(null);
|
|
53
209
|
const [contextMenu, setContextMenu] = useState<{ position: { x: number; y: number }; rowIdx: number; colIdx: number } | null>(null);
|
|
54
|
-
|
|
55
|
-
const [
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!searchTerm.trim()) return allRows;
|
|
73
|
-
const term = searchTerm.toLowerCase();
|
|
74
|
-
return allRows.filter((row) => columnNames.some((col) => String(row[col] ?? "").toLowerCase().includes(term)));
|
|
75
|
-
}, [allRows, columnNames, searchTerm]);
|
|
76
|
-
|
|
77
|
-
const frozenTrailingRows = useMemo(() => {
|
|
78
|
-
if (pinnedCount === 0 || !pkCol) return 0;
|
|
79
|
-
if (!searchTerm.trim()) return pinnedCount;
|
|
80
|
-
return displayRows.filter((row) => pinnedPks.has(String(row[pkCol] ?? ""))).length;
|
|
81
|
-
}, [pinnedCount, pkCol, searchTerm, displayRows, pinnedPks]);
|
|
82
|
-
|
|
83
|
-
// Hooks
|
|
84
|
-
// Without a primary key there is no way to address a row in an UPDATE, so
|
|
85
|
-
// edits could never be saved — don't let the user make them in the first place.
|
|
86
|
-
const cellsReadOnly = !!readOnly || !pkCol;
|
|
87
|
-
|
|
88
|
-
const { pendingRef, addEdit, commitAll, discardAll, hasPending, pendingCount, committedRef } = useGlidePendingEdits(pkCol, onCellUpdate, onInsertRow);
|
|
89
|
-
const { columns, freezeColumns, columnOrder } = useGlideColumns(schema, columnNames, pinnedCols, colWidths, displayRows, orderBy, orderDir);
|
|
90
|
-
const { getCellContent, onCellEdited } = useGlideCellContent(displayRows, columnOrder, schema, pkCol, addEdit, pendingRef, cellsReadOnly);
|
|
91
|
-
const { gridSelection, onGridSelectionChange, selectedRowIndices, clearSelection } = useGlideSelection();
|
|
210
|
+
// The row a phone has open as a form (grid/row-form-sheet.tsx), by its place among the rows shown.
|
|
211
|
+
const [formRow, setFormRow] = useState<number | null>(null);
|
|
212
|
+
// DBGate's Form view in place of the grid, on a desktop: a phone's form is that sheet.
|
|
213
|
+
const mobile = useIsMobile();
|
|
214
|
+
const formView = view === "form" && !mobile;
|
|
215
|
+
|
|
216
|
+
// The columns that address a row. A grid saving changesets is told them; a read-only one guesses
|
|
217
|
+
// one — the primary key, else `id` — which a row preview finds its row again by.
|
|
218
|
+
const batch = !!onSaveChanges;
|
|
219
|
+
const keyCols = useMemo(() => {
|
|
220
|
+
if (batch) return rowKey ?? [];
|
|
221
|
+
const guess = schema.find((c) => c.pk)?.name ?? schema.find((c) => c.name.toLowerCase() === "id")?.name;
|
|
222
|
+
return guess ? [guess] : [];
|
|
223
|
+
}, [batch, rowKey, schema]);
|
|
224
|
+
const pkCol = keyCols.length > 1 ? ROW_ID : keyCols[0] ?? null;
|
|
225
|
+
const keyedRows = useMemo(() => keyCols.length < 2 ? rows : rows.map((row) =>
|
|
226
|
+
Object.defineProperty({ ...row }, ROW_ID, { value: JSON.stringify(keyCols.map((c) => row[c])) })), [rows, keyCols]);
|
|
227
|
+
|
|
92
228
|
const {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
229
|
+
changeset, changesetRef, change, edit, newRowId, undo, redo, reset, canUndo, canRedo, hasChanges, changedRows,
|
|
230
|
+
} = useChangeset(pkCol, keyCols);
|
|
231
|
+
// New rows sit under the rows read so far, as in DBGate, named by their id alone.
|
|
232
|
+
const insertedRows = useMemo<Record<string, unknown>[]>(
|
|
233
|
+
() => (pkCol ? changeset.inserted.map((id) => (pkCol === ROW_ID ? Object.defineProperty({}, ROW_ID, { value: id }) : { [pkCol]: id })) : []),
|
|
234
|
+
[changeset.inserted, pkCol],
|
|
235
|
+
);
|
|
236
|
+
const allRows = useMemo(() => (insertedRows.length ? [...keyedRows, ...insertedRows] : keyedRows), [keyedRows, insertedRows]);
|
|
237
|
+
|
|
238
|
+
// Without a primary key there is no way to address a row in an UPDATE, and without a changeset
|
|
239
|
+
// nowhere to save one, so edits could never be saved — don't let the user make them at all.
|
|
240
|
+
const cellsReadOnly = !!readOnly || !pkCol || !batch;
|
|
241
|
+
// Rows are added and deleted only through a changeset, which addresses them by key.
|
|
242
|
+
const canChangeRows = batch && !editOnly && !cellsReadOnly;
|
|
243
|
+
|
|
244
|
+
// Only cells that can change take an edit, however it arrives: typed, pasted, picked, set to NULL.
|
|
245
|
+
const lockColumns = useMemo(() => new Map<string, LockColumn>(schema.map((c) => [c.name, { pk: c.pk, autoIncrement: isAutoIncrement(c) }])), [schema]);
|
|
246
|
+
const canEditCell = useCallback((row: Record<string, unknown>, column: string) => {
|
|
247
|
+
const col = lockColumns.get(column);
|
|
248
|
+
return !cellsReadOnly && !!pkCol && !!col && !isCellLocked(col, String(row[pkCol]), changesetRef.current);
|
|
249
|
+
}, [cellsReadOnly, pkCol, lockColumns, changesetRef]);
|
|
250
|
+
const editCells = useCallback((changes: CellChange[]) => {
|
|
251
|
+
const open = changes.filter((c) => canEditCell(c.row, c.column));
|
|
252
|
+
if (open.length) edit(open);
|
|
253
|
+
}, [canEditCell, edit]);
|
|
96
254
|
|
|
255
|
+
// Widths dragged since the tab last kept them; the tab's are the rest.
|
|
256
|
+
const [dragged, setDragged] = useState<Readonly<Record<string, number>>>({});
|
|
257
|
+
const widths = useMemo(() => ({ ...columnWidths, ...dragged }), [columnWidths, dragged]);
|
|
258
|
+
const { columns, columnOrder } = useGlideColumns(schema, columnNames, hiddenColumns, widths, allRows);
|
|
259
|
+
const { getCellContent, onCellsEdited } = useGlideCellContent(allRows, columnOrder, schema, pkCol, editCells, changesetRef, colors, cellsReadOnly);
|
|
260
|
+
const { gridSelection, onGridSelectionChange, selectedRowIndices, clearSelection } = useGlideSelection(allRows.length);
|
|
261
|
+
const { handlePaste, getContextFk, openFkTable } = useGlideGridActions({
|
|
262
|
+
displayRows: allRows, columnOrder, schema, pkCol, place, selectedSchema, dialect, edit: cellsReadOnly ? NOOP_EDIT : editCells,
|
|
263
|
+
// A paste lands at the grid's cursor, which the form view does not show: there it would land unseen.
|
|
264
|
+
gridSelection: formView ? undefined : gridSelection, containerRef,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
// ── Save: every change in one changeset; the change set is emptied once the rows saved are read again ──
|
|
268
|
+
const committedRef = useRef(false);
|
|
269
|
+
const commit = useCallback(async () => {
|
|
270
|
+
// Nothing to write: a new row nothing was put in is no INSERT.
|
|
271
|
+
if (!onSaveChanges || changedRows === 0) return;
|
|
272
|
+
try {
|
|
273
|
+
await onSaveChanges(toGridChanges(changesetRef.current));
|
|
274
|
+
} catch {
|
|
275
|
+
// Nothing was saved and the caller has said why; the changes stay to be fixed.
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
committedRef.current = true;
|
|
279
|
+
}, [onSaveChanges, changedRows, changesetRef]);
|
|
280
|
+
// Not before: the rows read before the save would show for a moment without the values saved.
|
|
97
281
|
useEffect(() => {
|
|
98
|
-
if (committedRef.current) { committedRef.current = false;
|
|
282
|
+
if (committedRef.current) { committedRef.current = false; reset(); }
|
|
99
283
|
}, [rows]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
284
|
+
// The tab's unsaved dot and its close guard count what Save would write; the changes go with the grid.
|
|
285
|
+
useEffect(() => { if (tabId) setUnsavedGridRows(tabId, changedRows, tabSlot); }, [tabId, tabSlot, changedRows]);
|
|
286
|
+
useEffect(() => () => { if (tabId) setUnsavedGridRows(tabId, 0, tabSlot); }, [tabId, tabSlot]);
|
|
287
|
+
|
|
288
|
+
// ── The rows starting over: back to the first row, with nothing selected ──
|
|
289
|
+
const lastVisibleRef = useRef(-1);
|
|
290
|
+
// The top row of the region Glide reported last.
|
|
291
|
+
const lastTopRef = useRef(0);
|
|
292
|
+
// The view the grid was last sent back to the top for, and the view rendered last: they differ
|
|
293
|
+
// from the commit that brings a new view's rows until the effect below has run.
|
|
294
|
+
const viewKeyRef = useRef(viewKey);
|
|
295
|
+
const renderedViewKeyRef = useRef(viewKey);
|
|
296
|
+
renderedViewKeyRef.current = viewKey;
|
|
297
|
+
useEffect(() => {
|
|
298
|
+
if (Object.is(viewKeyRef.current, viewKey)) return;
|
|
299
|
+
viewKeyRef.current = viewKey;
|
|
300
|
+
// Where the old rows were scrolled to says nothing about the new ones, and the scroll to the
|
|
301
|
+
// top reports again — unless the grid is at the top already: as many rows are in view there,
|
|
302
|
+
// and a scroll that moves nothing reports nothing.
|
|
303
|
+
if (lastTopRef.current > 0) lastVisibleRef.current = -1;
|
|
304
|
+
clearSelection();
|
|
305
|
+
setFormRow(null);
|
|
306
|
+
setWanted(null);
|
|
307
|
+
gridRef.current?.scrollTo(0, 0, "vertical");
|
|
308
|
+
}, [viewKey, clearSelection]);
|
|
309
|
+
|
|
310
|
+
// ── Reading more rows once the last one read is in view ──
|
|
311
|
+
const toldBlockedRef = useRef(false);
|
|
312
|
+
const busy = loading || loadingMore || fetchingAll !== null;
|
|
313
|
+
const checkLoadMore = useCallback(() => {
|
|
314
|
+
if (!onLoadMore) return;
|
|
315
|
+
const decision = loadMoreDecision({
|
|
316
|
+
lastVisibleRow: lastVisibleRef.current, loadedRows: keyedRows.length, hasMore, busy, newRows: changeset.inserted.length,
|
|
317
|
+
});
|
|
318
|
+
if (decision === "load") onLoadMore();
|
|
319
|
+
else if (decision === "blocked-by-new-rows" && !toldBlockedRef.current) {
|
|
320
|
+
toldBlockedRef.current = true;
|
|
321
|
+
toast.info("More rows load once the new rows are saved or reverted", { description: "They sit under the rows loaded so far." });
|
|
322
|
+
}
|
|
323
|
+
}, [onLoadMore, keyedRows.length, hasMore, busy, changeset.inserted.length]);
|
|
324
|
+
const checkLoadMoreRef = useRef(checkLoadMore);
|
|
325
|
+
checkLoadMoreRef.current = checkLoadMore;
|
|
326
|
+
// Rows arriving, or a read ending, may leave the last row still in view.
|
|
327
|
+
useEffect(() => { checkLoadMore(); }, [checkLoadMore]);
|
|
328
|
+
useEffect(() => { if (changeset.inserted.length === 0) toldBlockedRef.current = false; }, [changeset.inserted.length]);
|
|
329
|
+
|
|
330
|
+
const overlayRef = useRef<GridHeaderOverlayHandle>(null);
|
|
331
|
+
// The cells in view, which a phone's long press looks for the cell under the finger among.
|
|
332
|
+
const visibleRef = useRef<Rectangle>({ x: 0, y: 0, width: 0, height: 0 });
|
|
333
|
+
const onVisibleRegionChanged = useCallback((range: Rectangle, tx: number) => {
|
|
334
|
+
overlayRef.current?.sync({ x: range.x, tx });
|
|
335
|
+
visibleRef.current = range;
|
|
336
|
+
lastTopRef.current = range.y;
|
|
337
|
+
// Glide reports on a new view's rows in the commit that brings them, from a layout effect,
|
|
338
|
+
// before the grid has been sent back to the top: where the old rows were scrolled to, cut
|
|
339
|
+
// short at the new rows' end — their last row, read as in view. The effect above decides.
|
|
340
|
+
if (!Object.is(viewKeyRef.current, renderedViewKeyRef.current)) return;
|
|
341
|
+
lastVisibleRef.current = range.y + range.height - 1;
|
|
342
|
+
checkLoadMoreRef.current();
|
|
343
|
+
}, []);
|
|
344
|
+
|
|
345
|
+
// A slot of the header layer the browser scrolled into view — a ⌄ or a filter box at the grid's
|
|
346
|
+
// edge: the grid scrolls its column into view instead, and the layer follows the scroll it reports.
|
|
347
|
+
const revealColumn = useCallback((col: number) => {
|
|
348
|
+
gridRef.current?.scrollTo(col, visibleRef.current.y, "horizontal");
|
|
349
|
+
}, []);
|
|
350
|
+
|
|
351
|
+
// ── New rows: added under the rest, with the cursor in the first column that takes a value ──
|
|
352
|
+
const scrollToNewRow = useRef(false);
|
|
353
|
+
const appendRow = useCallback(() => {
|
|
354
|
+
if (!canChangeRows) return;
|
|
355
|
+
scrollToNewRow.current = true;
|
|
356
|
+
change((cs) => addRows(cs, [{ id: newRowId() }]));
|
|
357
|
+
}, [canChangeRows, change, newRowId]);
|
|
358
|
+
useEffect(() => {
|
|
359
|
+
if (!scrollToNewRow.current) return;
|
|
360
|
+
scrollToNewRow.current = false;
|
|
361
|
+
const row = allRows.length - 1;
|
|
362
|
+
const col = Math.max(0, columnOrder.findIndex((name) => {
|
|
363
|
+
const col = schemaMap.get(name);
|
|
364
|
+
return !col || !isAutoIncrement(col);
|
|
365
|
+
}));
|
|
366
|
+
// Focused first: Glide, focused with nothing selected, puts its cursor top-left from the
|
|
367
|
+
// selection of its last render, which would land after ours.
|
|
368
|
+
gridRef.current?.focus();
|
|
369
|
+
onGridSelectionChange({
|
|
370
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
371
|
+
current: { cell: [col, row], range: { x: col, y: row, width: 1, height: 1 }, rangeStack: [] },
|
|
372
|
+
});
|
|
373
|
+
gridRef.current?.scrollTo(col, row, "both");
|
|
374
|
+
}, [allRows.length, columnOrder, schemaMap, onGridSelectionChange]);
|
|
375
|
+
|
|
376
|
+
// ── The rows the selection covers, and what DBGate does to them ──
|
|
377
|
+
const selectedRows = useMemo(() => selectedRowIndices.map((i) => allRows[i]).filter((row) => row != null), [selectedRowIndices, allRows]);
|
|
378
|
+
// Marked to be deleted on Save; a new row simply goes, and the selection with it, which named it.
|
|
379
|
+
const deleteSelectedRows = useCallback(() => {
|
|
380
|
+
if (!pkCol || !canChangeRows || !selectedRows.length) return;
|
|
381
|
+
change((cs) => deleteRows(cs, selectedRows, pkCol, keyCols));
|
|
382
|
+
if (selectedRows.some((row) => isNewRowId(String(row[pkCol])))) clearSelection();
|
|
383
|
+
}, [pkCol, canChangeRows, selectedRows, change, keyCols, clearSelection]);
|
|
384
|
+
// Copies under the rest, bar what the database fills in.
|
|
385
|
+
const cloneSelectedRows = useCallback(() => {
|
|
386
|
+
if (!pkCol || !canChangeRows || !selectedRows.length) return;
|
|
387
|
+
const cloned = schema.map((c) => ({ name: c.name, skip: isAutoIncrement(c) }));
|
|
388
|
+
scrollToNewRow.current = true;
|
|
389
|
+
change((cs) => addRows(cs, selectedRows.map((row) => ({ id: newRowId(), values: cloneValues(cs, row, pkCol, cloned) }))));
|
|
390
|
+
}, [pkCol, canChangeRows, selectedRows, schema, change, newRowId]);
|
|
391
|
+
const revertSelectedRows = useCallback(() => {
|
|
392
|
+
if (!pkCol || cellsReadOnly || !selectedRows.length) return;
|
|
393
|
+
change((cs) => revertRows(cs, new Set(selectedRows.map((row) => String(row[pkCol])))));
|
|
394
|
+
}, [pkCol, cellsReadOnly, selectedRows, change]);
|
|
395
|
+
// One step like any other, so Ctrl+Z brings the changes back.
|
|
396
|
+
const revertAll = useCallback(() => change(() => EMPTY_CHANGESET), [change]);
|
|
397
|
+
const setNullSelected = useCallback(() => {
|
|
398
|
+
const changes: CellChange[] = [];
|
|
399
|
+
forEachSelectedCell(gridSelection, columnOrder.length, allRows.length, (c, r) => {
|
|
400
|
+
changes.push({ row: allRows[r]!, column: columnOrder[c]!, value: null });
|
|
401
|
+
});
|
|
402
|
+
editCells(changes);
|
|
403
|
+
}, [gridSelection, columnOrder, allRows, editCells]);
|
|
404
|
+
|
|
405
|
+
const scrollToColumn = useCallback((name: string) => {
|
|
406
|
+
const col = columnOrder.indexOf(name);
|
|
407
|
+
if (col < 0) return;
|
|
408
|
+
const row = Math.max(0, Math.min(gridSelection.current?.cell[1] ?? 0, allRows.length - 1));
|
|
409
|
+
gridRef.current?.scrollTo(col, row, "horizontal");
|
|
410
|
+
// Focused first, as for a new row: Glide's own top-left cursor would land after ours.
|
|
411
|
+
gridRef.current?.focus();
|
|
412
|
+
if (allRows.length) {
|
|
413
|
+
onGridSelectionChange({
|
|
414
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
415
|
+
current: { cell: [col, row], range: { x: col, y: row, width: 1, height: 1 }, rangeStack: [] },
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
}, [columnOrder, gridSelection, allRows.length, onGridSelectionChange]);
|
|
419
|
+
|
|
420
|
+
// ── The form view: the grid's current row, a field per column ──
|
|
421
|
+
const formIndex = Math.max(0, Math.min(gridSelection.current?.cell[1] ?? 0, allRows.length - 1));
|
|
422
|
+
// The column the form's cursor is on: the grid's cursor goes there, when the grid shows it.
|
|
423
|
+
const [formField, setFormField] = useState<string | null>(null);
|
|
424
|
+
const selectRow = useCallback((row: number) => {
|
|
425
|
+
const shown = formField ? columnOrder.indexOf(formField) : -1;
|
|
426
|
+
const col = shown >= 0 ? shown : Math.max(0, gridSelection.current?.cell[0] ?? 0);
|
|
427
|
+
onGridSelectionChange({
|
|
428
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
429
|
+
current: { cell: [col, row], range: { x: col, y: row, width: 1, height: 1 }, rangeStack: [] },
|
|
430
|
+
});
|
|
431
|
+
}, [formField, columnOrder, gridSelection, onGridSelectionChange]);
|
|
432
|
+
// More rows can be read — not while a new row is unsaved, which they would land in front of.
|
|
433
|
+
const canReadMore = hasMore && changeset.inserted.length === 0;
|
|
434
|
+
const prefetch = useCallback((row: number) => {
|
|
435
|
+
const decision = loadMoreDecision({ lastVisibleRow: row, loadedRows: keyedRows.length, hasMore, busy, newRows: changeset.inserted.length });
|
|
436
|
+
if (decision === "load") onLoadMore?.();
|
|
437
|
+
}, [keyedRows.length, hasMore, busy, changeset.inserted.length, onLoadMore]);
|
|
438
|
+
// A row asked for before it was read — Next past the rows read, Last once every row is — gone to once it is.
|
|
439
|
+
const [wanted, setWanted] = useState<number | "last" | null>(null);
|
|
440
|
+
const formNavigate = useCallback((to: FormNavigation) => {
|
|
441
|
+
if (!allRows.length) return;
|
|
442
|
+
setWanted(null);
|
|
443
|
+
if (to === "last" && canReadMore && onFetchAll) {
|
|
444
|
+
void onFetchAll().then((done) => { if (done) setWanted("last"); });
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
if (to === "next" && formIndex >= allRows.length - 1 && canReadMore) {
|
|
448
|
+
setWanted(formIndex + 1);
|
|
449
|
+
prefetch(formIndex);
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
const next = navigateFormRow(formIndex, to, allRows.length);
|
|
453
|
+
selectRow(next);
|
|
454
|
+
// Landing on the last row read reads the next ones, as scrolling to it does in the grid.
|
|
455
|
+
prefetch(next);
|
|
456
|
+
}, [allRows.length, canReadMore, onFetchAll, formIndex, prefetch, selectRow]);
|
|
457
|
+
useEffect(() => {
|
|
458
|
+
if (wanted === null) return;
|
|
459
|
+
if (wanted === "last") {
|
|
460
|
+
if (!hasMore) { setWanted(null); selectRow(allRows.length - 1); }
|
|
461
|
+
} else if (wanted < allRows.length) {
|
|
462
|
+
setWanted(null);
|
|
463
|
+
selectRow(wanted);
|
|
464
|
+
}
|
|
465
|
+
}, [wanted, hasMore, allRows.length, selectRow]);
|
|
466
|
+
// A phone's Switch to form: the current row in its sheet.
|
|
467
|
+
const openRowForm = useCallback(() => {
|
|
468
|
+
if (allRows.length) setFormRow(formIndex);
|
|
469
|
+
else toast.info("No rows to show as a form");
|
|
470
|
+
}, [allRows.length, formIndex]);
|
|
471
|
+
// The row the form shows, which Revert row changes takes back alone: a selection of several rows
|
|
472
|
+
// made in the grid is not what the form has in front of it.
|
|
473
|
+
const formRecord = formView ? allRows[formIndex] : undefined;
|
|
474
|
+
const formRowId = formRecord && pkCol ? String(formRecord[pkCol]) : null;
|
|
475
|
+
// The reference shown under the grid follows the rows selected here, as they were read: a new row
|
|
476
|
+
// has no key yet and an edit is not saved, so neither names the rows that belong to it.
|
|
477
|
+
const readRows = useMemo(() => {
|
|
478
|
+
const at = formView ? [formIndex] : selectedRowIndices;
|
|
479
|
+
return at.flatMap((i) => (i < rows.length ? [rows[i]!] : []));
|
|
480
|
+
}, [formView, formIndex, selectedRowIndices, rows]);
|
|
481
|
+
useEffect(() => { onSelectedRowsChange?.(readRows); }, [onSelectedRowsChange, readRows]);
|
|
482
|
+
// Rows read again in place — after Save, or Refresh in the form — can come back in another order:
|
|
483
|
+
// Postgres hands back a row it has just updated last. The form keeps to its row, by key, while that
|
|
484
|
+
// row is still read, where DBGate keeps to the place and shows another row; a new view (another
|
|
485
|
+
// sort or filter) starts at the top, as the grid does.
|
|
486
|
+
const formHeldRef = useRef<{ id: string; view: unknown } | null>(null);
|
|
487
|
+
useEffect(() => {
|
|
488
|
+
const held = formHeldRef.current;
|
|
489
|
+
if (!held || !pkCol || held.id === formRowId || !Object.is(held.view, viewKey)) return;
|
|
490
|
+
const at = allRows.findIndex((r) => String(r[pkCol]) === held.id);
|
|
491
|
+
if (at >= 0) selectRow(at);
|
|
492
|
+
}, [rows]); // eslint-disable-line react-hooks/exhaustive-deps -- only rows read again move the form
|
|
493
|
+
useEffect(() => {
|
|
494
|
+
formHeldRef.current = formRowId !== null ? { id: formRowId, view: viewKey } : null;
|
|
495
|
+
}, [formRowId, viewKey]);
|
|
496
|
+
const revertFormRow = useCallback(() => {
|
|
497
|
+
if (formRowId === null || cellsReadOnly) return;
|
|
498
|
+
change((cs) => revertRows(cs, new Set([formRowId])));
|
|
499
|
+
}, [formRowId, cellsReadOnly, change]);
|
|
500
|
+
// The form's editor saves with Ctrl+S once its value is in the change set, which takes a render.
|
|
501
|
+
const [saveAsked, setSaveAsked] = useState(false);
|
|
502
|
+
useEffect(() => {
|
|
503
|
+
if (!saveAsked) return;
|
|
504
|
+
setSaveAsked(false);
|
|
505
|
+
void commit();
|
|
506
|
+
}, [saveAsked, commit]);
|
|
507
|
+
const askSave = useCallback(() => setSaveAsked(true), []);
|
|
508
|
+
// Back from the form, the grid takes the keys again, its cursor on the row and the field the form showed.
|
|
509
|
+
const shownViewRef = useRef(formView);
|
|
510
|
+
useEffect(() => {
|
|
511
|
+
if (shownViewRef.current === formView) return;
|
|
512
|
+
shownViewRef.current = formView;
|
|
513
|
+
if (formView) return;
|
|
514
|
+
const at = gridSelection.current?.cell;
|
|
515
|
+
const shown = formField ? columnOrder.indexOf(formField) : -1;
|
|
516
|
+
const col = at ? (shown >= 0 ? shown : at[0]) : 0;
|
|
517
|
+
if (at) selectRow(at[1]);
|
|
518
|
+
const root = containerRef.current;
|
|
519
|
+
if (!root) return;
|
|
520
|
+
// Glide puts its canvas in two or three frames after the editor (measured: the third frame).
|
|
521
|
+
return focusOnceDrawn(root, () => {
|
|
522
|
+
gridRef.current?.focus();
|
|
523
|
+
if (!root.contains(document.activeElement)) return false;
|
|
524
|
+
if (at) gridRef.current?.scrollTo(col, at[1], "both");
|
|
525
|
+
return true;
|
|
526
|
+
});
|
|
527
|
+
}, [formView]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
528
|
+
// Switched to by hand — not the tab reopening on it, which must not take the keys from wherever they are.
|
|
529
|
+
const formJustSwitched = formView && !shownViewRef.current;
|
|
530
|
+
// DBGate's focusOnVisible: the tab in front — just opened, or picked — hands its keys to the grid or the
|
|
531
|
+
// form, once the rows have come. Never from where the user works: a field being typed in, a dialog,
|
|
532
|
+
// or this tab already.
|
|
533
|
+
useEffect(() => {
|
|
534
|
+
const root = containerRef.current;
|
|
535
|
+
if (!focusOnVisible || !root) return;
|
|
536
|
+
const active = document.activeElement;
|
|
537
|
+
const tab = root.closest("[data-tab-pool-id]") ?? root;
|
|
538
|
+
if (active && active !== document.body
|
|
539
|
+
&& (tab.contains(active) || isTextField(active) || active.closest('[role="dialog"], [role="alertdialog"]'))) return;
|
|
540
|
+
return focusOnceDrawn(root, () => {
|
|
541
|
+
if (formView) root.querySelector<HTMLElement>("[data-form-view]")?.focus({ preventScroll: true });
|
|
542
|
+
else gridRef.current?.focus();
|
|
543
|
+
return root.contains(document.activeElement);
|
|
544
|
+
});
|
|
545
|
+
}, [focusOnVisible]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
546
|
+
useEffect(() => {
|
|
547
|
+
const root = containerRef.current;
|
|
548
|
+
if (!root) return;
|
|
549
|
+
return keepKeysOnRemoval(root, () => {
|
|
550
|
+
if (formView) root.querySelector<HTMLElement>("[data-form-view]")?.focus({ preventScroll: true });
|
|
551
|
+
else gridRef.current?.focus();
|
|
552
|
+
});
|
|
553
|
+
}, [formView]);
|
|
554
|
+
|
|
555
|
+
// ── DBGate's Cell data view: what the selection holds, beside the grid — a phone's is a sheet ──
|
|
556
|
+
// What a cell shows now: an edit's value, and on a new row only what was put in it.
|
|
557
|
+
const valueNow = useCallback((row: Record<string, unknown>, column: string) => {
|
|
558
|
+
if (!pkCol) return row[column];
|
|
559
|
+
const pending = changeset.cells.get(cellId(row[pkCol], column));
|
|
560
|
+
if (pending) return pending.newVal;
|
|
561
|
+
return isNewRowId(String(row[pkCol])) ? undefined : row[column];
|
|
562
|
+
}, [pkCol, changeset]);
|
|
563
|
+
const [cellData, setCellData] = useState(false);
|
|
564
|
+
const [cellDataSheet, setCellDataSheet] = useState(false);
|
|
565
|
+
// The format View cell as JSON document opens the view at, taken once.
|
|
566
|
+
const [cellDataAsk, setCellDataAsk] = useState<CellDataChoice | null>(null);
|
|
567
|
+
const clearCellDataAsk = useCallback(() => setCellDataAsk(null), []);
|
|
568
|
+
const [cellDataWidth, setCellDataWidth] = useState(readCellDataWidth);
|
|
569
|
+
const changeCellDataWidth = useCallback((width: number) => {
|
|
570
|
+
setCellDataWidth(width);
|
|
571
|
+
keepCellDataWidth(width);
|
|
572
|
+
}, []);
|
|
573
|
+
// Not beside the form view, which shows every value of its row itself.
|
|
574
|
+
const cellDataShown = cellData && !formView && !mobile;
|
|
575
|
+
// A row selected whole opens it, as in DBGate: put away, it opens again for the next selection.
|
|
576
|
+
useEffect(() => {
|
|
577
|
+
if (gridSelection.rows.length > 0 && !formView && !mobile) setCellData(true);
|
|
578
|
+
}, [gridSelection]); // eslint-disable-line react-hooks/exhaustive-deps -- a selection made, not the view switched
|
|
579
|
+
const showCellData = useCallback(() => (mobile ? setCellDataSheet(true) : setCellData(true)), [mobile]);
|
|
580
|
+
const toggleCellData = useCallback(() => (mobile ? setCellDataSheet(true) : setCellData((open) => !open)), [mobile]);
|
|
581
|
+
const closeCellData = useCallback((hadFocus: boolean) => {
|
|
582
|
+
setCellData(false);
|
|
583
|
+
// Its focus would go nowhere: back to the grid it was beside.
|
|
584
|
+
if (hadFocus) gridRef.current?.focus();
|
|
585
|
+
}, []);
|
|
586
|
+
// Read only while it is shown: a selection of every cell is a great many values to read on each change.
|
|
587
|
+
const cellDataSelection = useMemo(
|
|
588
|
+
() => (cellDataShown || cellDataSheet
|
|
589
|
+
? collectCellData(gridSelection, columnOrder, allRows.length, (r, column) => valueNow(allRows[r]!, column))
|
|
590
|
+
: NO_CELL_DATA),
|
|
591
|
+
[cellDataShown, cellDataSheet, gridSelection, columnOrder, allRows, valueNow],
|
|
592
|
+
);
|
|
593
|
+
const cellDataSource = useMemo<CellDataSource>(() => ({
|
|
594
|
+
selection: cellDataSelection,
|
|
595
|
+
columns: columnOrder.flatMap((name) => schemaMap.get(name) ?? []),
|
|
596
|
+
record: (row) => allRows[row]!,
|
|
597
|
+
rowId: (row) => (pkCol ? String(allRows[row]?.[pkCol]) : String(row)),
|
|
598
|
+
rowValues: (row) => {
|
|
599
|
+
const record = allRows[row]!;
|
|
600
|
+
// A new row's columns nothing was put in are left out: DBGate's new row has none of them.
|
|
601
|
+
return Object.fromEntries(schema.flatMap((c) => {
|
|
602
|
+
const value = valueNow(record, c.name);
|
|
603
|
+
return value === undefined ? [] : [[c.name, value] as const];
|
|
604
|
+
}));
|
|
605
|
+
},
|
|
606
|
+
canEdit: canEditCell,
|
|
607
|
+
onEdit: editCells,
|
|
608
|
+
onSave: askSave,
|
|
609
|
+
}), [cellDataSelection, columnOrder, schemaMap, allRows, pkCol, schema, valueNow, canEditCell, editCells, askSave]);
|
|
610
|
+
|
|
611
|
+
// ── DBGate's Copy: the block the selection covers, in the format Set format chose ──
|
|
612
|
+
const copySource = useMemo<GridCopySource>(() => {
|
|
613
|
+
const rowNow = (r: number) => Object.fromEntries(schema.map((c) => [c.name, valueNow(allRows[r]!, c.name)]));
|
|
614
|
+
return {
|
|
615
|
+
selection: gridSelection, columns: columnOrder, rowCount: allRows.length, rowNow,
|
|
616
|
+
// A new row is not in the database yet: what it would be found by is what it holds.
|
|
617
|
+
rowStored: (r) => (pkCol && isNewRowId(String(allRows[r]![pkCol])) ? rowNow(r) : allRows[r]!),
|
|
618
|
+
target: {
|
|
619
|
+
// DBGate's, for rows that name no table.
|
|
620
|
+
table: selectedTable ?? "target", schema: selectedSchema, dialect: dialect ?? "postgres",
|
|
621
|
+
// DBGate's: the primary key, else the first column.
|
|
622
|
+
keyColumns: keyCols.length ? keyCols : schema.slice(0, 1).map((c) => c.name),
|
|
623
|
+
kinds: new Map(schema.map((c) => [c.name, classifyColumnType(dialect ?? "postgres", c.type)])),
|
|
624
|
+
},
|
|
625
|
+
};
|
|
626
|
+
}, [schema, valueNow, allRows, gridSelection, columnOrder, pkCol, selectedTable, selectedSchema, dialect, keyCols]);
|
|
627
|
+
const focusGrid = useCallback(() => gridRef.current?.focus(), []);
|
|
628
|
+
const clearSelectedCells = useCallback(() => { void gridRef.current?.emit("delete"); }, []);
|
|
629
|
+
const gridCopy = useGridCopy(copySource, !cellsReadOnly, clearSelectedCells, focusGrid);
|
|
630
|
+
|
|
631
|
+
useImperativeHandle(ref, () => ({
|
|
632
|
+
save: () => { void commit(); },
|
|
633
|
+
revert: revertAll,
|
|
634
|
+
newRow: appendRow,
|
|
635
|
+
deleteSelectedRows,
|
|
636
|
+
undo,
|
|
637
|
+
redo,
|
|
638
|
+
scrollToColumn,
|
|
639
|
+
focus: () => gridRef.current?.focus(),
|
|
640
|
+
formNavigate,
|
|
641
|
+
openRowForm,
|
|
642
|
+
toggleCellData,
|
|
643
|
+
}), [commit, revertAll, appendRow, deleteSelectedRows, undo, redo, scrollToColumn, formNavigate, openRowForm, toggleCellData]);
|
|
644
|
+
|
|
645
|
+
// What a toolbar outside the grid shows: Save counts the rows it would write, as DBGate's does.
|
|
646
|
+
const selectedColumns = useMemo(() => {
|
|
647
|
+
const names: string[] = [];
|
|
648
|
+
for (const i of gridSelection.columns) if (columnOrder[i]) names.push(columnOrder[i]);
|
|
649
|
+
return names;
|
|
650
|
+
}, [gridSelection.columns, columnOrder]);
|
|
651
|
+
const formAtFirst = formIndex <= 0;
|
|
652
|
+
const formAtLast = formIndex >= allRows.length - 1 && !canReadMore;
|
|
653
|
+
useEffect(() => {
|
|
654
|
+
onEditStateChange?.({
|
|
655
|
+
pending: changedRows, newRows: changeset.inserted.length, selectedRows: selectedRowIndices.length, selectedColumns,
|
|
656
|
+
canChangeRows, canUndo, canRedo, cellData: cellDataShown,
|
|
657
|
+
...(formView ? { form: { atFirst: formAtFirst, atLast: formAtLast } } : {}),
|
|
658
|
+
});
|
|
659
|
+
}, [
|
|
660
|
+
onEditStateChange, changedRows, changeset.inserted.length, selectedRowIndices.length, selectedColumns, canChangeRows, canUndo, canRedo,
|
|
661
|
+
cellDataShown, formView, formAtFirst, formAtLast,
|
|
662
|
+
]);
|
|
663
|
+
|
|
664
|
+
// ── Column widths: dragged on the header, kept by the tab once the drag ends ──
|
|
665
|
+
const keptWidthsRef = useRef(columnWidths);
|
|
666
|
+
keptWidthsRef.current = columnWidths;
|
|
667
|
+
const draggedRef = useRef(dragged);
|
|
668
|
+
draggedRef.current = dragged;
|
|
669
|
+
const onColumnResize = useCallback((col: GridColumn, size: number) => {
|
|
670
|
+
const id = col.id ?? col.title;
|
|
671
|
+
setDragged((d) => (d[id] === size ? d : { ...d, [id]: size }));
|
|
672
|
+
}, []);
|
|
673
|
+
const onColumnResizeEnd = useCallback((col: GridColumn, size: number) => {
|
|
674
|
+
if (!onColumnWidthsChange) return;
|
|
675
|
+
onColumnWidthsChange({ ...keptWidthsRef.current, ...draggedRef.current, [col.id ?? col.title]: size });
|
|
676
|
+
setDragged({});
|
|
677
|
+
}, [onColumnWidthsChange]);
|
|
100
678
|
|
|
101
|
-
const
|
|
102
|
-
|
|
679
|
+
const openCellMenu = useCallback(([colIdx, rowIdx]: Item, position: CellPoint) => {
|
|
680
|
+
// As in DBGate, the menu acts on the selection, which a right-click outside it moves there.
|
|
681
|
+
if (!selectionHasCell(gridSelection, colIdx, rowIdx)) {
|
|
682
|
+
onGridSelectionChange({
|
|
683
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
684
|
+
current: { cell: [colIdx, rowIdx], range: { x: colIdx, y: rowIdx, width: 1, height: 1 }, rangeStack: [] },
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
setContextMenu({ position, rowIdx, colIdx });
|
|
688
|
+
}, [gridSelection, onGridSelectionChange]);
|
|
689
|
+
// A phone's menu comes from a press held on a cell, found among the cells in view by their bounds.
|
|
690
|
+
const cellAt = useCallback(({ x, y }: CellPoint, target: EventTarget | null): Item | null => {
|
|
691
|
+
const grid = gridRef.current;
|
|
692
|
+
const root = containerRef.current;
|
|
693
|
+
if (!grid || !root || !isGridSurface(root, target)) return null;
|
|
694
|
+
// A row scrolled half under the header reaches up behind it: a press there is on the header.
|
|
695
|
+
const header = grid.getBounds(0, -1);
|
|
696
|
+
if (!header || y < header.y + header.height) return null;
|
|
697
|
+
const region = visibleRef.current;
|
|
698
|
+
const top = Math.max(0, region.y);
|
|
699
|
+
const within = (at: number, from: number, size: number) => at >= from && at < from + size;
|
|
700
|
+
let col = -1;
|
|
701
|
+
for (let c = Math.max(0, region.x); c <= region.x + region.width && col < 0; c++) {
|
|
702
|
+
const b = grid.getBounds(c, top);
|
|
703
|
+
if (b && within(x, b.x, b.width)) col = c;
|
|
704
|
+
}
|
|
705
|
+
if (col < 0) return null;
|
|
706
|
+
for (let r = top; r <= region.y + region.height; r++) {
|
|
707
|
+
const b = grid.getBounds(col, r);
|
|
708
|
+
if (b && within(y, b.y, b.height)) return [col, r];
|
|
709
|
+
}
|
|
710
|
+
return null;
|
|
103
711
|
}, []);
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
712
|
+
const { handlers: pressHandlers, pressNow, travelled: touchTravelled } = useCellLongPress(mobile && !formView, cellAt, openCellMenu);
|
|
713
|
+
const handleCellContextMenu = useCallback(([colIdx, rowIdx]: Item, event: {
|
|
714
|
+
preventDefault: () => void; localEventX: number; localEventY: number; bounds: { x: number; y: number }; isTouch: boolean;
|
|
715
|
+
}) => {
|
|
108
716
|
event.preventDefault();
|
|
109
|
-
|
|
717
|
+
// A finger's menu is the held press's: the browser's own long press only opens it sooner, and
|
|
718
|
+
// Glide's — told when the finger lifts, after a press that moved — never does.
|
|
719
|
+
if (mobile && event.isTouch) {
|
|
720
|
+
pressNow();
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
openCellMenu([colIdx, rowIdx], { x: event.bounds.x + event.localEventX, y: event.bounds.y + event.localEventY });
|
|
724
|
+
}, [mobile, pressNow, openCellMenu]);
|
|
725
|
+
// What a key on the selection runs, set once the commands below are: null where the grid has none.
|
|
726
|
+
const selectionKeyRef = useRef<(command: GridKeyCommand) => (() => void) | null>(() => null);
|
|
727
|
+
const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {
|
|
728
|
+
// Not from a dialog the grid opened: its keys reach here through React, and its Ctrl+Enter is its own OK.
|
|
729
|
+
const place = tableKeyPlace(e.currentTarget, e.target);
|
|
730
|
+
if (place && (e.metaKey || e.ctrlKey) && e.key === "Enter" && changedRows > 0) { e.preventDefault(); void commit(); return; }
|
|
731
|
+
// Undo, redo and Revert row changes are the grid's, wherever it is shown; a filter box and the
|
|
732
|
+
// cell editor keep their own.
|
|
733
|
+
const command = place && tableKeyCommand(e.nativeEvent, place);
|
|
734
|
+
// A Query tab's result has no table view around it to take Ctrl+S: the grid saves its own edited
|
|
735
|
+
// rows, and with none the key goes on to the tab, which saves its SQL.
|
|
736
|
+
if (command === "save" && editOnly && changedRows > 0) { e.preventDefault(); e.stopPropagation(); void commit(); return; }
|
|
737
|
+
if (command && command !== "swallow" && isGridKeyCommand(command)) {
|
|
738
|
+
const run = selectionKeyRef.current(command);
|
|
739
|
+
// Not a command this grid has: the key stays the browser's.
|
|
740
|
+
if (!run) return;
|
|
741
|
+
e.preventDefault();
|
|
742
|
+
e.stopPropagation();
|
|
743
|
+
run();
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
746
|
+
if (command !== "undo" && command !== "redo" && command !== "revert-rows") return;
|
|
747
|
+
e.preventDefault();
|
|
748
|
+
e.stopPropagation();
|
|
749
|
+
if (command === "undo") undo();
|
|
750
|
+
else if (command === "redo") redo();
|
|
751
|
+
else if (formView) revertFormRow();
|
|
752
|
+
else revertSelectedRows();
|
|
753
|
+
}, [changedRows, commit, editOnly, undo, redo, formView, revertFormRow, revertSelectedRows]);
|
|
754
|
+
|
|
755
|
+
// ── Drawing the change set: row washes from the row's theme, and the marks over a cell ──
|
|
756
|
+
const allRowsRef = useRef(allRows);
|
|
757
|
+
allRowsRef.current = allRows;
|
|
758
|
+
const columnOrderRef = useRef(columnOrder);
|
|
759
|
+
columnOrderRef.current = columnOrder;
|
|
760
|
+
const getRowThemeOverride = useCallback((row: number): Partial<Theme> | undefined => {
|
|
761
|
+
const target = allRowsRef.current[row];
|
|
762
|
+
if (!target || !pkCol) return undefined;
|
|
763
|
+
return rowChangeTheme(rowChange(changesetRef.current, String(target[pkCol])), colors);
|
|
764
|
+
}, [pkCol, colors, changesetRef]);
|
|
765
|
+
// ── DBGate's form button in a foreign key cell, on a desktop: the row the key refers to, in a new tab ──
|
|
766
|
+
const fkButtonsRef = useRef(false);
|
|
767
|
+
fkButtonsRef.current = !mobile && !formView && (!!onOpenReference || !!place);
|
|
768
|
+
const schemaMapRef = useRef(schemaMap);
|
|
769
|
+
schemaMapRef.current = schemaMap;
|
|
770
|
+
/** The key a cell's button follows, with the value the cell shows now; null for a cell with no button. */
|
|
771
|
+
const fkButtonOf = useCallback((col: number, row: number) => {
|
|
772
|
+
if (!fkButtonsRef.current) return null;
|
|
773
|
+
const column = columnOrderRef.current[col];
|
|
774
|
+
const record = allRowsRef.current[row];
|
|
775
|
+
const fk = column ? schemaMapRef.current.get(column)?.fk : undefined;
|
|
776
|
+
if (!column || !record || !fk) return null;
|
|
777
|
+
const pending = pkCol ? changesetRef.current.cells.get(cellId(record[pkCol], column)) : undefined;
|
|
778
|
+
const value = pending ? pending.newVal : pkCol && isNewRowId(String(record[pkCol])) ? undefined : record[column];
|
|
779
|
+
return value === null || value === undefined || isBinaryValue(value) ? null : { column, record, fk, value };
|
|
780
|
+
}, [pkCol, changesetRef]);
|
|
781
|
+
// The foreign key cell under the pointer, and whether the pointer is on its button.
|
|
782
|
+
const fkHoverRef = useRef<{ col: number; row: number; on: boolean } | null>(null);
|
|
783
|
+
const onMouseMove = useCallback((args: GridMouseEventArgs) => {
|
|
784
|
+
const before = fkHoverRef.current;
|
|
785
|
+
const [col, row] = args.location;
|
|
786
|
+
const now = args.kind === "cell" && fkButtonOf(col, row) ? { col, row, on: isOnFkButton(args.localEventX, args.localEventY, args.bounds) } : null;
|
|
787
|
+
if (before?.col === now?.col && before?.row === now?.row && before?.on === now?.on) return;
|
|
788
|
+
fkHoverRef.current = now;
|
|
789
|
+
gridRef.current?.updateCells([before, now].flatMap((h) => (h ? [{ cell: [h.col, h.row] as Item }] : [])));
|
|
790
|
+
}, [fkButtonOf]);
|
|
791
|
+
|
|
792
|
+
const drawCell = useCallback<DrawCellCallback>((args, drawContent) => {
|
|
793
|
+
const button = fkButtonOf(args.col, args.row);
|
|
794
|
+
if (button) {
|
|
795
|
+
drawBesideFkButton(args.ctx, args.rect, { right: args.cell.contentAlign === "right", padding: args.theme.cellHorizontalPadding }, drawContent);
|
|
796
|
+
const hover = fkHoverRef.current;
|
|
797
|
+
const hovered = hover?.col === args.col && hover.row === args.row;
|
|
798
|
+
const cursor = gridSelectionRef.current.current?.cell;
|
|
799
|
+
const current = cursor?.[0] === args.col && cursor[1] === args.row;
|
|
800
|
+
drawFkButton(args.ctx, args.rect, hovered && hover.on ? "hover" : hovered || current ? "shown" : "faint", args.theme);
|
|
801
|
+
// Glide hands the hovered cell a way to set the pointer, and takes it back when a draw leaves it unset.
|
|
802
|
+
if (hovered && hover.on) (args as { overrideCursor?: (cursor: string) => void }).overrideCursor?.("pointer");
|
|
803
|
+
} else {
|
|
804
|
+
drawContent();
|
|
805
|
+
}
|
|
806
|
+
const target = allRowsRef.current[args.row];
|
|
807
|
+
const column = columnOrderRef.current[args.col];
|
|
808
|
+
if (!target || !column || !pkCol) return;
|
|
809
|
+
drawCellMark(args.ctx, args.rect, cellMark(changesetRef.current, String(target[pkCol]), column), colors);
|
|
810
|
+
}, [pkCol, colors, changesetRef, fkButtonOf]);
|
|
811
|
+
|
|
812
|
+
// ── ⋯ in a foreign key cell's editor: the referenced table's rows, one picked into the cell ──
|
|
813
|
+
const [cellLookup, setCellLookup] = useState<{ row: Record<string, unknown>; column: string; lookup: NonNullable<ReturnType<NonNullable<typeof lookupFor>>> } | null>(null);
|
|
814
|
+
const gridSelectionRef = useRef(gridSelection);
|
|
815
|
+
gridSelectionRef.current = gridSelection;
|
|
816
|
+
const fkTables = useMemo(() => new Map(schema.flatMap((c) => (c.fk ? [[c.name, c.fk.table] as const] : []))), [schema]);
|
|
817
|
+
const editorDeps = useRef({ lookupFor, fkTables });
|
|
818
|
+
editorDeps.current = { lookupFor, fkTables };
|
|
819
|
+
// One function for the grid's life: the editor Glide has open is built from it.
|
|
820
|
+
const provideEditor = useCallback((cell: GridCell) => {
|
|
821
|
+
// A cell that cannot change keeps Glide's viewer: nothing typed there is saved.
|
|
822
|
+
if ("readonly" in cell && cell.readonly) return undefined;
|
|
823
|
+
const { lookupFor: lookupOf, fkTables: tables } = editorDeps.current;
|
|
824
|
+
// Glide edits the cell the cursor is on.
|
|
825
|
+
const at = gridSelectionRef.current.current?.cell;
|
|
826
|
+
if (!lookupOf || !at) return cellEditor(cell);
|
|
827
|
+
const column = columnOrderRef.current[at[0]];
|
|
828
|
+
const row = allRowsRef.current[at[1]];
|
|
829
|
+
const table = column ? tables.get(column) : undefined;
|
|
830
|
+
if (!column || !row || !table) return cellEditor(cell);
|
|
831
|
+
// No ⋯ that would open nothing: the table it names has to be one the lookup can read.
|
|
832
|
+
const lookup = lookupOf(column);
|
|
833
|
+
if (!lookup) return cellEditor(cell);
|
|
834
|
+
return fkCellEditor(cell, table, () => setCellLookup({ row, column, lookup }));
|
|
110
835
|
}, []);
|
|
111
|
-
|
|
112
|
-
|
|
836
|
+
|
|
837
|
+
// DBGate's header: Glide draws the column titles in the top band, and the column menu buttons
|
|
838
|
+
// and — on a desktop — the filter row are HTML laid over the canvas (grid/grid-header-overlay.tsx).
|
|
839
|
+
// A phone filters through chips and a sheet, which a column's title or ⌄ opens.
|
|
840
|
+
const filterRow = !!filtering && !mobile;
|
|
841
|
+
const columnSheet = mobile ? filtering?.onColumnSheet : undefined;
|
|
842
|
+
const titleBand = mobile ? TITLE_BAND_TOUCH : TITLE_BAND;
|
|
843
|
+
const headerHeight = titleBand + (filterRow ? FILTER_BAND : 0);
|
|
844
|
+
const markerWidth = rowMarkerWidth(allRows.length);
|
|
845
|
+
|
|
846
|
+
// A foreign key's button: the referenced row as a form in a new tab, or — where the grid has no
|
|
847
|
+
// table to open it from — a Query tab reading it.
|
|
848
|
+
const followKey = useCallback(({ column, record, fk, value }: NonNullable<ReturnType<typeof fkButtonOf>>) => {
|
|
849
|
+
if (onOpenReference) onOpenReference(column, { ...record, [column]: value });
|
|
850
|
+
else openFkTable(fk, value);
|
|
851
|
+
}, [onOpenReference, openFkTable]);
|
|
852
|
+
// A phone changes a row through its form: a tap on a cell opens the row, and nothing else — not
|
|
853
|
+
// the checkbox a boolean cell draws, which a tap would otherwise toggle unseen behind the form.
|
|
854
|
+
// A finger that scrolled the grid by less than a row is no tap, though Glide reports one. A long
|
|
855
|
+
// press is the cell's menu, and the row number selects rows, as everywhere else. On a desktop a
|
|
856
|
+
// click does something of its own only on a foreign key's button.
|
|
857
|
+
const onCellClicked = useCallback(([col, row]: Item, event: CellClickedEventArgs) => {
|
|
858
|
+
if (col < 0) return;
|
|
859
|
+
if (mobile) {
|
|
860
|
+
event.preventDefault();
|
|
861
|
+
if (!event.isLongTouch && !touchTravelled()) setFormRow(row);
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
if (event.isLongTouch) return;
|
|
865
|
+
const button = fkButtonOf(col, row);
|
|
866
|
+
if (!button || !isOnFkButton(event.localEventX, event.localEventY, event.bounds)) return;
|
|
867
|
+
// Not the editor a second click on the cursor's cell opens.
|
|
868
|
+
event.preventDefault();
|
|
869
|
+
followKey(button);
|
|
870
|
+
}, [mobile, touchTravelled, fkButtonOf, followKey]);
|
|
871
|
+
// Previous and Next take the grid along: the row seen last is the one in view once the sheet goes.
|
|
872
|
+
const showFormRow = useCallback((row: number) => {
|
|
873
|
+
setFormRow(row);
|
|
874
|
+
const col = Math.max(0, gridSelectionRef.current.current?.cell[0] ?? 0);
|
|
875
|
+
onGridSelectionChange({
|
|
876
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
877
|
+
current: { cell: [col, row], range: { x: col, y: row, width: 1, height: 1 }, rangeStack: [] },
|
|
878
|
+
});
|
|
879
|
+
gridRef.current?.scrollTo(col, row, "vertical");
|
|
880
|
+
}, [onGridSelectionChange]);
|
|
881
|
+
const titleColumns = useMemo<TitleColumn[]>(() => columnOrder.map((name) => {
|
|
882
|
+
const col = schemaMap.get(name);
|
|
883
|
+
return {
|
|
884
|
+
name,
|
|
885
|
+
type: col?.type ?? "",
|
|
886
|
+
notNull: !!col && !col.nullable,
|
|
887
|
+
icon: col ? titleIcon({ pk: col.pk, fk: col.fk, autoIncrement: isAutoIncrement(col) }) : null,
|
|
888
|
+
};
|
|
889
|
+
}), [columnOrder, schemaMap]);
|
|
890
|
+
// A new drawer whenever what it draws changes, for Glide to draw with; `drawnCellContent` below
|
|
891
|
+
// is what makes it draw.
|
|
892
|
+
const drawHeader = useMemo(() => columnTitleDrawer({
|
|
893
|
+
titleHeight: titleBand,
|
|
894
|
+
columnAt: (i) => titleColumns[i],
|
|
895
|
+
sortOf: (name) => {
|
|
896
|
+
const at = sortPosition(sort, name);
|
|
897
|
+
return at && { dir: at.dir, index: sort.length > 1 ? at.index : null };
|
|
898
|
+
},
|
|
899
|
+
mono: readCssVar("--font-mono") || "monospace",
|
|
900
|
+
cornerCheckbox: !sidePanel,
|
|
901
|
+
}), [titleColumns, sort, sidePanel, titleBand, theme]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
902
|
+
// Glide draws the canvas again only when a prop its blit check compares has changed
|
|
903
|
+
// (`computeCanBlit`), and neither the rows `getCellContent` reads through refs nor the header
|
|
904
|
+
// drawer is one: a new view with as many rows as the last, a new sort or a reverted edit left the
|
|
905
|
+
// old picture on screen. A new `getCellContent` is one, and redraws the titles with the cells.
|
|
906
|
+
const drawnCellContent = useMemo(() => (cell: Item) => getCellContent(cell), [getCellContent, allRows, changeset, drawHeader, colors]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
907
|
+
const overlayColumns = useMemo(() => columns.map((c) => ({ id: c.id ?? c.title, width: (c as { width: number }).width })), [columns]);
|
|
908
|
+
const scrollbar = useScrollbarSize(containerRef, allRows.length, columns.length, !formView);
|
|
909
|
+
|
|
910
|
+
const filterKinds = useMemo(() => new Map(filtering?.columns.map((c) => [c.name, c.kind])), [filtering?.columns]);
|
|
911
|
+
const menuColumn = headerMenu?.colName ?? null;
|
|
912
|
+
// Kept apart from the rest of the grid's state, so selecting a cell does not redraw every slot.
|
|
913
|
+
const renderHeaderSlot = useCallback((c: OverlayColumn) => {
|
|
914
|
+
const kind = filterKinds.get(c.id) ?? "other";
|
|
915
|
+
return (
|
|
916
|
+
<>
|
|
917
|
+
<button
|
|
918
|
+
type="button" aria-haspopup="menu" aria-expanded={menuColumn === c.id} aria-label={`Column menu: ${c.id}`} title="Column menu"
|
|
919
|
+
className={cn(
|
|
920
|
+
"pointer-events-auto absolute right-0.5 grid rounded text-text-3 can-hover:hover:bg-surface-hover can-hover:hover:text-text aria-expanded:bg-surface-hover aria-expanded:text-text",
|
|
921
|
+
// A finger's 44 px, with the ⌄ where a desktop has it, clear of the title.
|
|
922
|
+
mobile ? "size-11 items-center justify-items-end pr-1" : "size-5 place-items-center",
|
|
923
|
+
)}
|
|
924
|
+
style={{ top: (titleBand - (mobile ? 44 : 20)) / 2 }}
|
|
925
|
+
onClick={(e) => {
|
|
926
|
+
if (columnSheet) return columnSheet(c.id);
|
|
927
|
+
const r = e.currentTarget.getBoundingClientRect();
|
|
928
|
+
setHeaderMenu({ colName: c.id, bounds: { x: r.left, y: r.top, width: r.width, height: r.height } });
|
|
929
|
+
}}
|
|
930
|
+
>
|
|
931
|
+
<ChevronDown className="size-3" />
|
|
932
|
+
</button>
|
|
933
|
+
{filterRow && filtering && (
|
|
934
|
+
<div className="pointer-events-none absolute inset-x-1" style={{ top: titleBand + 4 }}>
|
|
935
|
+
<FilterCell {...columnFilterCellProps(filtering, c.id, kind, fkTables.get(c.id))} onArrowDown={() => gridRef.current?.focus()} />
|
|
936
|
+
</div>
|
|
937
|
+
)}
|
|
938
|
+
</>
|
|
939
|
+
);
|
|
940
|
+
}, [filterRow, filtering, filterKinds, fkTables, menuColumn, columnSheet, mobile, titleBand]);
|
|
941
|
+
const onHeaderClicked = useCallback((col: number) => {
|
|
942
|
+
const c = columns[col];
|
|
943
|
+
if (c && columnSheet) columnSheet(c.id ?? c.title);
|
|
944
|
+
}, [columns, columnSheet]);
|
|
945
|
+
|
|
946
|
+
const copyColumnName = useCallback((name: string) => {
|
|
947
|
+
void copyToClipboard(name).then((ok) => {
|
|
948
|
+
if (ok) toast.success("Column name copied");
|
|
949
|
+
else toast.error("Could not copy the column name");
|
|
950
|
+
});
|
|
113
951
|
}, []);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
}, [
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
952
|
+
|
|
953
|
+
const stats = useMemo(
|
|
954
|
+
() => selectionStats(gridSelection, columnOrder.length, allRows.length, (c, r) => {
|
|
955
|
+
const row = allRows[r];
|
|
956
|
+
const name = columnOrder[c];
|
|
957
|
+
// A cell counts with the value it now shows.
|
|
958
|
+
return row && name ? valueNow(row, name) : undefined;
|
|
959
|
+
}),
|
|
960
|
+
[gridSelection, columnOrder, allRows, valueNow],
|
|
961
|
+
);
|
|
962
|
+
|
|
963
|
+
// ── DBGate's commands on the selection (grid/selection-commands.ts) ──
|
|
964
|
+
// Filter selected value: each column's filter set to the values selected in it, the others kept.
|
|
965
|
+
const filterSelectedValues = useCallback(() => {
|
|
966
|
+
if (!filtering) return;
|
|
967
|
+
const result = selectedValueFilters(
|
|
968
|
+
(visit) => forEachSelectedCell(gridSelection, columnOrder.length, allRows.length, (c, r) => {
|
|
969
|
+
const column = columnOrder[c]!;
|
|
970
|
+
visit({ column, value: valueNow(allRows[r]!, column) });
|
|
971
|
+
}),
|
|
972
|
+
(column) => filterKinds.get(column),
|
|
973
|
+
);
|
|
974
|
+
if (!result.ok) {
|
|
975
|
+
toast.error(`Too many values selected in ${result.column} to filter by`, { description: "Select fewer cells in that column." });
|
|
976
|
+
return;
|
|
977
|
+
}
|
|
978
|
+
if (result.filters.size === 0) return;
|
|
979
|
+
filtering.onChange((f) => [...result.filters].reduce((next, [column, text]) => withColumnFilter(next, column, text), f));
|
|
980
|
+
}, [filtering, gridSelection, columnOrder, allRows, valueNow, filterKinds]);
|
|
981
|
+
// Hide column: the cursor stays where the hidden columns began, on the column that moves into their place.
|
|
982
|
+
const hideSelectedColumns = useCallback(() => {
|
|
983
|
+
const at = selectedColumnIndices(gridSelection, columnOrder.length);
|
|
984
|
+
if (!onHideColumns || !at.length) return;
|
|
985
|
+
onHideColumns(at.map((i) => columnOrder[i]!));
|
|
986
|
+
const left = columnOrder.length - at.length;
|
|
987
|
+
const row = gridSelection.current?.cell[1];
|
|
988
|
+
if (left === 0 || row === undefined) {
|
|
989
|
+
clearSelection();
|
|
990
|
+
return;
|
|
991
|
+
}
|
|
992
|
+
const col = Math.min(at[0]!, left - 1);
|
|
993
|
+
onGridSelectionChange({
|
|
994
|
+
columns: CompactSelection.empty(), rows: CompactSelection.empty(),
|
|
995
|
+
current: { cell: [col, row], range: { x: col, y: row, width: 1, height: 1 }, rangeStack: [] },
|
|
996
|
+
});
|
|
997
|
+
}, [gridSelection, columnOrder, onHideColumns, clearSelection, onGridSelectionChange]);
|
|
998
|
+
const saveCellToFile = useCallback((value: unknown, column: string, row: Record<string, unknown>) => {
|
|
999
|
+
const base = cellFileBase(selectedTable, column);
|
|
1000
|
+
// Bytes past the row's preview: read whole on the server, the row found again by its key as read.
|
|
1001
|
+
if (isBinaryValue(value) && value.truncated && startCellDownload && keyCols.length) {
|
|
1002
|
+
const name = cellFileName(value, base);
|
|
1003
|
+
const id = toast.loading(`Reading ${name}…`);
|
|
1004
|
+
startCellDownload(column, rowKeyOf(row, keyCols), name).then((ticket) => {
|
|
1005
|
+
if (!ticket) {
|
|
1006
|
+
toast.dismiss(id);
|
|
1007
|
+
return;
|
|
1008
|
+
}
|
|
1009
|
+
triggerDownload(gridExportDownloadUrl(ticket.ticket), ticket.fileName);
|
|
1010
|
+
toast.success(`Downloading ${ticket.fileName}`, { id });
|
|
1011
|
+
}, (e: unknown) => {
|
|
1012
|
+
toast.error("Could not save the cell to a file", { id, description: (e as Error).message });
|
|
1013
|
+
});
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
const file = cellFile(value, base);
|
|
1017
|
+
if (file.ok) downloadCellFile(file);
|
|
1018
|
+
else toast.error("Could not save the cell to a file", { description: file.reason });
|
|
1019
|
+
}, [selectedTable, startCellDownload, keyCols]);
|
|
1020
|
+
|
|
1021
|
+
// ── DBGate's editors in a dialog: a cell's value, a row as JSON, new rows from JSON ──
|
|
1022
|
+
const [textDialog, setTextDialog] = useState<TextDialog | null>(null);
|
|
1023
|
+
const documentColumns = useMemo<DocumentColumn[]>(() => schema.map((c) => ({ name: c.name, kind: fieldKind(c) })), [schema]);
|
|
1024
|
+
const rowValuesNow = useCallback((row: Record<string, unknown>) => (
|
|
1025
|
+
Object.fromEntries(schema.map((c) => [c.name, valueNow(row, c.name)]))
|
|
1026
|
+
), [schema, valueNow]);
|
|
1027
|
+
/** What OK does with the dialog's text: null once it is in the change set, or why it cannot be. */
|
|
1028
|
+
const takeText = useCallback((dialog: TextDialog, text: string): string | null => {
|
|
1029
|
+
if (dialog.kind === "cell") {
|
|
1030
|
+
if (text === dialog.initial) return null;
|
|
1031
|
+
const col = schemaMap.get(dialog.column);
|
|
1032
|
+
const parsed = parseFormText(text, col ? fieldKind(col) : "text");
|
|
1033
|
+
if (!parsed.ok) return `${dialog.column}: ${parsed.error}`;
|
|
1034
|
+
editCells([{ row: dialog.row, column: dialog.column, value: parsed.value }]);
|
|
1035
|
+
return null;
|
|
1036
|
+
}
|
|
1037
|
+
const read = readJsonDocuments(text, dialog.kind === "add");
|
|
1038
|
+
if (!read.ok) return read.error;
|
|
1039
|
+
if (dialog.kind === "row") {
|
|
1040
|
+
const result = documentChanges(read.documents[0]!, rowValuesNow(dialog.row), documentColumns, (column) => canEditCell(dialog.row, column));
|
|
1041
|
+
if (!result.ok) return result.error;
|
|
1042
|
+
editCells(result.changes.map(({ column, value }) => ({ row: dialog.row, column, value })));
|
|
1043
|
+
return null;
|
|
1044
|
+
}
|
|
1045
|
+
// A new row's key the database fills in is locked, as it is in the grid.
|
|
1046
|
+
const result = newRowValues(read.documents, documentColumns, (column) => {
|
|
1047
|
+
const lock = lockColumns.get(column);
|
|
1048
|
+
return !!lock && lock.pk && lock.autoIncrement;
|
|
1049
|
+
});
|
|
1050
|
+
if (!result.ok) return result.error;
|
|
1051
|
+
scrollToNewRow.current = true;
|
|
1052
|
+
change((cs) => addRows(cs, result.rows.map((values) => ({ id: newRowId(), values }))));
|
|
1053
|
+
return null;
|
|
1054
|
+
}, [schemaMap, editCells, rowValuesNow, documentColumns, canEditCell, lockColumns, change, newRowId]);
|
|
1055
|
+
|
|
1056
|
+
// ── DBGate's Generate SQL from data (grid/generate-sql.ts): the rows and columns the selection lies on ──
|
|
1057
|
+
const [sqlDialog, setSqlDialog] = useState<{
|
|
1058
|
+
rows: Iterable<SqlSourceRow>; columns: string[]; allColumns: string[]; target: CopySqlTarget;
|
|
1059
|
+
} | null>(null);
|
|
1060
|
+
const openGenerateSql = useCallback(() => {
|
|
1061
|
+
const block = selectedBlock(gridSelection, columnOrder.length, allRows.length);
|
|
1062
|
+
if (!block.rows.length) return;
|
|
1063
|
+
const { rowNow, rowStored, target } = copySource;
|
|
1064
|
+
// Read again whenever the dialog's choices change, and only as far as the SQL is written.
|
|
1065
|
+
const rows: Iterable<SqlSourceRow> = {
|
|
1066
|
+
*[Symbol.iterator]() {
|
|
1067
|
+
for (const r of block.rows) {
|
|
1068
|
+
yield { now: rowNow(r), stored: rowStored(r), isNew: !!pkCol && isNewRowId(String(allRows[r]![pkCol])) };
|
|
1069
|
+
}
|
|
1070
|
+
},
|
|
1071
|
+
};
|
|
1072
|
+
setSqlDialog({ rows, columns: block.columns.map((c) => columnOrder[c]!), allColumns: schema.map((c) => c.name), target });
|
|
1073
|
+
}, [gridSelection, columnOrder, allRows, copySource, pkCol, schema]);
|
|
1074
|
+
|
|
1075
|
+
// ── DBGate's keys on the selection (grid/table-keys.ts): the cell menu's commands, where the menu has them ──
|
|
1076
|
+
selectionKeyRef.current = (command) => {
|
|
1077
|
+
// The form's keys are its own (grid/form-view.tsx).
|
|
1078
|
+
if (formView) return null;
|
|
1079
|
+
// As the cell menu (below) offers each: where it would leave the item out or grey it, the key is the browser's.
|
|
1080
|
+
switch (command) {
|
|
1081
|
+
case "clone-rows": return canChangeRows && selectedRows.length > 0 ? cloneSelectedRows : null;
|
|
1082
|
+
case "set-null": return weighSelection().editable ? setNullSelected : null;
|
|
1083
|
+
case "find-column": return onFindColumn ?? null;
|
|
1084
|
+
case "hide-columns": return onHideColumns && selectedColumnIndices(gridSelection, columnOrder.length).length > 0 ? hideSelectedColumns : null;
|
|
1085
|
+
case "filter-selected": return filtering && weighSelection().filterable ? filterSelectedValues : null;
|
|
1086
|
+
case "edit-row-json": {
|
|
1087
|
+
const row = !cellsReadOnly && selectedRows.length === 1 ? selectedRows[0]! : null;
|
|
1088
|
+
return row && (() => setTextDialog({ kind: "row", row, initial: rowDocumentText(rowValuesNow(row), documentColumns) }));
|
|
1089
|
+
}
|
|
1090
|
+
// A right-click selects the cell it lands on, so the menu never has nothing to generate from; a key can.
|
|
1091
|
+
case "generate-sql": return onOpenGeneratedSql && selectedTable && selectedRows.length > 0 ? openGenerateSql : null;
|
|
1092
|
+
}
|
|
1093
|
+
};
|
|
1094
|
+
|
|
1095
|
+
// ── DBGate's cell menu (grid/cell-menu.ts): at the pointer on a desktop, in a sheet on a phone ──
|
|
1096
|
+
const contextRow = contextMenu ? allRows[contextMenu.rowIdx] : null;
|
|
151
1097
|
const contextColName = contextMenu ? columnOrder[contextMenu.colIdx] : null;
|
|
152
|
-
const contextCellViewable = isCellViewable(contextRow ?? null, contextColName ?? null);
|
|
153
1098
|
const contextFk = getContextFk(contextColName ?? null);
|
|
154
1099
|
const contextCellValue = contextRow && contextColName ? contextRow[contextColName] : null;
|
|
1100
|
+
// The row as it reads now, edits included, for the row its foreign key refers to.
|
|
1101
|
+
const contextShownRow = useMemo(() => {
|
|
1102
|
+
if (!contextRow || !pkCol) return contextRow;
|
|
1103
|
+
const isNew = isNewRowId(String(contextRow[pkCol]));
|
|
1104
|
+
return Object.fromEntries(schema.map((c) => {
|
|
1105
|
+
const pending = changeset.cells.get(cellId(contextRow[pkCol], c.name));
|
|
1106
|
+
return [c.name, pending ? pending.newVal : isNew ? undefined : contextRow[c.name]];
|
|
1107
|
+
}));
|
|
1108
|
+
}, [contextRow, pkCol, schema, changeset]);
|
|
1109
|
+
// Read when asked — once the menu opens, or a key on the selection is pressed: a selection of
|
|
1110
|
+
// every cell is a great many cells to weigh.
|
|
1111
|
+
const weighSelection = useCallback((): CellMenuSelection => {
|
|
1112
|
+
// A hidden column's edit counts too: whatever Revert row changes would take back.
|
|
1113
|
+
const changed = !!pkCol && revertRows(changeset, new Set(selectedRows.map((row) => String(row[pkCol])))) !== changeset;
|
|
1114
|
+
return summarizeSelection((visit) => forEachSelectedCell(gridSelection, columnOrder.length, allRows.length, (c, r) => {
|
|
1115
|
+
const row = allRows[r]!;
|
|
1116
|
+
const column = columnOrder[c]!;
|
|
1117
|
+
const value = valueNow(row, column);
|
|
1118
|
+
const kind = filterKinds.get(column);
|
|
1119
|
+
visit({
|
|
1120
|
+
value,
|
|
1121
|
+
editable: canEditCell(row, column),
|
|
1122
|
+
// What no filter can spell: bytes, JSON, and the value a new row has not been given.
|
|
1123
|
+
filterable: !!kind && canChooseValues(kind) && value !== undefined && !isBinaryValue(value),
|
|
1124
|
+
});
|
|
1125
|
+
}), selectedRows.length, changed);
|
|
1126
|
+
}, [pkCol, changeset, selectedRows, gridSelection, columnOrder, allRows, valueNow, filterKinds, canEditCell]);
|
|
1127
|
+
const menuSelection = useMemo(() => (contextMenu ? weighSelection() : null), [contextMenu, weighSelection]);
|
|
1128
|
+
const cellEntries = useMemo(() => {
|
|
1129
|
+
if (!contextMenu || !menuSelection) return [];
|
|
1130
|
+
const referenced = contextShownRow && contextColName ? contextShownRow[contextColName] : null;
|
|
1131
|
+
const openReference = !contextFk ? undefined
|
|
1132
|
+
// A table's: the referenced row, as DBGate's form button opens it.
|
|
1133
|
+
: contextColName && contextShownRow && referenced != null && onOpenReference
|
|
1134
|
+
? { label: `Open ${contextFk.table}.${contextFk.column}`, onSelect: () => onOpenReference(contextColName, contextShownRow) }
|
|
1135
|
+
: contextCellValue != null && place
|
|
1136
|
+
? { label: `Open ${contextFk.table}.${contextFk.column}`, onSelect: () => openFkTable(contextFk, contextCellValue) }
|
|
1137
|
+
: undefined;
|
|
1138
|
+
const pressedRow = contextMenu.rowIdx;
|
|
1139
|
+
const filters = filtering?.filters;
|
|
1140
|
+
const single = menuSelection.single;
|
|
1141
|
+
return cellMenuEntries(menuSelection, {
|
|
1142
|
+
copyFormat: gridCopy.format, mobile, editable: !cellsReadOnly, canChangeRows, pending: changedRows, hasChanges, canUndo, canRedo,
|
|
1143
|
+
canFetchAll: !!onFetchAll && canReadMore && fetchingAll === null,
|
|
1144
|
+
filters: filters ? Object.keys(filters.columns).length + (filters.multi?.text.trim() ? 1 : 0) : 0,
|
|
1145
|
+
}, {
|
|
1146
|
+
openReference,
|
|
1147
|
+
refresh: onRefresh,
|
|
1148
|
+
fetchAll: () => void onFetchAll?.(),
|
|
1149
|
+
copy: gridCopy.copyAs,
|
|
1150
|
+
setCopyFormat: gridCopy.setFormat,
|
|
1151
|
+
// A phone's form is the row's sheet.
|
|
1152
|
+
switchToForm: mobile ? () => setFormRow(pressedRow) : onViewChange && (() => onViewChange("form")),
|
|
1153
|
+
togglePanel: sidePanel,
|
|
1154
|
+
save: () => void commit(),
|
|
1155
|
+
revertRows: revertSelectedRows,
|
|
1156
|
+
revertAll,
|
|
1157
|
+
deleteRows: deleteSelectedRows,
|
|
1158
|
+
insertRow: appendRow,
|
|
1159
|
+
cloneRows: cloneSelectedRows,
|
|
1160
|
+
setNull: setNullSelected,
|
|
1161
|
+
findColumn: onFindColumn,
|
|
1162
|
+
// Whole rows lie in every column: hiding them all would leave nothing to see.
|
|
1163
|
+
hideColumns: onHideColumns && selectedColumnIndices(gridSelection, columnOrder.length).length > 0 ? hideSelectedColumns : undefined,
|
|
1164
|
+
filterSelected: filtering && filterSelectedValues,
|
|
1165
|
+
clearFilter: filtering && (() => filtering.onChange(() => NO_FILTERS)),
|
|
1166
|
+
undo,
|
|
1167
|
+
redo,
|
|
1168
|
+
editCell: contextRow && contextColName
|
|
1169
|
+
? () => setTextDialog({ kind: "cell", row: contextRow, column: contextColName, initial: cellText(valueNow(contextRow, contextColName)) })
|
|
1170
|
+
: undefined,
|
|
1171
|
+
addJson: () => setTextDialog({ kind: "add" }),
|
|
1172
|
+
editRowJson: selectedRows[0]
|
|
1173
|
+
? () => setTextDialog({ kind: "row", row: selectedRows[0]!, initial: rowDocumentText(rowValuesNow(selectedRows[0]!), documentColumns) })
|
|
1174
|
+
: undefined,
|
|
1175
|
+
viewJson: () => {
|
|
1176
|
+
setCellDataAsk("jsonExpanded");
|
|
1177
|
+
showCellData();
|
|
1178
|
+
},
|
|
1179
|
+
saveCellToFile: single && contextColName && contextRow ? () => saveCellToFile(single.value, contextColName, contextRow) : undefined,
|
|
1180
|
+
showCellData,
|
|
1181
|
+
openQuery: onOpenQuery,
|
|
1182
|
+
exports: exporter && !exporter.unavailable
|
|
1183
|
+
? [
|
|
1184
|
+
...(exporter.advanced ? [{ kind: "item", label: "Export advanced...", onSelect: exporter.advanced, hint: "Mod+E" } as const] : []),
|
|
1185
|
+
...(exporter.advanced && exporter.run ? [{ kind: "separator" } as const] : []),
|
|
1186
|
+
...(exporter.run ? GRID_EXPORT_FORMATS.map((f): CellMenuEntry => ({ kind: "item", label: f.label, onSelect: () => void exporter.run?.(f.id), disabled: exporter.busy })) : []),
|
|
1187
|
+
]
|
|
1188
|
+
: undefined,
|
|
1189
|
+
generateSql: onOpenGeneratedSql && selectedTable ? openGenerateSql : undefined,
|
|
1190
|
+
});
|
|
1191
|
+
}, [
|
|
1192
|
+
contextMenu, menuSelection, contextShownRow, contextColName, contextFk, contextCellValue, onOpenReference, place, openFkTable,
|
|
1193
|
+
gridCopy.format, gridCopy.copyAs, gridCopy.setFormat, mobile, cellsReadOnly, canChangeRows, changedRows, hasChanges, canUndo, canRedo,
|
|
1194
|
+
onFetchAll, canReadMore, fetchingAll, onRefresh, onViewChange, sidePanel, commit, revertSelectedRows, revertAll, deleteSelectedRows,
|
|
1195
|
+
appendRow, cloneSelectedRows, setNullSelected, undo, redo, showCellData, filtering, onFindColumn, onHideColumns, gridSelection,
|
|
1196
|
+
columnOrder.length, hideSelectedColumns, filterSelectedValues, contextRow, valueNow, selectedRows, rowValuesNow, documentColumns,
|
|
1197
|
+
saveCellToFile, onOpenQuery, exporter, onOpenGeneratedSql, selectedTable, openGenerateSql,
|
|
1198
|
+
]);
|
|
1199
|
+
// A phone's sheet says what it is for: the table and column, then the row and how many cells.
|
|
1200
|
+
const cellMenuTitle = contextColName ? (selectedTable ? `${selectedTable} · ${contextColName}` : contextColName) : "";
|
|
1201
|
+
const cellMenuSubtitle = useMemo(() => {
|
|
1202
|
+
if (!contextRow) return undefined;
|
|
1203
|
+
const isNew = !!pkCol && isNewRowId(String(contextRow[pkCol]));
|
|
1204
|
+
const name = isNew ? "New row"
|
|
1205
|
+
: keyCols.length ? keyCols.map((c) => `${c} = ${formatCellValue(contextRow[c])}`).join(", ")
|
|
1206
|
+
: `Row ${contextMenu!.rowIdx + 1}`;
|
|
1207
|
+
return stats && stats.count > 1 ? `${name} · ${stats.count.toLocaleString()} cells` : name;
|
|
1208
|
+
}, [contextRow, contextMenu, pkCol, keyCols, stats]);
|
|
1209
|
+
|
|
1210
|
+
// ── The form view's menu: DBGate's form commands, in its order ──
|
|
1211
|
+
const [formMenu, setFormMenu] = useState<{ position: { x: number; y: number }; target: FormMenuTarget } | null>(null);
|
|
1212
|
+
const openFormMenu = useCallback((position: { x: number; y: number }, target: FormMenuTarget) => setFormMenu({ position, target }), []);
|
|
1213
|
+
useEffect(() => { if (!formView) setFormMenu(null); }, [formView]);
|
|
1214
|
+
const formMenuItems = useMemo<GridMenuEntry[]>(() => {
|
|
1215
|
+
if (!formMenu) return [];
|
|
1216
|
+
const { target } = formMenu;
|
|
1217
|
+
const kind = filterKinds.get(target.column);
|
|
1218
|
+
// What no filter can spell: bytes, JSON, and the value a new row has not been given.
|
|
1219
|
+
const filterable = !target.referenced && target.value !== undefined && !isBinaryValue(target.value) && !!kind && canChooseValues(kind);
|
|
1220
|
+
const touched = formRowId !== null && revertRows(changeset, new Set([formRowId])) !== changeset;
|
|
1221
|
+
const items: GridMenuEntry[] = [];
|
|
1222
|
+
if (onRefresh) items.push({ label: "Refresh", icon: RefreshCw, hint: "F5", onSelect: onRefresh });
|
|
1223
|
+
if (onViewChange) items.push({ label: "Switch to table", icon: TableSimple, hint: "F4", onSelect: () => onViewChange("table") });
|
|
1224
|
+
// The form has no « in a corner to do it with.
|
|
1225
|
+
if (sidePanel) items.push({ label: "Toggle left panel", icon: sidePanel.open ? ChevronsLeft : ChevronsRight, hint: formatCombo("Mod+L"), onSelect: sidePanel.onToggle });
|
|
1226
|
+
items.push({
|
|
1227
|
+
label: "Copy to clipboard", icon: Copy, hint: formatCombo("Mod+C"),
|
|
1228
|
+
onSelect: () => {
|
|
1229
|
+
void copyToClipboard(target.onName ? target.column : formCopyText(target.value)).then((ok) => {
|
|
1230
|
+
if (!ok) toast.error("Could not copy to the clipboard");
|
|
1231
|
+
});
|
|
1232
|
+
},
|
|
1233
|
+
});
|
|
1234
|
+
if (onFilterValue || onAddToFilter) items.push("separator");
|
|
1235
|
+
if (onFilterValue) {
|
|
1236
|
+
items.push({ label: "Filter this value", icon: Filter, hint: formatCombo("Mod+Shift+F"), disabled: !filterable, onSelect: () => onFilterValue(target.column, target.value) });
|
|
1237
|
+
}
|
|
1238
|
+
if (onAddToFilter) items.push({ label: "Add to filter", icon: ListFilter, disabled: target.referenced, onSelect: () => onAddToFilter(target.column) });
|
|
1239
|
+
if (!cellsReadOnly) {
|
|
1240
|
+
items.push(
|
|
1241
|
+
"separator",
|
|
1242
|
+
{ label: "Save", icon: Save, hint: formatCombo("Mod+S"), disabled: changedRows === 0, onSelect: () => void commit() },
|
|
1243
|
+
{ label: "Revert row changes", icon: RotateCcw, hint: formatCombo("Mod+U"), disabled: !touched, onSelect: revertFormRow },
|
|
1244
|
+
);
|
|
1245
|
+
// Only on a value that can change, as DBGate's: elsewhere the item is not there at all.
|
|
1246
|
+
if (formRecord && !target.onName && !target.referenced && canEditCell(formRecord, target.column)) {
|
|
1247
|
+
items.push({ label: "Set NULL", icon: XCircle, hint: formatCombo("Mod+0"), onSelect: () => editCells([{ row: formRecord, column: target.column, value: null }]) });
|
|
1248
|
+
}
|
|
1249
|
+
if (canUndo || canRedo) items.push("separator");
|
|
1250
|
+
if (canUndo) items.push({ label: "Undo", icon: Undo2, hint: formatCombo("Mod+Z"), onSelect: undo });
|
|
1251
|
+
if (canRedo) items.push({ label: "Redo", icon: Redo2, hint: formatCombo("Mod+Y"), onSelect: redo });
|
|
1252
|
+
}
|
|
1253
|
+
items.push(
|
|
1254
|
+
"separator",
|
|
1255
|
+
{ label: "First", icon: ArrowPrevious, hint: formatCombo("Mod+Home"), disabled: formAtFirst, onSelect: () => formNavigate("first") },
|
|
1256
|
+
{ label: "Previous", icon: ChevronLeft, hint: formatCombo("Mod+\u2191"), disabled: formAtFirst, onSelect: () => formNavigate("previous") },
|
|
1257
|
+
{ label: "Next", icon: ChevronRight, hint: formatCombo("Mod+\u2193"), disabled: formAtLast, onSelect: () => formNavigate("next") },
|
|
1258
|
+
{ label: "Last", icon: ArrowNext, hint: formatCombo("Mod+End"), disabled: formAtLast, onSelect: () => formNavigate("last") },
|
|
1259
|
+
);
|
|
1260
|
+
return items;
|
|
1261
|
+
}, [
|
|
1262
|
+
formMenu, filterKinds, formRowId, changeset, onRefresh, onViewChange, sidePanel, onFilterValue, onAddToFilter, cellsReadOnly, changedRows, commit,
|
|
1263
|
+
revertFormRow, formRecord, canEditCell, editCells, canUndo, canRedo, undo, redo, formAtFirst, formAtLast, formNavigate,
|
|
1264
|
+
]);
|
|
155
1265
|
|
|
156
1266
|
if (!columnNames.length) {
|
|
157
1267
|
return <div className="flex items-center justify-center h-full text-xs text-muted-foreground">
|
|
@@ -159,56 +1269,190 @@ export function GlideDataGrid(props: GlideGridProps) {
|
|
|
159
1269
|
</div>;
|
|
160
1270
|
}
|
|
161
1271
|
|
|
1272
|
+
const footInset = scrollbar.height + 8;
|
|
1273
|
+
|
|
162
1274
|
return (
|
|
163
|
-
<div
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
1275
|
+
<div
|
|
1276
|
+
ref={containerRef} className="flex flex-col h-full overflow-hidden relative" tabIndex={0} onKeyDown={handleKeyDown}
|
|
1277
|
+
onCopy={gridCopy.onCopy} onCut={gridCopy.onCut}
|
|
1278
|
+
>
|
|
1279
|
+
<div className="relative flex min-h-0 flex-1">
|
|
1280
|
+
<div className="relative min-h-0 min-w-0 flex-1" {...pressHandlers}>
|
|
1281
|
+
{formView ? (
|
|
1282
|
+
<div className="absolute inset-0 flex flex-col">
|
|
1283
|
+
<FormView
|
|
1284
|
+
table={selectedTable} row={allRows[formIndex]} index={formIndex} rowsShown={allRows.length} loaded={keyedRows.length}
|
|
1285
|
+
rowCount={rowCount} schema={schema} pkCol={pkCol} changeset={changeset} canEdit={canEditCell} onEdit={editCells}
|
|
1286
|
+
initialField={columnOrder[gridSelection.current?.cell[0] ?? 0] ?? null} onFieldChange={setFormField}
|
|
1287
|
+
nameFilter={formNameFilter} onNameFilterChange={onFormNameFilterChange}
|
|
1288
|
+
onNavigate={formNavigate} onFilterValue={onFilterValue} onSave={askSave} onMenu={openFormMenu}
|
|
1289
|
+
loadReference={loadReference} onOpenReference={onOpenReference} autoFocus={formJustSwitched}
|
|
1290
|
+
/>
|
|
1291
|
+
{allRows.length === 0 && !loading && (
|
|
1292
|
+
<GridEmpty message="No rows loaded" top={0}>
|
|
1293
|
+
{onResetFilter && <EmptyAction onClick={onResetFilter}>Reset filter</EmptyAction>}
|
|
1294
|
+
{onOpenQuery && <EmptyAction onClick={onOpenQuery}>Open Query</EmptyAction>}
|
|
1295
|
+
</GridEmpty>
|
|
1296
|
+
)}
|
|
1297
|
+
</div>
|
|
1298
|
+
) : columns.length === 0 ? (
|
|
1299
|
+
// DBGate's empty grid when the Columns panel hides every column.
|
|
1300
|
+
<GridEmpty message="Every column is hidden" top={0}>
|
|
1301
|
+
{onShowAllColumns && <EmptyAction onClick={onShowAllColumns}>Show all columns</EmptyAction>}
|
|
1302
|
+
</GridEmpty>
|
|
1303
|
+
) : (
|
|
1304
|
+
<>
|
|
1305
|
+
<DataEditor ref={gridRef} columns={columns} rows={allRows.length}
|
|
1306
|
+
headerHeight={headerHeight} drawHeader={drawHeader} headerIcons={TITLE_SPRITES}
|
|
1307
|
+
rowMarkers={{ kind: "clickable-number", width: markerWidth }}
|
|
1308
|
+
rangeSelect="multi-rect"
|
|
1309
|
+
onVisibleRegionChanged={onVisibleRegionChanged}
|
|
1310
|
+
onHeaderClicked={columnSheet ? onHeaderClicked : undefined}
|
|
1311
|
+
getCellContent={drawnCellContent} getCellsForSelection={true}
|
|
1312
|
+
onCellsEdited={onCellsEdited} onPaste={cellsReadOnly ? false : handlePaste}
|
|
1313
|
+
keybindings={KEYBINDINGS} provideEditor={provideEditor}
|
|
1314
|
+
getRowThemeOverride={getRowThemeOverride} drawCell={drawCell}
|
|
1315
|
+
theme={theme}
|
|
1316
|
+
gridSelection={gridSelection} onGridSelectionChange={onGridSelectionChange}
|
|
1317
|
+
onColumnResize={onColumnResize} onColumnResizeEnd={onColumnResizeEnd}
|
|
1318
|
+
onCellContextMenu={handleCellContextMenu as never}
|
|
1319
|
+
onCellClicked={onCellClicked} onMouseMove={onMouseMove}
|
|
1320
|
+
smoothScrollX smoothScrollY width="100%" height="100%" />
|
|
1321
|
+
<GridHeaderOverlay
|
|
1322
|
+
ref={overlayRef} columns={overlayColumns} freezeColumns={0} markerWidth={markerWidth}
|
|
1323
|
+
height={headerHeight} rightInset={scrollbar.width} renderSlot={renderHeaderSlot} onRevealColumn={revealColumn}
|
|
1324
|
+
/>
|
|
1325
|
+
{sidePanel && (
|
|
1326
|
+
// DBGate's « at the grid's corner: the panel beside the grid, shown or hidden.
|
|
1327
|
+
<button
|
|
1328
|
+
type="button" onClick={sidePanel.onToggle} aria-pressed={sidePanel.open}
|
|
1329
|
+
aria-label={`${sidePanel.open ? "Hide" : "Show"} the left panel (Ctrl+L)`} title={`${sidePanel.open ? "Hide" : "Show"} the left panel (Ctrl+L)`}
|
|
1330
|
+
className="absolute left-0 top-0 z-20 grid place-items-center text-text-3 can-hover:hover:text-text"
|
|
1331
|
+
style={{ width: markerWidth, height: titleBand }}
|
|
1332
|
+
>
|
|
1333
|
+
<span className="grid size-5 place-items-center rounded can-hover:hover:bg-surface-hover">
|
|
1334
|
+
{sidePanel.open ? <ChevronsLeft className="size-3.5" /> : <ChevronsRight className="size-3.5" />}
|
|
1335
|
+
</span>
|
|
1336
|
+
</button>
|
|
1337
|
+
)}
|
|
1338
|
+
{allRows.length === 0 && !loading && (
|
|
1339
|
+
// DBGate's empty grid when nothing matches: what can be done about it.
|
|
1340
|
+
<GridEmpty message="No rows loaded" top={headerHeight}>
|
|
1341
|
+
{onResetFilter && <EmptyAction onClick={onResetFilter}>Reset filter</EmptyAction>}
|
|
1342
|
+
{canChangeRows && <EmptyAction onClick={appendRow}>Add row</EmptyAction>}
|
|
1343
|
+
{onOpenQuery && <EmptyAction onClick={onOpenQuery}>Open Query</EmptyAction>}
|
|
1344
|
+
</GridEmpty>
|
|
1345
|
+
)}
|
|
1346
|
+
</>
|
|
1347
|
+
)}
|
|
1348
|
+
{/* A phone has no room for it beside the thumb bar, as DBGate's mobile layout has none. */}
|
|
1349
|
+
{stats && !mobile && !formView && <GridSelectionStats stats={stats} right={scrollbar.width + 8} bottom={footInset} />}
|
|
1350
|
+
{rowsLabel && !formView && <GridCornerLabel text={rowsLabel} left={markerWidth + 8} bottom={footInset} />}
|
|
1351
|
+
{fetchingAll !== null
|
|
1352
|
+
? <GridLoadingBox text={`Fetching all rows... ${fetchingAll.toLocaleString()} loaded`} cover />
|
|
1353
|
+
: loading
|
|
1354
|
+
? <GridLoadingBox text="Loading data" cover />
|
|
1355
|
+
: loadingMore && <GridLoadingBox text="Loading data" cover={false} bottom={footInset + 28} />}
|
|
1356
|
+
</div>
|
|
1357
|
+
{cellDataShown && (
|
|
1358
|
+
<CellDataPanel
|
|
1359
|
+
source={cellDataSource} width={cellDataWidth} onWidthChange={changeCellDataWidth} floating={floatCellData} onClose={closeCellData}
|
|
1360
|
+
ask={cellDataAsk} onAsked={clearCellDataAsk}
|
|
1361
|
+
/>
|
|
1362
|
+
)}
|
|
186
1363
|
</div>
|
|
187
1364
|
|
|
188
|
-
{
|
|
189
|
-
{
|
|
190
|
-
|
|
1365
|
+
{hasChanges && !onEditStateChange && <GlideSaveBar pendingCount={changedRows} onSave={() => void commit()} onDiscard={revertAll} />}
|
|
1366
|
+
{mobile && cellDataSheet && (
|
|
1367
|
+
<CellDataSheet source={cellDataSource} onClose={() => setCellDataSheet(false)} ask={cellDataAsk} onAsked={clearCellDataAsk} />
|
|
1368
|
+
)}
|
|
191
1369
|
|
|
192
1370
|
{headerMenu && (
|
|
193
|
-
<GlideHeaderMenu
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
onClearSort={onClearSort}
|
|
199
|
-
onTogglePin={() => togglePinColumn(headerMenu.colName)} onClose={() => setHeaderMenu(null)} />
|
|
1371
|
+
<GlideHeaderMenu
|
|
1372
|
+
column={headerMenu.colName} bounds={headerMenu.bounds} sort={sort} fkTable={fkTables.get(headerMenu.colName)}
|
|
1373
|
+
onSortChange={onSortChange} onCopyName={() => copyColumnName(headerMenu.colName)} onOpenTable={onOpenTable}
|
|
1374
|
+
onClose={() => setHeaderMenu(null)}
|
|
1375
|
+
/>
|
|
200
1376
|
)}
|
|
201
1377
|
|
|
202
1378
|
{contextMenu && contextRow && (
|
|
203
|
-
<
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
1379
|
+
<CellContextMenu
|
|
1380
|
+
entries={cellEntries} position={contextMenu.position} mobile={mobile} title={cellMenuTitle} subtitle={cellMenuSubtitle}
|
|
1381
|
+
onClose={() => setContextMenu(null)} returnFocus={focusGrid}
|
|
1382
|
+
/>
|
|
1383
|
+
)}
|
|
1384
|
+
{formMenu && <GlideContextMenu position={formMenu.position} items={formMenuItems} onClose={() => setFormMenu(null)} />}
|
|
1385
|
+
|
|
1386
|
+
{cellLookup && (
|
|
1387
|
+
<DictionaryLookupDialog
|
|
1388
|
+
source={cellLookup.lookup.source} kind={cellLookup.lookup.kind}
|
|
1389
|
+
onPick={(value) => editCells([{ row: cellLookup.row, column: cellLookup.column, value }])}
|
|
1390
|
+
onClose={() => setCellLookup(null)}
|
|
1391
|
+
returnFocus={() => gridRef.current?.focus()}
|
|
1392
|
+
/>
|
|
1393
|
+
)}
|
|
1394
|
+
|
|
1395
|
+
{textDialog && (
|
|
1396
|
+
<TextValueDialog
|
|
1397
|
+
{...(textDialog.kind === "cell"
|
|
1398
|
+
? {
|
|
1399
|
+
title: "Edit cell value", label: `Value of ${textDialog.column}`, jsonTools: true,
|
|
1400
|
+
description: `The value of ${textDialog.column}. OK puts it in the change set; Save writes it.`,
|
|
1401
|
+
}
|
|
1402
|
+
: textDialog.kind === "row"
|
|
1403
|
+
? {
|
|
1404
|
+
title: "Edit JSON value", label: "Row as JSON",
|
|
1405
|
+
description: "The row as a JSON object. OK puts what changed in the change set; Save writes it.",
|
|
1406
|
+
info: "Keys are column names. A column left out keeps its value.",
|
|
1407
|
+
}
|
|
1408
|
+
: {
|
|
1409
|
+
title: "Edit JSON value", label: "New rows as JSON",
|
|
1410
|
+
description: "New rows as JSON. OK adds them under the rows loaded; Save writes them.",
|
|
1411
|
+
info: "A JSON object adds one row, a list of objects one row each. Keys are column names.",
|
|
1412
|
+
})}
|
|
1413
|
+
initial={textDialog.kind === "add" ? "" : textDialog.initial}
|
|
1414
|
+
onOk={(text) => takeText(textDialog, text)}
|
|
1415
|
+
onClose={() => setTextDialog(null)}
|
|
1416
|
+
returnFocus={focusGrid}
|
|
1417
|
+
/>
|
|
1418
|
+
)}
|
|
1419
|
+
|
|
1420
|
+
{sqlDialog && onOpenGeneratedSql && (
|
|
1421
|
+
<GenerateSqlDialog
|
|
1422
|
+
rows={sqlDialog.rows} allColumns={sqlDialog.allColumns} selectedColumns={sqlDialog.columns}
|
|
1423
|
+
keyColumns={sqlDialog.target.keyColumns} target={sqlDialog.target}
|
|
1424
|
+
onOk={onOpenGeneratedSql} onClose={() => setSqlDialog(null)} returnFocus={focusGrid}
|
|
1425
|
+
/>
|
|
1426
|
+
)}
|
|
1427
|
+
|
|
1428
|
+
{mobile && formRow !== null && (
|
|
1429
|
+
<RowFormSheet
|
|
1430
|
+
table={selectedTable} rows={allRows} loaded={keyedRows.length} index={formRow} onIndexChange={showFormRow}
|
|
1431
|
+
columns={columnOrder} schema={schemaMap} pkCol={pkCol} keyCols={keyCols} changeset={changeset}
|
|
1432
|
+
canEdit={canEditCell} onEdit={editCells} pending={changedRows}
|
|
1433
|
+
// The sheet goes first: Save changes is a sheet of its own.
|
|
1434
|
+
onSave={cellsReadOnly ? undefined : () => { setFormRow(null); void commit(); }}
|
|
1435
|
+
onClose={() => setFormRow(null)}
|
|
1436
|
+
/>
|
|
211
1437
|
)}
|
|
212
1438
|
</div>
|
|
213
1439
|
);
|
|
1440
|
+
});
|
|
1441
|
+
|
|
1442
|
+
/** DBGate's message over an empty grid: at its top left, with what can be done about it under it. */
|
|
1443
|
+
function GridEmpty({ message, top, children }: { message: string; top: number; children?: React.ReactNode }) {
|
|
1444
|
+
return (
|
|
1445
|
+
<div className="absolute left-0 z-10 grid max-w-[520px] justify-items-start gap-3 px-4 py-[18px] text-[13px] text-text-2" style={{ top }}>
|
|
1446
|
+
<p className="flex items-center gap-2.5"><Info className="size-5 shrink-0 text-primary" aria-hidden />{message}</p>
|
|
1447
|
+
<div className="flex flex-wrap gap-2">{children}</div>
|
|
1448
|
+
</div>
|
|
1449
|
+
);
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
function EmptyAction({ onClick, children }: { onClick: () => void; children: string }) {
|
|
1453
|
+
return (
|
|
1454
|
+
<Button type="button" variant="outline" size="sm" onClick={onClick} className="max-md:h-11 max-md:px-4">
|
|
1455
|
+
{children}
|
|
1456
|
+
</Button>
|
|
1457
|
+
);
|
|
214
1458
|
}
|