@lapismd/mira 0.0.1

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 (911) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE.md +4 -0
  3. package/README.md +52 -0
  4. package/dist/codemirror.d.ts +5 -0
  5. package/dist/codemirror.d.ts.map +1 -0
  6. package/dist/codemirror.js +4 -0
  7. package/dist/core/code-mirror.d.ts +29 -0
  8. package/dist/core/code-mirror.d.ts.map +1 -0
  9. package/dist/core/code-mirror.js +74 -0
  10. package/dist/core/code-mirror.test.d.ts +2 -0
  11. package/dist/core/code-mirror.test.d.ts.map +1 -0
  12. package/dist/core/code-mirror.test.js +68 -0
  13. package/dist/core/images.d.ts +30 -0
  14. package/dist/core/images.d.ts.map +1 -0
  15. package/dist/core/images.js +226 -0
  16. package/dist/core/images.test.d.ts +2 -0
  17. package/dist/core/images.test.d.ts.map +1 -0
  18. package/dist/core/images.test.js +109 -0
  19. package/dist/core/index.d.ts +69 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +138 -0
  22. package/dist/core/index.test.d.ts +2 -0
  23. package/dist/core/index.test.d.ts.map +1 -0
  24. package/dist/core/index.test.js +11 -0
  25. package/dist/core/markdown-actions.d.ts +11 -0
  26. package/dist/core/markdown-actions.d.ts.map +1 -0
  27. package/dist/core/markdown-actions.js +603 -0
  28. package/dist/core/markdown-actions.test.d.ts +2 -0
  29. package/dist/core/markdown-actions.test.d.ts.map +1 -0
  30. package/dist/core/markdown-actions.test.js +182 -0
  31. package/dist/extensions/doodle-dividers.d.ts +44 -0
  32. package/dist/extensions/doodle-dividers.d.ts.map +1 -0
  33. package/dist/extensions/doodle-dividers.js +909 -0
  34. package/dist/extensions/doodle-dividers.test.d.ts +2 -0
  35. package/dist/extensions/doodle-dividers.test.d.ts.map +1 -0
  36. package/dist/extensions/doodle-dividers.test.js +296 -0
  37. package/dist/extensions/index.d.ts +342 -0
  38. package/dist/extensions/index.d.ts.map +1 -0
  39. package/dist/extensions/index.js +279 -0
  40. package/dist/extensions/index.test.d.ts +2 -0
  41. package/dist/extensions/index.test.d.ts.map +1 -0
  42. package/dist/extensions/index.test.js +283 -0
  43. package/dist/extensions/selection-toolbar.d.ts +6 -0
  44. package/dist/extensions/selection-toolbar.d.ts.map +1 -0
  45. package/dist/extensions/selection-toolbar.js +14 -0
  46. package/dist/index.d.ts +9 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +5 -0
  49. package/dist/index.test.d.ts +2 -0
  50. package/dist/index.test.d.ts.map +1 -0
  51. package/dist/index.test.js +64 -0
  52. package/dist/internal/appearance-context.d.ts +12 -0
  53. package/dist/internal/appearance-context.d.ts.map +1 -0
  54. package/dist/internal/appearance-context.js +31 -0
  55. package/dist/internal/appearance-context.test.d.ts +2 -0
  56. package/dist/internal/appearance-context.test.d.ts.map +1 -0
  57. package/dist/internal/appearance-context.test.js +31 -0
  58. package/dist/internal/codemirror/base/index.d.ts +24 -0
  59. package/dist/internal/codemirror/base/index.d.ts.map +1 -0
  60. package/dist/internal/codemirror/base/index.js +489 -0
  61. package/dist/internal/codemirror/base/index.test.d.ts +2 -0
  62. package/dist/internal/codemirror/base/index.test.d.ts.map +1 -0
  63. package/dist/internal/codemirror/base/index.test.js +303 -0
  64. package/dist/internal/codemirror/base/search-panel.svelte +590 -0
  65. package/dist/internal/codemirror/base/search-panel.svelte.d.ts +8 -0
  66. package/dist/internal/codemirror/base/search-panel.svelte.d.ts.map +1 -0
  67. package/dist/internal/codemirror/base/search.d.ts +46 -0
  68. package/dist/internal/codemirror/base/search.d.ts.map +1 -0
  69. package/dist/internal/codemirror/base/search.js +58 -0
  70. package/dist/internal/codemirror/base/search.test.d.ts +2 -0
  71. package/dist/internal/codemirror/base/search.test.d.ts.map +1 -0
  72. package/dist/internal/codemirror/base/search.test.js +155 -0
  73. package/dist/internal/codemirror/base/selection-toolbar.d.ts +21 -0
  74. package/dist/internal/codemirror/base/selection-toolbar.d.ts.map +1 -0
  75. package/dist/internal/codemirror/base/selection-toolbar.js +306 -0
  76. package/dist/internal/codemirror/base/selection-toolbar.test.d.ts +2 -0
  77. package/dist/internal/codemirror/base/selection-toolbar.test.d.ts.map +1 -0
  78. package/dist/internal/codemirror/base/selection-toolbar.test.js +149 -0
  79. package/dist/internal/codemirror/base/slash-commands.d.ts +61 -0
  80. package/dist/internal/codemirror/base/slash-commands.d.ts.map +1 -0
  81. package/dist/internal/codemirror/base/slash-commands.js +463 -0
  82. package/dist/internal/codemirror/markdown/authoring.d.ts +9 -0
  83. package/dist/internal/codemirror/markdown/authoring.d.ts.map +1 -0
  84. package/dist/internal/codemirror/markdown/authoring.js +14 -0
  85. package/dist/internal/codemirror/markdown/authoring.test.d.ts +2 -0
  86. package/dist/internal/codemirror/markdown/authoring.test.d.ts.map +1 -0
  87. package/dist/internal/codemirror/markdown/authoring.test.js +222 -0
  88. package/dist/internal/codemirror/markdown/completion.d.ts +12 -0
  89. package/dist/internal/codemirror/markdown/completion.d.ts.map +1 -0
  90. package/dist/internal/codemirror/markdown/completion.js +302 -0
  91. package/dist/internal/codemirror/markdown/directives.d.ts +3 -0
  92. package/dist/internal/codemirror/markdown/directives.d.ts.map +1 -0
  93. package/dist/internal/codemirror/markdown/directives.js +154 -0
  94. package/dist/internal/codemirror/markdown/grid-table.d.ts +3 -0
  95. package/dist/internal/codemirror/markdown/grid-table.d.ts.map +1 -0
  96. package/dist/internal/codemirror/markdown/grid-table.js +129 -0
  97. package/dist/internal/codemirror/markdown/index.d.ts +16 -0
  98. package/dist/internal/codemirror/markdown/index.d.ts.map +1 -0
  99. package/dist/internal/codemirror/markdown/index.js +125 -0
  100. package/dist/internal/codemirror/markdown/index.test.d.ts +2 -0
  101. package/dist/internal/codemirror/markdown/index.test.d.ts.map +1 -0
  102. package/dist/internal/codemirror/markdown/index.test.js +158 -0
  103. package/dist/internal/codemirror/markdown/input-handlers.d.ts +4 -0
  104. package/dist/internal/codemirror/markdown/input-handlers.d.ts.map +1 -0
  105. package/dist/internal/codemirror/markdown/input-handlers.js +56 -0
  106. package/dist/internal/codemirror/markdown/lapis-inline.d.ts +11 -0
  107. package/dist/internal/codemirror/markdown/lapis-inline.d.ts.map +1 -0
  108. package/dist/internal/codemirror/markdown/lapis-inline.js +189 -0
  109. package/dist/internal/codemirror/markdown/latex.d.ts +5 -0
  110. package/dist/internal/codemirror/markdown/latex.d.ts.map +1 -0
  111. package/dist/internal/codemirror/markdown/latex.js +97 -0
  112. package/dist/internal/codemirror/markdown/list-after-lazy-quote.d.ts +10 -0
  113. package/dist/internal/codemirror/markdown/list-after-lazy-quote.d.ts.map +1 -0
  114. package/dist/internal/codemirror/markdown/list-after-lazy-quote.js +28 -0
  115. package/dist/internal/codemirror/markdown/paste.d.ts +5 -0
  116. package/dist/internal/codemirror/markdown/paste.d.ts.map +1 -0
  117. package/dist/internal/codemirror/markdown/paste.js +84 -0
  118. package/dist/internal/codemirror/markdown/showcase-fixture.test.d.ts +2 -0
  119. package/dist/internal/codemirror/markdown/showcase-fixture.test.d.ts.map +1 -0
  120. package/dist/internal/codemirror/markdown/showcase-fixture.test.js +50 -0
  121. package/dist/internal/codemirror/markdown/types.d.ts +6 -0
  122. package/dist/internal/codemirror/rich/block-controls.d.ts +4 -0
  123. package/dist/internal/codemirror/rich/block-controls.d.ts.map +1 -0
  124. package/dist/internal/codemirror/rich/block-controls.js +1419 -0
  125. package/dist/internal/codemirror/rich/block-controls.test.d.ts +2 -0
  126. package/dist/internal/codemirror/rich/block-controls.test.d.ts.map +1 -0
  127. package/dist/internal/codemirror/rich/block-controls.test.js +401 -0
  128. package/dist/internal/codemirror/rich/block-ranges.d.ts +22 -0
  129. package/dist/internal/codemirror/rich/block-ranges.d.ts.map +1 -0
  130. package/dist/internal/codemirror/rich/block-ranges.js +736 -0
  131. package/dist/internal/codemirror/rich/block-ranges.test.d.ts +2 -0
  132. package/dist/internal/codemirror/rich/block-ranges.test.d.ts.map +1 -0
  133. package/dist/internal/codemirror/rich/block-ranges.test.js +310 -0
  134. package/dist/internal/codemirror/rich/block-toolbar.d.ts +25 -0
  135. package/dist/internal/codemirror/rich/block-toolbar.d.ts.map +1 -0
  136. package/dist/internal/codemirror/rich/block-toolbar.js +506 -0
  137. package/dist/internal/codemirror/rich/block-toolbar.test.d.ts +2 -0
  138. package/dist/internal/codemirror/rich/block-toolbar.test.d.ts.map +1 -0
  139. package/dist/internal/codemirror/rich/block-toolbar.test.js +178 -0
  140. package/dist/internal/codemirror/rich/decorations/fold-indicators.d.ts +7 -0
  141. package/dist/internal/codemirror/rich/decorations/fold-indicators.d.ts.map +1 -0
  142. package/dist/internal/codemirror/rich/decorations/fold-indicators.js +122 -0
  143. package/dist/internal/codemirror/rich/decorations/fold-indicators.test.d.ts +2 -0
  144. package/dist/internal/codemirror/rich/decorations/fold-indicators.test.d.ts.map +1 -0
  145. package/dist/internal/codemirror/rich/decorations/fold-indicators.test.js +8 -0
  146. package/dist/internal/codemirror/rich/decorations/heading-gutter.d.ts +3 -0
  147. package/dist/internal/codemirror/rich/decorations/heading-gutter.d.ts.map +1 -0
  148. package/dist/internal/codemirror/rich/decorations/heading-gutter.js +43 -0
  149. package/dist/internal/codemirror/rich/index.d.ts +17 -0
  150. package/dist/internal/codemirror/rich/index.d.ts.map +1 -0
  151. package/dist/internal/codemirror/rich/index.js +727 -0
  152. package/dist/internal/codemirror/rich/index.test.d.ts +2 -0
  153. package/dist/internal/codemirror/rich/index.test.d.ts.map +1 -0
  154. package/dist/internal/codemirror/rich/index.test.js +544 -0
  155. package/dist/internal/codemirror/rich/theme.d.ts +2 -0
  156. package/dist/internal/codemirror/rich/theme.d.ts.map +1 -0
  157. package/dist/internal/codemirror/rich/theme.js +268 -0
  158. package/dist/internal/codemirror/rich/types.d.ts +22 -0
  159. package/dist/internal/codemirror/rich/types.d.ts.map +1 -0
  160. package/dist/internal/codemirror/rich/types.js +1 -0
  161. package/dist/internal/codemirror/rich/utils/activation.d.ts +3 -0
  162. package/dist/internal/codemirror/rich/utils/activation.d.ts.map +1 -0
  163. package/dist/internal/codemirror/rich/utils/activation.js +27 -0
  164. package/dist/internal/codemirror/rich/utils/code-block-lines.d.ts +8 -0
  165. package/dist/internal/codemirror/rich/utils/code-block-lines.d.ts.map +1 -0
  166. package/dist/internal/codemirror/rich/utils/code-block-lines.js +143 -0
  167. package/dist/internal/codemirror/rich/utils/code-block-lines.test.d.ts +2 -0
  168. package/dist/internal/codemirror/rich/utils/code-block-lines.test.d.ts.map +1 -0
  169. package/dist/internal/codemirror/rich/utils/code-block-lines.test.js +82 -0
  170. package/dist/internal/codemirror/rich/utils/fenced-code.d.ts +4 -0
  171. package/dist/internal/codemirror/rich/utils/fenced-code.d.ts.map +1 -0
  172. package/dist/internal/codemirror/rich/utils/fenced-code.js +25 -0
  173. package/dist/internal/codemirror/rich/utils/fenced-code.test.d.ts +2 -0
  174. package/dist/internal/codemirror/rich/utils/fenced-code.test.d.ts.map +1 -0
  175. package/dist/internal/codemirror/rich/utils/fenced-code.test.js +12 -0
  176. package/dist/internal/codemirror/rich/utils/headings.d.ts +5 -0
  177. package/dist/internal/codemirror/rich/utils/headings.d.ts.map +1 -0
  178. package/dist/internal/codemirror/rich/utils/headings.js +20 -0
  179. package/dist/internal/codemirror/rich/utils/headings.test.d.ts +2 -0
  180. package/dist/internal/codemirror/rich/utils/headings.test.d.ts.map +1 -0
  181. package/dist/internal/codemirror/rich/utils/headings.test.js +27 -0
  182. package/dist/internal/codemirror/rich/utils/height-estimates.d.ts +2 -0
  183. package/dist/internal/codemirror/rich/utils/height-estimates.d.ts.map +1 -0
  184. package/dist/internal/codemirror/rich/utils/height-estimates.js +82 -0
  185. package/dist/internal/codemirror/rich/utils/height-estimates.test.d.ts +2 -0
  186. package/dist/internal/codemirror/rich/utils/height-estimates.test.d.ts.map +1 -0
  187. package/dist/internal/codemirror/rich/utils/height-estimates.test.js +10 -0
  188. package/dist/internal/codemirror/rich/utils/images.d.ts +9 -0
  189. package/dist/internal/codemirror/rich/utils/images.d.ts.map +1 -0
  190. package/dist/internal/codemirror/rich/utils/images.js +103 -0
  191. package/dist/internal/codemirror/rich/utils/images.test.d.ts +2 -0
  192. package/dist/internal/codemirror/rich/utils/images.test.d.ts.map +1 -0
  193. package/dist/internal/codemirror/rich/utils/images.test.js +37 -0
  194. package/dist/internal/codemirror/rich/utils/indent.d.ts +38 -0
  195. package/dist/internal/codemirror/rich/utils/indent.d.ts.map +1 -0
  196. package/dist/internal/codemirror/rich/utils/indent.js +435 -0
  197. package/dist/internal/codemirror/rich/utils/indent.test.d.ts +2 -0
  198. package/dist/internal/codemirror/rich/utils/indent.test.d.ts.map +1 -0
  199. package/dist/internal/codemirror/rich/utils/indent.test.js +169 -0
  200. package/dist/internal/codemirror/rich/utils/inline-code.d.ts +7 -0
  201. package/dist/internal/codemirror/rich/utils/inline-code.d.ts.map +1 -0
  202. package/dist/internal/codemirror/rich/utils/inline-code.js +43 -0
  203. package/dist/internal/codemirror/rich/utils/inline-math.d.ts +6 -0
  204. package/dist/internal/codemirror/rich/utils/inline-math.d.ts.map +1 -0
  205. package/dist/internal/codemirror/rich/utils/inline-math.js +45 -0
  206. package/dist/internal/codemirror/rich/utils/inline-math.test.d.ts +2 -0
  207. package/dist/internal/codemirror/rich/utils/inline-math.test.d.ts.map +1 -0
  208. package/dist/internal/codemirror/rich/utils/inline-math.test.js +15 -0
  209. package/dist/internal/codemirror/rich/utils/links.d.ts +6 -0
  210. package/dist/internal/codemirror/rich/utils/links.d.ts.map +1 -0
  211. package/dist/internal/codemirror/rich/utils/links.js +36 -0
  212. package/dist/internal/codemirror/rich/utils/links.test.d.ts +2 -0
  213. package/dist/internal/codemirror/rich/utils/links.test.d.ts.map +1 -0
  214. package/dist/internal/codemirror/rich/utils/links.test.js +28 -0
  215. package/dist/internal/codemirror/rich/utils/list-callouts.d.ts +15 -0
  216. package/dist/internal/codemirror/rich/utils/list-callouts.d.ts.map +1 -0
  217. package/dist/internal/codemirror/rich/utils/list-callouts.js +41 -0
  218. package/dist/internal/codemirror/rich/utils/list-callouts.test.d.ts +2 -0
  219. package/dist/internal/codemirror/rich/utils/list-callouts.test.d.ts.map +1 -0
  220. package/dist/internal/codemirror/rich/utils/list-callouts.test.js +47 -0
  221. package/dist/internal/codemirror/rich/utils/measured-indent.d.ts +18 -0
  222. package/dist/internal/codemirror/rich/utils/measured-indent.d.ts.map +1 -0
  223. package/dist/internal/codemirror/rich/utils/measured-indent.js +419 -0
  224. package/dist/internal/codemirror/rich/utils/measured-indent.test.d.ts +2 -0
  225. package/dist/internal/codemirror/rich/utils/measured-indent.test.d.ts.map +1 -0
  226. package/dist/internal/codemirror/rich/utils/measured-indent.test.js +102 -0
  227. package/dist/internal/codemirror/rich/utils/ranges.d.ts +13 -0
  228. package/dist/internal/codemirror/rich/utils/ranges.d.ts.map +1 -0
  229. package/dist/internal/codemirror/rich/utils/ranges.js +42 -0
  230. package/dist/internal/codemirror/rich/utils/ranges.test.d.ts +2 -0
  231. package/dist/internal/codemirror/rich/utils/ranges.test.d.ts.map +1 -0
  232. package/dist/internal/codemirror/rich/utils/ranges.test.js +22 -0
  233. package/dist/internal/codemirror/rich/utils/tasks.d.ts +11 -0
  234. package/dist/internal/codemirror/rich/utils/tasks.d.ts.map +1 -0
  235. package/dist/internal/codemirror/rich/utils/tasks.js +23 -0
  236. package/dist/internal/codemirror/rich/utils/tasks.test.d.ts +2 -0
  237. package/dist/internal/codemirror/rich/utils/tasks.test.d.ts.map +1 -0
  238. package/dist/internal/codemirror/rich/utils/tasks.test.js +57 -0
  239. package/dist/internal/codemirror/rich/widgets/list-callout.d.ts +19 -0
  240. package/dist/internal/codemirror/rich/widgets/list-callout.d.ts.map +1 -0
  241. package/dist/internal/codemirror/rich/widgets/list-callout.js +58 -0
  242. package/dist/internal/codemirror/rich/widgets/preview-widgets.d.ts +50 -0
  243. package/dist/internal/codemirror/rich/widgets/preview-widgets.d.ts.map +1 -0
  244. package/dist/internal/codemirror/rich/widgets/preview-widgets.js +311 -0
  245. package/dist/internal/codemirror/rich/widgets/source-toggle.d.ts +4 -0
  246. package/dist/internal/codemirror/rich/widgets/source-toggle.d.ts.map +1 -0
  247. package/dist/internal/codemirror/rich/widgets/source-toggle.js +47 -0
  248. package/dist/internal/codemirror/rich/widgets/task-checkbox.d.ts +14 -0
  249. package/dist/internal/codemirror/rich/widgets/task-checkbox.d.ts.map +1 -0
  250. package/dist/internal/codemirror/rich/widgets/task-checkbox.js +54 -0
  251. package/dist/internal/doodle-dividers.d.ts +62 -0
  252. package/dist/internal/doodle-dividers.d.ts.map +1 -0
  253. package/dist/internal/doodle-dividers.js +103 -0
  254. package/dist/internal/task-states.d.ts +73 -0
  255. package/dist/internal/task-states.d.ts.map +1 -0
  256. package/dist/internal/task-states.js +27 -0
  257. package/dist/internal/task-states.test.d.ts +2 -0
  258. package/dist/internal/task-states.test.d.ts.map +1 -0
  259. package/dist/internal/task-states.test.js +36 -0
  260. package/dist/mira-code-editor.css +222 -0
  261. package/dist/mira-code-editor.d.ts +40 -0
  262. package/dist/mira-code-editor.d.ts.map +1 -0
  263. package/dist/mira-code-editor.js +1 -0
  264. package/dist/mira-code-editor.svelte +181 -0
  265. package/dist/mira-code-editor.svelte.d.ts +17 -0
  266. package/dist/mira-code-editor.svelte.d.ts.map +1 -0
  267. package/dist/mira-code-editor.test.d.ts +2 -0
  268. package/dist/mira-code-editor.test.d.ts.map +1 -0
  269. package/dist/mira-code-editor.test.js +93 -0
  270. package/dist/mira.svelte +581 -0
  271. package/dist/mira.svelte.d.ts +23 -0
  272. package/dist/mira.svelte.d.ts.map +1 -0
  273. package/dist/mode-position.d.ts +18 -0
  274. package/dist/mode-position.d.ts.map +1 -0
  275. package/dist/mode-position.js +99 -0
  276. package/dist/mode-position.test.d.ts +2 -0
  277. package/dist/mode-position.test.d.ts.map +1 -0
  278. package/dist/mode-position.test.js +60 -0
  279. package/dist/preview/adobe-gridtables.d.ts +11 -0
  280. package/dist/preview/code-language.d.ts +2 -0
  281. package/dist/preview/code-language.d.ts.map +1 -0
  282. package/dist/preview/code-language.js +58 -0
  283. package/dist/preview/code-language.test.d.ts +2 -0
  284. package/dist/preview/code-language.test.d.ts.map +1 -0
  285. package/dist/preview/code-language.test.js +12 -0
  286. package/dist/preview/components/callout.svelte +123 -0
  287. package/dist/preview/components/callout.svelte.d.ts +17 -0
  288. package/dist/preview/components/callout.svelte.d.ts.map +1 -0
  289. package/dist/preview/components/checkbox.svelte +151 -0
  290. package/dist/preview/components/checkbox.svelte.d.ts +12 -0
  291. package/dist/preview/components/checkbox.svelte.d.ts.map +1 -0
  292. package/dist/preview/components/code.svelte +146 -0
  293. package/dist/preview/components/code.svelte.d.ts +12 -0
  294. package/dist/preview/components/code.svelte.d.ts.map +1 -0
  295. package/dist/preview/components/embed.svelte +236 -0
  296. package/dist/preview/components/embed.svelte.d.ts +14 -0
  297. package/dist/preview/components/embed.svelte.d.ts.map +1 -0
  298. package/dist/preview/components/embedded-markdown-preview.svelte +53 -0
  299. package/dist/preview/components/embedded-markdown-preview.svelte.d.ts +12 -0
  300. package/dist/preview/components/embedded-markdown-preview.svelte.d.ts.map +1 -0
  301. package/dist/preview/components/frontmatter-property-name-input.svelte +207 -0
  302. package/dist/preview/components/frontmatter-property-name-input.svelte.d.ts +14 -0
  303. package/dist/preview/components/frontmatter-property-name-input.svelte.d.ts.map +1 -0
  304. package/dist/preview/components/frontmatter-property-text-input.svelte +228 -0
  305. package/dist/preview/components/frontmatter-property-text-input.svelte.d.ts +13 -0
  306. package/dist/preview/components/frontmatter-property-text-input.svelte.d.ts.map +1 -0
  307. package/dist/preview/components/frontmatter-property-value-input.svelte +232 -0
  308. package/dist/preview/components/frontmatter-property-value-input.svelte.d.ts +13 -0
  309. package/dist/preview/components/frontmatter-property-value-input.svelte.d.ts.map +1 -0
  310. package/dist/preview/components/frontmatter-utils.d.ts +2 -0
  311. package/dist/preview/components/frontmatter-utils.d.ts.map +1 -0
  312. package/dist/preview/components/frontmatter-utils.js +1 -0
  313. package/dist/preview/components/frontmatter.svelte +857 -0
  314. package/dist/preview/components/frontmatter.svelte.d.ts +18 -0
  315. package/dist/preview/components/frontmatter.svelte.d.ts.map +1 -0
  316. package/dist/preview/components/icon.svelte +225 -0
  317. package/dist/preview/components/icon.svelte.d.ts +9 -0
  318. package/dist/preview/components/icon.svelte.d.ts.map +1 -0
  319. package/dist/preview/components/icon.test.d.ts +2 -0
  320. package/dist/preview/components/icon.test.d.ts.map +1 -0
  321. package/dist/preview/components/icon.test.js +20 -0
  322. package/dist/preview/components/image.svelte +266 -0
  323. package/dist/preview/components/image.svelte.d.ts +10 -0
  324. package/dist/preview/components/image.svelte.d.ts.map +1 -0
  325. package/dist/preview/components/link.svelte +382 -0
  326. package/dist/preview/components/link.svelte.d.ts +16 -0
  327. package/dist/preview/components/link.svelte.d.ts.map +1 -0
  328. package/dist/preview/components/list-callout-control.svelte +138 -0
  329. package/dist/preview/components/list-callout-control.svelte.d.ts +10 -0
  330. package/dist/preview/components/list-callout-control.svelte.d.ts.map +1 -0
  331. package/dist/preview/components/list-callout-marker.svelte +108 -0
  332. package/dist/preview/components/list-callout-marker.svelte.d.ts +15 -0
  333. package/dist/preview/components/list-callout-marker.svelte.d.ts.map +1 -0
  334. package/dist/preview/components/list-item.svelte +161 -0
  335. package/dist/preview/components/list-item.svelte.d.ts +11 -0
  336. package/dist/preview/components/list-item.svelte.d.ts.map +1 -0
  337. package/dist/preview/components/tag.svelte +18 -0
  338. package/dist/preview/components/tag.svelte.d.ts +10 -0
  339. package/dist/preview/components/tag.svelte.d.ts.map +1 -0
  340. package/dist/preview/components/task-checkbox-control.svelte +113 -0
  341. package/dist/preview/components/task-checkbox-control.svelte.d.ts +14 -0
  342. package/dist/preview/components/task-checkbox-control.svelte.d.ts.map +1 -0
  343. package/dist/preview/editable-markdown-preview/behavior.d.ts +6 -0
  344. package/dist/preview/editable-markdown-preview/behavior.d.ts.map +1 -0
  345. package/dist/preview/editable-markdown-preview/behavior.js +57 -0
  346. package/dist/preview/editable-markdown-preview/behavior.test.d.ts +2 -0
  347. package/dist/preview/editable-markdown-preview/behavior.test.d.ts.map +1 -0
  348. package/dist/preview/editable-markdown-preview/behavior.test.js +36 -0
  349. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte +386 -0
  350. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte.d.ts +35 -0
  351. package/dist/preview/editable-markdown-preview/editable-markdown-surface.svelte.d.ts.map +1 -0
  352. package/dist/preview/editable-markdown-preview/editor-surface.svelte +228 -0
  353. package/dist/preview/editable-markdown-preview/editor-surface.svelte.d.ts +22 -0
  354. package/dist/preview/editable-markdown-preview/editor-surface.svelte.d.ts.map +1 -0
  355. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts +36 -0
  356. package/dist/preview/editable-markdown-preview/serialized-writer.d.ts.map +1 -0
  357. package/dist/preview/editable-markdown-preview/serialized-writer.js +109 -0
  358. package/dist/preview/editable-markdown-preview/serialized-writer.test.d.ts +2 -0
  359. package/dist/preview/editable-markdown-preview/serialized-writer.test.d.ts.map +1 -0
  360. package/dist/preview/editable-markdown-preview/serialized-writer.test.js +59 -0
  361. package/dist/preview/editable-markdown-preview.svelte +195 -0
  362. package/dist/preview/editable-markdown-preview.svelte.d.ts +37 -0
  363. package/dist/preview/editable-markdown-preview.svelte.d.ts.map +1 -0
  364. package/dist/preview/embed-target.d.ts +13 -0
  365. package/dist/preview/embed-target.d.ts.map +1 -0
  366. package/dist/preview/embed-target.js +133 -0
  367. package/dist/preview/embed-target.test.d.ts +2 -0
  368. package/dist/preview/embed-target.test.d.ts.map +1 -0
  369. package/dist/preview/embed-target.test.js +78 -0
  370. package/dist/preview/file-embed.svelte +56 -0
  371. package/dist/preview/file-embed.svelte.d.ts +32 -0
  372. package/dist/preview/file-embed.svelte.d.ts.map +1 -0
  373. package/dist/preview/frontmatter/controller.svelte.d.ts +58 -0
  374. package/dist/preview/frontmatter/controller.svelte.d.ts.map +1 -0
  375. package/dist/preview/frontmatter/controller.svelte.js +195 -0
  376. package/dist/preview/frontmatter/defaults.d.ts +3 -0
  377. package/dist/preview/frontmatter/defaults.d.ts.map +1 -0
  378. package/dist/preview/frontmatter/defaults.js +32 -0
  379. package/dist/preview/frontmatter/frontmatter.test.d.ts +2 -0
  380. package/dist/preview/frontmatter/frontmatter.test.d.ts.map +1 -0
  381. package/dist/preview/frontmatter/frontmatter.test.js +190 -0
  382. package/dist/preview/frontmatter/index.d.ts +12 -0
  383. package/dist/preview/frontmatter/index.d.ts.map +1 -0
  384. package/dist/preview/frontmatter/index.js +11 -0
  385. package/dist/preview/frontmatter/manager.d.ts +28 -0
  386. package/dist/preview/frontmatter/manager.d.ts.map +1 -0
  387. package/dist/preview/frontmatter/manager.js +46 -0
  388. package/dist/preview/frontmatter/parse.d.ts +4 -0
  389. package/dist/preview/frontmatter/parse.d.ts.map +1 -0
  390. package/dist/preview/frontmatter/parse.js +49 -0
  391. package/dist/preview/frontmatter/predicates.d.ts +3 -0
  392. package/dist/preview/frontmatter/predicates.d.ts.map +1 -0
  393. package/dist/preview/frontmatter/predicates.js +7 -0
  394. package/dist/preview/frontmatter/properties.d.ts +13 -0
  395. package/dist/preview/frontmatter/properties.d.ts.map +1 -0
  396. package/dist/preview/frontmatter/properties.js +250 -0
  397. package/dist/preview/frontmatter/serialize.d.ts +3 -0
  398. package/dist/preview/frontmatter/serialize.d.ts.map +1 -0
  399. package/dist/preview/frontmatter/serialize.js +10 -0
  400. package/dist/preview/frontmatter/suggestions.d.ts +11 -0
  401. package/dist/preview/frontmatter/suggestions.d.ts.map +1 -0
  402. package/dist/preview/frontmatter/suggestions.js +91 -0
  403. package/dist/preview/frontmatter/suggestions.test.d.ts +2 -0
  404. package/dist/preview/frontmatter/suggestions.test.d.ts.map +1 -0
  405. package/dist/preview/frontmatter/suggestions.test.js +45 -0
  406. package/dist/preview/frontmatter/types.d.ts +66 -0
  407. package/dist/preview/frontmatter/types.d.ts.map +1 -0
  408. package/dist/preview/frontmatter/types.js +27 -0
  409. package/dist/preview/frontmatter/values.d.ts +5 -0
  410. package/dist/preview/frontmatter/values.d.ts.map +1 -0
  411. package/dist/preview/frontmatter/values.js +96 -0
  412. package/dist/preview/frontmatter/widgets.d.ts +9 -0
  413. package/dist/preview/frontmatter/widgets.d.ts.map +1 -0
  414. package/dist/preview/frontmatter/widgets.js +104 -0
  415. package/dist/preview/index.d.ts +18 -0
  416. package/dist/preview/index.d.ts.map +1 -0
  417. package/dist/preview/index.js +15 -0
  418. package/dist/preview/markdown-embed.svelte +80 -0
  419. package/dist/preview/markdown-embed.svelte.d.ts +27 -0
  420. package/dist/preview/markdown-embed.svelte.d.ts.map +1 -0
  421. package/dist/preview/markdown-outline.svelte +256 -0
  422. package/dist/preview/markdown-outline.svelte.d.ts +15 -0
  423. package/dist/preview/markdown-outline.svelte.d.ts.map +1 -0
  424. package/dist/preview/markdown-preview.svelte +500 -0
  425. package/dist/preview/markdown-preview.svelte.d.ts +30 -0
  426. package/dist/preview/markdown-preview.svelte.d.ts.map +1 -0
  427. package/dist/preview/note-link.svelte +78 -0
  428. package/dist/preview/note-link.svelte.d.ts +25 -0
  429. package/dist/preview/note-link.svelte.d.ts.map +1 -0
  430. package/dist/preview/outline.d.ts +16 -0
  431. package/dist/preview/outline.d.ts.map +1 -0
  432. package/dist/preview/outline.js +54 -0
  433. package/dist/preview/outline.test.d.ts +2 -0
  434. package/dist/preview/outline.test.d.ts.map +1 -0
  435. package/dist/preview/outline.test.js +98 -0
  436. package/dist/preview/portable-surfaces.test.d.ts +2 -0
  437. package/dist/preview/portable-surfaces.test.d.ts.map +1 -0
  438. package/dist/preview/portable-surfaces.test.js +482 -0
  439. package/dist/preview/preview.test.d.ts +2 -0
  440. package/dist/preview/preview.test.d.ts.map +1 -0
  441. package/dist/preview/preview.test.js +124 -0
  442. package/dist/preview/rehype-code-context.d.ts +5 -0
  443. package/dist/preview/rehype-code-context.d.ts.map +1 -0
  444. package/dist/preview/rehype-code-context.js +17 -0
  445. package/dist/preview/rehype-highlight-lines.d.ts +9 -0
  446. package/dist/preview/rehype-highlight-lines.d.ts.map +1 -0
  447. package/dist/preview/rehype-highlight-lines.js +257 -0
  448. package/dist/preview/rehype-table-spans.d.ts +4 -0
  449. package/dist/preview/rehype-table-spans.d.ts.map +1 -0
  450. package/dist/preview/rehype-table-spans.js +120 -0
  451. package/dist/preview/remark/callouts.d.ts +4 -0
  452. package/dist/preview/remark/callouts.d.ts.map +1 -0
  453. package/dist/preview/remark/callouts.js +81 -0
  454. package/dist/preview/remark/callouts.test.d.ts +2 -0
  455. package/dist/preview/remark/callouts.test.d.ts.map +1 -0
  456. package/dist/preview/remark/callouts.test.js +23 -0
  457. package/dist/preview/remark/custom-checklists.d.ts +25 -0
  458. package/dist/preview/remark/custom-checklists.d.ts.map +1 -0
  459. package/dist/preview/remark/custom-checklists.js +204 -0
  460. package/dist/preview/remark/custom-checklists.test.d.ts +2 -0
  461. package/dist/preview/remark/custom-checklists.test.d.ts.map +1 -0
  462. package/dist/preview/remark/custom-checklists.test.js +51 -0
  463. package/dist/preview/remark/external-links.d.ts +4 -0
  464. package/dist/preview/remark/external-links.d.ts.map +1 -0
  465. package/dist/preview/remark/external-links.js +34 -0
  466. package/dist/preview/remark/hast.d.ts +6 -0
  467. package/dist/preview/remark/hast.d.ts.map +1 -0
  468. package/dist/preview/remark/hast.js +60 -0
  469. package/dist/preview/remark/headings.d.ts +8 -0
  470. package/dist/preview/remark/headings.d.ts.map +1 -0
  471. package/dist/preview/remark/headings.js +40 -0
  472. package/dist/preview/remark/links.test.d.ts +2 -0
  473. package/dist/preview/remark/links.test.d.ts.map +1 -0
  474. package/dist/preview/remark/links.test.js +62 -0
  475. package/dist/preview/remark/list-callouts.d.ts +14 -0
  476. package/dist/preview/remark/list-callouts.d.ts.map +1 -0
  477. package/dist/preview/remark/list-callouts.js +91 -0
  478. package/dist/preview/remark/multimarkdown-table.d.ts +11 -0
  479. package/dist/preview/remark/multimarkdown-table.d.ts.map +1 -0
  480. package/dist/preview/remark/multimarkdown-table.js +138 -0
  481. package/dist/preview/remark/parity.test.d.ts +2 -0
  482. package/dist/preview/remark/parity.test.d.ts.map +1 -0
  483. package/dist/preview/remark/parity.test.js +105 -0
  484. package/dist/preview/remark/pathlink.d.ts +4 -0
  485. package/dist/preview/remark/pathlink.d.ts.map +1 -0
  486. package/dist/preview/remark/pathlink.js +26 -0
  487. package/dist/preview/remark/tags.d.ts +4 -0
  488. package/dist/preview/remark/tags.d.ts.map +1 -0
  489. package/dist/preview/remark/tags.js +22 -0
  490. package/dist/preview/remark/utils.d.ts +12 -0
  491. package/dist/preview/remark/utils.d.ts.map +1 -0
  492. package/dist/preview/remark/utils.js +74 -0
  493. package/dist/preview/remark/wikilink.d.ts +4 -0
  494. package/dist/preview/remark/wikilink.d.ts.map +1 -0
  495. package/dist/preview/remark/wikilink.js +23 -0
  496. package/dist/preview/remark.d.ts +12 -0
  497. package/dist/preview/remark.d.ts.map +1 -0
  498. package/dist/preview/remark.js +11 -0
  499. package/dist/preview/renderer/context.svelte.d.ts +37 -0
  500. package/dist/preview/renderer/context.svelte.d.ts.map +1 -0
  501. package/dist/preview/renderer/context.svelte.js +47 -0
  502. package/dist/preview/renderer/markdown.svelte +109 -0
  503. package/dist/preview/renderer/markdown.svelte.d.ts +28 -0
  504. package/dist/preview/renderer/markdown.svelte.d.ts.map +1 -0
  505. package/dist/preview/renderer/renderer.svelte +122 -0
  506. package/dist/preview/renderer/renderer.svelte.d.ts +9 -0
  507. package/dist/preview/renderer/renderer.svelte.d.ts.map +1 -0
  508. package/dist/preview/renderer/types.d.ts +20 -0
  509. package/dist/preview/renderer/types.d.ts.map +1 -0
  510. package/dist/preview/renderer/types.js +1 -0
  511. package/dist/preview/renderer/utils.d.ts +9 -0
  512. package/dist/preview/renderer/utils.d.ts.map +1 -0
  513. package/dist/preview/renderer/utils.js +135 -0
  514. package/dist/preview/styles/blockquotes-footnotes.css +78 -0
  515. package/dist/preview/styles/callouts.css +171 -0
  516. package/dist/preview/styles/code-katex.css +213 -0
  517. package/dist/preview/styles/editor-shared.css +132 -0
  518. package/dist/preview/styles/frontmatter-collapsible.css +94 -0
  519. package/dist/preview/styles/frontmatter-properties.css +532 -0
  520. package/dist/preview/styles/frontmatter-properties.test.d.ts +2 -0
  521. package/dist/preview/styles/frontmatter-properties.test.d.ts.map +1 -0
  522. package/dist/preview/styles/frontmatter-properties.test.js +57 -0
  523. package/dist/preview/styles/headings.css +183 -0
  524. package/dist/preview/styles/images.css +177 -0
  525. package/dist/preview/styles/links-embeds-tags.css +275 -0
  526. package/dist/preview/styles/list-callouts.css +281 -0
  527. package/dist/preview/styles/lists-tasks.css +638 -0
  528. package/dist/preview/styles/live-preview.css +58 -0
  529. package/dist/preview/styles/mermaid-highlight.css +112 -0
  530. package/dist/preview/styles/outline.css +219 -0
  531. package/dist/preview/styles/reading-mode.css +151 -0
  532. package/dist/preview/styles/source-mode.css +498 -0
  533. package/dist/preview/styles/source-mode.test.d.ts +2 -0
  534. package/dist/preview/styles/source-mode.test.d.ts.map +1 -0
  535. package/dist/preview/styles/source-mode.test.js +13 -0
  536. package/dist/preview/styles/surfaces.css +56 -0
  537. package/dist/preview/styles/tables.css +550 -0
  538. package/dist/preview/styles/tokens.css +269 -0
  539. package/dist/preview/styles/utilities.css +700 -0
  540. package/dist/preview/styles.css +22 -0
  541. package/dist/preview/test-utils.d.ts +3 -0
  542. package/dist/preview/test-utils.d.ts.map +1 -0
  543. package/dist/preview/test-utils.js +15 -0
  544. package/dist/styles.css +139 -0
  545. package/dist/tables/adobe-gridtables.d.ts +6 -0
  546. package/dist/tables/editor-column.svelte +136 -0
  547. package/dist/tables/editor-column.svelte.d.ts +12 -0
  548. package/dist/tables/editor-column.svelte.d.ts.map +1 -0
  549. package/dist/tables/editor-table.svelte +967 -0
  550. package/dist/tables/editor-table.svelte.d.ts +12 -0
  551. package/dist/tables/editor-table.svelte.d.ts.map +1 -0
  552. package/dist/tables/extension.d.ts +19 -0
  553. package/dist/tables/extension.d.ts.map +1 -0
  554. package/dist/tables/extension.js +189 -0
  555. package/dist/tables/extension.test.d.ts +2 -0
  556. package/dist/tables/extension.test.d.ts.map +1 -0
  557. package/dist/tables/extension.test.js +100 -0
  558. package/dist/tables/from-markdown.d.ts +1 -0
  559. package/dist/tables/from-markdown.js +378 -0
  560. package/dist/tables/grid-editor-column.svelte +127 -0
  561. package/dist/tables/grid-editor-column.svelte.d.ts +10 -0
  562. package/dist/tables/grid-editor-column.svelte.d.ts.map +1 -0
  563. package/dist/tables/grid-editor-column.test.d.ts +2 -0
  564. package/dist/tables/grid-editor-column.test.d.ts.map +1 -0
  565. package/dist/tables/grid-editor-column.test.js +27 -0
  566. package/dist/tables/grid-editor-table.svelte +1260 -0
  567. package/dist/tables/grid-editor-table.svelte.d.ts +12 -0
  568. package/dist/tables/grid-editor-table.svelte.d.ts.map +1 -0
  569. package/dist/tables/grid-table-extension.d.ts +14 -0
  570. package/dist/tables/grid-table-extension.d.ts.map +1 -0
  571. package/dist/tables/grid-table-extension.js +183 -0
  572. package/dist/tables/grid-table.d.ts +141 -0
  573. package/dist/tables/grid-table.d.ts.map +1 -0
  574. package/dist/tables/grid-table.js +425 -0
  575. package/dist/tables/grid-table.test.d.ts +2 -0
  576. package/dist/tables/grid-table.test.d.ts.map +1 -0
  577. package/dist/tables/grid-table.test.js +140 -0
  578. package/dist/tables/index.d.ts +13 -0
  579. package/dist/tables/index.d.ts.map +1 -0
  580. package/dist/tables/index.js +12 -0
  581. package/dist/tables/index.test.d.ts +2 -0
  582. package/dist/tables/index.test.d.ts.map +1 -0
  583. package/dist/tables/index.test.js +7 -0
  584. package/dist/tables/inline-editor-extensions.d.ts +3 -0
  585. package/dist/tables/inline-editor-extensions.d.ts.map +1 -0
  586. package/dist/tables/inline-editor-extensions.js +16 -0
  587. package/dist/tables/inline-editor-extensions.test.d.ts +2 -0
  588. package/dist/tables/inline-editor-extensions.test.d.ts.map +1 -0
  589. package/dist/tables/inline-editor-extensions.test.js +23 -0
  590. package/dist/tables/markdown-table-column-head.svelte +103 -0
  591. package/dist/tables/markdown-table-column-head.svelte.d.ts +14 -0
  592. package/dist/tables/markdown-table-column-head.svelte.d.ts.map +1 -0
  593. package/dist/tables/markdown-table-data-cell.svelte +121 -0
  594. package/dist/tables/markdown-table-data-cell.svelte.d.ts +24 -0
  595. package/dist/tables/markdown-table-data-cell.svelte.d.ts.map +1 -0
  596. package/dist/tables/markdown-table-dnd.d.ts +6 -0
  597. package/dist/tables/markdown-table-dnd.d.ts.map +1 -0
  598. package/dist/tables/markdown-table-dnd.js +6 -0
  599. package/dist/tables/markdown-table-row-gutter-cell.svelte +161 -0
  600. package/dist/tables/markdown-table-row-gutter-cell.svelte.d.ts +15 -0
  601. package/dist/tables/markdown-table-row-gutter-cell.svelte.d.ts.map +1 -0
  602. package/dist/tables/menu-component.svelte +109 -0
  603. package/dist/tables/menu-component.svelte.d.ts +8 -0
  604. package/dist/tables/menu-component.svelte.d.ts.map +1 -0
  605. package/dist/tables/menu.d.ts +21 -0
  606. package/dist/tables/menu.d.ts.map +1 -0
  607. package/dist/tables/menu.js +41 -0
  608. package/dist/tables/pipe-table.d.ts +4 -0
  609. package/dist/tables/pipe-table.d.ts.map +1 -0
  610. package/dist/tables/pipe-table.js +62 -0
  611. package/dist/tables/pipe-table.test.d.ts +2 -0
  612. package/dist/tables/pipe-table.test.d.ts.map +1 -0
  613. package/dist/tables/pipe-table.test.js +13 -0
  614. package/dist/tables/syntax.d.ts +1 -0
  615. package/dist/tables/syntax.js +436 -0
  616. package/dist/tables/table-line-scroll-sync.d.ts +5 -0
  617. package/dist/tables/table-line-scroll-sync.d.ts.map +1 -0
  618. package/dist/tables/table-line-scroll-sync.js +123 -0
  619. package/dist/tables/table-node.d.ts +92 -0
  620. package/dist/tables/table-node.d.ts.map +1 -0
  621. package/dist/tables/table-node.js +514 -0
  622. package/dist/tables/table-node.test.d.ts +2 -0
  623. package/dist/tables/table-node.test.d.ts.map +1 -0
  624. package/dist/tables/table-node.test.js +167 -0
  625. package/dist/tables/types.d.ts +25 -0
  626. package/dist/tables/types.d.ts.map +1 -0
  627. package/dist/tables/types.js +8 -0
  628. package/dist/tables/utils.d.ts +4 -0
  629. package/dist/tables/utils.d.ts.map +1 -0
  630. package/dist/tables/utils.js +16 -0
  631. package/dist/tables/widgets/grid-table-widget.d.ts +3 -0
  632. package/dist/tables/widgets/grid-table-widget.d.ts.map +1 -0
  633. package/dist/tables/widgets/grid-table-widget.js +26 -0
  634. package/dist/tables/widgets/pipe-table-widget.d.ts +3 -0
  635. package/dist/tables/widgets/pipe-table-widget.d.ts.map +1 -0
  636. package/dist/tables/widgets/pipe-table-widget.js +25 -0
  637. package/dist/tables/widgets/source-button.d.ts +2 -0
  638. package/dist/tables/widgets/source-button.d.ts.map +1 -0
  639. package/dist/tables/widgets/source-button.js +20 -0
  640. package/dist/tables/widgets/source-button.test.d.ts +2 -0
  641. package/dist/tables/widgets/source-button.test.d.ts.map +1 -0
  642. package/dist/tables/widgets/source-button.test.js +11 -0
  643. package/dist/test-setup.d.ts +2 -0
  644. package/dist/test-setup.d.ts.map +1 -0
  645. package/dist/test-setup.js +31 -0
  646. package/dist/themes/_contract.css +88 -0
  647. package/dist/themes/_mira-palette.css +187 -0
  648. package/dist/themes/_obsidian-palette.css +183 -0
  649. package/dist/themes/mira.css +2 -0
  650. package/dist/themes/obsidian.css +2 -0
  651. package/dist/themes/theme-contract.test.d.ts +2 -0
  652. package/dist/themes/theme-contract.test.d.ts.map +1 -0
  653. package/dist/themes/theme-contract.test.js +88 -0
  654. package/dist/themes.css +3 -0
  655. package/dist/types.d.ts +55 -0
  656. package/dist/types.d.ts.map +1 -0
  657. package/dist/types.js +1 -0
  658. package/dist/ui/appearance/index.d.ts +6 -0
  659. package/dist/ui/appearance/index.d.ts.map +1 -0
  660. package/dist/ui/appearance/index.js +9 -0
  661. package/dist/ui/button/button.shared.d.ts +59 -0
  662. package/dist/ui/button/button.shared.d.ts.map +1 -0
  663. package/dist/ui/button/button.shared.js +25 -0
  664. package/dist/ui/button/button.svelte +42 -0
  665. package/dist/ui/button/button.svelte.d.ts +5 -0
  666. package/dist/ui/button/button.svelte.d.ts.map +1 -0
  667. package/dist/ui/button/index.d.ts +4 -0
  668. package/dist/ui/button/index.d.ts.map +1 -0
  669. package/dist/ui/button/index.js +5 -0
  670. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +40 -0
  671. package/dist/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +10 -0
  672. package/dist/ui/context-menu/context-menu-checkbox-item.svelte.d.ts.map +1 -0
  673. package/dist/ui/context-menu/context-menu-content.svelte +61 -0
  674. package/dist/ui/context-menu/context-menu-content.svelte.d.ts +8 -0
  675. package/dist/ui/context-menu/context-menu-content.svelte.d.ts.map +1 -0
  676. package/dist/ui/context-menu/context-menu-group-heading.svelte +24 -0
  677. package/dist/ui/context-menu/context-menu-group-heading.svelte.d.ts +8 -0
  678. package/dist/ui/context-menu/context-menu-group-heading.svelte.d.ts.map +1 -0
  679. package/dist/ui/context-menu/context-menu-group.svelte +12 -0
  680. package/dist/ui/context-menu/context-menu-group.svelte.d.ts +5 -0
  681. package/dist/ui/context-menu/context-menu-group.svelte.d.ts.map +1 -0
  682. package/dist/ui/context-menu/context-menu-item.svelte +27 -0
  683. package/dist/ui/context-menu/context-menu-item.svelte.d.ts +9 -0
  684. package/dist/ui/context-menu/context-menu-item.svelte.d.ts.map +1 -0
  685. package/dist/ui/context-menu/context-menu-label.svelte +27 -0
  686. package/dist/ui/context-menu/context-menu-label.svelte.d.ts +9 -0
  687. package/dist/ui/context-menu/context-menu-label.svelte.d.ts.map +1 -0
  688. package/dist/ui/context-menu/context-menu-radio-group.svelte +16 -0
  689. package/dist/ui/context-menu/context-menu-radio-group.svelte.d.ts +5 -0
  690. package/dist/ui/context-menu/context-menu-radio-group.svelte.d.ts.map +1 -0
  691. package/dist/ui/context-menu/context-menu-radio-item.svelte +33 -0
  692. package/dist/ui/context-menu/context-menu-radio-item.svelte.d.ts +5 -0
  693. package/dist/ui/context-menu/context-menu-radio-item.svelte.d.ts.map +1 -0
  694. package/dist/ui/context-menu/context-menu-root.svelte +17 -0
  695. package/dist/ui/context-menu/context-menu-root.svelte.d.ts +4 -0
  696. package/dist/ui/context-menu/context-menu-root.svelte.d.ts.map +1 -0
  697. package/dist/ui/context-menu/context-menu-separator.svelte +17 -0
  698. package/dist/ui/context-menu/context-menu-separator.svelte.d.ts +5 -0
  699. package/dist/ui/context-menu/context-menu-separator.svelte.d.ts.map +1 -0
  700. package/dist/ui/context-menu/context-menu-shortcut.svelte +20 -0
  701. package/dist/ui/context-menu/context-menu-shortcut.svelte.d.ts +6 -0
  702. package/dist/ui/context-menu/context-menu-shortcut.svelte.d.ts.map +1 -0
  703. package/dist/ui/context-menu/context-menu-sub-content.svelte +20 -0
  704. package/dist/ui/context-menu/context-menu-sub-content.svelte.d.ts +5 -0
  705. package/dist/ui/context-menu/context-menu-sub-content.svelte.d.ts.map +1 -0
  706. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
  707. package/dist/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +9 -0
  708. package/dist/ui/context-menu/context-menu-sub-trigger.svelte.d.ts.map +1 -0
  709. package/dist/ui/context-menu/context-menu-trigger.svelte +29 -0
  710. package/dist/ui/context-menu/context-menu-trigger.svelte.d.ts +5 -0
  711. package/dist/ui/context-menu/context-menu-trigger.svelte.d.ts.map +1 -0
  712. package/dist/ui/context-menu/index.d.ts +17 -0
  713. package/dist/ui/context-menu/index.d.ts.map +1 -0
  714. package/dist/ui/context-menu/index.js +19 -0
  715. package/dist/ui/dialog/dialog-close.svelte +8 -0
  716. package/dist/ui/dialog/dialog-close.svelte.d.ts +5 -0
  717. package/dist/ui/dialog/dialog-close.svelte.d.ts.map +1 -0
  718. package/dist/ui/dialog/dialog-content.svelte +66 -0
  719. package/dist/ui/dialog/dialog-content.svelte.d.ts +12 -0
  720. package/dist/ui/dialog/dialog-content.svelte.d.ts.map +1 -0
  721. package/dist/ui/dialog/dialog-description.svelte +17 -0
  722. package/dist/ui/dialog/dialog-description.svelte.d.ts +5 -0
  723. package/dist/ui/dialog/dialog-description.svelte.d.ts.map +1 -0
  724. package/dist/ui/dialog/dialog-footer.svelte +23 -0
  725. package/dist/ui/dialog/dialog-footer.svelte.d.ts +6 -0
  726. package/dist/ui/dialog/dialog-footer.svelte.d.ts.map +1 -0
  727. package/dist/ui/dialog/dialog-header.svelte +20 -0
  728. package/dist/ui/dialog/dialog-header.svelte.d.ts +6 -0
  729. package/dist/ui/dialog/dialog-header.svelte.d.ts.map +1 -0
  730. package/dist/ui/dialog/dialog-overlay.svelte +21 -0
  731. package/dist/ui/dialog/dialog-overlay.svelte.d.ts +5 -0
  732. package/dist/ui/dialog/dialog-overlay.svelte.d.ts.map +1 -0
  733. package/dist/ui/dialog/dialog-title.svelte +17 -0
  734. package/dist/ui/dialog/dialog-title.svelte.d.ts +5 -0
  735. package/dist/ui/dialog/dialog-title.svelte.d.ts.map +1 -0
  736. package/dist/ui/dialog/dialog-trigger.svelte +8 -0
  737. package/dist/ui/dialog/dialog-trigger.svelte.d.ts +5 -0
  738. package/dist/ui/dialog/dialog-trigger.svelte.d.ts.map +1 -0
  739. package/dist/ui/dialog/index.d.ts +12 -0
  740. package/dist/ui/dialog/index.d.ts.map +1 -0
  741. package/dist/ui/dialog/index.js +14 -0
  742. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
  743. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +10 -0
  744. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts.map +1 -0
  745. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +63 -0
  746. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +8 -0
  747. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts.map +1 -0
  748. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  749. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +9 -0
  750. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts.map +1 -0
  751. package/dist/ui/dropdown-menu/dropdown-menu-group.svelte +14 -0
  752. package/dist/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +5 -0
  753. package/dist/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts.map +1 -0
  754. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  755. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -0
  756. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts.map +1 -0
  757. package/dist/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
  758. package/dist/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +9 -0
  759. package/dist/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts.map +1 -0
  760. package/dist/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  761. package/dist/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +5 -0
  762. package/dist/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts.map +1 -0
  763. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +33 -0
  764. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +5 -0
  765. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts.map +1 -0
  766. package/dist/ui/dropdown-menu/dropdown-menu-root.svelte +27 -0
  767. package/dist/ui/dropdown-menu/dropdown-menu-root.svelte.d.ts +4 -0
  768. package/dist/ui/dropdown-menu/dropdown-menu-root.svelte.d.ts.map +1 -0
  769. package/dist/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  770. package/dist/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +5 -0
  771. package/dist/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts.map +1 -0
  772. package/dist/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  773. package/dist/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +6 -0
  774. package/dist/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts.map +1 -0
  775. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
  776. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +5 -0
  777. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts.map +1 -0
  778. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  779. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +8 -0
  780. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts.map +1 -0
  781. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +29 -0
  782. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +5 -0
  783. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts.map +1 -0
  784. package/dist/ui/dropdown-menu/index.d.ts +17 -0
  785. package/dist/ui/dropdown-menu/index.d.ts.map +1 -0
  786. package/dist/ui/dropdown-menu/index.js +17 -0
  787. package/dist/ui/index.d.ts +13 -0
  788. package/dist/ui/index.d.ts.map +1 -0
  789. package/dist/ui/index.js +12 -0
  790. package/dist/ui/index.test.d.ts +2 -0
  791. package/dist/ui/index.test.d.ts.map +1 -0
  792. package/dist/ui/index.test.js +7 -0
  793. package/dist/ui/internal/overlay-portal-context.d.ts +19 -0
  794. package/dist/ui/internal/overlay-portal-context.d.ts.map +1 -0
  795. package/dist/ui/internal/overlay-portal-context.js +39 -0
  796. package/dist/ui/popover/index.d.ts +7 -0
  797. package/dist/ui/popover/index.d.ts.map +1 -0
  798. package/dist/ui/popover/index.js +6 -0
  799. package/dist/ui/popover/popover-content.svelte +65 -0
  800. package/dist/ui/popover/popover-content.svelte.d.ts +8 -0
  801. package/dist/ui/popover/popover-content.svelte.d.ts.map +1 -0
  802. package/dist/ui/popover/popover-root.svelte +15 -0
  803. package/dist/ui/popover/popover-root.svelte.d.ts +4 -0
  804. package/dist/ui/popover/popover-root.svelte.d.ts.map +1 -0
  805. package/dist/ui/popover/popover-trigger.svelte +23 -0
  806. package/dist/ui/popover/popover-trigger.svelte.d.ts +5 -0
  807. package/dist/ui/popover/popover-trigger.svelte.d.ts.map +1 -0
  808. package/dist/ui/scroll-area/index.d.ts +2 -0
  809. package/dist/ui/scroll-area/index.d.ts.map +1 -0
  810. package/dist/ui/scroll-area/index.js +1 -0
  811. package/dist/ui/scroll-area/scroll-area.svelte +14 -0
  812. package/dist/ui/scroll-area/scroll-area.svelte.d.ts +9 -0
  813. package/dist/ui/scroll-area/scroll-area.svelte.d.ts.map +1 -0
  814. package/dist/ui/separator/index.d.ts +2 -0
  815. package/dist/ui/separator/index.d.ts.map +1 -0
  816. package/dist/ui/separator/index.js +1 -0
  817. package/dist/ui/separator/separator.svelte +14 -0
  818. package/dist/ui/separator/separator.svelte.d.ts +8 -0
  819. package/dist/ui/separator/separator.svelte.d.ts.map +1 -0
  820. package/dist/ui/styles.css +760 -0
  821. package/dist/ui/styles.test.d.ts +2 -0
  822. package/dist/ui/styles.test.d.ts.map +1 -0
  823. package/dist/ui/styles.test.js +26 -0
  824. package/dist/ui/table/index.d.ts +10 -0
  825. package/dist/ui/table/index.d.ts.map +1 -0
  826. package/dist/ui/table/index.js +11 -0
  827. package/dist/ui/table/table-body.svelte +20 -0
  828. package/dist/ui/table/table-body.svelte.d.ts +6 -0
  829. package/dist/ui/table/table-body.svelte.d.ts.map +1 -0
  830. package/dist/ui/table/table-caption.svelte +20 -0
  831. package/dist/ui/table/table-caption.svelte.d.ts +6 -0
  832. package/dist/ui/table/table-caption.svelte.d.ts.map +1 -0
  833. package/dist/ui/table/table-cell.svelte +23 -0
  834. package/dist/ui/table/table-cell.svelte.d.ts +6 -0
  835. package/dist/ui/table/table-cell.svelte.d.ts.map +1 -0
  836. package/dist/ui/table/table-footer.svelte +23 -0
  837. package/dist/ui/table/table-footer.svelte.d.ts +6 -0
  838. package/dist/ui/table/table-footer.svelte.d.ts.map +1 -0
  839. package/dist/ui/table/table-head.svelte +23 -0
  840. package/dist/ui/table/table-head.svelte.d.ts +6 -0
  841. package/dist/ui/table/table-head.svelte.d.ts.map +1 -0
  842. package/dist/ui/table/table-header.svelte +20 -0
  843. package/dist/ui/table/table-header.svelte.d.ts +6 -0
  844. package/dist/ui/table/table-header.svelte.d.ts.map +1 -0
  845. package/dist/ui/table/table-row.svelte +23 -0
  846. package/dist/ui/table/table-row.svelte.d.ts +6 -0
  847. package/dist/ui/table/table-row.svelte.d.ts.map +1 -0
  848. package/dist/ui/table/table.svelte +21 -0
  849. package/dist/ui/table/table.svelte.d.ts +9 -0
  850. package/dist/ui/table/table.svelte.d.ts.map +1 -0
  851. package/dist/ui/table-dnd/index.d.ts +4 -0
  852. package/dist/ui/table-dnd/index.d.ts.map +1 -0
  853. package/dist/ui/table-dnd/index.js +3 -0
  854. package/dist/ui/table-dnd/table-dnd-sensors.d.ts +3 -0
  855. package/dist/ui/table-dnd/table-dnd-sensors.d.ts.map +1 -0
  856. package/dist/ui/table-dnd/table-dnd-sensors.js +11 -0
  857. package/dist/ui/table-dnd/table-dnd-utils.d.ts +30 -0
  858. package/dist/ui/table-dnd/table-dnd-utils.d.ts.map +1 -0
  859. package/dist/ui/table-dnd/table-dnd-utils.js +77 -0
  860. package/dist/ui/table-dnd/table-dnd-utils.test.d.ts +2 -0
  861. package/dist/ui/table-dnd/table-dnd-utils.test.d.ts.map +1 -0
  862. package/dist/ui/table-dnd/table-dnd-utils.test.js +46 -0
  863. package/dist/ui/table-dnd/table-drag-grip.svelte +60 -0
  864. package/dist/ui/table-dnd/table-drag-grip.svelte.d.ts +17 -0
  865. package/dist/ui/table-dnd/table-drag-grip.svelte.d.ts.map +1 -0
  866. package/dist/ui/toggle-group/context.d.ts +7 -0
  867. package/dist/ui/toggle-group/context.d.ts.map +1 -0
  868. package/dist/ui/toggle-group/context.js +8 -0
  869. package/dist/ui/toggle-group/index.d.ts +3 -0
  870. package/dist/ui/toggle-group/index.d.ts.map +1 -0
  871. package/dist/ui/toggle-group/index.js +2 -0
  872. package/dist/ui/toggle-group/toggle-group-item.svelte +33 -0
  873. package/dist/ui/toggle-group/toggle-group-item.svelte.d.ts +11 -0
  874. package/dist/ui/toggle-group/toggle-group-item.svelte.d.ts.map +1 -0
  875. package/dist/ui/toggle-group/toggle-group.svelte +74 -0
  876. package/dist/ui/toggle-group/toggle-group.svelte.d.ts +12 -0
  877. package/dist/ui/toggle-group/toggle-group.svelte.d.ts.map +1 -0
  878. package/dist/ui/toolbar/index.d.ts +7 -0
  879. package/dist/ui/toolbar/index.d.ts.map +1 -0
  880. package/dist/ui/toolbar/index.js +6 -0
  881. package/dist/ui/toolbar/toolbar-button.svelte +17 -0
  882. package/dist/ui/toolbar/toolbar-button.svelte.d.ts +5 -0
  883. package/dist/ui/toolbar/toolbar-button.svelte.d.ts.map +1 -0
  884. package/dist/ui/toolbar/toolbar-group-item.svelte +17 -0
  885. package/dist/ui/toolbar/toolbar-group-item.svelte.d.ts +4 -0
  886. package/dist/ui/toolbar/toolbar-group-item.svelte.d.ts.map +1 -0
  887. package/dist/ui/toolbar/toolbar-group.svelte +19 -0
  888. package/dist/ui/toolbar/toolbar-group.svelte.d.ts +5 -0
  889. package/dist/ui/toolbar/toolbar-group.svelte.d.ts.map +1 -0
  890. package/dist/ui/toolbar/toolbar-link.svelte +17 -0
  891. package/dist/ui/toolbar/toolbar-link.svelte.d.ts +5 -0
  892. package/dist/ui/toolbar/toolbar-link.svelte.d.ts.map +1 -0
  893. package/dist/ui/toolbar/toolbar.svelte +21 -0
  894. package/dist/ui/toolbar/toolbar.svelte.d.ts +5 -0
  895. package/dist/ui/toolbar/toolbar.svelte.d.ts.map +1 -0
  896. package/dist/ui/tooltip/index.d.ts +8 -0
  897. package/dist/ui/tooltip/index.d.ts.map +1 -0
  898. package/dist/ui/tooltip/index.js +9 -0
  899. package/dist/ui/tooltip/tooltip-content.svelte +85 -0
  900. package/dist/ui/tooltip/tooltip-content.svelte.d.ts +9 -0
  901. package/dist/ui/tooltip/tooltip-content.svelte.d.ts.map +1 -0
  902. package/dist/ui/tooltip/tooltip-root.svelte +15 -0
  903. package/dist/ui/tooltip/tooltip-root.svelte.d.ts +5 -0
  904. package/dist/ui/tooltip/tooltip-root.svelte.d.ts.map +1 -0
  905. package/dist/ui/tooltip/tooltip-trigger.svelte +23 -0
  906. package/dist/ui/tooltip/tooltip-trigger.svelte.d.ts +5 -0
  907. package/dist/ui/tooltip/tooltip-trigger.svelte.d.ts.map +1 -0
  908. package/dist/ui/utils.d.ts +13 -0
  909. package/dist/ui/utils.d.ts.map +1 -0
  910. package/dist/ui/utils.js +5 -0
  911. package/package.json +171 -0
