collabmd 0.1.32 → 0.1.33

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.
Files changed (34) hide show
  1. package/dist/client/assets/{drawio-editor-Br4qyh3r.js → drawio-editor-BMTwP5mD.js} +1 -1
  2. package/dist/client/assets/{drawioEditor-ClmnTx5J.js → drawioEditor-D6clB5OH.js} +2 -2
  3. package/dist/client/assets/{editor-session-Cf-iV5-3.js → editor-session-Dzy_85Wp.js} +1 -1
  4. package/dist/client/assets/{excalidraw-editor-CXAxVhlw.js → excalidraw-editor-CAP9F8CB.js} +3 -3
  5. package/dist/client/assets/{excalidrawEditor-DoH_kMdu.js → excalidrawEditor-DD4AvzYP.js} +2 -2
  6. package/dist/client/assets/{exportDocument-9wTrBZNS.css → exportDocument-BbkN85c4.css} +1 -1
  7. package/dist/client/assets/index-BIt5EZXz.css +1 -0
  8. package/dist/client/assets/{index-C8QZYHvV.js → index-Czg_KL-i.js} +2 -2
  9. package/dist/client/assets/{main-BjHHMlv0.js → main-DeowJOSp.js} +261 -142
  10. package/dist/client/assets/{vault-api-client-Bf9tB_GW.js → vault-api-client-p7h7cXKM.js} +1 -1
  11. package/dist/client/drawio-editor.html +1 -1
  12. package/dist/client/excalidraw-editor.html +1 -1
  13. package/dist/client/export-document.html +2 -2
  14. package/dist/client/index.html +2 -2
  15. package/package.json +5 -5
  16. package/src/client/bootstrap/collabmd-app-shell.js +6 -0
  17. package/src/client/infrastructure/editor-session.js +4 -0
  18. package/src/client/infrastructure/editor-view-adapter.js +23 -0
  19. package/src/client/infrastructure/vault-api-client.js +48 -0
  20. package/src/client/presentation/bases-preview-controller.js +1388 -28
  21. package/src/client/presentation/comments-panel.js +50 -5
  22. package/src/client/styles/components/scrollbars.css +5 -0
  23. package/src/client/styles/features/preview-markdown.css +468 -23
  24. package/src/server/domain/backlink-index.js +177 -5
  25. package/src/server/domain/bases/base-definition.js +138 -11
  26. package/src/server/domain/bases/base-expression-runtime.js +54 -17
  27. package/src/server/domain/bases/base-index-snapshot-store.js +167 -20
  28. package/src/server/domain/bases/base-query-metadata.js +242 -0
  29. package/src/server/domain/bases/base-query-results.js +18 -8
  30. package/src/server/domain/bases/base-query-service.js +360 -49
  31. package/src/server/domain/bases/base-transform.js +116 -0
  32. package/src/server/infrastructure/http/create-vault-api-query-handler.js +52 -0
  33. package/dist/client/assets/index-CxSbUTs2.css +0 -1
  34. /package/dist/client/assets/{exportDocument-Bia2hI25.js → exportDocument-Zfwq1XVx.js} +0 -0
@@ -37,6 +37,47 @@ function sortThreads(threads = []) {
37
37
  ));
38
38
  }
39
39
 
