@hiai-gg/docsmint 0.3.7 → 0.3.9

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 (210) hide show
  1. package/backend/src/lib/logger.ts +45 -15
  2. package/dist/backend/index.js +238 -150
  3. package/dist/client.d.ts +11 -0
  4. package/dist/client.js +9 -0
  5. package/dist/frontend/CategoryDialog-CxVyaBV5.js +611 -0
  6. package/dist/frontend/ConfirmDialog-NFGXRa3E.js +214 -0
  7. package/dist/frontend/CreateSnapshotDialog-BDgFTeFn.js +216 -0
  8. package/dist/frontend/DatePicker-BZRBluzF.js +256 -0
  9. package/dist/frontend/DeleteDialog-CvAr2WPu.js +174 -0
  10. package/dist/frontend/FolderNode-C6FJv99G.js +298 -0
  11. package/dist/frontend/FolderTreeSelector-CyB8y2Sm.js +103 -0
  12. package/dist/frontend/HiaiDocsExtensionProvider-DHWLzRUu.js +11 -0
  13. package/dist/frontend/Icon-CooFj4Ee.js +64 -0
  14. package/dist/frontend/SettingsDialog-BHh68rTB.js +1016 -0
  15. package/dist/frontend/ShareDialog-BUOkYSlw.js +165 -0
  16. package/dist/frontend/Sidebar-Cu3JrKDC.js +2021 -0
  17. package/dist/frontend/TagCreateDialog-B9YZBNHi.js +260 -0
  18. package/dist/frontend/api/settings.js +1 -1
  19. package/dist/frontend/app-shell.d.ts +8 -0
  20. package/dist/frontend/app-shell.js +291 -0
  21. package/dist/frontend/{bundle-mjs-CP6Owz-8.js → bundle-mjs-DllmqUxV.js} +583 -568
  22. package/dist/frontend/camera-iKXDOOWT.js +29 -0
  23. package/dist/frontend/check-D-UuvBuh.js +25 -0
  24. package/dist/frontend/chevron-down-CiPtYyFh.js +25 -0
  25. package/dist/frontend/circle-check-tSPE1V6t.js +29 -0
  26. package/dist/frontend/clock-DJHbHZb8.js +29 -0
  27. package/dist/frontend/components/category-dialog.js +1 -1
  28. package/dist/frontend/components/create-snapshot-dialog.js +1 -1
  29. package/dist/frontend/components/delete-dialog.js +1 -1
  30. package/dist/frontend/components/editor/document-editor.js +1367 -1356
  31. package/dist/frontend/components/editor/document-title.js +25 -25
  32. package/dist/frontend/components/editor/markdown-toggle.js +45 -45
  33. package/dist/frontend/components/folder-node.js +1 -1
  34. package/dist/frontend/components/folder-tree-selector.js +1 -1
  35. package/dist/frontend/components/save-as-dialog.js +169 -151
  36. package/dist/frontend/components/settings.js +1 -1
  37. package/dist/frontend/components/share-dialog.js +1 -1
  38. package/dist/frontend/components/sidebar.js +2 -2013
  39. package/dist/frontend/components/tag-create-dialog.js +1 -1
  40. package/dist/frontend/components/version-history.js +188 -187
  41. package/dist/frontend/confirm-dialog-C4jTRbiS.js +250 -0
  42. package/dist/frontend/copy-GppwRMjX.js +32 -0
  43. package/dist/frontend/dashboard.js +1187 -1155
  44. package/dist/frontend/dialog-Bevp9mmM.js +213 -0
  45. package/dist/frontend/{loader-circle-Bk-WFz9g.js → dist-C3857Spp.js} +93 -92
  46. package/dist/frontend/doc-tabs.js +2 -2
  47. package/dist/frontend/dropdown-menu-CRSby3e9.js +530 -0
  48. package/dist/frontend/extension.js +2 -11
  49. package/dist/frontend/{floating-layer-anchor-C51M4l6v.js → floating-layer-anchor-BDs7vO-M.js} +1414 -1412
  50. package/dist/frontend/folder-DeWhnD7O.js +45 -0
  51. package/dist/frontend/folder-refresh.js +1 -1
  52. package/dist/frontend/frontend.css +1 -1
  53. package/dist/frontend/i18n.js +2 -2
  54. package/dist/frontend/input-BWlOML_m.js +23 -0
  55. package/dist/frontend/keyboard.js +1 -1
  56. package/dist/frontend/{keyboard.svelte-D7H8DihC.js → keyboard.svelte-CApmX0vl.js} +53 -53
  57. package/dist/frontend/label-C2HfJNQ2.js +30 -0
  58. package/dist/frontend/{messages-BpYaLbzE.js → messages-C5Q890i2.js} +8 -8
  59. package/dist/frontend/rotate-ccw-B4Q7brmV.js +25 -0
  60. package/dist/frontend/search.js +673 -647
  61. package/dist/frontend/select-value-GXwx90Pr.js +1446 -0
  62. package/dist/frontend/{settings-blyobazp.js → settings-DSrUl4hW.js} +9 -9
  63. package/dist/frontend/shared-document.js +94 -94
  64. package/dist/frontend/subfolders-refresh-store.svelte-B2dKVmgz.js +65 -0
  65. package/dist/frontend/tag-HxRazVN_.js +54 -0
  66. package/dist/frontend/tag-store.svelte-CqrUXo0o.js +29 -0
  67. package/dist/frontend/textarea-DOAE-h42.js +23 -0
  68. package/dist/frontend/theme.js +1 -1
  69. package/dist/frontend/theme.svelte-DKfCy12k.js +49 -0
  70. package/dist/frontend/{utils-D8kmM3ub.js → utils-BPDRytUU.js} +2 -3
  71. package/dist/frontend/{utils-C0OW2678.js → utils-DrfHTcei.js} +2 -3
  72. package/dist/frontend/utils.js +1 -1
  73. package/dist/frontend/x-CzBsnJ2x.js +25 -0
  74. package/dist/frontend-ssr/api/attachments.js +2 -0
  75. package/dist/frontend-ssr/api/categories.js +2 -0
  76. package/dist/frontend-ssr/api/documents.js +2 -0
  77. package/dist/frontend-ssr/api/folders.js +2 -0
  78. package/dist/frontend-ssr/api/settings.js +2 -0
  79. package/dist/frontend-ssr/api/share.js +2 -0
  80. package/dist/frontend-ssr/api/tags.js +2 -0
  81. package/dist/frontend-ssr/app-shell.js +294 -0
  82. package/dist/frontend-ssr/assets/CategoryDialog-BcGW8-Kf.js +584 -0
  83. package/dist/frontend-ssr/assets/ConfirmDialog-DjMFKc0V.js +420 -0
  84. package/dist/frontend-ssr/assets/CreateSnapshotDialog-1bROJ-Rn.js +214 -0
  85. package/dist/frontend-ssr/assets/DatePicker-B1ML8OVz.js +312 -0
  86. package/dist/frontend-ssr/assets/DeleteDialog-tBYaP0L3.js +154 -0
  87. package/dist/frontend-ssr/assets/FolderNode-BZ0Q2QUS.js +171 -0
  88. package/dist/frontend-ssr/assets/FolderTreeSelector-DZNZ2oI6.js +147 -0
  89. package/dist/frontend-ssr/assets/HiaiDocsExtensionProvider-DAM-lX4R.js +13 -0
  90. package/dist/frontend-ssr/assets/Icon-B0Zqppjo.js +231 -0
  91. package/dist/frontend-ssr/assets/SettingsDialog-B8L_YqNA.js +1107 -0
  92. package/dist/frontend-ssr/assets/ShareDialog-vMvJLRfn.js +54 -0
  93. package/dist/frontend-ssr/assets/Sidebar-EHuUAx3W.js +2033 -0
  94. package/dist/frontend-ssr/assets/TagCreateDialog-B0DPEfmQ.js +264 -0
  95. package/dist/frontend-ssr/assets/api-keys-DFqX39MT.js +35 -0
  96. package/dist/frontend-ssr/assets/attachments-CWBxE3Vz.js +85 -0
  97. package/dist/frontend-ssr/assets/auth-client-x26kqY8Z.js +1286 -0
  98. package/dist/frontend-ssr/assets/camera-CdxscTw-.js +84 -0
  99. package/dist/frontend-ssr/assets/categories-AOqgcsn4.js +75 -0
  100. package/dist/frontend-ssr/assets/chevron-down-CSSNGNh_.js +80 -0
  101. package/dist/frontend-ssr/assets/chevron-right-B4p7Sk6X.js +80 -0
  102. package/dist/frontend-ssr/assets/circle-check-CI1v4vYh.js +84 -0
  103. package/dist/frontend-ssr/assets/client-DZMkDkDn.js +129 -0
  104. package/dist/frontend-ssr/assets/clipboard-CXOaoz2W.js +30 -0
  105. package/dist/frontend-ssr/assets/clock-IL-eX2di.js +84 -0
  106. package/dist/frontend-ssr/assets/confirm-dialog-BCthVwUY.js +429 -0
  107. package/dist/frontend-ssr/assets/context-jz1GGEUi.js +45 -0
  108. package/dist/frontend-ssr/assets/copy-CjV57nGQ.js +87 -0
  109. package/dist/frontend-ssr/assets/db-CnxeO66n.js +65 -0
  110. package/dist/frontend-ssr/assets/dialog-BOV1u6zP.js +157 -0
  111. package/dist/frontend-ssr/assets/dndzone-DMvTO_Jz.js +2114 -0
  112. package/dist/frontend-ssr/assets/document-drop-coordinator-CEaYACsC.js +109 -0
  113. package/dist/frontend-ssr/assets/documents-BnOTRdTY.js +108 -0
  114. package/dist/frontend-ssr/assets/dropdown-menu-Bj5rbqbB.js +555 -0
  115. package/dist/frontend-ssr/assets/editorExtensions-DUzwndMy.js +186 -0
  116. package/dist/frontend-ssr/assets/floating-layer-anchor-CYIE8Oj6.js +6114 -0
  117. package/dist/frontend-ssr/assets/folder-DChhG7qN.js +80 -0
  118. package/dist/frontend-ssr/assets/folders-CTfbS24J.js +127 -0
  119. package/dist/frontend-ssr/assets/identity-B3uHoDtf.js +99 -0
  120. package/dist/frontend-ssr/assets/input-DezGsU3y.js +19 -0
  121. package/dist/frontend-ssr/assets/keyboard.svelte-BgF47N3L.js +174 -0
  122. package/dist/frontend-ssr/assets/label-Bj8-TfFN.js +21 -0
  123. package/dist/frontend-ssr/assets/loader-circle-DZsrZ-er.js +80 -0
  124. package/dist/frontend-ssr/assets/markdown-CjqvGi5W.js +20 -0
  125. package/dist/frontend-ssr/assets/messages-CvqpZNJe.js +11125 -0
  126. package/dist/frontend-ssr/assets/resolve-BqHozBXl.js +32 -0
  127. package/dist/frontend-ssr/assets/rotate-ccw-BlgWwaiq.js +80 -0
  128. package/dist/frontend-ssr/assets/select-value-6Lk0ToYd.js +1526 -0
  129. package/dist/frontend-ssr/assets/settings-Bk5Hk9Vq.js +64 -0
  130. package/dist/frontend-ssr/assets/share-BTBJelxA.js +30 -0
  131. package/dist/frontend-ssr/assets/subfolders-refresh-store.svelte-DAh4gT16.js +77 -0
  132. package/dist/frontend-ssr/assets/tag-GZEuGWk1.js +166 -0
  133. package/dist/frontend-ssr/assets/tag-store.svelte-DPodKj6Z.js +21 -0
  134. package/dist/frontend-ssr/assets/tags-BId2wdYd.js +49 -0
  135. package/dist/frontend-ssr/assets/textarea-Dev-qSEc.js +21 -0
  136. package/dist/frontend-ssr/assets/theme.svelte-Co0-ssaD.js +67 -0
  137. package/dist/frontend-ssr/assets/utils-DtlPPXpJ.js +9 -0
  138. package/dist/frontend-ssr/assets/utils-DvZnctjz.js +23 -0
  139. package/dist/frontend-ssr/collaboration.js +39 -0
  140. package/dist/frontend-ssr/components/category-dialog.js +2 -0
  141. package/dist/frontend-ssr/components/create-snapshot-dialog.js +2 -0
  142. package/dist/frontend-ssr/components/delete-dialog.js +2 -0
  143. package/dist/frontend-ssr/components/editor/document-editor.js +2499 -0
  144. package/dist/frontend-ssr/components/editor/document-title.js +11 -0
  145. package/dist/frontend-ssr/components/editor/docx-serializer.js +186 -0
  146. package/dist/frontend-ssr/components/editor/extensions.js +2 -0
  147. package/dist/frontend-ssr/components/editor/markdown-toggle.js +20 -0
  148. package/dist/frontend-ssr/components/editor/markdown.js +2 -0
  149. package/dist/frontend-ssr/components/folder-node.js +2 -0
  150. package/dist/frontend-ssr/components/folder-tree-selector.js +2 -0
  151. package/dist/frontend-ssr/components/save-as-dialog.js +280 -0
  152. package/dist/frontend-ssr/components/settings.js +2 -0
  153. package/dist/frontend-ssr/components/share-dialog.js +2 -0
  154. package/dist/frontend-ssr/components/sidebar.js +2 -0
  155. package/dist/frontend-ssr/components/tag-create-dialog.js +2 -0
  156. package/dist/frontend-ssr/components/version-history.js +370 -0
  157. package/dist/frontend-ssr/dashboard.js +2542 -0
  158. package/dist/frontend-ssr/doc-tabs.js +23 -0
  159. package/dist/frontend-ssr/document-drop-coordinator.js +2 -0
  160. package/dist/frontend-ssr/extension.js +2 -0
  161. package/dist/frontend-ssr/folder-refresh.js +2 -0
  162. package/dist/frontend-ssr/i18n.js +10 -0
  163. package/dist/frontend-ssr/keyboard.js +2 -0
  164. package/dist/frontend-ssr/offline/identity.js +2 -0
  165. package/dist/frontend-ssr/search.js +332 -0
  166. package/dist/frontend-ssr/shared-document.js +273 -0
  167. package/dist/frontend-ssr/theme.js +9 -0
  168. package/dist/frontend-ssr/types.js +1 -0
  169. package/dist/frontend-ssr/utils/clipboard.js +2 -0
  170. package/dist/frontend-ssr/utils/dndzone.js +2 -0
  171. package/dist/frontend-ssr/utils.js +2 -0
  172. package/package.json +28 -1
  173. package/packages/cli/src/index.ts +1 -1
  174. package/packages/db/src/schema.ts +3 -0
  175. package/packages/mcp-server/src/index.ts +1 -1
  176. package/dist/frontend/CategoryDialog--rIE7FrH.js +0 -580
  177. package/dist/frontend/ConfirmDialog-Cpzyb55f.js +0 -212
  178. package/dist/frontend/CreateSnapshotDialog-CmkV-n2A.js +0 -216
  179. package/dist/frontend/DatePicker-Byynca7V.js +0 -257
  180. package/dist/frontend/DeleteDialog-ap6nOywZ.js +0 -174
  181. package/dist/frontend/FolderDialog-DmN_trV0.js +0 -247
  182. package/dist/frontend/FolderNode-C4B8a2fd.js +0 -317
  183. package/dist/frontend/FolderTreeSelector-D6ijiZTA.js +0 -100
  184. package/dist/frontend/Icon-DtNo0N1U.js +0 -64
  185. package/dist/frontend/SettingsDialog-2kTaTXAs.js +0 -992
  186. package/dist/frontend/ShareDialog-BBDGNF5n.js +0 -165
  187. package/dist/frontend/TagCreateDialog-DiLZnJo4.js +0 -258
  188. package/dist/frontend/camera-B7dAOd4s.js +0 -28
  189. package/dist/frontend/check-CDwRlG9T.js +0 -24
  190. package/dist/frontend/chevron-down-B7ZrjUmT.js +0 -24
  191. package/dist/frontend/circle-check-CDqeMB2d.js +0 -28
  192. package/dist/frontend/client-Bc5Fzx40.js +0 -2785
  193. package/dist/frontend/clock-Ck5Sn-Zl.js +0 -28
  194. package/dist/frontend/clsx-nmtDPO_P.js +0 -16
  195. package/dist/frontend/copy-CMAA6GP0.js +0 -31
  196. package/dist/frontend/dialog-BDkiG42a.js +0 -213
  197. package/dist/frontend/disclose-version-5I57E3LD.js +0 -3
  198. package/dist/frontend/ellipsis-vertical-BBuPldbW.js +0 -519
  199. package/dist/frontend/folder-TQjKY4yn.js +0 -44
  200. package/dist/frontend/index-client-jobkrWVL.js +0 -86
  201. package/dist/frontend/input-CBI6p4Xl.js +0 -23
  202. package/dist/frontend/label-C-GkhEp4.js +0 -30
  203. package/dist/frontend/rotate-ccw-CleZtJ5D.js +0 -24
  204. package/dist/frontend/select-value-CvrWRkXW.js +0 -1436
  205. package/dist/frontend/subfolders-refresh-store.svelte-BsheoQma.js +0 -65
  206. package/dist/frontend/tag-Dx3SmucJ.js +0 -53
  207. package/dist/frontend/tag-store.svelte-CIaF4sdZ.js +0 -29
  208. package/dist/frontend/textarea-Dfp78XlL.js +0 -23
  209. package/dist/frontend/theme.svelte-CROg1Hi5.js +0 -49
  210. package/dist/frontend/x-DaTdeDXv.js +0 -24
