@lapismd/mira 0.0.5 → 0.1.0

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 (114) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/extensions/index.d.ts +12 -7
  3. package/dist/extensions/index.d.ts.map +1 -1
  4. package/dist/extensions/index.js +13 -3
  5. package/dist/extensions/inline-links.d.ts +8 -0
  6. package/dist/extensions/inline-links.d.ts.map +1 -0
  7. package/dist/extensions/inline-links.js +120 -0
  8. package/dist/extensions/markdown-editing.d.ts +32 -0
  9. package/dist/extensions/markdown-editing.d.ts.map +1 -0
  10. package/dist/extensions/markdown-editing.js +1 -0
  11. package/dist/internal/codemirror/base/index.d.ts.map +1 -1
  12. package/dist/internal/codemirror/base/index.js +3 -0
  13. package/dist/internal/codemirror/markdown/index.d.ts.map +1 -1
  14. package/dist/internal/codemirror/markdown/index.js +2 -1
  15. package/dist/internal/codemirror/rich/block-controls.d.ts.map +1 -1
  16. package/dist/internal/codemirror/rich/block-controls.js +2 -0
  17. package/dist/internal/codemirror/rich/block-gutter-accessibility.d.ts +15 -0
  18. package/dist/internal/codemirror/rich/block-gutter-accessibility.d.ts.map +1 -0
  19. package/dist/internal/codemirror/rich/block-gutter-accessibility.js +67 -0
  20. package/dist/internal/codemirror/rich/index.d.ts.map +1 -1
  21. package/dist/internal/codemirror/rich/index.js +43 -9
  22. package/dist/internal/codemirror/rich/utils/images.d.ts +6 -3
  23. package/dist/internal/codemirror/rich/utils/images.d.ts.map +1 -1
  24. package/dist/internal/codemirror/rich/utils/images.js +16 -29
  25. package/dist/internal/codemirror/rich/utils/references.d.ts +15 -0
  26. package/dist/internal/codemirror/rich/utils/references.d.ts.map +1 -0
  27. package/dist/internal/codemirror/rich/utils/references.js +86 -0
  28. package/dist/internal/codemirror/rich/widgets/preview-widgets.d.ts +3 -0
  29. package/dist/internal/codemirror/rich/widgets/preview-widgets.d.ts.map +1 -1
  30. package/dist/internal/codemirror/rich/widgets/preview-widgets.js +31 -3
  31. package/dist/internal/inline-links/icons.d.ts +115 -0
  32. package/dist/internal/inline-links/icons.d.ts.map +1 -0
  33. package/dist/internal/inline-links/icons.js +148 -0
  34. package/dist/internal/inline-links/live-preview.d.ts +5 -0
  35. package/dist/internal/inline-links/live-preview.d.ts.map +1 -0
  36. package/dist/internal/inline-links/live-preview.js +135 -0
  37. package/dist/internal/inline-links/registry.d.ts +44 -0
  38. package/dist/internal/inline-links/registry.d.ts.map +1 -0
  39. package/dist/internal/inline-links/registry.js +153 -0
  40. package/dist/mira.svelte.d.ts +1 -1
  41. package/dist/preview/asset-url-lease.d.ts +6 -0
  42. package/dist/preview/asset-url-lease.d.ts.map +1 -0
  43. package/dist/preview/asset-url-lease.js +28 -0
  44. package/dist/preview/components/embed.svelte +10 -5
  45. package/dist/preview/components/embed.svelte.d.ts.map +1 -1
  46. package/dist/preview/components/image.svelte +7 -2
  47. package/dist/preview/components/image.svelte.d.ts.map +1 -1
  48. package/dist/preview/components/inline-link.svelte +94 -0
  49. package/dist/preview/components/inline-link.svelte.d.ts +16 -0
  50. package/dist/preview/components/inline-link.svelte.d.ts.map +1 -0
  51. package/dist/preview/components/link-destination-tooltip.svelte +63 -0
  52. package/dist/preview/components/link-destination-tooltip.svelte.d.ts +7 -0
  53. package/dist/preview/components/link-destination-tooltip.svelte.d.ts.map +1 -0
  54. package/dist/preview/components/link-site-icon.svelte +39 -0
  55. package/dist/preview/components/link-site-icon.svelte.d.ts +10 -0
  56. package/dist/preview/components/link-site-icon.svelte.d.ts.map +1 -0
  57. package/dist/preview/components/link.svelte +19 -9
  58. package/dist/preview/components/link.svelte.d.ts.map +1 -1
  59. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte +6 -1
  60. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte.d.ts.map +1 -1
  61. package/dist/preview/editable-markdown-preview/editing-session.d.ts +2 -0
  62. package/dist/preview/editable-markdown-preview/editing-session.d.ts.map +1 -1
  63. package/dist/preview/editable-markdown-preview/editing-session.js +59 -6
  64. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts +6 -8
  65. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts.map +1 -1
  66. package/dist/preview/editable-markdown-preview/serialized-writer.js +76 -6
  67. package/dist/preview/index.d.ts +2 -0
  68. package/dist/preview/index.d.ts.map +1 -1
  69. package/dist/preview/index.js +2 -0
  70. package/dist/preview/markdown-preview.svelte +11 -0
  71. package/dist/preview/markdown-preview.svelte.d.ts.map +1 -1
  72. package/dist/preview/renderer/utils.js +0 -2
  73. package/dist/preview/styles/inline-links.css +38 -0
  74. package/dist/preview/styles/links-embeds-tags.css +2 -2
  75. package/dist/preview/styles/mermaid-highlight.css +4 -3
  76. package/dist/preview/styles/references.css +72 -0
  77. package/dist/preview/styles.css +2 -0
  78. package/dist/tables/editor-column.svelte +20 -7
  79. package/dist/tables/editor-column.svelte.d.ts +2 -0
  80. package/dist/tables/editor-column.svelte.d.ts.map +1 -1
  81. package/dist/tables/editor-table.svelte +4 -0
  82. package/dist/tables/editor-table.svelte.d.ts +2 -0
  83. package/dist/tables/editor-table.svelte.d.ts.map +1 -1
  84. package/dist/tables/grid-editor-column.svelte +6 -2
  85. package/dist/tables/grid-editor-column.svelte.d.ts +2 -0
  86. package/dist/tables/grid-editor-column.svelte.d.ts.map +1 -1
  87. package/dist/tables/grid-editor-table.svelte +4 -0
  88. package/dist/tables/grid-editor-table.svelte.d.ts +2 -0
  89. package/dist/tables/grid-editor-table.svelte.d.ts.map +1 -1
  90. package/dist/tables/index.d.ts +1 -0
  91. package/dist/tables/index.d.ts.map +1 -1
  92. package/dist/tables/index.js +1 -0
  93. package/dist/tables/markdown-table-data-cell.svelte +4 -0
  94. package/dist/tables/markdown-table-data-cell.svelte.d.ts +2 -0
  95. package/dist/tables/markdown-table-data-cell.svelte.d.ts.map +1 -1
  96. package/dist/tables/table-reader.svelte +101 -0
  97. package/dist/tables/table-reader.svelte.d.ts +21 -0
  98. package/dist/tables/table-reader.svelte.d.ts.map +1 -0
  99. package/dist/tables/types.d.ts +2 -0
  100. package/dist/tables/types.d.ts.map +1 -1
  101. package/dist/tables/widgets/grid-table-widget.d.ts +1 -1
  102. package/dist/tables/widgets/grid-table-widget.d.ts.map +1 -1
  103. package/dist/tables/widgets/grid-table-widget.js +5 -2
  104. package/dist/tables/widgets/lifecycle.d.ts +4 -0
  105. package/dist/tables/widgets/lifecycle.d.ts.map +1 -0
  106. package/dist/tables/widgets/lifecycle.js +13 -0
  107. package/dist/tables/widgets/pipe-table-widget.d.ts +1 -1
  108. package/dist/tables/widgets/pipe-table-widget.d.ts.map +1 -1
  109. package/dist/tables/widgets/pipe-table-widget.js +5 -2
  110. package/dist/ui/context-menu/context-menu-radio-group.svelte.d.ts +1 -1
  111. package/dist/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +1 -1
  112. package/dist/ui/toolbar/toolbar-group.svelte.d.ts +1 -1
  113. package/inline-links-NOTICE.md +31 -0
  114. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,GACT,CAAC;AACF,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,cAAc,iBAAiB,CAAC;AAChC,mBAAmB,kBAAkB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC5C,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,eAAe,CAAC;AACvB,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,GACT,CAAC;AACF,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,cAAc,iBAAiB,CAAC;AAChC,mBAAmB,kBAAkB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC5C,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,eAAe,CAAC;AACvB,eAAe,eAAe,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import MarkdownPreview from "./markdown-preview.svelte";
