@hiai-gg/docsmint 0.5.8 → 0.5.10

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.
@@ -194469,11 +194469,17 @@ async function reembedDocsInFolder(folderId, ownerId, workspaceId) {
194469
194469
  return enqueued;
194470
194470
  }
194471
194471
  async function reembedDocsInFolderAdmin(folderId) {
194472
- const limit = config3.FOLDER_REEMBED_BATCH_SIZE;
194473
- const rows = await withTenant(REEMBED_ADMIN_TENANT, (tx) => {
194472
+ return reembedDocsInFolderAdminWith(folderId, loadAdminFolderDocumentIds);
194473
+ }
194474
+ async function loadAdminFolderDocumentIds(folderId, limit) {
194475
+ return withTenant(REEMBED_ADMIN_TENANT, (tx) => {
194474
194476
  const query = tx.select({ id: documents.id }).from(documents).where(eq(documents.folderId, folderId));
194475
194477
  return limit > 0 ? query.limit(limit) : query;
194476
194478
  });
194479
+ }
194480
+ async function reembedDocsInFolderAdminWith(folderId, loadRows) {
194481
+ const limit = config3.FOLDER_REEMBED_BATCH_SIZE;
194482
+ const rows = await loadRows(folderId, limit);
194477
194483
  const enqueued = await enqueueReembed(rows.map((r4) => r4.id));
194478
194484
  if (enqueued > 0) {
194479
194485
  logger3.info({ folderId, enqueued, limit, scope: "admin" }, "Re-embedding documents after admin folder reindex");
@@ -234280,7 +234286,7 @@ var swaggerConfig = {
234280
234286
  },
234281
234287
  info: {
234282
234288
  title: "DocsMint API",
234283
- version: "0.5.8",
234289
+ version: "0.5.10",
234284
234290
  description: "Self-hosted AI-first documentation platform. Full-text + semantic search, version history, sharing, and folder organization.",
234285
234291
  contact: { name: "HiAi-gg", url: "https://github.com/HiAi-gg/docsmint" },
234286
234292
  license: {
@@ -26,7 +26,7 @@ function S(e, t) {
26
26
  }
27
27
  //#endregion
28
28
  //#region src/lib/components/sidebar/CategoryDialog.svelte
29
- var _e = x.from_html("<span class=\"font-medium text-foreground\"> </span> ", 1), ve = x.from_html("Delete <span class=\"font-medium text-foreground\"> </span> ", 1), C = x.from_html("<!> <!>", 1), ye = x.from_html("<div class=\"flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/10 p-4\" role=\"status\" aria-live=\"polite\"><!> <div><p class=\"text-sm font-medium text-foreground\"> </p> <p class=\"text-sm text-muted-foreground\"><span class=\"font-medium text-foreground\"> </span> </p></div></div>"), be = x.from_html("<!> Copy API key", 1), xe = x.from_html("<div class=\"rounded-md border border-primary/20 bg-background/80 p-3\"><p class=\"text-xs font-medium text-foreground\">Copy the API key now. It remains available in Settings → API.</p> <code class=\"mt-2 block break-all rounded bg-muted p-2 text-xs text-foreground\"> </code> <!></div>"), w = x.from_html("<p class=\"text-xs text-destructive\" role=\"alert\"> </p>"), Se = x.from_html("<div class=\"space-y-3 rounded-lg border border-primary/30 bg-primary/10 p-4\" role=\"status\" aria-live=\"polite\"><div class=\"flex items-start gap-3\"><!> <div><p class=\"text-sm font-medium text-foreground\">Category created</p> <p class=\"text-sm text-muted-foreground\"> </p></div></div> <!> <!></div>"), Ce = x.from_html("<p id=\"category-dialog-name-error\" class=\"text-xs text-destructive\" role=\"alert\"> </p>"), T = x.from_html("<!> <!> <!>", 1), we = x.from_html("<div class=\"space-y-3 rounded-md border border-border/70 bg-muted/30 p-3\"><div class=\"flex flex-wrap items-center justify-between gap-2\"><!> <div class=\"flex flex-wrap gap-2\"><!> <!></div></div> <div class=\"grid gap-2 sm:grid-cols-3\"><label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Read</span></label> <label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Edit</span></label> <label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Write</span></label></div></div>"), Te = x.from_html("<div class=\"rounded-lg border border-primary/30 bg-primary/10 p-3 text-primary\"><p class=\"text-xs font-medium\">Copy now — this raw key is shown once.</p> <code class=\"mt-1 block break-all rounded bg-background/80 p-2 text-xs text-foreground\"> </code> <!></div>"), Ee = x.from_html("<div class=\"flex items-center justify-between gap-3 rounded-md bg-muted/40 px-3 py-2 text-xs\"><span> </span> <div class=\"flex shrink-0 gap-2\"><!> <!></div></div>"), De = x.from_html("<div class=\"space-y-3 rounded-md border border-border/70 p-3\"><div class=\"flex items-center justify-between gap-2\"><div><!><p class=\"text-xs text-muted-foreground\">The current permissions are saved before the key is issued.</p></div> <!></div> <!> <div class=\"max-h-48 space-y-2 overflow-y-auto pr-1\"></div></div>"), Oe = x.from_html("<form class=\"space-y-4\"><div class=\"space-y-2\"><!> <!> <!></div> <div class=\"space-y-2\"><!> <!></div> <!> <!></form>"), ke = x.from_html("<!> ", 1);
29
+ var _e = x.from_html("<span class=\"font-medium text-foreground\"> </span> ", 1), ve = x.from_html("Delete <span class=\"font-medium text-foreground\"> </span> ", 1), C = x.from_html("<!> <!>", 1), ye = x.from_html("<div class=\"flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/10 p-4\" role=\"status\" aria-live=\"polite\"><!> <div><p class=\"text-sm font-medium text-foreground\"> </p> <p class=\"text-sm text-muted-foreground\"><span class=\"font-medium text-foreground\"> </span> </p></div></div>"), be = x.from_html("<!> Copy API key", 1), xe = x.from_html("<div class=\"rounded-md border border-primary/20 bg-background/80 p-3\"><p class=\"text-xs font-medium text-foreground\">Copy the API key now. It remains available in Settings → API.</p> <code class=\"mt-2 block break-all rounded bg-muted p-2 text-xs text-foreground\"> </code> <!></div>"), w = x.from_html("<p class=\"text-xs text-destructive\" role=\"alert\"> </p>"), Se = x.from_html("<div class=\"space-y-3 rounded-lg border border-primary/30 bg-primary/10 p-4\" role=\"status\" aria-live=\"polite\"><div class=\"flex items-start gap-3\"><!> <div><p class=\"text-sm font-medium text-foreground\">Category created</p> <p class=\"text-sm text-muted-foreground\"> </p></div></div> <!> <!></div>"), Ce = x.from_html("<p id=\"category-dialog-name-error\" class=\"text-xs text-destructive\" role=\"alert\"> </p>"), T = x.from_html("<!> <!> <!>", 1), we = x.from_html("<div class=\"space-y-3 rounded-md border border-border/70 bg-muted/30 p-3\"><div class=\"flex flex-wrap items-center justify-between gap-2\"><!> <div class=\"flex flex-wrap gap-2\"><!> <!></div></div> <div class=\"grid gap-2 sm:grid-cols-3\"><label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Read</span></label> <label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Edit</span></label> <label class=\"flex items-center gap-2 rounded-md border border-border/60 bg-background px-3 py-2 text-sm\"><input type=\"checkbox\" class=\"size-4 rounded border-input\"/> <span>Write</span></label></div></div>"), Te = x.from_html("<div class=\"rounded-lg border border-primary/30 bg-primary/10 p-3 text-primary\"><p class=\"text-xs font-medium\">Copy now — this raw key is shown once.</p> <code class=\"mt-1 block break-all rounded bg-background/80 p-2 text-xs text-foreground\"> </code> <!></div>"), Ee = x.from_html("<div class=\"flex items-center justify-between gap-3 rounded-md bg-muted/40 px-3 py-2 text-xs\"><span> </span> <div class=\"flex shrink-0 gap-2\"><!> <!></div></div>"), De = x.from_html("<div class=\"space-y-3 rounded-md border border-border/70 p-3\"><div class=\"flex items-center justify-between gap-2 max-sm:flex-col max-sm:items-stretch\"><div><!> <p class=\"text-xs text-muted-foreground\">The current permissions are saved before the key is issued.</p></div> <!></div> <!> <div class=\"max-h-48 space-y-2 overflow-y-auto pr-1\"></div></div>"), Oe = x.from_html("<form data-category-dialog-scroll=\"\" class=\"max-h-[calc(100dvh-12rem)] space-y-4 overflow-y-auto overscroll-contain pr-1\"><div class=\"space-y-2\"><!> <!> <!></div> <div class=\"space-y-2\"><!> <!></div> <!> <!></form>"), ke = x.from_html("<!> ", 1);
30
30
  function E(E, D) {
31
31
  x.push(D, !0);
32
32
  let O = {
@@ -215,7 +215,7 @@ function E(E, D) {
215
215
  var a = x.sibling(r);
216
216
  x.template_effect((e) => {
217
217
  x.set_text(i, `“${D.category?.name ?? "Category" ?? ""}”`), x.set_text(a, `?
218
- ${e ?? ""}`);
218
+ ${e ?? ""}`);
219
219
  }, [() => c()]), x.append(e, n);
220
220
  },
221
221
  $$slots: { default: !0 }
@@ -475,7 +475,7 @@ function E(E, D) {
475
475
  x.append(e, n);
476
476
  },
477
477
  $$slots: { default: !0 }
478
- }), x.next(), x.reset(r);
478
+ }), x.next(2), x.reset(r);
479
479
  var i = x.sibling(r, 2);
480
480
  {
481
481
  let e = x.derived(() => x.get(N) || x.get(V) || !x.get(q) || !x.get(Y));
@@ -26,7 +26,7 @@ import { c as Ke, r as qe, s as Je, t as Ye } from "./folders-ONG03Dkv.js";
26
26
  import { t as Xe } from "./DeleteDialog-8k6JYWCx.js";
27
27
  import { t as Ze } from "./clipboard-Cgzxc0_R.js";
28
28
  import { t as Qe } from "./ShareDialog-BC-Jl6v1.js";
29
- import { t as $e } from "./CategoryDialog-BYAFjX7E.js";
29
+ import { t as $e } from "./CategoryDialog-CbXBMBZB.js";
30
30
  import { n as et, t as tt } from "./document-drop-coordinator-C4xHMjwC.js";
31
31
  import { a as nt, c as rt, d as it, f as at, i as ot, n as st, o as ct, p as lt, r as ut, s as dt, t as ft, u as pt } from "./subfolders-refresh-store.svelte-DxP21a1c.js";
32
32
  import { t as mt } from "./FolderNode-DAAn_T8_.js";
@@ -162,7 +162,7 @@ var At = (e, t = V.noop) => {
162
162
  c(r, { class: "size-4 shrink-0 text-muted-foreground" });
163
163
  var i = V.sibling(r, 2), a = V.child(i, !0);
164
164
  V.reset(i), V.reset(n), V.template_effect((e) => {
165
- V.set_attribute(n, "href", `/docs/${t().id}`), V.set_class(n, 1, e), V.set_text(a, t().title);
165
+ V.set_attribute(n, "href", `/docs/${t().id}`), V.set_class(n, 1, e, "svelte-1nshngr"), V.set_text(a, t().title);
166
166
  }, [() => V.clsx(F("flex w-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", H.params.id === t().id && "bg-accent text-accent-foreground font-medium"))]), V.append(e, n);
167
167
  }, jt = V.from_html("<button><!></button>"), Mt = V.from_html("<!> <!> <!>", 1), Nt = V.from_html("<!> <!>", 1), Pt = V.from_html("<button type=\"button\"><!></button>"), Ft = V.from_html("<a data-sveltekit-noscroll=\"\"><span class=\"w-3.5 shrink-0\"></span> <!> <span class=\"min-w-0 truncate\"> </span></a>"), It = V.from_html("<p class=\"px-2 text-xs text-destructive\"> </p>"), Lt = V.from_html("<!> <!> <!> <!> <!> <!>", 1), Rt = V.from_html("<div><!></div>"), zt = V.from_html("<div class=\"group/doc flex w-full min-w-0 items-center gap-1\"><!> <!> <!></div>"), Bt = V.from_html("<div class=\"ml-0.5 space-y-0.5 border-l border-border pl-0.5\"><div></div> <div></div></div>"), Vt = V.from_html("<div class=\"group/bucket\"><div class=\"flex w-full min-w-0 items-center gap-0.5\"><button type=\"button\"><!> <span class=\"min-w-0 truncate\"> </span></button> <!></div> <!></div>"), Ht = V.from_html("<div class=\"group/bucket\"><div class=\"flex w-full min-w-0 items-center gap-0.5\"><button type=\"button\"><!> <span class=\"min-w-0 truncate\"> </span></button></div> <!></div>"), Ut = V.from_html("<p id=\"rename-input-error\" class=\"text-xs text-destructive\" role=\"alert\"> </p>"), Wt = V.from_html("<!> <form class=\"space-y-4\"><div class=\"space-y-2\"><!> <!> <!></div></form> <!>", 1), Gt = V.from_html("<div class=\"space-y-1\"><div class=\"mb-2 flex items-center justify-between gap-1\"><a class=\"block flex-1 px-2 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground\"> </a> <button type=\"button\" class=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"><!></button></div> <!> <!> <div class=\"min-h-[8px] space-y-1\"></div> <!> <button type=\"button\" class=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"><!> <span> </span></button></div> <!> <!> <!> <!> <!>", 1);
168
168
  function Kt(e, i) {
@@ -180,11 +180,11 @@ function Kt(e, i) {
180
180
  V.attribute_effect(r, (e, t) => ({
181
181
  ...n(),
182
182
  type: "button",
183
- class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
183
+ class: "sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
184
184
  "aria-label": e,
185
185
  title: t,
186
186
  onclick: i
187
- }), [() => C(), () => C()]), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
187
+ }), [() => C(), () => C()], void 0, void 0, "svelte-1nshngr"), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
188
188
  },
189
189
  $$slots: { child: !0 }
190
190
  }), h(V.sibling(i, 2), {
@@ -236,7 +236,7 @@ function Kt(e, i) {
236
236
  V.if(i, (e) => {
237
237
  V.get(ln) === n().id ? e(a) : V.get(cn) === n().id ? e(s, 1) : e(c, -1);
238
238
  }), V.reset(r), V.template_effect((e, t) => {
239
- V.set_class(r, 1, `inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${V.get(cn) === n().id || V.get(ln) === n().id ? "opacity-100" : ""}`), V.set_attribute(r, "aria-label", e), V.set_attribute(r, "title", t), r.disabled = V.get(ln) === n().id;
239
+ V.set_class(r, 1, `sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${V.get(cn) === n().id || V.get(ln) === n().id ? "opacity-100" : ""}`, "svelte-1nshngr"), V.set_attribute(r, "aria-label", e), V.set_attribute(r, "title", t), r.disabled = V.get(ln) === n().id;
240
240
  }, [() => re(), () => re()]), V.delegated("click", r, (e) => {
241
241
  e.preventDefault(), e.stopPropagation(), dn(n().id);
242
242
  }), V.append(e, r);
@@ -875,7 +875,7 @@ function Kt(e, i) {
875
875
  class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/bucket:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
876
876
  "aria-label": e,
877
877
  title: t
878
- }), [() => C(), () => C()]), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
878
+ }), [() => C(), () => C()], void 0, void 0, "svelte-1nshngr"), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
879
879
  },
880
880
  $$slots: { child: !0 }
881
881
  }), h(V.sibling(i, 2), {
@@ -980,7 +980,7 @@ function Kt(e, i) {
980
980
  useCursorForDetection: !0,
981
981
  centreDraggedOnCursor: !0
982
982
  })), V.reset(i), V.template_effect((e, t) => {
983
- V.set_class(o, 1, e), V.set_class(d, 1, t);
983
+ V.set_class(o, 1, e, "svelte-1nshngr"), V.set_class(d, 1, t, "svelte-1nshngr");
984
984
  }, [() => V.clsx(F("min-h-[8px] space-y-0.5 transition-all duration-150", V.get(L) && V.get(n).length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), () => V.clsx(F("min-h-[8px] space-y-0.5 transition-all duration-150", V.get(it) && V.get(r).length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20"))]), V.event("consider", o, function(...e) {
985
985
  V.get(s)?.apply(this, e);
986
986
  }), V.event("finalize", o, function(...e) {
@@ -994,7 +994,7 @@ function Kt(e, i) {
994
994
  V.if(y, (e) => {
995
995
  V.get(i) && e(b);
996
996
  }), V.reset(o), V.template_effect((e) => {
997
- V.set_attribute(o, "data-is-dnd-shadow-item-hint", V.get(t)[ze]), V.set_attribute(l, "aria-expanded", V.get(i)), V.set_class(l, 1, e), V.set_text(v, V.get(t).category.name);
997
+ V.set_attribute(o, "data-is-dnd-shadow-item-hint", V.get(t)[ze]), V.set_attribute(l, "aria-expanded", V.get(i)), V.set_class(l, 1, e, "svelte-1nshngr"), V.set_text(v, V.get(t).category.name);
998
998
  }, [() => V.clsx(F("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", V.get(R) && "hover:bg-accent/40 border border-dashed border-primary/30"))]), V.delegated("click", l, () => An(V.get(t).id)), V.event("mouseenter", l, () => {
999
999
  V.get(I) && !V.get(i) && hn(V.get(t).id);
1000
1000
  }), V.event("mouseleave", l, () => {
@@ -1046,7 +1046,7 @@ function Kt(e, i) {
1046
1046
  useCursorForDetection: !0,
1047
1047
  centreDraggedOnCursor: !0
1048
1048
  })), V.reset(n), V.template_effect((e, t) => {
1049
- V.set_class(r, 1, e), V.set_class(s, 1, t);
1049
+ V.set_class(r, 1, e, "svelte-1nshngr"), V.set_class(s, 1, t, "svelte-1nshngr");
1050
1050
  }, [() => V.clsx(F("min-h-[8px] space-y-0.5 transition-all duration-150", V.get(L) && V.get(t).length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), () => V.clsx(F("min-h-[8px] space-y-0.5 transition-all duration-150", V.get(it) && V.get(xt).length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20"))]), V.event("consider", r, function(...e) {
1051
1051
  V.get(i)?.apply(this, e);
1052
1052
  }), V.event("finalize", r, function(...e) {
@@ -1060,7 +1060,7 @@ function Kt(e, i) {
1060
1060
  V.if(m, (e) => {
1061
1061
  V.get(D) && e(h);
1062
1062
  }), V.reset(t), V.template_effect((e, t) => {
1063
- V.set_attribute(o, "aria-expanded", V.get(D)), V.set_class(o, 1, e), V.set_text(p, t);
1063
+ V.set_attribute(o, "aria-expanded", V.get(D)), V.set_class(o, 1, e, "svelte-1nshngr"), V.set_text(p, t);
1064
1064
  }, [() => V.clsx(F("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", V.get(R) && "hover:bg-accent/40 border border-dashed border-primary/30")), () => he()]), V.delegated("click", o, jn), V.event("mouseenter", o, () => {
1065
1065
  V.get(I) && !V.get(D) && hn($);
1066
1066
  }), V.event("mouseleave", o, () => {
@@ -1433,11 +1433,11 @@ function Zt(e, n) {
1433
1433
  V.attribute_effect(r, (e, t) => ({
1434
1434
  ...n(),
1435
1435
  type: "button",
1436
- class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1436
+ class: "sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1437
1437
  "aria-label": e,
1438
1438
  title: t,
1439
1439
  onclick: i
1440
- }), [() => C(), () => C()]), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
1440
+ }), [() => C(), () => C()], void 0, void 0, "svelte-1uwxs9f"), ee(V.child(r), { class: "size-3.5" }), V.reset(r), V.append(e, r);
1441
1441
  },
1442
1442
  $$slots: { child: !0 }
1443
1443
  }), h(V.sibling(i, 2), {
@@ -1468,7 +1468,7 @@ function Zt(e, n) {
1468
1468
  },
1469
1469
  $$slots: { default: !0 }
1470
1470
  }), V.reset(r), V.template_effect((e, t, r) => {
1471
- V.set_attribute(i, "href", `/docs/${V.get(n).id}`), V.set_class(i, 1, e), V.set_text(p, V.get(n).title), V.set_text(v, V.get(n).updatedAt), V.set_class(y, 1, `inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${V.get(l) === V.get(n).id || V.get(u) === V.get(n).id ? "opacity-100" : ""}`), V.set_attribute(y, "aria-label", t), V.set_attribute(y, "title", r), y.disabled = V.get(u) === V.get(n).id;
1471
+ V.set_attribute(i, "href", `/docs/${V.get(n).id}`), V.set_class(i, 1, e, "svelte-1uwxs9f"), V.set_text(p, V.get(n).title), V.set_text(v, V.get(n).updatedAt), V.set_class(y, 1, `sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${V.get(l) === V.get(n).id || V.get(u) === V.get(n).id ? "opacity-100" : ""}`, "svelte-1uwxs9f"), V.set_attribute(y, "aria-label", t), V.set_attribute(y, "title", r), y.disabled = V.get(u) === V.get(n).id;
1472
1472
  }, [
1473
1473
  () => V.clsx(F("flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", V.get(a) === V.get(n).id && "bg-accent text-accent-foreground")),
1474
1474
  () => re(),
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./Icon-Db-o32_E.js";
2
2
  import { n as t, r as n } from "./SettingsDialog-CyZSOjLE.js";
3
- import { t as r } from "./Sidebar-B-zCJT9i.js";
3
+ import { t as r } from "./Sidebar-CzcLd6v5.js";
4
4
  import { D as i } from "./messages-DIovIZrK.js";
5
5
  import { o as a, r as o } from "./route-context-DYQlUfzL.js";
6
6
  import { d as s } from "./subfolders-refresh-store.svelte-DxP21a1c.js";
@@ -67,12 +67,15 @@ var v = d.state(!1), y = {
67
67
  }
68
68
  };
69
69
  function b() {
70
+ d.set(v, !0);
71
+ }
72
+ function x() {
70
73
  d.set(v, !1);
71
74
  }
72
75
  //#endregion
73
76
  //#region src/lib/components/MobileSidebarToggle.svelte
74
- var x = d.from_html("<button type=\"button\" class=\"mobile-sidebar-toggle fixed left-3 top-3 flex size-11 items-center justify-center rounded-md border border-border bg-background text-foreground shadow-sm transition-colors hover:bg-accent md:hidden\" style=\"top: calc(0.75rem + env(safe-area-inset-top));\"><!></button>");
75
- function S(e, t) {
77
+ var S = d.from_html("<button type=\"button\" class=\"mobile-sidebar-toggle fixed left-3 top-3 flex size-11 items-center justify-center rounded-md border border-border bg-background text-foreground shadow-sm transition-colors hover:bg-accent md:hidden\" style=\"top: calc(0.75rem + env(safe-area-inset-top));\"><!></button>");
78
+ function C(e, t) {
76
79
  d.push(t, !0);
77
80
  let n = d.prop(t, "buttonRef", 15, null), r = d.prop(t, "controls", 3, "mobile-navigation"), i = d.state(!1);
78
81
  function a() {
@@ -95,7 +98,7 @@ function S(e, t) {
95
98
  y.toggle();
96
99
  }
97
100
  var s = d.comment(), c = d.first_child(s), l = (e) => {
98
- var t = x();
101
+ var t = S();
99
102
  _(d.child(t), { class: "size-5" }), d.reset(t), d.bind_this(t, (e) => n(e), () => n()), d.template_effect(() => {
100
103
  d.set_attribute(t, "aria-label", y.open ? "Close navigation menu" : "Open navigation menu"), d.set_attribute(t, "aria-expanded", y.open), d.set_attribute(t, "aria-controls", r());
101
104
  }), d.delegated("click", t, o), d.append(e, t);
@@ -107,8 +110,8 @@ function S(e, t) {
107
110
  d.delegate(["click"]);
108
111
  //#endregion
109
112
  //#region src/lib/components/ScrollToTop.svelte
110
- var C = d.from_html("<button type=\"button\"><!></button>");
111
- function w(e, t) {
113
+ var w = d.from_html("<button type=\"button\"><!></button>");
114
+ function T(e, t) {
112
115
  d.push(t, !0);
113
116
  let n = d.prop(t, "avoidEditorToolbar", 3, !1), r = d.state(!1), a = null, o = d.state("none"), s = d.state(void 0);
114
117
  function c() {
@@ -169,7 +172,7 @@ function w(e, t) {
169
172
  t.disconnect(), r.disconnect(), window.removeEventListener("resize", e);
170
173
  };
171
174
  });
172
- var m = C();
175
+ var m = w();
173
176
  let h, _;
174
177
  g(d.child(m), { class: "size-5" }), d.reset(m), d.template_effect((e, t) => {
175
178
  h = d.set_class(m, 1, `scroll-to-top fixed bottom-6 right-6 z-50 inline-flex size-10 items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-md transition-all hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${d.get(r) ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"}`, null, h, {
@@ -180,22 +183,44 @@ function w(e, t) {
180
183
  }
181
184
  d.delegate(["click"]);
182
185
  //#endregion
186
+ //#region src/lib/stores/mobile-sidebar-gesture.ts
187
+ function E(e = {}) {
188
+ let t = e.edgeWidth ?? 36, n = e.openDistance ?? 40, r = e.scrollTolerance ?? 12, i = null, a = !1;
189
+ return {
190
+ start(e) {
191
+ return i = e.x <= t ? e : null, a = !1, i ? "tracking" : "idle";
192
+ },
193
+ move(e) {
194
+ if (!i || a) return a ? "cancelled" : "idle";
195
+ let t = e.x - i.x, o = Math.abs(e.y - i.y);
196
+ return o > r && o > Math.abs(t) ? (a = !0, "cancelled") : t >= n && o <= Math.max(r * 2, t) ? (i = null, "open") : "tracking";
197
+ },
198
+ end(e) {
199
+ let t = this.move(e);
200
+ return i = null, a = !1, t === "open" ? "open" : "idle";
201
+ },
202
+ cancel() {
203
+ i = null, a = !1;
204
+ }
205
+ };
206
+ }
207
+ //#endregion
183
208
  //#region src/lib/hosts/mutation-refresh.ts
184
- var T = {
209
+ var D = {
185
210
  documents: !1,
186
211
  folders: !1,
187
212
  tags: !1
188
213
  };
189
- function E(e, t) {
214
+ function O(e, t) {
190
215
  let n = (t?.method ?? (e instanceof Request ? e.method : "GET")).toUpperCase();
191
216
  if (![
192
217
  "POST",
193
218
  "PUT",
194
219
  "PATCH",
195
220
  "DELETE"
196
- ].includes(n)) return T;
221
+ ].includes(n)) return D;
197
222
  let r = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, i = new URL(r, "http://docsmint.local").pathname;
198
- return /\/keys(?:\/|$)/.test(i) ? T : /^\/api\/(?:v1\/)?tags(?:\/|$)/.test(i) || /^\/api\/(?:v1\/)?documents\/[^/]+\/tags(?:\/|$)/.test(i) ? {
223
+ return /\/keys(?:\/|$)/.test(i) ? D : /^\/api\/(?:v1\/)?tags(?:\/|$)/.test(i) || /^\/api\/(?:v1\/)?documents\/[^/]+\/tags(?:\/|$)/.test(i) ? {
199
224
  documents: !0,
200
225
  folders: !1,
201
226
  tags: !0
@@ -203,24 +228,24 @@ function E(e, t) {
203
228
  documents: !0,
204
229
  folders: !0,
205
230
  tags: !1
206
- } : T;
231
+ } : D;
207
232
  }
208
- function D(e) {
233
+ function k(e) {
209
234
  return e.documents || e.folders || e.tags;
210
235
  }
211
236
  //#endregion
212
237
  //#region src/lib/hosts/realtime-context.ts
213
- var O = Symbol("docsmint-realtime-adapter");
214
- function k(e) {
215
- m(O, e);
238
+ var A = Symbol("docsmint-realtime-adapter");
239
+ function j(e) {
240
+ m(A, e);
216
241
  }
217
- function A() {
218
- return f(O);
242
+ function M() {
243
+ return f(A);
219
244
  }
220
245
  //#endregion
221
246
  //#region src/lib/hosts/DocsmintAppShellHost.svelte
222
- var j = d.from_html("<button type=\"button\" tabindex=\"-1\" aria-label=\"Close navigation menu\" class=\"fixed inset-0 z-40 bg-black/50\"></button>"), M = d.from_html("<div class=\"flex h-screen\" data-docsmint-app-shell-host=\"\"><!> <main id=\"main-content\" class=\"relative flex-1 overflow-auto\"><!></main></div> <!> <!>", 1), N = d.from_html("<!> <!>", 1);
223
- function P(e, i) {
247
+ var N = d.from_html("<div data-mobile-sidebar-edge=\"\" aria-hidden=\"true\" class=\"fixed inset-y-0 left-0 z-20 w-9 md:hidden\" style=\"touch-action: pan-y;\"></div>"), P = d.from_html("<button type=\"button\" tabindex=\"-1\" aria-label=\"Close navigation menu\" class=\"fixed inset-0 z-40 bg-black/50\"></button>"), F = d.from_html("<div class=\"flex h-screen\" data-docsmint-app-shell-host=\"\"><!> <main id=\"main-content\" class=\"relative flex-1 overflow-auto\"><!></main></div> <!> <!> <!>", 1), I = d.from_html("<!> <!>", 1);
248
+ function L(e, i) {
224
249
  d.push(i, !0);
225
250
  let f = d.prop(i, "request", 19, () => ({ fetch })), p = d.prop(i, "extensions", 19, () => ({}));
226
251
  o({
@@ -230,12 +255,31 @@ function P(e, i) {
230
255
  resolve: (e) => i.route.resolve(e),
231
256
  navigate: (e, t) => i.route.navigate?.(e, t)
232
257
  }), a({ fetch: async (...e) => {
233
- let t = await f().fetch(...e), n = E(e[0], e[1]);
234
- return t.ok && D(n) && (n.documents && c(), n.folders && s(), n.tags && l()), t;
258
+ let t = await f().fetch(...e), n = O(e[0], e[1]);
259
+ return t.ok && k(n) && (n.documents && c(), n.folders && s(), n.tags && l()), t;
235
260
  } });
236
261
  let m = h(() => i.realtime);
237
- m && k(m), n.init(), t.init();
238
- let g = d.state(null), _ = d.state(null), v = d.state(null), x = d.state(!1), C = [
262
+ m && j(m), n.init(), t.init();
263
+ let g = d.state(null), _ = d.state(null), v = d.state(null), S = d.state(!1), w = E();
264
+ function D(e) {
265
+ w.start({
266
+ x: e.clientX,
267
+ y: e.clientY
268
+ }), e.currentTarget.setPointerCapture(e.pointerId);
269
+ }
270
+ function A(e) {
271
+ w.move({
272
+ x: e.clientX,
273
+ y: e.clientY
274
+ }) === "open" && (e.preventDefault(), b());
275
+ }
276
+ function M(e) {
277
+ w.end({
278
+ x: e.clientX,
279
+ y: e.clientY
280
+ }) === "open" && b();
281
+ }
282
+ let L = [
239
283
  "a[href]",
240
284
  "button:not([disabled])",
241
285
  "input:not([disabled])",
@@ -245,20 +289,20 @@ function P(e, i) {
245
289
  ].join(",");
246
290
  d.user_effect(() => {
247
291
  let e = window.matchMedia("(max-width: 767px)"), t = () => {
248
- d.set(x, e.matches, !0), d.get(x) || b();
292
+ d.set(S, e.matches, !0), d.get(S) || x();
249
293
  };
250
294
  return t(), e.addEventListener("change", t), () => e.removeEventListener("change", t);
251
295
  }), d.user_effect(() => {
252
- i.route.pathname, b();
296
+ i.route.pathname, x();
253
297
  }), d.user_effect(() => {
254
- if (!d.get(x) || !y.open || !d.get(_)) return;
298
+ if (!d.get(S) || !y.open || !d.get(_)) return;
255
299
  let e = document.activeElement instanceof HTMLElement ? document.activeElement : d.get(v), t = document.body.style.overflow;
256
300
  document.body.style.overflow = "hidden";
257
- let n = () => Array.from(d.get(_)?.querySelectorAll(C) ?? []).filter((e) => !e.hasAttribute("disabled")), r = (e) => {
301
+ let n = () => Array.from(d.get(_)?.querySelectorAll(L) ?? []).filter((e) => !e.hasAttribute("disabled")), r = (e) => {
258
302
  let t = e.target instanceof Element ? e.target.closest("[role=\"dialog\"]") : null;
259
303
  if (t && t !== d.get(_)) return;
260
304
  if (e.key === "Escape") {
261
- e.preventDefault(), b();
305
+ e.preventDefault(), x();
262
306
  return;
263
307
  }
264
308
  if (e.key !== "Tab") return;
@@ -277,16 +321,16 @@ function P(e, i) {
277
321
  cancelAnimationFrame(i), document.removeEventListener("keydown", r), document.body.style.overflow = t, e?.isConnected && e.focus();
278
322
  };
279
323
  });
280
- var T = N(), O = d.first_child(T);
281
- u(O, {
324
+ var R = I(), z = d.first_child(R);
325
+ u(z, {
282
326
  get extensions() {
283
327
  return p();
284
328
  },
285
329
  children: (e, t) => {
286
- var n = M(), a = d.first_child(n), o = d.child(a);
330
+ var n = F(), a = d.first_child(n), o = d.child(a);
287
331
  r(o, {
288
332
  get mobile() {
289
- return d.get(x);
333
+ return d.get(S);
290
334
  },
291
335
  get mobileOpen() {
292
336
  return y.open;
@@ -301,7 +345,7 @@ function P(e, i) {
301
345
  var s = d.sibling(o, 2), c = d.child(s);
302
346
  d.snippet(c, () => i.children), d.reset(s), d.bind_this(s, (e) => d.set(g, e), () => d.get(g)), d.reset(a);
303
347
  var l = d.sibling(a, 2);
304
- S(l, {
348
+ C(l, {
305
349
  get buttonRef() {
306
350
  return d.get(v);
307
351
  },
@@ -310,21 +354,28 @@ function P(e, i) {
310
354
  }
311
355
  });
312
356
  var u = d.sibling(l, 2), f = (e) => {
313
- var t = j();
357
+ var t = N();
358
+ d.delegated("pointerdown", t, D), d.delegated("pointermove", t, A), d.delegated("pointerup", t, M), d.event("pointercancel", t, () => w.cancel()), d.append(e, t);
359
+ };
360
+ d.if(u, (e) => {
361
+ d.get(S) && !y.open && e(f);
362
+ });
363
+ var p = d.sibling(u, 2), m = (e) => {
364
+ var t = P();
314
365
  d.delegated("click", t, function(...e) {
315
- b?.apply(this, e);
366
+ x?.apply(this, e);
316
367
  }), d.append(e, t);
317
368
  };
318
- d.if(u, (e) => {
319
- d.get(x) && y.open && e(f);
320
- }), d.template_effect(() => s.inert = d.get(x) && y.open), d.append(e, n);
369
+ d.if(p, (e) => {
370
+ d.get(S) && y.open && e(m);
371
+ }), d.template_effect(() => s.inert = d.get(S) && y.open), d.append(e, n);
321
372
  },
322
373
  $$slots: { default: !0 }
323
374
  });
324
- var A = d.sibling(O, 2), P = (e) => {
375
+ var B = d.sibling(z, 2), V = (e) => {
325
376
  {
326
377
  let t = d.derived(() => i.route.pathname.startsWith("/docs/"));
327
- w(e, {
378
+ T(e, {
328
379
  get scrollTarget() {
329
380
  return d.get(g);
330
381
  },
@@ -334,10 +385,15 @@ function P(e, i) {
334
385
  });
335
386
  }
336
387
  };
337
- d.if(A, (e) => {
338
- n.showScrollToTop && e(P);
339
- }), d.append(e, T), d.pop();
388
+ d.if(B, (e) => {
389
+ n.showScrollToTop && e(V);
390
+ }), d.append(e, R), d.pop();
340
391
  }
341
- d.delegate(["click"]);
392
+ d.delegate([
393
+ "pointerdown",
394
+ "pointermove",
395
+ "pointerup",
396
+ "click"
397
+ ]);
342
398
  //#endregion
343
- export { P as DocsmintAppShellHost, A as getDocsmintRealtimeAdapter };
399
+ export { L as DocsmintAppShellHost, M as getDocsmintRealtimeAdapter };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../CategoryDialog-BYAFjX7E.js";
1
+ import { t as e } from "../CategoryDialog-CbXBMBZB.js";
2
2
  export { e as CategoryDialog };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../Sidebar-B-zCJT9i.js";
1
+ import { t as e } from "../Sidebar-CzcLd6v5.js";
2
2
  export { e as Sidebar };
@@ -1,2 +1,2 @@
1
- .editor-settings.svelte-1eaqpj summary:where(.svelte-1eaqpj){list-style:none}.editor-settings.svelte-1eaqpj summary:where(.svelte-1eaqpj)::-webkit-details-marker{display:none}.editor-settings-chevron.svelte-1eaqpj{font-size:20px;transition:transform .18s}.editor-settings[open].svelte-1eaqpj .editor-settings-chevron:where(.svelte-1eaqpj){transform:rotate(180deg)}.profile-advanced.svelte-1eaqpj summary:where(.svelte-1eaqpj){list-style:none}.profile-advanced.svelte-1eaqpj summary:where(.svelte-1eaqpj)::-webkit-details-marker{display:none}.profile-advanced-chevron.svelte-1eaqpj{font-size:20px;transition:transform .18s}.profile-advanced[open].svelte-1eaqpj .profile-advanced-chevron:where(.svelte-1eaqpj){transform:rotate(180deg)}.preference-switch.svelte-1eaqpj{border:1px solid var(--border);background:var(--muted);cursor:pointer;border-radius:999px;flex:none;width:42px;height:24px;padding:2px;transition:background .18s,border-color .18s;position:relative}.preference-switch.svelte-1eaqpj span:where(.svelte-1eaqpj){background:var(--background);border-radius:999px;width:18px;height:18px;transition:transform .18s;display:block;box-shadow:0 1px 3px #00000038}.preference-switch.enabled.svelte-1eaqpj{border-color:var(--primary);background:var(--primary)}.preference-switch.enabled.svelte-1eaqpj span:where(.svelte-1eaqpj){transform:translate(18px)}.preference-switch.svelte-1eaqpj:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.preference-switch.svelte-1eaqpj:disabled{cursor:not-allowed;opacity:.45}[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}:root{--layer-chrome:30;--layer-panel:100;--layer-popover:200;--layer-modal:1000}.link-dialog-body.svelte-1cfbs6u{flex-direction:column;gap:.5rem;padding:0 0 1rem;display:flex}.link-dialog-label.svelte-1cfbs6u{color:var(--foreground);font-size:.875rem;font-weight:500}.toolbar.svelte-vm4iq2{border-bottom:1px solid var(--border);background:var(--card);z-index:var(--layer-chrome);border-radius:7px 7px 0 0;flex-wrap:wrap;align-items:center;gap:1px;padding:6px 10px;display:flex;position:sticky;top:0}.toolbar-divider.svelte-vm4iq2{background:var(--border);width:1px;height:18px;margin:0 2px}.toolbar-btn.svelte-vm4iq2{min-width:34px;min-height:34px;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.toolbar-btn.svelte-vm4iq2:hover:not(:disabled){background:var(--accent);color:var(--accent-foreground)}.toolbar-btn.active.svelte-vm4iq2{background:var(--primary);color:var(--primary-foreground)}.toolbar-btn.svelte-vm4iq2:disabled{opacity:.4;cursor:not-allowed}.dropdown.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.dropdown-trigger.svelte-vm4iq2{gap:2px;padding:0 6px}.dropdown-chevron{opacity:.6}.dropdown-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:2px;min-width:180px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.dropdown-item.svelte-vm4iq2{min-height:32px;color:var(--popover-foreground);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:10px;padding:6px 10px;font-size:.875rem;transition:background .1s;display:inline-flex}.dropdown-item.svelte-vm4iq2:hover{background:var(--accent);color:var(--accent-foreground)}.dropdown-item.selected.svelte-vm4iq2{background:color-mix(in srgb, var(--primary) 18%, transparent);color:var(--foreground)}.highlight-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.highlight-btn.svelte-vm4iq2{position:relative}.highlight-dot.svelte-vm4iq2{border:1px solid var(--border);opacity:0;pointer-events:none;border-radius:50%;width:8px;height:8px;transition:opacity .15s,transform .15s;position:absolute;bottom:6px;right:6px;transform:scale(.6)}.highlight-dot.visible.svelte-vm4iq2{opacity:1;transform:scale(1)}.highlight-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:6px;min-width:180px;padding:8px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.highlight-swatch-grid.svelte-vm4iq2{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.highlight-swatch.svelte-vm4iq2{border:1px solid var(--border);cursor:pointer;border-radius:6px;width:28px;height:28px;padding:0;transition:transform .1s,box-shadow .1s}.highlight-swatch.svelte-vm4iq2:hover{box-shadow:0 0 0 2px var(--ring);transform:scale(1.08)}.highlight-swatch.selected.svelte-vm4iq2{box-shadow:0 0 0 2px var(--ring)}.dark .highlight-picker.svelte-vm4iq2 .highlight-swatch:where(.svelte-vm4iq2),.dark .highlight-picker.svelte-vm4iq2 .highlight-dot:where(.svelte-vm4iq2){background-blend-mode:multiply;background-image:linear-gradient(#0000009e,#0000009e)}.highlight-clear.svelte-vm4iq2{color:var(--muted-foreground);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:4px 8px;font-size:.75rem;display:inline-flex}.highlight-clear.svelte-vm4iq2:hover{background:var(--accent);color:var(--accent-foreground)}.visually-hidden-file-input.svelte-vm4iq2{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.image-btn.uploading.svelte-vm4iq2{color:var(--ring)}.image-btn.svelte-vm4iq2:disabled:not(.uploading){opacity:.4;cursor:not-allowed}@keyframes svelte-vm4iq2-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.image-btn.svelte-vm4iq2 .animate-spin{animation:1s linear infinite svelte-vm4iq2-spin}.image-error.svelte-vm4iq2{background:color-mix(in srgb, var(--destructive) 10%, transparent);color:var(--destructive);border-bottom:1px solid color-mix(in srgb, var(--destructive) 20%, transparent);justify-content:space-between;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex}.image-error-dismiss.svelte-vm4iq2{color:var(--destructive);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:16px;line-height:1}.emoji-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.emoji-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;min-width:220px;padding:8px;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.emoji-grid.svelte-vm4iq2{grid-template-columns:repeat(5,1fr);gap:4px;display:grid}.emoji-button.svelte-vm4iq2{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;width:36px;height:36px;padding:0;font-size:1.25rem;line-height:1;transition:background .1s,transform .1s;display:inline-flex}.emoji-button.svelte-vm4iq2:hover{background:var(--accent);transform:scale(1.08)}.emoji-button.svelte-vm4iq2:focus-visible{outline:2px solid var(--ring);outline-offset:1px}.table-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.table-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;padding:8px;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.table-grid.svelte-vm4iq2{grid-template-columns:repeat(8,18px);grid-auto-rows:18px;gap:3px;display:grid}.table-cell.svelte-vm4iq2{border:1px solid var(--border);background:var(--background);cursor:pointer;border-radius:3px;width:18px;height:18px;padding:0;transition:background 80ms,border-color 80ms}.table-cell.svelte-vm4iq2:hover{border-color:var(--primary)}.table-cell.active.svelte-vm4iq2{background:color-mix(in srgb, var(--primary) 35%, transparent);border-color:var(--primary)}.table-grid-label.svelte-vm4iq2{text-align:center;color:var(--muted-foreground);margin-top:8px;font-size:.75rem}.table-actions-popover.svelte-vm4iq2{width:min(280px,100vw - 24px);padding:6px}.table-action-group.svelte-vm4iq2{grid-template-columns:1fr;gap:2px;padding:4px 0;display:grid}.table-action-group.svelte-vm4iq2+.table-action-group:where(.svelte-vm4iq2){border-top:1px solid var(--border)}.table-action-heading.svelte-vm4iq2{letter-spacing:.04em;text-transform:uppercase;color:var(--muted-foreground);padding:4px 8px 2px;font-size:.6875rem;font-weight:600}.table-action.svelte-vm4iq2{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;padding:7px 8px;font-size:.8125rem}.table-action.svelte-vm4iq2:hover:not(:disabled),.table-action.svelte-vm4iq2:focus-visible{background:var(--accent);outline:none}.table-action.svelte-vm4iq2:focus-visible{box-shadow:0 0 0 2px var(--ring)}.table-action.svelte-vm4iq2:disabled{color:var(--muted-foreground);opacity:.45;cursor:not-allowed}.table-danger-action.svelte-vm4iq2{color:var(--destructive)}.table-danger-action.svelte-vm4iq2:hover:not(:disabled){background:color-mix(in srgb, var(--destructive) 12%, transparent)}.copy-btn.copied.svelte-vm4iq2{color:var(--primary)}.snapshot-btn.svelte-vm4iq2{color:var(--muted-foreground)}.toolbar.floating-bar.svelte-vm4iq2{z-index:var(--layer-popover);background:color-mix(in srgb, var(--background) 95%, transparent);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border);box-shadow:0 10px 25px -5px #00000026, 0 8px 10px -6px #00000026, 0 0 0 1px var(--border);border-radius:12px;width:max-content;max-width:90vw;padding:10px 14px;animation:.2s ease-out svelte-vm4iq2-floatUp;position:fixed;top:auto;bottom:24px;left:50%;overflow:visible;transform:translate(-50%)}@media (width<=640px){.toolbar.floating-bar.svelte-vm4iq2{left:8px;right:8px;bottom:max(10px, env(safe-area-inset-bottom));border-radius:10px;width:auto;max-width:none;padding:8px;transform:none}.floating-toolbar-layout.svelte-vm4iq2{flex-flow:wrap;align-items:center;gap:4px;max-height:min(42vh,260px);padding-right:34px;display:flex;overflow-y:auto}.floating-toolbar-row.svelte-vm4iq2{display:contents}.floating-toolbar-spacer.svelte-vm4iq2{display:none}.floating-toolbar-close.svelte-vm4iq2{margin-left:0;position:absolute;top:6px;right:6px}.floating-toolbar-row-secondary.svelte-vm4iq2{display:contents}}.dropdown-popover.open-up.svelte-vm4iq2,.highlight-popover.open-up.svelte-vm4iq2,.emoji-popover.open-up.svelte-vm4iq2,.table-popover.open-up.svelte-vm4iq2{top:auto;bottom:calc(100% + 6px)}.dropdown-popover.open-left.svelte-vm4iq2,.highlight-popover.open-left.svelte-vm4iq2,.emoji-popover.open-left.svelte-vm4iq2,.table-popover.open-left.svelte-vm4iq2{left:auto;right:0}@keyframes svelte-vm4iq2-floatUp{0%{opacity:0;transform:translate(-50%,20px)}to{opacity:1;transform:translate(-50%)}}.editor-wrapper.svelte-9hjz5q{flex-direction:column;flex:1;min-height:0;display:flex}.editor-content.svelte-9hjz5q{flex:1;padding:24px;position:relative;overflow-y:auto}.editor-content.deferred-loading.svelte-9hjz5q{min-height:320px}.large-document-loader.svelte-9hjz5q{z-index:2;border:1px solid var(--border);background:color-mix(in srgb, var(--background) 94%, transparent);pointer-events:none;border-radius:12px;padding:20px;position:absolute;inset:24px}.large-document-loader-heading.svelte-9hjz5q{color:var(--muted-foreground);align-items:center;gap:10px;font-size:.875rem;font-weight:500;display:flex}.large-document-spinner.svelte-9hjz5q{border:2px solid var(--border);border-top-color:var(--primary);border-radius:999px;width:18px;height:18px;animation:.8s linear infinite svelte-9hjz5q-large-document-spin}.large-document-loader-lines.svelte-9hjz5q{gap:12px;margin-top:28px;display:grid}.large-document-loader-lines.svelte-9hjz5q span:where(.svelte-9hjz5q){background:linear-gradient(90deg, var(--muted) 20%, color-mix(in srgb, var(--muted) 55%, var(--background)) 50%, var(--muted) 80%);background-size:220% 100%;border-radius:999px;height:12px;animation:1.35s ease-in-out infinite svelte-9hjz5q-large-document-shimmer;display:block}@keyframes svelte-9hjz5q-large-document-spin{to{transform:rotate(360deg)}}@keyframes svelte-9hjz5q-large-document-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.large-document-spinner.svelte-9hjz5q,.large-document-loader-lines.svelte-9hjz5q span:where(.svelte-9hjz5q){animation:none}}.editor-content.svelte-9hjz5q .tiptap{min-height:300px;color:var(--foreground);outline:none;font-size:16px;line-height:1.7}.editor-content.svelte-9hjz5q .tiptap:focus-visible{outline:none}.editor-content.svelte-9hjz5q .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--muted-foreground);pointer-events:none;height:0}.editor-content.svelte-9hjz5q .tiptap h1{letter-spacing:-.025em;margin:1.5rem 0 .75rem;font-size:2rem;font-weight:800}.editor-content.svelte-9hjz5q .tiptap h2{letter-spacing:-.02em;margin:1.25rem 0 .5rem;font-size:1.5rem;font-weight:700}.editor-content.svelte-9hjz5q .tiptap h3{margin:1rem 0 .5rem;font-size:1.25rem;font-weight:600}.editor-content.svelte-9hjz5q .tiptap p{margin:.5rem 0}.editor-content.svelte-9hjz5q .tiptap ul:not([data-type=taskList]){margin:.5rem 0;padding-left:1.5rem;list-style-type:disc}.editor-content.svelte-9hjz5q .tiptap ol{margin:.5rem 0;padding-left:1.5rem;list-style-type:decimal}.editor-content.svelte-9hjz5q .tiptap li{margin:.25rem 0;display:list-item}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList]{padding-left:.25rem;list-style:none}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li{align-items:flex-start;gap:.5rem;display:flex}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;height:1.7em;margin:0;display:flex}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>div{flex:auto;min-width:0}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>div>p{margin:0}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] input[type=checkbox]{accent-color:var(--primary);cursor:pointer}.editor-content.svelte-9hjz5q .tiptap blockquote{border-left:3px solid var(--border);color:var(--muted-foreground);margin:.75rem 0;padding-left:1rem;font-style:italic}.editor-content.svelte-9hjz5q .tiptap code{background:var(--muted);border-radius:4px;padding:.125rem .375rem;font-family:Fira Code,Consolas,monospace;font-size:.875rem}.editor-content.svelte-9hjz5q .tiptap pre{background:var(--muted);color:var(--foreground);border:1px solid var(--border);border-radius:8px;margin:.75rem 0;padding:1rem;font-family:Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto}.editor-content.svelte-9hjz5q .tiptap pre code{font-size:inherit;color:inherit;background:0 0;border-radius:0;padding:0}.editor-content.svelte-9hjz5q .tiptap pre .hljs-keyword{color:var(--hljs-keyword)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-string{color:var(--hljs-string)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-number{color:var(--hljs-number)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-function{color:var(--hljs-function)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-title{color:var(--hljs-title)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-comment{color:var(--hljs-comment);font-style:italic}.editor-content.svelte-9hjz5q .tiptap pre .hljs-built_in{color:var(--hljs-built_in)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-type{color:var(--hljs-type)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-attr{color:var(--hljs-attr)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-variable{color:var(--hljs-variable)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-literal{color:var(--hljs-literal)}.editor-content.svelte-9hjz5q .tiptap hr{border:none;border-top:2px solid var(--border);margin:1.5rem 0}.editor-content.svelte-9hjz5q .tiptap table{border-collapse:collapse;table-layout:fixed;width:100%;margin:.75rem 0;overflow:hidden}.editor-content.svelte-9hjz5q .tiptap th,.editor-content.svelte-9hjz5q .tiptap td{border:1px solid var(--border);vertical-align:top;text-align:left;min-width:3rem;padding:.4rem .6rem}.editor-content.svelte-9hjz5q .tiptap th{background:var(--muted);font-weight:600}.editor-content.svelte-9hjz5q .tiptap .selectedCell:after{content:"";background:color-mix(in srgb, var(--primary) 16%, transparent);pointer-events:none;position:absolute;inset:0}.editor-content.svelte-9hjz5q .tiptap td,.editor-content.svelte-9hjz5q .tiptap th{position:relative}.editor-content.svelte-9hjz5q .tiptap .column-resize-handle{background:var(--primary);cursor:col-resize;width:4px;position:absolute;top:0;bottom:0;right:-2px}.editor-content.svelte-9hjz5q .tiptap .doc-link{color:var(--primary);cursor:pointer;text-decoration:underline}.editor-content.svelte-9hjz5q .tiptap [data-resize-container][data-node=image]{max-width:100%;margin:.75rem 0}.editor-content.svelte-9hjz5q .tiptap [data-resize-wrapper]>.doc-image{border-radius:.5rem;max-width:100%;height:auto;display:block}.editor-content.svelte-9hjz5q .tiptap [data-resize-wrapper]{max-width:100%}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle]{border:2px solid var(--background);background:var(--primary);width:12px;height:12px;box-shadow:0 1px 4px color-mix(in srgb, var(--foreground) 25%, transparent);opacity:0;border-radius:9999px;transition:opacity .12s}.editor-content.svelte-9hjz5q .tiptap .ProseMirror-selectednode [data-resize-handle],.editor-content.svelte-9hjz5q .tiptap [data-resize-state=true] [data-resize-handle]{opacity:1}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-right]{cursor:nwse-resize;transform:translate(50%,50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-left]{cursor:nesw-resize;transform:translate(-50%,50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right]{transform:translate(var(--image-handle-x,50%), -50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-right]{--image-handle-x:50%}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-left]{--image-handle-x:-50%}.editor-content.svelte-9hjz5q .tiptap mark{background-color:var(--highlight-default,#fde68a);border-radius:2px;padding:0 2px}.dark .editor-content.svelte-9hjz5q .tiptap mark{background-blend-mode:multiply;color:#fff;background-image:linear-gradient(#0000009e,#0000009e)}.editor-skeleton.svelte-9hjz5q{flex-direction:column;flex:1;display:flex}.skeleton-toolbar.svelte-9hjz5q{border-bottom:1px solid var(--border);gap:6px;padding:8px 12px;display:flex}.skeleton-icon.svelte-9hjz5q{background:var(--muted);border-radius:6px;width:32px;height:32px;animation:1.5s ease-in-out infinite svelte-9hjz5q-pulse}.skeleton-body.svelte-9hjz5q{flex-direction:column;gap:12px;padding:24px;display:flex}.skeleton-bar.svelte-9hjz5q{background:var(--muted);border-radius:4px;height:16px;animation:1.5s ease-in-out infinite svelte-9hjz5q-pulse}@keyframes svelte-9hjz5q-pulse{0%,to{opacity:1}50%{opacity:.4}}.title-input.svelte-vc365t{color:var(--foreground);background:0 0;border:none;border-bottom:2px solid #0000;outline:none;width:100%;margin-bottom:8px;padding:0 0 4px;font-size:2rem;font-weight:700;transition:border-color .15s}.title-input.svelte-vc365t::placeholder{color:var(--muted-foreground)}.title-input.focused.svelte-vc365t{border-bottom-color:var(--ring)}.title-input.svelte-vc365t:hover:not(.focused){border-bottom-color:var(--border)}.markdown-toggle.svelte-1k98zvf{flex-direction:column;flex:1;width:100%;min-height:0;display:flex;position:relative}.copy-btn.svelte-1k98zvf{z-index:10;border:1px solid var(--border);background:color-mix(in srgb, var(--card) 85%, transparent);color:var(--muted-foreground);-webkit-backdrop-filter:blur(8px);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:500;transition:all .2s;display:inline-flex;position:absolute;top:12px;right:24px;box-shadow:0 2px 8px #0000000d}.copy-btn.svelte-1k98zvf:hover{background:var(--accent);color:var(--accent-foreground);border-color:var(--accent)}.copy-btn.svelte-1k98zvf:active{transform:scale(.96)}.markdown-textarea.svelte-1k98zvf{box-sizing:border-box;resize:vertical;width:100%;height:100%;min-height:0;color:var(--foreground);background:var(--muted);tab-size:4;border:none;border-radius:8px;outline:none;flex:none;padding:56px 24px 24px;font-family:Fira Code,Consolas,Courier New,monospace;font-size:14px;line-height:1.7;transition:background .15s;display:block;overflow-y:hidden}.markdown-textarea.svelte-1k98zvf::placeholder{color:var(--muted-foreground)}.markdown-textarea.svelte-1k98zvf:focus{background:var(--background)}.datepicker.svelte-zmry26{position:relative}.dp-trigger.svelte-zmry26{border:1px solid var(--input);width:100%;height:2.25rem;color:var(--foreground);cursor:pointer;text-align:left;background:0 0;border-radius:6px;align-items:center;gap:6px;padding:0 .625rem;font-size:.875rem;display:inline-flex}.dp-trigger.svelte-zmry26:focus-visible{box-shadow:0 0 0 1px var(--ring);outline:none}.dp-placeholder.svelte-zmry26{color:var(--muted-foreground)}.dp-popover.svelte-zmry26{z-index:var(--layer-popover);background:var(--popover);width:16rem;color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;padding:8px;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 4px 16px #0000002e}.dp-header.svelte-zmry26{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.dp-title.svelte-zmry26{font-size:.8125rem;font-weight:600}.dp-nav.svelte-zmry26{width:1.75rem;height:1.75rem;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.dp-nav.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dp-weekdays.svelte-zmry26,.dp-grid.svelte-zmry26{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.dp-weekday.svelte-zmry26{text-align:center;color:var(--muted-foreground);padding:2px 0;font-size:.6875rem}.dp-empty.svelte-zmry26{aspect-ratio:1}.dp-day.svelte-zmry26{aspect-ratio:1;color:var(--foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:.8125rem;display:inline-flex}.dp-day.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dp-day.today.svelte-zmry26{box-shadow:inset 0 0 0 1px var(--ring)}.dp-day.selected.svelte-zmry26,.dp-day.selected.svelte-zmry26:hover{background:var(--primary);color:var(--primary-foreground)}.dp-clear.svelte-zmry26{width:100%;color:var(--muted-foreground);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:6px;margin-top:6px;padding:4px 0;font-size:.75rem}.dp-clear.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dashboard-shell.svelte-e61um3{position:relative}@media (width<=767px){.dashboard-header.svelte-e61um3{min-height:44px}.dashboard-header-actions.svelte-e61um3{top:calc(.75rem + env(safe-area-inset-top));z-index:10;position:absolute;right:.75rem}.dashboard-context-identity.svelte-e61um3{min-width:0;margin-left:56px}}@media (width<=520px){.dashboard-header-actions.svelte-e61um3 button{width:40px;height:40px;padding:0}.dashboard-action-label.svelte-e61um3{display:none}}@media (width<=449px){.dashboard-context-identity.svelte-e61um3{margin-left:52px}.dashboard-context-identity.svelte-e61um3 p:where(.svelte-e61um3){display:none}.dashboard-context-identity.svelte-e61um3 h1:where(.svelte-e61um3){font-size:1.25rem}}@media (width<=767px){.search-form.svelte-itf76n{margin-left:56px}}@media (width<=420px){.search-form.svelte-itf76n{margin-left:52px}}
1
+ .editor-settings.svelte-1eaqpj summary:where(.svelte-1eaqpj){list-style:none}.editor-settings.svelte-1eaqpj summary:where(.svelte-1eaqpj)::-webkit-details-marker{display:none}.editor-settings-chevron.svelte-1eaqpj{font-size:20px;transition:transform .18s}.editor-settings[open].svelte-1eaqpj .editor-settings-chevron:where(.svelte-1eaqpj){transform:rotate(180deg)}.profile-advanced.svelte-1eaqpj summary:where(.svelte-1eaqpj){list-style:none}.profile-advanced.svelte-1eaqpj summary:where(.svelte-1eaqpj)::-webkit-details-marker{display:none}.profile-advanced-chevron.svelte-1eaqpj{font-size:20px;transition:transform .18s}.profile-advanced[open].svelte-1eaqpj .profile-advanced-chevron:where(.svelte-1eaqpj){transform:rotate(180deg)}.preference-switch.svelte-1eaqpj{border:1px solid var(--border);background:var(--muted);cursor:pointer;border-radius:999px;flex:none;width:42px;height:24px;padding:2px;transition:background .18s,border-color .18s;position:relative}.preference-switch.svelte-1eaqpj span:where(.svelte-1eaqpj){background:var(--background);border-radius:999px;width:18px;height:18px;transition:transform .18s;display:block;box-shadow:0 1px 3px #00000038}.preference-switch.enabled.svelte-1eaqpj{border-color:var(--primary);background:var(--primary)}.preference-switch.enabled.svelte-1eaqpj span:where(.svelte-1eaqpj){transform:translate(18px)}.preference-switch.svelte-1eaqpj:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.preference-switch.svelte-1eaqpj:disabled{cursor:not-allowed;opacity:.45}[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}@media (pointer:coarse){.sidebar-touch-action.svelte-1nshngr,.sidebar-touch-action.svelte-1uwxs9f{opacity:1;min-width:36px;min-height:36px}}:root{--layer-chrome:30;--layer-panel:100;--layer-popover:200;--layer-modal:1000}.link-dialog-body.svelte-1cfbs6u{flex-direction:column;gap:.5rem;padding:0 0 1rem;display:flex}.link-dialog-label.svelte-1cfbs6u{color:var(--foreground);font-size:.875rem;font-weight:500}.toolbar.svelte-vm4iq2{border-bottom:1px solid var(--border);background:var(--card);z-index:var(--layer-chrome);border-radius:7px 7px 0 0;flex-wrap:wrap;align-items:center;gap:1px;padding:6px 10px;display:flex;position:sticky;top:0}.toolbar-divider.svelte-vm4iq2{background:var(--border);width:1px;height:18px;margin:0 2px}.toolbar-btn.svelte-vm4iq2{min-width:34px;min-height:34px;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.toolbar-btn.svelte-vm4iq2:hover:not(:disabled){background:var(--accent);color:var(--accent-foreground)}.toolbar-btn.active.svelte-vm4iq2{background:var(--primary);color:var(--primary-foreground)}.toolbar-btn.svelte-vm4iq2:disabled{opacity:.4;cursor:not-allowed}.dropdown.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.dropdown-trigger.svelte-vm4iq2{gap:2px;padding:0 6px}.dropdown-chevron{opacity:.6}.dropdown-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:2px;min-width:180px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.dropdown-item.svelte-vm4iq2{min-height:32px;color:var(--popover-foreground);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:10px;padding:6px 10px;font-size:.875rem;transition:background .1s;display:inline-flex}.dropdown-item.svelte-vm4iq2:hover{background:var(--accent);color:var(--accent-foreground)}.dropdown-item.selected.svelte-vm4iq2{background:color-mix(in srgb, var(--primary) 18%, transparent);color:var(--foreground)}.highlight-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.highlight-btn.svelte-vm4iq2{position:relative}.highlight-dot.svelte-vm4iq2{border:1px solid var(--border);opacity:0;pointer-events:none;border-radius:50%;width:8px;height:8px;transition:opacity .15s,transform .15s;position:absolute;bottom:6px;right:6px;transform:scale(.6)}.highlight-dot.visible.svelte-vm4iq2{opacity:1;transform:scale(1)}.highlight-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:6px;min-width:180px;padding:8px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.highlight-swatch-grid.svelte-vm4iq2{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.highlight-swatch.svelte-vm4iq2{border:1px solid var(--border);cursor:pointer;border-radius:6px;width:28px;height:28px;padding:0;transition:transform .1s,box-shadow .1s}.highlight-swatch.svelte-vm4iq2:hover{box-shadow:0 0 0 2px var(--ring);transform:scale(1.08)}.highlight-swatch.selected.svelte-vm4iq2{box-shadow:0 0 0 2px var(--ring)}.dark .highlight-picker.svelte-vm4iq2 .highlight-swatch:where(.svelte-vm4iq2),.dark .highlight-picker.svelte-vm4iq2 .highlight-dot:where(.svelte-vm4iq2){background-blend-mode:multiply;background-image:linear-gradient(#0000009e,#0000009e)}.highlight-clear.svelte-vm4iq2{color:var(--muted-foreground);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:4px 8px;font-size:.75rem;display:inline-flex}.highlight-clear.svelte-vm4iq2:hover{background:var(--accent);color:var(--accent-foreground)}.visually-hidden-file-input.svelte-vm4iq2{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.image-btn.uploading.svelte-vm4iq2{color:var(--ring)}.image-btn.svelte-vm4iq2:disabled:not(.uploading){opacity:.4;cursor:not-allowed}@keyframes svelte-vm4iq2-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.image-btn.svelte-vm4iq2 .animate-spin{animation:1s linear infinite svelte-vm4iq2-spin}.image-error.svelte-vm4iq2{background:color-mix(in srgb, var(--destructive) 10%, transparent);color:var(--destructive);border-bottom:1px solid color-mix(in srgb, var(--destructive) 20%, transparent);justify-content:space-between;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex}.image-error-dismiss.svelte-vm4iq2{color:var(--destructive);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:16px;line-height:1}.emoji-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.emoji-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;min-width:220px;padding:8px;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.emoji-grid.svelte-vm4iq2{grid-template-columns:repeat(5,1fr);gap:4px;display:grid}.emoji-button.svelte-vm4iq2{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;width:36px;height:36px;padding:0;font-size:1.25rem;line-height:1;transition:background .1s,transform .1s;display:inline-flex}.emoji-button.svelte-vm4iq2:hover{background:var(--accent);transform:scale(1.08)}.emoji-button.svelte-vm4iq2:focus-visible{outline:2px solid var(--ring);outline-offset:1px}.table-picker.svelte-vm4iq2{justify-content:center;align-items:center;display:inline-flex;position:relative}.table-popover.svelte-vm4iq2{z-index:var(--layer-popover);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;padding:8px;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001a}.table-grid.svelte-vm4iq2{grid-template-columns:repeat(8,18px);grid-auto-rows:18px;gap:3px;display:grid}.table-cell.svelte-vm4iq2{border:1px solid var(--border);background:var(--background);cursor:pointer;border-radius:3px;width:18px;height:18px;padding:0;transition:background 80ms,border-color 80ms}.table-cell.svelte-vm4iq2:hover{border-color:var(--primary)}.table-cell.active.svelte-vm4iq2{background:color-mix(in srgb, var(--primary) 35%, transparent);border-color:var(--primary)}.table-grid-label.svelte-vm4iq2{text-align:center;color:var(--muted-foreground);margin-top:8px;font-size:.75rem}.table-actions-popover.svelte-vm4iq2{width:min(280px,100vw - 24px);padding:6px}.table-action-group.svelte-vm4iq2{grid-template-columns:1fr;gap:2px;padding:4px 0;display:grid}.table-action-group.svelte-vm4iq2+.table-action-group:where(.svelte-vm4iq2){border-top:1px solid var(--border)}.table-action-heading.svelte-vm4iq2{letter-spacing:.04em;text-transform:uppercase;color:var(--muted-foreground);padding:4px 8px 2px;font-size:.6875rem;font-weight:600}.table-action.svelte-vm4iq2{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;padding:7px 8px;font-size:.8125rem}.table-action.svelte-vm4iq2:hover:not(:disabled),.table-action.svelte-vm4iq2:focus-visible{background:var(--accent);outline:none}.table-action.svelte-vm4iq2:focus-visible{box-shadow:0 0 0 2px var(--ring)}.table-action.svelte-vm4iq2:disabled{color:var(--muted-foreground);opacity:.45;cursor:not-allowed}.table-danger-action.svelte-vm4iq2{color:var(--destructive)}.table-danger-action.svelte-vm4iq2:hover:not(:disabled){background:color-mix(in srgb, var(--destructive) 12%, transparent)}.copy-btn.copied.svelte-vm4iq2{color:var(--primary)}.snapshot-btn.svelte-vm4iq2{color:var(--muted-foreground)}.toolbar.floating-bar.svelte-vm4iq2{z-index:var(--layer-popover);background:color-mix(in srgb, var(--background) 95%, transparent);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border);box-shadow:0 10px 25px -5px #00000026, 0 8px 10px -6px #00000026, 0 0 0 1px var(--border);border-radius:12px;width:max-content;max-width:90vw;padding:10px 14px;animation:.2s ease-out svelte-vm4iq2-floatUp;position:fixed;top:auto;bottom:24px;left:50%;overflow:visible;transform:translate(-50%)}@media (width<=640px){.toolbar.floating-bar.svelte-vm4iq2{left:8px;right:8px;bottom:max(10px, env(safe-area-inset-bottom));border-radius:10px;width:auto;max-width:none;padding:8px;transform:none}.floating-toolbar-layout.svelte-vm4iq2{flex-flow:wrap;align-items:center;gap:4px;max-height:none;padding-right:34px;display:flex;overflow:visible}.floating-toolbar-row.svelte-vm4iq2{display:contents}.floating-toolbar-spacer.svelte-vm4iq2{display:none}.floating-toolbar-close.svelte-vm4iq2{margin-left:0;position:absolute;top:6px;right:6px}.floating-toolbar-row-secondary.svelte-vm4iq2{display:contents}.toolbar.floating-bar.svelte-vm4iq2 .dropdown-popover:where(.svelte-vm4iq2),.toolbar.floating-bar.svelte-vm4iq2 .highlight-popover:where(.svelte-vm4iq2),.toolbar.floating-bar.svelte-vm4iq2 .emoji-popover:where(.svelte-vm4iq2),.toolbar.floating-bar.svelte-vm4iq2 .table-popover:where(.svelte-vm4iq2){overscroll-behavior:contain;max-width:calc(100vw - 16px);max-height:min(60dvh,360px);top:auto;bottom:calc(100% + 8px);overflow-y:auto}}.dropdown-popover.open-up.svelte-vm4iq2,.highlight-popover.open-up.svelte-vm4iq2,.emoji-popover.open-up.svelte-vm4iq2,.table-popover.open-up.svelte-vm4iq2{top:auto;bottom:calc(100% + 6px)}.dropdown-popover.open-left.svelte-vm4iq2,.highlight-popover.open-left.svelte-vm4iq2,.emoji-popover.open-left.svelte-vm4iq2,.table-popover.open-left.svelte-vm4iq2{left:auto;right:0}@keyframes svelte-vm4iq2-floatUp{0%{opacity:0;transform:translate(-50%,20px)}to{opacity:1;transform:translate(-50%)}}.editor-wrapper.svelte-9hjz5q{flex-direction:column;flex:1;min-height:0;display:flex}.editor-content.svelte-9hjz5q{flex:1;padding:24px;position:relative;overflow-y:auto}.editor-content.deferred-loading.svelte-9hjz5q{min-height:320px}.large-document-loader.svelte-9hjz5q{z-index:2;border:1px solid var(--border);background:color-mix(in srgb, var(--background) 94%, transparent);pointer-events:none;border-radius:12px;padding:20px;position:absolute;inset:24px}.large-document-loader-heading.svelte-9hjz5q{color:var(--muted-foreground);align-items:center;gap:10px;font-size:.875rem;font-weight:500;display:flex}.large-document-spinner.svelte-9hjz5q{border:2px solid var(--border);border-top-color:var(--primary);border-radius:999px;width:18px;height:18px;animation:.8s linear infinite svelte-9hjz5q-large-document-spin}.large-document-loader-lines.svelte-9hjz5q{gap:12px;margin-top:28px;display:grid}.large-document-loader-lines.svelte-9hjz5q span:where(.svelte-9hjz5q){background:linear-gradient(90deg, var(--muted) 20%, color-mix(in srgb, var(--muted) 55%, var(--background)) 50%, var(--muted) 80%);background-size:220% 100%;border-radius:999px;height:12px;animation:1.35s ease-in-out infinite svelte-9hjz5q-large-document-shimmer;display:block}@keyframes svelte-9hjz5q-large-document-spin{to{transform:rotate(360deg)}}@keyframes svelte-9hjz5q-large-document-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.large-document-spinner.svelte-9hjz5q,.large-document-loader-lines.svelte-9hjz5q span:where(.svelte-9hjz5q){animation:none}}.editor-content.svelte-9hjz5q .tiptap{min-height:300px;color:var(--foreground);outline:none;font-size:16px;line-height:1.7}.editor-content.svelte-9hjz5q .tiptap:focus-visible{outline:none}.editor-content.svelte-9hjz5q .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--muted-foreground);pointer-events:none;height:0}.editor-content.svelte-9hjz5q .tiptap h1{letter-spacing:-.025em;margin:1.5rem 0 .75rem;font-size:2rem;font-weight:800}.editor-content.svelte-9hjz5q .tiptap h2{letter-spacing:-.02em;margin:1.25rem 0 .5rem;font-size:1.5rem;font-weight:700}.editor-content.svelte-9hjz5q .tiptap h3{margin:1rem 0 .5rem;font-size:1.25rem;font-weight:600}.editor-content.svelte-9hjz5q .tiptap p{margin:.5rem 0}.editor-content.svelte-9hjz5q .tiptap ul:not([data-type=taskList]){margin:.5rem 0;padding-left:1.5rem;list-style-type:disc}.editor-content.svelte-9hjz5q .tiptap ol{margin:.5rem 0;padding-left:1.5rem;list-style-type:decimal}.editor-content.svelte-9hjz5q .tiptap li{margin:.25rem 0;display:list-item}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList]{padding-left:.25rem;list-style:none}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li{align-items:flex-start;gap:.5rem;display:flex}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;height:1.7em;margin:0;display:flex}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>div{flex:auto;min-width:0}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] li>div>p{margin:0}.editor-content.svelte-9hjz5q .tiptap ul[data-type=taskList] input[type=checkbox]{accent-color:var(--primary);cursor:pointer}.editor-content.svelte-9hjz5q .tiptap blockquote{border-left:3px solid var(--border);color:var(--muted-foreground);margin:.75rem 0;padding-left:1rem;font-style:italic}.editor-content.svelte-9hjz5q .tiptap code{background:var(--muted);border-radius:4px;padding:.125rem .375rem;font-family:Fira Code,Consolas,monospace;font-size:.875rem}.editor-content.svelte-9hjz5q .tiptap pre{background:var(--muted);color:var(--foreground);border:1px solid var(--border);border-radius:8px;margin:.75rem 0;padding:1rem;font-family:Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto}.editor-content.svelte-9hjz5q .tiptap pre code{font-size:inherit;color:inherit;background:0 0;border-radius:0;padding:0}.editor-content.svelte-9hjz5q .tiptap pre .hljs-keyword{color:var(--hljs-keyword)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-string{color:var(--hljs-string)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-number{color:var(--hljs-number)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-function{color:var(--hljs-function)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-title{color:var(--hljs-title)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-comment{color:var(--hljs-comment);font-style:italic}.editor-content.svelte-9hjz5q .tiptap pre .hljs-built_in{color:var(--hljs-built_in)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-type{color:var(--hljs-type)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-attr{color:var(--hljs-attr)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-variable{color:var(--hljs-variable)}.editor-content.svelte-9hjz5q .tiptap pre .hljs-literal{color:var(--hljs-literal)}.editor-content.svelte-9hjz5q .tiptap hr{border:none;border-top:2px solid var(--border);margin:1.5rem 0}.editor-content.svelte-9hjz5q .tiptap table{border-collapse:collapse;table-layout:fixed;width:100%;margin:.75rem 0;overflow:hidden}.editor-content.svelte-9hjz5q .tiptap th,.editor-content.svelte-9hjz5q .tiptap td{border:1px solid var(--border);vertical-align:top;text-align:left;min-width:3rem;padding:.4rem .6rem}.editor-content.svelte-9hjz5q .tiptap th{background:var(--muted);font-weight:600}.editor-content.svelte-9hjz5q .tiptap .selectedCell:after{content:"";background:color-mix(in srgb, var(--primary) 16%, transparent);pointer-events:none;position:absolute;inset:0}.editor-content.svelte-9hjz5q .tiptap td,.editor-content.svelte-9hjz5q .tiptap th{position:relative}.editor-content.svelte-9hjz5q .tiptap .column-resize-handle{background:var(--primary);cursor:col-resize;width:4px;position:absolute;top:0;bottom:0;right:-2px}.editor-content.svelte-9hjz5q .tiptap .doc-link{color:var(--primary);cursor:pointer;text-decoration:underline}.editor-content.svelte-9hjz5q .tiptap [data-resize-container][data-node=image]{max-width:100%;margin:.75rem 0}.editor-content.svelte-9hjz5q .tiptap [data-resize-wrapper]>.doc-image{border-radius:.5rem;max-width:100%;height:auto;display:block}.editor-content.svelte-9hjz5q .tiptap [data-resize-wrapper]{max-width:100%}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle]{border:2px solid var(--background);background:var(--primary);width:12px;height:12px;box-shadow:0 1px 4px color-mix(in srgb, var(--foreground) 25%, transparent);opacity:0;border-radius:9999px;transition:opacity .12s}.editor-content.svelte-9hjz5q .tiptap .ProseMirror-selectednode [data-resize-handle],.editor-content.svelte-9hjz5q .tiptap [data-resize-state=true] [data-resize-handle]{opacity:1}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-right]{cursor:nwse-resize;transform:translate(50%,50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-left]{cursor:nesw-resize;transform:translate(-50%,50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right]{transform:translate(var(--image-handle-x,50%), -50%)}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-right],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-right]{--image-handle-x:50%}.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=top-left],.editor-content.svelte-9hjz5q .tiptap [data-resize-handle=bottom-left]{--image-handle-x:-50%}.editor-content.svelte-9hjz5q .tiptap mark{background-color:var(--highlight-default,#fde68a);border-radius:2px;padding:0 2px}.dark .editor-content.svelte-9hjz5q .tiptap mark{background-blend-mode:multiply;color:#fff;background-image:linear-gradient(#0000009e,#0000009e)}.editor-skeleton.svelte-9hjz5q{flex-direction:column;flex:1;display:flex}.skeleton-toolbar.svelte-9hjz5q{border-bottom:1px solid var(--border);gap:6px;padding:8px 12px;display:flex}.skeleton-icon.svelte-9hjz5q{background:var(--muted);border-radius:6px;width:32px;height:32px;animation:1.5s ease-in-out infinite svelte-9hjz5q-pulse}.skeleton-body.svelte-9hjz5q{flex-direction:column;gap:12px;padding:24px;display:flex}.skeleton-bar.svelte-9hjz5q{background:var(--muted);border-radius:4px;height:16px;animation:1.5s ease-in-out infinite svelte-9hjz5q-pulse}@keyframes svelte-9hjz5q-pulse{0%,to{opacity:1}50%{opacity:.4}}.title-input.svelte-vc365t{color:var(--foreground);background:0 0;border:none;border-bottom:2px solid #0000;outline:none;width:100%;margin-bottom:8px;padding:0 0 4px;font-size:2rem;font-weight:700;transition:border-color .15s}.title-input.svelte-vc365t::placeholder{color:var(--muted-foreground)}.title-input.focused.svelte-vc365t{border-bottom-color:var(--ring)}.title-input.svelte-vc365t:hover:not(.focused){border-bottom-color:var(--border)}.markdown-toggle.svelte-1k98zvf{flex-direction:column;flex:1;width:100%;min-height:0;display:flex;position:relative}.copy-btn.svelte-1k98zvf{z-index:10;border:1px solid var(--border);background:color-mix(in srgb, var(--card) 85%, transparent);color:var(--muted-foreground);-webkit-backdrop-filter:blur(8px);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:500;transition:all .2s;display:inline-flex;position:absolute;top:12px;right:24px;box-shadow:0 2px 8px #0000000d}.copy-btn.svelte-1k98zvf:hover{background:var(--accent);color:var(--accent-foreground);border-color:var(--accent)}.copy-btn.svelte-1k98zvf:active{transform:scale(.96)}.markdown-textarea.svelte-1k98zvf{box-sizing:border-box;resize:vertical;width:100%;height:100%;min-height:0;color:var(--foreground);background:var(--muted);tab-size:4;border:none;border-radius:8px;outline:none;flex:none;padding:56px 24px 24px;font-family:Fira Code,Consolas,Courier New,monospace;font-size:14px;line-height:1.7;transition:background .15s;display:block;overflow-y:hidden}.markdown-textarea.svelte-1k98zvf::placeholder{color:var(--muted-foreground)}.markdown-textarea.svelte-1k98zvf:focus{background:var(--background)}.datepicker.svelte-zmry26{position:relative}.dp-trigger.svelte-zmry26{border:1px solid var(--input);width:100%;height:2.25rem;color:var(--foreground);cursor:pointer;text-align:left;background:0 0;border-radius:6px;align-items:center;gap:6px;padding:0 .625rem;font-size:.875rem;display:inline-flex}.dp-trigger.svelte-zmry26:focus-visible{box-shadow:0 0 0 1px var(--ring);outline:none}.dp-placeholder.svelte-zmry26{color:var(--muted-foreground)}.dp-popover.svelte-zmry26{z-index:var(--layer-popover);background:var(--popover);width:16rem;color:var(--popover-foreground);border:1px solid var(--border);border-radius:8px;padding:8px;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 4px 16px #0000002e}.dp-header.svelte-zmry26{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.dp-title.svelte-zmry26{font-size:.8125rem;font-weight:600}.dp-nav.svelte-zmry26{width:1.75rem;height:1.75rem;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.dp-nav.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dp-weekdays.svelte-zmry26,.dp-grid.svelte-zmry26{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.dp-weekday.svelte-zmry26{text-align:center;color:var(--muted-foreground);padding:2px 0;font-size:.6875rem}.dp-empty.svelte-zmry26{aspect-ratio:1}.dp-day.svelte-zmry26{aspect-ratio:1;color:var(--foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:.8125rem;display:inline-flex}.dp-day.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dp-day.today.svelte-zmry26{box-shadow:inset 0 0 0 1px var(--ring)}.dp-day.selected.svelte-zmry26,.dp-day.selected.svelte-zmry26:hover{background:var(--primary);color:var(--primary-foreground)}.dp-clear.svelte-zmry26{width:100%;color:var(--muted-foreground);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:6px;margin-top:6px;padding:4px 0;font-size:.75rem}.dp-clear.svelte-zmry26:hover{background:var(--accent);color:var(--accent-foreground)}.dashboard-shell.svelte-e61um3{position:relative}@media (width<=767px){.dashboard-header.svelte-e61um3{min-height:44px}.dashboard-header-actions.svelte-e61um3{top:calc(.75rem + env(safe-area-inset-top));z-index:10;position:absolute;right:.75rem}.dashboard-context-identity.svelte-e61um3{min-width:0;margin-left:56px}}@media (width<=520px){.dashboard-header-actions.svelte-e61um3 button{width:40px;height:40px;padding:0}.dashboard-action-label.svelte-e61um3{display:none}}@media (width<=449px){.dashboard-context-identity.svelte-e61um3{margin-left:52px}.dashboard-context-identity.svelte-e61um3 p:where(.svelte-e61um3){display:none}.dashboard-context-identity.svelte-e61um3 h1:where(.svelte-e61um3){font-size:1.25rem}}@media (width<=767px){.search-form.svelte-itf76n{margin-left:56px}}@media (width<=420px){.search-form.svelte-itf76n{margin-left:52px}}
2
2
  /*$vite$:1*/
@@ -1,7 +1,7 @@
1
1
  import { E as scroll_to_top_aria } from "./assets/messages-BAQzILs4.js";
2
2
  import { t as Icon } from "./assets/Icon-QwirKi9Y.js";
3
3
  import { n as searchPreferences, r as editorPreferences } from "./assets/SettingsDialog-DVp0OxPO.js";
4
- import { t as Sidebar } from "./assets/Sidebar-CO9LZRPa.js";
4
+ import { t as Sidebar } from "./assets/Sidebar-CqsMw0Hd.js";
5
5
  import { o as provideDocsmintRequestAdapter, r as provideDocsmintRouteAdapter } from "./assets/route-context-BPRerEtZ.js";
6
6
  import { d as refreshFolders } from "./assets/subfolders-refresh-store.svelte-CXHxQWKh.js";
7
7
  import { n as refreshDocs, r as refreshTags } from "./assets/tag-store.svelte-BM1lUI_P.js";
@@ -213,6 +213,46 @@ function ScrollToTop($$renderer, $$props) {
213
213
  });
214
214
  }
215
215
  //#endregion
216
+ //#region src/lib/stores/mobile-sidebar-gesture.ts
217
+ function createEdgeSwipeTracker(options = {}) {
218
+ const edgeWidth = options.edgeWidth ?? 36;
219
+ const openDistance = options.openDistance ?? 40;
220
+ const scrollTolerance = options.scrollTolerance ?? 12;
221
+ let startPoint = null;
222
+ let cancelled = false;
223
+ return {
224
+ start(point) {
225
+ startPoint = point.x <= edgeWidth ? point : null;
226
+ cancelled = false;
227
+ return startPoint ? "tracking" : "idle";
228
+ },
229
+ move(point) {
230
+ if (!startPoint || cancelled) return cancelled ? "cancelled" : "idle";
231
+ const deltaX = point.x - startPoint.x;
232
+ const deltaY = Math.abs(point.y - startPoint.y);
233
+ if (deltaY > scrollTolerance && deltaY > Math.abs(deltaX)) {
234
+ cancelled = true;
235
+ return "cancelled";
236
+ }
237
+ if (deltaX >= openDistance && deltaY <= Math.max(scrollTolerance * 2, deltaX)) {
238
+ startPoint = null;
239
+ return "open";
240
+ }
241
+ return "tracking";
242
+ },
243
+ end(point) {
244
+ const result = this.move(point);
245
+ startPoint = null;
246
+ cancelled = false;
247
+ return result === "open" ? "open" : "idle";
248
+ },
249
+ cancel() {
250
+ startPoint = null;
251
+ cancelled = false;
252
+ }
253
+ };
254
+ }
255
+ //#endregion
216
256
  //#region src/lib/hosts/mutation-refresh.ts
217
257
  var noImpact = {
218
258
  documents: false,
@@ -300,6 +340,7 @@ function DocsmintAppShellHost($$renderer, $$props) {
300
340
  let sidebarElement = null;
301
341
  let toggleButton = null;
302
342
  let isMobile = false;
343
+ createEdgeSwipeTracker();
303
344
  [
304
345
  "a[href]",
305
346
  "button:not([disabled])",
@@ -340,6 +381,8 @@ function DocsmintAppShellHost($$renderer, $$props) {
340
381
  });
341
382
  $$renderer.push(`<!----> `);
342
383
  $$renderer.push("<!--[-1-->");
384
+ $$renderer.push(`<!--]--> `);
385
+ $$renderer.push("<!--[-1-->");
343
386
  $$renderer.push(`<!--]-->`);
344
387
  },
345
388
  $$slots: { default: true }
@@ -241,7 +241,7 @@ function CategoryDialog($$renderer, $$props) {
241
241
  Dialog_description($$renderer, {
242
242
  children: ($$renderer) => {
243
243
  $$renderer.push(`<!---->Delete <span class="font-medium text-foreground">“${$.escape(category?.name ?? "Category")}”</span>?
244
- ${$.escape(categories_delete_description())}`);
244
+ ${$.escape(categories_delete_description())}`);
245
245
  },
246
246
  $$slots: { default: true }
247
247
  });
@@ -294,7 +294,7 @@ function CategoryDialog($$renderer, $$props) {
294
294
  $$renderer.push(`<!--]--></div>`);
295
295
  } else if (!isDeleteMode()) {
296
296
  $$renderer.push("<!--[2-->");
297
- $$renderer.push(`<form class="space-y-4"><div class="space-y-2">`);
297
+ $$renderer.push(`<form data-category-dialog-scroll="" class="max-h-[calc(100dvh-12rem)] space-y-4 overflow-y-auto overscroll-contain pr-1"><div class="space-y-2">`);
298
298
  Label($$renderer, {
299
299
  for: "category-dialog-name",
300
300
  children: ($$renderer) => {
@@ -477,14 +477,14 @@ function CategoryDialog($$renderer, $$props) {
477
477
  $$renderer.push(`<!--]--> `);
478
478
  if (mode === "edit" && apiMode === "category" && category?.id) {
479
479
  $$renderer.push("<!--[0-->");
480
- $$renderer.push(`<div class="space-y-3 rounded-md border border-border/70 p-3"><div class="flex items-center justify-between gap-2"><div>`);
480
+ $$renderer.push(`<div class="space-y-3 rounded-md border border-border/70 p-3"><div class="flex items-center justify-between gap-2 max-sm:flex-col max-sm:items-stretch"><div>`);
481
481
  Label($$renderer, {
482
482
  children: ($$renderer) => {
483
483
  $$renderer.push(`<!---->Category API keys`);
484
484
  },
485
485
  $$slots: { default: true }
486
486
  });
487
- $$renderer.push(`<!----><p class="text-xs text-muted-foreground">The current permissions are saved before the key is issued.</p></div> `);
487
+ $$renderer.push(`<!----> <p class="text-xs text-muted-foreground">The current permissions are saved before the key is issued.</p></div> `);
488
488
  Button($$renderer, {
489
489
  type: "button",
490
490
  size: "sm",
@@ -24,7 +24,7 @@ import { c as updateDocument, r as deleteDocument, s as listDocuments, t as clea
24
24
  import { c as updateFolder, r as deleteFolder, s as listFolders, t as createFolder } from "./folders-BX30gHv6.js";
25
25
  import { t as DeleteDialog } from "./DeleteDialog-DG9Lm38J.js";
26
26
  import { t as ShareDialog } from "./ShareDialog-BZd28sg-.js";
27
- import { t as CategoryDialog } from "./CategoryDialog-BLxVoynx.js";
27
+ import { t as CategoryDialog } from "./CategoryDialog-QHEv_9N4.js";
28
28
  import { n as createDocumentPlacementWriter, t as createDocumentDropCoordinator } from "./document-drop-coordinator-CEaYACsC.js";
29
29
  import { a as getFolderFromRegistry, c as getPendingDocumentPlacement, d as refreshFolders, f as registerDocument, n as bumpSubfoldersRefresh, p as registerFolder, r as getDocumentFromRegistry, t as acknowledgeDocumentPlacement, u as publishDocumentPlacement } from "./subfolders-refresh-store.svelte-CXHxQWKh.js";
30
30
  import { t as FolderNode } from "./FolderNode-kmilhDjO.js";
@@ -295,7 +295,7 @@ function SearchBar($$renderer, $$props) {
295
295
  //#endregion
296
296
  //#region src/lib/components/sidebar/FolderTree.svelte
297
297
  function docRowInner($$renderer, doc) {
298
- $$renderer.push(`<a${$.attr("href", `/docs/${doc.id}`)} data-sveltekit-noscroll=""${$.attr_class($.clsx(cn("flex w-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", page.params.id === doc.id && "bg-accent text-accent-foreground font-medium")))}><span class="w-3.5 shrink-0"></span> `);
298
+ $$renderer.push(`<a${$.attr("href", `/docs/${doc.id}`)} data-sveltekit-noscroll=""${$.attr_class($.clsx(cn("flex w-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", page.params.id === doc.id && "bg-accent text-accent-foreground font-medium")), "svelte-1nshngr")}><span class="w-3.5 shrink-0"></span> `);
299
299
  File_text($$renderer, { class: "size-4 shrink-0 text-muted-foreground" });
300
300
  $$renderer.push(`<!----> <span class="min-w-0 truncate">${$.escape(doc.title)}</span></a>`);
301
301
  }
@@ -949,10 +949,10 @@ function FolderTree($$renderer, $$props) {
949
949
  $$renderer.push(`<button${$.attributes({
950
950
  ...props,
951
951
  type: "button",
952
- class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
952
+ class: "sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
953
953
  "aria-label": editor_more_options(),
954
954
  title: editor_more_options()
955
- })}>`);
955
+ }, "svelte-1nshngr")}>`);
956
956
  Ellipsis_vertical($$renderer, { class: "size-3.5" });
957
957
  $$renderer.push(`<!----></button>`);
958
958
  }
@@ -999,7 +999,7 @@ function FolderTree($$renderer, $$props) {
999
999
  });
1000
1000
  }
1001
1001
  function copyButton($$renderer, doc) {
1002
- $$renderer.push(`<button type="button"${$.attr_class(`inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${copiedDocId === doc.id || copyLoadingDocId === doc.id ? "opacity-100" : ""}`)}${$.attr("aria-label", action_copy_content())}${$.attr("title", action_copy_content())}${$.attr("disabled", copyLoadingDocId === doc.id, true)}>`);
1002
+ $$renderer.push(`<button type="button"${$.attr_class(`sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${copiedDocId === doc.id || copyLoadingDocId === doc.id ? "opacity-100" : ""}`, "svelte-1nshngr")}${$.attr("aria-label", action_copy_content())}${$.attr("title", action_copy_content())}${$.attr("disabled", copyLoadingDocId === doc.id, true)}>`);
1003
1003
  if (copyLoadingDocId === doc.id) {
1004
1004
  $$renderer.push("<!--[0-->");
1005
1005
  Loader_circle($$renderer, { class: "size-3.5 animate-spin" });
@@ -1061,7 +1061,7 @@ function FolderTree($$renderer, $$props) {
1061
1061
  for (let $$index_2 = 0, $$length = each_array.length; $$index_2 < $$length; $$index_2++) {
1062
1062
  let bucket = each_array[$$index_2];
1063
1063
  const isBucketExpanded = expandedCategoryIds.has(bucket.id);
1064
- $$renderer.push(`<div class="group/bucket"${$.attr("data-is-dnd-shadow-item-hint", bucket[SHADOW_ITEM_MARKER_PROPERTY_NAME])}><div class="flex w-full min-w-0 items-center gap-0.5"><button type="button"${$.attr("aria-expanded", isBucketExpanded)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", draggedDocId && "hover:bg-accent/40 border border-dashed border-primary/30")))}>`);
1064
+ $$renderer.push(`<div class="group/bucket"${$.attr("data-is-dnd-shadow-item-hint", bucket[SHADOW_ITEM_MARKER_PROPERTY_NAME])}><div class="flex w-full min-w-0 items-center gap-0.5"><button type="button"${$.attr("aria-expanded", isBucketExpanded)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", draggedDocId && "hover:bg-accent/40 border border-dashed border-primary/30")), "svelte-1nshngr")}>`);
1065
1065
  if (isBucketExpanded) {
1066
1066
  $$renderer.push("<!--[0-->");
1067
1067
  Chevron_down($$renderer, { class: "size-3.5 shrink-0" });
@@ -1080,7 +1080,7 @@ function FolderTree($$renderer, $$props) {
1080
1080
  class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/bucket:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1081
1081
  "aria-label": editor_more_options(),
1082
1082
  title: editor_more_options()
1083
- })}>`);
1083
+ }, "svelte-1nshngr")}>`);
1084
1084
  Ellipsis_vertical($$renderer, { class: "size-3.5" });
1085
1085
  $$renderer.push(`<!----></button>`);
1086
1086
  }
@@ -1154,7 +1154,7 @@ function FolderTree($$renderer, $$props) {
1154
1154
  $$renderer.push("<!--[0-->");
1155
1155
  const zoneItems = bucketFoldersMap[bucket.id] ?? [];
1156
1156
  const rootDocs = categoryRootDocsMap[bucket.id] ?? [];
1157
- $$renderer.push(`<div class="ml-0.5 space-y-0.5 border-l border-border pl-0.5"><div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingFolder && zoneItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")))}><!--[-->`);
1157
+ $$renderer.push(`<div class="ml-0.5 space-y-0.5 border-l border-border pl-0.5"><div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingFolder && zoneItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), "svelte-1nshngr")}><!--[-->`);
1158
1158
  const each_array_1 = $.ensure_array_like(zoneItems);
1159
1159
  for (let $$index = 0, $$length = each_array_1.length; $$index < $$length; $$index++) {
1160
1160
  let folder = each_array_1[$$index];
@@ -1162,7 +1162,7 @@ function FolderTree($$renderer, $$props) {
1162
1162
  folderBlock($$renderer, folder);
1163
1163
  $$renderer.push(`<!----></div>`);
1164
1164
  }
1165
- $$renderer.push(`<!--]--></div> <div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingDoc && rootDocs.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")))}><!--[-->`);
1165
+ $$renderer.push(`<!--]--></div> <div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingDoc && rootDocs.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), "svelte-1nshngr")}><!--[-->`);
1166
1166
  const each_array_2 = $.ensure_array_like(rootDocs);
1167
1167
  for (let $$index_1 = 0, $$length = each_array_2.length; $$index_1 < $$length; $$index_1++) {
1168
1168
  let doc = each_array_2[$$index_1];
@@ -1181,14 +1181,14 @@ function FolderTree($$renderer, $$props) {
1181
1181
  $$renderer.push(`<!--]--></div> `);
1182
1182
  if (uncatBucket()) {
1183
1183
  $$renderer.push("<!--[0-->");
1184
- $$renderer.push(`<div class="group/bucket"><div class="flex w-full min-w-0 items-center gap-0.5"><button type="button"${$.attr("aria-expanded", uncategorizedExpanded)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", draggedDocId && "hover:bg-accent/40 border border-dashed border-primary/30")))}>`);
1184
+ $$renderer.push(`<div class="group/bucket"><div class="flex w-full min-w-0 items-center gap-0.5"><button type="button"${$.attr("aria-expanded", uncategorizedExpanded)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", draggedDocId && "hover:bg-accent/40 border border-dashed border-primary/30")), "svelte-1nshngr")}>`);
1185
1185
  $$renderer.push("<!--[0-->");
1186
1186
  Chevron_down($$renderer, { class: "size-3.5 shrink-0" });
1187
1187
  $$renderer.push(`<!--]--> <span class="min-w-0 truncate">${$.escape(sidebar_uncategorized())}</span></button></div> `);
1188
1188
  {
1189
1189
  $$renderer.push("<!--[0-->");
1190
1190
  const zoneItems = bucketFoldersMap[UNCATEGORIZED_KEY] ?? [];
1191
- $$renderer.push(`<div class="ml-0.5 space-y-0.5 border-l border-border pl-0.5"><div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingFolder && zoneItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")))}><!--[-->`);
1191
+ $$renderer.push(`<div class="ml-0.5 space-y-0.5 border-l border-border pl-0.5"><div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingFolder && zoneItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), "svelte-1nshngr")}><!--[-->`);
1192
1192
  const each_array_3 = $.ensure_array_like(zoneItems);
1193
1193
  for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
1194
1194
  let folder = each_array_3[$$index_3];
@@ -1196,7 +1196,7 @@ function FolderTree($$renderer, $$props) {
1196
1196
  folderBlock($$renderer, folder);
1197
1197
  $$renderer.push(`<!----></div>`);
1198
1198
  }
1199
- $$renderer.push(`<!--]--></div> <div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingDoc && rootItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")))}><!--[-->`);
1199
+ $$renderer.push(`<!--]--></div> <div${$.attr_class($.clsx(cn("min-h-[8px] space-y-0.5 transition-all duration-150", isDraggingDoc && rootItems.length === 0 && "min-h-[36px] bg-accent/20 rounded border border-dashed border-muted-foreground/20")), "svelte-1nshngr")}><!--[-->`);
1200
1200
  const each_array_4 = $.ensure_array_like(rootItems);
1201
1201
  for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
1202
1202
  let doc = each_array_4[$$index_4];
@@ -1510,9 +1510,9 @@ function RecentDocs($$renderer, $$props) {
1510
1510
  const each_array = $.ensure_array_like(recentDocs);
1511
1511
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1512
1512
  let doc = each_array[$$index];
1513
- $$renderer.push(`<div class="group/doc flex min-w-0 items-center gap-1"><a${$.attr("href", `/docs/${doc.id}`)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", activeId === doc.id && "bg-accent text-accent-foreground")))}>`);
1513
+ $$renderer.push(`<div class="group/doc flex min-w-0 items-center gap-1"><a${$.attr("href", `/docs/${doc.id}`)}${$.attr_class($.clsx(cn("flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground", activeId === doc.id && "bg-accent text-accent-foreground")), "svelte-1uwxs9f")}>`);
1514
1514
  File_text($$renderer, { class: "size-4 shrink-0 text-muted-foreground" });
1515
- $$renderer.push(`<!----> <div class="min-w-0 flex-1"><p class="truncate min-w-0">${$.escape(doc.title)}</p> <p class="text-xs text-muted-foreground">${$.escape(doc.updatedAt)}</p></div></a> <button type="button"${$.attr_class(`inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${copiedDocId === doc.id || copyLoadingDocId === doc.id ? "opacity-100" : ""}`)}${$.attr("aria-label", action_copy_content())}${$.attr("title", action_copy_content())}${$.attr("disabled", copyLoadingDocId === doc.id, true)}>`);
1515
+ $$renderer.push(`<!----> <div class="min-w-0 flex-1"><p class="truncate min-w-0">${$.escape(doc.title)}</p> <p class="text-xs text-muted-foreground">${$.escape(doc.updatedAt)}</p></div></a> <button type="button"${$.attr_class(`sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${copiedDocId === doc.id || copyLoadingDocId === doc.id ? "opacity-100" : ""}`, "svelte-1uwxs9f")}${$.attr("aria-label", action_copy_content())}${$.attr("title", action_copy_content())}${$.attr("disabled", copyLoadingDocId === doc.id, true)}>`);
1516
1516
  if (copyLoadingDocId === doc.id) {
1517
1517
  $$renderer.push("<!--[0-->");
1518
1518
  Loader_circle($$renderer, { class: "size-3.5 animate-spin" });
@@ -1531,10 +1531,10 @@ function RecentDocs($$renderer, $$props) {
1531
1531
  $$renderer.push(`<button${$.attributes({
1532
1532
  ...props,
1533
1533
  type: "button",
1534
- class: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1534
+ class: "sidebar-touch-action inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-accent-foreground group-hover/doc:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1535
1535
  "aria-label": editor_more_options(),
1536
1536
  title: editor_more_options()
1537
- })}>`);
1537
+ }, "svelte-1uwxs9f")}>`);
1538
1538
  Ellipsis_vertical($$renderer, { class: "size-3.5" });
1539
1539
  $$renderer.push(`<!----></button>`);
1540
1540
  }
@@ -1,2 +1,2 @@
1
- import { t as CategoryDialog } from "../assets/CategoryDialog-BLxVoynx.js";
1
+ import { t as CategoryDialog } from "../assets/CategoryDialog-QHEv_9N4.js";
2
2
  export { CategoryDialog };
@@ -1,2 +1,2 @@
1
- import { t as Sidebar } from "../assets/Sidebar-CO9LZRPa.js";
1
+ import { t as Sidebar } from "../assets/Sidebar-CqsMw0Hd.js";
2
2
  export { Sidebar };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hiai-gg/docsmint",
3
- "version": "0.5.8",
3
+ "version": "0.5.10",
4
4
  "type": "module",
5
5
  "browser": {
6
6
  "./dist/backend-launcher.js": false,
@@ -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.5.8";
27
+ const VERSION = "0.5.10";
28
28
 
29
29
  const program = new Command();
30
30
  program
@@ -35,7 +35,7 @@ interface McpToolResult {
35
35
 
36
36
  const server = new McpServer({
37
37
  name: "hiai-docs",
38
- version: "0.5.8",
38
+ version: "0.5.10",
39
39
  });
40
40
 
41
41
  /**