collabmd 0.1.21 → 0.1.23
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 +94 -7
- package/bin/collabmd.js +3 -2
- package/docker-compose.yml +13 -1
- package/package.json +2 -1
- package/public/assets/css/style.css +1 -1
- package/public/assets/js/chunks/{chunk-HEWVH67U.js → chunk-CYK7KO7W.js} +8 -8
- package/public/assets/js/chunks/editor-session-S5AT7BMV.js +22 -0
- package/public/assets/js/{excalidraw-editor-TCIH6GJL.js → excalidraw-editor-5YWMGLKF.js} +145 -62
- package/public/assets/js/excalidraw-editor.js +1 -1
- package/public/assets/js/main.js +503 -182
- package/public/index.html +104 -84
- package/src/client/application/app-shell/git-feature.js +247 -9
- package/src/client/application/app-shell/ui-feature.js +65 -7
- package/src/client/application/app-shell/workspace-feature.js +46 -0
- package/src/client/application/app-shell-elements.js +2 -0
- package/src/client/application/mermaid-preview-hydrator.js +1 -1
- package/src/client/application/plantuml-preview-hydrator.js +1 -1
- package/src/client/application/workspace-coordinator.js +147 -18
- package/src/client/application/workspace-preview-controller.js +34 -0
- package/src/client/application/workspace-route-controller.js +104 -0
- package/src/client/bootstrap/collabmd-app-shell.js +95 -0
- package/src/client/domain/runtime-paths.js +5 -0
- package/src/client/excalidraw-editor.js +50 -2
- package/src/client/infrastructure/auth-client.js +219 -52
- package/src/client/infrastructure/browser-navigation-port.js +20 -0
- package/src/client/infrastructure/editor-collaboration-client.js +4 -0
- package/src/client/infrastructure/editor-session.js +47 -7
- package/src/client/infrastructure/editor-view-adapter.js +122 -58
- package/src/client/infrastructure/runtime-config.js +66 -0
- package/src/client/presentation/comment-ui-controller.js +82 -26
- package/src/client/presentation/comments-panel.js +2 -2
- package/src/client/presentation/excalidraw-embed-controller.js +60 -2
- package/src/client/presentation/file-history-view-controller.js +806 -0
- package/src/client/presentation/git-diff-view-controller.js +718 -121
- package/src/client/presentation/git-panel-controller.js +458 -66
- package/src/client/presentation/layout-controller.js +1 -1
- package/src/client/styles/components/actions.css +89 -0
- package/src/client/styles/components/feedback.css +43 -0
- package/src/client/styles/components/navigation.css +68 -0
- package/src/client/styles/components/scrollbars.css +104 -0
- package/src/client/styles/components/states.css +289 -0
- package/src/client/styles/components/surfaces.css +155 -0
- package/src/client/styles/features/backlinks.css +213 -0
- package/src/client/styles/features/collaboration-chat.css +228 -0
- package/src/client/styles/features/collaboration-dialogs.css +154 -0
- package/src/client/styles/features/collaboration-presence.css +103 -0
- package/src/client/styles/features/collaboration-ui.css +3 -0
- package/src/client/styles/features/comment-card.css +236 -0
- package/src/client/styles/features/comment-markdown.css +127 -0
- package/src/client/styles/features/comment-overlays.css +60 -0
- package/src/client/styles/features/comments-drawer.css +120 -0
- package/src/client/styles/features/comments.css +4 -0
- package/src/client/styles/features/diagram-preview.css +227 -0
- package/src/client/styles/features/diff-commit.css +268 -0
- package/src/client/styles/features/diff-lines.css +160 -0
- package/src/client/styles/features/diff-toolbar.css +98 -0
- package/src/client/styles/features/diff.css +3 -0
- package/src/client/styles/features/embedded-preview.css +218 -0
- package/src/client/styles/features/git-branch.css +155 -0
- package/src/client/styles/features/git-files.css +105 -0
- package/src/client/styles/features/git-history.css +339 -0
- package/src/client/styles/features/git.css +3 -0
- package/src/client/styles/features/media-lightbox.css +157 -0
- package/src/client/styles/features/outline.css +115 -0
- package/src/client/styles/features/preview-content.css +3 -0
- package/src/client/styles/features/preview-markdown.css +201 -0
- package/src/client/styles/features/preview-sidebars.css +2 -0
- package/src/client/styles/features/quick-switcher.css +167 -0
- package/src/client/styles/foundation/themes.css +347 -0
- package/src/client/styles/foundation/tokens.css +66 -0
- package/src/client/styles/foundation/utilities.css +36 -0
- package/src/client/styles/layout/editor-page.css +203 -0
- package/src/client/styles/layout/overlays.css +132 -0
- package/src/client/styles/layout/responsive.css +251 -0
- package/src/client/styles/layout/shell.css +314 -0
- package/src/client/styles/layout/sidebar.css +176 -0
- package/src/client/styles/layout/view-modes.css +92 -0
- package/src/client/styles/overrides/codemirror.css +53 -0
- package/src/client/styles/overrides/highlightjs.css +7 -0
- package/src/client/styles/overrides/vendor.css +2 -0
- package/src/client/styles/primitives/controls.css +276 -0
- package/src/client/styles/style.css +25 -4945
- package/src/server/auth/create-auth-service.js +373 -15
- package/src/server/auth/session-cookie.js +30 -4
- package/src/server/config/env.js +121 -5
- package/src/server/create-app-server.js +8 -0
- package/src/server/domain/collaboration/collaboration-room.js +90 -47
- package/src/server/index.js +3 -1
- package/src/server/infrastructure/git/command-runner.js +2 -1
- package/src/server/infrastructure/git/git-service.js +48 -2
- package/src/server/infrastructure/git/history-service.js +683 -0
- package/src/server/infrastructure/git/parsers.js +30 -0
- package/src/server/infrastructure/git/responses.js +73 -0
- package/src/server/infrastructure/http/create-auth-api-handler.js +30 -2
- package/src/server/infrastructure/http/create-git-api-command-handler.js +2 -0
- package/src/server/infrastructure/http/create-git-api-handler.js +2 -0
- package/src/server/infrastructure/http/create-git-api-query-handler.js +61 -0
- package/src/server/infrastructure/http/create-request-handler.js +15 -0
- package/public/assets/js/chunks/editor-session-EAUBJCHH.js +0 -22
|
@@ -77,6 +77,8 @@ export class ExcalidrawEmbedController {
|
|
|
77
77
|
this.maximizedRoot = null;
|
|
78
78
|
this.placeholderObserver = null;
|
|
79
79
|
this.followedPeerIdsByFilePath = new Map();
|
|
80
|
+
this.pendingDisconnectRequests = new Map();
|
|
81
|
+
this.disconnectRequestCounter = 0;
|
|
80
82
|
|
|
81
83
|
this._onMessage = this._onMessage.bind(this);
|
|
82
84
|
this._onKeyDown = this._onKeyDown.bind(this);
|
|
@@ -104,6 +106,10 @@ export class ExcalidrawEmbedController {
|
|
|
104
106
|
entry.placeholder = null;
|
|
105
107
|
});
|
|
106
108
|
this.embedEntries.clear();
|
|
109
|
+
this.pendingDisconnectRequests.forEach((request) => {
|
|
110
|
+
request.resolve(false);
|
|
111
|
+
});
|
|
112
|
+
this.pendingDisconnectRequests.clear();
|
|
107
113
|
this.followedPeerIdsByFilePath.clear();
|
|
108
114
|
this.overlayRoot?.remove();
|
|
109
115
|
this.overlayRoot = null;
|
|
@@ -242,6 +248,43 @@ export class ExcalidrawEmbedController {
|
|
|
242
248
|
});
|
|
243
249
|
}
|
|
244
250
|
|
|
251
|
+
prepareFileDisconnect(filePath, { timeoutMs = 250 } = {}) {
|
|
252
|
+
const entry = this._findEntryByFilePath(filePath);
|
|
253
|
+
if (!entry?.iframe?.contentWindow) {
|
|
254
|
+
return Promise.resolve(false);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const requestId = `disconnect-${++this.disconnectRequestCounter}`;
|
|
258
|
+
return new Promise((resolve) => {
|
|
259
|
+
const finish = (value) => {
|
|
260
|
+
if (!this.pendingDisconnectRequests.has(requestId)) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const request = this.pendingDisconnectRequests.get(requestId);
|
|
265
|
+
window.clearTimeout(request.timeoutId);
|
|
266
|
+
this.pendingDisconnectRequests.delete(requestId);
|
|
267
|
+
resolve(value);
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
const timeoutId = window.setTimeout(() => {
|
|
271
|
+
finish(false);
|
|
272
|
+
}, timeoutMs);
|
|
273
|
+
|
|
274
|
+
this.pendingDisconnectRequests.set(requestId, {
|
|
275
|
+
entry,
|
|
276
|
+
resolve: finish,
|
|
277
|
+
timeoutId,
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
this._postMessageToEntry(entry, {
|
|
281
|
+
source: 'collabmd-host',
|
|
282
|
+
type: 'prepare-disconnect',
|
|
283
|
+
requestId,
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
245
288
|
_ensurePlaceholderObserver() {
|
|
246
289
|
if (!this.previewContainer) {
|
|
247
290
|
return;
|
|
@@ -422,6 +465,13 @@ export class ExcalidrawEmbedController {
|
|
|
422
465
|
}
|
|
423
466
|
|
|
424
467
|
_destroyEntry(entry) {
|
|
468
|
+
this.pendingDisconnectRequests.forEach((request, requestId) => {
|
|
469
|
+
if (request.entry === entry) {
|
|
470
|
+
request.resolve(false);
|
|
471
|
+
this.pendingDisconnectRequests.delete(requestId);
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
|
|
425
475
|
if (this.maximizedEmbed?.wrapper === entry.wrapper) {
|
|
426
476
|
this._exitMaximizedEmbed();
|
|
427
477
|
}
|
|
@@ -588,14 +638,14 @@ export class ExcalidrawEmbedController {
|
|
|
588
638
|
|
|
589
639
|
const openBtn = document.createElement('button');
|
|
590
640
|
openBtn.type = 'button';
|
|
591
|
-
openBtn.className = 'excalidraw-embed-btn
|
|
641
|
+
openBtn.className = 'excalidraw-embed-btn ui-preview-action ui-preview-action--icon-only';
|
|
592
642
|
openBtn.title = 'Edit in Excalidraw';
|
|
593
643
|
openBtn.setAttribute('aria-label', 'Edit in Excalidraw');
|
|
594
644
|
setDiagramActionButtonIcon(openBtn, 'edit');
|
|
595
645
|
|
|
596
646
|
const maxBtn = document.createElement('button');
|
|
597
647
|
maxBtn.type = 'button';
|
|
598
|
-
maxBtn.className = 'excalidraw-embed-btn
|
|
648
|
+
maxBtn.className = 'excalidraw-embed-btn ui-preview-action ui-preview-action--icon-only';
|
|
599
649
|
maxBtn.title = 'Maximize diagram';
|
|
600
650
|
maxBtn.setAttribute('aria-label', 'Maximize diagram');
|
|
601
651
|
setDiagramActionButtonIcon(maxBtn, 'maximize');
|
|
@@ -915,6 +965,14 @@ export class ExcalidrawEmbedController {
|
|
|
915
965
|
if (msg.type === 'error') {
|
|
916
966
|
entry.isReady = false;
|
|
917
967
|
void this._handleEntryBootTimeout(entry);
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
if (msg.type === 'disconnect-ready') {
|
|
972
|
+
const request = this.pendingDisconnectRequests.get(msg.requestId);
|
|
973
|
+
if (request?.entry === entry) {
|
|
974
|
+
request.resolve(true);
|
|
975
|
+
}
|
|
918
976
|
}
|
|
919
977
|
}
|
|
920
978
|
|