2
+ export { default as InlineLink } from "./components/inline-link.svelte";
3
+ export { default as LinkSiteIcon } from "./components/link-site-icon.svelte";
2
4
  import MarkdownOutline from "./markdown-outline.svelte";
3
5
  import Markdown from "./renderer/markdown.svelte";
4
6
  import FileEmbed from "./file-embed.svelte";
@@ -215,6 +215,17 @@
215
215
  "data-sourcepos",
216
216
  ],
217
217
  img: [...(defaultSchema.attributes?.img ?? []), "src", "alt", "title"],
218
+ code: [
219
+ ...(defaultSchema.attributes?.code ?? []).filter(
220
+ (attribute) =>
221
+ !Array.isArray(attribute) || attribute[0] !== "className",
222
+ ),
223
+ ["className", /^language-/, "hljs"],
224
+ ],
225
+ span: [
226
+ ...(defaultSchema.attributes?.span ?? []),
227
+ ["className", /^hljs-/, "code-line", "highlighted-code-line"],
228
+ ],
218
229
  a: [
219
230
  ...(defaultSchema.attributes?.a ?? []),
220
231
  "href",
@@ -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;AA6ZJ,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;AAwaJ,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -114,7 +114,6 @@ const svgCamelCaseAttributes = new Set([
114
114
  "markerEnd",
115
115
  "markerMid",
116
116
  "markerStart",
117
- "preserveAspectRatio",
118
117
  "strokeDasharray",
119
118
  "strokeDashoffset",
120
119
  "strokeLinecap",
@@ -123,7 +122,6 @@ const svgCamelCaseAttributes = new Set([
123
122
  "strokeOpacity",
124
123
  "strokeWidth",
125
124
  "textAnchor",
126
- "viewBox",
127
125
  "xlinkHref",
128
126
  ]);
129
127
  const htmlCamelCaseAttributes = {
@@ -0,0 +1,38 @@
1
+ .mira-link-site-icon {
2
+ display: inline-block;
3
+ width: 0.95em;
4
+ height: 0.95em;
5
+ margin-inline-end: 0.25em;
6
+ vertical-align: -0.12em;
7
+ color: inherit;
8
+ }
9
+
10
+ .mira-inline-link,
11
+ .markdown-rendered a.mira-inline-link,
12
+ .markdown-preview-surface .markdown a.mira-inline-link {
13
+ color: var(
14
+ --markdown-link-external-color,
15
+ var(--mira-link, var(--mira-accent))
16
+ );
17
+ text-decoration: underline;
18
+ text-underline-offset: 0.2em;
19
+ overflow-wrap: anywhere;
20
+ background-image: none;
21
+ padding-inline-end: 0;
22
+ filter: none;
23
+ }
24
+
25
+ .mira-inline-link:hover,
26
+ .markdown-rendered a.mira-inline-link:hover {
27
+ color: var(--markdown-link-color-hover, var(--mira-link, var(--mira-accent)));
28
+ }
29
+
30
+ .mira-inline-link:focus-visible {
31
+ outline: 2px solid var(--mira-focus-ring);
32
+ outline-offset: 2px;
33
+ border-radius: 2px;
34
+ }
35
+
36
+ .mira-inline-link__destination {
37
+ overflow-wrap: anywhere;
38
+ }
@@ -31,7 +31,8 @@
31
31
  text-decoration-line: var(--markdown-link-external-decoration);
32
32
  }
33
33
 
34
- .markdown-live-preview-mode .cm-external-link .cm-link,
34
+ .markdown-live-preview-mode .cm-external-link .cm-link-text,
35
+ .markdown-live-preview-mode .cm-link-text > .cm-external-link > .cm-url,
35
36
  .markdown-live-preview-mode .cm-url.cm-external-link {
36
37
  background-image:
37
38
  linear-gradient(transparent, transparent),
@@ -43,7 +44,6 @@
43
44
  color: var(--markdown-link-external-color);
44
45
  filter: var(--markdown-link-external-filter);
45
46
  padding-inline-end: 0.9em;
46
- text-decoration-line: var(--markdown-link-external-decoration);
47
47
  }
48
48
 
49
49
  .mira-link-preview {
@@ -87,9 +87,10 @@
87
87
  color: var(--mira-syntax-keyword);
88
88
  }
89
89
 
90
- .markdown-preview-surface :is(.hljs-title, .hljs-title.function_),
91
- .markdown-rendered :is(.hljs-title, .hljs-title.function_),
92
- .markdown-widget-shell :is(.hljs-title, .hljs-title.function_) {
90
+ .markdown-preview-surface
91
+ :is(.hljs-title, .hljs-title.function_, .hljs-section),
92
+ .markdown-rendered :is(.hljs-title, .hljs-title.function_, .hljs-section),
93
+ .markdown-widget-shell :is(.hljs-title, .hljs-title.function_, .hljs-section) {
93
94
  color: var(--mira-syntax-heading);
94
95
  }
95
96
 
@@ -0,0 +1,72 @@
1
+ .mira-reference-definition.mira-reference--link {
2
+ display: flex;
3
+ align-items: baseline;
4
+ gap: 0.5em;
5
+ min-width: 0;
6
+ padding-block: 0.25em;
7
+ }
8
+
9
+ .mira-reference--link .mira-reference__label {
10
+ color: var(--mira-muted-foreground);
11
+ flex: none;
12
+ font-size: 0.75em;
13
+ font-weight: 650;
14
+ letter-spacing: 0.04em;
15
+ max-inline-size: 40%;
16
+ overflow: hidden;
17
+ text-overflow: ellipsis;
18
+ white-space: nowrap;
19
+ }
20
+
21
+ .mira-reference--link > p {
22
+ min-width: 0;
23
+ margin: 0;
24
+ overflow-wrap: anywhere;
25
+ }
26
+
27
+ .mira-reference--image {
28
+ position: relative;
29
+ display: inline-block;
30
+ box-sizing: border-box;
31
+ max-width: 100%;
32
+ border: 1px solid var(--mira-border);
33
+ border-radius: var(--mira-radius, 8px);
34
+ padding: 0.75rem;
35
+ background: var(--mira-background);
36
+ }
37
+
38
+ /* Give percentage-constrained SVGs a definite containing width in block frames. */
39
+ .mira-rich-widget--block.mira-reference--image .mira-markdown-image-root,
40
+ .mira-rich-widget--block.mira-reference--image .mira-markdown-image__trigger {
41
+ display: block;
42
+ }
43
+
44
+ .mira-rich-widget--block.mira-reference--image .mira-markdown-image__trigger {
45
+ width: 100%;
46
+ }
47
+
48
+ .mira-reference--image > .mira-reference__label {
49
+ position: absolute;
50
+ inset-block-start: 0;
51
+ inset-inline-end: 0;
52
+ z-index: 1;
53
+ border-end-start-radius: var(--mira-radius, 8px);
54
+ border-start-end-radius: calc(var(--mira-radius, 8px) - 1px);
55
+ background: var(--mira-accent);
56
+ color: var(--mira-accent-foreground);
57
+ font-size: 0.75em;
58
+ font-weight: 650;
59
+ letter-spacing: 0.04em;
60
+ padding: 0.35em 0.65em;
61
+ box-sizing: border-box;
62
+ max-inline-size: 75%;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .mira-reference--image .mira-rich-widget__source-toggle {
70
+ inset-inline-start: 0.25rem;
71
+ inset-inline-end: auto;
72
+ }
@@ -10,6 +10,8 @@
10
10
  @import "./styles/blockquotes-footnotes.css";
11
11
  @import "./styles/code-katex.css";
12
12
  @import "./styles/links-embeds-tags.css";
13
+ @import "./styles/inline-links.css";
14
+ @import "./styles/references.css";
13
15
  @import "./styles/callouts.css";
14
16
  @import "./styles/images.css";
15
17
  @import "./styles/tables.css";
@@ -5,8 +5,10 @@
5
5
  import { EditorView } from "@codemirror/view";
6
6
  import { EditorState } from "@codemirror/state";
7
7
  import { cn } from "./utils";
8
- import { tick } from "svelte";
8
+ import { tick, onDestroy } from "svelte";
9
9
  import { toHtml } from "./utils";
10
+ import { MarkdownPreview } from "@lapismd/mira/preview";
11
+ import type { MiraExtension } from "../extensions";
10
12
  import { createInlineTableMarkdownExtensions } from "./inline-editor-extensions";
11
13
 
12
14
  let {
@@ -14,6 +16,7 @@
14
16
  onContentChange,
15
17
  onEdit = () => {},
16
18
  readonly = false,
19
+ extensions = [],
17
20
  class: className,
18
21
  }: {
19
22
  node: Mdast.Nodes;
@@ -21,6 +24,7 @@
21
24
  onContentChange: (value: string) => void;
22
25
  onEdit?: (evt: MouseEvent) => void;
23
26
  readonly?: boolean;
27
+ extensions?: MiraExtension[];
24
28
  } = $props();
25
29
  let content = $derived(TableNode.toMarkdown(node).trim());
26
30
  let view: EditorView = new EditorView({
@@ -42,6 +46,7 @@
42
46
  }),
43
47
  });
44
48
 
49
+ onDestroy(() => view.destroy());
45
50
  let editing: boolean = $state(false);
46
51
 
47
52
  const codeMirror = (node: HTMLDivElement, content: string) => {
@@ -97,9 +102,13 @@
97
102
  <div class="cm-scroller">
98
103
  <div class="cm-content">
99
104
  {#if content}
100
- {#await toHtml(content) then markup}
101
- {@html markup}
102
- {/await}
105
+ {#if extensions.length}<MarkdownPreview
106
+ inline
107
+ value={content}
108
+ {extensions}
109
+ />{:else}{#await toHtml(content) then markup}
110
+ {@html markup}
111
+ {/await}{/if}
103
112
  {:else}
104
113
  &NonBreakingSpace;
105
114
  {/if}
@@ -115,9 +124,13 @@
115
124
  <div class="cm-scroller">
116
125
  <div class="cm-content">
117
126
  {#if content}
118
- {#await toHtml(content) then markup}
119
- {@html markup}
120
- {/await}
127
+ {#if extensions.length}<MarkdownPreview
128
+ inline
129
+ value={content}
130
+ {extensions}
131
+ />{:else}{#await toHtml(content) then markup}
132
+ {@html markup}
133
+ {/await}{/if}
121
134
  {:else}
122
135
  &NonBreakingSpace;
123
136
  {/if}
@@ -1,10 +1,12 @@
1
1
  import type * as Mdast from "mdast";
2
+ import type { MiraExtension } from "../extensions";
2
3
  type $$ComponentProps = {
3
4
  node: Mdast.Nodes;
4
5
  class?: string;
5
6
  onContentChange: (value: string) => void;
6
7
  onEdit?: (evt: MouseEvent) => void;
7
8
  readonly?: boolean;
9
+ extensions?: MiraExtension[];
8
10
  };
9
11
  declare const EditorColumn: import("svelte").Component<$$ComponentProps, {}, "">;
10
12
  type EditorColumn = ReturnType<typeof EditorColumn>;
@@ -1 +1 @@
1
- {"version":3,"file":"editor-column.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/editor-column.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AASnC,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA4HJ,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"editor-column.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/editor-column.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAQpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGlD,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B,CAAC;AAgIJ,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  // @ts-nocheck
3
3
  import { TableNode } from "./table-node";
4
+ import type { MiraExtension } from "../extensions";
4
5
  import * as Table from "@lapismd/mira/ui/table";
5
6
  import { cn } from "./utils";
6
7
  import ColumnEditor from "./editor-column.svelte";
@@ -45,12 +46,14 @@
45
46
  onDelete = () => {},
46
47
  onMouseUp = () => {},
47
48
  selectedCells = [],
49
+ extensions = [],
48
50
  }: {
49
51
  node: TableNode;
50
52
  onChange?: (data: string, props?: Record<string, any>) => void;
51
53
  onDelete?: (evt: Event) => void;
52
54
  onMouseUp?: (evt: MouseEvent) => void;
53
55
  selectedCells?: Array<[number, number]>;
56
+ extensions?: MiraExtension[];
54
57
  } = $props();
55
58
  let tableVersion = $state(0);
56
59
  let mdastNode = $derived.by(() => {
@@ -765,6 +768,7 @@
765
768
  hProperties.displayColIndex ?? index}
766
769
  {@const id = [sourceRowIndex, sourceColIndex].join(",")}
767
770
  <MarkdownTableDataCell
771
+ {extensions}
768
772
  node={col}
769
773
  {rowIndex}
770
774
  colIndex={displayColIndex}
@@ -1,10 +1,12 @@
1
1
  import { TableNode } from "./table-node";
2
+ import type { MiraExtension } from "../extensions";
2
3
  type $$ComponentProps = {
3
4
  node: TableNode;
4
5
  onChange?: (data: string, props?: Record<string, any>) => void;
5
6
  onDelete?: (evt: Event) => void;
6
7
  onMouseUp?: (evt: MouseEvent) => void;
7
8
  selectedCells?: Array<[number, number]>;
9
+ extensions?: MiraExtension[];
8
10
  };
9
11
  declare const EditorTable: import("svelte").Component<$$ComponentProps, {}, "">;
10
12
  type EditorTable = ReturnType<typeof EditorTable>;
@@ -1 +1 @@
1
- {"version":3,"file":"editor-table.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/editor-table.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAuCxC,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACzC,CAAC;AA2wBJ,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"editor-table.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/editor-table.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuClD,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B,CAAC;AA6wBJ,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -3,17 +3,20 @@
3
3
  import { EditorView, keymap } from "@codemirror/view";
4
4
  import { EditorState } from "@codemirror/state";
5
5
  import { cn } from "./utils";
6
- import { tick } from "svelte";
6
+ import { tick, onDestroy } from "svelte";
7
7
  import { MarkdownPreview } from "@lapismd/mira/preview";
8
+ import type { MiraExtension } from "../extensions";
8
9
  import { createInlineTableMarkdownExtensions } from "./inline-editor-extensions";
9
10
 
10
11
  let {
11
12
  content,
13
+ extensions = [],
12
14
  onContentChange,
13
15
  onEdit = () => true,
14
16
  class: className,
15
17
  }: {
16
18
  content: string;
19
+ extensions?: MiraExtension[];
17
20
  class?: string;
18
21
  onContentChange: (value: string) => void;
19
22
  onEdit?: (evt: MouseEvent) => boolean;
@@ -50,6 +53,7 @@
50
53
  }),
51
54
  });
52
55
 
56
+ onDestroy(() => view.destroy());
53
57
  let editing: boolean = $state(false);
54
58
 
55
59
  const codeMirror = (node: HTMLDivElement, content: string) => {
@@ -108,7 +112,7 @@
108
112
  <div class="cm-scroller">
109
113
  <div class="cm-content">
110
114
  {#if content}
111
- <MarkdownPreview inline value={content} />
115
+ <MarkdownPreview inline value={content} {extensions} />
112
116
  {:else}
113
117
  &NonBreakingSpace;
114
118
  {/if}
@@ -1,5 +1,7 @@
1
+ import type { MiraExtension } from "../extensions";
1
2
  type $$ComponentProps = {
2
3
  content: string;
4
+ extensions?: MiraExtension[];
3
5
  class?: string;
4
6
  onContentChange: (value: string) => void;
5
7
  onEdit?: (evt: MouseEvent) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"grid-editor-column.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/grid-editor-column.svelte.ts"],"names":[],"mappings":"AAWC,KAAK,gBAAgB,GAAI;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;CACvC,CAAC;AAmHJ,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"grid-editor-column.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/grid-editor-column.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGlD,KAAK,gBAAgB,GAAI;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;CACvC,CAAC;AAsHJ,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -4,6 +4,7 @@
4
4
  import * as Table from "@lapismd/mira/ui/table";
5
5
  import { cn } from "./utils";
6
6
  import ColumnEditor from "./grid-editor-column.svelte";
7
+ import type { MiraExtension } from "../extensions";
7
8
  import * as Tooltip from "@lapismd/mira/ui/tooltip";
8
9
  import Delete from "@lucide/svelte/icons/trash";
9
10
  import Elipsis from "@lucide/svelte/icons/ellipsis";
@@ -30,12 +31,14 @@
30
31
  onDelete = () => {},
31
32
  onMouseUp = () => {},
32
33
  selectedCells = [],
34
+ extensions = [],
33
35
  }: {
34
36
  node: GridTableNode;
35
37
  onChange?: (data: string, props?: Record<string, any>) => void;
36
38
  onDelete?: (evt: Event) => void;
37
39
  onMouseUp?: (evt: MouseEvent) => void;
38
40
  selectedCells?: Array<[number, number]>;
41
+ extensions?: MiraExtension[];
39
42
  } = $props();
40
43
  let tableVersion = $state(0);
41
44
  let columnCount = $derived.by(() => {
@@ -1107,6 +1110,7 @@
1107
1110
  })}
1108
1111
  >
1109
1112
  <ColumnEditor
1113
+ {extensions}
1110
1114
  content={cell.cell.content}
1111
1115
  class={cn({
1112
1116
  "text-left": cell.cell.align === "left",
@@ -1,10 +1,12 @@
1
1
  import { GridTableNode } from "./grid-table";
2
+ import type { MiraExtension } from "../extensions";
2
3
  type $$ComponentProps = {
3
4
  node: GridTableNode;
4
5
  onChange?: (data: string, props?: Record<string, any>) => void;
5
6
  onDelete?: (evt: Event) => void;
6
7
  onMouseUp?: (evt: MouseEvent) => void;
7
8
  selectedCells?: Array<[number, number]>;
9
+ extensions?: MiraExtension[];
8
10
  };
9
11
  declare const GridEditorTable: import("svelte").Component<$$ComponentProps, {}, "">;
10
12
  type GridEditorTable = ReturnType<typeof GridEditorTable>;
@@ -1 +1 @@
1
- {"version":3,"file":"grid-editor-table.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/grid-editor-table.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAwB1D,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACzC,CAAC;AAugCJ,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"grid-editor-table.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/grid-editor-table.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAI3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAqBlD,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B,CAAC;AAygCJ,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -7,6 +7,7 @@ export { GridTableNode, type ColType, type GridType, type RowType, } from "./gri
7
7
  export { $convertTableElement, TableNode } from "./table-node";
8
8
  import EditorColumn from "./editor-column.svelte";
9
9
  import EditorTable from "./editor-table.svelte";
10
+ export { default as TableReader } from "./table-reader.svelte";
10
11
  import GridEditorColumn from "./grid-editor-column.svelte";
11
12
  import GridEditorTable from "./grid-editor-table.svelte";
12
13
  export { EditorColumn, EditorColumn as column, EditorTable, EditorTable as Table, GridEditorColumn, GridEditorColumn as GridColumn, GridEditorTable, GridEditorTable as GridTable, };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tables/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,OAAO,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EACL,YAAY,EACZ,YAAY,IAAI,MAAM,EACtB,WAAW,EACX,WAAW,IAAI,KAAK,EACpB,gBAAgB,EAChB,gBAAgB,IAAI,UAAU,EAC9B,eAAe,EACf,eAAe,IAAI,SAAS,GAC7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tables/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,OAAO,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EACL,YAAY,EACZ,YAAY,IAAI,MAAM,EACtB,WAAW,EACX,WAAW,IAAI,KAAK,EACpB,gBAAgB,EAChB,gBAAgB,IAAI,UAAU,EAC9B,eAAe,EACf,eAAe,IAAI,SAAS,GAC7B,CAAC"}
@@ -7,6 +7,7 @@ export { GridTableNode, } from "./grid-table";
7
7
  export { $convertTableElement, TableNode } from "./table-node";
8
8
  import EditorColumn from "./editor-column.svelte";
9
9
  import EditorTable from "./editor-table.svelte";
10
+ export { default as TableReader } from "./table-reader.svelte";
10
11
  import GridEditorColumn from "./grid-editor-column.svelte";
11
12
  import GridEditorTable from "./grid-editor-table.svelte";
12
13
  export { EditorColumn, EditorColumn as column, EditorTable, EditorTable as Table, GridEditorColumn, GridEditorColumn as GridColumn, GridEditorTable, GridEditorTable as GridTable, };
@@ -5,6 +5,7 @@
5
5
  import { cn } from "./utils";
6
6
  import type * as Mdast from "mdast";
7
7
  import ColumnEditor from "./editor-column.svelte";
8
+ import type { MiraExtension } from "../extensions";
8
9
  import type { MarkdownTableDragSource } from "./markdown-table-dnd";
9
10
  import {
10
11
  dropIndicatorClasses,
@@ -14,6 +15,7 @@
14
15
 
15
16
  type Props = {
16
17
  node: Mdast.Nodes;
18
+ extensions?: MiraExtension[];
17
19
  rowIndex: number;
18
20
  colIndex: number;
19
21
  sourceRowIndex?: number;
@@ -33,6 +35,7 @@
33
35
 
34
36
  let {
35
37
  node,
38
+ extensions = [],
36
39
  rowIndex,
37
40
  colIndex,
38
41
  sourceRowIndex = rowIndex,
@@ -109,6 +112,7 @@
109
112
  )}
110
113
  >
111
114
  <ColumnEditor
115
+ {extensions}
112
116
  {node}
113
117
  {onContentChange}
114
118
  {readonly}
@@ -1,7 +1,9 @@
1
1
  import type * as Mdast from "mdast";
2
+ import type { MiraExtension } from "../extensions";
2
3
  import type { MarkdownTableDragSource } from "./markdown-table-dnd";
3
4
  type Props = {
4
5
  node: Mdast.Nodes;
6
+ extensions?: MiraExtension[];
5
7
  rowIndex: number;
6
8
  colIndex: number;
7
9
  sourceRowIndex?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-table-data-cell.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/markdown-table-data-cell.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAQlE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAwFJ,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"markdown-table-data-cell.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/markdown-table-data-cell.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAQlE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AA0FJ,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,101 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import { TableNode } from "./table-node";
4
+ import { MarkdownPreview } from "@lapismd/mira/preview";
5
+ import type { MiraExtension } from "../extensions";
6
+ import * as Table from "@lapismd/mira/ui/table";
7
+
8
+ let {
9
+ markdown,
10
+ cell,
11
+ breakAfterRows = [],
12
+ afterRow,
13
+ extensions = [],
14
+ label = "Markdown table",
15
+ showHeader = true,
16
+ }: {
17
+ markdown: string;
18
+ /** Render original source-aware cells without enabling table mutations. */
19
+ cell?: Snippet<[{ row: number; column: number; text: string }]>;
20
+ /** Zero-based source rows, including the header at row zero. */
21
+ breakAfterRows?: readonly number[];
22
+ afterRow?: Snippet<[number]>;
23
+ extensions?: MiraExtension[];
24
+ label?: string;
25
+ showHeader?: boolean;
26
+ } = $props();
27
+ const table = $derived(TableNode.fromMarkdown(markdown)?.getMdastNode());
28
+ const rows = $derived(table?.children ?? []);
29
+ const segments = $derived.by(() => {
30
+ const ends = [...new Set([...breakAfterRows, rows.length - 1])]
31
+ .filter((row) => Number.isInteger(row) && row >= 0 && row < rows.length)
32
+ .sort((a, b) => a - b);
33
+ let start = 0;
34
+ return ends.map((end) => {
35
+ const segment = { start, end };
36
+ start = end + 1;
37
+ return segment;
38
+ });
39
+ });
40
+ </script>
41
+
42
+ <div class="mira-table-reader">
43
+ {#each segments as segment (segment.start)}
44
+ <div class="mira-table-reader__scroll">
45
+ <Table.Root aria-label={label} class="mira-table-reader__table">
46
+ <Table.Body>
47
+ {#each rows.slice(segment.start, segment.end + 1) as row, index (segment.start + index)}
48
+ {@const rowIndex = segment.start + index}
49
+ {#if showHeader || rowIndex > 0}
50
+ <Table.Row>
51
+ {#each row.children as value, column (column)}
52
+ {@const text = TableNode.toMarkdown(value).trim()}
53
+ <svelte:element
54
+ this={rowIndex === 0 ? "th" : "td"}
55
+ scope={rowIndex === 0 ? "col" : undefined}
56
+ style:text-align={table?.align?.[column] ?? "left"}
57
+ >
58
+ {#if cell}{@render cell({ row: rowIndex, column, text })}
59
+ {:else}<MarkdownPreview
60
+ value={text}
61
+ inline
62
+ htmlPolicy="safe"
63
+ {extensions}
64
+ />{/if}
65
+ </svelte:element>
66
+ {/each}
67
+ </Table.Row>
68
+ {/if}
69
+ {/each}
70
+ </Table.Body>
71
+ </Table.Root>
72
+ </div>
73
+ {#if breakAfterRows.includes(segment.end)}{@render afterRow?.(
74
+ segment.end,
75
+ )}{/if}
76
+ {/each}
77
+ </div>
78
+
79
+ <style>
80
+ .mira-table-reader {
81
+ min-width: 0;
82
+ }
83
+ .mira-table-reader__scroll {
84
+ overflow-x: auto;
85
+ }
86
+ .mira-table-reader :global(.mira-table-reader__table) {
87
+ border-collapse: collapse;
88
+ table-layout: fixed;
89
+ width: 100%;
90
+ }
91
+ .mira-table-reader
92
+ :global(.mira-table-reader__table > tbody > tr > :is(td, th)) {
93
+ border: 1px solid var(--mira-border, var(--border));
94
+ padding: var(--mira-table-reader-cell-padding, 0.375rem 0.625rem);
95
+ vertical-align: top;
96
+ }
97
+ .mira-table-reader :global(.mira-table-reader__table > tbody > tr > th) {
98
+ background: var(--mira-muted, var(--muted));
99
+ font-weight: 600;
100
+ }
101
+ </style>