collabmd 0.1.31 → 0.1.32
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/dist/client/assets/{drawio-editor-B4sHHwWJ.js → drawio-editor-Br4qyh3r.js} +1 -1
- package/dist/client/assets/drawioEditor-ClmnTx5J.js +2 -0
- package/dist/client/assets/{editor-session-BKHEYkbY.js → editor-session-Cf-iV5-3.js} +2 -2
- package/dist/client/assets/embedded-editor-base-CgEkjNYn.css +1 -0
- package/dist/client/assets/{excalidraw-editor-CHbeNZu6.js → excalidraw-editor-CXAxVhlw.js} +2 -2
- package/dist/client/assets/{excalidrawEditor-BhaTX2Ko.js → excalidrawEditor-DoH_kMdu.js} +2 -2
- package/dist/client/assets/exportDocument-9wTrBZNS.css +1 -0
- package/dist/client/assets/{index-kPgEYvEX.js → index-C8QZYHvV.js} +2 -2
- package/dist/client/assets/index-CxSbUTs2.css +1 -0
- package/dist/client/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/dist/client/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/dist/client/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/dist/client/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/dist/client/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/dist/client/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/dist/client/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/client/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/client/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/client/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/client/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/client/assets/main-BjHHMlv0.js +1249 -0
- package/dist/client/assets/vault-api-client-Bf9tB_GW.js +1 -0
- package/dist/client/assets/vault-api-client-D7Ck0CvR.css +1 -0
- package/dist/client/drawio-editor.html +1 -1
- package/dist/client/excalidraw-editor.html +1 -1
- package/dist/client/export-document.html +2 -2
- package/dist/client/index.html +2 -2
- package/package.json +4 -1
- package/src/client/app/main-entry.js +2 -0
- package/src/client/application/app-shell/git-feature.js +28 -36
- package/src/client/application/app-shell/presence-feature.js +3 -1
- package/src/client/application/diagram-preview-hydrator.js +24 -15
- package/src/client/application/mermaid-preview-hydrator.js +121 -4
- package/src/client/application/plantuml-preview-hydrator.js +6 -16
- package/src/client/application/preview-renderer.js +11 -2
- package/src/client/bootstrap/collabmd-app-shell.js +176 -50
- package/src/client/domain/excalidraw-document-switch.js +3 -0
- package/src/client/excalidraw-editor.js +187 -84
- package/src/client/infrastructure/auth-client.js +4 -4
- package/src/client/infrastructure/backlinks-api-client.js +18 -0
- package/src/client/infrastructure/comment-thread-store.js +4 -0
- package/src/client/infrastructure/editor-session.js +2 -0
- package/src/client/infrastructure/git-api-client.js +134 -0
- package/src/client/infrastructure/plantuml-api-client.js +21 -0
- package/src/client/infrastructure/vault-api-client.js +67 -0
- package/src/client/presentation/backlinks-panel.js +6 -9
- package/src/client/presentation/bases-preview-controller.js +26 -7
- package/src/client/presentation/excalidraw-embed-controller.js +251 -15
- package/src/client/presentation/excalidraw-embed-reconciler.js +0 -1
- package/src/client/presentation/file-action-controller.js +97 -0
- package/src/client/presentation/file-explorer-controller.js +2 -0
- package/src/client/presentation/file-explorer-view.js +368 -0
- package/src/client/presentation/file-history-view-controller.js +41 -40
- package/src/client/presentation/git-diff-view-controller.js +70 -53
- package/src/client/presentation/git-panel-controller.js +12 -30
- package/src/client/styles/export-document.css +45 -2
- package/src/client/styles/features/auth-gate.css +13 -24
- package/src/client/styles/features/comment-card.css +6 -0
- package/src/client/styles/features/comments-drawer.css +38 -18
- package/src/client/styles/features/diagram-preview.css +33 -0
- package/src/client/styles/features/embedded-preview.css +37 -11
- package/src/client/styles/features/preview-markdown.css +103 -28
- package/src/client/styles/foundation/themes.css +4 -0
- package/src/client/styles/foundation/tokens.css +4 -3
- package/src/client/styles/layout/sidebar.css +72 -0
- package/src/server/auth/auth-common.js +224 -0
- package/src/server/auth/auth-constants.js +30 -0
- package/src/server/auth/auth-strategies.js +320 -0
- package/src/server/auth/create-auth-service.js +24 -545
- package/src/server/domain/bases/base-definition.js +255 -0
- package/src/server/domain/bases/base-expression-runtime.js +1159 -0
- package/src/server/domain/bases/base-index-snapshot-store.js +418 -0
- package/src/server/domain/bases/base-query-results.js +205 -0
- package/src/server/domain/bases/base-query-service.js +68 -1965
- package/src/server/domain/collaboration/collaboration-room.js +36 -1
- package/src/server/domain/collaboration/room-client-state-store.js +1 -0
- package/src/server/domain/collaboration/room-persistence-controller.js +1 -1
- package/src/server/infrastructure/http/create-vault-api-query-handler.js +109 -1
- package/src/server/infrastructure/http/http-response.js +56 -0
- package/src/server/infrastructure/persistence/vault-file-store.js +110 -0
- package/dist/client/assets/drawioEditor-DGpo2hcx.js +0 -2
- package/dist/client/assets/embedded-editor-base-DgmRcsR8.css +0 -1
- package/dist/client/assets/exportDocument-DmV7Gngb.css +0 -1
- package/dist/client/assets/index-D69HOZHr.css +0 -1
- package/dist/client/assets/main-DSxNTtD-.js +0 -1243
- package/dist/client/assets/vault-api-client-BzHQseMN.js +0 -1
- package/dist/client/assets/vault-api-client-De7kMvrE.css +0 -1
- /package/dist/client/assets/{exportDocument-CtZKWE2c.js → exportDocument-Bia2hI25.js} +0 -0
|
@@ -17,7 +17,10 @@ import { BrowserNavigationPort } from '../infrastructure/browser-navigation-port
|
|
|
17
17
|
import { BrowserNotificationPort } from '../infrastructure/browser-notification-port.js';
|
|
18
18
|
import { BrowserPreferencesPort } from '../infrastructure/browser-preferences-port.js';
|
|
19
19
|
import { AppVersionMonitor } from '../infrastructure/app-version-monitor.js';
|
|
20
|
+
import { backlinksApiClient } from '../infrastructure/backlinks-api-client.js';
|
|
21
|
+
import { gitApiClient } from '../infrastructure/git-api-client.js';
|
|
20
22
|
import { getRuntimeConfig } from '../infrastructure/runtime-config.js';
|
|
23
|
+
import { plantUmlApiClient } from '../infrastructure/plantuml-api-client.js';
|
|
21
24
|
import { TabActivityLock } from '../infrastructure/tab-activity-lock.js';
|
|
22
25
|
import { vaultApiClient } from '../infrastructure/vault-api-client.js';
|
|
23
26
|
import { WorkspaceSyncClient } from '../infrastructure/workspace-sync-client.js';
|
|
@@ -39,58 +42,169 @@ import { VideoEmbedController } from '../presentation/video-embed-controller.js'
|
|
|
39
42
|
import { ImageLightboxController } from '../presentation/image-lightbox-controller.js';
|
|
40
43
|
import { renderAppShell } from '../presentation/app-shell-renderer.js';
|
|
41
44
|
|
|
42
|
-
const APP_SHELL_FEATURES = Object.freeze({
|
|
43
|
-
chat: chatFeature,
|
|
44
|
-
comments: commentsFeature,
|
|
45
|
-
export: exportFeature,
|
|
46
|
-
git: gitFeature,
|
|
47
|
-
presence: presenceFeature,
|
|
48
|
-
ui: uiFeature,
|
|
49
|
-
workspace: workspaceFeature,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
function installAppShellFeatures(appShell) {
|
|
53
|
-
const featureMethodOwners = {};
|
|
54
|
-
|
|
55
|
-
Object.entries(APP_SHELL_FEATURES).forEach(([featureName, feature]) => {
|
|
56
|
-
Object.entries(feature).forEach(([methodName, method]) => {
|
|
57
|
-
if (typeof method !== 'function') {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (Object.hasOwn(featureMethodOwners, methodName)) {
|
|
62
|
-
throw new Error(
|
|
63
|
-
`CollabMdAppShell feature method "${methodName}" is declared by both "${featureMethodOwners[methodName]}" and "${featureName}".`,
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (methodName in appShell) {
|
|
68
|
-
throw new Error(
|
|
69
|
-
`CollabMdAppShell feature method "${methodName}" conflicts with an existing app shell member.`,
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
Object.defineProperty(appShell, methodName, {
|
|
74
|
-
configurable: true,
|
|
75
|
-
enumerable: false,
|
|
76
|
-
value: method.bind(appShell),
|
|
77
|
-
writable: false,
|
|
78
|
-
});
|
|
79
|
-
featureMethodOwners[methodName] = featureName;
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
Object.defineProperty(appShell, 'featureMethodOwners', {
|
|
84
|
-
configurable: false,
|
|
85
|
-
enumerable: false,
|
|
86
|
-
value: Object.freeze(featureMethodOwners),
|
|
87
|
-
writable: false,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
45
|
export class CollabMdAppShell {
|
|
46
|
+
updateChatMessages(...args) { return chatFeature.updateChatMessages.apply(this, args); }
|
|
47
|
+
toggleChatPanel(...args) { return chatFeature.toggleChatPanel.apply(this, args); }
|
|
48
|
+
openChatPanel(...args) { return chatFeature.openChatPanel.apply(this, args); }
|
|
49
|
+
closeChatPanel(...args) { return chatFeature.closeChatPanel.apply(this, args); }
|
|
50
|
+
handleChatSubmit(...args) { return chatFeature.handleChatSubmit.apply(this, args); }
|
|
51
|
+
renderChat(...args) { return chatFeature.renderChat.apply(this, args); }
|
|
52
|
+
createChatMessageElement(...args) { return chatFeature.createChatMessageElement.apply(this, args); }
|
|
53
|
+
scrollChatToBottom(...args) { return chatFeature.scrollChatToBottom.apply(this, args); }
|
|
54
|
+
formatChatTimestamp(...args) { return chatFeature.formatChatTimestamp.apply(this, args); }
|
|
55
|
+
getChatMessageFileLabel(...args) { return chatFeature.getChatMessageFileLabel.apply(this, args); }
|
|
56
|
+
formatChatToastMessage(...args) { return chatFeature.formatChatToastMessage.apply(this, args); }
|
|
57
|
+
syncChatToggleButton(...args) { return chatFeature.syncChatToggleButton.apply(this, args); }
|
|
58
|
+
syncChatNotificationButton(...args) { return chatFeature.syncChatNotificationButton.apply(this, args); }
|
|
59
|
+
handleChatNotificationToggle(...args) { return chatFeature.handleChatNotificationToggle.apply(this, args); }
|
|
60
|
+
maybeNotifyChatMessage(...args) { return chatFeature.maybeNotifyChatMessage.apply(this, args); }
|
|
61
|
+
maybeShowBrowserChatNotification(...args) { return chatFeature.maybeShowBrowserChatNotification.apply(this, args); }
|
|
62
|
+
getCommentFileKind(...args) { return commentsFeature.getCommentFileKind.apply(this, args); }
|
|
63
|
+
syncCommentChrome(...args) { return commentsFeature.syncCommentChrome.apply(this, args); }
|
|
64
|
+
handleCommentSelectionChange(...args) { return commentsFeature.handleCommentSelectionChange.apply(this, args); }
|
|
65
|
+
handleCommentThreadsChange(...args) { return commentsFeature.handleCommentThreadsChange.apply(this, args); }
|
|
66
|
+
handleCommentEditorContentChange(...args) { return commentsFeature.handleCommentEditorContentChange.apply(this, args); }
|
|
67
|
+
refreshCommentUiLayout(...args) { return commentsFeature.refreshCommentUiLayout.apply(this, args); }
|
|
68
|
+
initializeExportBridge(...args) { return exportFeature.initializeExportBridge.apply(this, args); }
|
|
69
|
+
handleExportRequest(...args) { return exportFeature.handleExportRequest.apply(this, args); }
|
|
70
|
+
formatPullBackupToast(...args) { return gitFeature.formatPullBackupToast.apply(this, args); }
|
|
71
|
+
setGitOperationStatus(...args) { return gitFeature.setGitOperationStatus.apply(this, args); }
|
|
72
|
+
runGitActionWithStatus(...args) { return gitFeature.runGitActionWithStatus.apply(this, args); }
|
|
73
|
+
handleGitDiffSelection(...args) { return gitFeature.handleGitDiffSelection.apply(this, args); }
|
|
74
|
+
handleGitCommitSelection(...args) { return gitFeature.handleGitCommitSelection.apply(this, args); }
|
|
75
|
+
handleGitHistorySelection(...args) { return gitFeature.handleGitHistorySelection.apply(this, args); }
|
|
76
|
+
handleGitFileHistorySelection(...args) { return gitFeature.handleGitFileHistorySelection.apply(this, args); }
|
|
77
|
+
handleGitFilePreviewSelection(...args) { return gitFeature.handleGitFilePreviewSelection.apply(this, args); }
|
|
78
|
+
handleGitRepoChange(...args) { return gitFeature.handleGitRepoChange.apply(this, args); }
|
|
79
|
+
syncFileHistoryButton(...args) { return gitFeature.syncFileHistoryButton.apply(this, args); }
|
|
80
|
+
syncMainChrome(...args) { return gitFeature.syncMainChrome.apply(this, args); }
|
|
81
|
+
showGitDiff(...args) { return gitFeature.showGitDiff.apply(this, args); }
|
|
82
|
+
showGitCommit(...args) { return gitFeature.showGitCommit.apply(this, args); }
|
|
83
|
+
showGitHistory(...args) { return gitFeature.showGitHistory.apply(this, args); }
|
|
84
|
+
showGitFileHistory(...args) { return gitFeature.showGitFileHistory.apply(this, args); }
|
|
85
|
+
showGitFilePreview(...args) { return gitFeature.showGitFilePreview.apply(this, args); }
|
|
86
|
+
postGitAction(...args) { return gitFeature.postGitAction.apply(this, args); }
|
|
87
|
+
refreshWorkspaceAfterGitAction(...args) { return gitFeature.refreshWorkspaceAfterGitAction.apply(this, args); }
|
|
88
|
+
refreshGitAfterAction(...args) { return gitFeature.refreshGitAfterAction.apply(this, args); }
|
|
89
|
+
finalizeGitAction(...args) { return gitFeature.finalizeGitAction.apply(this, args); }
|
|
90
|
+
handleWorkspaceChangeForCurrentFile(...args) { return gitFeature.handleWorkspaceChangeForCurrentFile.apply(this, args); }
|
|
91
|
+
handleIncomingWorkspaceEvent(...args) { return gitFeature.handleIncomingWorkspaceEvent.apply(this, args); }
|
|
92
|
+
stageGitFile(...args) { return gitFeature.stageGitFile.apply(this, args); }
|
|
93
|
+
unstageGitFile(...args) { return gitFeature.unstageGitFile.apply(this, args); }
|
|
94
|
+
pushGitBranch(...args) { return gitFeature.pushGitBranch.apply(this, args); }
|
|
95
|
+
pullGitBranch(...args) { return gitFeature.pullGitBranch.apply(this, args); }
|
|
96
|
+
openGitResetDialog(...args) { return gitFeature.openGitResetDialog.apply(this, args); }
|
|
97
|
+
handleGitResetSubmit(...args) { return gitFeature.handleGitResetSubmit.apply(this, args); }
|
|
98
|
+
openGitCommitDialog(...args) { return gitFeature.openGitCommitDialog.apply(this, args); }
|
|
99
|
+
handleGitCommitSubmit(...args) { return gitFeature.handleGitCommitSubmit.apply(this, args); }
|
|
100
|
+
updateGlobalUsers(...args) { return presenceFeature.updateGlobalUsers.apply(this, args); }
|
|
101
|
+
updateFileAwareness(...args) { return presenceFeature.updateFileAwareness.apply(this, args); }
|
|
102
|
+
renderPresence(...args) { return presenceFeature.renderPresence.apply(this, args); }
|
|
103
|
+
renderAvatars(...args) { return presenceFeature.renderAvatars.apply(this, args); }
|
|
104
|
+
toggleFollowUser(...args) { return presenceFeature.toggleFollowUser.apply(this, args); }
|
|
105
|
+
stopFollowingUser(...args) { return presenceFeature.stopFollowingUser.apply(this, args); }
|
|
106
|
+
syncFollowedUser(...args) { return presenceFeature.syncFollowedUser.apply(this, args); }
|
|
107
|
+
followUserCursor(...args) { return presenceFeature.followUserCursor.apply(this, args); }
|
|
108
|
+
followExcalidrawUser(...args) { return presenceFeature.followExcalidrawUser.apply(this, args); }
|
|
109
|
+
resolveFileClientId(...args) { return presenceFeature.resolveFileClientId.apply(this, args); }
|
|
110
|
+
bindEvents(...args) { return uiFeature.bindEvents.apply(this, args); }
|
|
111
|
+
clearInitialFileBootstrap(...args) { return uiFeature.clearInitialFileBootstrap.apply(this, args); }
|
|
112
|
+
closeToolbarOverflowMenu(...args) { return uiFeature.closeToolbarOverflowMenu.apply(this, args); }
|
|
113
|
+
getStoredLineWrapping(...args) { return uiFeature.getStoredLineWrapping.apply(this, args); }
|
|
114
|
+
handleConnectionChange(...args) { return uiFeature.handleConnectionChange.apply(this, args); }
|
|
115
|
+
handlePreviewContentClick(...args) { return uiFeature.handlePreviewContentClick.apply(this, args); }
|
|
116
|
+
handleThemeChange(...args) { return uiFeature.handleThemeChange.apply(this, args); }
|
|
117
|
+
hideEditorLoading(...args) { return uiFeature.hideEditorLoading.apply(this, args); }
|
|
118
|
+
initialize(...args) { return uiFeature.initialize.apply(this, args); }
|
|
119
|
+
initializeVisualViewportBinding(...args) { return uiFeature.initializeVisualViewportBinding.apply(this, args); }
|
|
120
|
+
initializeVersionMonitoring(...args) { return uiFeature.initializeVersionMonitoring.apply(this, args); }
|
|
121
|
+
promptForVersionReload(...args) { return uiFeature.promptForVersionReload.apply(this, args); }
|
|
122
|
+
scheduleBacklinkRefresh(...args) { return uiFeature.scheduleBacklinkRefresh.apply(this, args); }
|
|
123
|
+
setToolbarOverflowOpen(...args) { return uiFeature.setToolbarOverflowOpen.apply(this, args); }
|
|
124
|
+
showEditorLoadError(...args) { return uiFeature.showEditorLoadError.apply(this, args); }
|
|
125
|
+
showEditorLoading(...args) { return uiFeature.showEditorLoading.apply(this, args); }
|
|
126
|
+
syncVisualViewportBounds(...args) { return uiFeature.syncVisualViewportBounds.apply(this, args); }
|
|
127
|
+
syncToolbarOverflowVisibility(...args) { return uiFeature.syncToolbarOverflowVisibility.apply(this, args); }
|
|
128
|
+
syncWrapToggle(...args) { return uiFeature.syncWrapToggle.apply(this, args); }
|
|
129
|
+
toggleToolbarOverflowMenu(...args) { return uiFeature.toggleToolbarOverflowMenu.apply(this, args); }
|
|
130
|
+
toggleLineWrapping(...args) { return uiFeature.toggleLineWrapping.apply(this, args); }
|
|
131
|
+
applySidebarVisibility(...args) { return uiFeature.applySidebarVisibility.apply(this, args); }
|
|
132
|
+
closeSidebarOnMobile(...args) { return uiFeature.closeSidebarOnMobile.apply(this, args); }
|
|
133
|
+
isMobileViewport(...args) { return uiFeature.isMobileViewport.apply(this, args); }
|
|
134
|
+
restoreSidebarState(...args) { return uiFeature.restoreSidebarState.apply(this, args); }
|
|
135
|
+
setSidebarTab(...args) { return uiFeature.setSidebarTab.apply(this, args); }
|
|
136
|
+
setSidebarVisibility(...args) { return uiFeature.setSidebarVisibility.apply(this, args); }
|
|
137
|
+
toggleSidebar(...args) { return uiFeature.toggleSidebar.apply(this, args); }
|
|
138
|
+
getCurrentUser(...args) { return uiFeature.getCurrentUser.apply(this, args); }
|
|
139
|
+
getCurrentUserName(...args) { return uiFeature.getCurrentUserName.apply(this, args); }
|
|
140
|
+
getStoredUserName(...args) { return uiFeature.getStoredUserName.apply(this, args); }
|
|
141
|
+
handleDisplayNameSubmit(...args) { return uiFeature.handleDisplayNameSubmit.apply(this, args); }
|
|
142
|
+
isIdentityManagedByAuth(...args) { return uiFeature.isIdentityManagedByAuth.apply(this, args); }
|
|
143
|
+
openDisplayNameDialog(...args) { return uiFeature.openDisplayNameDialog.apply(this, args); }
|
|
144
|
+
promptForDisplayNameIfNeeded(...args) { return uiFeature.promptForDisplayNameIfNeeded.apply(this, args); }
|
|
145
|
+
syncCurrentUserName(...args) { return uiFeature.syncCurrentUserName.apply(this, args); }
|
|
146
|
+
syncIdentityManagementUi(...args) { return uiFeature.syncIdentityManagementUi.apply(this, args); }
|
|
147
|
+
applyMarkdownToolbarAction(...args) { return uiFeature.applyMarkdownToolbarAction.apply(this, args); }
|
|
148
|
+
copyCurrentLink(...args) { return uiFeature.copyCurrentLink.apply(this, args); }
|
|
149
|
+
closeMarkdownBlockMenu(...args) { return uiFeature.closeMarkdownBlockMenu.apply(this, args); }
|
|
150
|
+
getActiveMarkdownBlockAction(...args) { return uiFeature.getActiveMarkdownBlockAction.apply(this, args); }
|
|
151
|
+
getMarkdownBlockMenuPopover(...args) { return uiFeature.getMarkdownBlockMenuPopover.apply(this, args); }
|
|
152
|
+
handleEditorImageInsert(...args) { return uiFeature.handleEditorImageInsert.apply(this, args); }
|
|
153
|
+
handleMarkdownToolbarClick(...args) { return uiFeature.handleMarkdownToolbarClick.apply(this, args); }
|
|
154
|
+
handleMarkdownToolbarDocumentPointerDown(...args) { return uiFeature.handleMarkdownToolbarDocumentPointerDown.apply(this, args); }
|
|
155
|
+
handleMarkdownToolbarKeydown(...args) { return uiFeature.handleMarkdownToolbarKeydown.apply(this, args); }
|
|
156
|
+
handleToolbarImageInsert(...args) { return uiFeature.handleToolbarImageInsert.apply(this, args); }
|
|
157
|
+
isMarkdownBlockMenuOpen(...args) { return uiFeature.isMarkdownBlockMenuOpen.apply(this, args); }
|
|
158
|
+
openMarkdownBlockMenu(...args) { return uiFeature.openMarkdownBlockMenu.apply(this, args); }
|
|
159
|
+
positionMarkdownBlockMenu(...args) { return uiFeature.positionMarkdownBlockMenu.apply(this, args); }
|
|
160
|
+
renderMarkdownBlockMenuPopover(...args) { return uiFeature.renderMarkdownBlockMenuPopover.apply(this, args); }
|
|
161
|
+
pickImageFile(...args) { return uiFeature.pickImageFile.apply(this, args); }
|
|
162
|
+
renderMarkdownToolbar(...args) { return uiFeature.renderMarkdownToolbar.apply(this, args); }
|
|
163
|
+
runEditorCommand(...args) { return uiFeature.runEditorCommand.apply(this, args); }
|
|
164
|
+
setActiveMarkdownBlockAction(...args) { return uiFeature.setActiveMarkdownBlockAction.apply(this, args); }
|
|
165
|
+
syncMarkdownToolbarBlockUi(...args) { return uiFeature.syncMarkdownToolbarBlockUi.apply(this, args); }
|
|
166
|
+
toggleMarkdownBlockMenu(...args) { return uiFeature.toggleMarkdownBlockMenu.apply(this, args); }
|
|
167
|
+
handleTabActivated(...args) { return uiFeature.handleTabActivated.apply(this, args); }
|
|
168
|
+
handleTabBlocked(...args) { return uiFeature.handleTabBlocked.apply(this, args); }
|
|
169
|
+
handleTabTakeover(...args) { return uiFeature.handleTabTakeover.apply(this, args); }
|
|
170
|
+
hideTabLockOverlay(...args) { return uiFeature.hideTabLockOverlay.apply(this, args); }
|
|
171
|
+
showTabLockOverlay(...args) { return uiFeature.showTabLockOverlay.apply(this, args); }
|
|
172
|
+
isExcalidrawFile(...args) { return workspaceFeature.isExcalidrawFile.apply(this, args); }
|
|
173
|
+
isBaseFile(...args) { return workspaceFeature.isBaseFile.apply(this, args); }
|
|
174
|
+
isDrawioFile(...args) { return workspaceFeature.isDrawioFile.apply(this, args); }
|
|
175
|
+
isImageFile(...args) { return workspaceFeature.isImageFile.apply(this, args); }
|
|
176
|
+
isMermaidFile(...args) { return workspaceFeature.isMermaidFile.apply(this, args); }
|
|
177
|
+
isPlantUmlFile(...args) { return workspaceFeature.isPlantUmlFile.apply(this, args); }
|
|
178
|
+
createDiagramPreviewDocument(...args) { return workspaceFeature.createDiagramPreviewDocument.apply(this, args); }
|
|
179
|
+
getPreviewSource(...args) { return workspaceFeature.getPreviewSource.apply(this, args); }
|
|
180
|
+
getStaticPreviewDocument(...args) { return workspaceFeature.getStaticPreviewDocument.apply(this, args); }
|
|
181
|
+
setStaticPreviewDocument(...args) { return workspaceFeature.setStaticPreviewDocument.apply(this, args); }
|
|
182
|
+
clearStaticPreviewDocument(...args) { return workspaceFeature.clearStaticPreviewDocument.apply(this, args); }
|
|
183
|
+
supportsFileHistory(...args) { return workspaceFeature.supportsFileHistory.apply(this, args); }
|
|
184
|
+
getDisplayName(...args) { return workspaceFeature.getDisplayName.apply(this, args); }
|
|
185
|
+
resetPreviewMode(...args) { return workspaceFeature.resetPreviewMode.apply(this, args); }
|
|
186
|
+
syncFileChrome(...args) { return workspaceFeature.syncFileChrome.apply(this, args); }
|
|
187
|
+
handleLayoutViewRequest(...args) { return workspaceFeature.handleLayoutViewRequest.apply(this, args); }
|
|
188
|
+
renderExcalidrawFilePreview(...args) { return workspaceFeature.renderExcalidrawFilePreview.apply(this, args); }
|
|
189
|
+
renderDrawioFilePreview(...args) { return workspaceFeature.renderDrawioFilePreview.apply(this, args); }
|
|
190
|
+
renderImageFilePreview(...args) { return workspaceFeature.renderImageFilePreview.apply(this, args); }
|
|
191
|
+
renderBaseFilePreview(...args) { return workspaceFeature.renderBaseFilePreview.apply(this, args); }
|
|
192
|
+
renderTextFilePreview(...args) { return workspaceFeature.renderTextFilePreview.apply(this, args); }
|
|
193
|
+
createResizeHandler(...args) { return workspaceFeature.createResizeHandler.apply(this, args); }
|
|
194
|
+
initializePreviewLayoutObserver(...args) { return workspaceFeature.initializePreviewLayoutObserver.apply(this, args); }
|
|
195
|
+
schedulePreviewLayoutSync(...args) { return workspaceFeature.schedulePreviewLayoutSync.apply(this, args); }
|
|
196
|
+
handleEditorScrollActivityChange(...args) { return workspaceFeature.handleEditorScrollActivityChange.apply(this, args); }
|
|
197
|
+
handleHashChange(...args) { return workspaceFeature.handleHashChange.apply(this, args); }
|
|
198
|
+
showEmptyState(...args) { return workspaceFeature.showEmptyState.apply(this, args); }
|
|
199
|
+
showDiffState(...args) { return workspaceFeature.showDiffState.apply(this, args); }
|
|
200
|
+
openFile(...args) { return workspaceFeature.openFile.apply(this, args); }
|
|
201
|
+
cleanupSession(...args) { return workspaceFeature.cleanupSession.apply(this, args); }
|
|
202
|
+
handleWikiLinkClick(...args) { return workspaceFeature.handleWikiLinkClick.apply(this, args); }
|
|
203
|
+
normalizeNewWikiFilePath(...args) { return workspaceFeature.normalizeNewWikiFilePath.apply(this, args); }
|
|
204
|
+
createAndOpenFile(...args) { return workspaceFeature.createAndOpenFile.apply(this, args); }
|
|
205
|
+
handleFileSelection(...args) { return workspaceFeature.handleFileSelection.apply(this, args); }
|
|
206
|
+
|
|
92
207
|
constructor() {
|
|
93
|
-
installAppShellFeatures(this);
|
|
94
208
|
renderAppShell(document);
|
|
95
209
|
this.elements = bindAppShellElements(document);
|
|
96
210
|
this.runtimeConfig = getRuntimeConfig();
|
|
@@ -103,6 +217,9 @@ export class CollabMdAppShell {
|
|
|
103
217
|
userNameKey: 'collabmd-user-name',
|
|
104
218
|
});
|
|
105
219
|
this.notifications = new BrowserNotificationPort();
|
|
220
|
+
this.backlinksApiClient = backlinksApiClient;
|
|
221
|
+
this.gitApiClient = gitApiClient;
|
|
222
|
+
this.plantUmlApiClient = plantUmlApiClient;
|
|
106
223
|
this.vaultApiClient = vaultApiClient;
|
|
107
224
|
this._session = null;
|
|
108
225
|
this._hasPromptedForDisplayName = false;
|
|
@@ -160,6 +277,7 @@ export class CollabMdAppShell {
|
|
|
160
277
|
});
|
|
161
278
|
this.gitPanel = new GitPanelController({
|
|
162
279
|
enabled: this.runtimeConfig.gitEnabled !== false,
|
|
280
|
+
gitApiClient: this.gitApiClient,
|
|
163
281
|
onCommitStaged: () => this.openGitCommitDialog(),
|
|
164
282
|
onOpenPullBackup: (filePath) => filePath && this.navigation.navigateToFile(filePath),
|
|
165
283
|
onPullBranch: () => this.pullGitBranch(),
|
|
@@ -199,6 +317,10 @@ export class CollabMdAppShell {
|
|
|
199
317
|
this.previewRenderer = new PreviewRenderer({
|
|
200
318
|
getContent: () => this.getPreviewSource(),
|
|
201
319
|
getFileList: () => this.fileExplorer.flatDocumentFiles,
|
|
320
|
+
loadFileSource: async (filePath) => {
|
|
321
|
+
const payload = await this.vaultApiClient.readFile(filePath);
|
|
322
|
+
return String(payload?.content ?? '');
|
|
323
|
+
},
|
|
202
324
|
getSourceFilePath: () => this.currentFilePath,
|
|
203
325
|
onAfterRenderCommit: (_previewElement, stats) => {
|
|
204
326
|
this.recordFileOpenMetric('preview_committed', {
|
|
@@ -234,6 +356,7 @@ export class CollabMdAppShell {
|
|
|
234
356
|
this.refreshCommentUiLayout();
|
|
235
357
|
},
|
|
236
358
|
outlineController: this.outlineController,
|
|
359
|
+
plantUmlRenderClient: this.plantUmlApiClient,
|
|
237
360
|
previewContainer: this.elements.previewContainer,
|
|
238
361
|
previewElement: this.elements.previewContent,
|
|
239
362
|
});
|
|
@@ -253,6 +376,7 @@ export class CollabMdAppShell {
|
|
|
253
376
|
this.backlinksPanel = new BacklinksPanel({
|
|
254
377
|
headerPanelElement: this.elements.backlinksHeaderPanel,
|
|
255
378
|
inlinePanelElement: this.elements.backlinksInlinePanel,
|
|
379
|
+
loadBacklinks: (filePath, options = {}) => this.backlinksApiClient.readBacklinks(filePath, options),
|
|
256
380
|
onFileSelect: (filePath) => this.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
|
|
257
381
|
panelElement: this.elements.backlinksPanel,
|
|
258
382
|
});
|
|
@@ -321,6 +445,7 @@ export class CollabMdAppShell {
|
|
|
321
445
|
vaultApiClient: this.vaultApiClient,
|
|
322
446
|
});
|
|
323
447
|
this.gitDiffView = new GitDiffViewController({
|
|
448
|
+
gitApiClient: this.gitApiClient,
|
|
324
449
|
onBackToHistory: ({ historyFilePath } = {}) => {
|
|
325
450
|
if (historyFilePath) {
|
|
326
451
|
this.navigation.navigateToGitFileHistory({ filePath: historyFilePath });
|
|
@@ -336,6 +461,7 @@ export class CollabMdAppShell {
|
|
|
336
461
|
});
|
|
337
462
|
this.fileHistoryView = new FileHistoryViewController({
|
|
338
463
|
diffRenderer: this.gitDiffView,
|
|
464
|
+
gitApiClient: this.gitApiClient,
|
|
339
465
|
onOpenCommitDiff: (hash, { historyFilePath, path }) => this.handleGitCommitSelection(hash, {
|
|
340
466
|
closeSidebarOnMobile: false,
|
|
341
467
|
historyFilePath,
|