@@ -0,0 +1,264 @@
1
+ import { _n as action_save, ar as tags_edit, gn as action_cancel, ir as tags_name_placeholder, ln as action_loading, or as tags_new, pn as action_create, yn as error_generic } from "./messages-CvqpZNJe.js";
2
+ import { t as Loader_circle } from "./loader-circle-DZsrZ-er.js";
3
+ import { t as cn } from "./utils-DvZnctjz.js";
4
+ import { a as Dialog, i as Dialog_description, n as Dialog_header, o as Button, r as Dialog_footer, t as Dialog_title } from "./dialog-BOV1u6zP.js";
5
+ import { t as Input } from "./input-DezGsU3y.js";
6
+ import { t as Label } from "./label-Bj8-TfFN.js";
7
+ import { c as updateTag, l as updateTagInputSchema, n as createTag, r as createTagInputSchema } from "./tags-BId2wdYd.js";
8
+ import * as $ from "svelte/internal/server";
9
+ //#region src/lib/components/TagCreateDialog.svelte
10
+ function TagCreateDialog($$renderer, $$props) {
11
+ $$renderer.component(($$renderer) => {
12
+ const PRESET_COLORS = [
13
+ "#ef4444",
14
+ "#f97316",
15
+ "#f59e0b",
16
+ "#eab308",
17
+ "#84cc16",
18
+ "#22c55e",
19
+ "#10b981",
20
+ "#06b6d4",
21
+ "#3b82f6",
22
+ "#8b5cf6",
23
+ "#ec4899"
24
+ ];
25
+ const DEFAULT_COLOR = PRESET_COLORS[9];
26
+ let { open = false, mode = "create", tag = null, onCreated, onUpdated, onClose } = $$props;
27
+ let name = "";
28
+ let color = DEFAULT_COLOR;
29
+ let nameError = null;
30
+ let submitError = null;
31
+ let submitting = false;
32
+ const isEdit = $.derived(() => mode === "edit");
33
+ const dialogTitle = $.derived(() => isEdit() ? tags_edit() : tags_new());
34
+ const submitLabel = $.derived(() => submitting ? action_loading() : isEdit() ? action_save() : action_create());
35
+ function reset() {
36
+ name = "";
37
+ color = DEFAULT_COLOR;
38
+ nameError = null;
39
+ submitError = null;
40
+ submitting = false;
41
+ }
42
+ function seedFromTag(t) {
43
+ if (!t) {
44
+ reset();
45
+ return;
46
+ }
47
+ name = t.name;
48
+ color = t.color ?? DEFAULT_COLOR;
49
+ nameError = null;
50
+ submitError = null;
51
+ submitting = false;
52
+ }
53
+ function close() {
54
+ open = false;
55
+ reset();
56
+ onClose?.();
57
+ }
58
+ function handleOpenChange(next) {
59
+ if (next) seedFromTag(tag);
60
+ else {
61
+ reset();
62
+ open = false;
63
+ onClose?.();
64
+ }
65
+ }
66
+ function handleSubmit(e) {
67
+ e.preventDefault();
68
+ nameError = null;
69
+ submitError = null;
70
+ const trimmed = name.trim();
71
+ if (trimmed.length === 0) {
72
+ nameError = tags_name_placeholder();
73
+ return;
74
+ }
75
+ if (isEdit() && tag) {
76
+ const parsed = updateTagInputSchema.safeParse({
77
+ name: trimmed,
78
+ color
79
+ });
80
+ if (!parsed.success) {
81
+ nameError = parsed.error.issues[0]?.message ?? error_generic();
82
+ return;
83
+ }
84
+ doUpdate(tag.id, parsed.data);
85
+ } else {
86
+ const parsed = createTagInputSchema.safeParse({
87
+ name: trimmed,
88
+ color
89
+ });
90
+ if (!parsed.success) {
91
+ nameError = parsed.error.issues[0]?.message ?? error_generic();
92
+ return;
93
+ }
94
+ doCreate(parsed.data.name, color);
95
+ }
96
+ }
97
+ async function doCreate(trimmed, pickedColor) {
98
+ submitting = true;
99
+ try {
100
+ const created = await createTag(trimmed, pickedColor);
101
+ onCreated?.(created);
102
+ close();
103
+ } catch (e) {
104
+ submitError = e instanceof Error ? e.message : error_generic();
105
+ console.error("TagCreateDialog: createTag failed", e);
106
+ } finally {
107
+ submitting = false;
108
+ }
109
+ }
110
+ async function doUpdate(id, data) {
111
+ submitting = true;
112
+ try {
113
+ const updated = await updateTag(id, data);
114
+ onUpdated?.(updated);
115
+ close();
116
+ } catch (e) {
117
+ submitError = e instanceof Error ? e.message : error_generic();
118
+ console.error("TagCreateDialog: updateTag failed", e);
119
+ } finally {
120
+ submitting = false;
121
+ }
122
+ }
123
+ function handleInputKeydown(e) {
124
+ if (e.key === "Enter" && !submitting) {
125
+ e.preventDefault();
126
+ handleSubmit(new Event("submit"));
127
+ }
128
+ }
129
+ let $$settled = true;
130
+ let $$inner_renderer;
131
+ function $$render_inner($$renderer) {
132
+ Dialog($$renderer, {
133
+ onOpenChange: handleOpenChange,
134
+ get open() {
135
+ return open;
136
+ },
137
+ set open($$value) {
138
+ open = $$value;
139
+ $$settled = false;
140
+ },
141
+ children: ($$renderer) => {
142
+ Dialog_header($$renderer, {
143
+ children: ($$renderer) => {
144
+ Dialog_title($$renderer, {
145
+ children: ($$renderer) => {
146
+ $$renderer.push(`<!---->${$.escape(dialogTitle())}`);
147
+ },
148
+ $$slots: { default: true }
149
+ });
150
+ $$renderer.push(`<!----> `);
151
+ Dialog_description($$renderer, {
152
+ children: ($$renderer) => {
153
+ $$renderer.push(`<!---->${$.escape(tags_name_placeholder())}`);
154
+ },
155
+ $$slots: { default: true }
156
+ });
157
+ $$renderer.push(`<!---->`);
158
+ },
159
+ $$slots: { default: true }
160
+ });
161
+ $$renderer.push(`<!----> <form class="space-y-4"><div class="space-y-2">`);
162
+ Label($$renderer, {
163
+ for: "tag-name",
164
+ class: "sr-only",
165
+ children: ($$renderer) => {
166
+ $$renderer.push(`<!---->${$.escape(tags_name_placeholder())}`);
167
+ },
168
+ $$slots: { default: true }
169
+ });
170
+ $$renderer.push(`<!----> `);
171
+ Input($$renderer, {
172
+ id: "tag-name",
173
+ name: "name",
174
+ type: "text",
175
+ placeholder: tags_name_placeholder(),
176
+ maxlength: 50,
177
+ required: true,
178
+ disabled: submitting,
179
+ "aria-invalid": nameError ? "true" : void 0,
180
+ "aria-describedby": nameError ? "tag-name-error" : void 0,
181
+ autocomplete: "off",
182
+ onkeydown: handleInputKeydown,
183
+ get value() {
184
+ return name;
185
+ },
186
+ set value($$value) {
187
+ name = $$value;
188
+ $$settled = false;
189
+ }
190
+ });
191
+ $$renderer.push(`<!----> `);
192
+ if (nameError) {
193
+ $$renderer.push("<!--[0-->");
194
+ $$renderer.push(`<p id="tag-name-error" class="text-xs text-destructive">${$.escape(nameError)}</p>`);
195
+ } else $$renderer.push("<!--[-1-->");
196
+ $$renderer.push(`<!--]--></div> <div class="space-y-2">`);
197
+ Label($$renderer, {
198
+ for: "tag-color",
199
+ class: "text-xs text-muted-foreground",
200
+ children: ($$renderer) => {
201
+ $$renderer.push(`<!---->Color`);
202
+ },
203
+ $$slots: { default: true }
204
+ });
205
+ $$renderer.push(`<!----> <div id="tag-color" class="flex flex-wrap gap-2"><!--[-->`);
206
+ const each_array = $.ensure_array_like(PRESET_COLORS);
207
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
208
+ let preset = each_array[$$index];
209
+ const selected = color === preset;
210
+ $$renderer.push(`<button type="button"${$.attr_class($.clsx(cn("size-6 shrink-0 rounded-full border-2 transition-all", selected ? "scale-110 border-foreground" : "border-transparent hover:scale-105")))}${$.attr_style(`background-color: ${$.stringify(preset)};`)}${$.attr("aria-label", `Color ${$.stringify(preset)}`)}${$.attr("aria-pressed", selected)}${$.attr("disabled", submitting, true)}></button>`);
211
+ }
212
+ $$renderer.push(`<!--]--> <label${$.attr_class($.clsx(cn("relative inline-flex size-6 shrink-0 cursor-pointer items-center justify-center overflow-hidden rounded-full border-2 transition-all", !PRESET_COLORS.includes(color) ? "scale-110 border-foreground" : "border-transparent hover:scale-105")))}${$.attr_style(`background-color: ${$.stringify(color)};`)} title="Custom color"><input type="color"${$.attr("value", color)}${$.attr("disabled", submitting, true)} class="absolute inset-0 h-full w-full cursor-pointer opacity-0" aria-label="Custom color"/></label></div></div> `);
213
+ if (submitError) {
214
+ $$renderer.push("<!--[0-->");
215
+ $$renderer.push(`<p class="text-xs text-destructive" role="alert">${$.escape(submitError)}</p>`);
216
+ } else $$renderer.push("<!--[-1-->");
217
+ $$renderer.push(`<!--]--></form> `);
218
+ Dialog_footer($$renderer, {
219
+ class: "gap-2 max-sm:flex-col max-sm:items-stretch",
220
+ children: ($$renderer) => {
221
+ Button($$renderer, {
222
+ variant: "outline",
223
+ type: "button",
224
+ onclick: close,
225
+ disabled: submitting,
226
+ children: ($$renderer) => {
227
+ $$renderer.push(`<!---->${$.escape(action_cancel())}`);
228
+ },
229
+ $$slots: { default: true }
230
+ });
231
+ $$renderer.push(`<!----> `);
232
+ Button($$renderer, {
233
+ type: "submit",
234
+ onclick: handleSubmit,
235
+ disabled: submitting || name.trim().length === 0,
236
+ children: ($$renderer) => {
237
+ if (submitting) {
238
+ $$renderer.push("<!--[0-->");
239
+ Loader_circle($$renderer, { class: "mr-1 size-4 animate-spin" });
240
+ } else $$renderer.push("<!--[-1-->");
241
+ $$renderer.push(`<!--]--> ${$.escape(submitLabel())}`);
242
+ },
243
+ $$slots: { default: true }
244
+ });
245
+ $$renderer.push(`<!---->`);
246
+ },
247
+ $$slots: { default: true }
248
+ });
249
+ $$renderer.push(`<!---->`);
250
+ },
251
+ $$slots: { default: true }
252
+ });
253
+ }
254
+ do {
255
+ $$settled = true;
256
+ $$inner_renderer = $$renderer.copy();
257
+ $$render_inner($$inner_renderer);
258
+ } while (!$$settled);
259
+ $$renderer.subsume($$inner_renderer);
260
+ $.bind_props($$props, { open });
261
+ });
262
+ }
263
+ //#endregion
264
+ export { TagCreateDialog as t };
@@ -0,0 +1,35 @@
1
+ import { n as apiFetch } from "./client-DZMkDkDn.js";
2
+ //#region src/lib/api/api-keys.ts
3
+ function listApiKeys() {
4
+ return apiFetch("/api/keys");
5
+ }
6
+ function createGlobalApiKey(name) {
7
+ return apiFetch("/api/keys/global", {
8
+ method: "POST",
9
+ body: { name }
10
+ });
11
+ }
12
+ function createCategoryApiKey(categoryId, name) {
13
+ return apiFetch(`/api/categories/${encodeURIComponent(categoryId)}/keys`, {
14
+ method: "POST",
15
+ body: { name }
16
+ });
17
+ }
18
+ function revokeApiKey(id) {
19
+ return apiFetch(`/api/keys/${encodeURIComponent(id)}`, { method: "DELETE" });
20
+ }
21
+ async function revealCategoryApiKey(id) {
22
+ return (await apiFetch(`/api/keys/${encodeURIComponent(id)}/secret`)).key;
23
+ }
24
+ function categoryIdFromScopes(scopes) {
25
+ for (const scope of scopes) {
26
+ const match = /^category:([0-9a-f-]{36}):(read|edit|write)$/i.exec(scope);
27
+ if (match?.[1]) return match[1];
28
+ }
29
+ return null;
30
+ }
31
+ function apiKeyClipboardValue(key, rawKey) {
32
+ return rawKey ?? key.prefix;
33
+ }
34
+ //#endregion
35
+ export { listApiKeys as a, createGlobalApiKey as i, categoryIdFromScopes as n, revealCategoryApiKey as o, createCategoryApiKey as r, revokeApiKey as s, apiKeyClipboardValue as t };
@@ -0,0 +1,85 @@
1
+ import { n as apiFetch } from "./client-DZMkDkDn.js";
2
+ //#region src/lib/api/attachments.ts
3
+ /**
4
+ * Server-side attachment size limit (bytes). The backend reads this from
5
+ * `ATTACHMENT_MAX_SIZE_MB` (default 25 MB); we hard-code the same default
6
+ * here so the client UI rejects obviously-oversized files before they
7
+ * even hit the network. Operators who change the env var SHOULD also
8
+ * update this constant — they're intentionally separate to avoid a
9
+ * runtime config dependency in the frontend bundle.
10
+ */
11
+ var MAX_FILE_SIZE = 25 * 1024 * 1024;
12
+ /**
13
+ * Request a presigned PUT URL from the backend. The returned URL is
14
+ * scoped to a single storage object and expires after `expiresIn` seconds.
15
+ * No file bytes cross the wire in this call.
16
+ */
17
+ function presignAttachment(documentId, file) {
18
+ return apiFetch(`/api/documents/${documentId}/attachments/presign`, {
19
+ method: "POST",
20
+ body: {
21
+ filename: file.name,
22
+ contentType: file.type,
23
+ size: file.size
24
+ }
25
+ });
26
+ }
27
+ /**
28
+ * Tell the backend to record an attachment row for an object that has
29
+ * already been PUT to storage. The backend verifies the object exists
30
+ * before inserting.
31
+ */
32
+ function confirmAttachment(documentId, key, file) {
33
+ return apiFetch(`/api/documents/${documentId}/attachments/confirm`, {
34
+ method: "POST",
35
+ body: {
36
+ key,
37
+ filename: file.name,
38
+ contentType: file.type,
39
+ size: file.size
40
+ }
41
+ });
42
+ }
43
+ /**
44
+ * Upload an image attachment using the presigned-URL flow:
45
+ *
46
+ * 1. POST /attachments/presign — get a signed storage PUT URL (small JSON).
47
+ * 2. PUT <presigned URL> — stream the file bytes to storage directly
48
+ * (NOT through this API process).
49
+ * 3. POST /attachments/confirm — record the row; backend verifies the
50
+ * object actually exists in storage.
51
+ *
52
+ * The orchestration is transparent to callers — they keep calling
53
+ * `uploadAttachment(documentId, file)` exactly as before. Step 2 never
54
+ * touches `/api/*`, so the Bun/Elysia global body-size cap is irrelevant
55
+ * and large images (up to `MAX_FILE_SIZE`) upload without 413.
56
+ */
57
+ async function uploadAttachment(documentId, file) {
58
+ const presign = await presignAttachment(documentId, file);
59
+ const putController = new AbortController();
60
+ const putTimeout = setTimeout(() => putController.abort(), 5 * 6e4);
61
+ let putResponse;
62
+ try {
63
+ putResponse = await fetch(presign.url, {
64
+ method: "PUT",
65
+ body: file,
66
+ headers: { "Content-Type": file.type },
67
+ signal: putController.signal
68
+ });
69
+ } finally {
70
+ clearTimeout(putTimeout);
71
+ }
72
+ if (!putResponse.ok) throw new Error(`Storage upload failed: ${putResponse.status} ${putResponse.statusText}`);
73
+ return confirmAttachment(documentId, presign.key, file);
74
+ }
75
+ function listAttachments(documentId) {
76
+ return apiFetch(`/api/documents/${documentId}/attachments`);
77
+ }
78
+ function isImageFile(file) {
79
+ return file.type.startsWith("image/");
80
+ }
81
+ function isFileSizeAllowed(file) {
82
+ return file.size <= MAX_FILE_SIZE;
83
+ }
84
+ //#endregion
85
+ export { presignAttachment as a, listAttachments as i, isFileSizeAllowed as n, uploadAttachment as o, isImageFile as r, confirmAttachment as t };