@hiai-gg/docsmint 0.3.7 → 0.3.8

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 (196) hide show
  1. package/backend/src/lib/logger.ts +45 -15
  2. package/dist/backend/index.js +238 -150
  3. package/dist/frontend/CategoryDialog-DphkZqIB.js +611 -0
  4. package/dist/frontend/ConfirmDialog-BLF3x_hr.js +214 -0
  5. package/dist/frontend/CreateSnapshotDialog-D5vPvFTL.js +216 -0
  6. package/dist/frontend/DatePicker-CLNTdvTk.js +259 -0
  7. package/dist/frontend/DeleteDialog-DxYFJivN.js +174 -0
  8. package/dist/frontend/FolderDialog-CRVZM2Oi.js +250 -0
  9. package/dist/frontend/FolderNode-C2zG7uii.js +298 -0
  10. package/dist/frontend/FolderTreeSelector-CyB8y2Sm.js +103 -0
  11. package/dist/frontend/Icon-CooFj4Ee.js +64 -0
  12. package/dist/frontend/SettingsDialog-DCM4-N6_.js +1016 -0
  13. package/dist/frontend/ShareDialog-DYu3RKQu.js +165 -0
  14. package/dist/frontend/TagCreateDialog-DXQs2bL9.js +260 -0
  15. package/dist/frontend/camera-iKXDOOWT.js +29 -0
  16. package/dist/frontend/check-D-UuvBuh.js +25 -0
  17. package/dist/frontend/chevron-down-CiPtYyFh.js +25 -0
  18. package/dist/frontend/circle-check-tSPE1V6t.js +29 -0
  19. package/dist/frontend/clock-DJHbHZb8.js +29 -0
  20. package/dist/frontend/{bundle-mjs-CP6Owz-8.js → clsx-C7bIvsDS.js} +16 -1
  21. package/dist/frontend/components/category-dialog.js +1 -1
  22. package/dist/frontend/components/create-snapshot-dialog.js +1 -1
  23. package/dist/frontend/components/delete-dialog.js +1 -1
  24. package/dist/frontend/components/editor/document-editor.js +1364 -1353
  25. package/dist/frontend/components/editor/document-title.js +25 -25
  26. package/dist/frontend/components/editor/markdown-toggle.js +45 -45
  27. package/dist/frontend/components/folder-node.js +1 -1
  28. package/dist/frontend/components/folder-tree-selector.js +1 -1
  29. package/dist/frontend/components/save-as-dialog.js +169 -151
  30. package/dist/frontend/components/settings.js +1 -1
  31. package/dist/frontend/components/share-dialog.js +1 -1
  32. package/dist/frontend/components/sidebar.js +1161 -1153
  33. package/dist/frontend/components/tag-create-dialog.js +1 -1
  34. package/dist/frontend/components/version-history.js +188 -187
  35. package/dist/frontend/copy-GppwRMjX.js +32 -0
  36. package/dist/frontend/dashboard.js +1188 -1156
  37. package/dist/frontend/dialog-D6NxYVmy.js +213 -0
  38. package/dist/frontend/doc-tabs.js +2 -2
  39. package/dist/frontend/ellipsis-vertical-P9MHvCps.js +530 -0
  40. package/dist/frontend/extension.js +8 -8
  41. package/dist/frontend/{floating-layer-anchor-C51M4l6v.js → floating-layer-anchor-CPwucTfd.js} +1414 -1412
  42. package/dist/frontend/folder-DeWhnD7O.js +45 -0
  43. package/dist/frontend/folder-refresh.js +1 -1
  44. package/dist/frontend/input-B5Rak-5G.js +23 -0
  45. package/dist/frontend/keyboard.js +1 -1
  46. package/dist/frontend/{keyboard.svelte-D7H8DihC.js → keyboard.svelte-CApmX0vl.js} +53 -53
  47. package/dist/frontend/label-CW9rxoAb.js +30 -0
  48. package/dist/frontend/{loader-circle-Bk-WFz9g.js → loader-circle-BA6aLO71.js} +86 -85
  49. package/dist/frontend/rotate-ccw-B4Q7brmV.js +25 -0
  50. package/dist/frontend/search.js +680 -654
  51. package/dist/frontend/select-value-sF86Geyh.js +1446 -0
  52. package/dist/frontend/shared-document.js +94 -94
  53. package/dist/frontend/subfolders-refresh-store.svelte-B2dKVmgz.js +65 -0
  54. package/dist/frontend/tag-HxRazVN_.js +54 -0
  55. package/dist/frontend/tag-store.svelte-CqrUXo0o.js +29 -0
  56. package/dist/frontend/textarea-i1720bE7.js +23 -0
  57. package/dist/frontend/theme.js +1 -1
  58. package/dist/frontend/theme.svelte-DKfCy12k.js +49 -0
  59. package/dist/frontend/{utils-C0OW2678.js → utils-CffiyuTo.js} +2 -3
  60. package/dist/frontend/{utils-D8kmM3ub.js → utils-hzdMVeCv.js} +2 -3
  61. package/dist/frontend/utils.js +1 -1
  62. package/dist/frontend/x-CzBsnJ2x.js +25 -0
  63. package/dist/frontend-ssr/api/attachments.js +2 -0
  64. package/dist/frontend-ssr/api/categories.js +2 -0
  65. package/dist/frontend-ssr/api/documents.js +2 -0
  66. package/dist/frontend-ssr/api/folders.js +2 -0
  67. package/dist/frontend-ssr/api/settings.js +2 -0
  68. package/dist/frontend-ssr/api/share.js +2 -0
  69. package/dist/frontend-ssr/api/tags.js +2 -0
  70. package/dist/frontend-ssr/assets/CategoryDialog-C2xaZKHq.js +584 -0
  71. package/dist/frontend-ssr/assets/ConfirmDialog-DjMFKc0V.js +420 -0
  72. package/dist/frontend-ssr/assets/CreateSnapshotDialog-BRw1xJW1.js +214 -0
  73. package/dist/frontend-ssr/assets/DatePicker-DnXniwlZ.js +312 -0
  74. package/dist/frontend-ssr/assets/DeleteDialog-BCfZy3Zn.js +154 -0
  75. package/dist/frontend-ssr/assets/FolderDialog-Dq7I2cKZ.js +429 -0
  76. package/dist/frontend-ssr/assets/FolderNode-DRfBfpft.js +171 -0
  77. package/dist/frontend-ssr/assets/FolderTreeSelector-DZNZ2oI6.js +147 -0
  78. package/dist/frontend-ssr/assets/Icon-B0Zqppjo.js +231 -0
  79. package/dist/frontend-ssr/assets/SettingsDialog-CX8Noa8A.js +1107 -0
  80. package/dist/frontend-ssr/assets/ShareDialog-Cge49ZdJ.js +54 -0
  81. package/dist/frontend-ssr/assets/TagCreateDialog-EAChgBF-.js +264 -0
  82. package/dist/frontend-ssr/assets/api-keys-DFqX39MT.js +35 -0
  83. package/dist/frontend-ssr/assets/attachments-CWBxE3Vz.js +85 -0
  84. package/dist/frontend-ssr/assets/auth-client-x26kqY8Z.js +1286 -0
  85. package/dist/frontend-ssr/assets/camera-CdxscTw-.js +84 -0
  86. package/dist/frontend-ssr/assets/categories-AOqgcsn4.js +75 -0
  87. package/dist/frontend-ssr/assets/chevron-down-CSSNGNh_.js +80 -0
  88. package/dist/frontend-ssr/assets/chevron-right-B4p7Sk6X.js +80 -0
  89. package/dist/frontend-ssr/assets/circle-check-CI1v4vYh.js +84 -0
  90. package/dist/frontend-ssr/assets/client-DZMkDkDn.js +129 -0
  91. package/dist/frontend-ssr/assets/clipboard-CXOaoz2W.js +30 -0
  92. package/dist/frontend-ssr/assets/clock-IL-eX2di.js +84 -0
  93. package/dist/frontend-ssr/assets/context-jz1GGEUi.js +45 -0
  94. package/dist/frontend-ssr/assets/copy-CjV57nGQ.js +87 -0
  95. package/dist/frontend-ssr/assets/db-CnxeO66n.js +65 -0
  96. package/dist/frontend-ssr/assets/dialog-BOV1u6zP.js +157 -0
  97. package/dist/frontend-ssr/assets/dndzone-DMvTO_Jz.js +2114 -0
  98. package/dist/frontend-ssr/assets/document-drop-coordinator-CEaYACsC.js +109 -0
  99. package/dist/frontend-ssr/assets/documents-BnOTRdTY.js +108 -0
  100. package/dist/frontend-ssr/assets/editorExtensions-DUzwndMy.js +186 -0
  101. package/dist/frontend-ssr/assets/ellipsis-vertical-C-0hgkZn.js +555 -0
  102. package/dist/frontend-ssr/assets/floating-layer-anchor-uzw9K8qN.js +6114 -0
  103. package/dist/frontend-ssr/assets/folder-DChhG7qN.js +80 -0
  104. package/dist/frontend-ssr/assets/folders-CTfbS24J.js +127 -0
  105. package/dist/frontend-ssr/assets/identity-B3uHoDtf.js +99 -0
  106. package/dist/frontend-ssr/assets/input-DezGsU3y.js +19 -0
  107. package/dist/frontend-ssr/assets/keyboard.svelte-BgF47N3L.js +174 -0
  108. package/dist/frontend-ssr/assets/label-Bj8-TfFN.js +21 -0
  109. package/dist/frontend-ssr/assets/loader-circle-DZsrZ-er.js +80 -0
  110. package/dist/frontend-ssr/assets/markdown-CjqvGi5W.js +20 -0
  111. package/dist/frontend-ssr/assets/messages-DhXqlcJI.js +11125 -0
  112. package/dist/frontend-ssr/assets/resolve-BqHozBXl.js +32 -0
  113. package/dist/frontend-ssr/assets/rotate-ccw-BlgWwaiq.js +80 -0
  114. package/dist/frontend-ssr/assets/select-value-DngdSmLI.js +1526 -0
  115. package/dist/frontend-ssr/assets/settings-E6qSAWM2.js +64 -0
  116. package/dist/frontend-ssr/assets/share-BTBJelxA.js +30 -0
  117. package/dist/frontend-ssr/assets/subfolders-refresh-store.svelte-DAh4gT16.js +77 -0
  118. package/dist/frontend-ssr/assets/tag-GZEuGWk1.js +166 -0
  119. package/dist/frontend-ssr/assets/tag-store.svelte-DPodKj6Z.js +21 -0
  120. package/dist/frontend-ssr/assets/tags-BId2wdYd.js +49 -0
  121. package/dist/frontend-ssr/assets/textarea-Dev-qSEc.js +21 -0
  122. package/dist/frontend-ssr/assets/theme.svelte-Co0-ssaD.js +67 -0
  123. package/dist/frontend-ssr/assets/utils-DtlPPXpJ.js +9 -0
  124. package/dist/frontend-ssr/assets/utils-DvZnctjz.js +23 -0
  125. package/dist/frontend-ssr/collaboration.js +39 -0
  126. package/dist/frontend-ssr/components/category-dialog.js +2 -0
  127. package/dist/frontend-ssr/components/create-snapshot-dialog.js +2 -0
  128. package/dist/frontend-ssr/components/delete-dialog.js +2 -0
  129. package/dist/frontend-ssr/components/editor/document-editor.js +2499 -0
  130. package/dist/frontend-ssr/components/editor/document-title.js +11 -0
  131. package/dist/frontend-ssr/components/editor/docx-serializer.js +186 -0
  132. package/dist/frontend-ssr/components/editor/extensions.js +2 -0
  133. package/dist/frontend-ssr/components/editor/markdown-toggle.js +20 -0
  134. package/dist/frontend-ssr/components/editor/markdown.js +2 -0
  135. package/dist/frontend-ssr/components/folder-node.js +2 -0
  136. package/dist/frontend-ssr/components/folder-tree-selector.js +2 -0
  137. package/dist/frontend-ssr/components/save-as-dialog.js +280 -0
  138. package/dist/frontend-ssr/components/settings.js +2 -0
  139. package/dist/frontend-ssr/components/share-dialog.js +2 -0
  140. package/dist/frontend-ssr/components/sidebar.js +2033 -0
  141. package/dist/frontend-ssr/components/tag-create-dialog.js +2 -0
  142. package/dist/frontend-ssr/components/version-history.js +370 -0
  143. package/dist/frontend-ssr/dashboard.js +2542 -0
  144. package/dist/frontend-ssr/doc-tabs.js +23 -0
  145. package/dist/frontend-ssr/document-drop-coordinator.js +2 -0
  146. package/dist/frontend-ssr/extension.js +13 -0
  147. package/dist/frontend-ssr/folder-refresh.js +2 -0
  148. package/dist/frontend-ssr/i18n.js +10 -0
  149. package/dist/frontend-ssr/keyboard.js +2 -0
  150. package/dist/frontend-ssr/offline/identity.js +2 -0
  151. package/dist/frontend-ssr/search.js +332 -0
  152. package/dist/frontend-ssr/shared-document.js +273 -0
  153. package/dist/frontend-ssr/theme.js +9 -0
  154. package/dist/frontend-ssr/types.js +1 -0
  155. package/dist/frontend-ssr/utils/clipboard.js +2 -0
  156. package/dist/frontend-ssr/utils/dndzone.js +2 -0
  157. package/dist/frontend-ssr/utils.js +2 -0
  158. package/package.json +22 -1
  159. package/packages/cli/src/index.ts +1 -1
  160. package/packages/db/src/schema.ts +3 -0
  161. package/packages/mcp-server/src/index.ts +1 -1
  162. package/dist/frontend/CategoryDialog--rIE7FrH.js +0 -580
  163. package/dist/frontend/ConfirmDialog-Cpzyb55f.js +0 -212
  164. package/dist/frontend/CreateSnapshotDialog-CmkV-n2A.js +0 -216
  165. package/dist/frontend/DatePicker-Byynca7V.js +0 -257
  166. package/dist/frontend/DeleteDialog-ap6nOywZ.js +0 -174
  167. package/dist/frontend/FolderDialog-DmN_trV0.js +0 -247
  168. package/dist/frontend/FolderNode-C4B8a2fd.js +0 -317
  169. package/dist/frontend/FolderTreeSelector-D6ijiZTA.js +0 -100
  170. package/dist/frontend/Icon-DtNo0N1U.js +0 -64
  171. package/dist/frontend/SettingsDialog-2kTaTXAs.js +0 -992
  172. package/dist/frontend/ShareDialog-BBDGNF5n.js +0 -165
  173. package/dist/frontend/TagCreateDialog-DiLZnJo4.js +0 -258
  174. package/dist/frontend/camera-B7dAOd4s.js +0 -28
  175. package/dist/frontend/check-CDwRlG9T.js +0 -24
  176. package/dist/frontend/chevron-down-B7ZrjUmT.js +0 -24
  177. package/dist/frontend/circle-check-CDqeMB2d.js +0 -28
  178. package/dist/frontend/client-Bc5Fzx40.js +0 -2785
  179. package/dist/frontend/clock-Ck5Sn-Zl.js +0 -28
  180. package/dist/frontend/clsx-nmtDPO_P.js +0 -16
  181. package/dist/frontend/copy-CMAA6GP0.js +0 -31
  182. package/dist/frontend/dialog-BDkiG42a.js +0 -213
  183. package/dist/frontend/disclose-version-5I57E3LD.js +0 -3
  184. package/dist/frontend/ellipsis-vertical-BBuPldbW.js +0 -519
  185. package/dist/frontend/folder-TQjKY4yn.js +0 -44
  186. package/dist/frontend/index-client-jobkrWVL.js +0 -86
  187. package/dist/frontend/input-CBI6p4Xl.js +0 -23
  188. package/dist/frontend/label-C-GkhEp4.js +0 -30
  189. package/dist/frontend/rotate-ccw-CleZtJ5D.js +0 -24
  190. package/dist/frontend/select-value-CvrWRkXW.js +0 -1436
  191. package/dist/frontend/subfolders-refresh-store.svelte-BsheoQma.js +0 -65
  192. package/dist/frontend/tag-Dx3SmucJ.js +0 -53
  193. package/dist/frontend/tag-store.svelte-CIaF4sdZ.js +0 -29
  194. package/dist/frontend/textarea-Dfp78XlL.js +0 -23
  195. package/dist/frontend/theme.svelte-CROg1Hi5.js +0 -49
  196. package/dist/frontend/x-DaTdeDXv.js +0 -24