40
+ export function countThreadsForSourceBlocks(blocks = [], threads = []) {
41
+ const normalizedBlocks = blocks
42
+ .map((block, index) => {
43
+ const startLine = Number(block?.startLine);
44
+ const endLine = Number(block?.endLine ?? startLine);
45
+ if (!Number.isFinite(startLine) || startLine <= 0) {
46
+ return null;
47
+ }
48
+
49
+ return {
50
+ endExclusive: Math.max(endLine, startLine + 1),
51
+ index,
52
+ startLine,
53
+ };
54
+ })
55
+ .filter(Boolean)
56
+ .sort((left, right) => (
57
+ left.startLine - right.startLine
58
+ || left.endExclusive - right.endExclusive
59
+ || left.index - right.index
60
+ ));
61
+ const counts = new Array(blocks.length).fill(0);
62
+ let threadIndex = 0;
63
+
64
+ normalizedBlocks.forEach((block) => {
65
+ while (threadIndex < threads.length && (threads[threadIndex]?.anchor?.startLine ?? 0) < block.startLine) {
66
+ threadIndex += 1;
67
+ }
68
+
69
+ let countIndex = threadIndex;
70
+ while (countIndex < threads.length && (threads[countIndex]?.anchor?.startLine ?? 0) < block.endExclusive) {
71
+ countIndex += 1;
72
+ }
73
+
74
+ counts[block.index] = countIndex - threadIndex;
75
+ threadIndex = countIndex;
76
+ });
77
+
78
+ return counts;
79
+ }
80
+
40
81
  export class CommentsPanel {
41
82
  constructor({
42
83
  panelElement,
@@ -236,18 +277,22 @@ export class CommentsPanel {
236
277
 
237
278
  const blocks = Array.from(this.previewElement.querySelectorAll('[data-source-line]'))
238
279
  .filter((element) => isLeafSourceBlock(element) && isCommentablePreviewBlock(element));
280
+ const threadCounts = countThreadsForSourceBlocks(
281
+ blocks.map((block) => ({
282
+ endLine: parseLineNumber(block.getAttribute('data-source-line-end')) ?? parseLineNumber(block.getAttribute('data-source-line')) ?? 1,
283
+ startLine: parseLineNumber(block.getAttribute('data-source-line')),
284
+ })),
285
+ this.threads,
286
+ );
239
287
 
240
- blocks.forEach((block) => {
288
+ blocks.forEach((block, index) => {
241
289
  const startLine = parseLineNumber(block.getAttribute('data-source-line'));
242
290
  const endLine = parseLineNumber(block.getAttribute('data-source-line-end')) ?? (startLine ?? 1);
243
291
  if (!startLine) {
244
292
  return;
245
293
  }
246
294
 
247
- const matchingThreads = this.threads.filter((thread) => (
248
- thread.anchor?.startLine >= startLine && thread.anchor?.startLine < Math.max(endLine, startLine + 1)
249
- ));
250
- const totalCount = matchingThreads.length;
295
+ const totalCount = threadCounts[index] ?? 0;
251
296
  const button = document.createElement('button');
252
297
  button.type = 'button';
253
298
  button.className = 'comment-anchor-btn';
@@ -5,6 +5,7 @@
5
5
  .file-tree,
6
6
  .git-panel,
7
7
  .diff-scroll,
8
+ .backlinks-body,
8
9
  .comments-drawer-list,
9
10
  .comments-drawer-item-quote,
10
11
  .comment-card-quote,
@@ -26,6 +27,7 @@
26
27
  .file-tree::-webkit-scrollbar,
27
28
  .git-panel::-webkit-scrollbar,
28
29
  .diff-scroll::-webkit-scrollbar,
30
+ .backlinks-body::-webkit-scrollbar,
29
31
  .comments-drawer-list::-webkit-scrollbar,
30
32
  .comments-drawer-item-quote::-webkit-scrollbar,
31
33
  .comment-card-quote::-webkit-scrollbar,
@@ -47,6 +49,7 @@
47
49
  .file-tree::-webkit-scrollbar-track,
48
50
  .git-panel::-webkit-scrollbar-track,
49
51
  .diff-scroll::-webkit-scrollbar-track,
52
+ .backlinks-body::-webkit-scrollbar-track,
50
53
  .comments-drawer-list::-webkit-scrollbar-track,
51
54
  .comments-drawer-item-quote::-webkit-scrollbar-track,
52
55
  .comment-card-quote::-webkit-scrollbar-track,
@@ -67,6 +70,7 @@
67
70
  .file-tree::-webkit-scrollbar-thumb,
68
71
  .git-panel::-webkit-scrollbar-thumb,
69
72
  .diff-scroll::-webkit-scrollbar-thumb,
73
+ .backlinks-body::-webkit-scrollbar-thumb,
70
74
  .comments-drawer-list::-webkit-scrollbar-thumb,
71
75
  .comments-drawer-item-quote::-webkit-scrollbar-thumb,
72
76
  .comment-card-quote::-webkit-scrollbar-thumb,
@@ -88,6 +92,7 @@
88
92
  .file-tree::-webkit-scrollbar-thumb:hover,
89
93
  .git-panel::-webkit-scrollbar-thumb:hover,
90
94
  .diff-scroll::-webkit-scrollbar-thumb:hover,
95
+ .backlinks-body::-webkit-scrollbar-thumb:hover,
91
96
  .comments-drawer-list::-webkit-scrollbar-thumb:hover,
92
97
  .comments-drawer-item-quote::-webkit-scrollbar-thumb:hover,
93
98
  .comment-card-quote::-webkit-scrollbar-thumb:hover,