@@ -0,0 +1,1419 @@
1
+ import { EditorState, Prec, StateEffect, StateField, } from "@codemirror/state";
2
+ import { Decoration, GutterMarker, EditorView, gutter, keymap, ViewPlugin, } from "@codemirror/view";
3
+ import { applyBlockToolbarItem, blockPresentation, canApplyBlockToolbarItem, createBlockToolbarIcon, resolveMiraBlockControlsOptions, } from "./block-toolbar";
4
+ import { collectMarkdownBlockHandles, deleteMarkdownBlockHandle, deleteMarkdownBlockRange, duplicateMarkdownBlockHandle, duplicateMarkdownBlockRange, moveMarkdownBlockHandle, moveMarkdownBlockRange, replaceMarkdownRange, } from "./block-ranges";
5
+ const dragActivationDistance = 5;
6
+ const listNestActivationDistance = 24;
7
+ const autoScrollThreshold = 42;
8
+ const autoScrollStep = 18;
9
+ const handleStartCache = new WeakMap();
10
+ const activeHandleIdsCache = new WeakMap();
11
+ const blockHandleSvg = '<svg aria-hidden="true" viewBox="0 0 24 24"><path d="M9 5h.01M15 5h.01M9 12h.01M15 12h.01M9 19h.01M15 19h.01"/></svg>';
12
+ const setBlockHighlightEffect = StateEffect.define();
13
+ const emptyBlockHighlightState = {
14
+ handleId: null,
15
+ range: null,
16
+ decorations: Decoration.none,
17
+ };
18
+ const blockHighlightStateField = StateField.define({
19
+ create() {
20
+ return emptyBlockHighlightState;
21
+ },
22
+ update(value, transaction) {
23
+ for (const effect of transaction.effects) {
24
+ if (effect.is(setBlockHighlightEffect)) {
25
+ return effect.value
26
+ ? {
27
+ handleId: effect.value.handleId,
28
+ range: effect.value.range,
29
+ decorations: buildHighlightDecorations(transaction.state, effect.value.range),
30
+ }
31
+ : emptyBlockHighlightState;
32
+ }
33
+ }
34
+ if (transaction.docChanged) {
35
+ return emptyBlockHighlightState;
36
+ }
37
+ return value.decorations === Decoration.none
38
+ ? value
39
+ : { ...value, decorations: value.decorations.map(transaction.changes) };
40
+ },
41
+ provide: (field) => EditorView.decorations.from(field, (value) => value.decorations),
42
+ });
43
+ export function blockControlExtensions(options) {
44
+ const resolvedBlockControls = resolveMiraBlockControlsOptions(options.blockControls);
45
+ if (!resolvedBlockControls.enabled) {
46
+ return [];
47
+ }
48
+ return [
49
+ blockControlsTheme,
50
+ resolvedBlockControls.toolbar
51
+ ? EditorView.editorAttributes.of({
52
+ class: "mira-block-toolbar-enabled",
53
+ })
54
+ : [],
55
+ blockHighlightStateField,
56
+ blockHandleGutter(Boolean(resolvedBlockControls.toolbar)),
57
+ Prec.highest(keymap.of(blockControlKeymap())),
58
+ ViewPlugin.fromClass(class extends BlockControlsPlugin {
59
+ constructor(view) {
60
+ super(view, options, resolvedBlockControls.toolbar);
61
+ }
62
+ }),
63
+ ];
64
+ }
65
+ function blockHandleGutter(toolbarEnabled) {
66
+ return gutter({
67
+ class: "mira-block-controls-gutter",
68
+ initialSpacer: () => blockHandleSpacerMarker,
69
+ lineMarker(view, line) {
70
+ const handle = handleForVisualLine(view, line);
71
+ const selectedHandleId = blockHighlight(view.state).handleId;
72
+ const activeHandleIds = activeHandleIdsForState(view.state);
73
+ const active = handle ? activeHandleIds.has(handle.id) : false;
74
+ const selected = handle ? handle.id === selectedHandleId : false;
75
+ return handle
76
+ ? new BlockHandleMarker(handle, active, selected, toolbarEnabled &&
77
+ activeHandleIds.size <= 1 &&
78
+ !view.state.facet(EditorState.readOnly))
79
+ : null;
80
+ },
81
+ lineMarkerChange(update) {
82
+ return (update.docChanged ||
83
+ update.selectionSet ||
84
+ update.viewportChanged ||
85
+ update.transactions.some((transaction) => transaction.effects.some((effect) => effect.is(setBlockHighlightEffect))));
86
+ },
87
+ renderEmptyElements: true,
88
+ });
89
+ }
90
+ function handleForVisualLine(view, line) {
91
+ return handleStartsForState(view.state).get(line.from) ?? null;
92
+ }
93
+ function handleStartsForState(state) {
94
+ const cached = handleStartCache.get(state);
95
+ if (cached) {
96
+ return cached;
97
+ }
98
+ const starts = new Map();
99
+ for (const handle of collectMarkdownBlockHandles(state)) {
100
+ starts.set(handle.handleRange.from, handle);
101
+ }
102
+ handleStartCache.set(state, starts);
103
+ return starts;
104
+ }
105
+ function activeHandleIdsForState(state) {
106
+ const cached = activeHandleIdsCache.get(state);
107
+ if (cached) {
108
+ return cached;
109
+ }
110
+ const handles = [...handleStartsForState(state).values()].sort((a, b) => a.handleRange.from - b.handleRange.from);
111
+ const selection = state.selection.main;
112
+ const ids = new Set();
113
+ if (selection.empty) {
114
+ const handle = handleAtPosition(state, handles, selection.head);
115
+ if (handle) {
116
+ ids.add(handle.id);
117
+ }
118
+ }
119
+ else {
120
+ for (const handle of handles) {
121
+ if (selection.from <= handle.handleRange.to &&
122
+ selection.to >= handle.handleRange.from) {
123
+ ids.add(handle.id);
124
+ }
125
+ }
126
+ }
127
+ activeHandleIdsCache.set(state, ids);
128
+ return ids;
129
+ }
130
+ function handleAtPosition(state, handles, position) {
131
+ const containing = handles
132
+ .filter((handle) => position >= handle.affectedRange.from &&
133
+ position <= Math.min(handle.affectedRange.to + 1, state.doc.length))
134
+ .sort((a, b) => a.affectedRange.to -
135
+ a.affectedRange.from -
136
+ (b.affectedRange.to - b.affectedRange.from));
137
+ return (containing[0] ??
138
+ handles.find((handle) => position < handle.handleRange.from) ??
139
+ handles.at(-1) ??
140
+ null);
141
+ }
142
+ function blockHighlight(state) {
143
+ return (state.field(blockHighlightStateField, false) ?? emptyBlockHighlightState);
144
+ }
145
+ class BlockHandleMarker extends GutterMarker {
146
+ handle;
147
+ active;
148
+ selected;
149
+ toolbarVisible;
150
+ elementClass = "mira-block-controls-gutter__element";
151
+ constructor(handle, active, selected, toolbarVisible) {
152
+ super();
153
+ this.handle = handle;
154
+ this.active = active;
155
+ this.selected = selected;
156
+ this.toolbarVisible = toolbarVisible;
157
+ }
158
+ eq(other) {
159
+ return (other instanceof BlockHandleMarker &&
160
+ other.handle.id === this.handle.id &&
161
+ other.handle.handleRange.from === this.handle.handleRange.from &&
162
+ other.handle.handleRange.to === this.handle.handleRange.to &&
163
+ other.active === this.active &&
164
+ other.selected === this.selected &&
165
+ other.toolbarVisible === this.toolbarVisible);
166
+ }
167
+ toDOM() {
168
+ const row = document.createElement("span");
169
+ row.className = "mira-block-controls-row";
170
+ const button = document.createElement("button");
171
+ button.type = "button";
172
+ button.className = [
173
+ "mira-block-handle",
174
+ this.active ? "mira-block-handle--active" : "",
175
+ this.selected ? "mira-block-handle--selected" : "",
176
+ ]
177
+ .filter(Boolean)
178
+ .join(" ");
179
+ button.dataset.miraBlockId = this.handle.id;
180
+ button.dataset.miraBlockRole = this.handle.role;
181
+ button.setAttribute("aria-label", "Block drag handle");
182
+ button.setAttribute("title", "Drag to move. Click to highlight. Right-click for block actions.");
183
+ button.innerHTML = blockHandleSvg;
184
+ row.append(button);
185
+ if (this.toolbarVisible) {
186
+ const presentation = blockPresentation(this.handle);
187
+ const trigger = document.createElement("button");
188
+ trigger.type = "button";
189
+ trigger.className = [
190
+ "mira-block-toolbar-trigger",
191
+ this.active ? "mira-block-toolbar-trigger--active" : "",
192
+ this.selected ? "mira-block-toolbar-trigger--selected" : "",
193
+ ]
194
+ .filter(Boolean)
195
+ .join(" ");
196
+ trigger.dataset.miraBlockId = this.handle.id;
197
+ trigger.dataset.miraBlockType = presentation.type ?? "rich";
198
+ trigger.setAttribute("aria-haspopup", "menu");
199
+ trigger.setAttribute("aria-expanded", "false");
200
+ trigger.setAttribute("aria-label", `Change ${presentation.label}`);
201
+ trigger.setAttribute("title", `Change ${presentation.label}`);
202
+ trigger.append(createBlockToolbarIcon(document, presentation.icon));
203
+ row.append(trigger);
204
+ }
205
+ return row;
206
+ }
207
+ }
208
+ const blockHandleSpacerMarker = new (class extends GutterMarker {
209
+ elementClass = "mira-block-controls-gutter__element";
210
+ eq(other) {
211
+ return other === this;
212
+ }
213
+ toDOM() {
214
+ const spacer = document.createElement("span");
215
+ spacer.className = "mira-block-handle-spacer";
216
+ return spacer;
217
+ }
218
+ })();
219
+ function blockControlKeymap() {
220
+ return [
221
+ {
222
+ key: "Alt-Shift-ArrowUp",
223
+ run(view) {
224
+ return moveSelectionByKeyboard(view, -1);
225
+ },
226
+ preventDefault: true,
227
+ },
228
+ {
229
+ key: "Alt-Shift-ArrowDown",
230
+ run(view) {
231
+ return moveSelectionByKeyboard(view, 1);
232
+ },
233
+ preventDefault: true,
234
+ },
235
+ ];
236
+ }
237
+ function moveSelectionByKeyboard(view, direction) {
238
+ const handles = collectMarkdownBlockHandles(view.state);
239
+ const active = activeHandle(view, handles);
240
+ if (!active) {
241
+ return false;
242
+ }
243
+ const selectionHandles = selectedHandles(view, handles, active);
244
+ const firstIndex = handles.findIndex((handle) => handle.id === selectionHandles[0]?.id);
245
+ const lastIndex = handles.findIndex((handle) => handle.id === selectionHandles.at(-1)?.id);
246
+ const target = direction < 0 ? handles[firstIndex - 1] : handles[lastIndex + 1];
247
+ if (!target) {
248
+ return false;
249
+ }
250
+ if (selectionHandles.length === 1) {
251
+ return moveMarkdownBlockHandle(view, selectionHandles[0], {
252
+ handle: target,
253
+ position: direction < 0 ? "before" : "after",
254
+ });
255
+ }
256
+ return moveMarkdownBlockRange(view, compositeHandleRange(view, selectionHandles), {
257
+ block: target.affectedRange,
258
+ position: direction < 0 ? "before" : "after",
259
+ });
260
+ }
261
+ class BlockControlsPlugin {
262
+ view;
263
+ options;
264
+ toolbarConfig;
265
+ layer = document.createElement("div");
266
+ dropLine = document.createElement("div");
267
+ menu = document.createElement("div");
268
+ toolbarPortal = document.createElement("div");
269
+ toolbarMenu = document.createElement("div");
270
+ handles = [];
271
+ blockRects = [];
272
+ dragState = null;
273
+ dropTarget = null;
274
+ renderFrame = null;
275
+ suppressNextClick = false;
276
+ toolbarHandleId = null;
277
+ toolbarIconCleanups = [];
278
+ toolbarTrigger = null;
279
+ constructor(view, options, toolbarConfig) {
280
+ this.view = view;
281
+ this.options = options;
282
+ this.toolbarConfig = toolbarConfig;
283
+ this.layer.className = "mira-block-controls-layer";
284
+ this.dropLine.className = "mira-block-drop-line";
285
+ this.menu.className = "mira-block-menu";
286
+ this.menu.setAttribute("role", "menu");
287
+ this.menu.hidden = true;
288
+ this.toolbarMenu.className = "mira-block-toolbar-menu";
289
+ this.toolbarMenu.setAttribute("role", "menu");
290
+ this.toolbarMenu.setAttribute("aria-label", this.toolbarConfig?.ariaLabel ?? "Change block type");
291
+ this.toolbarMenu.setAttribute("data-mira-overlay", "");
292
+ this.toolbarMenu.hidden = true;
293
+ this.toolbarMenu.addEventListener("keydown", this.handleToolbarMenuKeyDown);
294
+ this.layer.append(this.dropLine, this.menu);
295
+ this.view.dom.append(this.layer);
296
+ this.mountToolbarPortal();
297
+ this.view.dom.addEventListener("pointerdown", this.handleHandlePointerDown);
298
+ this.view.dom.addEventListener("click", this.handleHandleClick);
299
+ this.view.dom.addEventListener("contextmenu", this.handleHandleContextMenu);
300
+ this.view.dom.addEventListener("keydown", this.handleHandleKeyDown);
301
+ this.view.scrollDOM.addEventListener("scroll", this.scheduleRender);
302
+ window.addEventListener("resize", this.scheduleRender);
303
+ document.addEventListener("pointerdown", this.handleDocumentPointerDown, {
304
+ capture: true,
305
+ });
306
+ document.addEventListener("keydown", this.handleDocumentKeyDown);
307
+ this.scheduleRender();
308
+ }
309
+ update(update) {
310
+ if (update.docChanged) {
311
+ this.closeMenu();
312
+ this.closeToolbarMenu();
313
+ this.scheduleRender();
314
+ return;
315
+ }
316
+ if (update.selectionSet ||
317
+ update.viewportChanged ||
318
+ update.geometryChanged) {
319
+ this.closeMenu();
320
+ if (update.selectionSet) {
321
+ this.closeToolbarMenu();
322
+ }
323
+ this.scheduleRender();
324
+ }
325
+ }
326
+ destroy() {
327
+ this.view.dom.removeEventListener("pointerdown", this.handleHandlePointerDown);
328
+ this.view.dom.removeEventListener("click", this.handleHandleClick);
329
+ this.view.dom.removeEventListener("contextmenu", this.handleHandleContextMenu);
330
+ this.view.dom.removeEventListener("keydown", this.handleHandleKeyDown);
331
+ this.view.scrollDOM.removeEventListener("scroll", this.scheduleRender);
332
+ window.removeEventListener("resize", this.scheduleRender);
333
+ document.removeEventListener("pointerdown", this.handleDocumentPointerDown, {
334
+ capture: true,
335
+ });
336
+ document.removeEventListener("keydown", this.handleDocumentKeyDown);
337
+ this.detachDragListeners();
338
+ this.toolbarMenu.removeEventListener("keydown", this.handleToolbarMenuKeyDown);
339
+ if (this.renderFrame !== null) {
340
+ cancelAnimationFrame(this.renderFrame);
341
+ }
342
+ this.toolbarPortal.remove();
343
+ this.layer.remove();
344
+ }
345
+ mountToolbarPortal() {
346
+ const ownerDocument = this.view.dom.ownerDocument;
347
+ this.syncToolbarPortalAppearance();
348
+ this.toolbarPortal.style.background = "transparent";
349
+ this.toolbarPortal.style.border = "0";
350
+ this.toolbarPortal.style.borderRadius = "0";
351
+ this.toolbarPortal.style.boxShadow = "none";
352
+ this.toolbarPortal.style.display = "block";
353
+ this.toolbarPortal.style.height = "0";
354
+ this.toolbarPortal.style.inset = "0 auto auto 0";
355
+ this.toolbarPortal.style.minHeight = "0";
356
+ this.toolbarPortal.style.overflow = "visible";
357
+ this.toolbarPortal.style.pointerEvents = "none";
358
+ // CodeMirror's generated root class declares `position: relative
359
+ // !important`. The portal retains those generated classes so its menu can
360
+ // use the same EditorView theme, therefore its layout-neutral fixed
361
+ // geometry must carry the same priority.
362
+ this.toolbarPortal.style.setProperty("position", "fixed", "important");
363
+ this.toolbarPortal.style.width = "0";
364
+ this.toolbarPortal.style.zIndex = "1000";
365
+ this.toolbarPortal.append(this.toolbarMenu);
366
+ ownerDocument.body.append(this.toolbarPortal);
367
+ }
368
+ syncToolbarPortalAppearance() {
369
+ const themeHost = this.view.dom.closest("[data-mira-theme]");
370
+ const modeHost = this.view.dom.closest("[data-mira-color-mode]");
371
+ const colorHost = this.view.dom.closest(".light, .dark");
372
+ this.toolbarPortal.className = [
373
+ "mira-block-toolbar-portal",
374
+ ...this.view.dom.classList,
375
+ ...(colorHost
376
+ ? Array.from(colorHost.classList).filter((className) => className === "light" || className === "dark")
377
+ : []),
378
+ ].join(" ");
379
+ const theme = themeHost?.getAttribute("data-mira-theme");
380
+ const mode = modeHost?.getAttribute("data-mira-color-mode");
381
+ if (theme) {
382
+ this.toolbarPortal.setAttribute("data-mira-theme", theme);
383
+ }
384
+ else {
385
+ this.toolbarPortal.removeAttribute("data-mira-theme");
386
+ }
387
+ if (mode) {
388
+ this.toolbarPortal.setAttribute("data-mira-color-mode", mode);
389
+ }
390
+ else {
391
+ this.toolbarPortal.removeAttribute("data-mira-color-mode");
392
+ }
393
+ }
394
+ scheduleRender = () => {
395
+ if (this.renderFrame !== null) {
396
+ return;
397
+ }
398
+ this.renderFrame = requestAnimationFrame(() => {
399
+ this.renderFrame = null;
400
+ this.render();
401
+ });
402
+ };
403
+ render() {
404
+ this.syncToolbarPortalAppearance();
405
+ this.handles = collectMarkdownBlockHandles(this.view.state);
406
+ this.blockRects = [];
407
+ const rootRect = this.view.dom.getBoundingClientRect();
408
+ for (const handle of this.handles) {
409
+ const rect = this.measureHandle(handle, rootRect);
410
+ if (!rect) {
411
+ continue;
412
+ }
413
+ this.blockRects.push({
414
+ handle,
415
+ top: rect.top,
416
+ bottom: rect.bottom,
417
+ affectedTop: rect.affectedTop,
418
+ affectedBottom: rect.affectedBottom,
419
+ });
420
+ }
421
+ if (this.dropTarget) {
422
+ this.showDropLine(this.dropTarget.top);
423
+ }
424
+ else {
425
+ this.hideDropLine();
426
+ }
427
+ this.refreshOpenToolbarTrigger();
428
+ }
429
+ refreshOpenToolbarTrigger() {
430
+ if (this.toolbarMenu.hidden || !this.toolbarHandleId) {
431
+ return;
432
+ }
433
+ const trigger = Array.from(this.view.dom.querySelectorAll(".mira-block-toolbar-trigger")).find((candidate) => candidate.dataset.miraBlockId === this.toolbarHandleId);
434
+ if (!trigger) {
435
+ this.closeToolbarMenu();
436
+ return;
437
+ }
438
+ this.toolbarTrigger?.classList.remove("mira-block-toolbar-trigger--open");
439
+ this.toolbarTrigger?.setAttribute("aria-expanded", "false");
440
+ this.toolbarTrigger = trigger;
441
+ trigger.classList.add("mira-block-toolbar-trigger--open");
442
+ trigger.setAttribute("aria-expanded", "true");
443
+ this.positionToolbarMenu(trigger);
444
+ }
445
+ measureHandle(handle, rootRect) {
446
+ const start = this.view.coordsAtPos(handle.handleRange.from);
447
+ const end = this.view.coordsAtPos(handle.handleRange.to);
448
+ if (!start && !end) {
449
+ return null;
450
+ }
451
+ const top = (start?.top ?? end.top) - rootRect.top;
452
+ const bottom = Math.max((end?.bottom ?? start.bottom) - rootRect.top, top + 18);
453
+ const affectedStart = this.view.coordsAtPos(handle.affectedRange.from) ?? start ?? end;
454
+ const affectedEnd = this.view.coordsAtPos(handle.affectedRange.to) ?? end ?? start;
455
+ const affectedTop = affectedStart.top - rootRect.top;
456
+ const affectedBottom = Math.max(affectedEnd.bottom - rootRect.top, affectedTop + 18);
457
+ return { top, bottom, affectedTop, affectedBottom };
458
+ }
459
+ handleHandlePointerDown = (event) => {
460
+ const handle = closestBlockHandle(event.target);
461
+ const target = handle ? this.handleForButton(handle) : null;
462
+ if (handle && target) {
463
+ this.handlePointerDown(event, target);
464
+ }
465
+ };
466
+ handleHandleClick = (event) => {
467
+ const toolbarTrigger = closestBlockToolbarTrigger(event.target);
468
+ const toolbarHandle = toolbarTrigger
469
+ ? this.handleForButton(toolbarTrigger)
470
+ : null;
471
+ if (toolbarTrigger && toolbarHandle) {
472
+ event.preventDefault();
473
+ event.stopPropagation();
474
+ this.highlightHandle(toolbarHandle);
475
+ this.openToolbarMenu(toolbarHandle, toolbarTrigger);
476
+ return;
477
+ }
478
+ const handle = closestBlockHandle(event.target);
479
+ const target = handle ? this.handleForButton(handle) : null;
480
+ if (!handle || !target) {
481
+ return;
482
+ }
483
+ event.preventDefault();
484
+ event.stopPropagation();
485
+ if (this.suppressNextClick) {
486
+ this.suppressNextClick = false;
487
+ return;
488
+ }
489
+ this.highlightHandle(target);
490
+ };
491
+ handleHandleContextMenu = (event) => {
492
+ const button = closestBlockHandle(event.target);
493
+ const handle = button ? this.handleForButton(button) : null;
494
+ if (!button || !handle) {
495
+ return;
496
+ }
497
+ event.preventDefault();
498
+ event.stopPropagation();
499
+ this.highlightHandle(handle);
500
+ this.openMenu(handle, button);
501
+ };
502
+ handleHandleKeyDown = (event) => {
503
+ const toolbarTrigger = closestBlockToolbarTrigger(event.target);
504
+ const toolbarHandle = toolbarTrigger
505
+ ? this.handleForButton(toolbarTrigger)
506
+ : null;
507
+ if (toolbarTrigger && toolbarHandle) {
508
+ if (event.key === "Enter" ||
509
+ event.key === " " ||
510
+ event.key === "ArrowDown") {
511
+ event.preventDefault();
512
+ event.stopPropagation();
513
+ this.highlightHandle(toolbarHandle);
514
+ this.openToolbarMenu(toolbarHandle, toolbarTrigger);
515
+ }
516
+ return;
517
+ }
518
+ const button = closestBlockHandle(event.target);
519
+ const handle = button ? this.handleForButton(button) : null;
520
+ if (!button || !handle) {
521
+ return;
522
+ }
523
+ if (event.key === "ContextMenu" ||
524
+ (event.shiftKey && event.key === "F10")) {
525
+ event.preventDefault();
526
+ event.stopPropagation();
527
+ this.highlightHandle(handle);
528
+ this.openMenu(handle, button);
529
+ return;
530
+ }
531
+ if (event.key === "Enter" || event.key === " ") {
532
+ event.preventDefault();
533
+ event.stopPropagation();
534
+ this.highlightHandle(handle);
535
+ }
536
+ };
537
+ handleForButton(button) {
538
+ const handleId = button.dataset.miraBlockId;
539
+ if (!handleId) {
540
+ return null;
541
+ }
542
+ const handle = this.handles.find((candidate) => candidate.id === handleId) ??
543
+ collectMarkdownBlockHandles(this.view.state).find((candidate) => candidate.id === handleId);
544
+ return handle ?? null;
545
+ }
546
+ handlePointerDown(event, handle) {
547
+ if (event.button !== 0) {
548
+ return;
549
+ }
550
+ event.preventDefault();
551
+ event.stopPropagation();
552
+ this.closeMenu();
553
+ this.dragState = {
554
+ handleId: handle.id,
555
+ dragging: false,
556
+ startX: event.clientX,
557
+ startY: event.clientY,
558
+ };
559
+ window.addEventListener("pointermove", this.handlePointerMove);
560
+ window.addEventListener("pointerup", this.handlePointerUp, { once: true });
561
+ }
562
+ handlePointerMove = (event) => {
563
+ if (!this.dragState) {
564
+ return;
565
+ }
566
+ const distance = Math.hypot(event.clientX - this.dragState.startX, event.clientY - this.dragState.startY);
567
+ if (!this.dragState.dragging && distance < dragActivationDistance) {
568
+ return;
569
+ }
570
+ event.preventDefault();
571
+ this.dragState.dragging = true;
572
+ this.suppressNextClick = true;
573
+ this.clearHighlight();
574
+ this.view.dom.classList.add("mira-block-controls-dragging");
575
+ this.dropTarget = this.resolveDropTarget(event);
576
+ if (this.dropTarget) {
577
+ this.showDropLine(this.dropTarget.top);
578
+ }
579
+ this.autoScroll(event.clientY);
580
+ };
581
+ handlePointerUp = () => {
582
+ const dragState = this.dragState;
583
+ const source = dragState
584
+ ? this.handles.find((handle) => handle.id === dragState.handleId)
585
+ : undefined;
586
+ if (dragState?.dragging && source && this.dropTarget) {
587
+ const selectionHandles = selectedHandles(this.view, this.handles, source);
588
+ if (selectionHandles.length === 1) {
589
+ moveMarkdownBlockHandle(this.view, source, {
590
+ handle: this.dropTarget.handle,
591
+ position: this.dropTarget.position,
592
+ });
593
+ }
594
+ else if (this.dropTarget.position !== "inside") {
595
+ moveMarkdownBlockRange(this.view, compositeHandleRange(this.view, selectionHandles), {
596
+ block: this.dropTarget.handle.affectedRange,
597
+ position: this.dropTarget.position,
598
+ });
599
+ }
600
+ }
601
+ this.dragState = null;
602
+ this.dropTarget = null;
603
+ this.view.dom.classList.remove("mira-block-controls-dragging");
604
+ this.hideDropLine();
605
+ this.detachDragListeners();
606
+ this.scheduleRender();
607
+ };
608
+ detachDragListeners() {
609
+ window.removeEventListener("pointermove", this.handlePointerMove);
610
+ }
611
+ resolveDropTarget(event) {
612
+ const source = this.dragState
613
+ ? this.handles.find((handle) => handle.id === this.dragState?.handleId)
614
+ : null;
615
+ const sourceId = source?.id;
616
+ const candidates = this.blockRects.filter((rect) => rect.handle.id !== sourceId &&
617
+ (!source ||
618
+ rect.handle.affectedRange.from < source.affectedRange.from ||
619
+ rect.handle.affectedRange.to > source.affectedRange.to));
620
+ if (candidates.length === 0) {
621
+ return null;
622
+ }
623
+ const rootTop = this.view.dom.getBoundingClientRect().top;
624
+ const localY = event.clientY - rootTop;
625
+ let nearest = candidates[0];
626
+ let nearestDistance = Number.POSITIVE_INFINITY;
627
+ let position = "before";
628
+ for (const rect of candidates) {
629
+ const midpoint = (rect.top + rect.bottom) / 2;
630
+ const beforeDistance = Math.abs(localY - rect.top);
631
+ const afterDistance = Math.abs(localY - rect.bottom);
632
+ const distance = Math.min(beforeDistance, afterDistance);
633
+ if (distance < nearestDistance) {
634
+ nearest = rect;
635
+ nearestDistance = distance;
636
+ position = localY < midpoint ? "before" : "after";
637
+ }
638
+ }
639
+ if (source?.role === "list-item" &&
640
+ nearest.handle.role === "list-item" &&
641
+ event.clientX - this.dragState.startX >= listNestActivationDistance) {
642
+ position = "inside";
643
+ }
644
+ return {
645
+ handle: nearest.handle,
646
+ position,
647
+ top: position === "before" ? nearest.affectedTop : nearest.affectedBottom,
648
+ };
649
+ }
650
+ showDropLine(top) {
651
+ this.dropLine.hidden = false;
652
+ this.dropLine.style.top = `${Math.max(0, top)}px`;
653
+ }
654
+ hideDropLine() {
655
+ this.dropLine.hidden = true;
656
+ }
657
+ autoScroll(clientY) {
658
+ const rect = this.view.scrollDOM.getBoundingClientRect();
659
+ if (clientY < rect.top + autoScrollThreshold) {
660
+ this.view.scrollDOM.scrollTop -= autoScrollStep;
661
+ }
662
+ else if (clientY > rect.bottom - autoScrollThreshold) {
663
+ this.view.scrollDOM.scrollTop += autoScrollStep;
664
+ }
665
+ }
666
+ openToolbarMenu(handle, trigger) {
667
+ if (!this.toolbarConfig) {
668
+ return;
669
+ }
670
+ this.closeMenu();
671
+ this.closeToolbarMenu();
672
+ this.syncToolbarPortalAppearance();
673
+ const items = this.toolbarItemsFor(handle);
674
+ let previousGroup = null;
675
+ const nodes = [];
676
+ for (const item of items) {
677
+ if (previousGroup !== null && item.group !== previousGroup) {
678
+ const separator = this.toolbarMenu.ownerDocument.createElement("div");
679
+ separator.className = "mira-block-toolbar-menu__separator";
680
+ separator.setAttribute("role", "separator");
681
+ nodes.push(separator);
682
+ }
683
+ nodes.push(this.createToolbarMenuItem(item));
684
+ previousGroup = item.group;
685
+ }
686
+ this.toolbarMenu.replaceChildren(...nodes);
687
+ this.toolbarMenu.hidden = false;
688
+ this.toolbarHandleId = handle.id;
689
+ this.toolbarTrigger = trigger;
690
+ trigger.classList.add("mira-block-toolbar-trigger--open");
691
+ trigger.setAttribute("aria-expanded", "true");
692
+ this.positionToolbarMenu(trigger);
693
+ const selected = this.toolbarMenu.querySelector('.mira-block-toolbar-menu__item[data-selected="true"]:not(:disabled)');
694
+ const first = this.toolbarMenu.querySelector(".mira-block-toolbar-menu__item:not(:disabled)");
695
+ (selected ?? first)?.focus();
696
+ }
697
+ toolbarItemsFor(handle) {
698
+ const current = blockPresentation(handle).type;
699
+ const builtIns = (this.toolbarConfig?.items ?? []).map((type) => {
700
+ const definition = blockToolbarItemDefinition(type);
701
+ return {
702
+ ...definition,
703
+ id: `mira-block-toolbar-${type}`,
704
+ type,
705
+ selected: current === type,
706
+ disabled: !canApplyBlockToolbarItem(handle, type) ||
707
+ (type === "image" && !this.options.insertImage),
708
+ run: () => {
709
+ applyBlockToolbarItem(this.view, handle, type, {
710
+ insertImage: this.options.insertImage
711
+ ? () => this.options.insertImage?.(this.view)
712
+ : undefined,
713
+ });
714
+ },
715
+ };
716
+ });
717
+ const context = this.actionContext(handle);
718
+ const custom = (this.options.blockActions ?? [])
719
+ .filter((action) => action.placements?.includes("block-menu"))
720
+ .map((action) => ({
721
+ id: action.id,
722
+ label: action.label,
723
+ group: action.group ?? "extensions",
724
+ icon: blockActionIcon(action.icon),
725
+ shortcut: action.shortcut,
726
+ renderIcon: action.renderIcon,
727
+ selected: false,
728
+ disabled: dynamicDisabled(action, context),
729
+ run: () => action.run(context),
730
+ }));
731
+ return [...builtIns, ...custom];
732
+ }
733
+ createToolbarMenuItem(item) {
734
+ const button = this.toolbarMenu.ownerDocument.createElement("button");
735
+ button.type = "button";
736
+ button.className = "mira-block-toolbar-menu__item";
737
+ button.dataset.blockToolbarItem = item.type ?? item.id;
738
+ button.dataset.selected = item.selected ? "true" : "false";
739
+ button.disabled = item.disabled;
740
+ if (item.type && item.type !== "image") {
741
+ button.setAttribute("role", "menuitemradio");
742
+ button.setAttribute("aria-checked", String(item.selected));
743
+ }
744
+ else {
745
+ button.setAttribute("role", "menuitem");
746
+ }
747
+ const icon = this.toolbarMenu.ownerDocument.createElement("span");
748
+ icon.className = "mira-block-toolbar-menu__icon";
749
+ const cleanup = item.renderIcon?.(icon);
750
+ if (cleanup) {
751
+ this.toolbarIconCleanups.push(cleanup);
752
+ }
753
+ else if (icon.childNodes.length === 0) {
754
+ icon.append(createBlockToolbarIcon(this.toolbarMenu.ownerDocument, item.icon));
755
+ }
756
+ const label = this.toolbarMenu.ownerDocument.createElement("span");
757
+ label.className = "mira-block-toolbar-menu__label";
758
+ label.textContent = item.label;
759
+ button.append(icon, label);
760
+ if (item.shortcut) {
761
+ const shortcut = this.toolbarMenu.ownerDocument.createElement("kbd");
762
+ shortcut.className = "mira-block-toolbar-menu__shortcut";
763
+ shortcut.textContent = item.shortcut;
764
+ button.append(shortcut);
765
+ }
766
+ button.onclick = () => {
767
+ if (!item.disabled) {
768
+ void item.run();
769
+ }
770
+ this.closeToolbarMenu();
771
+ this.view.focus();
772
+ };
773
+ return button;
774
+ }
775
+ positionToolbarMenu(trigger) {
776
+ const triggerRect = trigger.getBoundingClientRect();
777
+ const menuRect = this.toolbarMenu.getBoundingClientRect();
778
+ const viewportWidth = this.toolbarMenu.ownerDocument.defaultView?.innerWidth ??
779
+ triggerRect.right;
780
+ const viewportHeight = this.toolbarMenu.ownerDocument.defaultView?.innerHeight ??
781
+ triggerRect.bottom;
782
+ const gap = 8;
783
+ let left = triggerRect.right + gap;
784
+ if (triggerRect.right + gap + menuRect.width > viewportWidth) {
785
+ left = triggerRect.left - menuRect.width - gap;
786
+ }
787
+ const maxLeft = Math.max(gap, viewportWidth - menuRect.width - gap);
788
+ const maxTop = Math.max(gap, viewportHeight - menuRect.height - gap);
789
+ const top = Math.max(gap, Math.min(triggerRect.top, maxTop));
790
+ this.toolbarMenu.style.left = `${Math.max(gap, Math.min(left, maxLeft))}px`;
791
+ this.toolbarMenu.style.top = `${top}px`;
792
+ }
793
+ handleToolbarMenuKeyDown = (event) => {
794
+ if (event.key === "Escape") {
795
+ event.preventDefault();
796
+ event.stopPropagation();
797
+ const trigger = this.toolbarTrigger;
798
+ this.closeToolbarMenu();
799
+ trigger?.focus();
800
+ return;
801
+ }
802
+ if (event.key === "Tab") {
803
+ this.closeToolbarMenu();
804
+ return;
805
+ }
806
+ const buttons = Array.from(this.toolbarMenu.querySelectorAll(".mira-block-toolbar-menu__item:not(:disabled)"));
807
+ const activeIndex = buttons.indexOf(this.toolbarMenu.ownerDocument.activeElement);
808
+ const nextIndex = event.key === "ArrowDown"
809
+ ? (Math.max(0, activeIndex) + 1) % buttons.length
810
+ : event.key === "ArrowUp"
811
+ ? (activeIndex <= 0 ? buttons.length : activeIndex) - 1
812
+ : event.key === "Home"
813
+ ? 0
814
+ : event.key === "End"
815
+ ? buttons.length - 1
816
+ : null;
817
+ if (nextIndex === null || buttons.length === 0) {
818
+ return;
819
+ }
820
+ event.preventDefault();
821
+ buttons[nextIndex]?.focus();
822
+ };
823
+ openMenu(handle, button) {
824
+ const actions = this.actionsFor(handle);
825
+ const rect = button.getBoundingClientRect();
826
+ const rootRect = this.view.dom.getBoundingClientRect();
827
+ this.menu.replaceChildren(...actions.map((action) => this.createMenuItem(action, handle)));
828
+ this.menu.hidden = false;
829
+ this.menu.style.top = `${rect.top - rootRect.top}px`;
830
+ this.menu.style.left = `${rect.right - rootRect.left + 6}px`;
831
+ this.menu.querySelector("button")?.focus();
832
+ }
833
+ createMenuItem(action, handle) {
834
+ const context = this.actionContext(handle);
835
+ const button = document.createElement("button");
836
+ button.type = "button";
837
+ button.className = action.destructive
838
+ ? "mira-block-menu__item mira-block-menu__item--destructive"
839
+ : "mira-block-menu__item";
840
+ button.setAttribute("role", "menuitem");
841
+ button.textContent = action.label;
842
+ button.disabled = dynamicDisabled(action, context);
843
+ button.onclick = () => {
844
+ void action.run(context);
845
+ this.closeMenu();
846
+ this.view.focus();
847
+ };
848
+ return button;
849
+ }
850
+ actionsFor(handle) {
851
+ return [
852
+ ...builtInBlockActions(this.view, this.handles, handle),
853
+ ...(this.options.blockActions ?? []).filter((action) => !action.placements || action.placements.includes("context-menu")),
854
+ ];
855
+ }
856
+ actionContext(handle) {
857
+ const selection = this.view.state.selection.main;
858
+ const range = selection.empty
859
+ ? null
860
+ : { from: selection.from, to: selection.to };
861
+ const handles = selectedHandles(this.view, this.handles, handle);
862
+ const blocks = handles.map((target) => target.affectedRange);
863
+ return {
864
+ view: this.view,
865
+ block: handle.affectedRange,
866
+ blocks,
867
+ handle,
868
+ affectedRange: handle.affectedRange,
869
+ selection: range,
870
+ sourcePath: this.options.sourcePath,
871
+ focus: () => this.view.focus(),
872
+ getValue: () => this.view.state.doc.toString(),
873
+ insertMarkdown: (markdown, selection) => replaceMarkdownRange(this.view, markdown, {
874
+ from: this.view.state.selection.main.from,
875
+ to: this.view.state.selection.main.to,
876
+ }, selection),
877
+ replaceRange: (markdown, range, selection) => replaceMarkdownRange(this.view, markdown, range, selection),
878
+ setValue: (value) => {
879
+ this.view.dispatch({
880
+ changes: { from: 0, to: this.view.state.doc.length, insert: value },
881
+ });
882
+ },
883
+ };
884
+ }
885
+ closeMenu() {
886
+ this.menu.hidden = true;
887
+ this.menu.replaceChildren();
888
+ }
889
+ closeToolbarMenu() {
890
+ for (const cleanup of this.toolbarIconCleanups.splice(0)) {
891
+ cleanup();
892
+ }
893
+ this.toolbarMenu.hidden = true;
894
+ this.toolbarMenu.replaceChildren();
895
+ this.toolbarHandleId = null;
896
+ if (this.toolbarTrigger) {
897
+ this.toolbarTrigger.classList.remove("mira-block-toolbar-trigger--open");
898
+ this.toolbarTrigger.setAttribute("aria-expanded", "false");
899
+ this.toolbarTrigger = null;
900
+ }
901
+ }
902
+ highlightHandle(handle) {
903
+ this.view.dispatch({
904
+ effects: setBlockHighlightEffect.of({
905
+ handleId: handle.id,
906
+ range: handle.affectedRange,
907
+ }),
908
+ });
909
+ this.scheduleRender();
910
+ }
911
+ clearHighlight() {
912
+ if (!blockHighlight(this.view.state).handleId) {
913
+ return;
914
+ }
915
+ this.view.dispatch({ effects: setBlockHighlightEffect.of(null) });
916
+ this.scheduleRender();
917
+ }
918
+ handleDocumentPointerDown = (event) => {
919
+ const target = event.target instanceof Node ? event.target : null;
920
+ if (!target) {
921
+ return;
922
+ }
923
+ if (!this.menu.hidden && !this.menu.contains(target)) {
924
+ this.closeMenu();
925
+ }
926
+ if (!this.toolbarMenu.hidden &&
927
+ !this.toolbarMenu.contains(target) &&
928
+ !closestBlockToolbarTrigger(target)) {
929
+ this.closeToolbarMenu();
930
+ }
931
+ if (!closestBlockHandle(target) &&
932
+ !closestBlockToolbarTrigger(target) &&
933
+ !this.menu.contains(target) &&
934
+ !this.toolbarMenu.contains(target)) {
935
+ this.clearHighlight();
936
+ }
937
+ };
938
+ handleDocumentKeyDown = (event) => {
939
+ if (event.key === "Escape") {
940
+ this.closeMenu();
941
+ this.closeToolbarMenu();
942
+ this.clearHighlight();
943
+ }
944
+ };
945
+ }
946
+ function builtInBlockActions(view, allHandles, handle) {
947
+ return [
948
+ {
949
+ id: "mira-block-move-up",
950
+ label: "Move up",
951
+ disabled: ({ blocks }) => {
952
+ const first = blocks[0] ?? handle.affectedRange;
953
+ return (allHandles.findIndex((candidate) => candidate.affectedRange.id === first.id) <= 0);
954
+ },
955
+ run: ({ blocks }) => {
956
+ const sourceHandles = handlesForAction(allHandles, blocks, handle);
957
+ const firstIndex = allHandles.findIndex((candidate) => candidate.id === sourceHandles[0].id);
958
+ const target = allHandles[firstIndex - 1];
959
+ if (target) {
960
+ if (sourceHandles.length === 1) {
961
+ moveMarkdownBlockHandle(view, sourceHandles[0], {
962
+ handle: target,
963
+ position: "before",
964
+ });
965
+ }
966
+ else {
967
+ moveMarkdownBlockRange(view, compositeHandleRange(view, sourceHandles), {
968
+ block: target.affectedRange,
969
+ position: "before",
970
+ });
971
+ }
972
+ }
973
+ },
974
+ },
975
+ {
976
+ id: "mira-block-move-down",
977
+ label: "Move down",
978
+ disabled: ({ blocks }) => {
979
+ const last = blocks.at(-1) ?? handle.affectedRange;
980
+ return (allHandles.findIndex((candidate) => candidate.affectedRange.id === last.id) >=
981
+ allHandles.length - 1);
982
+ },
983
+ run: ({ blocks }) => {
984
+ const sourceHandles = handlesForAction(allHandles, blocks, handle);
985
+ const lastIndex = allHandles.findIndex((candidate) => candidate.id === sourceHandles.at(-1).id);
986
+ const target = allHandles[lastIndex + 1];
987
+ if (target) {
988
+ if (sourceHandles.length === 1) {
989
+ moveMarkdownBlockHandle(view, sourceHandles[0], {
990
+ handle: target,
991
+ position: "after",
992
+ });
993
+ }
994
+ else {
995
+ moveMarkdownBlockRange(view, compositeHandleRange(view, sourceHandles), {
996
+ block: target.affectedRange,
997
+ position: "after",
998
+ });
999
+ }
1000
+ }
1001
+ },
1002
+ },
1003
+ {
1004
+ id: "mira-block-duplicate",
1005
+ label: "Duplicate",
1006
+ run: ({ blocks }) => {
1007
+ const sourceHandles = handlesForAction(allHandles, blocks, handle);
1008
+ if (sourceHandles.length === 1) {
1009
+ duplicateMarkdownBlockHandle(view, sourceHandles[0]);
1010
+ }
1011
+ else {
1012
+ duplicateMarkdownBlockRange(view, compositeHandleRange(view, sourceHandles));
1013
+ }
1014
+ },
1015
+ },
1016
+ {
1017
+ id: "mira-block-delete",
1018
+ label: "Delete",
1019
+ destructive: true,
1020
+ run: ({ blocks }) => {
1021
+ const sourceHandles = handlesForAction(allHandles, blocks, handle);
1022
+ if (sourceHandles.length === 1) {
1023
+ deleteMarkdownBlockHandle(view, sourceHandles[0]);
1024
+ }
1025
+ else {
1026
+ deleteMarkdownBlockRange(view, compositeHandleRange(view, sourceHandles));
1027
+ }
1028
+ },
1029
+ },
1030
+ ];
1031
+ }
1032
+ function blockToolbarItemDefinition(type) {
1033
+ switch (type) {
1034
+ case "task":
1035
+ return { group: "text", icon: "task", label: "Task" };
1036
+ case "paragraph":
1037
+ return { group: "text", icon: "paragraph", label: "Paragraph" };
1038
+ case "heading1":
1039
+ return {
1040
+ group: "headings",
1041
+ icon: "heading1",
1042
+ label: "Heading 1",
1043
+ shortcut: "⌥⌘1",
1044
+ };
1045
+ case "heading2":
1046
+ return {
1047
+ group: "headings",
1048
+ icon: "heading2",
1049
+ label: "Heading 2",
1050
+ shortcut: "⌥⌘2",
1051
+ };
1052
+ case "heading3":
1053
+ return {
1054
+ group: "headings",
1055
+ icon: "heading3",
1056
+ label: "Heading 3",
1057
+ shortcut: "⌥⌘3",
1058
+ };
1059
+ case "divider":
1060
+ return { group: "structure", icon: "divider", label: "Divider" };
1061
+ case "bulletList":
1062
+ return { group: "structure", icon: "bulletList", label: "Bullet list" };
1063
+ case "numberedList":
1064
+ return {
1065
+ group: "structure",
1066
+ icon: "numberedList",
1067
+ label: "Numbered list",
1068
+ };
1069
+ case "quote":
1070
+ return { group: "structure", icon: "quote", label: "Blockquote" };
1071
+ case "image":
1072
+ return { group: "insert", icon: "image", label: "Image" };
1073
+ }
1074
+ }
1075
+ function blockActionIcon(icon) {
1076
+ return icon === "check" ? "task" : (icon ?? "generic");
1077
+ }
1078
+ function activeHandle(view, handles) {
1079
+ return handleAtPosition(view.state, handles, view.state.selection.main.head);
1080
+ }
1081
+ function selectedHandles(view, handles, fallback) {
1082
+ const selection = view.state.selection.main;
1083
+ if (selection.empty) {
1084
+ return [fallback];
1085
+ }
1086
+ const selected = handles.filter((handle) => selection.from <= handle.handleRange.to &&
1087
+ selection.to >= handle.handleRange.from);
1088
+ return selected.length > 0 ? selected : [fallback];
1089
+ }
1090
+ function handlesForAction(allHandles, blocks, fallback) {
1091
+ if (blocks.length === 0) {
1092
+ return [fallback];
1093
+ }
1094
+ const handles = blocks
1095
+ .map((block) => allHandles.find((handle) => handle.affectedRange.id === block.id))
1096
+ .filter((handle) => Boolean(handle));
1097
+ return handles.length > 0 ? handles : [fallback];
1098
+ }
1099
+ function compositeHandleRange(view, handles) {
1100
+ const sorted = [...handles]
1101
+ .map((handle) => handle.affectedRange)
1102
+ .sort((a, b) => a.from - b.from);
1103
+ const first = sorted[0];
1104
+ const last = sorted.at(-1);
1105
+ return {
1106
+ id: sorted.map((block) => block.id).join("+"),
1107
+ kind: first.kind,
1108
+ from: first.from,
1109
+ to: last.to,
1110
+ startLine: first.startLine,
1111
+ endLine: last.endLine,
1112
+ text: view.state.doc.sliceString(first.from, last.to),
1113
+ };
1114
+ }
1115
+ function closestBlockHandle(target) {
1116
+ return target instanceof Element
1117
+ ? target.closest(".mira-block-handle")
1118
+ : null;
1119
+ }
1120
+ function closestBlockToolbarTrigger(target) {
1121
+ return target instanceof Element
1122
+ ? target.closest(".mira-block-toolbar-trigger")
1123
+ : null;
1124
+ }
1125
+ function dynamicDisabled(action, context) {
1126
+ if (typeof action.disabled === "function") {
1127
+ return action.disabled(context);
1128
+ }
1129
+ return action.disabled ?? false;
1130
+ }
1131
+ function buildHighlightDecorations(state, range) {
1132
+ const decorations = [];
1133
+ const fromLine = state.doc.lineAt(range.from);
1134
+ const toLine = state.doc.lineAt(Math.max(range.from, range.to));
1135
+ for (let lineNumber = fromLine.number; lineNumber <= toLine.number; lineNumber += 1) {
1136
+ decorations.push(Decoration.line({ class: "mira-block-affected-line" }).range(state.doc.line(lineNumber).from));
1137
+ }
1138
+ return Decoration.set(decorations);
1139
+ }
1140
+ const blockControlsTheme = EditorView.theme({
1141
+ "&": {
1142
+ position: "relative",
1143
+ },
1144
+ ".mira-block-controls-layer": {
1145
+ inset: "0",
1146
+ overflow: "visible",
1147
+ pointerEvents: "none",
1148
+ position: "absolute",
1149
+ zIndex: "30",
1150
+ },
1151
+ ".cm-gutter.mira-block-controls-gutter": {
1152
+ background: "transparent",
1153
+ borderInlineEnd: "0",
1154
+ minWidth: "1.25rem",
1155
+ width: "1.25rem",
1156
+ },
1157
+ "&.mira-block-toolbar-enabled .cm-gutter.mira-block-controls-gutter": {
1158
+ minWidth: "2.375rem",
1159
+ overflow: "visible",
1160
+ width: "2.375rem",
1161
+ },
1162
+ "&.mira-block-toolbar-enabled .cm-gutters": {
1163
+ marginInlineEnd: "1.75rem",
1164
+ },
1165
+ ".mira-block-controls-gutter .cm-gutterElement": {
1166
+ // Stay on the first visual line when a block wraps (not mid-block).
1167
+ alignItems: "flex-start",
1168
+ display: "flex",
1169
+ justifyContent: "center",
1170
+ minWidth: "1.25rem",
1171
+ padding: "0",
1172
+ },
1173
+ "&.mira-block-toolbar-enabled .mira-block-controls-gutter .cm-gutterElement": {
1174
+ minWidth: "2.375rem",
1175
+ width: "2.375rem",
1176
+ },
1177
+ ".mira-block-controls-row": {
1178
+ alignItems: "center",
1179
+ display: "inline-flex",
1180
+ gap: "0.125rem",
1181
+ height: "1.25rem",
1182
+ justifyContent: "center",
1183
+ lineHeight: "inherit",
1184
+ marginTop: "max(0px, calc((1lh - 1.25rem) / 2))",
1185
+ width: "2.375rem",
1186
+ },
1187
+ ".mira-block-handle-spacer": {
1188
+ display: "block",
1189
+ height: "1rem",
1190
+ // Inherit gutter line-height so 1lh matches the first content line.
1191
+ lineHeight: "inherit",
1192
+ marginTop: "max(0px, calc((1lh - 1rem) / 2))",
1193
+ width: "1rem",
1194
+ },
1195
+ ".mira-block-handle": {
1196
+ alignItems: "center",
1197
+ appearance: "none",
1198
+ background: "transparent",
1199
+ border: "0",
1200
+ borderRadius: "0",
1201
+ boxShadow: "none",
1202
+ color: "var(--mira-muted-foreground)",
1203
+ cursor: "grab",
1204
+ display: "inline-flex",
1205
+ height: "1rem",
1206
+ justifyContent: "center",
1207
+ // Inherit gutter line-height so 1lh is the first-line box, not the
1208
+ // button's own metrics; then center the 1rem grip in that band.
1209
+ lineHeight: "inherit",
1210
+ marginTop: "max(0px, calc((1lh - 1rem) / 2))",
1211
+ opacity: "0",
1212
+ padding: "0",
1213
+ pointerEvents: "auto",
1214
+ position: "relative",
1215
+ transition: "opacity 120ms ease, color 120ms ease",
1216
+ width: "1rem",
1217
+ },
1218
+ ".mira-block-controls-row .mira-block-handle": {
1219
+ marginTop: "0",
1220
+ },
1221
+ ".mira-block-controls-gutter:hover .mira-block-handle, .mira-block-handle--active, .mira-block-handle--selected, .mira-block-handle:hover, .mira-block-handle:focus-visible": {
1222
+ opacity: "1",
1223
+ },
1224
+ ".mira-block-handle:active, &.mira-block-controls-dragging .mira-block-handle": {
1225
+ cursor: "grabbing",
1226
+ },
1227
+ ".mira-block-handle:hover, .mira-block-handle:focus-visible": {
1228
+ color: "var(--mira-foreground)",
1229
+ outline: "none",
1230
+ },
1231
+ ".mira-block-handle--selected": {
1232
+ color: "var(--mira-accent)",
1233
+ },
1234
+ ".mira-block-handle svg": {
1235
+ display: "block",
1236
+ height: "1rem",
1237
+ stroke: "currentColor",
1238
+ strokeLinecap: "round",
1239
+ strokeLinejoin: "round",
1240
+ strokeWidth: "3",
1241
+ width: "1rem",
1242
+ },
1243
+ ".mira-block-toolbar-trigger": {
1244
+ alignItems: "center",
1245
+ appearance: "none",
1246
+ background: "var(--mira-accent-soft)",
1247
+ border: "1px solid transparent",
1248
+ borderRadius: "999px",
1249
+ boxShadow: "none",
1250
+ color: "var(--mira-muted-foreground)",
1251
+ cursor: "pointer",
1252
+ display: "inline-flex",
1253
+ flex: "0 0 1.25rem",
1254
+ height: "1.25rem",
1255
+ justifyContent: "center",
1256
+ lineHeight: "1",
1257
+ opacity: "0",
1258
+ padding: "0",
1259
+ pointerEvents: "none",
1260
+ transition: "background-color 120ms ease, border-color 120ms ease, color 120ms ease, opacity 120ms ease",
1261
+ width: "1.25rem",
1262
+ },
1263
+ ".mira-block-controls-gutter .cm-gutterElement:hover .mira-block-toolbar-trigger, .mira-block-toolbar-trigger--active, .mira-block-toolbar-trigger--selected, .mira-block-toolbar-trigger--open, .mira-block-toolbar-trigger:focus-visible": {
1264
+ opacity: "1",
1265
+ pointerEvents: "auto",
1266
+ },
1267
+ ".mira-block-toolbar-trigger:hover, .mira-block-toolbar-trigger:focus-visible, .mira-block-toolbar-trigger--open": {
1268
+ background: "var(--mira-accent-soft)",
1269
+ borderColor: "var(--mira-border)",
1270
+ color: "var(--mira-foreground)",
1271
+ outline: "none",
1272
+ },
1273
+ ".mira-block-toolbar-trigger:focus-visible": {
1274
+ borderColor: "var(--mira-focus-ring, var(--mira-accent))",
1275
+ boxShadow: "0 0 0 1px var(--mira-focus-ring, var(--mira-accent))",
1276
+ },
1277
+ ".mira-block-toolbar__icon-svg": {
1278
+ fill: "none",
1279
+ height: "0.75rem",
1280
+ pointerEvents: "none",
1281
+ stroke: "currentColor",
1282
+ strokeLinecap: "round",
1283
+ strokeLinejoin: "round",
1284
+ strokeWidth: "2",
1285
+ width: "0.75rem",
1286
+ },
1287
+ ".mira-block-toolbar__icon-text": {
1288
+ fontFamily: "var(--mira-font-sans)",
1289
+ fontSize: "0.625rem",
1290
+ fontWeight: "650",
1291
+ letterSpacing: "-0.04em",
1292
+ pointerEvents: "none",
1293
+ },
1294
+ ".mira-block-drop-line": {
1295
+ background: "var(--mira-accent)",
1296
+ height: "2px",
1297
+ insetInline: "2.25rem 0.75rem",
1298
+ pointerEvents: "none",
1299
+ position: "absolute",
1300
+ },
1301
+ ".mira-block-affected-line": {
1302
+ backgroundColor: "color-mix(in srgb, var(--mira-accent) 12%, transparent)",
1303
+ },
1304
+ ".mira-block-menu": {
1305
+ background: "var(--mira-popover)",
1306
+ border: "1px solid var(--mira-border)",
1307
+ borderRadius: "var(--mira-radius)",
1308
+ boxShadow: "var(--mira-widget-shadow)",
1309
+ color: "var(--mira-popover-foreground)",
1310
+ display: "grid",
1311
+ fontFamily: "var(--mira-font-sans)",
1312
+ fontSize: "13px",
1313
+ minWidth: "9rem",
1314
+ padding: "4px",
1315
+ pointerEvents: "auto",
1316
+ position: "absolute",
1317
+ },
1318
+ ".mira-block-menu[hidden]": {
1319
+ display: "none",
1320
+ },
1321
+ ".mira-block-menu__item": {
1322
+ background: "transparent",
1323
+ border: "0",
1324
+ borderRadius: "4px",
1325
+ color: "inherit",
1326
+ cursor: "pointer",
1327
+ font: "inherit",
1328
+ padding: "7px 8px",
1329
+ textAlign: "left",
1330
+ },
1331
+ ".mira-block-menu__item:hover, .mira-block-menu__item:focus-visible": {
1332
+ background: "var(--mira-accent-soft)",
1333
+ outline: "none",
1334
+ },
1335
+ ".mira-block-menu__item:disabled": {
1336
+ cursor: "not-allowed",
1337
+ opacity: "0.5",
1338
+ },
1339
+ ".mira-block-menu__item--destructive": {
1340
+ color: "var(--mira-danger, #dc2626)",
1341
+ },
1342
+ ".mira-block-toolbar-menu": {
1343
+ background: "var(--mira-popover)",
1344
+ border: "1px solid var(--mira-border)",
1345
+ borderRadius: "calc(var(--mira-radius) * 2)",
1346
+ boxShadow: "var(--mira-widget-shadow)",
1347
+ color: "var(--mira-popover-foreground)",
1348
+ display: "grid",
1349
+ fontFamily: "var(--mira-font-sans)",
1350
+ fontSize: "14px",
1351
+ maxHeight: "min(32rem, calc(100vh - 1rem))",
1352
+ minWidth: "16rem",
1353
+ overflowY: "auto",
1354
+ padding: "0.375rem",
1355
+ pointerEvents: "auto",
1356
+ position: "fixed",
1357
+ },
1358
+ ".mira-block-toolbar-menu[hidden]": {
1359
+ display: "none",
1360
+ },
1361
+ ".mira-block-toolbar-menu__separator": {
1362
+ background: "var(--mira-border)",
1363
+ height: "1px",
1364
+ margin: "0.3rem 0.25rem",
1365
+ },
1366
+ ".mira-block-toolbar-menu__item": {
1367
+ alignItems: "center",
1368
+ appearance: "none",
1369
+ background: "transparent",
1370
+ border: "0",
1371
+ borderRadius: "calc(var(--mira-radius) * 0.75)",
1372
+ color: "inherit",
1373
+ cursor: "pointer",
1374
+ display: "grid",
1375
+ font: "inherit",
1376
+ gap: "0.625rem",
1377
+ gridTemplateColumns: "1.25rem minmax(0, 1fr) auto",
1378
+ minHeight: "2.25rem",
1379
+ padding: "0.4rem 0.5rem",
1380
+ textAlign: "left",
1381
+ width: "100%",
1382
+ },
1383
+ '.mira-block-toolbar-menu__item[data-selected="true"]': {
1384
+ background: "var(--mira-accent-soft)",
1385
+ color: "var(--mira-accent)",
1386
+ },
1387
+ ".mira-block-toolbar-menu__item:hover, .mira-block-toolbar-menu__item:focus-visible": {
1388
+ background: "var(--mira-accent-soft)",
1389
+ outline: "none",
1390
+ },
1391
+ ".mira-block-toolbar-menu__item:focus-visible": {
1392
+ boxShadow: "inset 0 0 0 1px var(--mira-focus-ring, var(--mira-accent))",
1393
+ },
1394
+ ".mira-block-toolbar-menu__item:disabled": {
1395
+ cursor: "not-allowed",
1396
+ opacity: "0.45",
1397
+ },
1398
+ ".mira-block-toolbar-menu__icon": {
1399
+ alignItems: "center",
1400
+ color: "var(--mira-muted-foreground)",
1401
+ display: "inline-flex",
1402
+ height: "1.25rem",
1403
+ justifyContent: "center",
1404
+ width: "1.25rem",
1405
+ },
1406
+ ".mira-block-toolbar-menu__label": {
1407
+ overflow: "hidden",
1408
+ textOverflow: "ellipsis",
1409
+ whiteSpace: "nowrap",
1410
+ },
1411
+ ".mira-block-toolbar-menu__shortcut": {
1412
+ background: "var(--mira-muted)",
1413
+ borderRadius: "999px",
1414
+ color: "var(--mira-muted-foreground)",
1415
+ font: "inherit",
1416
+ fontSize: "0.75rem",
1417
+ padding: "0.15rem 0.4rem",
1418
+ },
1419
+ });