collabmd 0.1.46 → 0.1.47
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/README.md +1 -0
- package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-CYM5nxUi.js → CodeMirrorEditor-UCMRAMCV-BPH4FJkv.js} +1 -1
- package/dist/client/assets/{abnfDiagram-N423BO3Z-CUMTFJhI.js → abnfDiagram-VCTEODGH-BNDLzJ7L.js} +1 -1
- package/dist/client/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
- package/dist/client/assets/{architectureDiagram-T3A2C74G-w25m71oV.js → architectureDiagram-5GKGNRK7-I39sYjHI.js} +1 -1
- package/dist/client/assets/base-BYODPHdS.js +1 -0
- package/dist/client/assets/blockDiagram-NRAW4CY4-C6DtJy5Y.js +129 -0
- package/dist/client/assets/browser-BKLM0ThC-IxjwuOIz-BBqQnUEb.js +1 -0
- package/dist/client/assets/c4Diagram-UCG6FXSJ-CtWtxS9_.js +38 -0
- package/dist/client/assets/channel-CaoKA_We.js +1 -0
- package/dist/client/assets/{chunk-U6XO7XAA-BFxjP5U3.js → chunk-2ZTRR5NV-C2qZJila.js} +1 -1
- package/dist/client/assets/{chunk-YOTPTUD7-D0vRKqYp.js → chunk-3Z5EZCMW-DMniOlPd.js} +1 -1
- package/dist/client/assets/{chunk-BIQX33UG-DZEsGuSn.js → chunk-5V3GS4D5-i-ZDOEnP.js} +1 -1
- package/dist/client/assets/{chunk-MOZMSUNE-XVucA-n6.js → chunk-6AZGARVD-BB6FqMl-.js} +1 -1
- package/dist/client/assets/{chunk-5JV3BV7I-Cy5pj3QY.js → chunk-6EIED4P4-DdUJkP0f.js} +1 -1
- package/dist/client/assets/{chunk-R7FJI6CG-Cnn3gE-Y.js → chunk-6K3QC6MW-CqVsVn-y.js} +1 -1
- package/dist/client/assets/{chunk-OSBZ3O6U-CrKZOUOr.js → chunk-6TQVIW2G-DKlLbNIP.js} +1 -1
- package/dist/client/assets/{chunk-JG7HCLWE-BYfiSaVt.js → chunk-747NJXEK-BFkZPlab.js} +1 -1
- package/dist/client/assets/{chunk-NSK5VX7P-TLH37VXI.js → chunk-75Z2AOVW-CdFSaPjz.js} +1 -1
- package/dist/client/assets/chunk-CKBBP62Z-DG26UiBv.js +2 -0
- package/dist/client/assets/{chunk-3NCLNEKW-Y2Jf_LI-.js → chunk-CLGD4ZFX-DQLgbQrv.js} +1 -1
- package/dist/client/assets/chunk-DSNCTWBM-8xkug7fQ.js +2 -0
- package/dist/client/assets/chunk-DU6HZSFF-COXDzJK1.js +127 -0
- package/dist/client/assets/{chunk-2GRJ4B5K-DhnlUv3F.js → chunk-F27PBJKO-CNHIFhjo.js} +1 -1
- package/dist/client/assets/{chunk-YGJVY4SA-CjSe7Bx7.js → chunk-FLYJHZSQ-Be7lKF17.js} +1 -1
- package/dist/client/assets/{chunk-KEIR6QF5-BICK3FdT.js → chunk-FOHPRMQF-DHwB1DNv.js} +2 -2
- package/dist/client/assets/{chunk-5RXB4S5H-BWrwFqMI.js → chunk-G27WJ6UU-D9-eg537.js} +2 -2
- package/dist/client/assets/chunk-GMAD6QVW-CbcBqPM5.js +72 -0
- package/dist/client/assets/{chunk-QBLGF6JB-CxAyS2mW.js → chunk-I5DQTOEV-Hm2LfiYI.js} +1 -1
- package/dist/client/assets/{chunk-5FCAYU7R-Dh5nylU8.js → chunk-ICYGCRZG-749o-pGJ.js} +1 -1
- package/dist/client/assets/{chunk-CQNSW5MT-B8S09OIh.js → chunk-IH6LHLGP-CC6I9F3i.js} +1 -1
- package/dist/client/assets/chunk-JQ64N6SF-DSFNH4bh.js +1 -0
- package/dist/client/assets/{chunk-CYSBUYHQ-C1Rf4art.js → chunk-KI3K4JFJ-Rma-0k_M.js} +1 -1
- package/dist/client/assets/{chunk-GF5L2VYU-DkJpO7ff.js → chunk-LCL6LL3I-DmDkVukh.js} +1 -1
- package/dist/client/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
- package/dist/client/assets/chunk-OBVCFTLP-BJR7u1jh.js +1 -0
- package/dist/client/assets/{chunk-5TONJI2A-DQOY3q1H.js → chunk-OUJLGHUK-D0j2JRSg.js} +1 -1
- package/dist/client/assets/chunk-P2QGCYS3-BRpqY32H.js +1 -0
- package/dist/client/assets/{chunk-KBJHAD2P-CB_3zWUf.js → chunk-POPQ4Y6H-Cb4SlVZF.js} +1 -1
- package/dist/client/assets/{chunk-4I5QYGJK-CCB2YcIH.js → chunk-PWAF6VOD-Cz8IwBB5.js} +1 -1
- package/dist/client/assets/chunk-R7TYR2AO-CTd0Yj98.js +10 -0
- package/dist/client/assets/chunk-RHFEMEQ7-CWY8cf4H.js +168 -0
- package/dist/client/assets/chunk-RM4UPSZO-CWRwxNWJ.js +41 -0
- package/dist/client/assets/{chunk-6Q2QTUOP-CPlWzBtc.js → chunk-SVP7TREG-CyHOmcac.js} +1 -1
- package/dist/client/assets/chunk-TEH6E4GO-DVayPj-q.js +62 -0
- package/dist/client/assets/{chunk-EMLP6XTP-RLD4nXpI.js → chunk-UY3FDG6J-CnmaAkG5.js} +1 -1
- package/dist/client/assets/{chunk-5HE753X5-Bw-yg4kO.js → chunk-XHIXRSVI-BFQ6B8BE.js} +1 -1
- package/dist/client/assets/classDiagram-DTDB5LWJ-7fEmn0zV.js +1 -0
- package/dist/client/assets/classDiagram-v2-JRS7N3AN-7fEmn0zV.js +1 -0
- package/dist/client/assets/{comment-ui-shared-BC4pt4w8.js → comment-ui-shared-DWkk9Vh3.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
- package/dist/client/assets/{cynefinDiagram-MW4NZA55-CJxXfJek.js → cynefinDiagram-5FMLGOSQ-CdTPi2yO.js} +1 -1
- package/dist/client/assets/dagre-3AP2YEHR-5gtJtd0O.js +4 -0
- package/dist/client/assets/dagre-PrKaheQc.js +1 -0
- package/dist/client/assets/{diagram-7IWD3JNH-B2d2Bm15.js → diagram-S7CK7UJ4-BudWz9WU.js} +4 -4
- package/dist/client/assets/{diagram-UB23O5K3-DJcKCwv9.js → diagram-UQ7AKVKN-3v4rbH-s.js} +1 -1
- package/dist/client/assets/{diagram-B4RE2ZJO-NP4UAwjR.js → diagram-VSXAHHWV-CQRVEZR7.js} +1 -1
- package/dist/client/assets/{diagram-Q27KOJAE-DylDuwor.js → diagram-VX7I27RA-C_-rj0sw.js} +1 -1
- package/dist/client/assets/{diagram-LBJQPF4R-D1FJQV8t.js → diagram-Z3DM3KII-B4yxavgj.js} +1 -1
- package/dist/client/assets/direct-engine-DdrQKpgq-CtKfQzCt.js +5 -0
- package/dist/client/assets/dist-73RPdcyU.js +1 -0
- package/dist/client/assets/{dist-Bm6pf9Bl.js → dist-BJ1bJs33.js} +1 -1
- package/dist/client/assets/{dist-BalScOwZ.js → dist-BK9QvQrc.js} +1 -1
- package/dist/client/assets/{dist-DLMiIsNC.js → dist-BPHLJ09L.js} +1 -1
- package/dist/client/assets/{dist-Bf8f4HmM.js → dist-B_yQaEv_.js} +1 -1
- package/dist/client/assets/{dist-CC5IrQMG.js → dist-BeajGMhO.js} +1 -1
- package/dist/client/assets/{dist-PDZ3bSqm.js → dist-Bw3VIE_v.js} +1 -1
- package/dist/client/assets/{dist-xElaxbia.js → dist-ByrG2qBA.js} +1 -1
- package/dist/client/assets/{dist-ule2n6ak.js → dist-C5NgpdG5.js} +1 -1
- package/dist/client/assets/dist-CH-sQu3r.js +1 -0
- package/dist/client/assets/dist-CKS_-are.js +1 -0
- package/dist/client/assets/{dist-D-Z6FLem.js → dist-CdmKGRGr.js} +1 -1
- package/dist/client/assets/{dist-dtAdgL39.js → dist-CietwTVS.js} +1 -1
- package/dist/client/assets/{dist-jv4WdPnK.js → dist-D37Hyu3h.js} +1 -1
- package/dist/client/assets/dist-D3fehAZ2.js +2 -0
- package/dist/client/assets/{dist-BEwK4csK.js → dist-D5wCC32z.js} +1 -1
- package/dist/client/assets/{dist-shrl6K_0.js → dist-DDUn5zTz.js} +1 -1
- package/dist/client/assets/{dist-CZgOmxK6.js → dist-DGEbEfw4.js} +1 -1
- package/dist/client/assets/{dist-B5HTH2BO.js → dist-DVy5woUy.js} +1 -1
- package/dist/client/assets/{dist-DZKu9Cs8.js → dist-DZAAWTG-.js} +1 -1
- package/dist/client/assets/{dist-TjMh8n1u.js → dist-Dir5dDKZ.js} +1 -1
- package/dist/client/assets/dist-Dl_tpDSr.js +1 -0
- package/dist/client/assets/{dist-FWJsgGYI.js → dist-DuH3ZrHo.js} +1 -1
- package/dist/client/assets/{dist-BjHJDtyU.js → dist-DutPuFmC.js} +1 -1
- package/dist/client/assets/{dist-Cqhv5LAk.js → dist-LQ4kDCKz.js} +1 -1
- package/dist/client/assets/{dist-CCP_AKPG.js → dist-RKBTaQMb.js} +1 -1
- package/dist/client/assets/{dist-BoVBdSjk.js → dist-Tw-Fxpeb.js} +1 -1
- package/dist/client/assets/dist-eBx8q6Sy.js +1 -0
- package/dist/client/assets/{dist-rGBmqxC7.js → dist-mj2Ht75J.js} +1 -1
- package/dist/client/assets/{dist-BDt3rz7l.js → dist-netZOQtD.js} +1 -1
- package/dist/client/assets/{drawioEditor-BjiKJqlc.js → drawioEditor-DUVZjSSr.js} +2 -2
- package/dist/client/assets/{ebnfDiagram-BXEA7PRR-nw0wmA6y.js → ebnfDiagram-PWID7BFC-OXa8VEp1.js} +1 -1
- package/dist/client/assets/editor-session-DfZuRgB_.js +54 -0
- package/dist/client/assets/embedded-editor-base-DvMynhKu.css +1 -0
- package/dist/client/assets/embedpdf-BmE13ZZ0.js +1 -0
- package/dist/client/assets/embedpdf-DA4bA119-BPqZxwjc.js +2363 -0
- package/dist/client/assets/{en-7NFCYGKX-BrgYZAEe.js → en-SJ2YIMFF-CJBL3nkq.js} +1 -1
- package/dist/client/assets/erDiagram-SSCWMZ5O-C-iy6VkX.js +99 -0
- package/dist/client/assets/es-CAsWR6hG.js +22 -0
- package/dist/client/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
- package/dist/client/assets/excalidraw-editor-BlcN6umJ.css +1 -0
- package/dist/client/assets/{excalidraw-editor-B46zsTFI.js → excalidraw-editor-D7pnUCLH.js} +2 -2
- package/dist/client/assets/{excalidrawEditor-CT2pHq7e.js → excalidrawEditor-B0jOK3lv.js} +2 -2
- package/dist/client/assets/export-page-Bs3xE1fg.js +57 -0
- package/dist/client/assets/{exportDocument-BaqcOAAW.js → exportDocument-Dg9MjkIk.js} +2 -2
- package/dist/client/assets/exportDocument-PnYU3v1s.css +1 -0
- package/dist/client/assets/flowDiagram-A5DVABFB-CiW1eN8C.js +1 -0
- package/dist/client/assets/{ganttDiagram-PKOTCBZU-BnM97BCT.js → ganttDiagram-EL5Y4UJY-DtKHAbez.js} +1 -1
- package/dist/client/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
- package/dist/client/assets/{gitGraphDiagram-DS77QQ5N-BQpQhjuN.js → gitGraphDiagram-WWUBYQGX-oue8fQ5o.js} +1 -1
- package/dist/client/assets/github-dark.min-BV82VuKq.css +1 -0
- package/dist/client/assets/github.min-v3dd8CNH.css +1 -0
- package/dist/client/assets/image-ZVKINSPA-0zXSnE7M.js +1 -0
- package/dist/client/assets/index-BIpgxyGZ.css +1 -0
- package/dist/client/assets/{index-ClbjMBVt.js → index-Z5sI0Bj-.js} +2 -2
- package/dist/client/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
- package/dist/client/assets/{infoDiagram-6WML65LV-DYB8HCDQ.js → infoDiagram-RXCK75RN-BMzo6KIn.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-WSZJBQD7-Coz_P3t6.js → ishikawaDiagram-5VMMS53U-BIM3h287.js} +1 -1
- package/dist/client/assets/{journeyDiagram-NVQOT4AX-B6edChce.js → journeyDiagram-EYS64GPL-mF6Lh8O-.js} +1 -1
- package/dist/client/assets/{kanban-definition-27J2QSJJ-BFd9-cLc.js → kanban-definition-3QL26DDD-DLN2NyoR.js} +2 -2
- package/dist/client/assets/{line-B_S_S8kV.js → line-BfTWJmgf.js} +1 -1
- package/dist/client/assets/main-Dwnj9Gaq.js +903 -0
- package/dist/client/assets/{mermaid-parser.core-CUVdebAV.js → mermaid-parser.core-Bl0efOMt.js} +2 -2
- package/dist/client/assets/mermaid.core-CLZBlpIW.js +11 -0
- package/dist/client/assets/{mindmap-definition-FAOFIHXS-C9PQ38Al.js → mindmap-definition-FBJOCRG2-CRyHaHTk.js} +1 -1
- package/dist/client/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
- package/dist/client/assets/pdfium-RAgkpwfK.wasm +0 -0
- package/dist/client/assets/{pegDiagram-VL7TDLO6-BMZUrSaU.js → pegDiagram-XKGWAZYB-B31fKPR2.js} +1 -1
- package/dist/client/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
- package/dist/client/assets/{pieDiagram-7S7Q4E2Y-h8kbCL9o.js → pieDiagram-E7YTZNPT-B5OZPb88.js} +1 -1
- package/dist/client/assets/preview-render-compiler-BApvlLLo.js +35 -0
- package/dist/client/assets/preview-render-compiler-BQ_3h9vD.js +1 -0
- package/dist/client/assets/preview-render-worker-BmN79bVc.js +60 -0
- package/dist/client/assets/prod-BiYPMR1i.js +177 -0
- package/dist/client/assets/prod-VxdGZ5Ly.js +1 -0
- package/dist/client/assets/{quadrantDiagram-CIZ2JOQS-CkElyfMi.js → quadrantDiagram-AXDQQJYC-Drrw14YH.js} +1 -1
- package/dist/client/assets/quick-switcher-controller-ButWPmCI.js +12 -0
- package/dist/client/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
- package/dist/client/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
- package/dist/client/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
- package/dist/client/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
- package/dist/client/assets/{railroadDiagram-AXF67PYL-c75gnikD.js → railroadDiagram-O6MQD6OU-BPifP0MB.js} +1 -1
- package/dist/client/assets/{requirementDiagram-LRYGKXZP-mNxKLuHS.js → requirementDiagram-EFPCY7ZU-CRZG6mRB.js} +2 -2
- package/dist/client/assets/{sankeyDiagram-W5VNT64P-0OhplksI.js → sankeyDiagram-P5KCCOFB-DvarEJpo.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-SI44F4Z6-BJ_yAocC.js → sequenceDiagram-WJ2MYXX4-B4oWlb-w.js} +1 -1
- package/dist/client/assets/{stateDiagram-OKZ733FA-Cc83O86s.js → stateDiagram-HBIQ2CUA-qbHIIqRZ.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-4QOOHH4V-B--gjrit.js +1 -0
- package/dist/client/assets/swimlanes-XN3QIQJK-xB6CtUGj.js +1 -0
- package/dist/client/assets/swimlanesDiagram-VK2B7HYN-DO8XNXEg.js +8 -0
- package/dist/client/assets/{timeline-definition-Z64GVDOM-BWDAGTHz.js → timeline-definition-24CTP7MA-Lj_yTNlY.js} +1 -1
- package/dist/client/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
- package/dist/client/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
- package/dist/client/assets/{vennDiagram-T6HMQDX7-LOSsnlMB.js → vennDiagram-4TSXK5OY-BekRp5Y0.js} +1 -1
- package/dist/client/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
- package/dist/client/assets/{wardleyDiagram-T6FBY63Y-BxII3foY.js → wardleyDiagram-VM6X3IG4-kdnV_Hdm.js} +1 -1
- package/dist/client/assets/worker-engine-m0rlHn8R-S8mpn_O0.js +17369 -0
- package/dist/client/assets/{xychartDiagram-ELKLHX3M-B-pTEjju.js → xychartDiagram-S5SC5T6Z-DufGwNSB.js} +3 -3
- package/dist/client/drawio-editor.html +1 -1
- package/dist/client/excalidraw-editor.html +1 -1
- package/dist/client/export-document.html +3 -3
- package/dist/client/index.html +17 -7
- package/package.json +19 -18
- package/src/client/app/index.html +14 -4
- package/src/client/application/app-shell/comments-feature.js +2 -3
- package/src/client/application/app-shell/git-feature.js +2 -2
- package/src/client/application/app-shell/presence-feature.js +2 -2
- package/src/client/application/app-shell/ui-feature-shell.js +64 -0
- package/src/client/application/app-shell-elements.js +1 -0
- package/src/client/application/pdf-preview-controller.js +53 -970
- package/src/client/application/preview-render-compiler.js +3 -0
- package/src/client/application/quick-switcher-loader.js +1 -1
- package/src/client/application/workspace-preview-controller.js +0 -3
- package/src/client/assets/vendor/highlight/github-dark.min.css +2 -10
- package/src/client/assets/vendor/highlight/github.min.css +2 -10
- package/src/client/bootstrap/collabmd-app-shell.js +10 -3
- package/src/client/excalidraw-editor.js +11 -0
- package/src/client/export/export-host.js +1 -1
- package/src/client/export/export-page.js +6 -2
- package/src/client/export/export-pipeline.js +60 -1
- package/src/client/presentation/comment-ui/comment-ui-render.js +4 -0
- package/src/client/presentation/comment-ui-controller.js +2 -0
- package/src/client/presentation/excalidraw-embed-controller.js +7 -0
- package/src/client/presentation/file-explorer-controller.js +0 -5
- package/src/client/presentation/file-explorer-view.js +41 -44
- package/src/client/presentation/file-tree-state.js +4 -3
- package/src/client/presentation/git-panel-controller.js +2 -2
- package/src/client/presentation/quick-switcher-controller.js +48 -9
- package/src/client/styles/features/preview-markdown.css +25 -0
- package/src/client/styles/features/quick-switcher.css +8 -0
- package/src/client/styles/foundation/themes.css +1 -0
- package/src/client/styles/layout/shell.css +7 -325
- package/src/client/styles/layout/sidebar.css +42 -4
- package/src/client/styles/overrides/highlightjs.css +20 -4
- package/src/server/infrastructure/git/git-service.js +23 -11
- package/src/server/infrastructure/http/create-git-api-command-handler.js +3 -1
- package/src/server/infrastructure/http/create-structurizr-api-handler.js +4 -2
- package/src/server/infrastructure/structurizr/structurizr-workspace-service.js +33 -7
- package/dist/client/assets/architecture-TIHT7OUA-CsHfPErM.js +0 -1
- package/dist/client/assets/base-CxPEiHuy.js +0 -1
- package/dist/client/assets/blockDiagram-VBNYF7ZC-CipJt9Jl.js +0 -132
- package/dist/client/assets/c4Diagram-5PPSVZJV-B5ktVx6g.js +0 -10
- package/dist/client/assets/channel-4Jkmq93I.js +0 -1
- package/dist/client/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
- package/dist/client/assets/chunk-7Z6QIM7H-BP9Pdsm9.js +0 -10
- package/dist/client/assets/chunk-ERSWUTIN-hHdvnhaY.js +0 -41
- package/dist/client/assets/chunk-I66GZJ75-CVFiiffQ.js +0 -127
- package/dist/client/assets/chunk-J7OUQ5F2-4CEb7pvH.js +0 -2
- package/dist/client/assets/chunk-JQJVKLGR-cx8X_24v.js +0 -156
- package/dist/client/assets/chunk-QR6OTTB3-CDAA_5Ib.js +0 -62
- package/dist/client/assets/chunk-RYQCIY6F-D-a0zH8K.js +0 -1
- package/dist/client/assets/chunk-UBXNYLIW-Bhk-PbFK.js +0 -1
- package/dist/client/assets/chunk-W5SLKNZC-BdNSCxZ9.js +0 -1
- package/dist/client/assets/chunk-WRU74C26-h6_XkD3_.js +0 -70
- package/dist/client/assets/chunk-ZIRB5QZD-O39ZBUk3.js +0 -32
- package/dist/client/assets/classDiagram-JCYQIIEL-L7lsyW_w.js +0 -1
- package/dist/client/assets/classDiagram-v2-OCEON4UE-L7lsyW_w.js +0 -1
- package/dist/client/assets/cynefin-VYW2F7L2-Ds2Fw2Y0.js +0 -1
- package/dist/client/assets/dagre-Buvkdvvj.js +0 -1
- package/dist/client/assets/dagre-VZM6K2ZE-L1xArOGs.js +0 -4
- package/dist/client/assets/dist-B5Jf1SLZ.js +0 -2
- package/dist/client/assets/dist-BKW4PALF.js +0 -1
- package/dist/client/assets/dist-BWcHHOx-.js +0 -1
- package/dist/client/assets/dist-DaYdhcVs.js +0 -1
- package/dist/client/assets/dist-Kh2COra_.js +0 -1
- package/dist/client/assets/dist-tOaegDYS2.js +0 -1
- package/dist/client/assets/editor-session-Cm9ekeNo.js +0 -54
- package/dist/client/assets/embedded-editor-base-CwTkk911.css +0 -1
- package/dist/client/assets/erDiagram-JOGREHBK-cYUpEKpf.js +0 -85
- package/dist/client/assets/es-DXGV3RHd.js +0 -22
- package/dist/client/assets/eventmodeling-45OFAUF4-CLEiVx5s.js +0 -1
- package/dist/client/assets/excalidraw-editor-Bt7gMSoh.css +0 -1
- package/dist/client/assets/export-page-A7NHawJY.js +0 -39
- package/dist/client/assets/exportDocument-B2L8fe34.css +0 -1
- package/dist/client/assets/flowDiagram-UKHOOZJN-D0ypP0Ez.js +0 -1
- package/dist/client/assets/gitGraph-TEB2WS4Q-CZFBqwW-.js +0 -1
- package/dist/client/assets/github-dark.min-Z5exjX_n.css +0 -1
- package/dist/client/assets/github.min-D2BCvnWf.css +0 -1
- package/dist/client/assets/image-QXRYHUNP-SWEV8H0J.js +0 -1
- package/dist/client/assets/index-Pum8ET-5.css +0 -1
- package/dist/client/assets/info-DKCQHKI2--1InqQeT.js +0 -1
- package/dist/client/assets/main-B3uPyqic.js +0 -893
- package/dist/client/assets/map-BaFkSB1l.js +0 -1
- package/dist/client/assets/mermaid.core-DN-lF51U.js +0 -11
- package/dist/client/assets/packet-7NZHBO7P-BGMXB0XL.js +0 -1
- package/dist/client/assets/pdf-BL9Pr2D5.js +0 -54
- package/dist/client/assets/pdf.worker-CLesOks4.mjs +0 -64857
- package/dist/client/assets/pdf_viewer-FVkkThnz.js +0 -551
- package/dist/client/assets/pie-RZYD4A2V-DgYg3tCt.js +0 -1
- package/dist/client/assets/preview-render-compiler-BD-XhkS2.js +0 -35
- package/dist/client/assets/preview-render-compiler-BKedaMxx.js +0 -1
- package/dist/client/assets/preview-render-worker-CiPqc9n6.js +0 -60
- package/dist/client/assets/prod-Dy20X7eT.js +0 -1
- package/dist/client/assets/prod-hnwh7wRM.js +0 -177
- package/dist/client/assets/quick-switcher-controller-fqOYR7qR.js +0 -12
- package/dist/client/assets/radar-I7S5WNFK-Ag-zp_Rq.js +0 -1
- package/dist/client/assets/railroad-3IZDKUUU-aibJDIDV.js +0 -1
- package/dist/client/assets/railroad-abnf-AHOZXSZD-BBMEuvIl.js +0 -1
- package/dist/client/assets/railroad-ebnf-EBAXGLYW-Be1nseej.js +0 -1
- package/dist/client/assets/railroad-peg-LSFZ7HO6-DIvD-Eyb.js +0 -1
- package/dist/client/assets/stateDiagram-v2-UEYNNEHI-B1-BufUk.js +0 -1
- package/dist/client/assets/swimlanes-SLNWSIFB-oVTWEJIj.js +0 -2
- package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-C5OTVwEu.js +0 -8
- package/dist/client/assets/treeView-QDETBFTQ-uHZ-3Fz8.js +0 -1
- package/dist/client/assets/treemap-6X3UGDF4-BnUKyy3l.js +0 -1
- package/dist/client/assets/wardley-OPB4EBWU-Da7TLC2F.js +0 -1
- /package/dist/client/assets/{drawio-editor-FzY1cVw8.js → drawio-editor-BjrxTe3l.js} +0 -0
|
@@ -9,6 +9,9 @@ import { extractYamlFrontmatter } from '../../domain/yaml-frontmatter.js';
|
|
|
9
9
|
import { renderFrontmatterBlock } from './markdown-frontmatter.js';
|
|
10
10
|
import { analyzeMarkdownComplexity } from './preview-render-profile.js';
|
|
11
11
|
|
|
12
|
+
hljs.registerAliases(['cql', 'mariadb', 'mssql', 'mysql', 'plsql', 'sqlite'], { languageName: 'sql' });
|
|
13
|
+
hljs.registerAliases(['ecmascript', 'node'], { languageName: 'javascript' });
|
|
14
|
+
|
|
12
15
|
const DIRECT_VIDEO_MIME_TYPES = Object.freeze({
|
|
13
16
|
'.mp4': 'video/mp4',
|
|
14
17
|
'.ogg': 'video/ogg',
|
|
@@ -27,7 +27,7 @@ export async function ensureQuickSwitcherInstance(host) {
|
|
|
27
27
|
getSearchConfig: () => host.runtimeConfig.search ?? {},
|
|
28
28
|
onFileSelect: (filePath) => host.workspaceRouteController.handleFileSelection(filePath, {
|
|
29
29
|
closeSidebarOnMobile: true,
|
|
30
|
-
revealInTree:
|
|
30
|
+
revealInTree: !host.isMobileViewport(),
|
|
31
31
|
}),
|
|
32
32
|
onTextMatchSelect: (match) => {
|
|
33
33
|
if (!match?.file) {
|
|
@@ -93,7 +93,6 @@ export class WorkspacePreviewController {
|
|
|
93
93
|
|
|
94
94
|
resetPreviewMode() {
|
|
95
95
|
this.pdfPreview.cancel();
|
|
96
|
-
this.elements.previewContainer?.classList?.remove('is-pdf-file-preview');
|
|
97
96
|
this.elements.previewContent?.classList.remove('is-drawio-file-preview');
|
|
98
97
|
this.elements.previewContent?.classList.remove('is-excalidraw-file-preview');
|
|
99
98
|
this.elements.previewContent?.classList.remove('is-base-file-preview');
|
|
@@ -272,14 +271,12 @@ export class WorkspacePreviewController {
|
|
|
272
271
|
this.drawioEmbed.detachForCommit();
|
|
273
272
|
this.excalidrawEmbed.detachForCommit();
|
|
274
273
|
this.resetPreviewMode();
|
|
275
|
-
this.elements.previewContainer?.classList?.add('is-pdf-file-preview');
|
|
276
274
|
previewElement.classList.add('is-pdf-file-preview');
|
|
277
275
|
const renderHost = this.previewRenderer.ensureRenderHost();
|
|
278
276
|
this.previewRenderer.normalizePreviewChildren(renderHost);
|
|
279
277
|
|
|
280
278
|
if (renderHost) {
|
|
281
279
|
this.pdfPreview.render({
|
|
282
|
-
displayName: this.getDisplayName(filePath),
|
|
283
280
|
filePath,
|
|
284
281
|
renderHost,
|
|
285
282
|
});
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Description: Dark theme as seen on github.com
|
|
4
|
-
Author: github.com
|
|
5
|
-
Maintainer: @Hirse
|
|
6
|
-
Updated: 2021-05-15
|
|
7
|
-
|
|
8
|
-
Outdated base version: https://github.com/primer/github-syntax-dark
|
|
9
|
-
Current colors taken from GitHub's CSS
|
|
10
|
-
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
|
|
1
|
+
/* Highlight.js tokens mapped to CodeMirror's oneDarkHighlightStyle. */
|
|
2
|
+
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword{color:#c678dd}.hljs-attr,.hljs-attribute,.hljs-property,.hljs-variable{color:#e06c75}.hljs-title.function_,.hljs-title.function_.invoke__{color:#61afef}.hljs-name,.hljs-selector-tag,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-type{color:#e5c07b}.hljs-atom,.hljs-built_in,.hljs-bullet,.hljs-literal,.hljs-symbol,.hljs-variable.language_{color:#d19a66}.hljs-number{color:#e5c07b}.hljs-meta .hljs-string,.hljs-string{color:#98c379}.hljs-link,.hljs-operator,.hljs-regexp{color:#56b6c2}.hljs-code,.hljs-comment,.hljs-formula,.hljs-meta,.hljs-quote{color:#7d8799}.hljs-subst{color:#abb2bf}.hljs-section{color:#e06c75;font-weight:700}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-addition{color:#98c379}.hljs-deletion{color:#e06c75}
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Description: Light theme as seen on github.com
|
|
4
|
-
Author: github.com
|
|
5
|
-
Maintainer: @Hirse
|
|
6
|
-
Updated: 2021-05-15
|
|
7
|
-
|
|
8
|
-
Outdated base version: https://github.com/primer/github-syntax-light
|
|
9
|
-
Current colors taken from GitHub's CSS
|
|
10
|
-
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}
|
|
1
|
+
/* Highlight.js tokens mapped to CodeMirror's defaultHighlightStyle. */
|
|
2
|
+
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#404740;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-selector-tag{color:#708}.hljs-atom,.hljs-bullet,.hljs-literal,.hljs-symbol,.hljs-variable.language_{color:#219}.hljs-number{color:#164}.hljs-meta .hljs-string,.hljs-regexp{color:#e40}.hljs-string{color:#a11}.hljs-title.function_,.hljs-title.function_.invoke__{color:#00f}.hljs-title.class_,.hljs-title.class_.inherited__{color:#167}.hljs-built_in,.hljs-name,.hljs-type{color:#085}.hljs-attr,.hljs-attribute,.hljs-property{color:#00c}.hljs-code,.hljs-comment,.hljs-formula,.hljs-quote{color:#940}.hljs-meta,.hljs-operator,.hljs-subst,.hljs-variable{color:#404740}.hljs-section{color:#00f;font-weight:700}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-addition{color:#164}.hljs-deletion{color:#a11}
|
|
@@ -99,7 +99,13 @@ export class CollabMdAppShell {
|
|
|
99
99
|
this.sessionLoadToken = 0;
|
|
100
100
|
this.navigation = {
|
|
101
101
|
getHashRoute,
|
|
102
|
-
navigateToFile,
|
|
102
|
+
navigateToFile: (filePath, options = {}) => {
|
|
103
|
+
const { preserveFollow = false, ...routeOptions } = options;
|
|
104
|
+
if (!preserveFollow && filePath !== this.currentFilePath) {
|
|
105
|
+
this.stopFollowingUser();
|
|
106
|
+
}
|
|
107
|
+
navigateToFile(filePath, routeOptions);
|
|
108
|
+
},
|
|
103
109
|
navigateToGitCommit,
|
|
104
110
|
navigateToGitDiff,
|
|
105
111
|
navigateToGitFileHistory,
|
|
@@ -247,6 +253,7 @@ export class CollabMdAppShell {
|
|
|
247
253
|
this.drawioEmbed.reconcileEmbeds(this.elements.previewContent);
|
|
248
254
|
this.excalidrawEmbed.reconcileEmbeds(this.elements.previewContent, { isLargeDocument: stats.isLargeDocument });
|
|
249
255
|
this.scrollSyncController.setLargeDocumentMode(stats.isLargeDocument);
|
|
256
|
+
this.syncPreviewCodeCopyButtons();
|
|
250
257
|
this.syncPreviewHeadingLinkButtons();
|
|
251
258
|
this.applyPendingPreviewRouteAnchor({ behavior: 'auto', clearMissing: true });
|
|
252
259
|
this.schedulePreviewLayoutSync({ delayMs: 0 });
|
|
@@ -288,8 +295,7 @@ export class CollabMdAppShell {
|
|
|
288
295
|
scrollEditorToLine: (lineNumber, viewportRatio) => this.session?.scrollToLine(lineNumber, viewportRatio),
|
|
289
296
|
});
|
|
290
297
|
this.pdfPreview = new PdfPreviewController({
|
|
291
|
-
|
|
292
|
-
previewContainer: this.elements.previewContainer,
|
|
298
|
+
getTheme: () => this.themeController.getTheme(),
|
|
293
299
|
});
|
|
294
300
|
this.backlinksPanel = new BacklinksPanel({
|
|
295
301
|
headerPanelElement: this.elements.backlinksHeaderPanel,
|
|
@@ -304,6 +310,7 @@ export class CollabMdAppShell {
|
|
|
304
310
|
getLocalUser: () => this.lobby.getLocalUser(),
|
|
305
311
|
getTheme: () => this.themeController.getTheme(),
|
|
306
312
|
onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
|
|
313
|
+
onStopFollowing: () => this.stopFollowingUser(),
|
|
307
314
|
onToggleQuickSwitcher: () => {
|
|
308
315
|
void this.toggleQuickSwitcher();
|
|
309
316
|
},
|
|
@@ -441,6 +441,7 @@ function buildExcalidrawProps({ initialData, renderTopRightUI, viewModeEnabled }
|
|
|
441
441
|
},
|
|
442
442
|
onPointerDown: () => {
|
|
443
443
|
initialViewportFitPending = false;
|
|
444
|
+
stopFollowingFromLocalInteraction();
|
|
444
445
|
},
|
|
445
446
|
renderTopRightUI,
|
|
446
447
|
historyOptions: {
|
|
@@ -1379,7 +1380,17 @@ function postToParent(type, payload = {}) {
|
|
|
1379
1380
|
window.parent.postMessage({ source: 'excalidraw-editor', type, ...payload }, parentOrigin);
|
|
1380
1381
|
}
|
|
1381
1382
|
|
|
1383
|
+
function stopFollowingFromLocalInteraction() {
|
|
1384
|
+
if (!pendingHostFollowPeerId && !followedSocketId) {
|
|
1385
|
+
return;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
applyHostFollowRequest(null);
|
|
1389
|
+
postToParent('stop-following');
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1382
1392
|
function handleQuickSwitcherKeyDown(event) {
|
|
1393
|
+
stopFollowingFromLocalInteraction();
|
|
1383
1394
|
if (!isPlainQuickSwitcherShortcut(event)) {
|
|
1384
1395
|
return;
|
|
1385
1396
|
}
|
|
@@ -51,9 +51,13 @@ async function bootstrap() {
|
|
|
51
51
|
const snapshot = await prepareExportSnapshot(payload);
|
|
52
52
|
const mount = renderSnapshot(snapshot);
|
|
53
53
|
snapshot.html = await waitForRenderedExportContent(mount);
|
|
54
|
-
setStatus(payload.action === 'pdf'
|
|
54
|
+
setStatus(payload.action === 'pdf'
|
|
55
|
+
? 'Opening print dialog…'
|
|
56
|
+
: `Preparing ${payload.action.toUpperCase()} download…`);
|
|
55
57
|
await runExportAdapter(snapshot, payload.action);
|
|
56
|
-
setStatus(payload.action === 'pdf'
|
|
58
|
+
setStatus(payload.action === 'pdf'
|
|
59
|
+
? 'Print dialog opened.'
|
|
60
|
+
: `${payload.action.toUpperCase()} download started.`);
|
|
57
61
|
postExportPageMessage('complete', { jobId: new URL(window.location.href).searchParams.get('job') || '' });
|
|
58
62
|
} catch (error) {
|
|
59
63
|
const message = error instanceof Error ? error.message : 'Export failed';
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { exportToSvg as exportExcalidrawToSvg } from '@excalidraw/excalidraw';
|
|
2
2
|
|
|
3
|
+
import baseStyles from '../styles/base.css?inline';
|
|
4
|
+
import tokenStyles from '../styles/foundation/tokens.css?inline';
|
|
5
|
+
import themeStyles from '../styles/foundation/themes.css?inline';
|
|
6
|
+
import previewStyles from '../styles/features/preview-markdown.css?inline';
|
|
7
|
+
import highlightOverrideStyles from '../styles/overrides/highlightjs.css?inline';
|
|
8
|
+
import exportStyles from '../styles/export-document.css?inline';
|
|
9
|
+
import highlightStyles from '../assets/vendor/highlight/github.min.css?inline';
|
|
3
10
|
import {
|
|
4
11
|
encodeSvgDataUrl,
|
|
5
12
|
loadImage,
|
|
@@ -9,6 +16,7 @@ import {
|
|
|
9
16
|
import { compilePreviewDocument } from '../application/preview-render-compiler.js';
|
|
10
17
|
import { stripVaultFileExtension } from '../../domain/file-kind.js';
|
|
11
18
|
import { parseSceneJson, sceneToInitialData } from '../domain/excalidraw-scene.js';
|
|
19
|
+
import { escapeHtml } from '../domain/vault-utils.js';
|
|
12
20
|
import { downloadBlob } from '../browser-utils.js';
|
|
13
21
|
import { resolveApiUrl, resolveAppUrl } from '../infrastructure/runtime-config.js';
|
|
14
22
|
|
|
@@ -46,6 +54,20 @@ const DOCX_IMAGE_TYPE_LABELS = new Map([
|
|
|
46
54
|
['image/gif', 'GIF'],
|
|
47
55
|
['image/webp', 'WebP'],
|
|
48
56
|
]);
|
|
57
|
+
const HTML_EXPORT_STYLES = [
|
|
58
|
+
baseStyles,
|
|
59
|
+
tokenStyles,
|
|
60
|
+
themeStyles,
|
|
61
|
+
previewStyles,
|
|
62
|
+
highlightOverrideStyles,
|
|
63
|
+
exportStyles,
|
|
64
|
+
highlightStyles,
|
|
65
|
+
`html, body {
|
|
66
|
+
height: auto;
|
|
67
|
+
min-height: 100%;
|
|
68
|
+
overflow: visible;
|
|
69
|
+
}`,
|
|
70
|
+
].join('\n');
|
|
49
71
|
|
|
50
72
|
let mermaidLoaderPromise = null;
|
|
51
73
|
let assetCounter = 0;
|
|
@@ -1387,6 +1409,37 @@ export function buildDocxHtmlDocument(snapshot) {
|
|
|
1387
1409
|
</html>`;
|
|
1388
1410
|
}
|
|
1389
1411
|
|
|
1412
|
+
export function buildHtmlDocument(snapshot) {
|
|
1413
|
+
const template = document.createElement('template');
|
|
1414
|
+
template.innerHTML = snapshot.html;
|
|
1415
|
+
Array.from(template.content.querySelectorAll('[data-export-docx-src]')).forEach((element) => {
|
|
1416
|
+
element.removeAttribute('data-export-docx-src');
|
|
1417
|
+
});
|
|
1418
|
+
|
|
1419
|
+
return `<!DOCTYPE html>
|
|
1420
|
+
<html lang="en" data-theme="light">
|
|
1421
|
+
<head>
|
|
1422
|
+
<meta charset="UTF-8">
|
|
1423
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1424
|
+
<title>${escapeHtml(snapshot.title)}</title>
|
|
1425
|
+
<style>${HTML_EXPORT_STYLES.replace(/<\/style/giu, '<\\/style')}</style>
|
|
1426
|
+
</head>
|
|
1427
|
+
<body data-theme="light">
|
|
1428
|
+
<main class="export-page-shell">
|
|
1429
|
+
<article class="preview-content export-content">${template.innerHTML}</article>
|
|
1430
|
+
</main>
|
|
1431
|
+
</body>
|
|
1432
|
+
</html>`;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
export function htmlAdapter(snapshot) {
|
|
1436
|
+
downloadBlob(
|
|
1437
|
+
new Blob([buildHtmlDocument(snapshot)], { type: 'text/html;charset=utf-8' }),
|
|
1438
|
+
`${createDocumentTitle(snapshot.filePath, snapshot.title)}.html`,
|
|
1439
|
+
{ removeDelayMs: 0, revokeDelayMs: 1000 },
|
|
1440
|
+
);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1390
1443
|
export async function docxAdapter(snapshot) {
|
|
1391
1444
|
const response = await fetch(resolveApiUrl('/export/docx'), {
|
|
1392
1445
|
body: JSON.stringify({
|
|
@@ -1461,6 +1514,11 @@ export async function runExportAdapter(snapshot, format) {
|
|
|
1461
1514
|
return;
|
|
1462
1515
|
}
|
|
1463
1516
|
|
|
1517
|
+
if (format === 'html') {
|
|
1518
|
+
await htmlAdapter(snapshot);
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1464
1522
|
await docxAdapter(snapshot);
|
|
1465
1523
|
}
|
|
1466
1524
|
|
|
@@ -1478,7 +1536,8 @@ export function postExportPageMessage(type, payload = {}) {
|
|
|
1478
1536
|
|
|
1479
1537
|
export async function waitForBootstrapPayload() {
|
|
1480
1538
|
const requestUrl = new URL(window.location.href);
|
|
1481
|
-
const
|
|
1539
|
+
const requestedAction = requestUrl.searchParams.get('action');
|
|
1540
|
+
const action = ['html', 'pdf'].includes(requestedAction) ? requestedAction : 'docx';
|
|
1482
1541
|
const filePath = requestUrl.searchParams.get('file') || '';
|
|
1483
1542
|
const jobId = requestUrl.searchParams.get('job') || '';
|
|
1484
1543
|
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
* @property {HTMLElement | null} commentsDrawerList
|
|
18
18
|
* @property {HTMLElement | null} commentsDrawerEmpty
|
|
19
19
|
* @property {HTMLElement | null} cardRoot
|
|
20
|
+
* @property {{ matches: boolean }} mobileBreakpointQuery
|
|
20
21
|
* @property {HTMLElement | null} pendingCardFocusElement
|
|
21
22
|
* @property {any} reactionPicker
|
|
22
23
|
* @property {() => Array<any>} getThreadGroups
|
|
@@ -103,6 +104,9 @@ function renderDrawer() {
|
|
|
103
104
|
});
|
|
104
105
|
button.addEventListener('click', () => {
|
|
105
106
|
this.onNavigateToLine?.(group.anchor?.startLine ?? 1);
|
|
107
|
+
if (this.mobileBreakpointQuery?.matches) {
|
|
108
|
+
this.setDrawerOpen(false);
|
|
109
|
+
}
|
|
106
110
|
this.openThreadGroup(group, {
|
|
107
111
|
anchor: group.anchor,
|
|
108
112
|
origin: 'editor',
|
|
@@ -12,6 +12,7 @@ export class CommentUiController {
|
|
|
12
12
|
commentsDrawerList,
|
|
13
13
|
commentsToggleButton,
|
|
14
14
|
editorContainer,
|
|
15
|
+
mobileBreakpointQuery = window.matchMedia('(max-width: 768px)'),
|
|
15
16
|
onWillOpenDrawer,
|
|
16
17
|
onCreateThread,
|
|
17
18
|
onNavigateToLine,
|
|
@@ -27,6 +28,7 @@ export class CommentUiController {
|
|
|
27
28
|
this.commentsDrawerList = commentsDrawerList;
|
|
28
29
|
this.commentsToggleButton = commentsToggleButton;
|
|
29
30
|
this.editorContainer = editorContainer;
|
|
31
|
+
this.mobileBreakpointQuery = mobileBreakpointQuery;
|
|
30
32
|
this.onWillOpenDrawer = onWillOpenDrawer;
|
|
31
33
|
this.onCreateThread = onCreateThread;
|
|
32
34
|
this.onNavigateToLine = onNavigateToLine;
|
|
@@ -27,6 +27,7 @@ export class ExcalidrawEmbedController {
|
|
|
27
27
|
getTheme,
|
|
28
28
|
getLocalUser,
|
|
29
29
|
onOpenFile = null,
|
|
30
|
+
onStopFollowing = null,
|
|
30
31
|
onToggleQuickSwitcher = null,
|
|
31
32
|
previewContainer,
|
|
32
33
|
previewElement,
|
|
@@ -35,6 +36,7 @@ export class ExcalidrawEmbedController {
|
|
|
35
36
|
this.getTheme = getTheme;
|
|
36
37
|
this.getLocalUser = getLocalUser;
|
|
37
38
|
this.onOpenFile = onOpenFile;
|
|
39
|
+
this.onStopFollowing = onStopFollowing;
|
|
38
40
|
this.onToggleQuickSwitcher = onToggleQuickSwitcher;
|
|
39
41
|
this.previewContainer = previewContainer;
|
|
40
42
|
this.previewElement = previewElement;
|
|
@@ -1227,6 +1229,11 @@ export class ExcalidrawEmbedController {
|
|
|
1227
1229
|
return;
|
|
1228
1230
|
}
|
|
1229
1231
|
|
|
1232
|
+
if (msg.type === 'stop-following') {
|
|
1233
|
+
this.onStopFollowing?.();
|
|
1234
|
+
return;
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1230
1237
|
if (msg.type === 'error') {
|
|
1231
1238
|
if (entry.isParked) {
|
|
1232
1239
|
return;
|
|
@@ -24,11 +24,6 @@ export class FileExplorerController {
|
|
|
24
24
|
this.threadCounts = new Map();
|
|
25
25
|
this.view = new FileExplorerView({
|
|
26
26
|
mobileBreakpointQuery,
|
|
27
|
-
onDirectorySelect: (pathValue) => {
|
|
28
|
-
this.state.expandDirectoryPath(pathValue);
|
|
29
|
-
this.state.setSearchQuery('');
|
|
30
|
-
this.renderTree({ reset: true });
|
|
31
|
-
},
|
|
32
27
|
onDirectoryToggle: (pathValue) => {
|
|
33
28
|
this.state.toggleDirectory(pathValue);
|
|
34
29
|
if (!this.view.rerenderDirectoryBranch(pathValue, this.state.tree, {
|
|
@@ -32,7 +32,6 @@ export class FileExplorerView {
|
|
|
32
32
|
constructor({
|
|
33
33
|
mobileBreakpointQuery = window.matchMedia('(max-width: 768px)'),
|
|
34
34
|
onEntryDrop,
|
|
35
|
-
onDirectorySelect,
|
|
36
35
|
onDirectoryToggle,
|
|
37
36
|
onFileContextMenu,
|
|
38
37
|
onFileSelect,
|
|
@@ -41,7 +40,6 @@ export class FileExplorerView {
|
|
|
41
40
|
onValidateDrop,
|
|
42
41
|
}) {
|
|
43
42
|
this.onEntryDrop = onEntryDrop;
|
|
44
|
-
this.onDirectorySelect = onDirectorySelect;
|
|
45
43
|
this.onDirectoryToggle = onDirectoryToggle;
|
|
46
44
|
this.onFileContextMenu = onFileContextMenu;
|
|
47
45
|
this.onFileSelect = onFileSelect;
|
|
@@ -51,6 +49,7 @@ export class FileExplorerView {
|
|
|
51
49
|
this.mobileBreakpointQuery = mobileBreakpointQuery;
|
|
52
50
|
this.treeContainer = document.getElementById('fileTree');
|
|
53
51
|
this.searchInput = document.getElementById('fileSearchInput');
|
|
52
|
+
this.searchStatus = document.getElementById('fileSearchStatus');
|
|
54
53
|
this.renderedDirectoryWrappers = new Map();
|
|
55
54
|
this.renderedChildContainers = new Map();
|
|
56
55
|
this.renderedFileItems = new Map();
|
|
@@ -122,6 +121,18 @@ export class FileExplorerView {
|
|
|
122
121
|
});
|
|
123
122
|
}
|
|
124
123
|
|
|
124
|
+
updateSearchStatus(query, matchCount = null) {
|
|
125
|
+
if (!this.searchStatus) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const status = String(query ?? '').trim() && Number.isInteger(matchCount)
|
|
130
|
+
? `${matchCount} match${matchCount === 1 ? '' : 'es'}`
|
|
131
|
+
: '';
|
|
132
|
+
this.searchStatus.textContent = status;
|
|
133
|
+
this.searchStatus.classList.toggle('hidden', !status);
|
|
134
|
+
}
|
|
135
|
+
|
|
125
136
|
revealFile(filePath) {
|
|
126
137
|
this.renderedFileItems.get(filePath)?.scrollIntoView({ block: 'nearest' });
|
|
127
138
|
}
|
|
@@ -143,6 +154,10 @@ export class FileExplorerView {
|
|
|
143
154
|
const threadCount = Number(this.threadCounts.get(filePath) ?? 0) || 0;
|
|
144
155
|
let badge = button.querySelector('.file-tree-comment-count');
|
|
145
156
|
button.classList.toggle('has-comments', threadCount > 0);
|
|
157
|
+
button.setAttribute(
|
|
158
|
+
'aria-label',
|
|
159
|
+
`${filePath}${threadCount > 0 ? `, ${threadCount} open comment thread${threadCount === 1 ? '' : 's'}` : ''}`,
|
|
160
|
+
);
|
|
146
161
|
|
|
147
162
|
if (threadCount <= 0) {
|
|
148
163
|
delete button.dataset.threadCount;
|
|
@@ -157,7 +172,7 @@ export class FileExplorerView {
|
|
|
157
172
|
button.appendChild(badge);
|
|
158
173
|
}
|
|
159
174
|
badge.textContent = String(threadCount);
|
|
160
|
-
badge.setAttribute('aria-
|
|
175
|
+
badge.setAttribute('aria-hidden', 'true');
|
|
161
176
|
});
|
|
162
177
|
}
|
|
163
178
|
|
|
@@ -168,7 +183,7 @@ export class FileExplorerView {
|
|
|
168
183
|
|
|
169
184
|
this.threadCounts = threadCounts instanceof Map ? threadCounts : new Map();
|
|
170
185
|
this.showFileExtensions = Boolean(showFileExtensions);
|
|
171
|
-
this.currentSearchQuery = String(searchQuery ?? '');
|
|
186
|
+
this.currentSearchQuery = String(searchQuery ?? '').trim();
|
|
172
187
|
if (this.currentSearchQuery) {
|
|
173
188
|
this.clearDragFeedback();
|
|
174
189
|
}
|
|
@@ -176,8 +191,9 @@ export class FileExplorerView {
|
|
|
176
191
|
if (this.searchInput && this.searchInput.value !== searchQuery) {
|
|
177
192
|
this.searchInput.value = searchQuery;
|
|
178
193
|
}
|
|
194
|
+
this.updateSearchStatus(searchQuery, this.currentSearchQuery ? searchMatches.length : null);
|
|
179
195
|
|
|
180
|
-
if (
|
|
196
|
+
if (this.currentSearchQuery) {
|
|
181
197
|
this.lastRenderMode = 'search';
|
|
182
198
|
this.renderSearchResults(searchMatches, activeFilePath);
|
|
183
199
|
return;
|
|
@@ -246,17 +262,13 @@ export class FileExplorerView {
|
|
|
246
262
|
|
|
247
263
|
const fragment = document.createDocumentFragment();
|
|
248
264
|
for (const match of matches) {
|
|
249
|
-
if (match.type === 'directory') {
|
|
250
|
-
fragment.appendChild(this.createSearchDirectoryItem(match));
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
265
|
fragment.appendChild(this.createFileItem({
|
|
255
266
|
activeFilePath,
|
|
256
267
|
depth: 0,
|
|
257
268
|
filePath: match.path,
|
|
258
269
|
fileType: match.type || (getVaultTreeNodeType(match.path) ?? 'file'),
|
|
259
270
|
name: match.name || getVaultPathLeaf(match.path),
|
|
271
|
+
searchResult: true,
|
|
260
272
|
}));
|
|
261
273
|
}
|
|
262
274
|
this.treeContainer.appendChild(fragment);
|
|
@@ -315,6 +327,8 @@ export class FileExplorerView {
|
|
|
315
327
|
|
|
316
328
|
const button = document.createElement('button');
|
|
317
329
|
button.className = 'file-tree-item file-tree-dir';
|
|
330
|
+
button.title = node.path;
|
|
331
|
+
button.setAttribute('aria-label', node.path);
|
|
318
332
|
button.style.setProperty('--depth', depth);
|
|
319
333
|
button.dataset.depth = depth;
|
|
320
334
|
|
|
@@ -364,35 +378,6 @@ export class FileExplorerView {
|
|
|
364
378
|
return wrapper;
|
|
365
379
|
}
|
|
366
380
|
|
|
367
|
-
createSearchDirectoryItem(node) {
|
|
368
|
-
const button = document.createElement('button');
|
|
369
|
-
button.className = 'file-tree-item file-tree-dir';
|
|
370
|
-
button.style.setProperty('--depth', 0);
|
|
371
|
-
button.dataset.depth = 0;
|
|
372
|
-
button.dataset.path = node.path;
|
|
373
|
-
button.dataset.entryType = 'directory';
|
|
374
|
-
button.innerHTML = `
|
|
375
|
-
<svg class="file-tree-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>
|
|
376
|
-
<span class="file-tree-name">${escapeHtml(node.name || getVaultPathLeaf(node.path))}</span>
|
|
377
|
-
`;
|
|
378
|
-
|
|
379
|
-
button.addEventListener('click', (event) => {
|
|
380
|
-
if (this.consumeSuppressedActivation(button, event)) {
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
this.onDirectorySelect?.(node.path);
|
|
384
|
-
});
|
|
385
|
-
button.addEventListener('contextmenu', (event) => {
|
|
386
|
-
event.preventDefault();
|
|
387
|
-
this.onFileContextMenu?.(event, { directoryPath: node.path, type: 'directory' });
|
|
388
|
-
});
|
|
389
|
-
this.bindLongPress(button, () => {
|
|
390
|
-
this.onFileContextMenu?.(this.createLongPressEvent(button), { directoryPath: node.path, type: 'directory' });
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
return button;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
381
|
rerenderDirectoryBranch(parentPath, tree, { activeFilePath, expandedDirs }) {
|
|
397
382
|
const wrapper = this.renderedDirectoryWrappers.get(parentPath);
|
|
398
383
|
const parentNode = findNodeByPath(tree, parentPath);
|
|
@@ -453,10 +438,16 @@ export class FileExplorerView {
|
|
|
453
438
|
});
|
|
454
439
|
}
|
|
455
440
|
|
|
456
|
-
createFileItem({ activeFilePath, depth, filePath, fileType = 'file', name }) {
|
|
441
|
+
createFileItem({ activeFilePath, depth, filePath, fileType = 'file', name, searchResult = false }) {
|
|
457
442
|
const button = document.createElement('button');
|
|
458
|
-
|
|
443
|
+
const parentPath = getVaultPathParent(filePath);
|
|
444
|
+
button.className = `file-tree-item file-tree-file${searchResult ? ' file-tree-search-result' : ''}`;
|
|
445
|
+
button.title = filePath;
|
|
459
446
|
const threadCount = Number(this.threadCounts.get(filePath) ?? 0);
|
|
447
|
+
button.setAttribute(
|
|
448
|
+
'aria-label',
|
|
449
|
+
`${filePath}${threadCount > 0 ? `, ${threadCount} open comment thread${threadCount === 1 ? '' : 's'}` : ''}`,
|
|
450
|
+
);
|
|
460
451
|
const isDrawio = fileType === 'drawio';
|
|
461
452
|
const isExcalidraw = fileType === 'excalidraw';
|
|
462
453
|
const isBase = fileType === 'base';
|
|
@@ -504,11 +495,17 @@ export class FileExplorerView {
|
|
|
504
495
|
if (threadCount > 0) {
|
|
505
496
|
button.dataset.threadCount = String(threadCount);
|
|
506
497
|
}
|
|
507
|
-
const displayName = this.showFileExtensions ? String(name ?? '') : stripVaultFileExtension(name);
|
|
498
|
+
const displayName = this.showFileExtensions || searchResult ? String(name ?? '') : stripVaultFileExtension(name);
|
|
499
|
+
const nameMarkup = searchResult
|
|
500
|
+
? `<span class="file-tree-search-copy">
|
|
501
|
+
<span class="file-tree-name">${escapeHtml(displayName)}</span>
|
|
502
|
+
${parentPath ? `<span class="file-tree-search-path">${escapeHtml(parentPath)}</span>` : ''}
|
|
503
|
+
</span>`
|
|
504
|
+
: `<span class="file-tree-name">${escapeHtml(displayName)}</span>`;
|
|
508
505
|
button.innerHTML = `
|
|
509
506
|
${getVaultFileIconSvg(filePath)}
|
|
510
|
-
|
|
511
|
-
${threadCount > 0 ? `<span class="file-tree-comment-count" aria-
|
|
507
|
+
${nameMarkup}
|
|
508
|
+
${threadCount > 0 ? `<span class="file-tree-comment-count" aria-hidden="true">${threadCount}</span>` : ''}
|
|
512
509
|
`;
|
|
513
510
|
this.configureDragSource(button, { path: filePath, type: 'file' });
|
|
514
511
|
|
|
@@ -104,16 +104,17 @@ export class FileTreeState {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
setSearchQuery(value) {
|
|
107
|
-
this.searchQuery = String(value ?? '')
|
|
107
|
+
this.searchQuery = String(value ?? '');
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
getSearchMatches() {
|
|
111
|
-
|
|
111
|
+
const normalizedQuery = this.searchQuery.trim().toLowerCase();
|
|
112
|
+
if (!normalizedQuery) {
|
|
112
113
|
return [];
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
return this.flatSearchEntries
|
|
116
|
-
.filter((entry) => entry.lowerPath.includes(
|
|
117
|
+
.filter((entry) => entry.type !== 'directory' && entry.lowerPath.includes(normalizedQuery))
|
|
117
118
|
.map((entry) => ({
|
|
118
119
|
name: entry.name,
|
|
119
120
|
path: entry.path,
|
|
@@ -879,7 +879,7 @@ export class GitPanelController {
|
|
|
879
879
|
|
|
880
880
|
return `
|
|
881
881
|
${pullBackupsMarkup}
|
|
882
|
-
${sectionMarkup ||
|
|
882
|
+
${sectionMarkup || `<div class="git-panel-empty">${this.searchQuery && hasChanges ? 'No changes match your filter.' : 'No local changes'}</div>`}
|
|
883
883
|
${hasChanges ? `
|
|
884
884
|
<div class="git-panel-footer">
|
|
885
885
|
<div class="git-panel-footer-actions">
|
|
@@ -947,7 +947,7 @@ export class GitPanelController {
|
|
|
947
947
|
class="${buttonClassNames({ variant: 'secondary', size: 'compact', pill: true, surface: true, extra: 'ui-action-pill' })}"
|
|
948
948
|
type="button"
|
|
949
949
|
data-git-sync-action="pull"
|
|
950
|
-
title="${hasUpstream ? 'Pull remote changes
|
|
950
|
+
title="${hasUpstream ? 'Pull remote changes' : 'No upstream branch configured'}"
|
|
951
951
|
aria-label="Pull branch"
|
|
952
952
|
${!hasUpstream || isPullPending ? 'disabled' : ''}
|
|
953
953
|
>
|