@blocknote/core 0.17.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/angular-html-HQGguTAE.js +33 -0
  2. package/dist/angular-html-HQGguTAE.js.map +1 -0
  3. package/dist/angular-ts-q9PqJiJb.js +22 -0
  4. package/dist/angular-ts-q9PqJiJb.js.map +1 -0
  5. package/dist/astro-0iWgpDaK.js +17 -0
  6. package/dist/astro-0iWgpDaK.js.map +1 -0
  7. package/dist/blade-C3Z8AhvY.js +19 -0
  8. package/dist/blade-C3Z8AhvY.js.map +1 -0
  9. package/dist/blocknote.js +2338 -1491
  10. package/dist/blocknote.js.map +1 -1
  11. package/dist/blocknote.umd.cjs +10 -7
  12. package/dist/blocknote.umd.cjs.map +1 -1
  13. package/dist/c-TKJGJdXV.js +7 -0
  14. package/dist/c-TKJGJdXV.js.map +1 -0
  15. package/dist/coffee-CN_y6cG3.js +9 -0
  16. package/dist/coffee-CN_y6cG3.js.map +1 -0
  17. package/dist/cpp-Be_e67JE.js +19 -0
  18. package/dist/cpp-Be_e67JE.js.map +1 -0
  19. package/dist/css-DHLSoXzW.js +7 -0
  20. package/dist/css-DHLSoXzW.js.map +1 -0
  21. package/dist/glsl-8qSUIm5B.js +9 -0
  22. package/dist/glsl-8qSUIm5B.js.map +1 -0
  23. package/dist/graphql-D7_Dk2ma.js +15 -0
  24. package/dist/graphql-D7_Dk2ma.js.map +1 -0
  25. package/dist/haml-S3dmcfEW.js +11 -0
  26. package/dist/haml-S3dmcfEW.js.map +1 -0
  27. package/dist/handlebars-DaIrqVg3.js +15 -0
  28. package/dist/handlebars-DaIrqVg3.js.map +1 -0
  29. package/dist/html-Bx3A18fV.js +11 -0
  30. package/dist/html-Bx3A18fV.js.map +1 -0
  31. package/dist/html-derivative-Cf3KTZBS.js +9 -0
  32. package/dist/html-derivative-Cf3KTZBS.js.map +1 -0
  33. package/dist/http-BphR83YX.js +15 -0
  34. package/dist/http-BphR83YX.js.map +1 -0
  35. package/dist/imba-CmP25v0O.js +9 -0
  36. package/dist/imba-CmP25v0O.js.map +1 -0
  37. package/dist/java-Dg4kxH6C.js +7 -0
  38. package/dist/java-Dg4kxH6C.js.map +1 -0
  39. package/dist/javascript-CipAzIn1.js +7 -0
  40. package/dist/javascript-CipAzIn1.js.map +1 -0
  41. package/dist/jinja-tioldiz6.js +12 -0
  42. package/dist/jinja-tioldiz6.js.map +1 -0
  43. package/dist/jison-DWJFEE_I.js +9 -0
  44. package/dist/jison-DWJFEE_I.js.map +1 -0
  45. package/dist/json-_04EL6MS.js +7 -0
  46. package/dist/json-_04EL6MS.js.map +1 -0
  47. package/dist/json5-Dwmp5XFI.js +7 -0
  48. package/dist/json5-Dwmp5XFI.js.map +1 -0
  49. package/dist/jsonc-LqD5auy0.js +7 -0
  50. package/dist/jsonc-LqD5auy0.js.map +1 -0
  51. package/dist/jsonl-B4yVuYQH.js +7 -0
  52. package/dist/jsonl-B4yVuYQH.js.map +1 -0
  53. package/dist/jsx-Mg4WaD5k.js +7 -0
  54. package/dist/jsx-Mg4WaD5k.js.map +1 -0
  55. package/dist/julia-CWi-ZdpN.js +17 -0
  56. package/dist/julia-CWi-ZdpN.js.map +1 -0
  57. package/dist/less-BBvTHIGe.js +7 -0
  58. package/dist/less-BBvTHIGe.js.map +1 -0
  59. package/dist/markdown-DAXqtk9a.js +7 -0
  60. package/dist/markdown-DAXqtk9a.js.map +1 -0
  61. package/dist/marko-0aaNgUGV.js +15 -0
  62. package/dist/marko-0aaNgUGV.js.map +1 -0
  63. package/dist/mdc-hXJ2B4O0.js +13 -0
  64. package/dist/mdc-hXJ2B4O0.js.map +1 -0
  65. package/dist/mdx-CSCKbb_f.js +7 -0
  66. package/dist/mdx-CSCKbb_f.js.map +1 -0
  67. package/dist/php-B_-4RJ09.js +19 -0
  68. package/dist/php-B_-4RJ09.js.map +1 -0
  69. package/dist/postcss-SJfTvo_B.js +7 -0
  70. package/dist/postcss-SJfTvo_B.js.map +1 -0
  71. package/dist/pug-3q2tx0nf.js +13 -0
  72. package/dist/pug-3q2tx0nf.js.map +1 -0
  73. package/dist/python-Dpup1-fE.js +7 -0
  74. package/dist/python-Dpup1-fE.js.map +1 -0
  75. package/dist/r-Chyv38Fv.js +7 -0
  76. package/dist/r-Chyv38Fv.js.map +1 -0
  77. package/dist/regexp-BF0hfxNW.js +7 -0
  78. package/dist/regexp-BF0hfxNW.js.map +1 -0
  79. package/dist/sass-p2RMoqDT.js +7 -0
  80. package/dist/sass-p2RMoqDT.js.map +1 -0
  81. package/dist/scss-DmlHSoOY.js +9 -0
  82. package/dist/scss-DmlHSoOY.js.map +1 -0
  83. package/dist/shellscript-CZpPN8_x.js +7 -0
  84. package/dist/shellscript-CZpPN8_x.js.map +1 -0
  85. package/dist/sql-DtlkUz2m.js +7 -0
  86. package/dist/sql-DtlkUz2m.js.map +1 -0
  87. package/dist/style.css +1 -1
  88. package/dist/stylus-DEr8eSLm.js +7 -0
  89. package/dist/stylus-DEr8eSLm.js.map +1 -0
  90. package/dist/svelte-BRIJF62h.js +15 -0
  91. package/dist/svelte-BRIJF62h.js.map +1 -0
  92. package/dist/ts-tags-qkUtuI0N.js +42 -0
  93. package/dist/ts-tags-qkUtuI0N.js.map +1 -0
  94. package/dist/tsx-DTfbgJxi.js +7 -0
  95. package/dist/tsx-DTfbgJxi.js.map +1 -0
  96. package/dist/typescript-CCd4aQHh.js +7 -0
  97. package/dist/typescript-CCd4aQHh.js.map +1 -0
  98. package/dist/vue-B3TdbERm.js +32 -0
  99. package/dist/vue-B3TdbERm.js.map +1 -0
  100. package/dist/vue-html-BGmTBZk0.js +11 -0
  101. package/dist/vue-html-BGmTBZk0.js.map +1 -0
  102. package/dist/wasm-VDIDph3E.js +7 -0
  103. package/dist/wasm-VDIDph3E.js.map +1 -0
  104. package/dist/webpack-stats.json +1 -1
  105. package/dist/wgsl-2np_U3Z8.js +7 -0
  106. package/dist/wgsl-2np_U3Z8.js.map +1 -0
  107. package/dist/xml-CNyphW9R.js +9 -0
  108. package/dist/xml-CNyphW9R.js.map +1 -0
  109. package/dist/yaml-DxFiVFcM.js +7 -0
  110. package/dist/yaml-DxFiVFcM.js.map +1 -0
  111. package/package.json +6 -4
  112. package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +30 -0
  113. package/src/api/blockManipulation/commands/mergeBlocks/__snapshots__/mergeBlocks.test.ts.snap +25 -0
  114. package/src/api/blockManipulation/commands/moveBlock/__snapshots__/moveBlock.test.ts.snap +40 -0
  115. package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +10 -0
  116. package/src/api/blockManipulation/commands/replaceBlocks/__snapshots__/replaceBlocks.test.ts.snap +40 -0
  117. package/src/api/blockManipulation/commands/splitBlock/__snapshots__/splitBlock.test.ts.snap +30 -0
  118. package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +87 -0
  119. package/src/api/clipboard/clipboard.test.ts +1 -1
  120. package/src/api/clipboard/fromClipboard/acceptedMIMETypes.ts +1 -0
  121. package/src/api/clipboard/fromClipboard/handleVSCodePaste.ts +49 -0
  122. package/src/api/clipboard/fromClipboard/pasteExtension.ts +6 -0
  123. package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/external.html +1 -0
  124. package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/internal.html +1 -0
  125. package/src/api/exporters/html/__snapshots__/codeBlock/empty/external.html +1 -0
  126. package/src/api/exporters/html/__snapshots__/codeBlock/empty/internal.html +1 -0
  127. package/src/api/exporters/html/__snapshots__/codeBlock/python/external.html +1 -0
  128. package/src/api/exporters/html/__snapshots__/codeBlock/python/internal.html +1 -0
  129. package/src/api/exporters/html/__snapshots__/image/basic/internal.html +1 -1
  130. package/src/api/exporters/html/__snapshots__/image/nested/internal.html +1 -1
  131. package/src/api/exporters/html/__snapshots__/image/noName/internal.html +1 -1
  132. package/src/api/exporters/html/__snapshots__/image/noPreview/internal.html +1 -1
  133. package/src/api/exporters/html/__snapshots__/lists/basic/internal.html +1 -1
  134. package/src/api/exporters/html/__snapshots__/lists/nested/internal.html +1 -1
  135. package/src/api/exporters/html/__snapshots__/simpleImage/basic/external.html +1 -1
  136. package/src/api/exporters/html/__snapshots__/simpleImage/basic/internal.html +1 -1
  137. package/src/api/exporters/html/__snapshots__/simpleImage/nested/external.html +1 -1
  138. package/src/api/exporters/html/__snapshots__/simpleImage/nested/internal.html +1 -1
  139. package/src/api/exporters/html/__snapshots__/simpleImage/noCaption/external.html +1 -1
  140. package/src/api/exporters/html/__snapshots__/simpleImage/noName/external.html +1 -1
  141. package/src/api/exporters/html/__snapshots__/simpleImage/noName/internal.html +1 -1
  142. package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/external.html +1 -1
  143. package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/internal.html +1 -1
  144. package/src/api/exporters/html/__snapshots__/table/allColWidths/external.html +1 -0
  145. package/src/api/exporters/html/__snapshots__/table/allColWidths/internal.html +1 -0
  146. package/src/api/exporters/html/__snapshots__/table/basic/external.html +1 -0
  147. package/src/api/exporters/html/__snapshots__/table/basic/internal.html +1 -0
  148. package/src/api/exporters/html/__snapshots__/table/mixedColWidths/external.html +1 -0
  149. package/src/api/exporters/html/__snapshots__/table/mixedColWidths/internal.html +1 -0
  150. package/src/api/exporters/html/internalHTMLSerializer.ts +2 -7
  151. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +20 -15
  152. package/src/api/exporters/markdown/__snapshots__/codeBlock/defaultLanguage/markdown.md +3 -0
  153. package/src/api/exporters/markdown/__snapshots__/codeBlock/empty/markdown.md +2 -0
  154. package/src/api/exporters/markdown/__snapshots__/codeBlock/python/markdown.md +3 -0
  155. package/src/api/exporters/markdown/__snapshots__/table/allColWidths/markdown.md +5 -0
  156. package/src/api/exporters/markdown/__snapshots__/table/basic/markdown.md +5 -0
  157. package/src/api/exporters/markdown/__snapshots__/table/mixedColWidths/markdown.md +5 -0
  158. package/src/api/nodeConversions/__snapshots__/nodeConversions.test.ts.snap +711 -0
  159. package/src/api/nodeConversions/blockToNode.ts +13 -2
  160. package/src/api/nodeConversions/nodeToBlock.ts +11 -1
  161. package/src/api/parsers/html/__snapshots__/parse-notion-html.json +5 -0
  162. package/src/api/parsers/markdown/parseMarkdown.ts +1 -1
  163. package/src/api/testUtil/cases/defaultSchema.ts +95 -0
  164. package/src/api/testUtil/partialBlockTestUtil.ts +26 -1
  165. package/src/blocks/CodeBlockContent/CodeBlockContent.ts +369 -0
  166. package/src/blocks/CodeBlockContent/defaultSupportedLanguages.ts +96 -0
  167. package/src/blocks/FileBlockContent/fileBlockHelpers.ts +7 -0
  168. package/src/blocks/TableBlockContent/TableBlockContent.ts +83 -8
  169. package/src/blocks/TableBlockContent/TableExtension.ts +10 -1
  170. package/src/blocks/defaultBlocks.ts +4 -0
  171. package/src/editor/Block.css +49 -2
  172. package/src/editor/editor.css +33 -5
  173. package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +8 -0
  174. package/src/extensions/Placeholder/PlaceholderPlugin.ts +5 -0
  175. package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +5 -0
  176. package/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts +2 -1
  177. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +18 -0
  178. package/src/extensions/TableHandles/TableHandlesPlugin.ts +224 -119
  179. package/src/i18n/locales/ar.ts +6 -0
  180. package/src/i18n/locales/de.ts +299 -294
  181. package/src/i18n/locales/en.ts +6 -0
  182. package/src/i18n/locales/es.ts +310 -274
  183. package/src/i18n/locales/fr.ts +6 -0
  184. package/src/i18n/locales/is.ts +6 -0
  185. package/src/i18n/locales/ja.ts +6 -0
  186. package/src/i18n/locales/ko.ts +6 -0
  187. package/src/i18n/locales/nl.ts +6 -0
  188. package/src/i18n/locales/pl.ts +6 -0
  189. package/src/i18n/locales/pt.ts +6 -0
  190. package/src/i18n/locales/ru.ts +6 -0
  191. package/src/i18n/locales/vi.ts +6 -0
  192. package/src/i18n/locales/zh.ts +6 -0
  193. package/src/index.ts +10 -5
  194. package/src/schema/blocks/types.ts +2 -0
  195. package/types/src/api/blockManipulation/setupTestEnv.d.ts +22 -8
  196. package/types/src/api/clipboard/fromClipboard/acceptedMIMETypes.d.ts +1 -1
  197. package/types/src/api/clipboard/fromClipboard/handleVSCodePaste.d.ts +3 -0
  198. package/types/src/api/exporters/html/util/serializeBlocksInternalHTML.d.ts +2 -3
  199. package/types/src/api/testUtil/cases/customBlocks.d.ts +22 -8
  200. package/types/src/api/testUtil/cases/customInlineContent.d.ts +22 -8
  201. package/types/src/api/testUtil/cases/customStyles.d.ts +22 -8
  202. package/types/src/blocks/CodeBlockContent/CodeBlockContent.d.ts +57 -0
  203. package/types/src/blocks/CodeBlockContent/defaultSupportedLanguages.d.ts +6 -0
  204. package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +0 -12
  205. package/types/src/blocks/TableBlockContent/TableExtension.d.ts +3 -0
  206. package/types/src/blocks/defaultBlocks.d.ts +45 -16
  207. package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +9 -5
  208. package/types/src/i18n/locales/de.d.ts +6 -0
  209. package/types/src/i18n/locales/en.d.ts +6 -0
  210. package/types/src/i18n/locales/es.d.ts +6 -0
  211. package/types/src/index.d.ts +7 -5
  212. package/types/src/schema/blocks/types.d.ts +2 -0
