@prosekit/svelte 0.7.0 → 0.7.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 (268) hide show
  1. package/dist/build/components/autocomplete/autocomplete-empty.gen.d.ts +1 -0
  2. package/dist/build/components/autocomplete/autocomplete-empty.gen.d.ts.map +1 -0
  3. package/dist/build/components/autocomplete/autocomplete-empty.gen.svelte.d.ts +1 -0
  4. package/dist/build/components/autocomplete/autocomplete-empty.gen.svelte.d.ts.map +1 -0
  5. package/dist/build/components/autocomplete/autocomplete-item.gen.d.ts +1 -0
  6. package/dist/build/components/autocomplete/autocomplete-item.gen.d.ts.map +1 -0
  7. package/dist/build/components/autocomplete/autocomplete-item.gen.svelte.d.ts +1 -0
  8. package/dist/build/components/autocomplete/autocomplete-item.gen.svelte.d.ts.map +1 -0
  9. package/dist/build/components/autocomplete/autocomplete-list.gen.d.ts +1 -0
  10. package/dist/build/components/autocomplete/autocomplete-list.gen.d.ts.map +1 -0
  11. package/dist/build/components/autocomplete/autocomplete-list.gen.svelte.d.ts +1 -0
  12. package/dist/build/components/autocomplete/autocomplete-list.gen.svelte.d.ts.map +1 -0
  13. package/dist/build/components/autocomplete/autocomplete-popover.gen.d.ts +1 -0
  14. package/dist/build/components/autocomplete/autocomplete-popover.gen.d.ts.map +1 -0
  15. package/dist/build/components/autocomplete/autocomplete-popover.gen.svelte.d.ts +1 -0
  16. package/dist/build/components/autocomplete/autocomplete-popover.gen.svelte.d.ts.map +1 -0
  17. package/dist/build/components/autocomplete/index.gen.d.ts +1 -0
  18. package/dist/build/components/autocomplete/index.gen.d.ts.map +1 -0
  19. package/dist/build/components/block-handle/block-handle-add.gen.d.ts +1 -0
  20. package/dist/build/components/block-handle/block-handle-add.gen.d.ts.map +1 -0
  21. package/dist/build/components/block-handle/block-handle-add.gen.svelte.d.ts +1 -0
  22. package/dist/build/components/block-handle/block-handle-add.gen.svelte.d.ts.map +1 -0
  23. package/dist/build/components/block-handle/block-handle-draggable.gen.d.ts +1 -0
  24. package/dist/build/components/block-handle/block-handle-draggable.gen.d.ts.map +1 -0
  25. package/dist/build/components/block-handle/block-handle-draggable.gen.svelte.d.ts +1 -0
  26. package/dist/build/components/block-handle/block-handle-draggable.gen.svelte.d.ts.map +1 -0
  27. package/dist/build/components/block-handle/block-handle-popover.gen.d.ts +1 -0
  28. package/dist/build/components/block-handle/block-handle-popover.gen.d.ts.map +1 -0
  29. package/dist/build/components/block-handle/block-handle-popover.gen.svelte.d.ts +1 -0
  30. package/dist/build/components/block-handle/block-handle-popover.gen.svelte.d.ts.map +1 -0
  31. package/dist/build/components/block-handle/index.gen.d.ts +1 -0
  32. package/dist/build/components/block-handle/index.gen.d.ts.map +1 -0
  33. package/dist/build/components/client-update/client-update.svelte.d.ts +1 -0
  34. package/dist/build/components/client-update/client-update.svelte.d.ts.map +1 -0
  35. package/dist/build/components/client-update/index.d.ts +1 -0
  36. package/dist/build/components/client-update/index.d.ts.map +1 -0
  37. package/dist/build/components/create-props.d.ts +1 -0
  38. package/dist/build/components/create-props.d.ts.map +1 -0
  39. package/dist/build/components/drop-indicator/drop-indicator.gen.d.ts +1 -0
  40. package/dist/build/components/drop-indicator/drop-indicator.gen.d.ts.map +1 -0
  41. package/dist/build/components/drop-indicator/drop-indicator.gen.svelte.d.ts +1 -0
  42. package/dist/build/components/drop-indicator/drop-indicator.gen.svelte.d.ts.map +1 -0
  43. package/dist/build/components/drop-indicator/index.gen.d.ts +1 -0
  44. package/dist/build/components/drop-indicator/index.gen.d.ts.map +1 -0
  45. package/dist/build/components/inline-popover/index.gen.d.ts +1 -0
  46. package/dist/build/components/inline-popover/index.gen.d.ts.map +1 -0
  47. package/dist/build/components/inline-popover/inline-popover.gen.d.ts +1 -0
  48. package/dist/build/components/inline-popover/inline-popover.gen.d.ts.map +1 -0
  49. package/dist/build/components/inline-popover/inline-popover.gen.svelte.d.ts +1 -0
  50. package/dist/build/components/inline-popover/inline-popover.gen.svelte.d.ts.map +1 -0
  51. package/dist/build/components/mark-view-consumer/index.d.ts +1 -0
  52. package/dist/build/components/mark-view-consumer/index.d.ts.map +1 -0
  53. package/dist/build/components/mark-view-consumer/mark-view-consumer.svelte.d.ts +1 -0
  54. package/dist/build/components/mark-view-consumer/mark-view-consumer.svelte.d.ts.map +1 -0
  55. package/dist/build/components/mark-view-wrapper/index.d.ts +1 -0
  56. package/dist/build/components/mark-view-wrapper/index.d.ts.map +1 -0
  57. package/dist/build/components/mark-view-wrapper/mark-view-wrapper.svelte.d.ts +1 -0
  58. package/dist/build/components/mark-view-wrapper/mark-view-wrapper.svelte.d.ts.map +1 -0
  59. package/dist/build/components/mark-view-wrapper/props.d.ts +1 -0
  60. package/dist/build/components/mark-view-wrapper/props.d.ts.map +1 -0
  61. package/dist/build/components/node-view-consumer/index.d.ts +1 -0
  62. package/dist/build/components/node-view-consumer/index.d.ts.map +1 -0
  63. package/dist/build/components/node-view-consumer/node-view-consumer.svelte.d.ts +1 -0
  64. package/dist/build/components/node-view-consumer/node-view-consumer.svelte.d.ts.map +1 -0
  65. package/dist/build/components/node-view-wrapper/index.d.ts +1 -0
  66. package/dist/build/components/node-view-wrapper/index.d.ts.map +1 -0
  67. package/dist/build/components/node-view-wrapper/node-view-wrapper.svelte.d.ts +1 -0
  68. package/dist/build/components/node-view-wrapper/node-view-wrapper.svelte.d.ts.map +1 -0
  69. package/dist/build/components/node-view-wrapper/props.d.ts +1 -0
  70. package/dist/build/components/node-view-wrapper/props.d.ts.map +1 -0
  71. package/dist/build/components/popover/index.gen.d.ts +1 -0
  72. package/dist/build/components/popover/index.gen.d.ts.map +1 -0
  73. package/dist/build/components/popover/popover-content.gen.d.ts +1 -0
  74. package/dist/build/components/popover/popover-content.gen.d.ts.map +1 -0
  75. package/dist/build/components/popover/popover-content.gen.svelte.d.ts +1 -0
  76. package/dist/build/components/popover/popover-content.gen.svelte.d.ts.map +1 -0
  77. package/dist/build/components/popover/popover-root.gen.d.ts +1 -0
  78. package/dist/build/components/popover/popover-root.gen.d.ts.map +1 -0
  79. package/dist/build/components/popover/popover-root.gen.svelte.d.ts +1 -0
  80. package/dist/build/components/popover/popover-root.gen.svelte.d.ts.map +1 -0
  81. package/dist/build/components/popover/popover-trigger.gen.d.ts +1 -0
  82. package/dist/build/components/popover/popover-trigger.gen.d.ts.map +1 -0
  83. package/dist/build/components/popover/popover-trigger.gen.svelte.d.ts +1 -0
  84. package/dist/build/components/popover/popover-trigger.gen.svelte.d.ts.map +1 -0
  85. package/dist/build/components/prosekit/index.d.ts +1 -0
  86. package/dist/build/components/prosekit/index.d.ts.map +1 -0
  87. package/dist/build/components/prosekit/prosekit.svelte.d.ts +1 -0
  88. package/dist/build/components/prosekit/prosekit.svelte.d.ts.map +1 -0
  89. package/dist/build/components/resizable/index.gen.d.ts +1 -0
  90. package/dist/build/components/resizable/index.gen.d.ts.map +1 -0
  91. package/dist/build/components/resizable/resizable-handle.gen.d.ts +1 -0
  92. package/dist/build/components/resizable/resizable-handle.gen.d.ts.map +1 -0
  93. package/dist/build/components/resizable/resizable-handle.gen.svelte.d.ts +1 -0
  94. package/dist/build/components/resizable/resizable-handle.gen.svelte.d.ts.map +1 -0
  95. package/dist/build/components/resizable/resizable-root.gen.d.ts +1 -0
  96. package/dist/build/components/resizable/resizable-root.gen.d.ts.map +1 -0
  97. package/dist/build/components/resizable/resizable-root.gen.svelte.d.ts +1 -0
  98. package/dist/build/components/resizable/resizable-root.gen.svelte.d.ts.map +1 -0
  99. package/dist/build/components/table-handle/index.gen.d.ts +1 -0
  100. package/dist/build/components/table-handle/index.gen.d.ts.map +1 -0
  101. package/dist/build/components/table-handle/table-handle-column-root.gen.d.ts +1 -0
  102. package/dist/build/components/table-handle/table-handle-column-root.gen.d.ts.map +1 -0
  103. package/dist/build/components/table-handle/table-handle-column-root.gen.svelte.d.ts +1 -0
  104. package/dist/build/components/table-handle/table-handle-column-root.gen.svelte.d.ts.map +1 -0
  105. package/dist/build/components/table-handle/table-handle-column-trigger.gen.d.ts +1 -0
  106. package/dist/build/components/table-handle/table-handle-column-trigger.gen.d.ts.map +1 -0
  107. package/dist/build/components/table-handle/table-handle-column-trigger.gen.svelte.d.ts +1 -0
  108. package/dist/build/components/table-handle/table-handle-column-trigger.gen.svelte.d.ts.map +1 -0
  109. package/dist/build/components/table-handle/table-handle-drag-preview.gen.d.ts +1 -0
  110. package/dist/build/components/table-handle/table-handle-drag-preview.gen.d.ts.map +1 -0
  111. package/dist/build/components/table-handle/table-handle-drag-preview.gen.svelte.d.ts +1 -0
  112. package/dist/build/components/table-handle/table-handle-drag-preview.gen.svelte.d.ts.map +1 -0
  113. package/dist/build/components/table-handle/table-handle-drop-indicator.gen.d.ts +1 -0
  114. package/dist/build/components/table-handle/table-handle-drop-indicator.gen.d.ts.map +1 -0
  115. package/dist/build/components/table-handle/table-handle-drop-indicator.gen.svelte.d.ts +1 -0
  116. package/dist/build/components/table-handle/table-handle-drop-indicator.gen.svelte.d.ts.map +1 -0
  117. package/dist/build/components/table-handle/table-handle-popover-content.gen.d.ts +1 -0
  118. package/dist/build/components/table-handle/table-handle-popover-content.gen.d.ts.map +1 -0
  119. package/dist/build/components/table-handle/table-handle-popover-content.gen.svelte.d.ts +1 -0
  120. package/dist/build/components/table-handle/table-handle-popover-content.gen.svelte.d.ts.map +1 -0
  121. package/dist/build/components/table-handle/table-handle-popover-item.gen.d.ts +1 -0
  122. package/dist/build/components/table-handle/table-handle-popover-item.gen.d.ts.map +1 -0
  123. package/dist/build/components/table-handle/table-handle-popover-item.gen.svelte.d.ts +1 -0
  124. package/dist/build/components/table-handle/table-handle-popover-item.gen.svelte.d.ts.map +1 -0
  125. package/dist/build/components/table-handle/table-handle-root.gen.d.ts +1 -0
  126. package/dist/build/components/table-handle/table-handle-root.gen.d.ts.map +1 -0
  127. package/dist/build/components/table-handle/table-handle-root.gen.svelte.d.ts +1 -0
  128. package/dist/build/components/table-handle/table-handle-root.gen.svelte.d.ts.map +1 -0
  129. package/dist/build/components/table-handle/table-handle-row-root.gen.d.ts +1 -0
  130. package/dist/build/components/table-handle/table-handle-row-root.gen.d.ts.map +1 -0
  131. package/dist/build/components/table-handle/table-handle-row-root.gen.svelte.d.ts +1 -0
  132. package/dist/build/components/table-handle/table-handle-row-root.gen.svelte.d.ts.map +1 -0
  133. package/dist/build/components/table-handle/table-handle-row-trigger.gen.d.ts +1 -0
  134. package/dist/build/components/table-handle/table-handle-row-trigger.gen.d.ts.map +1 -0
  135. package/dist/build/components/table-handle/table-handle-row-trigger.gen.svelte.d.ts +1 -0
  136. package/dist/build/components/table-handle/table-handle-row-trigger.gen.svelte.d.ts.map +1 -0
  137. package/dist/build/components/tooltip/index.gen.d.ts +1 -0
  138. package/dist/build/components/tooltip/index.gen.d.ts.map +1 -0
  139. package/dist/build/components/tooltip/tooltip-content.gen.d.ts +1 -0
  140. package/dist/build/components/tooltip/tooltip-content.gen.d.ts.map +1 -0
  141. package/dist/build/components/tooltip/tooltip-content.gen.svelte.d.ts +1 -0
  142. package/dist/build/components/tooltip/tooltip-content.gen.svelte.d.ts.map +1 -0
  143. package/dist/build/components/tooltip/tooltip-root.gen.d.ts +1 -0
  144. package/dist/build/components/tooltip/tooltip-root.gen.d.ts.map +1 -0
  145. package/dist/build/components/tooltip/tooltip-root.gen.svelte.d.ts +1 -0
  146. package/dist/build/components/tooltip/tooltip-root.gen.svelte.d.ts.map +1 -0
  147. package/dist/build/components/tooltip/tooltip-trigger.gen.d.ts +1 -0
  148. package/dist/build/components/tooltip/tooltip-trigger.gen.d.ts.map +1 -0
  149. package/dist/build/components/tooltip/tooltip-trigger.gen.svelte.d.ts +1 -0
  150. package/dist/build/components/tooltip/tooltip-trigger.gen.svelte.d.ts.map +1 -0
  151. package/dist/build/components/use-component.d.ts +1 -0
  152. package/dist/build/components/use-component.d.ts.map +1 -0
  153. package/dist/build/components/use-event-handlers.d.ts +1 -0
  154. package/dist/build/components/use-event-handlers.d.ts.map +1 -0
  155. package/dist/build/contexts/editor-context.d.ts +1 -0
  156. package/dist/build/contexts/editor-context.d.ts.map +1 -0
  157. package/dist/build/extensions/svelte-mark-view.d.ts +1 -0
  158. package/dist/build/extensions/svelte-mark-view.d.ts.map +1 -0
  159. package/dist/build/extensions/svelte-node-view.d.ts +1 -0
  160. package/dist/build/extensions/svelte-node-view.d.ts.map +1 -0
  161. package/dist/build/hooks/use-doc-change.d.ts +1 -0
  162. package/dist/build/hooks/use-doc-change.d.ts.map +1 -0
  163. package/dist/build/hooks/use-editor-extension.d.ts +1 -0
  164. package/dist/build/hooks/use-editor-extension.d.ts.map +1 -0
  165. package/dist/build/hooks/use-editor.d.ts +1 -0
  166. package/dist/build/hooks/use-editor.d.ts.map +1 -0
  167. package/dist/build/hooks/use-extension.d.ts +1 -0
  168. package/dist/build/hooks/use-extension.d.ts.map +1 -0
  169. package/dist/build/hooks/use-keymap.d.ts +1 -0
  170. package/dist/build/hooks/use-keymap.d.ts.map +1 -0
  171. package/dist/build/hooks/use-priority-extension.d.ts +1 -0
  172. package/dist/build/hooks/use-priority-extension.d.ts.map +1 -0
  173. package/dist/build/hooks/use-state-update.d.ts +1 -0
  174. package/dist/build/hooks/use-state-update.d.ts.map +1 -0
  175. package/dist/build/index.d.ts +1 -0
  176. package/dist/build/index.d.ts.map +1 -0
  177. package/dist/build/types.d.ts +1 -0
  178. package/dist/build/types.d.ts.map +1 -0
  179. package/package.json +21 -21
  180. package/src/components/autocomplete/autocomplete-empty.gen.svelte +23 -0
  181. package/src/components/autocomplete/autocomplete-empty.gen.ts +14 -0
  182. package/src/components/autocomplete/autocomplete-item.gen.svelte +23 -0
  183. package/src/components/autocomplete/autocomplete-item.gen.ts +14 -0
  184. package/src/components/autocomplete/autocomplete-list.gen.svelte +23 -0
  185. package/src/components/autocomplete/autocomplete-list.gen.ts +14 -0
  186. package/src/components/autocomplete/autocomplete-popover.gen.svelte +23 -0
  187. package/src/components/autocomplete/autocomplete-popover.gen.ts +14 -0
  188. package/src/components/autocomplete/index.gen.ts +7 -0
  189. package/src/components/block-handle/block-handle-add.gen.svelte +23 -0
  190. package/src/components/block-handle/block-handle-add.gen.ts +14 -0
  191. package/src/components/block-handle/block-handle-draggable.gen.svelte +23 -0
  192. package/src/components/block-handle/block-handle-draggable.gen.ts +14 -0
  193. package/src/components/block-handle/block-handle-popover.gen.svelte +23 -0
  194. package/src/components/block-handle/block-handle-popover.gen.ts +14 -0
  195. package/src/components/block-handle/index.gen.ts +5 -0
  196. package/src/components/client-update/client-update.svelte +15 -0
  197. package/src/components/client-update/index.ts +3 -0
  198. package/src/components/create-props.ts +13 -0
  199. package/src/components/drop-indicator/drop-indicator.gen.svelte +23 -0
  200. package/src/components/drop-indicator/drop-indicator.gen.ts +14 -0
  201. package/src/components/drop-indicator/index.gen.ts +1 -0
  202. package/src/components/inline-popover/index.gen.ts +1 -0
  203. package/src/components/inline-popover/inline-popover.gen.svelte +23 -0
  204. package/src/components/inline-popover/inline-popover.gen.ts +14 -0
  205. package/src/components/mark-view-consumer/index.ts +8 -0
  206. package/src/components/mark-view-consumer/mark-view-consumer.svelte +15 -0
  207. package/src/components/mark-view-wrapper/index.ts +6 -0
  208. package/src/components/mark-view-wrapper/mark-view-wrapper.svelte +17 -0
  209. package/src/components/mark-view-wrapper/props.ts +7 -0
  210. package/src/components/node-view-consumer/index.ts +8 -0
  211. package/src/components/node-view-consumer/node-view-consumer.svelte +15 -0
  212. package/src/components/node-view-wrapper/index.ts +6 -0
  213. package/src/components/node-view-wrapper/node-view-wrapper.svelte +22 -0
  214. package/src/components/node-view-wrapper/props.ts +7 -0
  215. package/src/components/popover/index.gen.ts +5 -0
  216. package/src/components/popover/popover-content.gen.svelte +23 -0
  217. package/src/components/popover/popover-content.gen.ts +14 -0
  218. package/src/components/popover/popover-root.gen.svelte +23 -0
  219. package/src/components/popover/popover-root.gen.ts +14 -0
  220. package/src/components/popover/popover-trigger.gen.svelte +23 -0
  221. package/src/components/popover/popover-trigger.gen.ts +14 -0
  222. package/src/components/prosekit/index.ts +15 -0
  223. package/src/components/prosekit/prosekit.svelte +16 -0
  224. package/src/components/resizable/index.gen.ts +3 -0
  225. package/src/components/resizable/resizable-handle.gen.svelte +23 -0
  226. package/src/components/resizable/resizable-handle.gen.ts +14 -0
  227. package/src/components/resizable/resizable-root.gen.svelte +23 -0
  228. package/src/components/resizable/resizable-root.gen.ts +14 -0
  229. package/src/components/table-handle/index.gen.ts +17 -0
  230. package/src/components/table-handle/table-handle-column-root.gen.svelte +23 -0
  231. package/src/components/table-handle/table-handle-column-root.gen.ts +14 -0
  232. package/src/components/table-handle/table-handle-column-trigger.gen.svelte +23 -0
  233. package/src/components/table-handle/table-handle-column-trigger.gen.ts +14 -0
  234. package/src/components/table-handle/table-handle-drag-preview.gen.svelte +23 -0
  235. package/src/components/table-handle/table-handle-drag-preview.gen.ts +14 -0
  236. package/src/components/table-handle/table-handle-drop-indicator.gen.svelte +23 -0
  237. package/src/components/table-handle/table-handle-drop-indicator.gen.ts +14 -0
  238. package/src/components/table-handle/table-handle-popover-content.gen.svelte +23 -0
  239. package/src/components/table-handle/table-handle-popover-content.gen.ts +14 -0
  240. package/src/components/table-handle/table-handle-popover-item.gen.svelte +23 -0
  241. package/src/components/table-handle/table-handle-popover-item.gen.ts +14 -0
  242. package/src/components/table-handle/table-handle-root.gen.svelte +23 -0
  243. package/src/components/table-handle/table-handle-root.gen.ts +14 -0
  244. package/src/components/table-handle/table-handle-row-root.gen.svelte +23 -0
  245. package/src/components/table-handle/table-handle-row-root.gen.ts +14 -0
  246. package/src/components/table-handle/table-handle-row-trigger.gen.svelte +23 -0
  247. package/src/components/table-handle/table-handle-row-trigger.gen.ts +14 -0
  248. package/src/components/tooltip/index.gen.ts +5 -0
  249. package/src/components/tooltip/tooltip-content.gen.svelte +23 -0
  250. package/src/components/tooltip/tooltip-content.gen.ts +14 -0
  251. package/src/components/tooltip/tooltip-root.gen.svelte +23 -0
  252. package/src/components/tooltip/tooltip-root.gen.ts +14 -0
  253. package/src/components/tooltip/tooltip-trigger.gen.svelte +23 -0
  254. package/src/components/tooltip/tooltip-trigger.gen.ts +14 -0
  255. package/src/components/use-component.ts +71 -0
  256. package/src/components/use-event-handlers.ts +26 -0
  257. package/src/contexts/editor-context.ts +31 -0
  258. package/src/extensions/svelte-mark-view.ts +90 -0
  259. package/src/extensions/svelte-node-view.ts +90 -0
  260. package/src/hooks/use-doc-change.ts +21 -0
  261. package/src/hooks/use-editor-extension.ts +45 -0
  262. package/src/hooks/use-editor.ts +57 -0
  263. package/src/hooks/use-extension.ts +39 -0
  264. package/src/hooks/use-keymap.ts +21 -0
  265. package/src/hooks/use-priority-extension.ts +21 -0
  266. package/src/hooks/use-state-update.ts +21 -0
  267. package/src/index.ts +25 -0
  268. package/src/types.ts +6 -0
