@inkandswitch/patchwork-pkg-base 0.0.114 → 0.0.116

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.
@@ -1 +1 @@
1
- automerge:2KvNxVGZ7Mvj19AB3Mb2wa3zeuZk
1
+ automerge:3oCNseSRLnCPEfk5gMtMD5S5j9cj
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkandswitch/patchwork-pkg-base",
3
- "version": "0.0.114",
3
+ "version": "0.0.116",
4
4
  "type": "module",
5
5
  "description": "Base packages for the Patchwork system",
6
6
  "repository": {
@@ -152,16 +152,14 @@ function extractDocRefs(dt) {
152
152
  function embedSyntax({ docId, toolId }) {
153
153
  return toolId ? `[patchwork:${docId}/${toolId}]` : `[patchwork:${docId}]`;
154
154
  }
155
- async function fileDropRefs(files) {
155
+ async function importFileRefs(files) {
156
156
  const repo = window.repo;
157
157
  if (!repo) {
158
- console.warn(
159
- "[codemirror-embed] window.repo unavailable; ignoring dropped files"
160
- );
158
+ console.warn("[codemirror-embed] window.repo unavailable; ignoring files");
161
159
  return [];
162
160
  }
163
161
  const refs = [];
164
- for (const file of Array.from(files)) {
162
+ for (const file of files) {
165
163
  try {
166
164
  const mimeType = file.type || "application/octet-stream";
167
165
  const isText = mimeType.startsWith("text/") || mimeType === "application/json";
@@ -182,7 +180,7 @@ async function fileDropRefs(files) {
182
180
  }
183
181
  } catch (err) {
184
182
  console.warn(
185
- "[codemirror-embed] failed to import dropped file",
183
+ "[codemirror-embed] failed to import file",
186
184
  file.name,
187
185
  err
188
186
  );
@@ -190,17 +188,20 @@ async function fileDropRefs(files) {
190
188
  }
191
189
  return refs;
192
190
  }
193
- function insertRefs(view, pos, refs) {
191
+ function insertRefs(view, from, refs, to = from) {
194
192
  if (refs.length === 0) return;
193
+ const len = view.state.doc.length;
194
+ from = Math.min(from, len);
195
+ to = Math.min(to, len);
195
196
  let text = refs.map(embedSyntax).join("\n\n");
196
- const line = view.state.doc.lineAt(pos);
197
- if (/\S/.test(line.text)) {
198
- if (pos > line.from) text = "\n" + text;
199
- if (pos < line.to) text = text + "\n";
200
- }
197
+ const { doc } = view.state;
198
+ const start = doc.lineAt(from);
199
+ const end = doc.lineAt(to);
200
+ if (/\S/.test(start.text) && from > start.from) text = "\n" + text;
201
+ if (/\S/.test(end.text) && to < end.to) text = text + "\n";
201
202
  view.dispatch({
202
- changes: { from: pos, insert: text },
203
- selection: { anchor: pos + text.length }
203
+ changes: { from, to, insert: text },
204
+ selection: { anchor: from + text.length }
204
205
  });
205
206
  }
206
207
  function embedDropHandlers() {
@@ -220,7 +221,9 @@ function embedDropHandlers() {
220
221
  if (pos == null) return false;
221
222
  if (dt.files && dt.files.length > 0) {
222
223
  event.preventDefault();
223
- void fileDropRefs(dt.files).then((refs2) => insertRefs(view, pos, refs2));
224
+ void importFileRefs(Array.from(dt.files)).then(
225
+ (refs2) => insertRefs(view, pos, refs2)
226
+ );
224
227
  return true;
225
228
  }
226
229
  const refs = extractDocRefs(dt);
@@ -228,6 +231,20 @@ function embedDropHandlers() {
228
231
  event.preventDefault();
229
232
  insertRefs(view, pos, refs);
230
233
  return true;
234
+ },
235
+ paste(event, view) {
236
+ const dt = event.clipboardData;
237
+ if (!dt || dt.getData("text/plain")) return false;
238
+ const images = Array.from(dt.files ?? []).filter(
239
+ (f) => f.type.startsWith("image/")
240
+ );
241
+ if (images.length === 0) return false;
242
+ event.preventDefault();
243
+ const { from, to } = view.state.selection.main;
244
+ void importFileRefs(images).then(
245
+ (refs) => insertRefs(view, from, refs, to)
246
+ );
247
+ return true;
231
248
  }
232
249
  });
233
250
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extensions/embed.ts", "../../src/themes/embed.ts"],
4
- "sourcesContent": ["import {\n EditorView,\n Decoration,\n WidgetType,\n ViewPlugin,\n ViewUpdate,\n dropCursor,\n type DecorationSet,\n} from \"@codemirror/view\";\nimport { Range } from \"@codemirror/state\";\nimport {\n type AutomergeUrl,\n type DocumentId,\n isValidDocumentId,\n parseAutomergeUrl,\n} from \"@automerge/automerge-repo/slim\";\nimport { embedTheme } from \"../themes/embed.ts\";\n\n/**\n * Renders an embedded doc through the shared \"embed\" tool, which draws the\n * chrome and nests the content view. The inner tool travels via the\n * `embed-tool-id` attribute; tool picks come back as\n * `patchwork:embed-tool-changed` events and are persisted by rewriting the\n * marker (which recreates the widget).\n */\nclass EmbedWidget extends WidgetType {\n readonly docId: DocumentId;\n // `null` = no pinned tool; the embed frame uses the datatype's fallback.\n readonly toolId: string | null;\n readonly embedText: string;\n\n constructor(docId: DocumentId, toolId: string | null, embedText: string) {\n super();\n this.docId = docId;\n this.toolId = toolId;\n this.embedText = embedText;\n }\n\n eq(other: EmbedWidget) {\n return other.docId === this.docId && other.toolId === this.toolId;\n }\n\n toDOM(view: EditorView) {\n const container = document.createElement(\"div\");\n container.className = \"cm-embed\";\n\n const patchworkView = document.createElement(\"patchwork-view\");\n // No heads in the url: the embed follows whatever version the host\n // resolves \u2014 the active checkpoint when one is checked out, live otherwise.\n patchworkView.setAttribute(\"doc-url\", `automerge:${this.docId}`);\n patchworkView.setAttribute(\"tool-id\", \"embed\");\n if (this.toolId) patchworkView.setAttribute(\"embed-tool-id\", this.toolId);\n // Explicit inline height: without it the element collapses to 0px (the\n // stylesheet rule isn't reliably applied here).\n patchworkView.style.display = \"block\";\n patchworkView.style.height = \"500px\";\n patchworkView.style.width = \"100%\";\n\n // Persist tool picks into the marker text. Stop propagation so nested\n // embeds don't also change the outer embed's tool.\n container.addEventListener(\"patchwork:embed-tool-changed\", (e) => {\n e.stopPropagation();\n const toolId = (e as CustomEvent<{ toolId?: string }>).detail?.toolId;\n if (toolId) this.setTool(view, container, toolId);\n });\n\n container.appendChild(patchworkView);\n return container;\n }\n\n private setTool(\n view: EditorView,\n container: HTMLElement,\n toolId: string\n ): void {\n const from = view.posAtDOM(container);\n const to = from + this.embedText.length;\n // Only rewrite if the marker is still exactly where this widget maps to.\n if (view.state.doc.sliceString(from, to) !== this.embedText) return;\n view.dispatch({\n changes: { from, to, insert: embedSyntax({ docId: this.docId, toolId }) },\n });\n }\n\n ignoreEvent() {\n // Atomic embed: the editor ignores all events; the frame handles them.\n return true;\n }\n}\n\n// Marker syntax: [patchwork:docId] or [patchwork:docId/toolId] (ids can't\n// contain `/` or `]`). We scan plain text instead of the markdown syntax tree\n// on purpose: `@codemirror/language` isn't a shared singleton across\n// patchwork's separately-bundled extensions, so `syntaxTree(state)` here would\n// read a different `Language` facet and always come back empty.\nconst EMBED_PATTERN = /\\[patchwork:([^/\\]]+)(?:\\/([^\\]]+))?\\]/g;\n\nfunction getEmbedLinks(view: EditorView) {\n const widgets: Range<Decoration>[] = [];\n const { state } = view;\n\n // Visible ranges are line-aligned and markers never span lines, so a marker\n // is always fully inside or fully outside a range.\n for (const { from, to } of view.visibleRanges) {\n const text = state.doc.sliceString(from, to);\n EMBED_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = EMBED_PATTERN.exec(text)) !== null) {\n const matchFrom = from + m.index;\n const matchTo = matchFrom + m[0].length;\n const [matchText, docId, toolId] = m;\n\n if (!isValidDocumentId(docId)) continue;\n\n const embed = Decoration.replace({\n widget: new EmbedWidget(docId as DocumentId, toolId ?? null, matchText),\n });\n widgets.push(embed.range(matchFrom, matchTo));\n }\n }\n\n // `true` lets CodeMirror sort the ranges defensively (matches are already in\n // document order, but this is cheap insurance).\n return Decoration.set(widgets, true);\n}\n\n// MIME types we accept document drags from. Mirrors the sideboard's convention.\nconst PATCHWORK_DND = \"text/x-patchwork-dnd\";\nconst PATCHWORK_URLS = \"text/x-patchwork-urls\";\n\ntype DocRef = { docId: DocumentId; toolId: string | null };\n\n/** Turn an automerge url or a patchwork web link into a DocumentId, or null. */\nfunction urlToDocId(raw: string): DocumentId | null {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n // Plain automerge url (optionally carrying heads/query/subpath).\n const am = trimmed.match(/automerge:([a-zA-Z0-9]+)/);\n if (am && isValidDocumentId(am[1])) return am[1] as DocumentId;\n // Patchwork web link: #doc=<documentId> (also &doc= / ?doc=).\n const web = trimmed.match(/[#&?]doc=([a-zA-Z0-9]+)/);\n if (web && isValidDocumentId(web[1])) return web[1] as DocumentId;\n return null;\n}\n\n/**\n * Read dragged documents out of a drop event, in order of format preference.\n * Only an *explicit* `toolId` on a structured item pins the tool; otherwise we\n * embed tool-less and let the view fall back to the datatype's default tool.\n */\nfunction extractDocRefs(dt: DataTransfer): DocRef[] {\n const refs: DocRef[] = [];\n const seen = new Set<string>();\n const push = (docId: DocumentId | null, toolId: string | null) => {\n if (!docId || seen.has(docId)) return;\n seen.add(docId);\n refs.push({ docId, toolId });\n };\n\n const dnd = dt.getData(PATCHWORK_DND);\n if (dnd) {\n try {\n const parsed = JSON.parse(dnd) as {\n items?: Array<{ url?: string; toolId?: string }>;\n };\n for (const item of parsed?.items ?? []) {\n if (item?.url) push(urlToDocId(item.url), item.toolId ?? null);\n }\n } catch {\n // fall through to the other formats\n }\n }\n if (refs.length > 0) return refs;\n\n const urls = dt.getData(PATCHWORK_URLS);\n if (urls) {\n try {\n const parsed: unknown = JSON.parse(urls);\n if (Array.isArray(parsed)) {\n for (const u of parsed) push(urlToDocId(String(u)), null);\n }\n } catch {\n // fall through\n }\n }\n if (refs.length > 0) return refs;\n\n const text = dt.getData(\"text/uri-list\") || dt.getData(\"text/plain\");\n if (text) {\n for (const line of text.split(/\\r?\\n/)) {\n if (line.startsWith(\"#\")) continue; // uri-list comments\n push(urlToDocId(line), null);\n }\n }\n return refs;\n}\n\nfunction embedSyntax({ docId, toolId }: DocRef): string {\n return toolId ? `[patchwork:${docId}/${toolId}]` : `[patchwork:${docId}]`;\n}\n\n/**\n * Import each OS file dropped from the desktop as a Patchwork `file` document,\n * returning tool-less refs to embed. Uses the realm-local `window.repo` (the\n * documented global) \u2014 fine for creating brand-new docs, which aren't subject\n * to draft remapping.\n */\nasync function fileDropRefs(files: FileList): Promise<DocRef[]> {\n const repo = (window as unknown as { repo?: any }).repo;\n if (!repo) {\n console.warn(\n \"[codemirror-embed] window.repo unavailable; ignoring dropped files\"\n );\n return [];\n }\n const refs: DocRef[] = [];\n for (const file of Array.from(files)) {\n try {\n const mimeType = file.type || \"application/octet-stream\";\n const isText =\n mimeType.startsWith(\"text/\") || mimeType === \"application/json\";\n const content = isText\n ? await file.text()\n : new Uint8Array(await file.arrayBuffer());\n const parts = file.name.split(\".\");\n const extension = parts.length > 1 ? parts.pop()! : \"\";\n const handle = repo.create();\n handle.change((d: any) => {\n d[\"@patchwork\"] = { type: \"file\" };\n d.content = content;\n d.mimeType = mimeType;\n d.extension = extension;\n d.name = file.name;\n });\n const { documentId } = parseAutomergeUrl(handle.url as AutomergeUrl);\n if (isValidDocumentId(documentId)) {\n refs.push({ docId: documentId as DocumentId, toolId: null });\n }\n } catch (err) {\n console.warn(\n \"[codemirror-embed] failed to import dropped file\",\n file.name,\n err\n );\n }\n }\n return refs;\n}\n\nfunction insertRefs(view: EditorView, pos: number, refs: DocRef[]): void {\n if (refs.length === 0) return;\n let text = refs.map(embedSyntax).join(\"\\n\\n\");\n // On a non-empty line, add just enough breaks to put the embed on its own line.\n const line = view.state.doc.lineAt(pos);\n if (/\\S/.test(line.text)) {\n if (pos > line.from) text = \"\\n\" + text;\n if (pos < line.to) text = text + \"\\n\";\n }\n view.dispatch({\n changes: { from: pos, insert: text },\n selection: { anchor: pos + text.length },\n });\n}\n\n/**\n * Drop handler that accepts:\n * - documents dragged from the sidebar / canvases / other tools\n * (`text/x-patchwork-dnd`, `text/x-patchwork-urls`, `text/uri-list`, and\n * `text/plain` patchwork links), and\n * - files dragged in from the operating system (imported as `file` docs).\n * Inserts `[patchwork:docId]` (or `[patchwork:docId/toolId]`) at the drop point.\n */\nfunction embedDropHandlers() {\n // Only claim the *dragover* for unambiguous patchwork/OS drags \u2014 plain\n // text/uri-list can be an ordinary in-editor text drag, which we must not\n // swallow. (`Files` covers OS drags, whose `dt.files` is empty until drop.)\n const wantsDragover = (dt: DataTransfer | null): boolean =>\n !!dt &&\n (dt.types.includes(\"Files\") ||\n dt.types.includes(PATCHWORK_DND) ||\n dt.types.includes(PATCHWORK_URLS));\n\n return EditorView.domEventHandlers({\n dragover(event) {\n const dt = event.dataTransfer;\n if (!wantsDragover(dt)) return false;\n event.preventDefault();\n // Doc drags insert a *reference* to the same automerge doc, so show the\n // link cursor; OS file drags genuinely copy content into new docs.\n if (dt) dt.dropEffect = dt.types.includes(\"Files\") ? \"copy\" : \"link\";\n return true;\n },\n drop(event, view) {\n const dt = event.dataTransfer;\n if (!dt) return false;\n const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n if (pos == null) return false;\n\n // OS files import asynchronously; insert once the docs exist.\n if (dt.files && dt.files.length > 0) {\n event.preventDefault();\n void fileDropRefs(dt.files).then((refs) => insertRefs(view, pos, refs));\n return true;\n }\n\n // Otherwise only handle the drop if it actually resolves to patchwork\n // docs (dnd/urls always do; uri-list/plain only for patchwork links).\n // If not, let CodeMirror handle it as a normal text drop.\n const refs = extractDocRefs(dt);\n if (refs.length === 0) return false;\n event.preventDefault();\n insertRefs(view, pos, refs);\n return true;\n },\n });\n}\n\nconst embedPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getEmbedLinks(view);\n }\n\n update(update: ViewUpdate) {\n // Viewport too, so newly-visible markers get decorated.\n if (update.docChanged || update.viewportChanged) {\n this.decorations = getEmbedLinks(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n // Atomic: the cursor skips embeds and delete removes the whole marker.\n provide: (plugin) =>\n EditorView.atomicRanges.of(\n (view) => view.plugin(plugin)?.decorations ?? Decoration.none\n ),\n }\n);\n\nexport function markdownEmbed() {\n // `dropCursor` observes events, so it coexists with our dragover handler.\n return [embedPlugin, embedTheme, embedDropHandlers(), dropCursor()];\n}\n", "import { EditorView } from \"@codemirror/view\";\n\n// Outer container only; all embed chrome lives in the shared \"embed\" tool.\nexport const embedTheme = EditorView.baseTheme({\n \".cm-embed\": {\n display: \"block\",\n border: \"var(--studio-border-width, 1px) var(--studio-border-style, solid)\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n },\n \"&light .cm-embed\": {\n borderColor: \"#ddd\",\n },\n \"&dark .cm-embed\": {\n borderColor: \"#333\",\n },\n \".cm-embed > patchwork-view\": {\n display: \"block\",\n height: \"500px\",\n width: \"100%\",\n },\n});\n"],
5
- "mappings": ";AAAA;AAAA,EACE,cAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OAEK;AAEP;AAAA,EAGE;AAAA,EACA;AAAA,OACK;;;ACfP,SAAS,kBAAkB;AAGpB,IAAM,aAAa,WAAW,UAAU;AAAA,EAC7C,aAAa;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa;AAAA,EACf;AAAA,EACA,mBAAmB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF,CAAC;;;ADID,IAAM,cAAN,cAA0B,WAAW;AAAA,EAC1B;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EAET,YAAY,OAAmB,QAAuB,WAAmB;AACvE,UAAM;AACN,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,GAAG,OAAoB;AACrB,WAAO,MAAM,UAAU,KAAK,SAAS,MAAM,WAAW,KAAK;AAAA,EAC7D;AAAA,EAEA,MAAM,MAAkB;AACtB,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,YAAY;AAEtB,UAAM,gBAAgB,SAAS,cAAc,gBAAgB;AAG7D,kBAAc,aAAa,WAAW,aAAa,KAAK,KAAK,EAAE;AAC/D,kBAAc,aAAa,WAAW,OAAO;AAC7C,QAAI,KAAK,OAAQ,eAAc,aAAa,iBAAiB,KAAK,MAAM;AAGxE,kBAAc,MAAM,UAAU;AAC9B,kBAAc,MAAM,SAAS;AAC7B,kBAAc,MAAM,QAAQ;AAI5B,cAAU,iBAAiB,gCAAgC,CAAC,MAAM;AAChE,QAAE,gBAAgB;AAClB,YAAM,SAAU,EAAuC,QAAQ;AAC/D,UAAI,OAAQ,MAAK,QAAQ,MAAM,WAAW,MAAM;AAAA,IAClD,CAAC;AAED,cAAU,YAAY,aAAa;AACnC,WAAO;AAAA,EACT;AAAA,EAEQ,QACN,MACA,WACA,QACM;AACN,UAAM,OAAO,KAAK,SAAS,SAAS;AACpC,UAAM,KAAK,OAAO,KAAK,UAAU;AAEjC,QAAI,KAAK,MAAM,IAAI,YAAY,MAAM,EAAE,MAAM,KAAK,UAAW;AAC7D,SAAK,SAAS;AAAA,MACZ,SAAS,EAAE,MAAM,IAAI,QAAQ,YAAY,EAAE,OAAO,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AAEZ,WAAO;AAAA,EACT;AACF;AAOA,IAAM,gBAAgB;AAEtB,SAAS,cAAc,MAAkB;AACvC,QAAM,UAA+B,CAAC;AACtC,QAAM,EAAE,MAAM,IAAI;AAIlB,aAAW,EAAE,MAAM,GAAG,KAAK,KAAK,eAAe;AAC7C,UAAM,OAAO,MAAM,IAAI,YAAY,MAAM,EAAE;AAC3C,kBAAc,YAAY;AAC1B,QAAI;AACJ,YAAQ,IAAI,cAAc,KAAK,IAAI,OAAO,MAAM;AAC9C,YAAM,YAAY,OAAO,EAAE;AAC3B,YAAM,UAAU,YAAY,EAAE,CAAC,EAAE;AACjC,YAAM,CAAC,WAAW,OAAO,MAAM,IAAI;AAEnC,UAAI,CAAC,kBAAkB,KAAK,EAAG;AAE/B,YAAM,QAAQ,WAAW,QAAQ;AAAA,QAC/B,QAAQ,IAAI,YAAY,OAAqB,UAAU,MAAM,SAAS;AAAA,MACxE,CAAC;AACD,cAAQ,KAAK,MAAM,MAAM,WAAW,OAAO,CAAC;AAAA,IAC9C;AAAA,EACF;AAIA,SAAO,WAAW,IAAI,SAAS,IAAI;AACrC;AAGA,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AAKvB,SAAS,WAAW,KAAgC;AAClD,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,KAAK,QAAQ,MAAM,0BAA0B;AACnD,MAAI,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAG,QAAO,GAAG,CAAC;AAE/C,QAAM,MAAM,QAAQ,MAAM,yBAAyB;AACnD,MAAI,OAAO,kBAAkB,IAAI,CAAC,CAAC,EAAG,QAAO,IAAI,CAAC;AAClD,SAAO;AACT;AAOA,SAAS,eAAe,IAA4B;AAClD,QAAM,OAAiB,CAAC;AACxB,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,OAAO,CAAC,OAA0B,WAA0B;AAChE,QAAI,CAAC,SAAS,KAAK,IAAI,KAAK,EAAG;AAC/B,SAAK,IAAI,KAAK;AACd,SAAK,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,EAC7B;AAEA,QAAM,MAAM,GAAG,QAAQ,aAAa;AACpC,MAAI,KAAK;AACP,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG;AAG7B,iBAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AACtC,YAAI,MAAM,IAAK,MAAK,WAAW,KAAK,GAAG,GAAG,KAAK,UAAU,IAAI;AAAA,MAC/D;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,OAAO,GAAG,QAAQ,cAAc;AACtC,MAAI,MAAM;AACR,QAAI;AACF,YAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,mBAAW,KAAK,OAAQ,MAAK,WAAW,OAAO,CAAC,CAAC,GAAG,IAAI;AAAA,MAC1D;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,OAAO,GAAG,QAAQ,eAAe,KAAK,GAAG,QAAQ,YAAY;AACnE,MAAI,MAAM;AACR,eAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AACtC,UAAI,KAAK,WAAW,GAAG,EAAG;AAC1B,WAAK,WAAW,IAAI,GAAG,IAAI;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,EAAE,OAAO,OAAO,GAAmB;AACtD,SAAO,SAAS,cAAc,KAAK,IAAI,MAAM,MAAM,cAAc,KAAK;AACxE;AAQA,eAAe,aAAa,OAAoC;AAC9D,QAAM,OAAQ,OAAqC;AACnD,MAAI,CAAC,MAAM;AACT,YAAQ;AAAA,MACN;AAAA,IACF;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,OAAiB,CAAC;AACxB,aAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AACpC,QAAI;AACF,YAAM,WAAW,KAAK,QAAQ;AAC9B,YAAM,SACJ,SAAS,WAAW,OAAO,KAAK,aAAa;AAC/C,YAAM,UAAU,SACZ,MAAM,KAAK,KAAK,IAChB,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AAC3C,YAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AACjC,YAAM,YAAY,MAAM,SAAS,IAAI,MAAM,IAAI,IAAK;AACpD,YAAM,SAAS,KAAK,OAAO;AAC3B,aAAO,OAAO,CAAC,MAAW;AACxB,UAAE,YAAY,IAAI,EAAE,MAAM,OAAO;AACjC,UAAE,UAAU;AACZ,UAAE,WAAW;AACb,UAAE,YAAY;AACd,UAAE,OAAO,KAAK;AAAA,MAChB,CAAC;AACD,YAAM,EAAE,WAAW,IAAI,kBAAkB,OAAO,GAAmB;AACnE,UAAI,kBAAkB,UAAU,GAAG;AACjC,aAAK,KAAK,EAAE,OAAO,YAA0B,QAAQ,KAAK,CAAC;AAAA,MAC7D;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ;AAAA,QACN;AAAA,QACA,KAAK;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,WAAW,MAAkB,KAAa,MAAsB;AACvE,MAAI,KAAK,WAAW,EAAG;AACvB,MAAI,OAAO,KAAK,IAAI,WAAW,EAAE,KAAK,MAAM;AAE5C,QAAM,OAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AACtC,MAAI,KAAK,KAAK,KAAK,IAAI,GAAG;AACxB,QAAI,MAAM,KAAK,KAAM,QAAO,OAAO;AACnC,QAAI,MAAM,KAAK,GAAI,QAAO,OAAO;AAAA,EACnC;AACA,OAAK,SAAS;AAAA,IACZ,SAAS,EAAE,MAAM,KAAK,QAAQ,KAAK;AAAA,IACnC,WAAW,EAAE,QAAQ,MAAM,KAAK,OAAO;AAAA,EACzC,CAAC;AACH;AAUA,SAAS,oBAAoB;AAI3B,QAAM,gBAAgB,CAAC,OACrB,CAAC,CAAC,OACD,GAAG,MAAM,SAAS,OAAO,KACxB,GAAG,MAAM,SAAS,aAAa,KAC/B,GAAG,MAAM,SAAS,cAAc;AAEpC,SAAOC,YAAW,iBAAiB;AAAA,IACjC,SAAS,OAAO;AACd,YAAM,KAAK,MAAM;AACjB,UAAI,CAAC,cAAc,EAAE,EAAG,QAAO;AAC/B,YAAM,eAAe;AAGrB,UAAI,GAAI,IAAG,aAAa,GAAG,MAAM,SAAS,OAAO,IAAI,SAAS;AAC9D,aAAO;AAAA,IACT;AAAA,IACA,KAAK,OAAO,MAAM;AAChB,YAAM,KAAK,MAAM;AACjB,UAAI,CAAC,GAAI,QAAO;AAChB,YAAM,MAAM,KAAK,YAAY,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AACnE,UAAI,OAAO,KAAM,QAAO;AAGxB,UAAI,GAAG,SAAS,GAAG,MAAM,SAAS,GAAG;AACnC,cAAM,eAAe;AACrB,aAAK,aAAa,GAAG,KAAK,EAAE,KAAK,CAACC,UAAS,WAAW,MAAM,KAAKA,KAAI,CAAC;AACtE,eAAO;AAAA,MACT;AAKA,YAAM,OAAO,eAAe,EAAE;AAC9B,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,YAAM,eAAe;AACrB,iBAAW,MAAM,KAAK,IAAI;AAC1B,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,IAAM,cAAc,WAAW;AAAA,EAC7B,MAAM;AAAA,IACJ;AAAA,IAEA,YAAY,MAAkB;AAC5B,WAAK,cAAc,cAAc,IAAI;AAAA,IACvC;AAAA,IAEA,OAAO,QAAoB;AAEzB,UAAI,OAAO,cAAc,OAAO,iBAAiB;AAC/C,aAAK,cAAc,cAAc,OAAO,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa,CAAC,MAAM,EAAE;AAAA;AAAA,IAEtB,SAAS,CAAC,WACRD,YAAW,aAAa;AAAA,MACtB,CAAC,SAAS,KAAK,OAAO,MAAM,GAAG,eAAe,WAAW;AAAA,IAC3D;AAAA,EACJ;AACF;AAEO,SAAS,gBAAgB;AAE9B,SAAO,CAAC,aAAa,YAAY,kBAAkB,GAAG,WAAW,CAAC;AACpE;",
4
+ "sourcesContent": ["import {\n EditorView,\n Decoration,\n WidgetType,\n ViewPlugin,\n ViewUpdate,\n dropCursor,\n type DecorationSet,\n} from \"@codemirror/view\";\nimport { Range } from \"@codemirror/state\";\nimport {\n type AutomergeUrl,\n type DocumentId,\n isValidDocumentId,\n parseAutomergeUrl,\n} from \"@automerge/automerge-repo/slim\";\nimport { embedTheme } from \"../themes/embed.ts\";\n\n/**\n * Renders an embedded doc through the shared \"embed\" tool, which draws the\n * chrome and nests the content view. The inner tool travels via the\n * `embed-tool-id` attribute; tool picks come back as\n * `patchwork:embed-tool-changed` events and are persisted by rewriting the\n * marker (which recreates the widget).\n */\nclass EmbedWidget extends WidgetType {\n readonly docId: DocumentId;\n // `null` = no pinned tool; the embed frame uses the datatype's fallback.\n readonly toolId: string | null;\n readonly embedText: string;\n\n constructor(docId: DocumentId, toolId: string | null, embedText: string) {\n super();\n this.docId = docId;\n this.toolId = toolId;\n this.embedText = embedText;\n }\n\n eq(other: EmbedWidget) {\n return other.docId === this.docId && other.toolId === this.toolId;\n }\n\n toDOM(view: EditorView) {\n const container = document.createElement(\"div\");\n container.className = \"cm-embed\";\n\n const patchworkView = document.createElement(\"patchwork-view\");\n // No heads in the url: the embed follows whatever version the host\n // resolves \u2014 the active checkpoint when one is checked out, live otherwise.\n patchworkView.setAttribute(\"doc-url\", `automerge:${this.docId}`);\n patchworkView.setAttribute(\"tool-id\", \"embed\");\n if (this.toolId) patchworkView.setAttribute(\"embed-tool-id\", this.toolId);\n // Explicit inline height: without it the element collapses to 0px (the\n // stylesheet rule isn't reliably applied here).\n patchworkView.style.display = \"block\";\n patchworkView.style.height = \"500px\";\n patchworkView.style.width = \"100%\";\n\n // Persist tool picks into the marker text. Stop propagation so nested\n // embeds don't also change the outer embed's tool.\n container.addEventListener(\"patchwork:embed-tool-changed\", (e) => {\n e.stopPropagation();\n const toolId = (e as CustomEvent<{ toolId?: string }>).detail?.toolId;\n if (toolId) this.setTool(view, container, toolId);\n });\n\n container.appendChild(patchworkView);\n return container;\n }\n\n private setTool(\n view: EditorView,\n container: HTMLElement,\n toolId: string\n ): void {\n const from = view.posAtDOM(container);\n const to = from + this.embedText.length;\n // Only rewrite if the marker is still exactly where this widget maps to.\n if (view.state.doc.sliceString(from, to) !== this.embedText) return;\n view.dispatch({\n changes: { from, to, insert: embedSyntax({ docId: this.docId, toolId }) },\n });\n }\n\n ignoreEvent() {\n // Atomic embed: the editor ignores all events; the frame handles them.\n return true;\n }\n}\n\n// Marker syntax: [patchwork:docId] or [patchwork:docId/toolId] (ids can't\n// contain `/` or `]`). We scan plain text instead of the markdown syntax tree\n// on purpose: `@codemirror/language` isn't a shared singleton across\n// patchwork's separately-bundled extensions, so `syntaxTree(state)` here would\n// read a different `Language` facet and always come back empty.\nconst EMBED_PATTERN = /\\[patchwork:([^/\\]]+)(?:\\/([^\\]]+))?\\]/g;\n\nfunction getEmbedLinks(view: EditorView) {\n const widgets: Range<Decoration>[] = [];\n const { state } = view;\n\n // Visible ranges are line-aligned and markers never span lines, so a marker\n // is always fully inside or fully outside a range.\n for (const { from, to } of view.visibleRanges) {\n const text = state.doc.sliceString(from, to);\n EMBED_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = EMBED_PATTERN.exec(text)) !== null) {\n const matchFrom = from + m.index;\n const matchTo = matchFrom + m[0].length;\n const [matchText, docId, toolId] = m;\n\n if (!isValidDocumentId(docId)) continue;\n\n const embed = Decoration.replace({\n widget: new EmbedWidget(docId as DocumentId, toolId ?? null, matchText),\n });\n widgets.push(embed.range(matchFrom, matchTo));\n }\n }\n\n // `true` lets CodeMirror sort the ranges defensively (matches are already in\n // document order, but this is cheap insurance).\n return Decoration.set(widgets, true);\n}\n\n// MIME types we accept document drags from. Mirrors the sideboard's convention.\nconst PATCHWORK_DND = \"text/x-patchwork-dnd\";\nconst PATCHWORK_URLS = \"text/x-patchwork-urls\";\n\ntype DocRef = { docId: DocumentId; toolId: string | null };\n\n/** Turn an automerge url or a patchwork web link into a DocumentId, or null. */\nfunction urlToDocId(raw: string): DocumentId | null {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n // Plain automerge url (optionally carrying heads/query/subpath).\n const am = trimmed.match(/automerge:([a-zA-Z0-9]+)/);\n if (am && isValidDocumentId(am[1])) return am[1] as DocumentId;\n // Patchwork web link: #doc=<documentId> (also &doc= / ?doc=).\n const web = trimmed.match(/[#&?]doc=([a-zA-Z0-9]+)/);\n if (web && isValidDocumentId(web[1])) return web[1] as DocumentId;\n return null;\n}\n\n/**\n * Read dragged documents out of a drop event, in order of format preference.\n * Only an *explicit* `toolId` on a structured item pins the tool; otherwise we\n * embed tool-less and let the view fall back to the datatype's default tool.\n */\nfunction extractDocRefs(dt: DataTransfer): DocRef[] {\n const refs: DocRef[] = [];\n const seen = new Set<string>();\n const push = (docId: DocumentId | null, toolId: string | null) => {\n if (!docId || seen.has(docId)) return;\n seen.add(docId);\n refs.push({ docId, toolId });\n };\n\n const dnd = dt.getData(PATCHWORK_DND);\n if (dnd) {\n try {\n const parsed = JSON.parse(dnd) as {\n items?: Array<{ url?: string; toolId?: string }>;\n };\n for (const item of parsed?.items ?? []) {\n if (item?.url) push(urlToDocId(item.url), item.toolId ?? null);\n }\n } catch {\n // fall through to the other formats\n }\n }\n if (refs.length > 0) return refs;\n\n const urls = dt.getData(PATCHWORK_URLS);\n if (urls) {\n try {\n const parsed: unknown = JSON.parse(urls);\n if (Array.isArray(parsed)) {\n for (const u of parsed) push(urlToDocId(String(u)), null);\n }\n } catch {\n // fall through\n }\n }\n if (refs.length > 0) return refs;\n\n const text = dt.getData(\"text/uri-list\") || dt.getData(\"text/plain\");\n if (text) {\n for (const line of text.split(/\\r?\\n/)) {\n if (line.startsWith(\"#\")) continue; // uri-list comments\n push(urlToDocId(line), null);\n }\n }\n return refs;\n}\n\nfunction embedSyntax({ docId, toolId }: DocRef): string {\n return toolId ? `[patchwork:${docId}/${toolId}]` : `[patchwork:${docId}]`;\n}\n\n/**\n * Import each OS file (dropped from the desktop or pasted) as a Patchwork\n * `file` document, returning tool-less refs to embed. Uses the realm-local\n * `window.repo` (the documented global) \u2014 fine for creating brand-new docs,\n * which aren't subject to draft remapping.\n */\nasync function importFileRefs(files: Iterable<File>): Promise<DocRef[]> {\n const repo = (window as unknown as { repo?: any }).repo;\n if (!repo) {\n console.warn(\"[codemirror-embed] window.repo unavailable; ignoring files\");\n return [];\n }\n const refs: DocRef[] = [];\n for (const file of files) {\n try {\n const mimeType = file.type || \"application/octet-stream\";\n const isText =\n mimeType.startsWith(\"text/\") || mimeType === \"application/json\";\n const content = isText\n ? await file.text()\n : new Uint8Array(await file.arrayBuffer());\n const parts = file.name.split(\".\");\n const extension = parts.length > 1 ? parts.pop()! : \"\";\n const handle = repo.create();\n handle.change((d: any) => {\n d[\"@patchwork\"] = { type: \"file\" };\n d.content = content;\n d.mimeType = mimeType;\n d.extension = extension;\n d.name = file.name;\n });\n const { documentId } = parseAutomergeUrl(handle.url as AutomergeUrl);\n if (isValidDocumentId(documentId)) {\n refs.push({ docId: documentId as DocumentId, toolId: null });\n }\n } catch (err) {\n console.warn(\n \"[codemirror-embed] failed to import file\",\n file.name,\n err\n );\n }\n }\n return refs;\n}\n\n/** Insert embeds over `from..to` (a drop point, or a pasted-over selection). */\nfunction insertRefs(\n view: EditorView,\n from: number,\n refs: DocRef[],\n to = from\n): void {\n if (refs.length === 0) return;\n // Files import asynchronously, so the doc may have shrunk in the meantime.\n const len = view.state.doc.length;\n from = Math.min(from, len);\n to = Math.min(to, len);\n let text = refs.map(embedSyntax).join(\"\\n\\n\");\n // On a non-empty line, add just enough breaks to put the embed on its own line.\n const { doc } = view.state;\n const start = doc.lineAt(from);\n const end = doc.lineAt(to);\n if (/\\S/.test(start.text) && from > start.from) text = \"\\n\" + text;\n if (/\\S/.test(end.text) && to < end.to) text = text + \"\\n\";\n view.dispatch({\n changes: { from, to, insert: text },\n selection: { anchor: from + text.length },\n });\n}\n\n/**\n * Drop handler that accepts:\n * - documents dragged from the sidebar / canvases / other tools\n * (`text/x-patchwork-dnd`, `text/x-patchwork-urls`, `text/uri-list`, and\n * `text/plain` patchwork links), and\n * - files dragged in from the operating system (imported as `file` docs).\n * Inserts `[patchwork:docId]` (or `[patchwork:docId/toolId]`) at the drop point.\n */\nfunction embedDropHandlers() {\n // Only claim the *dragover* for unambiguous patchwork/OS drags \u2014 plain\n // text/uri-list can be an ordinary in-editor text drag, which we must not\n // swallow. (`Files` covers OS drags, whose `dt.files` is empty until drop.)\n const wantsDragover = (dt: DataTransfer | null): boolean =>\n !!dt &&\n (dt.types.includes(\"Files\") ||\n dt.types.includes(PATCHWORK_DND) ||\n dt.types.includes(PATCHWORK_URLS));\n\n return EditorView.domEventHandlers({\n dragover(event) {\n const dt = event.dataTransfer;\n if (!wantsDragover(dt)) return false;\n event.preventDefault();\n // Doc drags insert a *reference* to the same automerge doc, so show the\n // link cursor; OS file drags genuinely copy content into new docs.\n if (dt) dt.dropEffect = dt.types.includes(\"Files\") ? \"copy\" : \"link\";\n return true;\n },\n drop(event, view) {\n const dt = event.dataTransfer;\n if (!dt) return false;\n const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n if (pos == null) return false;\n\n // OS files import asynchronously; insert once the docs exist.\n if (dt.files && dt.files.length > 0) {\n event.preventDefault();\n void importFileRefs(Array.from(dt.files)).then((refs) =>\n insertRefs(view, pos, refs)\n );\n return true;\n }\n\n // Otherwise only handle the drop if it actually resolves to patchwork\n // docs (dnd/urls always do; uri-list/plain only for patchwork links).\n // If not, let CodeMirror handle it as a normal text drop.\n const refs = extractDocRefs(dt);\n if (refs.length === 0) return false;\n event.preventDefault();\n insertRefs(view, pos, refs);\n return true;\n },\n paste(event, view) {\n // Image pastes (screenshots, \"Copy Image\") become embedded `file` docs.\n // A paste that also carries text is left to CodeMirror: rich text from\n // office apps attaches a picture of itself, and a Finder copy carries\n // the file's icon alongside its name.\n const dt = event.clipboardData;\n if (!dt || dt.getData(\"text/plain\")) return false;\n const images = Array.from(dt.files ?? []).filter((f) =>\n f.type.startsWith(\"image/\")\n );\n if (images.length === 0) return false;\n event.preventDefault();\n const { from, to } = view.state.selection.main;\n void importFileRefs(images).then((refs) =>\n insertRefs(view, from, refs, to)\n );\n return true;\n },\n });\n}\n\nconst embedPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getEmbedLinks(view);\n }\n\n update(update: ViewUpdate) {\n // Viewport too, so newly-visible markers get decorated.\n if (update.docChanged || update.viewportChanged) {\n this.decorations = getEmbedLinks(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n // Atomic: the cursor skips embeds and delete removes the whole marker.\n provide: (plugin) =>\n EditorView.atomicRanges.of(\n (view) => view.plugin(plugin)?.decorations ?? Decoration.none\n ),\n }\n);\n\nexport function markdownEmbed() {\n // `dropCursor` observes events, so it coexists with our dragover handler.\n return [embedPlugin, embedTheme, embedDropHandlers(), dropCursor()];\n}\n", "import { EditorView } from \"@codemirror/view\";\n\n// Outer container only; all embed chrome lives in the shared \"embed\" tool.\nexport const embedTheme = EditorView.baseTheme({\n \".cm-embed\": {\n display: \"block\",\n border: \"var(--studio-border-width, 1px) var(--studio-border-style, solid)\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n },\n \"&light .cm-embed\": {\n borderColor: \"#ddd\",\n },\n \"&dark .cm-embed\": {\n borderColor: \"#333\",\n },\n \".cm-embed > patchwork-view\": {\n display: \"block\",\n height: \"500px\",\n width: \"100%\",\n },\n});\n"],
5
+ "mappings": ";AAAA;AAAA,EACE,cAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OAEK;AAEP;AAAA,EAGE;AAAA,EACA;AAAA,OACK;;;ACfP,SAAS,kBAAkB;AAGpB,IAAM,aAAa,WAAW,UAAU;AAAA,EAC7C,aAAa;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa;AAAA,EACf;AAAA,EACA,mBAAmB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF,CAAC;;;ADID,IAAM,cAAN,cAA0B,WAAW;AAAA,EAC1B;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EAET,YAAY,OAAmB,QAAuB,WAAmB;AACvE,UAAM;AACN,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,GAAG,OAAoB;AACrB,WAAO,MAAM,UAAU,KAAK,SAAS,MAAM,WAAW,KAAK;AAAA,EAC7D;AAAA,EAEA,MAAM,MAAkB;AACtB,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,YAAY;AAEtB,UAAM,gBAAgB,SAAS,cAAc,gBAAgB;AAG7D,kBAAc,aAAa,WAAW,aAAa,KAAK,KAAK,EAAE;AAC/D,kBAAc,aAAa,WAAW,OAAO;AAC7C,QAAI,KAAK,OAAQ,eAAc,aAAa,iBAAiB,KAAK,MAAM;AAGxE,kBAAc,MAAM,UAAU;AAC9B,kBAAc,MAAM,SAAS;AAC7B,kBAAc,MAAM,QAAQ;AAI5B,cAAU,iBAAiB,gCAAgC,CAAC,MAAM;AAChE,QAAE,gBAAgB;AAClB,YAAM,SAAU,EAAuC,QAAQ;AAC/D,UAAI,OAAQ,MAAK,QAAQ,MAAM,WAAW,MAAM;AAAA,IAClD,CAAC;AAED,cAAU,YAAY,aAAa;AACnC,WAAO;AAAA,EACT;AAAA,EAEQ,QACN,MACA,WACA,QACM;AACN,UAAM,OAAO,KAAK,SAAS,SAAS;AACpC,UAAM,KAAK,OAAO,KAAK,UAAU;AAEjC,QAAI,KAAK,MAAM,IAAI,YAAY,MAAM,EAAE,MAAM,KAAK,UAAW;AAC7D,SAAK,SAAS;AAAA,MACZ,SAAS,EAAE,MAAM,IAAI,QAAQ,YAAY,EAAE,OAAO,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AAEZ,WAAO;AAAA,EACT;AACF;AAOA,IAAM,gBAAgB;AAEtB,SAAS,cAAc,MAAkB;AACvC,QAAM,UAA+B,CAAC;AACtC,QAAM,EAAE,MAAM,IAAI;AAIlB,aAAW,EAAE,MAAM,GAAG,KAAK,KAAK,eAAe;AAC7C,UAAM,OAAO,MAAM,IAAI,YAAY,MAAM,EAAE;AAC3C,kBAAc,YAAY;AAC1B,QAAI;AACJ,YAAQ,IAAI,cAAc,KAAK,IAAI,OAAO,MAAM;AAC9C,YAAM,YAAY,OAAO,EAAE;AAC3B,YAAM,UAAU,YAAY,EAAE,CAAC,EAAE;AACjC,YAAM,CAAC,WAAW,OAAO,MAAM,IAAI;AAEnC,UAAI,CAAC,kBAAkB,KAAK,EAAG;AAE/B,YAAM,QAAQ,WAAW,QAAQ;AAAA,QAC/B,QAAQ,IAAI,YAAY,OAAqB,UAAU,MAAM,SAAS;AAAA,MACxE,CAAC;AACD,cAAQ,KAAK,MAAM,MAAM,WAAW,OAAO,CAAC;AAAA,IAC9C;AAAA,EACF;AAIA,SAAO,WAAW,IAAI,SAAS,IAAI;AACrC;AAGA,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AAKvB,SAAS,WAAW,KAAgC;AAClD,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,KAAK,QAAQ,MAAM,0BAA0B;AACnD,MAAI,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAG,QAAO,GAAG,CAAC;AAE/C,QAAM,MAAM,QAAQ,MAAM,yBAAyB;AACnD,MAAI,OAAO,kBAAkB,IAAI,CAAC,CAAC,EAAG,QAAO,IAAI,CAAC;AAClD,SAAO;AACT;AAOA,SAAS,eAAe,IAA4B;AAClD,QAAM,OAAiB,CAAC;AACxB,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,OAAO,CAAC,OAA0B,WAA0B;AAChE,QAAI,CAAC,SAAS,KAAK,IAAI,KAAK,EAAG;AAC/B,SAAK,IAAI,KAAK;AACd,SAAK,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,EAC7B;AAEA,QAAM,MAAM,GAAG,QAAQ,aAAa;AACpC,MAAI,KAAK;AACP,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG;AAG7B,iBAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AACtC,YAAI,MAAM,IAAK,MAAK,WAAW,KAAK,GAAG,GAAG,KAAK,UAAU,IAAI;AAAA,MAC/D;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,OAAO,GAAG,QAAQ,cAAc;AACtC,MAAI,MAAM;AACR,QAAI;AACF,YAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,mBAAW,KAAK,OAAQ,MAAK,WAAW,OAAO,CAAC,CAAC,GAAG,IAAI;AAAA,MAC1D;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,OAAO,GAAG,QAAQ,eAAe,KAAK,GAAG,QAAQ,YAAY;AACnE,MAAI,MAAM;AACR,eAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AACtC,UAAI,KAAK,WAAW,GAAG,EAAG;AAC1B,WAAK,WAAW,IAAI,GAAG,IAAI;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,EAAE,OAAO,OAAO,GAAmB;AACtD,SAAO,SAAS,cAAc,KAAK,IAAI,MAAM,MAAM,cAAc,KAAK;AACxE;AAQA,eAAe,eAAe,OAA0C;AACtE,QAAM,OAAQ,OAAqC;AACnD,MAAI,CAAC,MAAM;AACT,YAAQ,KAAK,4DAA4D;AACzE,WAAO,CAAC;AAAA,EACV;AACA,QAAM,OAAiB,CAAC;AACxB,aAAW,QAAQ,OAAO;AACxB,QAAI;AACF,YAAM,WAAW,KAAK,QAAQ;AAC9B,YAAM,SACJ,SAAS,WAAW,OAAO,KAAK,aAAa;AAC/C,YAAM,UAAU,SACZ,MAAM,KAAK,KAAK,IAChB,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AAC3C,YAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AACjC,YAAM,YAAY,MAAM,SAAS,IAAI,MAAM,IAAI,IAAK;AACpD,YAAM,SAAS,KAAK,OAAO;AAC3B,aAAO,OAAO,CAAC,MAAW;AACxB,UAAE,YAAY,IAAI,EAAE,MAAM,OAAO;AACjC,UAAE,UAAU;AACZ,UAAE,WAAW;AACb,UAAE,YAAY;AACd,UAAE,OAAO,KAAK;AAAA,MAChB,CAAC;AACD,YAAM,EAAE,WAAW,IAAI,kBAAkB,OAAO,GAAmB;AACnE,UAAI,kBAAkB,UAAU,GAAG;AACjC,aAAK,KAAK,EAAE,OAAO,YAA0B,QAAQ,KAAK,CAAC;AAAA,MAC7D;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ;AAAA,QACN;AAAA,QACA,KAAK;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,WACP,MACA,MACA,MACA,KAAK,MACC;AACN,MAAI,KAAK,WAAW,EAAG;AAEvB,QAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,SAAO,KAAK,IAAI,MAAM,GAAG;AACzB,OAAK,KAAK,IAAI,IAAI,GAAG;AACrB,MAAI,OAAO,KAAK,IAAI,WAAW,EAAE,KAAK,MAAM;AAE5C,QAAM,EAAE,IAAI,IAAI,KAAK;AACrB,QAAM,QAAQ,IAAI,OAAO,IAAI;AAC7B,QAAM,MAAM,IAAI,OAAO,EAAE;AACzB,MAAI,KAAK,KAAK,MAAM,IAAI,KAAK,OAAO,MAAM,KAAM,QAAO,OAAO;AAC9D,MAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,GAAI,QAAO,OAAO;AACtD,OAAK,SAAS;AAAA,IACZ,SAAS,EAAE,MAAM,IAAI,QAAQ,KAAK;AAAA,IAClC,WAAW,EAAE,QAAQ,OAAO,KAAK,OAAO;AAAA,EAC1C,CAAC;AACH;AAUA,SAAS,oBAAoB;AAI3B,QAAM,gBAAgB,CAAC,OACrB,CAAC,CAAC,OACD,GAAG,MAAM,SAAS,OAAO,KACxB,GAAG,MAAM,SAAS,aAAa,KAC/B,GAAG,MAAM,SAAS,cAAc;AAEpC,SAAOC,YAAW,iBAAiB;AAAA,IACjC,SAAS,OAAO;AACd,YAAM,KAAK,MAAM;AACjB,UAAI,CAAC,cAAc,EAAE,EAAG,QAAO;AAC/B,YAAM,eAAe;AAGrB,UAAI,GAAI,IAAG,aAAa,GAAG,MAAM,SAAS,OAAO,IAAI,SAAS;AAC9D,aAAO;AAAA,IACT;AAAA,IACA,KAAK,OAAO,MAAM;AAChB,YAAM,KAAK,MAAM;AACjB,UAAI,CAAC,GAAI,QAAO;AAChB,YAAM,MAAM,KAAK,YAAY,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AACnE,UAAI,OAAO,KAAM,QAAO;AAGxB,UAAI,GAAG,SAAS,GAAG,MAAM,SAAS,GAAG;AACnC,cAAM,eAAe;AACrB,aAAK,eAAe,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE;AAAA,UAAK,CAACC,UAC9C,WAAW,MAAM,KAAKA,KAAI;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAKA,YAAM,OAAO,eAAe,EAAE;AAC9B,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,YAAM,eAAe;AACrB,iBAAW,MAAM,KAAK,IAAI;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,MAAM;AAKjB,YAAM,KAAK,MAAM;AACjB,UAAI,CAAC,MAAM,GAAG,QAAQ,YAAY,EAAG,QAAO;AAC5C,YAAM,SAAS,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE;AAAA,QAAO,CAAC,MAChD,EAAE,KAAK,WAAW,QAAQ;AAAA,MAC5B;AACA,UAAI,OAAO,WAAW,EAAG,QAAO;AAChC,YAAM,eAAe;AACrB,YAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,UAAU;AAC1C,WAAK,eAAe,MAAM,EAAE;AAAA,QAAK,CAAC,SAChC,WAAW,MAAM,MAAM,MAAM,EAAE;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,IAAM,cAAc,WAAW;AAAA,EAC7B,MAAM;AAAA,IACJ;AAAA,IAEA,YAAY,MAAkB;AAC5B,WAAK,cAAc,cAAc,IAAI;AAAA,IACvC;AAAA,IAEA,OAAO,QAAoB;AAEzB,UAAI,OAAO,cAAc,OAAO,iBAAiB;AAC/C,aAAK,cAAc,cAAc,OAAO,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa,CAAC,MAAM,EAAE;AAAA;AAAA,IAEtB,SAAS,CAAC,WACRD,YAAW,aAAa;AAAA,MACtB,CAAC,SAAS,KAAK,OAAO,MAAM,GAAG,eAAe,WAAW;AAAA,IAC3D;AAAA,EACJ;AACF;AAEO,SAAS,gBAAgB;AAE9B,SAAO,CAAC,aAAa,YAAY,kBAAkB,GAAG,WAAW,CAAC;AACpE;",
6
6
  "names": ["EditorView", "EditorView", "refs"]
7
7
  }
@@ -1,2 +1,2 @@
1
- @layer package{:root,:host,[theme]{--document-list-fill: var( --studio-chrome, light-dark( color-mix(in oklch, var(--studio-secondary-fill, var(--studio-secondary, #33ccf8)), var(--studio-fill, white) 80%), black ) );--document-list-fill-offset: color-mix( in oklab, var(--document-list-fill), oklch(1 0 0 / 1) 10% );--document-list-line: var(--studio-line, black);--document-list-line-offset-20: var(--studio-line-offset-20, #333);--document-list-widget-fill: var(--studio-fill, white);--document-list-widget-line: var(--document-list-line);--document-list-padding-x: .5rem;--document-list-radius: .275rem;--placeholder-line: var(--studio-line-offset-50, #808e80);--document-list-search-line: var(--studio-line, #000);--document-list-primary: var(--studio-primary-fill, var(--studio-primary, #35f7ca));--document-list-primary-line: var(--studio-primary-line, var(--studio-line, black));--document-list-selection-fill: var(--document-list-primary);--document-list-selection-line: var(--document-list-primary-line);--document-list-create-new-fill: var(--studio-fill, white);--document-list-create-new-line: color-mix( in oklch, var(--document-list-primary), var(--studio-line, black) 30% );--document-list-create-new-border-line: color-mix( in oklch, var(--document-list-primary), var(--document-list-create-new-fill) 50% );--document-list-create-new-shadow-color: color-mix( in oklch, var(--document-list-fill), var(--document-list-line) 10% );--document-list-family: var(--studio-family-sans, system-ui, sans-serif);--document-list-family-code: var(--studio-family-code, ui-monospace, monospace);--document-list-muted: var(--studio-line-offset-40, #666);--document-list-border: var(--studio-fill-offset-10, #e5e5e5);--document-list-border-strong: var(--studio-fill-offset-20, #ccc);--document-list-divider: var(--studio-chrome-offset-20, #d4d4d4);--document-list-added: var(--studio-added, #35f7ca);--document-list-danger: var(--studio-danger-text, var(--studio-danger, #ff6a90));--document-list-toggle-hover: color-mix(in oklch, var(--studio-line, black), transparent 93%);--account-bar-fill: var(--studio-chrome-offset-10);--account-bar-line: var(--studio-chrome-line, var(--studio-line, black))}}button{background:none;border:none;font:inherit;color:inherit;cursor:var(--studio-cursor-pointer, pointer);padding:0}.document-list,.document-list *{box-sizing:border-box}.document-list{background:var(--document-list-fill);display:flex;height:100%;flex-direction:column;gap:.75rem;font-family:var(--document-list-family);padding-inline:var(--document-list-padding-x);padding-top:var(--document-list-top-margin, env(safe-area-inset-top, 0px));padding-bottom:env(safe-area-inset-bottom);--depth: 0;.document-list-close-button{display:flex;align-items:center;align-self:flex-start;padding:.25rem;margin-top:12px;margin-left:-2px;background:transparent;border:none;cursor:var(--studio-cursor-pointer, pointer);opacity:.5;color:var(--document-list-line)}.document-list-close-button:hover{opacity:1}}.create-new-button{display:flex;padding-inline:.75rem;padding-block:.375rem;border:none;border-radius:var(--document-list-radius);background:var(--document-list-create-new-fill);color:var(--document-list-line);font-weight:400;align-items:center;justify-content:start;white-space:nowrap;font-size:.9rem;text-align:left;gap:1ex;position:relative;flex-shrink:0}.create-new-button__icon{stroke:var(--document-list-line-offset-20)}.create-new-button--square{width:2rem;height:2rem;padding:0;justify-content:center;cursor:var(--studio-cursor-grab, grab);color:color-mix(in oklch,var(--document-list-line),transparent 35%);transition:color max(1ms,calc(.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,box-shadow max(1ms,calc(.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease}.create-new-button--square:hover{color:var(--document-list-line);box-shadow:var(--studio-shadow, 0 1px 3px rgb(0 0 0 / .1), 0 1px 2px rgb(0 0 0 / .06))}.create-new-button--square:active{cursor:var(--studio-cursor-grabbing, grabbing)}.create-new-button-anchor{position:relative;display:flex;flex-shrink:0}.document-list__toolbar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:.375rem;padding:.375rem;background:var(--document-list-widget-fill);border-bottom:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider)}.document-list__toolbar .document-list__filter-container{flex:1;min-width:0}.icon{height:1em}.document-list__filter-container{position:relative;font-size:.875rem;border-radius:var(--document-list-radius);.search-icon{height:1em;top:.4lh;left:2px;position:absolute;z-index:1;stroke:var(--placeholder-line)}&:focus-within{.search-icon{stroke:var(--document-list-line)}}}.document-list__filter{width:100%;background:var(--document-list-widget-fill);color:var(--document-list-widget-line);padding-left:2em;padding-right:.75rem;padding-top:.375rem;padding-bottom:.375rem;border:none;border-radius:var(--document-list-radius);&::placeholder{color:var(--placeholder-line)}&:focus-visible{outline-color:var(--sidebar-widget-line);outline-offset:var(--studio-focus-ring-offset, 1px);box-shadow:0 0 0 4px #fff;border-radius:var(--document-list-radius)}}.document-list__doclist{--doclist-padding-x: .75rem;display:flex;flex-direction:column;border-radius:var(--document-list-radius);box-shadow:0 1px 2px #0014320d;width:100%;max-height:100%;overflow:scroll;transition:background-color max(1ms,calc(.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,box-shadow max(1ms,calc(.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;&::-webkit-scrollbar{display:none}}.document-list__doclist[data-drop-state=end]:after{content:"";flex:none;height:2px;margin-inline:var(--doclist-padding-x);background:var(--document-list-line)}.document-list__error{position:sticky;bottom:.5rem;margin:.5rem;padding:.5rem .75rem;border-radius:var(--document-list-radius);background:var(--document-list-widget-fill);color:var(--document-list-danger);box-shadow:0 0 0 1px currentColor inset,0 2px 8px #0000001a;font-size:.875rem}.document-list-item{display:flex;gap:.25ch;padding-inline:var(--doclist-padding-x);padding-block:.5rem;font-weight:400;color:var(--sidebar-widget-line);cursor:var(--studio-cursor-default, default);position:relative;&:focus-visible{outline-color:#000;outline-offset:var(--studio-focus-ring-offset, -2px);box-shadow:0 0 0 4px var(--document-list-widget-fill);border-radius:var(--document-list-radius)}&:active{outline:0;box-shadow:0}&[aria-selected=true]{background:var(--document-list-selection-fill);color:var(--document-list-selection-line);.document-list-folder__toggle path{stroke:var(--document-list-selection-line)}.document-list__doclist>&:first-child{border-top-left-radius:var(--document-list-radius);border-top-right-radius:var(--document-list-radius)}.document-list__doclist>&:last-child{border-bottom-left-radius:var(--document-list-radius);border-bottom-right-radius:var(--document-list-radius)}}&[aria-checked=true]{outline:2px dashed color-mix(in oklch,var(--document-list-line),transparent 50%);outline-offset:-4px}&[data-dnd-dragging]{opacity:.4}&[data-dnd-springload]{animation:doclist-springload max(1ms,calc(.75s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out .75s both}&[data-dnd-droplist-state]:before{content:"";position:absolute;left:0;margin-left:calc(var(--depth) * 1.75rem);right:0;height:2px;background:var(--document-list-line)}&[data-dnd-droplist-state=above]:before{top:-1px}&[data-dnd-droplist-state=below]:before{bottom:-1px}&[data-dnd-landed]{animation:doclist-landed max(1ms,calc(.6s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out both}}@keyframes doclist-landed{0%{background:transparent}30%{background:color-mix(in oklch,var(--document-list-primary),transparent 30%)}to{background:transparent}}@keyframes doclist-landed-still{0%{background:color-mix(in oklch,var(--document-list-primary),transparent 40%)}to{background:transparent}}@media (prefers-reduced-motion: reduce){.document-list-item[data-dnd-landed]{animation:doclist-landed-still max(1ms,calc(.6s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) linear both}}@keyframes doclist-springload{0%{background:transparent}to{background:color-mix(in oklch,var(--document-list-primary),transparent 40%)}}.document-list-folder[data-drop-state=inside]{outline:2px solid var(--document-list-primary);outline-offset:-2px;border-radius:var(--document-list-radius);background:color-mix(in oklch,var(--document-list-primary),transparent 50%);>.document-list-item:before{content:"";position:absolute;left:0;right:0;height:2px;background:var(--document-list-line);bottom:0}[data-dnd-droplist-state]:before{display:none}}.document-list__loading{display:flex;flex-direction:column}.document-list-item--loading{pointer-events:none;padding-left:calc(1.8rem * var(--depth) + var(--doclist-padding-x))}.document-list__loading .document-list-item__skeleton{flex:0 0 auto}.document-list-item__skeleton{flex:1;min-width:0;max-width:12rem;height:.75em;border-radius:4px;background:linear-gradient(90deg,var(--placeholder-line) 25%,color-mix(in oklch,var(--placeholder-line),transparent 65%) 50%,var(--placeholder-line) 75%);background-size:200% 100%;opacity:.35;animation:doclist-skeleton-shimmer 1.2s ease-in-out infinite}@keyframes doclist-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.document-list-item__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;flex:1;min-width:0;&:is(input){padding:4px;margin:-4px}}.document-list-folder__toggle{display:inline-flex;align-items:center;cursor:var(--studio-cursor-pointer, pointer);margin-left:-.75ch;padding-inline:.25ch;&:hover{background:var(--document-list-toggle-hover)}& svg{width:14px;height:14px}& path{stroke:var(--document-list-line-offset-20)}}.document-list-folder__contents--hidden{display:none}.document-list-folder__circular-ref{padding:.5rem;padding-left:calc(2.2rem * var(--depth));color:var(--document-list-muted);font-style:italic;font-size:.9em}.document-list__item{content-visibility:auto;contain-intrinsic-size:auto 2.25rem}.document-list__item--invisible{display:none}.document-list__item--visible,.document-list__item--invisible:has(.document-list__item--visible){display:block}.document-list-folder__contents .document-list-item{padding-left:calc(1.8rem * var(--depth))}.document-list-widget{width:100%;background:var(--document-list-widget-fill);color:var(--document-list-widget-line)}.document-list-widget:empty{display:none}.document-list-placeholder{font-style:italic;color:var(--placeholder-line)}.popmenu__content,.popmenu__sub-content,.popmenu__content *,.popmenu__sub-content *{box-sizing:border-box}.popmenu__trigger,.popmenu__sub-trigger{cursor:var(--studio-cursor-default, default);user-select:none;width:100%;text-align:left}.popmenu__sub-content,.popmenu__content{z-index:2;min-width:220px;max-height:min(400px,50vh);overflow-y:auto;padding:4px;background-color:var(--document-list-widget-fill);font-size:.8rem;border-radius:6px;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;outline:none}.popmenu__content{transition:opacity max(1ms,calc(.15s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(.23, 1, .32, 1)),scale max(1ms,calc(.15s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(.23, 1, .32, 1))}@starting-style{.popmenu__content{opacity:0;scale:.97}}.popmenu__item,.popmenu__checkbox-item,.popmenu__radio-item,.popmenu__sub-trigger{font-size:.8rem;line-height:1;color:var(--document-list-widget-line);border-radius:4px;display:flex;align-items:center;height:32px;padding-inline:12px;padding-block:6px;position:relative;user-select:none;outline:none;cursor:var(--studio-cursor-default, default)}.popmenu__sub-chevron{margin-inline-start:auto;margin-inline-end:-4px;width:14px;height:14px;flex:none;opacity:.6}.popmenu__sub-trigger[data-expanded]{background-color:var(--document-list-fill-offset);color:var(--document-list-line)}.popmenu__item[data-disabled],.popmenu__checkbox-item[data-disabled],.popmenu__radio-item[data-disabled],.popmenu__sub-trigger[data-disabled]{color:var(--document-list-muted);opacity:var(--studio-disabled-opacity, .5);pointer-events:none}.popmenu__item[data-highlighted],.popmenu__checkbox-item[data-highlighted],.popmenu__radio-item[data-highlighted],.popmenu__sub-trigger[data-highlighted],.popmenu__item--highlighted{outline:none;background-color:var(--document-list-selection-fill);color:var(--document-list-selection-line)}.create-new-menu__content{scrollbar-gutter:stable;scrollbar-color:var(--document-list-border-strong) var(--document-list-widget-fill);scrollbar-width:thin}.create-new-menu__content::-webkit-scrollbar{width:10px}.create-new-menu__content::-webkit-scrollbar-track{background:var(--document-list-widget-fill)}.create-new-menu__content::-webkit-scrollbar-thumb{background:var(--document-list-border-strong);border:2px solid var(--document-list-widget-fill);border-radius:999px}.create-new-menu__content::-webkit-scrollbar-thumb:hover{background:var(--document-list-muted)}.create-new-filter{padding:4px}.create-new-filter__input{width:100%;box-sizing:border-box;padding:6px 8px;font-size:.8rem;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border-strong);border-radius:4px;background:var(--document-list-widget-fill);color:var(--document-list-widget-line);outline:none}.create-new-filter__input:focus{border-color:var(--document-list-primary)}.create-new-filter__input::placeholder{color:var(--document-list-muted)}.sideboard{display:flex;flex-direction:column;height:100%;min-height:0}.sideboard>.document-list{flex:1;height:auto;min-height:0;padding-bottom:0}.account-bar{container-type:inline-size;display:flex;align-items:center;gap:1rem;min-height:4rem;background:var(--account-bar-fill);color:var(--account-bar-line);border-top:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);padding-block:.25rem;padding-bottom:calc(.25rem + env(safe-area-inset-bottom));padding-left:calc(env(safe-area-inset-left) + var(--document-list-padding-x));padding-right:calc(env(safe-area-inset-right) + var(--document-list-padding-x));justify-content:space-between}.account-bar__button{display:flex;align-items:center;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;padding-inline:.25rem;padding-block:.125rem;border-radius:3px;background:transparent;color:inherit;font:inherit;white-space:nowrap;cursor:var(--studio-cursor-pointer, pointer)}.account-bar__button:hover{border-color:var(--document-list-divider)}.account-bar__avatar patchwork-view{display:block;width:100%;height:100%}
1
+ @layer package{:root,:host,[theme]{--document-list-fill: var( --studio-chrome, light-dark( color-mix(in oklch, var(--studio-secondary-fill, var(--studio-secondary, #33ccf8)), var(--studio-fill, white) 80%), black ) );--document-list-fill-offset: color-mix( in oklab, var(--document-list-fill), oklch(1 0 0 / 1) 10% );--document-list-line: var(--studio-line, black);--document-list-line-offset-20: var(--studio-line-offset-20, #333);--document-list-widget-fill: var(--studio-fill, white);--document-list-widget-line: var(--document-list-line);--document-list-padding-x: .5rem;--document-list-radius: .275rem;--placeholder-line: var(--studio-line-offset-50, #808e80);--document-list-search-line: var(--studio-line, #000);--document-list-primary: var(--studio-primary-fill, var(--studio-primary, #35f7ca));--document-list-primary-line: var(--studio-primary-line, var(--studio-line, black));--document-list-selection-fill: var(--document-list-primary);--document-list-selection-line: var(--document-list-primary-line);--document-list-create-new-fill: var(--studio-fill, white);--document-list-create-new-line: color-mix( in oklch, var(--document-list-primary), var(--studio-line, black) 30% );--document-list-create-new-border-line: color-mix( in oklch, var(--document-list-primary), var(--document-list-create-new-fill) 50% );--document-list-create-new-shadow-color: color-mix( in oklch, var(--document-list-fill), var(--document-list-line) 10% );--document-list-family: var(--studio-family-sans, system-ui, sans-serif);--document-list-family-code: var(--studio-family-code, ui-monospace, monospace);--document-list-muted: var(--studio-line-offset-40, #666);--document-list-border: var(--studio-fill-offset-10, #e5e5e5);--document-list-border-strong: var(--studio-fill-offset-20, #ccc);--document-list-divider: var(--studio-chrome-offset-20, #d4d4d4);--document-list-added: var(--studio-added, #35f7ca);--document-list-danger: var(--studio-danger-text, var(--studio-danger, #ff6a90));--document-list-toggle-hover: color-mix(in oklch, var(--studio-line, black), transparent 93%);--account-bar-fill: var(--studio-chrome-offset-10);--account-bar-line: var(--studio-chrome-line, var(--studio-line, black))}}:where(.sideboard,.document-list,.account-bar,.popmenu__content,.popmenu__sub-content) button{background:none;border:none;font:inherit;color:inherit;cursor:var(--studio-cursor-pointer, pointer);padding:0}.document-list,.document-list *{box-sizing:border-box}.document-list{background:var(--document-list-fill);display:flex;height:100%;flex-direction:column;gap:.75rem;font-family:var(--document-list-family);padding-inline:var(--document-list-padding-x);padding-top:var(--document-list-top-margin, env(safe-area-inset-top, 0px));padding-bottom:env(safe-area-inset-bottom);--depth: 0;.document-list-close-button{display:flex;align-items:center;align-self:flex-start;padding:.25rem;margin-top:12px;margin-left:-2px;background:transparent;border:none;cursor:var(--studio-cursor-pointer, pointer);opacity:.5;color:var(--document-list-line)}.document-list-close-button:hover{opacity:1}}.create-new-button{display:flex;padding-inline:.75rem;padding-block:.375rem;border:none;border-radius:var(--document-list-radius);background:var(--document-list-create-new-fill);color:var(--document-list-line);font-weight:400;align-items:center;justify-content:start;white-space:nowrap;font-size:.9rem;text-align:left;gap:1ex;position:relative;flex-shrink:0}.create-new-button__icon{stroke:var(--document-list-line-offset-20)}.create-new-button--square{width:2rem;height:2rem;padding:0;justify-content:center;cursor:var(--studio-cursor-grab, grab);color:color-mix(in oklch,var(--document-list-line),transparent 35%);transition:color max(1ms,calc(.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,box-shadow max(1ms,calc(.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease}.create-new-button--square:hover{color:var(--document-list-line);box-shadow:var(--studio-shadow, 0 1px 3px rgb(0 0 0 / .1), 0 1px 2px rgb(0 0 0 / .06))}.create-new-button--square:active{cursor:var(--studio-cursor-grabbing, grabbing)}.create-new-button-anchor{position:relative;display:flex;flex-shrink:0}.document-list__toolbar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:.375rem;padding:.375rem;background:var(--document-list-widget-fill);border-bottom:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider)}.document-list__toolbar .document-list__filter-container{flex:1;min-width:0}:where(.sideboard,.document-list,.account-bar,.popmenu__content,.popmenu__sub-content) .icon{height:1em}.document-list__filter-container{position:relative;font-size:.875rem;border-radius:var(--document-list-radius);.search-icon{height:1em;top:.4lh;left:2px;position:absolute;z-index:1;stroke:var(--placeholder-line)}&:focus-within{.search-icon{stroke:var(--document-list-line)}}}.document-list__filter{width:100%;background:var(--document-list-widget-fill);color:var(--document-list-widget-line);padding-left:2em;padding-right:.75rem;padding-top:.375rem;padding-bottom:.375rem;border:none;border-radius:var(--document-list-radius);&::placeholder{color:var(--placeholder-line)}&:focus-visible{outline-color:var(--sidebar-widget-line);outline-offset:var(--studio-focus-ring-offset, 1px);box-shadow:0 0 0 4px #fff;border-radius:var(--document-list-radius)}}.document-list__doclist{--doclist-padding-x: .75rem;display:flex;flex-direction:column;border-radius:var(--document-list-radius);box-shadow:0 1px 2px #0014320d;width:100%;max-height:100%;overflow:scroll;transition:background-color max(1ms,calc(.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,box-shadow max(1ms,calc(.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;&::-webkit-scrollbar{display:none}}.document-list__doclist[data-drop-state=end]:after{content:"";flex:none;height:2px;margin-inline:var(--doclist-padding-x);background:var(--document-list-line)}.document-list__error{position:sticky;bottom:.5rem;margin:.5rem;padding:.5rem .75rem;border-radius:var(--document-list-radius);background:var(--document-list-widget-fill);color:var(--document-list-danger);box-shadow:0 0 0 1px currentColor inset,0 2px 8px #0000001a;font-size:.875rem}.document-list-item{display:flex;gap:.25ch;padding-inline:var(--doclist-padding-x);padding-block:.5rem;font-weight:400;color:var(--sidebar-widget-line);cursor:var(--studio-cursor-default, default);position:relative;&:focus-visible{outline-color:#000;outline-offset:var(--studio-focus-ring-offset, -2px);box-shadow:0 0 0 4px var(--document-list-widget-fill);border-radius:var(--document-list-radius)}&:active{outline:0;box-shadow:0}&[aria-selected=true]{background:var(--document-list-selection-fill);color:var(--document-list-selection-line);.document-list-folder__toggle path{stroke:var(--document-list-selection-line)}.document-list__doclist>&:first-child{border-top-left-radius:var(--document-list-radius);border-top-right-radius:var(--document-list-radius)}.document-list__doclist>&:last-child{border-bottom-left-radius:var(--document-list-radius);border-bottom-right-radius:var(--document-list-radius)}}&[aria-checked=true]{outline:2px dashed color-mix(in oklch,var(--document-list-line),transparent 50%);outline-offset:-4px}&[data-dnd-dragging]{opacity:.4}&[data-dnd-springload]{animation:doclist-springload max(1ms,calc(.75s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out .75s both}&[data-dnd-droplist-state]:before{content:"";position:absolute;left:0;margin-left:calc(var(--depth) * 1.75rem);right:0;height:2px;background:var(--document-list-line)}&[data-dnd-droplist-state=above]:before{top:-1px}&[data-dnd-droplist-state=below]:before{bottom:-1px}&[data-dnd-landed]{animation:doclist-landed max(1ms,calc(.6s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out both}}@keyframes doclist-landed{0%{background:transparent}30%{background:color-mix(in oklch,var(--document-list-primary),transparent 30%)}to{background:transparent}}@keyframes doclist-landed-still{0%{background:color-mix(in oklch,var(--document-list-primary),transparent 40%)}to{background:transparent}}@media (prefers-reduced-motion: reduce){.document-list-item[data-dnd-landed]{animation:doclist-landed-still max(1ms,calc(.6s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) linear both}}@keyframes doclist-springload{0%{background:transparent}to{background:color-mix(in oklch,var(--document-list-primary),transparent 40%)}}.document-list-folder[data-drop-state=inside]{outline:2px solid var(--document-list-primary);outline-offset:-2px;border-radius:var(--document-list-radius);background:color-mix(in oklch,var(--document-list-primary),transparent 50%);>.document-list-item:before{content:"";position:absolute;left:0;right:0;height:2px;background:var(--document-list-line);bottom:0}[data-dnd-droplist-state]:before{display:none}}.document-list__loading{display:flex;flex-direction:column}.document-list-item--loading{pointer-events:none;padding-left:calc(1.8rem * var(--depth) + var(--doclist-padding-x))}.document-list__loading .document-list-item__skeleton{flex:0 0 auto}.document-list-item__skeleton{flex:1;min-width:0;max-width:12rem;height:.75em;border-radius:4px;background:linear-gradient(90deg,var(--placeholder-line) 25%,color-mix(in oklch,var(--placeholder-line),transparent 65%) 50%,var(--placeholder-line) 75%);background-size:200% 100%;opacity:.35;animation:doclist-skeleton-shimmer 1.2s ease-in-out infinite}@keyframes doclist-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.document-list-item__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;flex:1;min-width:0;&:is(input){padding:4px;margin:-4px}}.document-list-folder__toggle{display:inline-flex;align-items:center;cursor:var(--studio-cursor-pointer, pointer);margin-left:-.75ch;padding-inline:.25ch;&:hover{background:var(--document-list-toggle-hover)}& svg{width:14px;height:14px}& path{stroke:var(--document-list-line-offset-20)}}.document-list-folder__contents--hidden{display:none}.document-list-folder__circular-ref{padding:.5rem;padding-left:calc(2.2rem * var(--depth));color:var(--document-list-muted);font-style:italic;font-size:.9em}.document-list__item{content-visibility:auto;contain-intrinsic-size:auto 2.25rem}.document-list__item--invisible{display:none}.document-list__item--visible,.document-list__item--invisible:has(.document-list__item--visible){display:block}.document-list-folder__contents .document-list-item{padding-left:calc(1.8rem * var(--depth))}.document-list-widget{width:100%;background:var(--document-list-widget-fill);color:var(--document-list-widget-line)}.document-list-widget:empty{display:none}.document-list-placeholder{font-style:italic;color:var(--placeholder-line)}.popmenu__content,.popmenu__sub-content,.popmenu__content *,.popmenu__sub-content *{box-sizing:border-box}.popmenu__trigger,.popmenu__sub-trigger{cursor:var(--studio-cursor-default, default);user-select:none;width:100%;text-align:left}.popmenu__sub-content,.popmenu__content{z-index:2;min-width:220px;max-height:min(400px,50vh);overflow-y:auto;padding:4px;background-color:var(--document-list-widget-fill);font-size:.8rem;border-radius:6px;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;outline:none}.popmenu__content{transition:opacity max(1ms,calc(.15s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(.23, 1, .32, 1)),scale max(1ms,calc(.15s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(.23, 1, .32, 1))}@starting-style{.popmenu__content{opacity:0;scale:.97}}.popmenu__item,.popmenu__checkbox-item,.popmenu__radio-item,.popmenu__sub-trigger{font-size:.8rem;line-height:1;color:var(--document-list-widget-line);border-radius:4px;display:flex;align-items:center;height:32px;padding-inline:12px;padding-block:6px;position:relative;user-select:none;outline:none;cursor:var(--studio-cursor-default, default)}.popmenu__sub-chevron{margin-inline-start:auto;margin-inline-end:-4px;width:14px;height:14px;flex:none;opacity:.6}.popmenu__sub-trigger[data-expanded]{background-color:var(--document-list-fill-offset);color:var(--document-list-line)}.popmenu__item[data-disabled],.popmenu__checkbox-item[data-disabled],.popmenu__radio-item[data-disabled],.popmenu__sub-trigger[data-disabled]{color:var(--document-list-muted);opacity:var(--studio-disabled-opacity, .5);pointer-events:none}.popmenu__item[data-highlighted],.popmenu__checkbox-item[data-highlighted],.popmenu__radio-item[data-highlighted],.popmenu__sub-trigger[data-highlighted],.popmenu__item--highlighted{outline:none;background-color:var(--document-list-selection-fill);color:var(--document-list-selection-line)}.create-new-menu__content{scrollbar-gutter:stable;scrollbar-color:var(--document-list-border-strong) var(--document-list-widget-fill);scrollbar-width:thin}.create-new-menu__content::-webkit-scrollbar{width:10px}.create-new-menu__content::-webkit-scrollbar-track{background:var(--document-list-widget-fill)}.create-new-menu__content::-webkit-scrollbar-thumb{background:var(--document-list-border-strong);border:2px solid var(--document-list-widget-fill);border-radius:999px}.create-new-menu__content::-webkit-scrollbar-thumb:hover{background:var(--document-list-muted)}.create-new-filter{padding:4px}.create-new-filter__input{width:100%;box-sizing:border-box;padding:6px 8px;font-size:.8rem;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border-strong);border-radius:4px;background:var(--document-list-widget-fill);color:var(--document-list-widget-line);outline:none}.create-new-filter__input:focus{border-color:var(--document-list-primary)}.create-new-filter__input::placeholder{color:var(--document-list-muted)}.sideboard{display:flex;flex-direction:column;height:100%;min-height:0}.sideboard>.document-list{flex:1;height:auto;min-height:0;padding-bottom:0}.account-bar{container-type:inline-size;display:flex;align-items:center;gap:1rem;min-height:4rem;background:var(--account-bar-fill);color:var(--account-bar-line);border-top:var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);padding-block:.25rem;padding-bottom:calc(.25rem + env(safe-area-inset-bottom));padding-left:calc(env(safe-area-inset-left) + var(--document-list-padding-x));padding-right:calc(env(safe-area-inset-right) + var(--document-list-padding-x));justify-content:space-between}.account-bar__button{display:flex;align-items:center;border:var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;padding-inline:.25rem;padding-block:.125rem;border-radius:3px;background:transparent;color:inherit;font:inherit;white-space:nowrap;cursor:var(--studio-cursor-pointer, pointer)}.account-bar__button:hover{border-color:var(--document-list-divider)}.account-bar__avatar patchwork-view{display:block;width:100%;height:100%}
2
2
  /*# sourceMappingURL=index.css.map */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.css"],
4
- "sourcesContent": ["@layer package {\n:root,\n:host,\n[theme] {\n --document-list-fill: var(\n --studio-chrome,\n light-dark(\n color-mix(in oklch, var(--studio-secondary-fill, var(--studio-secondary, #33ccf8)), var(--studio-fill, white) 80%),\n black\n )\n );\n --document-list-fill-offset: color-mix(\n in oklab,\n var(--document-list-fill),\n oklch(1 0 0 / 1) 10%\n );\n --document-list-line: var(--studio-line, black);\n --document-list-line-offset-20: var(--studio-line-offset-20, #333);\n --document-list-widget-fill: var(--studio-fill, white);\n --document-list-widget-line: var(--document-list-line);\n\n --document-list-padding-x: 0.5rem;\n\n --document-list-radius: 0.275rem;\n --placeholder-line: var(--studio-line-offset-50, #808e80);\n --document-list-search-line: var(--studio-line, #000);\n\n --document-list-primary: var(--studio-primary-fill, var(--studio-primary, #35f7ca));\n --document-list-primary-line: var(--studio-primary-line, var(--studio-line, black));\n --document-list-selection-fill: var(--document-list-primary);\n --document-list-selection-line: var(--document-list-primary-line);\n\n --document-list-create-new-fill: var(--studio-fill, white);\n --document-list-create-new-line: color-mix(\n in oklch,\n var(--document-list-primary),\n var(--studio-line, black) 30%\n );\n --document-list-create-new-border-line: color-mix(\n in oklch,\n var(--document-list-primary),\n var(--document-list-create-new-fill) 50%\n );\n --document-list-create-new-shadow-color: color-mix(\n in oklch,\n var(--document-list-fill),\n var(--document-list-line) 10%\n );\n\n --document-list-family: var(--studio-family-sans, system-ui, sans-serif);\n --document-list-family-code: var(--studio-family-code, ui-monospace, monospace);\n --document-list-muted: var(--studio-line-offset-40, #666);\n --document-list-border: var(--studio-fill-offset-10, #e5e5e5);\n --document-list-border-strong: var(--studio-fill-offset-20, #ccc);\n /* subtle divider on the document-list's chrome surface - the same base-theme\n token the patchwork-frame sidebar divider uses (chrome mixed toward the\n chrome ink, so it tracks the palette and reads correctly light/dark). */\n --document-list-divider: var(--studio-chrome-offset-20, #d4d4d4);\n --document-list-added: var(--studio-added, #35f7ca);\n --document-list-danger: var(--studio-danger-text, var(--studio-danger, #ff6a90));\n --document-list-toggle-hover: color-mix(in oklch, var(--studio-line, black), transparent 93%);\n --account-bar-fill: var(--studio-chrome-offset-10);\n /* ink on the account-bar's chrome surface: rides the chrome ink ramp, not\n --document-list-line (which is content ink and tracks the list surface). */\n --account-bar-line: var(--studio-chrome-line, var(--studio-line, black));\n}\n}\n\nbutton {\n background: none;\n border: none;\n font: inherit;\n color: inherit;\n cursor: var(--studio-cursor-pointer, pointer);\n padding: 0;\n}\n\n.document-list,\n.document-list * {\n box-sizing: border-box;\n}\n\n.document-list {\n background: var(--document-list-fill);\n display: flex;\n height: 100%;\n flex-direction: column;\n gap: 0.75rem;\n font-family: var(--document-list-family);\n padding-inline: var(--document-list-padding-x);\n /* Space above the doclist. Defaults to just the top safe-area inset; hosts\n like patchwork-frame override --document-list-top-margin to also clear their\n own header. Declared via the var() fallback (not on :host) so an ancestor's\n value can cascade in. */\n padding-top: var(--document-list-top-margin, env(safe-area-inset-top, 0px));\n padding-bottom: env(safe-area-inset-bottom);\n --depth: 0;\n .document-list-close-button {\n display: flex;\n align-items: center;\n align-self: flex-start;\n padding: 0.25rem;\n margin-top: 12px;\n margin-left: -2px;\n background: transparent;\n border: none;\n cursor: var(--studio-cursor-pointer, pointer);\n opacity: 0.5;\n color: var(--document-list-line);\n }\n\n .document-list-close-button:hover {\n opacity: 1;\n }\n}\n\n.create-new-button {\n display: flex;\n padding-inline: 0.75rem;\n padding-block: 0.375rem;\n border: none;\n border-radius: var(--document-list-radius);\n background: var(--document-list-create-new-fill);\n color: var(--document-list-line);\n font-weight: 400;\n align-items: center;\n justify-content: start;\n white-space: nowrap;\n font-size: 0.9rem;\n text-align: left;\n gap: 1ex;\n position: relative;\n flex-shrink: 0;\n}\n\n.create-new-button__icon {\n stroke: var(--document-list-line-offset-20);\n}\n\n/* square, icon-only variant used in the doclist toolbar; also the drag handle\n for creating a doc at a specific spot. */\n.create-new-button--square {\n width: 2rem;\n height: 2rem;\n padding: 0;\n justify-content: center;\n cursor: var(--studio-cursor-grab, grab);\n /* icon rides a little paler than the full ink at rest */\n color: color-mix(in oklch, var(--document-list-line), transparent 35%);\n transition:\n color max(1ms, calc(0.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,\n box-shadow max(1ms, calc(0.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;\n}\n\n/* darken and grow a little buttony shadow on hover */\n.create-new-button--square:hover {\n color: var(--document-list-line);\n box-shadow: var(--studio-shadow, 0 1px 3px rgb(0 0 0 / 0.1), 0 1px 2px rgb(0 0 0 / 0.06));\n}\n\n.create-new-button--square:active {\n cursor: var(--studio-cursor-grabbing, grabbing);\n}\n\n/* the visible button handles click + drag; a 0-size aria-hidden Kobalte trigger\n overlays it purely to anchor the dropdown menu. */\n.create-new-button-anchor {\n position: relative;\n display: flex;\n flex-shrink: 0;\n}\n\n\n/* sticky toolbar pinned to the top of the scrolling doclist: square new-doc\n button + filter, laid out horizontally. */\n.document-list__toolbar {\n position: sticky;\n top: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.375rem;\n background: var(--document-list-widget-fill);\n border-bottom: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);\n}\n\n.document-list__toolbar .document-list__filter-container {\n flex: 1;\n min-width: 0;\n}\n\n.icon {\n height: 1em;\n}\n\n.document-list__filter-container {\n position: relative;\n font-size: 0.875rem;\n border-radius: var(--document-list-radius);\n .search-icon {\n height: 1em;\n top: 0.4lh;\n left: 2px;\n position: absolute;\n z-index: 1;\n stroke: var(--placeholder-line);\n }\n &:focus-within {\n .search-icon {\n stroke: var(--document-list-line);\n }\n }\n}\n\n.document-list__filter {\n width: 100%;\n\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n\n padding-left: 2em;\n padding-right: 0.75rem;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n border: none;\n border-radius: var(--document-list-radius);\n\n &::placeholder {\n color: var(--placeholder-line);\n }\n\n &:focus-visible {\n outline-color: var(--sidebar-widget-line);\n outline-offset: var(--studio-focus-ring-offset, 1px);\n box-shadow: 0 0 0 4px #fff;\n border-radius: var(--document-list-radius);\n }\n}\n\n.document-list__doclist {\n --doclist-padding-x: 0.75rem;\n display: flex;\n flex-direction: column;\n border-radius: var(--document-list-radius);\n box-shadow: 0 1px 2px rgba(0, 20, 50, 0.05);\n width: 100%;\n max-height: 100%;\n overflow: scroll;\n transition:\n background-color max(1ms, calc(0.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,\n box-shadow max(1ms, calc(0.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n/* a drag past the last row: the line goes after it (see endSpot in dnd.ts) */\n.document-list__doclist[data-drop-state=\"end\"]::after {\n content: \"\";\n flex: none;\n height: 2px;\n margin-inline: var(--doclist-padding-x);\n background: var(--document-list-line);\n}\n\n/* why a drop didn't happen. sticks to the bottom of the list so it's seen\n wherever the list is scrolled to. */\n.document-list__error {\n position: sticky;\n bottom: 0.5rem;\n margin: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: var(--document-list-radius);\n background: var(--document-list-widget-fill);\n color: var(--document-list-danger);\n box-shadow: 0 0 0 1px currentColor inset, 0 2px 8px rgba(0, 0, 0, 0.1);\n font-size: 0.875rem;\n}\n\n.document-list-item {\n display: flex;\n gap: 0.25ch;\n padding-inline: var(--doclist-padding-x);\n padding-block: 0.5rem;\n font-weight: 400;\n color: var(--sidebar-widget-line);\n cursor: var(--studio-cursor-default, default);\n position: relative;\n\n &:focus-visible {\n outline-color: #000;\n outline-offset: var(--studio-focus-ring-offset, -2px);\n box-shadow: 0 0 0 4px var(--document-list-widget-fill);\n border-radius: var(--document-list-radius);\n }\n\n &:active {\n outline: 0;\n box-shadow: 0;\n }\n\n &[aria-selected=\"true\"] {\n background: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n .document-list-folder__toggle path {\n stroke: var(--document-list-selection-line);\n }\n .document-list__doclist > &:first-child {\n border-top-left-radius: var(--document-list-radius);\n border-top-right-radius: var(--document-list-radius);\n }\n .document-list__doclist > &:last-child {\n border-bottom-left-radius: var(--document-list-radius);\n border-bottom-right-radius: var(--document-list-radius);\n }\n }\n &[aria-checked=\"true\"] {\n outline: 2px dashed\n color-mix(in oklch, var(--document-list-line), transparent 50%);\n outline-offset: -4px;\n }\n &[data-dnd-dragging] {\n opacity: 0.4;\n }\n /* Spring-load: hovering a drag over this row opens the document after\n SPRING_LOAD_MS (see item.tsx). The highlight only fades in for the second\n half of the hold, so quick pass-overs never flash an animation. */\n &[data-dnd-springload] {\n animation: doclist-springload max(1ms, calc(0.75s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out 0.75s both;\n }\n &[data-dnd-droplist-state]::before {\n content: \"\";\n position: absolute;\n left: 0;\n margin-left: calc(var(--depth) * 1.75rem);\n right: 0;\n height: 2px;\n background: var(--document-list-line);\n }\n &[data-dnd-droplist-state=\"above\"]::before {\n top: -1px;\n }\n &[data-dnd-droplist-state=\"below\"]::before {\n bottom: -1px;\n }\n /* the rows a drop just put here (see flashLanded in drop-into.ts) */\n &[data-dnd-landed] {\n animation: doclist-landed max(1ms, calc(600ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out both;\n }\n}\n\n@keyframes doclist-landed {\n 0% {\n background: transparent;\n }\n 30% {\n background: color-mix(in oklch, var(--document-list-primary), transparent 30%);\n }\n 100% {\n background: transparent;\n }\n}\n\n/* no pulse: it's lit when it lands, then fades */\n@keyframes doclist-landed-still {\n from {\n background: color-mix(in oklch, var(--document-list-primary), transparent 40%);\n }\n to {\n background: transparent;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .document-list-item[data-dnd-landed] {\n animation: doclist-landed-still max(1ms, calc(600ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) linear both;\n }\n}\n\n@keyframes doclist-springload {\n from {\n background: transparent;\n }\n to {\n background: color-mix(\n in oklch,\n var(--document-list-primary),\n transparent 40%\n );\n }\n}\n\n.document-list-folder[data-drop-state=\"inside\"] {\n outline: 2px solid var(--document-list-primary);\n outline-offset: -2px;\n border-radius: var(--document-list-radius);\n background: color-mix(in oklch, var(--document-list-primary), transparent 50%);\n > .document-list-item::before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--document-list-line);\n bottom: 0;\n }\n [data-dnd-droplist-state]::before {\n display: none;\n }\n}\n\n.document-list__loading {\n display: flex;\n flex-direction: column;\n}\n\n.document-list-item--loading {\n pointer-events: none;\n padding-left: calc(1.8rem * var(--depth) + var(--doclist-padding-x));\n}\n\n/* In the loading-box, each skeleton keeps its own (inline) width so the stack\n reads as a list of distinct items rather than identical full-width bars. */\n.document-list__loading .document-list-item__skeleton {\n flex: 0 0 auto;\n}\n\n.document-list-item__skeleton {\n flex: 1;\n min-width: 0;\n max-width: 12rem;\n height: 0.75em;\n border-radius: 4px;\n background: linear-gradient(\n 90deg,\n var(--placeholder-line) 25%,\n color-mix(in oklch, var(--placeholder-line), transparent 65%) 50%,\n var(--placeholder-line) 75%\n );\n background-size: 200% 100%;\n opacity: 0.35;\n animation: doclist-skeleton-shimmer 1.2s ease-in-out infinite;\n}\n\n@keyframes doclist-skeleton-shimmer {\n from {\n background-position: 200% 0;\n }\n to {\n background-position: -200% 0;\n }\n}\n\n.document-list-item__name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n flex: 1;\n min-width: 0;\n &:is(input) {\n padding: 4px;\n margin: -4px;\n }\n}\n\n.document-list-folder__toggle {\n display: inline-flex;\n align-items: center;\n cursor: var(--studio-cursor-pointer, pointer);\n margin-left: -0.75ch;\n padding-inline: 0.25ch;\n &:hover {\n background: var(--document-list-toggle-hover);\n }\n\n & svg {\n width: 14px;\n height: 14px;\n }\n\n & path {\n stroke: var(--document-list-line-offset-20);\n }\n}\n\n.document-list-folder__contents--hidden {\n display: none;\n}\n\n.document-list-folder__circular-ref {\n padding: 0.5rem;\n padding-left: calc(2.2rem * var(--depth));\n color: var(--document-list-muted);\n font-style: italic;\n font-size: 0.9em;\n}\n\n.document-list__item {\n content-visibility: auto;\n contain-intrinsic-size: auto 2.25rem;\n}\n\n.document-list__item--invisible {\n display: none;\n}\n\n.document-list__item--visible,\n.document-list__item--invisible:has(.document-list__item--visible) {\n display: block;\n}\n\n.document-list-folder__contents .document-list-item {\n padding-left: calc(1.8rem * var(--depth));\n}\n\n.document-list-widget {\n width: 100%;\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n}\n\n.document-list-widget:empty {\n display: none;\n}\n\n/* the pending \"New document\" row created by dropping the new-doc button:\n renders like a normal list item, but italic and faded. */\n.document-list-placeholder {\n font-style: italic;\n color: var(--placeholder-line);\n}\n\n/* The menu content is portalled to document.body, so it misses the\n .document-list border-box rule. Without it, width:100% + padding makes\n sub-triggers overflow the menu horizontally, and hover-focus then scrolls\n the (overflow:auto) menu sideways, shifting its content to the left. */\n.popmenu__content,\n.popmenu__sub-content,\n.popmenu__content *,\n.popmenu__sub-content * {\n box-sizing: border-box;\n}\n\n.popmenu__trigger,\n.popmenu__sub-trigger {\n cursor: var(--studio-cursor-default, default);\n user-select: none;\n width: 100%;\n text-align: left;\n}\n\n.popmenu__sub-content,\n.popmenu__content {\n z-index: 2;\n min-width: 220px;\n max-height: min(400px, 50vh);\n overflow-y: auto;\n padding: 4px;\n background-color: var(--document-list-widget-fill);\n font-size: 0.8rem;\n border-radius: 6px;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border);\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 0.1),\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\n outline: none;\n}\n/* A menu grows out of the click or its trigger (transform-origin is set in\n popmenu.tsx), quickly, since it's opened many times a day. Closing is\n instant, and so are submenus: they open on hover, and anything slower than\n the pointer reads as lag. */\n.popmenu__content {\n transition:\n opacity max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),\n scale max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n@starting-style {\n .popmenu__content {\n opacity: 0;\n scale: 0.97;\n }\n}\n.popmenu__item,\n.popmenu__checkbox-item,\n.popmenu__radio-item,\n.popmenu__sub-trigger {\n font-size: 0.8rem;\n line-height: 1;\n color: var(--document-list-widget-line);\n border-radius: 4px;\n display: flex;\n align-items: center;\n height: 32px;\n padding-inline: 12px;\n padding-block: 6px;\n position: relative;\n user-select: none;\n outline: none;\n cursor: var(--studio-cursor-default, default);\n}\n/* says \"there's more this way\" on rows that open a submenu */\n.popmenu__sub-chevron {\n margin-inline-start: auto;\n margin-inline-end: -4px;\n width: 14px;\n height: 14px;\n flex: none;\n opacity: 0.6;\n}\n.popmenu__sub-trigger[data-expanded] {\n background-color: var(--document-list-fill-offset);\n color: var(--document-list-line);\n}\n.popmenu__item[data-disabled],\n.popmenu__checkbox-item[data-disabled],\n.popmenu__radio-item[data-disabled],\n.popmenu__sub-trigger[data-disabled] {\n color: var(--document-list-muted);\n opacity: var(--studio-disabled-opacity, 0.5);\n pointer-events: none;\n}\n.popmenu__item[data-highlighted],\n.popmenu__checkbox-item[data-highlighted],\n.popmenu__radio-item[data-highlighted],\n.popmenu__sub-trigger[data-highlighted] {\n outline: none;\n background-color: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n}\n\n.popmenu__item--highlighted {\n outline: none;\n background-color: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n}\n\n.create-new-menu__content {\n scrollbar-gutter: stable;\n scrollbar-color: var(--document-list-border-strong) var(--document-list-widget-fill);\n scrollbar-width: thin;\n}\n\n.create-new-menu__content::-webkit-scrollbar {\n width: 10px;\n}\n\n.create-new-menu__content::-webkit-scrollbar-track {\n background: var(--document-list-widget-fill);\n}\n\n.create-new-menu__content::-webkit-scrollbar-thumb {\n background: var(--document-list-border-strong);\n border: 2px solid var(--document-list-widget-fill);\n border-radius: 999px;\n}\n\n.create-new-menu__content::-webkit-scrollbar-thumb:hover {\n background: var(--document-list-muted);\n}\n\n.create-new-filter {\n padding: 4px;\n}\n\n.create-new-filter__input {\n width: 100%;\n box-sizing: border-box;\n padding: 6px 8px;\n font-size: 0.8rem;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border-strong);\n border-radius: 4px;\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n outline: none;\n}\n\n.create-new-filter__input:focus {\n border-color: var(--document-list-primary);\n}\n\n.create-new-filter__input::placeholder {\n color: var(--document-list-muted);\n}\n\n/* Combined chee/sideboard tool: the document list with the account bar pinned\n below it. The document-list panel fills; the bar sits at the bottom. */\n.sideboard {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.sideboard > .document-list {\n flex: 1;\n height: auto;\n min-height: 0;\n padding-bottom: 0;\n}\n\n/* The account bar: avatar (account picker), packages, settings. Usable as its\n own tool or pinned to the bottom of the combined sideboard. */\n.account-bar {\n container-type: inline-size;\n display: flex;\n align-items: center;\n gap: 1rem;\n min-height: 4rem;\n background: var(--account-bar-fill);\n color: var(--account-bar-line);\n border-top: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);\n padding-block: 0.25rem;\n padding-bottom: calc(0.25rem + env(safe-area-inset-bottom));\n padding-left: calc(env(safe-area-inset-left) + var(--document-list-padding-x));\n padding-right: calc(env(safe-area-inset-right) + var(--document-list-padding-x));\n justify-content: space-between;\n}\n\n.account-bar__button {\n display: flex;\n align-items: center;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;\n padding-inline: 0.25rem;\n padding-block: 0.125rem;\n border-radius: 3px;\n background: transparent;\n color: inherit;\n font: inherit;\n white-space: nowrap;\n cursor: var(--studio-cursor-pointer, pointer);\n}\n\n.account-bar__button:hover {\n border-color: var(--document-list-divider);\n}\n\n.account-bar__avatar patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["@layer package {\n:root,\n:host,\n[theme] {\n --document-list-fill: var(\n --studio-chrome,\n light-dark(\n color-mix(in oklch, var(--studio-secondary-fill, var(--studio-secondary, #33ccf8)), var(--studio-fill, white) 80%),\n black\n )\n );\n --document-list-fill-offset: color-mix(\n in oklab,\n var(--document-list-fill),\n oklch(1 0 0 / 1) 10%\n );\n --document-list-line: var(--studio-line, black);\n --document-list-line-offset-20: var(--studio-line-offset-20, #333);\n --document-list-widget-fill: var(--studio-fill, white);\n --document-list-widget-line: var(--document-list-line);\n\n --document-list-padding-x: 0.5rem;\n\n --document-list-radius: 0.275rem;\n --placeholder-line: var(--studio-line-offset-50, #808e80);\n --document-list-search-line: var(--studio-line, #000);\n\n --document-list-primary: var(--studio-primary-fill, var(--studio-primary, #35f7ca));\n --document-list-primary-line: var(--studio-primary-line, var(--studio-line, black));\n --document-list-selection-fill: var(--document-list-primary);\n --document-list-selection-line: var(--document-list-primary-line);\n\n --document-list-create-new-fill: var(--studio-fill, white);\n --document-list-create-new-line: color-mix(\n in oklch,\n var(--document-list-primary),\n var(--studio-line, black) 30%\n );\n --document-list-create-new-border-line: color-mix(\n in oklch,\n var(--document-list-primary),\n var(--document-list-create-new-fill) 50%\n );\n --document-list-create-new-shadow-color: color-mix(\n in oklch,\n var(--document-list-fill),\n var(--document-list-line) 10%\n );\n\n --document-list-family: var(--studio-family-sans, system-ui, sans-serif);\n --document-list-family-code: var(--studio-family-code, ui-monospace, monospace);\n --document-list-muted: var(--studio-line-offset-40, #666);\n --document-list-border: var(--studio-fill-offset-10, #e5e5e5);\n --document-list-border-strong: var(--studio-fill-offset-20, #ccc);\n /* subtle divider on the document-list's chrome surface - the same base-theme\n token the patchwork-frame sidebar divider uses (chrome mixed toward the\n chrome ink, so it tracks the palette and reads correctly light/dark). */\n --document-list-divider: var(--studio-chrome-offset-20, #d4d4d4);\n --document-list-added: var(--studio-added, #35f7ca);\n --document-list-danger: var(--studio-danger-text, var(--studio-danger, #ff6a90));\n --document-list-toggle-hover: color-mix(in oklch, var(--studio-line, black), transparent 93%);\n --account-bar-fill: var(--studio-chrome-offset-10);\n /* ink on the account-bar's chrome surface: rides the chrome ink ramp, not\n --document-list-line (which is content ink and tracks the list surface). */\n --account-bar-line: var(--studio-chrome-line, var(--studio-line, black));\n}\n}\n\n/* sideboard's own buttons only: this file goes in the page's head unlayered,\n so a bare `button` here would flatten every button on the page */\n:where(.sideboard, .document-list, .account-bar, .popmenu__content, .popmenu__sub-content) button {\n background: none;\n border: none;\n font: inherit;\n color: inherit;\n cursor: var(--studio-cursor-pointer, pointer);\n padding: 0;\n}\n\n.document-list,\n.document-list * {\n box-sizing: border-box;\n}\n\n.document-list {\n background: var(--document-list-fill);\n display: flex;\n height: 100%;\n flex-direction: column;\n gap: 0.75rem;\n font-family: var(--document-list-family);\n padding-inline: var(--document-list-padding-x);\n /* Space above the doclist. Defaults to just the top safe-area inset; hosts\n like patchwork-frame override --document-list-top-margin to also clear their\n own header. Declared via the var() fallback (not on :host) so an ancestor's\n value can cascade in. */\n padding-top: var(--document-list-top-margin, env(safe-area-inset-top, 0px));\n padding-bottom: env(safe-area-inset-bottom);\n --depth: 0;\n .document-list-close-button {\n display: flex;\n align-items: center;\n align-self: flex-start;\n padding: 0.25rem;\n margin-top: 12px;\n margin-left: -2px;\n background: transparent;\n border: none;\n cursor: var(--studio-cursor-pointer, pointer);\n opacity: 0.5;\n color: var(--document-list-line);\n }\n\n .document-list-close-button:hover {\n opacity: 1;\n }\n}\n\n.create-new-button {\n display: flex;\n padding-inline: 0.75rem;\n padding-block: 0.375rem;\n border: none;\n border-radius: var(--document-list-radius);\n background: var(--document-list-create-new-fill);\n color: var(--document-list-line);\n font-weight: 400;\n align-items: center;\n justify-content: start;\n white-space: nowrap;\n font-size: 0.9rem;\n text-align: left;\n gap: 1ex;\n position: relative;\n flex-shrink: 0;\n}\n\n.create-new-button__icon {\n stroke: var(--document-list-line-offset-20);\n}\n\n/* square, icon-only variant used in the doclist toolbar; also the drag handle\n for creating a doc at a specific spot. */\n.create-new-button--square {\n width: 2rem;\n height: 2rem;\n padding: 0;\n justify-content: center;\n cursor: var(--studio-cursor-grab, grab);\n /* icon rides a little paler than the full ink at rest */\n color: color-mix(in oklch, var(--document-list-line), transparent 35%);\n transition:\n color max(1ms, calc(0.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,\n box-shadow max(1ms, calc(0.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;\n}\n\n/* darken and grow a little buttony shadow on hover */\n.create-new-button--square:hover {\n color: var(--document-list-line);\n box-shadow: var(--studio-shadow, 0 1px 3px rgb(0 0 0 / 0.1), 0 1px 2px rgb(0 0 0 / 0.06));\n}\n\n.create-new-button--square:active {\n cursor: var(--studio-cursor-grabbing, grabbing);\n}\n\n/* the visible button handles click + drag; a 0-size aria-hidden Kobalte trigger\n overlays it purely to anchor the dropdown menu. */\n.create-new-button-anchor {\n position: relative;\n display: flex;\n flex-shrink: 0;\n}\n\n\n/* sticky toolbar pinned to the top of the scrolling doclist: square new-doc\n button + filter, laid out horizontally. */\n.document-list__toolbar {\n position: sticky;\n top: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.375rem;\n background: var(--document-list-widget-fill);\n border-bottom: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);\n}\n\n.document-list__toolbar .document-list__filter-container {\n flex: 1;\n min-width: 0;\n}\n\n:where(.sideboard, .document-list, .account-bar, .popmenu__content, .popmenu__sub-content) .icon {\n height: 1em;\n}\n\n.document-list__filter-container {\n position: relative;\n font-size: 0.875rem;\n border-radius: var(--document-list-radius);\n .search-icon {\n height: 1em;\n top: 0.4lh;\n left: 2px;\n position: absolute;\n z-index: 1;\n stroke: var(--placeholder-line);\n }\n &:focus-within {\n .search-icon {\n stroke: var(--document-list-line);\n }\n }\n}\n\n.document-list__filter {\n width: 100%;\n\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n\n padding-left: 2em;\n padding-right: 0.75rem;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n border: none;\n border-radius: var(--document-list-radius);\n\n &::placeholder {\n color: var(--placeholder-line);\n }\n\n &:focus-visible {\n outline-color: var(--sidebar-widget-line);\n outline-offset: var(--studio-focus-ring-offset, 1px);\n box-shadow: 0 0 0 4px #fff;\n border-radius: var(--document-list-radius);\n }\n}\n\n.document-list__doclist {\n --doclist-padding-x: 0.75rem;\n display: flex;\n flex-direction: column;\n border-radius: var(--document-list-radius);\n box-shadow: 0 1px 2px rgba(0, 20, 50, 0.05);\n width: 100%;\n max-height: 100%;\n overflow: scroll;\n transition:\n background-color max(1ms, calc(0.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,\n box-shadow max(1ms, calc(0.2s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n/* a drag past the last row: the line goes after it (see endSpot in dnd.ts) */\n.document-list__doclist[data-drop-state=\"end\"]::after {\n content: \"\";\n flex: none;\n height: 2px;\n margin-inline: var(--doclist-padding-x);\n background: var(--document-list-line);\n}\n\n/* why a drop didn't happen. sticks to the bottom of the list so it's seen\n wherever the list is scrolled to. */\n.document-list__error {\n position: sticky;\n bottom: 0.5rem;\n margin: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: var(--document-list-radius);\n background: var(--document-list-widget-fill);\n color: var(--document-list-danger);\n box-shadow: 0 0 0 1px currentColor inset, 0 2px 8px rgba(0, 0, 0, 0.1);\n font-size: 0.875rem;\n}\n\n.document-list-item {\n display: flex;\n gap: 0.25ch;\n padding-inline: var(--doclist-padding-x);\n padding-block: 0.5rem;\n font-weight: 400;\n color: var(--sidebar-widget-line);\n cursor: var(--studio-cursor-default, default);\n position: relative;\n\n &:focus-visible {\n outline-color: #000;\n outline-offset: var(--studio-focus-ring-offset, -2px);\n box-shadow: 0 0 0 4px var(--document-list-widget-fill);\n border-radius: var(--document-list-radius);\n }\n\n &:active {\n outline: 0;\n box-shadow: 0;\n }\n\n &[aria-selected=\"true\"] {\n background: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n .document-list-folder__toggle path {\n stroke: var(--document-list-selection-line);\n }\n .document-list__doclist > &:first-child {\n border-top-left-radius: var(--document-list-radius);\n border-top-right-radius: var(--document-list-radius);\n }\n .document-list__doclist > &:last-child {\n border-bottom-left-radius: var(--document-list-radius);\n border-bottom-right-radius: var(--document-list-radius);\n }\n }\n &[aria-checked=\"true\"] {\n outline: 2px dashed\n color-mix(in oklch, var(--document-list-line), transparent 50%);\n outline-offset: -4px;\n }\n &[data-dnd-dragging] {\n opacity: 0.4;\n }\n /* Spring-load: hovering a drag over this row opens the document after\n SPRING_LOAD_MS (see item.tsx). The highlight only fades in for the second\n half of the hold, so quick pass-overs never flash an animation. */\n &[data-dnd-springload] {\n animation: doclist-springload max(1ms, calc(0.75s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out 0.75s both;\n }\n &[data-dnd-droplist-state]::before {\n content: \"\";\n position: absolute;\n left: 0;\n margin-left: calc(var(--depth) * 1.75rem);\n right: 0;\n height: 2px;\n background: var(--document-list-line);\n }\n &[data-dnd-droplist-state=\"above\"]::before {\n top: -1px;\n }\n &[data-dnd-droplist-state=\"below\"]::before {\n bottom: -1px;\n }\n /* the rows a drop just put here (see flashLanded in drop-into.ts) */\n &[data-dnd-landed] {\n animation: doclist-landed max(1ms, calc(600ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out both;\n }\n}\n\n@keyframes doclist-landed {\n 0% {\n background: transparent;\n }\n 30% {\n background: color-mix(in oklch, var(--document-list-primary), transparent 30%);\n }\n 100% {\n background: transparent;\n }\n}\n\n/* no pulse: it's lit when it lands, then fades */\n@keyframes doclist-landed-still {\n from {\n background: color-mix(in oklch, var(--document-list-primary), transparent 40%);\n }\n to {\n background: transparent;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .document-list-item[data-dnd-landed] {\n animation: doclist-landed-still max(1ms, calc(600ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) linear both;\n }\n}\n\n@keyframes doclist-springload {\n from {\n background: transparent;\n }\n to {\n background: color-mix(\n in oklch,\n var(--document-list-primary),\n transparent 40%\n );\n }\n}\n\n.document-list-folder[data-drop-state=\"inside\"] {\n outline: 2px solid var(--document-list-primary);\n outline-offset: -2px;\n border-radius: var(--document-list-radius);\n background: color-mix(in oklch, var(--document-list-primary), transparent 50%);\n > .document-list-item::before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--document-list-line);\n bottom: 0;\n }\n [data-dnd-droplist-state]::before {\n display: none;\n }\n}\n\n.document-list__loading {\n display: flex;\n flex-direction: column;\n}\n\n.document-list-item--loading {\n pointer-events: none;\n padding-left: calc(1.8rem * var(--depth) + var(--doclist-padding-x));\n}\n\n/* In the loading-box, each skeleton keeps its own (inline) width so the stack\n reads as a list of distinct items rather than identical full-width bars. */\n.document-list__loading .document-list-item__skeleton {\n flex: 0 0 auto;\n}\n\n.document-list-item__skeleton {\n flex: 1;\n min-width: 0;\n max-width: 12rem;\n height: 0.75em;\n border-radius: 4px;\n background: linear-gradient(\n 90deg,\n var(--placeholder-line) 25%,\n color-mix(in oklch, var(--placeholder-line), transparent 65%) 50%,\n var(--placeholder-line) 75%\n );\n background-size: 200% 100%;\n opacity: 0.35;\n animation: doclist-skeleton-shimmer 1.2s ease-in-out infinite;\n}\n\n@keyframes doclist-skeleton-shimmer {\n from {\n background-position: 200% 0;\n }\n to {\n background-position: -200% 0;\n }\n}\n\n.document-list-item__name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n flex: 1;\n min-width: 0;\n &:is(input) {\n padding: 4px;\n margin: -4px;\n }\n}\n\n.document-list-folder__toggle {\n display: inline-flex;\n align-items: center;\n cursor: var(--studio-cursor-pointer, pointer);\n margin-left: -0.75ch;\n padding-inline: 0.25ch;\n &:hover {\n background: var(--document-list-toggle-hover);\n }\n\n & svg {\n width: 14px;\n height: 14px;\n }\n\n & path {\n stroke: var(--document-list-line-offset-20);\n }\n}\n\n.document-list-folder__contents--hidden {\n display: none;\n}\n\n.document-list-folder__circular-ref {\n padding: 0.5rem;\n padding-left: calc(2.2rem * var(--depth));\n color: var(--document-list-muted);\n font-style: italic;\n font-size: 0.9em;\n}\n\n.document-list__item {\n content-visibility: auto;\n contain-intrinsic-size: auto 2.25rem;\n}\n\n.document-list__item--invisible {\n display: none;\n}\n\n.document-list__item--visible,\n.document-list__item--invisible:has(.document-list__item--visible) {\n display: block;\n}\n\n.document-list-folder__contents .document-list-item {\n padding-left: calc(1.8rem * var(--depth));\n}\n\n.document-list-widget {\n width: 100%;\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n}\n\n.document-list-widget:empty {\n display: none;\n}\n\n/* the pending \"New document\" row created by dropping the new-doc button:\n renders like a normal list item, but italic and faded. */\n.document-list-placeholder {\n font-style: italic;\n color: var(--placeholder-line);\n}\n\n/* The menu content is portalled to document.body, so it misses the\n .document-list border-box rule. Without it, width:100% + padding makes\n sub-triggers overflow the menu horizontally, and hover-focus then scrolls\n the (overflow:auto) menu sideways, shifting its content to the left. */\n.popmenu__content,\n.popmenu__sub-content,\n.popmenu__content *,\n.popmenu__sub-content * {\n box-sizing: border-box;\n}\n\n.popmenu__trigger,\n.popmenu__sub-trigger {\n cursor: var(--studio-cursor-default, default);\n user-select: none;\n width: 100%;\n text-align: left;\n}\n\n.popmenu__sub-content,\n.popmenu__content {\n z-index: 2;\n min-width: 220px;\n max-height: min(400px, 50vh);\n overflow-y: auto;\n padding: 4px;\n background-color: var(--document-list-widget-fill);\n font-size: 0.8rem;\n border-radius: 6px;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border);\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 0.1),\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\n outline: none;\n}\n/* A menu grows out of the click or its trigger (transform-origin is set in\n popmenu.tsx), quickly, since it's opened many times a day. Closing is\n instant, and so are submenus: they open on hover, and anything slower than\n the pointer reads as lag. */\n.popmenu__content {\n transition:\n opacity max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),\n scale max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n@starting-style {\n .popmenu__content {\n opacity: 0;\n scale: 0.97;\n }\n}\n.popmenu__item,\n.popmenu__checkbox-item,\n.popmenu__radio-item,\n.popmenu__sub-trigger {\n font-size: 0.8rem;\n line-height: 1;\n color: var(--document-list-widget-line);\n border-radius: 4px;\n display: flex;\n align-items: center;\n height: 32px;\n padding-inline: 12px;\n padding-block: 6px;\n position: relative;\n user-select: none;\n outline: none;\n cursor: var(--studio-cursor-default, default);\n}\n/* says \"there's more this way\" on rows that open a submenu */\n.popmenu__sub-chevron {\n margin-inline-start: auto;\n margin-inline-end: -4px;\n width: 14px;\n height: 14px;\n flex: none;\n opacity: 0.6;\n}\n.popmenu__sub-trigger[data-expanded] {\n background-color: var(--document-list-fill-offset);\n color: var(--document-list-line);\n}\n.popmenu__item[data-disabled],\n.popmenu__checkbox-item[data-disabled],\n.popmenu__radio-item[data-disabled],\n.popmenu__sub-trigger[data-disabled] {\n color: var(--document-list-muted);\n opacity: var(--studio-disabled-opacity, 0.5);\n pointer-events: none;\n}\n.popmenu__item[data-highlighted],\n.popmenu__checkbox-item[data-highlighted],\n.popmenu__radio-item[data-highlighted],\n.popmenu__sub-trigger[data-highlighted] {\n outline: none;\n background-color: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n}\n\n.popmenu__item--highlighted {\n outline: none;\n background-color: var(--document-list-selection-fill);\n color: var(--document-list-selection-line);\n}\n\n.create-new-menu__content {\n scrollbar-gutter: stable;\n scrollbar-color: var(--document-list-border-strong) var(--document-list-widget-fill);\n scrollbar-width: thin;\n}\n\n.create-new-menu__content::-webkit-scrollbar {\n width: 10px;\n}\n\n.create-new-menu__content::-webkit-scrollbar-track {\n background: var(--document-list-widget-fill);\n}\n\n.create-new-menu__content::-webkit-scrollbar-thumb {\n background: var(--document-list-border-strong);\n border: 2px solid var(--document-list-widget-fill);\n border-radius: 999px;\n}\n\n.create-new-menu__content::-webkit-scrollbar-thumb:hover {\n background: var(--document-list-muted);\n}\n\n.create-new-filter {\n padding: 4px;\n}\n\n.create-new-filter__input {\n width: 100%;\n box-sizing: border-box;\n padding: 6px 8px;\n font-size: 0.8rem;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-border-strong);\n border-radius: 4px;\n background: var(--document-list-widget-fill);\n color: var(--document-list-widget-line);\n outline: none;\n}\n\n.create-new-filter__input:focus {\n border-color: var(--document-list-primary);\n}\n\n.create-new-filter__input::placeholder {\n color: var(--document-list-muted);\n}\n\n/* Combined chee/sideboard tool: the document list with the account bar pinned\n below it. The document-list panel fills; the bar sits at the bottom. */\n.sideboard {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.sideboard > .document-list {\n flex: 1;\n height: auto;\n min-height: 0;\n padding-bottom: 0;\n}\n\n/* The account bar: avatar (account picker), packages, settings. Usable as its\n own tool or pinned to the bottom of the combined sideboard. */\n.account-bar {\n container-type: inline-size;\n display: flex;\n align-items: center;\n gap: 1rem;\n min-height: 4rem;\n background: var(--account-bar-fill);\n color: var(--account-bar-line);\n border-top: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--document-list-divider);\n padding-block: 0.25rem;\n padding-bottom: calc(0.25rem + env(safe-area-inset-bottom));\n padding-left: calc(env(safe-area-inset-left) + var(--document-list-padding-x));\n padding-right: calc(env(safe-area-inset-right) + var(--document-list-padding-x));\n justify-content: space-between;\n}\n\n.account-bar__button {\n display: flex;\n align-items: center;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;\n padding-inline: 0.25rem;\n padding-block: 0.125rem;\n border-radius: 3px;\n background: transparent;\n color: inherit;\n font: inherit;\n white-space: nowrap;\n cursor: var(--studio-cursor-pointer, pointer);\n}\n\n.account-bar__button:hover {\n border-color: var(--document-list-divider);\n}\n\n.account-bar__avatar patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- automerge:2dpCHqG49FXwpEWh6G5kTi8gYXuy
1
+ automerge:2CEdwnz3Gz5NMfRJWGs2YLUm99as