@@ -0,0 +1,273 @@
1
+ import { t as getFrontendExtensions } from "./assets/context-jz1GGEUi.js";
2
+ import * as $ from "svelte/internal/server";
3
+ //#region src/lib/components/editor/shared-document.ts
4
+ var ATTACHMENT_PATH = /^\/api\/attachments\/[0-9a-f-]+\/raw$/i;
5
+ var SAFE_LINK_PROTOCOLS = /* @__PURE__ */ new Set([
6
+ "http:",
7
+ "https:",
8
+ "mailto:"
9
+ ]);
10
+ function escapeHtml(value) {
11
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
12
+ }
13
+ function wrapMark(mark, html) {
14
+ switch (mark.type) {
15
+ case "bold": return `<strong>${html}</strong>`;
16
+ case "italic": return `<em>${html}</em>`;
17
+ case "strike":
18
+ case "strikethrough": return `<s>${html}</s>`;
19
+ case "underline": return `<u>${html}</u>`;
20
+ case "code": return `<code>${html}</code>`;
21
+ case "link": return `<a href="${escapeHtml(safeLinkHref(mark.attrs?.href ?? "#"))}" target="_blank" rel="noopener noreferrer">${html}</a>`;
22
+ case "highlight": return `<mark style="background-color: ${escapeHtml(mark.attrs?.color ?? "#fde68a")}">${html}</mark>`;
23
+ default: return html;
24
+ }
25
+ }
26
+ function safeLinkHref(href) {
27
+ if (href.startsWith("#") || href.startsWith("/") || href.startsWith("./")) return href;
28
+ try {
29
+ const url = new URL(href);
30
+ return SAFE_LINK_PROTOCOLS.has(url.protocol) ? href : "#";
31
+ } catch {
32
+ return "#";
33
+ }
34
+ }
35
+ function alignStyle(attrs) {
36
+ const align = attrs?.textAlign;
37
+ if (align !== "left" && align !== "center" && align !== "right" && align !== "justify") return "";
38
+ return ` style="text-align: ${align}"`;
39
+ }
40
+ /**
41
+ * Render descendants as inline content. Older imported documents can contain
42
+ * a paragraph inside a heading. That is invalid ProseMirror/HTML, so emitting
43
+ * it verbatim makes browsers restructure the document unpredictably. Flatten
44
+ * block wrappers in inline-only parents while preserving their text/marks.
45
+ */
46
+ function renderInline(node) {
47
+ if (node.type === "text") {
48
+ let html = escapeHtml(node.text ?? "");
49
+ for (const mark of node.marks ?? []) html = wrapMark(mark, html);
50
+ return html;
51
+ }
52
+ return (node.content ?? []).map(renderInline).join("");
53
+ }
54
+ function renderSharedDocument(doc) {
55
+ const renderNode = (node) => {
56
+ if (node.type === "text") return renderInline(node);
57
+ const align = alignStyle(node.attrs);
58
+ const inner = (node.content ?? []).map(renderNode).join("");
59
+ switch (node.type) {
60
+ case "paragraph": return `<p${align}>${inner}</p>`;
61
+ case "heading": {
62
+ const level = Math.min(Math.max(Number(node.attrs?.level ?? 1), 1), 6);
63
+ return `<h${level}${align}>${(node.content ?? []).map(renderInline).join("")}</h${level}>`;
64
+ }
65
+ case "bulletList": return `<ul${align}>${inner}</ul>`;
66
+ case "orderedList": {
67
+ const rawStart = Number(node.attrs?.start ?? 1);
68
+ return `<ol${Number.isSafeInteger(rawStart) && rawStart > 1 ? ` start="${rawStart}"` : ""}${align}>${inner}</ol>`;
69
+ }
70
+ case "listItem": return `<li${align}>${inner}</li>`;
71
+ case "taskList": return `<ul data-type="taskList">${inner}</ul>`;
72
+ case "taskItem": {
73
+ const checked = node.attrs?.checked === true || node.attrs?.checked === "true";
74
+ return `<li data-type="taskItem"${checked ? " data-checked=\"true\"" : ""}><label><input type="checkbox" disabled${checked ? " checked" : ""} /></label><div>${inner}</div></li>`;
75
+ }
76
+ case "blockquote": return `<blockquote${align}>${inner}</blockquote>`;
77
+ case "table": return `<table><tbody>${inner}</tbody></table>`;
78
+ case "tableRow": return `<tr>${inner}</tr>`;
79
+ case "tableHeader": return `<th${align}>${inner}</th>`;
80
+ case "tableCell": return `<td${align}>${inner}</td>`;
81
+ case "codeBlock": {
82
+ const lang = node.attrs?.language ?? "";
83
+ return `<pre><code${lang ? ` class="language-${escapeHtml(lang)}"` : ""}>${inner}</code></pre>`;
84
+ }
85
+ case "horizontalRule": return "<hr />";
86
+ case "hardBreak": return "<br />";
87
+ case "image": {
88
+ const src = node.attrs?.src ?? "";
89
+ const alt = node.attrs?.alt ?? "";
90
+ const width = Number(node.attrs?.width);
91
+ const height = Number(node.attrs?.height);
92
+ const dimensions = `${Number.isFinite(width) && width > 0 ? ` width="${Math.round(width)}"` : ""}${Number.isFinite(height) && height > 0 ? ` height="${Math.round(height)}"` : ""}`;
93
+ if (ATTACHMENT_PATH.test(src)) return `<img data-shared-attachment-src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${dimensions} />`;
94
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${dimensions} />`;
95
+ }
96
+ default: return inner;
97
+ }
98
+ };
99
+ return (doc.content ?? []).map(renderNode).join("");
100
+ }
101
+ /** Mark Markdown task items so print/PDF CSS can suppress the regular bullet. */
102
+ function markMarkdownTaskItems(html) {
103
+ return html.replace(/<li>(\s*<input\b[^>]*type=["']checkbox["'][^>]*>)/gi, "<li class=\"task-list-item\">$1");
104
+ }
105
+ function sharedAttachmentHeaders(token, password = "") {
106
+ return {
107
+ "x-share-token": token,
108
+ ...password ? { "x-share-password": password } : {}
109
+ };
110
+ }
111
+ /** Replace protected attachment placeholders with authenticated blob URLs. */
112
+ async function hydrateSharedAttachmentImages(root, token, password = "") {
113
+ const objectUrls = [];
114
+ const images = root.querySelectorAll("img[data-shared-attachment-src]");
115
+ await Promise.all(Array.from(images, async (image) => {
116
+ const src = image.dataset.sharedAttachmentSrc;
117
+ if (!src) return;
118
+ try {
119
+ const response = await fetch(src, { headers: sharedAttachmentHeaders(token, password) });
120
+ if (!response.ok) {
121
+ image.dataset.sharedAttachmentError = String(response.status);
122
+ return;
123
+ }
124
+ const objectUrl = URL.createObjectURL(await response.blob());
125
+ objectUrls.push(objectUrl);
126
+ image.src = objectUrl;
127
+ image.removeAttribute("data-shared-attachment-src");
128
+ } catch {
129
+ image.dataset.sharedAttachmentError = "network";
130
+ }
131
+ }));
132
+ return objectUrls;
133
+ }
134
+ /** Wait until every image in a print/export subtree has finished loading. */
135
+ async function waitForSharedDocumentImages(root) {
136
+ const images = Array.from(root.querySelectorAll("img"));
137
+ await Promise.all(images.map(async (image) => {
138
+ if (image.complete) return;
139
+ if (typeof image.decode === "function") {
140
+ await image.decode().catch(() => void 0);
141
+ return;
142
+ }
143
+ await new Promise((resolve) => {
144
+ image.addEventListener("load", () => resolve(), { once: true });
145
+ image.addEventListener("error", () => resolve(), { once: true });
146
+ });
147
+ }));
148
+ }
149
+ //#endregion
150
+ //#region src/lib/extensions/shared-document-context.ts
151
+ var sensitiveKeys = /* @__PURE__ */ new Set([
152
+ "shareToken",
153
+ "password",
154
+ "passwordHash",
155
+ "workspaceAssertion",
156
+ "authorization",
157
+ "cookie",
158
+ "signingSecret"
159
+ ]);
160
+ function capability(value) {
161
+ if (!value.id.trim() || !value.expiresAt.trim()) throw new TypeError("Shared extension capability must include a non-empty id and expiry");
162
+ return Object.freeze({
163
+ id: value.id,
164
+ expiresAt: value.expiresAt
165
+ });
166
+ }
167
+ /**
168
+ * Drops undeclared properties before an extension component receives context.
169
+ * This is deliberately a runtime boundary, not only a declaration contract.
170
+ */
171
+ function sanitizeSharedDocumentExtensionContext(value) {
172
+ for (const key of Object.keys(value)) if (sensitiveKeys.has(key)) throw new TypeError(`Sensitive ${key} must not be provided to a shared extension`);
173
+ return Object.freeze({
174
+ documentId: value.documentId,
175
+ title: value.title,
176
+ content: value.content,
177
+ ...value.contentJson === void 0 ? {} : { contentJson: value.contentJson },
178
+ role: value.role,
179
+ capability: capability(value.capability),
180
+ permissions: Object.freeze({
181
+ read: true,
182
+ annotate: value.permissions.annotate,
183
+ edit: value.permissions.edit,
184
+ export: value.permissions.export
185
+ })
186
+ });
187
+ }
188
+ //#endregion
189
+ //#region src/lib/hosts/DocsmintSharedDocumentHost.svelte
190
+ function DocsmintSharedDocumentHost($$renderer, $$props) {
191
+ $$renderer.component(($$renderer) => {
192
+ const { context, children } = $$props;
193
+ const extensions = getFrontendExtensions();
194
+ const safeContext = $.derived(() => sanitizeSharedDocumentExtensionContext(context));
195
+ function permitted(extension) {
196
+ return extension.permission === "annotate" ? safeContext().permissions.annotate : safeContext().permissions.edit;
197
+ }
198
+ function visible(items) {
199
+ const seen = /* @__PURE__ */ new Set();
200
+ return items.filter((extension) => {
201
+ if (seen.has(extension.id) || !permitted(extension)) return false;
202
+ seen.add(extension.id);
203
+ try {
204
+ return extension.visible?.(safeContext()) ?? true;
205
+ } catch {
206
+ return false;
207
+ }
208
+ }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || a.id.localeCompare(b.id));
209
+ }
210
+ $$renderer.push(`<div data-docsmint-shared-document-host=""><div data-extension-zone="shared-header-actions"><!--[-->`);
211
+ const each_array = $.ensure_array_like(visible(extensions.sharedDocumentHeaderActions));
212
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
213
+ let extension = each_array[$$index];
214
+ if (extension.component) {
215
+ $$renderer.push("<!--[-->");
216
+ extension.component($$renderer, { context: safeContext() });
217
+ $$renderer.push("<!--]-->");
218
+ } else {
219
+ $$renderer.push("<!--[!-->");
220
+ $$renderer.push("<!--]-->");
221
+ }
222
+ }
223
+ $$renderer.push(`<!--]--></div> `);
224
+ children($$renderer);
225
+ $$renderer.push(`<!----> <div data-extension-zone="shared-document-tabs"><!--[-->`);
226
+ const each_array_1 = $.ensure_array_like(visible(extensions.sharedDocumentTabs));
227
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
228
+ let extension = each_array_1[$$index_1];
229
+ if (extension.component) {
230
+ $$renderer.push("<!--[-->");
231
+ extension.component($$renderer, { context: safeContext() });
232
+ $$renderer.push("<!--]-->");
233
+ } else {
234
+ $$renderer.push("<!--[!-->");
235
+ $$renderer.push("<!--]-->");
236
+ }
237
+ }
238
+ $$renderer.push(`<!--]--></div> <div data-extension-zone="shared-document-notes"><!--[-->`);
239
+ const each_array_2 = $.ensure_array_like(visible(extensions.sharedDocumentNotesModes));
240
+ for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
241
+ let extension = each_array_2[$$index_2];
242
+ if (extension.component) {
243
+ $$renderer.push("<!--[-->");
244
+ extension.component($$renderer, { context: safeContext() });
245
+ $$renderer.push("<!--]-->");
246
+ } else {
247
+ $$renderer.push("<!--[!-->");
248
+ $$renderer.push("<!--]-->");
249
+ }
250
+ }
251
+ $$renderer.push(`<!--]--></div> <div data-extension-zone="shared-document-editor">`);
252
+ if (safeContext().permissions.edit) {
253
+ $$renderer.push("<!--[0-->");
254
+ $$renderer.push(`<!--[-->`);
255
+ const each_array_3 = $.ensure_array_like(visible(extensions.sharedDocumentEditorModes));
256
+ for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
257
+ let extension = each_array_3[$$index_3];
258
+ if (extension.component) {
259
+ $$renderer.push("<!--[-->");
260
+ extension.component($$renderer, { context: safeContext() });
261
+ $$renderer.push("<!--]-->");
262
+ } else {
263
+ $$renderer.push("<!--[!-->");
264
+ $$renderer.push("<!--]-->");
265
+ }
266
+ }
267
+ $$renderer.push(`<!--]-->`);
268
+ } else $$renderer.push("<!--[-1-->");
269
+ $$renderer.push(`<!--]--></div></div>`);
270
+ });
271
+ }
272
+ //#endregion
273
+ export { DocsmintSharedDocumentHost, hydrateSharedAttachmentImages, markMarkdownTaskItems, renderSharedDocument, sharedAttachmentHeaders, waitForSharedDocumentImages };
@@ -0,0 +1,9 @@
1
+ import { t as themeStore } from "./assets/theme.svelte-Co0-ssaD.js";
2
+ //#region ../packages/sdk/frontend-entries/theme.ts
3
+ var theme = themeStore;
4
+ var setTheme = themeStore.set;
5
+ function toggleTheme() {
6
+ setTheme(theme.value === "dark" ? "light" : "dark");
7
+ }
8
+ //#endregion
9
+ export { setTheme, theme, toggleTheme };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { t as copyToClipboard } from "../assets/clipboard-CXOaoz2W.js";
2
+ export { copyToClipboard };
@@ -0,0 +1,2 @@
1
+ import { t as dndzone } from "../assets/dndzone-DMvTO_Jz.js";
2
+ export { dndzone };
@@ -0,0 +1,2 @@
1
+ import { n as formatRelativeTime, t as cn } from "./assets/utils-DvZnctjz.js";
2
+ export { cn, formatRelativeTime };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hiai-gg/docsmint",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "type": "module",
5
5
  "browser": {
6
6
  "./dist/backend-launcher.js": false,
@@ -75,18 +75,22 @@
75
75
  "types": "./dist/storage-quota.d.ts"
76
76
  },
77
77
  "./frontend/dashboard": {
78
+ "node": "./dist/frontend-ssr/dashboard.js",
78
79
  "import": "./dist/frontend/dashboard.js",
79
80
  "types": "./dist/frontend/dashboard.d.ts"
80
81
  },
81
82
  "./frontend/search": {
83
+ "node": "./dist/frontend-ssr/search.js",
82
84
  "import": "./dist/frontend/search.js",
83
85
  "types": "./dist/frontend/search.d.ts"
84
86
  },
85
87
  "./frontend/shared-document": {
88
+ "node": "./dist/frontend-ssr/shared-document.js",
86
89
  "import": "./dist/frontend/shared-document.js",
87
90
  "types": "./dist/frontend/shared-document.d.ts"
88
91
  },
89
92
  "./frontend/extension": {
93
+ "node": "./dist/frontend-ssr/extension.js",
90
94
  "import": "./dist/frontend/extension.js",
91
95
  "types": "./dist/frontend/extension.d.ts"
92
96
  },
@@ -119,18 +123,22 @@
119
123
  "types": "./dist/frontend/collaboration.d.ts"
120
124
  },
121
125
  "./frontend/components/create-snapshot-dialog": {
126
+ "node": "./dist/frontend-ssr/components/create-snapshot-dialog.js",
122
127
  "import": "./dist/frontend/components/create-snapshot-dialog.js",
123
128
  "types": "./dist/frontend/components/create-snapshot-dialog.d.ts"
124
129
  },
125
130
  "./frontend/components/delete-dialog": {
131
+ "node": "./dist/frontend-ssr/components/delete-dialog.js",
126
132
  "import": "./dist/frontend/components/delete-dialog.js",
127
133
  "types": "./dist/frontend/components/delete-dialog.d.ts"
128
134
  },
129
135
  "./frontend/components/category-dialog": {
136
+ "node": "./dist/frontend-ssr/components/category-dialog.js",
130
137
  "import": "./dist/frontend/components/category-dialog.js",
131
138
  "types": "./dist/frontend/components/category-dialog.d.ts"
132
139
  },
133
140
  "./frontend/components/folder-node": {
141
+ "node": "./dist/frontend-ssr/components/folder-node.js",
134
142
  "import": "./dist/frontend/components/folder-node.js",
135
143
  "types": "./dist/frontend/components/folder-node.d.ts"
136
144
  },
@@ -147,54 +155,67 @@
147
155
  "types": "./dist/frontend/doc-tabs.d.ts"
148
156
  },
149
157
  "./frontend/components/editor/document-editor": {
158
+ "node": "./dist/frontend-ssr/components/editor/document-editor.js",
150
159
  "import": "./dist/frontend/components/editor/document-editor.js",
151
160
  "types": "./dist/frontend/components/editor/document-editor.d.ts"
152
161
  },
153
162
  "./frontend/components/folder-tree-selector": {
163
+ "node": "./dist/frontend-ssr/components/folder-tree-selector.js",
154
164
  "import": "./dist/frontend/components/folder-tree-selector.js",
155
165
  "types": "./dist/frontend/components/folder-tree-selector.d.ts"
156
166
  },
157
167
  "./frontend/components/save-as-dialog": {
168
+ "node": "./dist/frontend-ssr/components/save-as-dialog.js",
158
169
  "import": "./dist/frontend/components/save-as-dialog.js",
159
170
  "types": "./dist/frontend/components/save-as-dialog.d.ts"
160
171
  },
161
172
  "./frontend/components/share-dialog": {
173
+ "node": "./dist/frontend-ssr/components/share-dialog.js",
162
174
  "import": "./dist/frontend/components/share-dialog.js",
163
175
  "types": "./dist/frontend/components/share-dialog.d.ts"
164
176
  },
165
177
  "./frontend/components/tag-create-dialog": {
178
+ "node": "./dist/frontend-ssr/components/tag-create-dialog.js",
166
179
  "import": "./dist/frontend/components/tag-create-dialog.js",
167
180
  "types": "./dist/frontend/components/tag-create-dialog.d.ts"
168
181
  },
169
182
  "./frontend/components/version-history": {
183
+ "node": "./dist/frontend-ssr/components/version-history.js",
170
184
  "import": "./dist/frontend/components/version-history.js",
171
185
  "types": "./dist/frontend/components/version-history.d.ts"
172
186
  },
173
187
  "./frontend/components/editor/document-title": {
188
+ "node": "./dist/frontend-ssr/components/editor/document-title.js",
174
189
  "import": "./dist/frontend/components/editor/document-title.js",
175
190
  "types": "./dist/frontend/components/editor/document-title.d.ts"
176
191
  },
177
192
  "./frontend/components/editor/markdown-toggle": {
193
+ "node": "./dist/frontend-ssr/components/editor/markdown-toggle.js",
178
194
  "import": "./dist/frontend/components/editor/markdown-toggle.js",
179
195
  "types": "./dist/frontend/components/editor/markdown-toggle.d.ts"
180
196
  },
181
197
  "./frontend/components/editor/extensions": {
198
+ "node": "./dist/frontend-ssr/components/editor/extensions.js",
182
199
  "import": "./dist/frontend/components/editor/extensions.js",
183
200
  "types": "./dist/frontend/components/editor/extensions.d.ts"
184
201
  },
185
202
  "./frontend/components/editor/markdown": {
203
+ "node": "./dist/frontend-ssr/components/editor/markdown.js",
186
204
  "import": "./dist/frontend/components/editor/markdown.js",
187
205
  "types": "./dist/frontend/components/editor/markdown.d.ts"
188
206
  },
189
207
  "./frontend/components/editor/docx-serializer": {
208
+ "node": "./dist/frontend-ssr/components/editor/docx-serializer.js",
190
209
  "import": "./dist/frontend/components/editor/docx-serializer.js",
191
210
  "types": "./dist/frontend/components/editor/docx-serializer.d.ts"
192
211
  },
193
212
  "./frontend/components/sidebar": {
213
+ "node": "./dist/frontend-ssr/components/sidebar.js",
194
214
  "import": "./dist/frontend/components/sidebar.js",
195
215
  "types": "./dist/frontend/components/sidebar.d.ts"
196
216
  },
197
217
  "./frontend/components/settings": {
218
+ "node": "./dist/frontend-ssr/components/settings.js",
198
219
  "import": "./dist/frontend/components/settings.js",
199
220
  "types": "./dist/frontend/components/settings.d.ts"
200
221
  },
@@ -24,7 +24,7 @@ import { registerSearch } from "./commands/search.js";
24
24
  import { registerSnapshot } from "./commands/snapshot.js";
25
25
  import { registerUpdate } from "./commands/update.js";
26
26
 
27
- const VERSION = "0.3.7";
27
+ const VERSION = "0.3.8";
28
28
 
29
29
  const program = new Command();
30
30
  program
@@ -226,6 +226,8 @@ export const documents = pgTable(
226
226
  embeddingProfile: text("embedding_profile"),
227
227
  embeddingErrorCode: text("embedding_error_code"),
228
228
  embeddingUpdatedAt: timestamp("embedding_updated_at"),
229
+ /** Soft-delete marker. Trashed documents remain tenant-scoped until purge. */
230
+ deletedAt: timestamp("deleted_at"),
229
231
  createdAt: timestamp("created_at").defaultNow().notNull(),
230
232
  updatedAt: timestamp("updated_at").defaultNow().notNull(),
231
233
  },
@@ -237,6 +239,7 @@ export const documents = pgTable(
237
239
  index("idx_documents_search_vector").using("gin", table.searchVector),
238
240
  index("idx_documents_search_vector_simple").using("gin", table.searchVectorSimple),
239
241
  index("documents_embedding_status_idx").on(table.embeddingStatus),
242
+ index("documents_workspace_deleted_at_idx").on(table.workspaceId, table.deletedAt),
240
243
  index("idx_documents_title_trgm").using(
241
244
  "gin",
242
245
  sql`${table.title} gin_trgm_ops`
@@ -35,7 +35,7 @@ interface McpToolResult {
35
35
 
36
36
  const server = new McpServer({
37
37
  name: "hiai-docs",
38
- version: "0.3.7",
38
+ version: "0.3.8",
39
39
  });
40
40
 
41
41
  /**