@@ -0,0 +1,71 @@
1
+ import type { AnyFunction } from '@prosekit/core'
2
+ import type { EventHandler } from 'svelte/elements'
3
+
4
+ import { useEditorContext } from '../contexts/editor-context'
5
+
6
+ // For unknown reason, Svelte v4 cannot set properties on a web component
7
+ // when I directly use `{...$$props}`. It seems that Svelte v4 recognizes
8
+ // the properties as attributes. Here is a workaround to set the properties
9
+ // on the element manually and only let Svelte set the attributes.
10
+ export function useComponent(
11
+ propNames: string[],
12
+ eventNames: string[],
13
+ ): (element: HTMLElement | undefined, $$props: Record<string, unknown>) => [Record<string, unknown>, Record<string, EventHandler>] {
14
+ const hasEditor = propNames.includes('editor')
15
+ const lowerCaseEventNameMap = new Map(
16
+ eventNames.map((name) => [name.toLowerCase(), name]),
17
+ )
18
+
19
+ const editorContext = useEditorContext()
20
+
21
+ function handleChange(
22
+ element: HTMLElement | undefined,
23
+ $$props: Record<string, unknown>,
24
+ ): [Record<string, unknown>, Record<string, EventHandler>] {
25
+ const properties: Record<string, unknown> = {}
26
+ const attributes: Record<string, unknown> = {}
27
+ const eventHandlers: Record<string, EventHandler> = {}
28
+
29
+ for (const [name, value] of Object.entries($$props)) {
30
+ if (value === undefined || name.startsWith('$')) {
31
+ continue
32
+ }
33
+
34
+ if (propNames.includes(name)) {
35
+ properties[name] = value
36
+ continue
37
+ }
38
+
39
+ if (name.startsWith('on')) {
40
+ const lowerCaseEventName = name.slice(2).toLowerCase()
41
+ const eventName = lowerCaseEventNameMap.get(lowerCaseEventName)
42
+ if (eventName) {
43
+ const extractDetail = eventName.endsWith('Change')
44
+ eventHandlers[eventName] = (event: Event) => {
45
+ const handler = value as AnyFunction | null
46
+ if (typeof handler === 'function') {
47
+ handler(extractDetail ? (event as CustomEvent).detail : event)
48
+ }
49
+ }
50
+ continue
51
+ }
52
+ }
53
+
54
+ attributes[name] = value
55
+ }
56
+
57
+ if (hasEditor && !properties.editor && editorContext) {
58
+ properties.editor = editorContext
59
+ }
60
+
61
+ if (element) {
62
+ for (const [key, value] of Object.entries(properties)) {
63
+ ;(element as Record<string, any>)[key] = value
64
+ }
65
+ }
66
+
67
+ return [attributes, eventHandlers]
68
+ }
69
+
70
+ return handleChange
71
+ }
@@ -0,0 +1,26 @@
1
+ export function useEventHandlers(
2
+ element: HTMLElement,
3
+ eventHandlers: Record<string, (...args: any[]) => any>,
4
+ ) {
5
+ const disposes: VoidFunction[] = []
6
+
7
+ const update = (eventHandlers: Record<string, (...args: any[]) => any>) => {
8
+ disposes.forEach((dispose) => dispose())
9
+ disposes.length = 0
10
+ for (const [name, handler] of Object.entries(eventHandlers)) {
11
+ element.addEventListener(name, handler)
12
+ disposes.push(() => element.removeEventListener(name, handler))
13
+ }
14
+ }
15
+
16
+ update(eventHandlers)
17
+
18
+ return {
19
+ update(eventHandlers: Record<string, (...args: any[]) => any>): void {
20
+ update(eventHandlers)
21
+ },
22
+ destroy(): void {
23
+ update({})
24
+ },
25
+ }
26
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ ProseKitError,
3
+ type Editor,
4
+ type Extension,
5
+ } from '@prosekit/core'
6
+ import {
7
+ getContext,
8
+ hasContext,
9
+ setContext,
10
+ } from 'svelte'
11
+
12
+ const key = 'prosekit-svelte-editor-context'
13
+
14
+ /**
15
+ * @internal
16
+ */
17
+ export function setEditorContext(editor: Editor): void {
18
+ if (!editor) {
19
+ throw new ProseKitError('editor should not be empty')
20
+ }
21
+ setContext(key, editor)
22
+ }
23
+
24
+ /**
25
+ * @internal
26
+ */
27
+ export function useEditorContext<E extends Extension>(): Editor<E> | undefined {
28
+ if (hasContext(key)) {
29
+ return getContext(key)
30
+ }
31
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ defineMarkViewComponent,
3
+ defineMarkViewFactory,
4
+ definePlugin,
5
+ type Extension,
6
+ } from '@prosekit/core'
7
+ import type { MarkViewConstructor } from '@prosekit/pm/view'
8
+ import type { CoreMarkViewUserOptions } from '@prosemirror-adapter/core'
9
+ import type {
10
+ MarkViewContext,
11
+ SvelteMarkViewUserOptions,
12
+ } from '@prosemirror-adapter/svelte'
13
+ import type { Component } from 'svelte'
14
+
15
+ import { MarkViewWrapper } from '../components/mark-view-wrapper'
16
+
17
+ /**
18
+ * @public
19
+ */
20
+ export interface SvelteMarkViewProps extends MarkViewContext {}
21
+
22
+ /**
23
+ * @public
24
+ */
25
+ export type SvelteMarkViewComponent = Component<SvelteMarkViewProps>
26
+
27
+ /**
28
+ * Options for {@link defineSvelteMarkView}.
29
+ *
30
+ * @public
31
+ */
32
+ export interface SvelteMarkViewOptions extends CoreMarkViewUserOptions<SvelteMarkViewComponent> {
33
+ /**
34
+ * The name of the mark type.
35
+ */
36
+ name: string
37
+ }
38
+
39
+ const isServer = typeof window === 'undefined'
40
+
41
+ /**
42
+ * Defines a mark view using a Svelte component.
43
+ *
44
+ * @public
45
+ */
46
+ export function defineSvelteMarkView(
47
+ options: SvelteMarkViewOptions,
48
+ ): Extension {
49
+ // Don't register mark views on the server
50
+ if (isServer) {
51
+ return definePlugin([])
52
+ }
53
+
54
+ const { name, component, ...userOptions } = options
55
+
56
+ const args: SvelteMarkViewUserOptions = {
57
+ ...userOptions,
58
+ component: wrapComponent(component),
59
+ }
60
+
61
+ return defineMarkViewComponent<SvelteMarkViewUserOptions>({
62
+ group: 'svelte',
63
+ name,
64
+ args,
65
+ })
66
+ }
67
+
68
+ function wrapComponent(
69
+ component: SvelteMarkViewComponent,
70
+ ): Component<any, any> {
71
+ // `MarkViewWrapper` is an object during SSR
72
+ if (!MarkViewWrapper || typeof MarkViewWrapper !== 'function') {
73
+ return component
74
+ }
75
+
76
+ const MarkViewPropsWrapper: Component = (internals, props) => {
77
+ return MarkViewWrapper(internals, { ...props, component })
78
+ }
79
+
80
+ return MarkViewPropsWrapper
81
+ }
82
+
83
+ export function defineSvelteMarkViewFactory(
84
+ factory: (options: SvelteMarkViewUserOptions) => MarkViewConstructor,
85
+ ): Extension {
86
+ return defineMarkViewFactory<SvelteMarkViewUserOptions>({
87
+ group: 'svelte',
88
+ factory,
89
+ })
90
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ defineNodeViewComponent,
3
+ defineNodeViewFactory,
4
+ definePlugin,
5
+ type Extension,
6
+ } from '@prosekit/core'
7
+ import type { NodeViewConstructor } from '@prosekit/pm/view'
8
+ import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core'
9
+ import type {
10
+ NodeViewContext,
11
+ SvelteNodeViewUserOptions,
12
+ } from '@prosemirror-adapter/svelte'
13
+ import type { Component } from 'svelte'
14
+
15
+ import { NodeViewWrapper } from '../components/node-view-wrapper'
16
+
17
+ /**
18
+ * @public
19
+ */
20
+ export interface SvelteNodeViewProps extends NodeViewContext {}
21
+
22
+ /**
23
+ * @public
24
+ */
25
+ export type SvelteNodeViewComponent = Component<SvelteNodeViewProps>
26
+
27
+ /**
28
+ * Options for {@link defineSvelteNodeView}.
29
+ *
30
+ * @public
31
+ */
32
+ export interface SvelteNodeViewOptions extends CoreNodeViewUserOptions<SvelteNodeViewComponent> {
33
+ /**
34
+ * The name of the node type.
35
+ */
36
+ name: string
37
+ }
38
+
39
+ const isServer = typeof window === 'undefined'
40
+
41
+ /**
42
+ * Defines a node view using a Svelte component.
43
+ *
44
+ * @public
45
+ */
46
+ export function defineSvelteNodeView(
47
+ options: SvelteNodeViewOptions,
48
+ ): Extension {
49
+ // Don't register node views on the server
50
+ if (isServer) {
51
+ return definePlugin([])
52
+ }
53
+
54
+ const { name, component, ...userOptions } = options
55
+
56
+ const args: SvelteNodeViewUserOptions = {
57
+ ...userOptions,
58
+ component: wrapComponent(component),
59
+ }
60
+
61
+ return defineNodeViewComponent<SvelteNodeViewUserOptions>({
62
+ group: 'svelte',
63
+ name,
64
+ args,
65
+ })
66
+ }
67
+
68
+ function wrapComponent(
69
+ component: SvelteNodeViewComponent,
70
+ ): Component<any, any> {
71
+ // `NodeViewWrapper` is an object during SSR
72
+ if (!NodeViewWrapper || typeof NodeViewWrapper !== 'function') {
73
+ return component
74
+ }
75
+
76
+ const NodeViewPropsWrapper: Component = (internals, props) => {
77
+ return NodeViewWrapper(internals, { ...props, component })
78
+ }
79
+
80
+ return NodeViewPropsWrapper
81
+ }
82
+
83
+ export function defineSvelteNodeViewFactory(
84
+ factory: (options: SvelteNodeViewUserOptions) => NodeViewConstructor,
85
+ ): Extension {
86
+ return defineNodeViewFactory<SvelteNodeViewUserOptions>({
87
+ group: 'svelte',
88
+ factory,
89
+ })
90
+ }
@@ -0,0 +1,21 @@
1
+ import { defineDocChangeHandler } from '@prosekit/core'
2
+ import type { ProseMirrorNode } from '@prosekit/pm/model'
3
+ import { readable } from 'svelte/store'
4
+
5
+ import {
6
+ useExtension,
7
+ type UseExtensionOptions,
8
+ } from './use-extension'
9
+
10
+ /**
11
+ * Calls the given handler whenever the editor document changes.
12
+ *
13
+ * @public
14
+ */
15
+ export function useDocChange(
16
+ handler: (doc: ProseMirrorNode) => void,
17
+ options?: UseExtensionOptions,
18
+ ): void {
19
+ const extension = defineDocChangeHandler((view) => handler(view.state.doc))
20
+ useExtension(readable(extension), options)
21
+ }
@@ -0,0 +1,45 @@
1
+ import {
2
+ EditorNotFoundError,
3
+ type Editor,
4
+ type Extension,
5
+ } from '@prosekit/core'
6
+ import { onMount } from 'svelte'
7
+ import type { Readable } from 'svelte/store'
8
+
9
+ import { useEditorContext } from '../contexts/editor-context'
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export function useEditorExtension(
15
+ maybeEditor: Editor | null | undefined,
16
+ extensionStore: Readable<Extension | null>,
17
+ ): void {
18
+ const editorContext = useEditorContext()
19
+
20
+ onMount(() => {
21
+ let cleanup: VoidFunction | undefined
22
+ let unsubscribe: VoidFunction | undefined
23
+
24
+ unsubscribe = extensionStore.subscribe((extension) => {
25
+ cleanup?.()
26
+ cleanup = undefined
27
+
28
+ const editor = maybeEditor || editorContext
29
+
30
+ if (!editor) {
31
+ throw new EditorNotFoundError()
32
+ }
33
+ if (extension) {
34
+ cleanup = editor.use(extension)
35
+ }
36
+ })
37
+
38
+ return () => {
39
+ cleanup?.()
40
+ cleanup = undefined
41
+ unsubscribe?.()
42
+ unsubscribe = undefined
43
+ }
44
+ })
45
+ }
@@ -0,0 +1,57 @@
1
+ import {
2
+ defineMountHandler,
3
+ defineUpdateHandler,
4
+ ProseKitError,
5
+ union,
6
+ type Editor,
7
+ type Extension,
8
+ } from '@prosekit/core'
9
+ import { onMount } from 'svelte'
10
+ import {
11
+ readonly,
12
+ writable,
13
+ type Readable,
14
+ } from 'svelte/store'
15
+
16
+ import { useEditorContext } from '../contexts/editor-context'
17
+
18
+ /**
19
+ * Retrieves the editor instance from the nearest ProseKit component.
20
+ *
21
+ * @public
22
+ */
23
+ export function useEditor<E extends Extension = any>(options?: {
24
+ /**
25
+ * Whether to update the component when the editor is mounted or editor state
26
+ * is updated.
27
+ *
28
+ * @default false
29
+ */
30
+ update?: boolean
31
+ }): Readable<Editor<E>> {
32
+ const update = options?.update ?? false
33
+ const editor = useEditorContext<E>()
34
+
35
+ if (!editor) {
36
+ throw new ProseKitError(
37
+ 'useEditor must be used within the ProseKit component',
38
+ )
39
+ }
40
+
41
+ const editorStore = writable(editor)
42
+
43
+ if (update) {
44
+ onMount(() => {
45
+ const forceUpdate = () => {
46
+ editorStore.set(editor)
47
+ }
48
+ const extension = union(
49
+ defineMountHandler(forceUpdate),
50
+ defineUpdateHandler(forceUpdate),
51
+ )
52
+ return editor.use(extension)
53
+ })
54
+ }
55
+
56
+ return readonly(editorStore)
57
+ }
@@ -0,0 +1,39 @@
1
+ import type {
2
+ Editor,
3
+ Extension,
4
+ Priority,
5
+ } from '@prosekit/core'
6
+ import type { Readable } from 'svelte/store'
7
+
8
+ import { useEditorExtension } from './use-editor-extension'
9
+ import { usePriorityExtension } from './use-priority-extension'
10
+
11
+ export interface UseExtensionOptions {
12
+ /**
13
+ * The editor to add the extension to. If not provided, it will use the
14
+ * editor from the nearest `ProseKit` component.
15
+ */
16
+ editor?: Editor
17
+
18
+ /**
19
+ * Optional priority to add the extension with.
20
+ */
21
+ priority?: Priority
22
+ }
23
+
24
+ /**
25
+ * Add an extension to the editor.
26
+ */
27
+ export function useExtension<T extends Extension = Extension>(
28
+ /**
29
+ * The store to an extension to add to the editor. If it changes, the previous
30
+ * extension will be removed and the new one (if not null) will be added.
31
+ */
32
+ extension: Readable<T | null>,
33
+ options?: UseExtensionOptions,
34
+ ): void {
35
+ useEditorExtension(
36
+ options?.editor,
37
+ usePriorityExtension(extension, options?.priority),
38
+ )
39
+ }
@@ -0,0 +1,21 @@
1
+ import {
2
+ defineKeymap,
3
+ type Keymap,
4
+ } from '@prosekit/core'
5
+ import {
6
+ derived,
7
+ type Readable,
8
+ } from 'svelte/store'
9
+
10
+ import {
11
+ useExtension,
12
+ type UseExtensionOptions,
13
+ } from './use-extension'
14
+
15
+ export function useKeymap(
16
+ keymapStore: Readable<Keymap>,
17
+ options?: UseExtensionOptions,
18
+ ): void {
19
+ const extension = derived(keymapStore, (keymap) => defineKeymap(keymap))
20
+ useExtension(extension, options)
21
+ }
@@ -0,0 +1,21 @@
1
+ import {
2
+ withPriority,
3
+ type Extension,
4
+ type Priority,
5
+ } from '@prosekit/core'
6
+ import {
7
+ derived,
8
+ type Readable,
9
+ } from 'svelte/store'
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export function usePriorityExtension<T extends Extension = Extension>(
15
+ extensionStore: Readable<T | null>,
16
+ priority?: Priority | null,
17
+ ): Readable<T | null> {
18
+ return derived(extensionStore, (extension) => {
19
+ return extension && priority ? withPriority(extension, priority) : extension
20
+ })
21
+ }
@@ -0,0 +1,21 @@
1
+ import { defineUpdateHandler } from '@prosekit/core'
2
+ import type { EditorState } from '@prosekit/pm/state'
3
+ import { readable } from 'svelte/store'
4
+
5
+ import {
6
+ useExtension,
7
+ type UseExtensionOptions,
8
+ } from './use-extension'
9
+
10
+ /**
11
+ * Calls the given handler whenever the editor state changes.
12
+ *
13
+ * @public
14
+ */
15
+ export function useStateUpdate(
16
+ handler: (state: EditorState) => void,
17
+ options?: UseExtensionOptions,
18
+ ): void {
19
+ const extension = defineUpdateHandler((view) => handler(view.state))
20
+ useExtension(readable(extension), options)
21
+ }
package/src/index.ts ADDED
@@ -0,0 +1,25 @@
1
+ export {
2
+ ProseKit,
3
+ type ProseKitProps,
4
+ } from './components/prosekit'
5
+ export {
6
+ defineSvelteMarkView,
7
+ type SvelteMarkViewComponent,
8
+ type SvelteMarkViewOptions,
9
+ type SvelteMarkViewProps,
10
+ } from './extensions/svelte-mark-view'
11
+ export {
12
+ defineSvelteNodeView,
13
+ type SvelteNodeViewComponent,
14
+ type SvelteNodeViewOptions,
15
+ type SvelteNodeViewProps,
16
+ } from './extensions/svelte-node-view'
17
+ export { useDocChange } from './hooks/use-doc-change'
18
+ export { useEditor } from './hooks/use-editor'
19
+ export {
20
+ useExtension,
21
+ type UseExtensionOptions,
22
+ } from './hooks/use-extension'
23
+ export { useKeymap } from './hooks/use-keymap'
24
+ export { useStateUpdate } from './hooks/use-state-update'
25
+ export type { PropsWithClass } from './types'
package/src/types.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export type PropsWithClass<P = unknown> = P & {
5
+ class?: string | undefined
6
+ }