@lapismd/mira 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/extensions/markdown-editing.d.ts +2 -0
  3. package/dist/extensions/markdown-editing.d.ts.map +1 -1
  4. package/dist/internal/codemirror/base/index.d.ts.map +1 -1
  5. package/dist/internal/codemirror/base/index.js +3 -0
  6. package/dist/internal/codemirror/rich/block-controls.js +3 -0
  7. package/dist/internal/codemirror/rich/index.js +3 -1
  8. package/dist/internal/codemirror/rich/utils/measured-indent.d.ts.map +1 -1
  9. package/dist/internal/codemirror/rich/utils/measured-indent.js +13 -1
  10. package/dist/mira.svelte +2 -0
  11. package/dist/mira.svelte.d.ts.map +1 -1
  12. package/dist/preview/components/frontmatter-property-text-input.svelte +13 -7
  13. package/dist/preview/components/frontmatter-property-text-input.svelte.d.ts.map +1 -1
  14. package/dist/preview/components/frontmatter.svelte +38 -3
  15. package/dist/preview/components/frontmatter.svelte.d.ts.map +1 -1
  16. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte +15 -11
  17. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte.d.ts.map +1 -1
  18. package/dist/preview/editable-markdown-preview/editing-session.d.ts.map +1 -1
  19. package/dist/preview/editable-markdown-preview/editing-session.js +1 -0
  20. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts +1 -0
  21. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts.map +1 -1
  22. package/dist/preview/editable-markdown-preview/serialized-writer.js +5 -2
  23. package/dist/preview/frontmatter/controller.svelte.d.ts +3 -1
  24. package/dist/preview/frontmatter/controller.svelte.d.ts.map +1 -1
  25. package/dist/preview/frontmatter/controller.svelte.js +16 -5
  26. package/dist/preview/frontmatter/record-snapshot.d.ts +3 -0
  27. package/dist/preview/frontmatter/record-snapshot.d.ts.map +1 -0
  28. package/dist/preview/frontmatter/record-snapshot.js +39 -0
  29. package/dist/preview/frontmatter/types.d.ts +1 -1
  30. package/dist/preview/frontmatter/types.d.ts.map +1 -1
  31. package/dist/preview/markdown-preview.svelte +4 -3
  32. package/dist/preview/markdown-preview.svelte.d.ts.map +1 -1
  33. package/dist/preview/styles/source-mode.css +32 -3
  34. package/dist/types.d.ts +2 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @lapismd/mira
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#21](https://github.com/lapismd/mira-mde/pull/21) [`377bfc8`](https://github.com/lapismd/mira-mde/commit/377bfc805eac2961fd879f03e28e80273cb8702c) Thanks [@stevejuma](https://github.com/stevejuma)! - Expose immutable previous frontmatter records and retain focused text edits through external metadata refresh and deferred commits.
8
+
9
+ - [#21](https://github.com/lapismd/mira-mde/pull/21) [`caa2452`](https://github.com/lapismd/mira-mde/commit/caa24527be436a706ef083c63e76694a180044b7) Thanks [@stevejuma](https://github.com/stevejuma)! - Expose an optional synchronous Markdown input lease that leaves persistence and recovery under the existing save barriers.
10
+
11
+ - [#21](https://github.com/lapismd/mira-mde/pull/21) [`9142fa4`](https://github.com/lapismd/mira-mde/commit/9142fa4ed786d63fc54a04654f3b2c5ef48bfe47) Thanks [@stevejuma](https://github.com/stevejuma)! - Retain preview source sessions when adapter admission or diagnostic callbacks observe reactive state.
12
+
13
+ - [#21](https://github.com/lapismd/mira-mde/pull/21) [`a7ab556`](https://github.com/lapismd/mira-mde/commit/a7ab556fc55e612210097a060d1b96917fbb2ed3) Thanks [@stevejuma](https://github.com/stevejuma)! - Align the portable overlay runtime with released Bits UI 2.20.2 while preserving
14
+ the existing public editor and preview contracts.
15
+
16
+ ## 0.1.1
17
+
18
+ ### Patch Changes
19
+
20
+ - [#18](https://github.com/lapismd/mira-mde/pull/18) [`bbbf943`](https://github.com/lapismd/mira-mde/commit/bbbf943ce79148d07ba5cf2b06252b7401488510) Thanks [@stevejuma](https://github.com/stevejuma)! - Keep block-toolbar actions on current document ranges after replacement and
21
+ align live-preview collapse controls without a fixed font offset.
22
+
23
+ - [#18](https://github.com/lapismd/mira-mde/pull/18) [`89be5a6`](https://github.com/lapismd/mira-mde/commit/89be5a696f5e3d7b401b089eb0ac064ec5449492) Thanks [@stevejuma](https://github.com/stevejuma)! - Expose the existing editor line-number option on Mira so embedded composers can disable the extension without CSS overrides.
24
+
25
+ - [#18](https://github.com/lapismd/mira-mde/pull/18) [`1f65315`](https://github.com/lapismd/mira-mde/commit/1f65315f7d77b799d4fd1e8fc564eb9f06386065) Thanks [@stevejuma](https://github.com/stevejuma)! - Align live-preview list and checkbox indentation with reading mode, keep wrapped task text aligned beneath its label, and preserve asterisk bullets during inline formatting.
26
+
27
+ - [#18](https://github.com/lapismd/mira-mde/pull/18) [`fef951d`](https://github.com/lapismd/mira-mde/commit/fef951d8f78989c174a18e188a814e1443a5c1bb) Thanks [@stevejuma](https://github.com/stevejuma)! - Render path, wiki and embed leaf nodes when an extension preserves an explicitly
28
+ undefined optional children field, avoiding a crash in forwarded chat context.
29
+
30
+ - [#18](https://github.com/lapismd/mira-mde/pull/18) [`bce7ba8`](https://github.com/lapismd/mira-mde/commit/bce7ba8ed344824f577d5a0917ac66b9f65ec50f) Thanks [@stevejuma](https://github.com/stevejuma)! - Preserve checked and custom task-checkbox artwork in safe Markdown previews by retaining parser-produced task metadata through sanitization.
31
+
3
32
  ## 0.1.0
4
33
 
5
34
  ### Minor Changes
@@ -20,6 +20,8 @@ export type MiraMarkdownTextSession = {
20
20
  /** A portable persistence barrier owned by one source-bound Markdown writer. */
21
21
  export type MiraMarkdownEditingSession = {
22
22
  readonly dirty: boolean;
23
+ /** Block new input synchronously without flushing or acknowledging text. */
24
+ hold?(): () => void;
23
25
  flush(): Promise<void>;
24
26
  protect(): Promise<() => void>;
25
27
  readonly text?: MiraMarkdownTextSession;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-editing.d.ts","sourceRoot":"","sources":["../../src/extensions/markdown-editing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,sFAAsF;AACtF,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvD,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CACzC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"markdown-editing.d.ts","sourceRoot":"","sources":["../../src/extensions/markdown-editing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,sFAAsF;AACtF,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvD,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CACzC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/internal/codemirror/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAkBlC,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmBhE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kCAAkC,EAClC,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,MAAM,EACN,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,6BAA6B,EAC7B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EACT,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GACxD,KAAK,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,wCAuC/B,CAAC;AAEH,eAAO,MAAM,eAAe,WAoN1B,CAAC;AAgOH,wBAAgB,4BAA4B,IAAI,SAAS,CAExD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,qBAA0B,GAClC,SAAS,EAAE,CAoEb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/internal/codemirror/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAkBlC,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmBhE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kCAAkC,EAClC,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,MAAM,EACN,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,6BAA6B,EAC7B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EACT,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GACxD,KAAK,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,wCAuC/B,CAAC;AAEH,eAAO,MAAM,eAAe,WAuN1B,CAAC;AAgOH,wBAAgB,4BAA4B,IAAI,SAAS,CAExD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,qBAA0B,GAClC,SAAS,EAAE,CAoEb"}
@@ -52,6 +52,9 @@ export const miraClassHighlighter = tagHighlighter([
52
52
  ]);
53
53
  export const miraEditorTheme = EditorView.theme({
54
54
  "&": {
55
+ // CodeMirror's panel/gutter z-indices are internal to this editor, so they
56
+ // cannot outrank a surrounding host's settings or other modal overlays.
57
+ isolation: "isolate",
55
58
  height: "100%",
56
59
  color: "var(--mira-foreground)",
57
60
  backgroundColor: "var(--mira-editor-background)",
@@ -310,6 +310,9 @@ class BlockControlsPlugin {
310
310
  }
311
311
  update(update) {
312
312
  if (update.docChanged) {
313
+ // Gutter buttons update synchronously; their IDs may be reused before
314
+ // the next geometry frame, so actions must already use current ranges.
315
+ this.handles = collectMarkdownBlockHandles(update.state);
313
316
  this.closeMenu();
314
317
  this.closeToolbarMenu();
315
318
  this.scheduleRender();
@@ -421,7 +421,9 @@ function decorateInlineSyntax(view, ranges, hiddenRanges, activeSourceRanges) {
421
421
  from: visibleRange.from,
422
422
  to: visibleRange.to,
423
423
  enter(node) {
424
- if (node.name === "LinkReference") {
424
+ // List markers belong to indentation chrome. In particular, `*` must
425
+ // not be collapsed by the fallback inline-formatting matcher.
426
+ if (node.name === "LinkReference" || node.name === "ListMark") {
425
427
  activeSourceRanges.push({ from: node.from, to: node.to });
426
428
  return false;
427
429
  }
@@ -1 +1 @@
1
- {"version":3,"file":"measured-indent.d.ts","sourceRoot":"","sources":["../../../../../src/internal/codemirror/rich/utils/measured-indent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASnD,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AA4BF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACnD,IAAI,CAqCN;AA8FD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAuB7E;AAwWD,wBAAgB,uBAAuB,IAAI,SAAS,CAKnD"}
1
+ {"version":3,"file":"measured-indent.d.ts","sourceRoot":"","sources":["../../../../../src/internal/codemirror/rich/utils/measured-indent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASnD,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AA4BF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACnD,IAAI,CAqCN;AA4GD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAuB7E;AAwWD,wBAAgB,uBAAuB,IAAI,SAAS,CAKnD"}
@@ -70,6 +70,18 @@ function measureTextNodeWidth(node) {
70
70
  return Number.isFinite(rect.width) && rect.width > 0 ? rect.width : null;
71
71
  }
72
72
  function measureMarkerWidth(line) {
73
+ const checkbox = line.querySelector(".task-list-label");
74
+ if (checkbox) {
75
+ // The checkbox replaces the list marker as well as its task delimiter.
76
+ // Include its margins and the surviving separator so wrapped rows hang
77
+ // under the task text, rather than under the checkbox.
78
+ const contentOffset = measureFirstContentOffset(line);
79
+ const checkboxOffset = checkbox.getBoundingClientRect().left - line.getBoundingClientRect().left;
80
+ const margin = Number.parseFloat(getComputedStyle(checkbox).marginInlineStart) || 0;
81
+ if (contentOffset !== null) {
82
+ return Math.max(0, contentOffset - checkboxOffset + margin);
83
+ }
84
+ }
73
85
  const marker = line.querySelector(".cm-formatting-list-ul, .cm-formatting-list-ol");
74
86
  const width = marker?.getBoundingClientRect().width;
75
87
  return width && Number.isFinite(width) && width > 0 ? width : 0;
@@ -150,7 +162,7 @@ function firstContentTextNode(line) {
150
162
  if (!(node instanceof Text)) {
151
163
  continue;
152
164
  }
153
- const skipped = node.parentElement?.closest(".cm-hmd-list-indent, .cm-plain-indent-widget, .cm-formatting-list-ul, .cm-formatting-list-ol, .cm-blockquote-border, .cm-formatting-quote");
165
+ const skipped = node.parentElement?.closest(".cm-hmd-list-indent, .cm-plain-indent-widget, .cm-formatting-list-ul, .cm-formatting-list-ol, .cm-blockquote-border, .cm-formatting-quote, .task-list-label");
154
166
  if (skipped && skipped !== line) {
155
167
  continue;
156
168
  }
package/dist/mira.svelte CHANGED
@@ -45,6 +45,7 @@
45
45
  readonly = false,
46
46
  placeholder = "Start writing Markdown...",
47
47
  lineWrapping = true,
48
+ lineNumbers = true,
48
49
  spellcheck = true,
49
50
  blockControls = false,
50
51
  indentGuides = true,
@@ -525,6 +526,7 @@
525
526
  {readonly}
526
527
  {placeholder}
527
528
  {lineWrapping}
529
+ {lineNumbers}
528
530
  {spellcheck}
529
531
  {indentWithTabs}
530
532
  {indentWidth}
@@ -1 +1 @@
1
- {"version":3,"file":"mira.svelte.d.ts","sourceRoot":"","sources":["../src/mira.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAC9B,OAAO,EAKH,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAMpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA2ezC,QAAA,MAAM,IAAI;iBAvSW,IAAI;uBAIE,MAAM;4BAIC,MAAM,KAAG,IAAI;mBAKxB,QAAQ;uBAIJ,SAAS,WAAW,EAAE;kCAIT,MAAM,KAAG,OAAO;gCAQlB,MAAM,KAAG,OAAO;wBAQxB,QAAQ,KAAG,IAAI;gCAIP,OAAO,KAAG,IAAI;wBAIxB,UAAU,CAClC,oBAAoB,CAAC,cAAc,CAAC,CACrC;8BAKY,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,KACvE,IAAI;+BAKK,MAAM,cACJ,qBAAqB,KAChC,IAAI;kCAK+B,oBAAoB,KAAG,OAAO;uBAQ3C,IAAI;oBA8NmB,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"mira.svelte.d.ts","sourceRoot":"","sources":["../src/mira.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAC9B,OAAO,EAKH,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAMpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA4ezC,QAAA,MAAM,IAAI;iBAvSW,IAAI;uBAIE,MAAM;4BAIC,MAAM,KAAG,IAAI;mBAKxB,QAAQ;uBAIJ,SAAS,WAAW,EAAE;kCAIT,MAAM,KAAG,OAAO;gCAQlB,MAAM,KAAG,OAAO;wBAQxB,QAAQ,KAAG,IAAI;gCAIP,OAAO,KAAG,IAAI;wBAIxB,UAAU,CAClC,oBAAoB,CAAC,cAAc,CAAC,CACrC;8BAKY,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,KACvE,IAAI;+BAKK,MAAM,cACJ,qBAAqB,KAChC,IAAI;kCAK+B,oBAAoB,KAAG,OAAO;uBAQ3C,IAAI;oBA8NmB,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
@@ -31,6 +31,7 @@
31
31
  let suggestionVersion = 0;
32
32
  let suggestions = $state<string[]>([]);
33
33
  let committedSuggestion: string | null = null;
34
+ let editCommit: Props["onCommit"] | undefined;
34
35
 
35
36
  const filteredSuggestions = $derived(
36
37
  filterFrontmatterValueSuggestions(suggestions, query),
@@ -88,7 +89,9 @@
88
89
  }
89
90
  committedSuggestion = suggestion;
90
91
  open = false;
91
- onCommit(suggestion);
92
+ const commit = editCommit ?? onCommit;
93
+ editCommit = undefined;
94
+ commit(suggestion);
92
95
  }
93
96
 
94
97
  function handleBlur(event: FocusEvent): void {
@@ -96,16 +99,19 @@
96
99
  if (nextFocus?.dataset.propertyValueSuggestion === "true") {
97
100
  return;
98
101
  }
102
+ const nextValue = currentValue();
103
+ const commit = editCommit ?? onCommit;
104
+ const alreadyCommitted = nextValue === committedSuggestion;
99
105
  queueMicrotask(() => {
100
106
  if (editorEl?.ownerDocument.activeElement !== editorEl) {
101
107
  open = false;
102
- const nextValue = currentValue();
103
- if (nextValue === committedSuggestion) {
108
+ editCommit = undefined;
109
+ if (alreadyCommitted) {
104
110
  committedSuggestion = null;
105
111
  return;
106
112
  }
107
113
  committedSuggestion = null;
108
- onCommit(nextValue);
114
+ commit(nextValue);
109
115
  }
110
116
  });
111
117
  }
@@ -179,12 +185,14 @@
179
185
  void loadSuggestions(query);
180
186
  }}
181
187
  onfocus={() => {
188
+ editCommit = onCommit;
182
189
  query = currentValue();
183
190
  open = true;
184
191
  activeIndex = -1;
185
192
  void loadSuggestions(query);
186
193
  }}
187
194
  oninput={() => {
195
+ editCommit ??= onCommit;
188
196
  committedSuggestion = null;
189
197
  query = currentValue();
190
198
  open = true;
@@ -193,9 +201,7 @@
193
201
  }}
194
202
  onblur={handleBlur}
195
203
  onkeydown={handleKeydown}
196
- >
197
- {value}
198
- </div>
204
+ ></div>
199
205
  {/snippet}
200
206
  </Popover.Trigger>
201
207
 
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter-property-text-input.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/components/frontmatter-property-text-input.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAI7B,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAwLJ,QAAA,MAAM,4BAA4B,2CAAwC,CAAC;AAC3E,KAAK,4BAA4B,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;AACpF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"frontmatter-property-text-input.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/components/frontmatter-property-text-input.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAI7B,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AA8LJ,QAAA,MAAM,4BAA4B,2CAAwC,CAAC;AAC3E,KAAK,4BAA4B,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;AACpF,eAAe,4BAA4B,CAAC"}
@@ -19,6 +19,7 @@
19
19
  import Link from "./link.svelte";
20
20
  import FrontmatterPropertyNameInput from "./frontmatter-property-name-input.svelte";
21
21
  import FrontmatterPropertyTextInput from "./frontmatter-property-text-input.svelte";
22
+ import { snapshotFrontmatterRecord } from "../frontmatter/record-snapshot";
22
23
  import FrontmatterPropertyValueInput from "./frontmatter-property-value-input.svelte";
23
24
  import * as DropdownMenu from "../../ui/dropdown-menu/index.js";
24
25
  import type { MiraFileAdapter } from "@lapismd/mira/extensions";
@@ -122,12 +123,20 @@
122
123
  });
123
124
 
124
125
  const parseError = $derived(controller.parseError);
126
+ const renderedTextCommits = new WeakMap<
127
+ FrontmatterProperty,
128
+ (value: string) => void
129
+ >();
125
130
  const rows = $derived.by(() => {
126
131
  controller.revision;
127
132
  if (controller.parseError) {
128
133
  return [] as FrontmatterProperty[];
129
134
  }
130
- return manager.properties(controller.getRecord());
135
+ const owner = controller;
136
+ const previousRecord = snapshotFrontmatterRecord(owner.getRecord());
137
+ const properties = manager.properties(previousRecord);
138
+ bindRenderedTextCommits(properties, owner, previousRecord);
139
+ return properties;
131
140
  });
132
141
  const typeOptions = $derived.by(() => {
133
142
  controller.revision;
@@ -154,6 +163,32 @@
154
163
  controller.updateProperty(property.path, nextValue);
155
164
  }
156
165
 
166
+ function bindRenderedTextCommits(
167
+ properties: FrontmatterProperty[],
168
+ owner: FrontmatterController,
169
+ previousRecord: Readonly<Record<string, unknown>>,
170
+ ): void {
171
+ const sourcePath = owner.sourcePath;
172
+ const onActionError = manager.config.onActionError;
173
+ for (const property of properties) {
174
+ const path = [...property.path];
175
+ renderedTextCommits.set(property, (value) => {
176
+ if (owner.sourcePath !== sourcePath) {
177
+ onActionError?.(new Error("Frontmatter edit target changed"), "edit");
178
+ return;
179
+ }
180
+ owner.updateProperty(path, value, previousRecord);
181
+ });
182
+ bindRenderedTextCommits(property.children, owner, previousRecord);
183
+ }
184
+ }
185
+
186
+ function renderedTextCommit(property: FrontmatterProperty) {
187
+ const commit = renderedTextCommits.get(property);
188
+ if (!commit) throw new Error("Rendered frontmatter edit is unavailable");
189
+ return commit;
190
+ }
191
+
157
192
  function addProperty(): void {
158
193
  const nextName = controller.addProperty("text");
159
194
  if (nextName) {
@@ -319,7 +354,7 @@
319
354
 
320
355
  function handleActionError(
321
356
  error: unknown,
322
- action: "copy" | "cut" | "paste" | "remove",
357
+ action: "copy" | "cut" | "paste" | "remove" | "edit",
323
358
  ): void {
324
359
  config.onActionError?.(error, action);
325
360
  }
@@ -646,7 +681,7 @@
646
681
  {config}
647
682
  ariaLabel={`${property.pathString} value`}
648
683
  class={`metadata-input metadata-input-longtext metadata-property-value-item min-w-0 grow bg-transparent px-2 py-1 outline-none ${valueClass(property.kind)}`}
649
- onCommit={(next) => updateProperty(property, next)}
684
+ onCommit={renderedTextCommit(property)}
650
685
  />
651
686
  {:else if toBuiltinFrontmatterKind(property.kind) === "number"}
652
687
  <input
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/components/frontmatter.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EASH,qBAAqB,EAIrB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAQ/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO9D,KAAK,KAAK,GAAG;IACX,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAgpBJ,QAAA,MAAM,WAAW,8CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"frontmatter.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/components/frontmatter.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EASH,qBAAqB,EAIrB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAS/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO9D,KAAK,KAAK,GAAG;IACX,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAmrBJ,QAAA,MAAM,WAAW,8CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -146,17 +146,21 @@
146
146
  },
147
147
  });
148
148
  writer = activeWriter;
149
- const attached = attachMarkdownEditingSession({
150
- writer: activeWriter,
151
- sourcePath: key,
152
- register: adapter?.registerEditingSession
153
- ? (path, session) => adapter.registerEditingSession?.(path, session)
154
- : undefined,
155
- bind: adapter?.bindMarkdownEditingSession
156
- ? (path, session) => adapter.bindMarkdownEditingSession!(path, session)
157
- : undefined,
158
- synchronizeProtection: tick,
159
- });
149
+ // Adapter observations must not become dependencies of this source lifetime.
150
+ const attached = untrack(() =>
151
+ attachMarkdownEditingSession({
152
+ writer: activeWriter,
153
+ sourcePath: key,
154
+ register: adapter?.registerEditingSession
155
+ ? (path, session) => adapter.registerEditingSession?.(path, session)
156
+ : undefined,
157
+ bind: adapter?.bindMarkdownEditingSession
158
+ ? (path, session) =>
159
+ adapter.bindMarkdownEditingSession!(path, session)
160
+ : undefined,
161
+ synchronizeProtection: tick,
162
+ }),
163
+ );
160
164
  persist = attached.write ?? write;
161
165
 
162
166
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"editable-markdown-surface.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/editable-markdown-surface.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAclC,KAAK,mBAAmB,GAAG,CACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,IAAI,CAAC;AAEV,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,SAAS,CAAC,EAAE,2BAA2B,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAqUJ,QAAA,MAAM,uBAAuB;iBA1CF,OAAO,CAAC,OAAO,CAAC;gBAIjB,OAAO,CAAC,OAAO,CAAC;iCAsC2B,CAAC;AACtE,KAAK,uBAAuB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"editable-markdown-surface.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/editable-markdown-surface.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAclC,KAAK,mBAAmB,GAAG,CACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,IAAI,CAAC;AAEV,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,SAAS,CAAC,EAAE,2BAA2B,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAyUJ,QAAA,MAAM,uBAAuB;iBA1CF,OAAO,CAAC,OAAO,CAAC;gBAIjB,OAAO,CAAC,OAAO,CAAC;iCAsC2B,CAAC;AACtE,KAAK,uBAAuB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"editing-session.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/editing-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,wBAAwB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC;IACrD,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,GAAG;IACF,OAAO,EAAE,0BAA0B,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,IAAI,CAAC;CAChB,CAiGA"}
1
+ {"version":3,"file":"editing-session.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/editing-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,wBAAwB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC;IACrD,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,GAAG;IACF,OAAO,EAAE,0BAA0B,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,IAAI,CAAC;CAChB,CAkGA"}
@@ -22,6 +22,7 @@ export function attachMarkdownEditingSession(options) {
22
22
  }
23
23
  }
24
24
  const session = {
25
+ hold: () => writer.hold(),
25
26
  get dirty() {
26
27
  const state = writer.state;
27
28
  return (state.dirty ||
@@ -25,6 +25,7 @@ export declare class SerializedMarkdownWriter {
25
25
  update(value: string): boolean;
26
26
  subscribe(listener: (state: SerializedMarkdownWriterState) => void): () => void;
27
27
  protectRecovery(): Promise<MiraMarkdownRecoveryLease>;
28
+ hold(): () => void;
28
29
  protect(): Promise<() => void>;
29
30
  replaceExternal(value: string): boolean;
30
31
  flush(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"serialized-writer.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/serialized-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAC3C,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAElE,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA2B;IAE1D,OAAO,CAAC,KAAK,CAA8C;IAE3D,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IAEJ,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,KAAK,CAAsB;gBAEvB,OAAO,EAAE,OAAO;IAS5B,IAAI,KAAK,IAAI,6BAA6B,CASzC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ9B,SAAS,CACP,QAAQ,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,GACvD,MAAM,IAAI;IAQP,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC;IA2CrD,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;IAoBpC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAiBjC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA0B/B,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,QAAQ;YAYF,WAAW;IA2BzB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI;CAIb"}
1
+ {"version":3,"file":"serialized-writer.d.ts","sourceRoot":"","sources":["../../../src/preview/editable-markdown-preview/serialized-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAC3C,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAElE,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA2B;IAE1D,OAAO,CAAC,KAAK,CAA8C;IAE3D,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IAEJ,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,KAAK,CAAsB;gBAEvB,OAAO,EAAE,OAAO;IAS5B,IAAI,KAAK,IAAI,6BAA6B,CASzC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ9B,SAAS,CACP,QAAQ,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,GACvD,MAAM,IAAI;IAQP,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC;IA2C3D,IAAI,IAAI,MAAM,IAAI;IAYZ,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;IAYpC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAiBjC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA0B/B,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,QAAQ;YAYF,WAAW;IA2BzB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI;CAIb"}
@@ -91,17 +91,20 @@ export class SerializedMarkdownWriter {
91
91
  throw error;
92
92
  }
93
93
  }
94
- async protect() {
94
+ hold() {
95
95
  this.protections++;
96
96
  this.emit();
97
97
  let released = false;
98
- const release = () => {
98
+ return () => {
99
99
  if (released)
100
100
  return;
101
101
  released = true;
102
102
  this.protections--;
103
103
  this.emit();
104
104
  };
105
+ }
106
+ async protect() {
107
+ const release = this.hold();
105
108
  try {
106
109
  if (!(await this.flush()))
107
110
  throw this.error ?? new Error("Unable to protect unsaved Markdown");
@@ -1,6 +1,7 @@
1
1
  import type { FrontmatterPathSegment, FrontmatterProperty, FrontmatterPropertyKind } from "./types";
2
2
  import { type FrontmatterPropertyManager } from "./manager";
3
3
  export type FrontmatterControllerCommit = {
4
+ readonly previousRecord: Readonly<Record<string, unknown>>;
4
5
  record: Record<string, unknown>;
5
6
  yaml: string;
6
7
  replacement: string;
@@ -45,9 +46,10 @@ export declare class FrontmatterController {
45
46
  syncRecord(nextRecord: Record<string, unknown>, options?: {
46
47
  commit?: boolean;
47
48
  }): void;
49
+ private replaceRecord;
48
50
  commitYaml(nextYaml: string): void;
49
51
  commitRecord(nextRecord: Record<string, unknown>): void;
50
- updateProperty(path: FrontmatterPathSegment[], nextValue: unknown): void;
52
+ updateProperty(path: FrontmatterPathSegment[], nextValue: unknown, previousRecord?: Readonly<Record<string, unknown>>): void;
51
53
  addProperty(kind?: FrontmatterPropertyKind): string | null;
52
54
  renameProperty(path: FrontmatterPathSegment[], nextKey: string): void;
53
55
  removeProperty(path: FrontmatterPathSegment[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/frontmatter/controller.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.svelte.d.ts","sourceRoot":"","sources":["../../../src/preview/frontmatter/controller.svelte.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { parseFrontmatterYaml } from "./parse";
2
+ import { snapshotFrontmatterRecord } from "./record-snapshot";
2
3
  import { addFrontmatterRecordProperty, mergeFrontmatterRecordProperties, removeFrontmatterRecordProperty, renameFrontmatterRecordProperty, updateFrontmatterRecord, } from "./properties";
3
4
  import { createFrontmatterReplacement, serializeFrontmatterRecord, } from "./serialize";
4
5
  import { createFrontmatterPropertyManager, } from "./manager";
@@ -72,6 +73,9 @@ export class FrontmatterController {
72
73
  if (!options.commit && nextYaml === this.yaml && this.revision > 0) {
73
74
  return;
74
75
  }
76
+ const previousRecord = options.commit
77
+ ? snapshotFrontmatterRecord(this.record)
78
+ : undefined;
75
79
  const parsed = parseFrontmatterYaml(nextYaml);
76
80
  this.yaml = nextYaml;
77
81
  if (parsed.ok) {
@@ -84,20 +88,26 @@ export class FrontmatterController {
84
88
  }
85
89
  this.revision += 1;
86
90
  if (options.commit) {
87
- void this.commitCurrent();
91
+ void this.commitCurrent(previousRecord);
88
92
  }
89
93
  }
90
94
  syncRecord(nextRecord, options = {}) {
95
+ this.replaceRecord(nextRecord, options);
96
+ }
97
+ replaceRecord(nextRecord, options, priorRecord = this.record) {
91
98
  const nextYaml = serializeFrontmatterRecord(nextRecord);
92
99
  if (!options.commit && nextYaml === this.yaml && this.revision > 0) {
93
100
  return;
94
101
  }
102
+ const previousRecord = options.commit
103
+ ? snapshotFrontmatterRecord(priorRecord)
104
+ : undefined;
95
105
  this.record = cloneRecord(nextRecord);
96
106
  this.yaml = nextYaml;
97
107
  this.parseError = null;
98
108
  this.revision += 1;
99
109
  if (options.commit) {
100
- void this.commitCurrent();
110
+ void this.commitCurrent(previousRecord);
101
111
  }
102
112
  }
103
113
  commitYaml(nextYaml) {
@@ -106,11 +116,11 @@ export class FrontmatterController {
106
116
  commitRecord(nextRecord) {
107
117
  this.syncRecord(nextRecord, { commit: true });
108
118
  }
109
- updateProperty(path, nextValue) {
119
+ updateProperty(path, nextValue, previousRecord = this.record) {
110
120
  if (this.parseError) {
111
121
  return;
112
122
  }
113
- this.commitRecord(updateFrontmatterRecord(this.record, path, nextValue));
123
+ this.replaceRecord(updateFrontmatterRecord(previousRecord, path, nextValue), { commit: true }, previousRecord);
114
124
  }
115
125
  addProperty(kind = "text") {
116
126
  if (this.parseError) {
@@ -149,7 +159,7 @@ export class FrontmatterController {
149
159
  }
150
160
  this.updateProperty(property.path, this.propertyManager.coerceValue(property.value, kind, property));
151
161
  }
152
- async commitCurrent() {
162
+ async commitCurrent(previousRecord) {
153
163
  if (this.suppressCommit) {
154
164
  return;
155
165
  }
@@ -167,6 +177,7 @@ export class FrontmatterController {
167
177
  ? `${markdown.slice(0, from)}${replacement}${markdown.slice(to)}`
168
178
  : undefined;
169
179
  const commit = {
180
+ previousRecord,
170
181
  record: cloneRecord(this.record),
171
182
  yaml,
172
183
  replacement,
@@ -0,0 +1,3 @@
1
+ /** Independent portable record authority for one rendered edit or commit. */
2
+ export declare function snapshotFrontmatterRecord(record: Readonly<Record<string, unknown>>): Readonly<Record<string, unknown>>;
3
+ //# sourceMappingURL=record-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-snapshot.d.ts","sourceRoot":"","sources":["../../../src/preview/frontmatter/record-snapshot.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASnC"}
@@ -0,0 +1,39 @@
1
+ /** Independent portable record authority for one rendered edit or commit. */
2
+ export function snapshotFrontmatterRecord(record) {
3
+ let snapshot;
4
+ try {
5
+ snapshot = JSON.parse(JSON.stringify(record));
6
+ }
7
+ catch {
8
+ snapshot = copyValue(record, new WeakMap());
9
+ }
10
+ freezeValue(snapshot, new WeakSet());
11
+ return snapshot;
12
+ }
13
+ function copyValue(value, seen) {
14
+ if (!value || typeof value !== "object")
15
+ return value;
16
+ if (value instanceof Date)
17
+ return value.toISOString();
18
+ const existing = seen.get(value);
19
+ if (existing)
20
+ return existing;
21
+ const copy = Array.isArray(value) ? [] : {};
22
+ seen.set(value, copy);
23
+ for (const [key, item] of Object.entries(value))
24
+ Object.defineProperty(copy, key, {
25
+ value: copyValue(item, seen),
26
+ enumerable: true,
27
+ writable: true,
28
+ configurable: true,
29
+ });
30
+ return copy;
31
+ }
32
+ function freezeValue(value, seen) {
33
+ if (!value || typeof value !== "object" || seen.has(value))
34
+ return;
35
+ seen.add(value);
36
+ for (const item of Object.values(value))
37
+ freezeValue(item, seen);
38
+ Object.freeze(value);
39
+ }
@@ -36,7 +36,7 @@ export type FrontmatterConfig = {
36
36
  propertySuggestions?: FrontmatterPropertySuggestionSource;
37
37
  valueSuggestions?: FrontmatterValueSuggestionSource;
38
38
  clipboard?: FrontmatterClipboard;
39
- onActionError?: (error: unknown, action: "copy" | "cut" | "paste" | "remove") => void;
39
+ onActionError?: (error: unknown, action: "copy" | "cut" | "paste" | "remove" | "edit") => void;
40
40
  };
41
41
  export type FrontmatterParseResult = {
42
42
  ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/preview/frontmatter/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/preview/frontmatter/types.ts"],"names":[],"mappings":"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"}
@@ -215,6 +215,7 @@
215
215
  "data-sourcepos",
216
216
  ],
217
217
  img: [...(defaultSchema.attributes?.img ?? []), "src", "alt", "title"],
218
+ li: [...(defaultSchema.attributes?.li ?? []), "dataTask"],
218
219
  code: [
219
220
  ...(defaultSchema.attributes?.code ?? []).filter(
220
221
  (attribute) =>
@@ -268,7 +269,7 @@
268
269
  type: "element",
269
270
  tagName: "wikilink",
270
271
  properties: linkNodeProperties(node),
271
- children: state.all(node),
272
+ children: Array.isArray(node.children) ? state.all(node) : [],
272
273
  });
273
274
  },
274
275
  link(state: any, node: any) {
@@ -307,7 +308,7 @@
307
308
  type: "element",
308
309
  tagName: "pathlink",
309
310
  properties: linkNodeProperties(node),
310
- children: state.all(node),
311
+ children: Array.isArray(node.children) ? state.all(node) : [],
311
312
  });
312
313
  },
313
314
  embed(state: any, node: any) {
@@ -315,7 +316,7 @@
315
316
  type: "element",
316
317
  tagName: "embed",
317
318
  properties: linkNodeProperties(node),
318
- children: state.all(node),
319
+ children: Array.isArray(node.children) ? state.all(node) : [],
319
320
  });
320
321
  },
321
322
  } as any,
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-preview.svelte.d.ts","sourceRoot":"","sources":["../../src/preview/markdown-preview.svelte.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAqCpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAwaJ,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"markdown-preview.svelte.d.ts","sourceRoot":"","sources":["../../src/preview/markdown-preview.svelte.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAqCpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAyaJ,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -10,6 +10,14 @@
10
10
  );
11
11
  }
12
12
 
13
+ :is(
14
+ .markdown-live-preview-mode .cm-editor,
15
+ .cm-editor.markdown-live-preview-mode
16
+ ) {
17
+ /* Match the inset owned by reading-mode list items. */
18
+ --hmd-unordered-list-marker-slot-width: 3ch;
19
+ }
20
+
13
21
  /* Keep authored pipe-table columns aligned without changing rendered tables. */
14
22
  :is(
15
23
  .markdown-source-mode .cm-editor.markdown-source-view,
@@ -142,6 +150,28 @@
142
150
  );
143
151
  }
144
152
 
153
+ :is(
154
+ .markdown-live-preview-mode .cm-editor,
155
+ .cm-editor.markdown-live-preview-mode
156
+ )
157
+ .cm-task-line:has(.task-list-label) {
158
+ padding-inline-start: calc(
159
+ var(
160
+ --hmd-indent-padding-measured,
161
+ var(--hmd-indent-padding-fallback, 0px)
162
+ ) +
163
+ 3ch
164
+ );
165
+ }
166
+
167
+ :is(
168
+ .markdown-live-preview-mode .cm-editor,
169
+ .cm-editor.markdown-live-preview-mode
170
+ )
171
+ .task-list-label {
172
+ display: inline-flex;
173
+ }
174
+
145
175
  :is(.markdown-editor-surface .cm-editor, .cm-editor.markdown-editor-surface)
146
176
  .cm-line
147
177
  > * {
@@ -492,11 +522,10 @@
492
522
  }
493
523
 
494
524
  .markdown-editor-surface .cm-line .cm-fold-indicator {
495
- display: inline-block;
525
+ display: inline;
496
526
  opacity: 0;
497
527
  overflow: visible;
498
528
  position: relative;
499
- vertical-align: middle;
500
529
  width: 0;
501
530
  }
502
531
 
@@ -522,7 +551,7 @@
522
551
  padding-inline-end: 0;
523
552
  position: absolute;
524
553
  top: 50%;
525
- transform: translateY(calc(-50% - 2px));
554
+ transform: translateY(-50%);
526
555
  width: 1rem;
527
556
  }
528
557
 
package/dist/types.d.ts CHANGED
@@ -10,6 +10,8 @@ export type MiraProps = {
10
10
  readonly?: boolean;
11
11
  placeholder?: string;
12
12
  lineWrapping?: boolean;
13
+ /** Show editor line numbers; defaults to true. */
14
+ lineNumbers?: boolean;
13
15
  spellcheck?: boolean;
14
16
  blockControls?: boolean | MiraBlockControlsOptions;
15
17
  indentGuides?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lapismd/mira",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Composable Markdown editor, extension SDK, preview renderer, and UI for Mira.",
5
5
  "author": "Steve Juma <help@lapis.md>",
6
6
  "license": "Apache-2.0",
@@ -87,7 +87,7 @@
87
87
  "@dnd-kit/svelte": "^0.4.0",
88
88
  "@fontsource/source-code-pro": "^5.2.7",
89
89
  "@lucide/svelte": "^0.525.0",
90
- "bits-ui": "2.19.5",
90
+ "bits-ui": "2.20.2",
91
91
  "clsx": "^2.1.1",
92
92
  "hast-util-to-text": "^4.0.2",
93
93
  "katex": "0.18.10",