@@ -258,6 +258,11 @@ exports[`Test updateBlock > Revert all props 1`] = `
258
258
  {
259
259
  "children": [],
260
260
  "content": {
261
+ "columnWidths": [
262
+ undefined,
263
+ undefined,
264
+ undefined,
265
+ ],
261
266
  "rows": [
262
267
  {
263
268
  "cells": [
@@ -729,6 +734,11 @@ exports[`Test updateBlock > Revert single prop 1`] = `
729
734
  {
730
735
  "children": [],
731
736
  "content": {
737
+ "columnWidths": [
738
+ undefined,
739
+ undefined,
740
+ undefined,
741
+ ],
732
742
  "rows": [
733
743
  {
734
744
  "cells": [
@@ -1200,6 +1210,11 @@ exports[`Test updateBlock > Update all props 1`] = `
1200
1210
  {
1201
1211
  "children": [],
1202
1212
  "content": {
1213
+ "columnWidths": [
1214
+ undefined,
1215
+ undefined,
1216
+ undefined,
1217
+ ],
1203
1218
  "rows": [
1204
1219
  {
1205
1220
  "cells": [
@@ -1671,6 +1686,11 @@ exports[`Test updateBlock > Update children 1`] = `
1671
1686
  {
1672
1687
  "children": [],
1673
1688
  "content": {
1689
+ "columnWidths": [
1690
+ undefined,
1691
+ undefined,
1692
+ undefined,
1693
+ ],
1674
1694
  "rows": [
1675
1695
  {
1676
1696
  "cells": [
@@ -1889,6 +1909,7 @@ exports[`Test updateBlock > Update inline content to empty table content 1`] = `
1889
1909
  {
1890
1910
  "children": [],
1891
1911
  "content": {
1912
+ "columnWidths": [],
1892
1913
  "rows": [],
1893
1914
  "type": "tableContent",
1894
1915
  },
@@ -2138,6 +2159,11 @@ exports[`Test updateBlock > Update inline content to empty table content 1`] = `
2138
2159
  {
2139
2160
  "children": [],
2140
2161
  "content": {
2162
+ "columnWidths": [
2163
+ undefined,
2164
+ undefined,
2165
+ undefined,
2166
+ ],
2141
2167
  "rows": [
2142
2168
  {
2143
2169
  "cells": [
@@ -2607,6 +2633,11 @@ exports[`Test updateBlock > Update inline content to no content 1`] = `
2607
2633
  {
2608
2634
  "children": [],
2609
2635
  "content": {
2636
+ "columnWidths": [
2637
+ undefined,
2638
+ undefined,
2639
+ undefined,
2640
+ ],
2610
2641
  "rows": [
2611
2642
  {
2612
2643
  "cells": [
@@ -2825,6 +2856,11 @@ exports[`Test updateBlock > Update inline content to table content 1`] = `
2825
2856
  {
2826
2857
  "children": [],
2827
2858
  "content": {
2859
+ "columnWidths": [
2860
+ undefined,
2861
+ undefined,
2862
+ undefined,
2863
+ ],
2828
2864
  "rows": [
2829
2865
  {
2830
2866
  "cells": [
@@ -3150,6 +3186,11 @@ exports[`Test updateBlock > Update inline content to table content 1`] = `
3150
3186
  {
3151
3187
  "children": [],
3152
3188
  "content": {
3189
+ "columnWidths": [
3190
+ undefined,
3191
+ undefined,
3192
+ undefined,
3193
+ ],
3153
3194
  "rows": [
3154
3195
  {
3155
3196
  "cells": [
@@ -3617,6 +3658,11 @@ exports[`Test updateBlock > Update no content to empty inline content 1`] = `
3617
3658
  {
3618
3659
  "children": [],
3619
3660
  "content": {
3661
+ "columnWidths": [
3662
+ undefined,
3663
+ undefined,
3664
+ undefined,
3665
+ ],
3620
3666
  "rows": [
3621
3667
  {
3622
3668
  "cells": [
@@ -4056,6 +4102,7 @@ exports[`Test updateBlock > Update no content to empty table content 1`] = `
4056
4102
  {
4057
4103
  "children": [],
4058
4104
  "content": {
4105
+ "columnWidths": [],
4059
4106
  "rows": [],
4060
4107
  "type": "tableContent",
4061
4108
  },
@@ -4086,6 +4133,11 @@ exports[`Test updateBlock > Update no content to empty table content 1`] = `
4086
4133
  {
4087
4134
  "children": [],
4088
4135
  "content": {
4136
+ "columnWidths": [
4137
+ undefined,
4138
+ undefined,
4139
+ undefined,
4140
+ ],
4089
4141
  "rows": [
4090
4142
  {
4091
4143
  "cells": [
@@ -4559,6 +4611,11 @@ exports[`Test updateBlock > Update no content to inline content 1`] = `
4559
4611
  {
4560
4612
  "children": [],
4561
4613
  "content": {
4614
+ "columnWidths": [
4615
+ undefined,
4616
+ undefined,
4617
+ undefined,
4618
+ ],
4562
4619
  "rows": [
4563
4620
  {
4564
4621
  "cells": [
@@ -4998,6 +5055,11 @@ exports[`Test updateBlock > Update no content to table content 1`] = `
4998
5055
  {
4999
5056
  "children": [],
5000
5057
  "content": {
5058
+ "columnWidths": [
5059
+ undefined,
5060
+ undefined,
5061
+ undefined,
5062
+ ],
5001
5063
  "rows": [
5002
5064
  {
5003
5065
  "cells": [
@@ -5104,6 +5166,11 @@ exports[`Test updateBlock > Update no content to table content 1`] = `
5104
5166
  {
5105
5167
  "children": [],
5106
5168
  "content": {
5169
+ "columnWidths": [
5170
+ undefined,
5171
+ undefined,
5172
+ undefined,
5173
+ ],
5107
5174
  "rows": [
5108
5175
  {
5109
5176
  "cells": [
@@ -5575,6 +5642,11 @@ exports[`Test updateBlock > Update single prop 1`] = `
5575
5642
  {
5576
5643
  "children": [],
5577
5644
  "content": {
5645
+ "columnWidths": [
5646
+ undefined,
5647
+ undefined,
5648
+ undefined,
5649
+ ],
5578
5650
  "rows": [
5579
5651
  {
5580
5652
  "cells": [
@@ -7235,6 +7307,11 @@ exports[`Test updateBlock > Update type 1`] = `
7235
7307
  {
7236
7308
  "children": [],
7237
7309
  "content": {
7310
+ "columnWidths": [
7311
+ undefined,
7312
+ undefined,
7313
+ undefined,
7314
+ ],
7238
7315
  "rows": [
7239
7316
  {
7240
7317
  "cells": [
@@ -7705,6 +7782,11 @@ exports[`Test updateBlock > Update with plain content 1`] = `
7705
7782
  {
7706
7783
  "children": [],
7707
7784
  "content": {
7785
+ "columnWidths": [
7786
+ undefined,
7787
+ undefined,
7788
+ undefined,
7789
+ ],
7708
7790
  "rows": [
7709
7791
  {
7710
7792
  "cells": [
@@ -8162,6 +8244,11 @@ exports[`Test updateBlock > Update with styled content 1`] = `
8162
8244
  {
8163
8245
  "children": [],
8164
8246
  "content": {
8247
+ "columnWidths": [
8248
+ undefined,
8249
+ undefined,
8250
+ undefined,
8251
+ ],
8165
8252
  "rows": [
8166
8253
  {
8167
8254
  "cells": [
@@ -173,7 +173,7 @@ describe("Test ProseMirror selection clipboard HTML", () => {
173
173
  )
174
174
  );
175
175
 
176
- const { clipboardHTML, externalHTML } = await selectedFragmentToHTML(
176
+ const { clipboardHTML, externalHTML } = selectedFragmentToHTML(
177
177
  editor._tiptapEditor.view,
178
178
  editor
179
179
  );
@@ -1,4 +1,5 @@
1
1
  export const acceptedMIMETypes = [
2
+ "vscode-editor-data",
2
3
  "blocknote/html",
3
4
  "Files",
4
5
  "text/html",
@@ -0,0 +1,49 @@
1
+ import { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js";
2
+ import {
3
+ BlockSchema,
4
+ InlineContentSchema,
5
+ StyleSchema,
6
+ } from "../../../schema/index.js";
7
+
8
+ export async function handleVSCodePaste<
9
+ BSchema extends BlockSchema,
10
+ I extends InlineContentSchema,
11
+ S extends StyleSchema
12
+ >(event: ClipboardEvent, editor: BlockNoteEditor<BSchema, I, S>) {
13
+ const view = editor.prosemirrorView;
14
+ const { schema } = view.state;
15
+
16
+ if (!event.clipboardData) {
17
+ return false;
18
+ }
19
+
20
+ const text = event.clipboardData!.getData("text/plain");
21
+ const vscode = event.clipboardData!.getData("vscode-editor-data");
22
+ const vscodeData = vscode ? JSON.parse(vscode) : undefined;
23
+ const language = vscodeData?.mode;
24
+
25
+ if (!text) {
26
+ return false;
27
+ }
28
+
29
+ if (!schema.nodes.codeBlock) {
30
+ view.pasteText(text);
31
+
32
+ return true;
33
+ }
34
+
35
+ if (!language) {
36
+ return false;
37
+ }
38
+
39
+ // strip carriage return chars from text pasted as code
40
+ // see: https://github.com/ProseMirror/prosemirror-view/commit/a50a6bcceb4ce52ac8fcc6162488d8875613aacd
41
+ editor._tiptapEditor.view.pasteHTML(
42
+ `<pre><code class="language-${language}">${text.replace(
43
+ /\r\n?/g,
44
+ "\n"
45
+ )}</code></pre>`
46
+ );
47
+
48
+ return true;
49
+ }
@@ -10,6 +10,7 @@ import {
10
10
  import { nestedListsToBlockNoteStructure } from "../../parsers/html/util/nestedLists.js";
11
11
  import { acceptedMIMETypes } from "./acceptedMIMETypes.js";
12
12
  import { handleFileInsertion } from "./handleFileInsertion.js";
13
+ import { handleVSCodePaste } from "./handleVSCodePaste.js";
13
14
 
14
15
  export const createPasteFromClipboardExtension = <
15
16
  BSchema extends BlockSchema,
@@ -43,6 +44,11 @@ export const createPasteFromClipboardExtension = <
43
44
  return true;
44
45
  }
45
46
 
47
+ if (format === "vscode-editor-data") {
48
+ handleVSCodePaste(event, editor);
49
+ return true;
50
+ }
51
+
46
52
  if (format === "Files") {
47
53
  handleFileInsertion(event, editor);
48
54
  return true;
@@ -0,0 +1 @@
1
+ <pre><code class="bn-inline-content language-javascript">console.log('Hello, world!');</code></pre>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="codeBlock"><pre><code class="bn-inline-content language-javascript">console.log('Hello, world!');</code></pre></div></div></div></div>
@@ -0,0 +1 @@
1
+ <pre><code class="bn-inline-content language-javascript"></code></pre>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="codeBlock"><pre><code class="bn-inline-content language-javascript"></code></pre></div></div></div></div>
@@ -0,0 +1 @@
1
+ <pre><code class="bn-inline-content language-python">print('Hello, world!')</code></pre>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="codeBlock"><pre><code class="bn-inline-content language-python">print('Hello, world!')</code></pre></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-url="exampleURL" data-caption="Caption" data-preview-width="256" data-file-block=""><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256" data-file-block=""><div class="bn-file-and-caption-wrapper"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption">Caption</p></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="image" data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256" data-file-block=""><div class="bn-file-and-caption-wrapper"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 2</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="3"><div class="bn-block" data-node-type="blockContainer" data-id="3"><div class="bn-block-content" data-content-type="numberedListItem" data-index="null"><p class="bn-inline-content">Numbered List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="4"><div class="bn-block" data-node-type="blockContainer" data-id="4"><div class="bn-block-content" data-content-type="numberedListItem" data-index="null"><p class="bn-inline-content">Numbered List Item 2</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="5"><div class="bn-block" data-node-type="blockContainer" data-id="5"><div class="bn-block-content" data-content-type="checkListItem"><input type="checkbox"><p class="bn-inline-content">Check List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="6"><div class="bn-block" data-node-type="blockContainer" data-id="6"><div class="bn-block-content" data-content-type="checkListItem" data-checked="true"><input type="checkbox" checked=""><p class="bn-inline-content">Check List Item 2</p></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 2</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="3"><div class="bn-block" data-node-type="blockContainer" data-id="3"><div class="bn-block-content" data-content-type="numberedListItem" data-index="1"><p class="bn-inline-content">Numbered List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="4"><div class="bn-block" data-node-type="blockContainer" data-id="4"><div class="bn-block-content" data-content-type="numberedListItem" data-index="2"><p class="bn-inline-content">Numbered List Item 2</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="5"><div class="bn-block" data-node-type="blockContainer" data-id="5"><div class="bn-block-content" data-content-type="checkListItem"><input type="checkbox"><p class="bn-inline-content">Check List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="6"><div class="bn-block" data-node-type="blockContainer" data-id="6"><div class="bn-block-content" data-content-type="checkListItem" data-checked="true"><input type="checkbox" checked=""><p class="bn-inline-content">Check List Item 2</p></div></div></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 2</p></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="3"><div class="bn-block" data-node-type="blockContainer" data-id="3"><div class="bn-block-content" data-content-type="numberedListItem" data-index="null"><p class="bn-inline-content">Numbered List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="4"><div class="bn-block" data-node-type="blockContainer" data-id="4"><div class="bn-block-content" data-content-type="numberedListItem" data-index="null"><p class="bn-inline-content">Numbered List Item 2</p></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="5"><div class="bn-block" data-node-type="blockContainer" data-id="5"><div class="bn-block-content" data-content-type="checkListItem"><input type="checkbox"><p class="bn-inline-content">Check List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="6"><div class="bn-block" data-node-type="blockContainer" data-id="6"><div class="bn-block-content" data-content-type="checkListItem" data-checked="true"><input type="checkbox" checked=""><p class="bn-inline-content">Check List Item 2</p></div></div></div></div></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="bulletListItem"><p class="bn-inline-content">Bullet List Item 2</p></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="3"><div class="bn-block" data-node-type="blockContainer" data-id="3"><div class="bn-block-content" data-content-type="numberedListItem" data-index="1"><p class="bn-inline-content">Numbered List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="4"><div class="bn-block" data-node-type="blockContainer" data-id="4"><div class="bn-block-content" data-content-type="numberedListItem" data-index="2"><p class="bn-inline-content">Numbered List Item 2</p></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="5"><div class="bn-block" data-node-type="blockContainer" data-id="5"><div class="bn-block-content" data-content-type="checkListItem"><input type="checkbox"><p class="bn-inline-content">Check List Item 1</p></div></div></div><div class="bn-block-outer" data-node-type="blockOuter" data-id="6"><div class="bn-block" data-node-type="blockContainer" data-id="6"><div class="bn-block-content" data-content-type="checkListItem" data-checked="true"><input type="checkbox" checked=""><p class="bn-inline-content">Check List Item 2</p></div></div></div></div></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div>
1
+ <div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div><div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div>
1
+ <div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div><div data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div><div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="2"><div class="bn-block" data-node-type="blockContainer" data-id="2"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div data-name="example" data-url="exampleURL" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption"></p></div></div>
1
+ <div data-name="example" data-url="exampleURL" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="example" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;"></p></div></div>
@@ -1 +1 @@
1
- <div data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div>
1
+ <div data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption">Caption</p></div></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-url="exampleURL" data-caption="Caption" data-preview-width="256"><div class="bn-file-block-content-wrapper"><div class="bn-file-and-caption-wrapper"><div class="bn-visual-media-wrapper"><img class="bn-visual-media" alt="Caption" draggable="false" width="0"></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div></div>
@@ -1 +1 @@
1
- <div data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption">Caption</p></div>
1
+ <div data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div>
@@ -1 +1 @@
1
- <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption">Caption</p></div></div></div></div></div>
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="simpleImage" data-name="example" data-url="exampleURL" data-caption="Caption" data-show-preview="false" data-preview-width="256"><div class="bn-file-and-caption-wrapper"><div class="bn-file-default-preview"><div class="bn-file-default-preview-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z"></path></svg></div><p class="bn-file-default-preview-name">example</p></div><p class="bn-file-caption" style="width: 256px;">Caption</p></div></div></div></div></div>
@@ -0,0 +1 @@
1
+ <table><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr></table>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="table"><table class="bn-inline-content"><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="200"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr></table></div></div></div></div>
@@ -0,0 +1 @@
1
+ <table><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr></table>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="table"><table class="bn-inline-content"><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr></table></div></div></div></div>
@@ -0,0 +1 @@
1
+ <table><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr></table>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="table"><table class="bn-inline-content"><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1" colwidth="100"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1" colwidth="300"><p>Table Cell</p></td></tr></table></div></div></div></div>
@@ -31,13 +31,8 @@ export const createInternalHTMLSerializer = <
31
31
  blocks: PartialBlock<BSchema, I, S>[],
32
32
  options: { document?: Document }
33
33
  ) => {
34
- return serializeBlocksInternalHTML(
35
- editor,
36
- blocks,
37
- serializer,
38
- false,
39
- options
40
- ).outerHTML;
34
+ return serializeBlocksInternalHTML(editor, blocks, serializer, options)
35
+ .outerHTML;
41
36
  },
42
37
  };
43
38
  };
@@ -21,7 +21,6 @@ export function serializeInlineContentInternalHTML<
21
21
  editor: BlockNoteEditor<any, I, S>,
22
22
  blockContent: PartialBlock<BSchema, I, S>["content"],
23
23
  serializer: DOMSerializer,
24
- _toExternalHTML: boolean, // TODO, externalHTML for IC
25
24
  options?: { document?: Document }
26
25
  ) {
27
26
  let nodes: any;
@@ -67,7 +66,7 @@ function serializeBlock<
67
66
  editor: BlockNoteEditor<BSchema, I, S>,
68
67
  block: PartialBlock<BSchema, I, S>,
69
68
  serializer: DOMSerializer,
70
- toExternalHTML: boolean,
69
+ listIndex: number,
71
70
  options?: { document?: Document }
72
71
  ) {
73
72
  const BC_NODE = editor.pmSchema.nodes["blockContainer"];
@@ -94,16 +93,23 @@ function serializeBlock<
94
93
  };
95
94
 
96
95
  const impl = editor.blockImplementations[block.type as any].implementation;
97
- const ret = toExternalHTML
98
- ? impl.toExternalHTML({ ...block, props } as any, editor as any)
99
- : impl.toInternalHTML({ ...block, props } as any, editor as any);
96
+ const ret = impl.toInternalHTML({ ...block, props } as any, editor as any);
97
+
98
+ if (block.type === "numberedListItem") {
99
+ // This is a workaround to make sure there's a list index set.
100
+ // Normally, this is set on the internal prosemirror nodes by the NumberedListIndexingPlugin,
101
+ // but:
102
+ // - (a) this information is not available on the Blocks passed to the serializer. (we only have access to BlockNote Blocks)
103
+ // - (b) the NumberedListIndexingPlugin might not even have run, because we can manually call blocksToFullHTML
104
+ // with blocks that are not part of the active document
105
+ ret.dom.setAttribute("data-index", listIndex.toString());
106
+ }
100
107
 
101
108
  if (ret.contentDOM && block.content) {
102
109
  const ic = serializeInlineContentInternalHTML(
103
110
  editor,
104
111
  block.content as any, // TODO
105
112
  serializer,
106
- toExternalHTML,
107
113
  options
108
114
  );
109
115
  ret.contentDOM.appendChild(ic);
@@ -113,13 +119,7 @@ function serializeBlock<
113
119
 
114
120
  if (block.children && block.children.length > 0) {
115
121
  bc.contentDOM?.appendChild(
116
- serializeBlocksInternalHTML(
117
- editor,
118
- block.children,
119
- serializer,
120
- toExternalHTML,
121
- options
122
- )
122
+ serializeBlocksInternalHTML(editor, block.children, serializer, options)
123
123
  );
124
124
  }
125
125
  return bc.dom;
@@ -133,7 +133,6 @@ export const serializeBlocksInternalHTML = <
133
133
  editor: BlockNoteEditor<BSchema, I, S>,
134
134
  blocks: PartialBlock<BSchema, I, S>[],
135
135
  serializer: DOMSerializer,
136
- toExternalHTML: boolean,
137
136
  options?: { document?: Document }
138
137
  ) => {
139
138
  const BG_NODE = editor.pmSchema.nodes["blockGroup"];
@@ -143,12 +142,18 @@ export const serializeBlocksInternalHTML = <
143
142
  contentDOM?: HTMLElement;
144
143
  };
145
144
 
145
+ let listIndex = 0;
146
146
  for (const block of blocks) {
147
+ if (block.type === "numberedListItem") {
148
+ listIndex++;
149
+ } else {
150
+ listIndex = 0;
151
+ }
147
152
  const blockDOM = serializeBlock(
148
153
  editor,
149
154
  block,
150
155
  serializer,
151
- toExternalHTML,
156
+ listIndex,
152
157
  options
153
158
  );
154
159
  bg.contentDOM!.appendChild(blockDOM);
@@ -0,0 +1,3 @@
1
+ ```javascript
2
+ console.log('Hello, world!');
3
+ ```
@@ -0,0 +1,3 @@
1
+ ```python
2
+ print('Hello, world!')
3
+ ```
@@ -0,0 +1,5 @@
1
+ | | | |
2
+ | ---------- | ---------- | ---------- |
3
+ | Table Cell | Table Cell | Table Cell |
4
+ | Table Cell | Table Cell | Table Cell |
5
+ | Table Cell | Table Cell | Table Cell |
@@ -0,0 +1,5 @@
1
+ | | | |
2
+ | ---------- | ---------- | ---------- |
3
+ | Table Cell | Table Cell | Table Cell |
4
+ | Table Cell | Table Cell | Table Cell |
5
+ | Table Cell | Table Cell | Table Cell |