@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.
- package/dist/build/components/autocomplete/autocomplete-empty.gen.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-empty.gen.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-empty.gen.svelte.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-empty.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-item.gen.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-item.gen.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-item.gen.svelte.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-item.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-list.gen.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-list.gen.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-list.gen.svelte.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-list.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-popover.gen.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-popover.gen.d.ts.map +1 -0
- package/dist/build/components/autocomplete/autocomplete-popover.gen.svelte.d.ts +1 -0
- package/dist/build/components/autocomplete/autocomplete-popover.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/autocomplete/index.gen.d.ts +1 -0
- package/dist/build/components/autocomplete/index.gen.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-add.gen.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-add.gen.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-add.gen.svelte.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-add.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-draggable.gen.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-draggable.gen.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-draggable.gen.svelte.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-draggable.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-popover.gen.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-popover.gen.d.ts.map +1 -0
- package/dist/build/components/block-handle/block-handle-popover.gen.svelte.d.ts +1 -0
- package/dist/build/components/block-handle/block-handle-popover.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/block-handle/index.gen.d.ts +1 -0
- package/dist/build/components/block-handle/index.gen.d.ts.map +1 -0
- package/dist/build/components/client-update/client-update.svelte.d.ts +1 -0
- package/dist/build/components/client-update/client-update.svelte.d.ts.map +1 -0
- package/dist/build/components/client-update/index.d.ts +1 -0
- package/dist/build/components/client-update/index.d.ts.map +1 -0
- package/dist/build/components/create-props.d.ts +1 -0
- package/dist/build/components/create-props.d.ts.map +1 -0
- package/dist/build/components/drop-indicator/drop-indicator.gen.d.ts +1 -0
- package/dist/build/components/drop-indicator/drop-indicator.gen.d.ts.map +1 -0
- package/dist/build/components/drop-indicator/drop-indicator.gen.svelte.d.ts +1 -0
- package/dist/build/components/drop-indicator/drop-indicator.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/drop-indicator/index.gen.d.ts +1 -0
- package/dist/build/components/drop-indicator/index.gen.d.ts.map +1 -0
- package/dist/build/components/inline-popover/index.gen.d.ts +1 -0
- package/dist/build/components/inline-popover/index.gen.d.ts.map +1 -0
- package/dist/build/components/inline-popover/inline-popover.gen.d.ts +1 -0
- package/dist/build/components/inline-popover/inline-popover.gen.d.ts.map +1 -0
- package/dist/build/components/inline-popover/inline-popover.gen.svelte.d.ts +1 -0
- package/dist/build/components/inline-popover/inline-popover.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/mark-view-consumer/index.d.ts +1 -0
- package/dist/build/components/mark-view-consumer/index.d.ts.map +1 -0
- package/dist/build/components/mark-view-consumer/mark-view-consumer.svelte.d.ts +1 -0
- package/dist/build/components/mark-view-consumer/mark-view-consumer.svelte.d.ts.map +1 -0
- package/dist/build/components/mark-view-wrapper/index.d.ts +1 -0
- package/dist/build/components/mark-view-wrapper/index.d.ts.map +1 -0
- package/dist/build/components/mark-view-wrapper/mark-view-wrapper.svelte.d.ts +1 -0
- package/dist/build/components/mark-view-wrapper/mark-view-wrapper.svelte.d.ts.map +1 -0
- package/dist/build/components/mark-view-wrapper/props.d.ts +1 -0
- package/dist/build/components/mark-view-wrapper/props.d.ts.map +1 -0
- package/dist/build/components/node-view-consumer/index.d.ts +1 -0
- package/dist/build/components/node-view-consumer/index.d.ts.map +1 -0
- package/dist/build/components/node-view-consumer/node-view-consumer.svelte.d.ts +1 -0
- package/dist/build/components/node-view-consumer/node-view-consumer.svelte.d.ts.map +1 -0
- package/dist/build/components/node-view-wrapper/index.d.ts +1 -0
- package/dist/build/components/node-view-wrapper/index.d.ts.map +1 -0
- package/dist/build/components/node-view-wrapper/node-view-wrapper.svelte.d.ts +1 -0
- package/dist/build/components/node-view-wrapper/node-view-wrapper.svelte.d.ts.map +1 -0
- package/dist/build/components/node-view-wrapper/props.d.ts +1 -0
- package/dist/build/components/node-view-wrapper/props.d.ts.map +1 -0
- package/dist/build/components/popover/index.gen.d.ts +1 -0
- package/dist/build/components/popover/index.gen.d.ts.map +1 -0
- package/dist/build/components/popover/popover-content.gen.d.ts +1 -0
- package/dist/build/components/popover/popover-content.gen.d.ts.map +1 -0
- package/dist/build/components/popover/popover-content.gen.svelte.d.ts +1 -0
- package/dist/build/components/popover/popover-content.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/popover/popover-root.gen.d.ts +1 -0
- package/dist/build/components/popover/popover-root.gen.d.ts.map +1 -0
- package/dist/build/components/popover/popover-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/popover/popover-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/popover/popover-trigger.gen.d.ts +1 -0
- package/dist/build/components/popover/popover-trigger.gen.d.ts.map +1 -0
- package/dist/build/components/popover/popover-trigger.gen.svelte.d.ts +1 -0
- package/dist/build/components/popover/popover-trigger.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/prosekit/index.d.ts +1 -0
- package/dist/build/components/prosekit/index.d.ts.map +1 -0
- package/dist/build/components/prosekit/prosekit.svelte.d.ts +1 -0
- package/dist/build/components/prosekit/prosekit.svelte.d.ts.map +1 -0
- package/dist/build/components/resizable/index.gen.d.ts +1 -0
- package/dist/build/components/resizable/index.gen.d.ts.map +1 -0
- package/dist/build/components/resizable/resizable-handle.gen.d.ts +1 -0
- package/dist/build/components/resizable/resizable-handle.gen.d.ts.map +1 -0
- package/dist/build/components/resizable/resizable-handle.gen.svelte.d.ts +1 -0
- package/dist/build/components/resizable/resizable-handle.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/resizable/resizable-root.gen.d.ts +1 -0
- package/dist/build/components/resizable/resizable-root.gen.d.ts.map +1 -0
- package/dist/build/components/resizable/resizable-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/resizable/resizable-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/index.gen.d.ts +1 -0
- package/dist/build/components/table-handle/index.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-column-root.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-column-root.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-column-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-column-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-column-trigger.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-column-trigger.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-column-trigger.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-column-trigger.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-drag-preview.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-drag-preview.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-drag-preview.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-drag-preview.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-drop-indicator.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-drop-indicator.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-drop-indicator.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-drop-indicator.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-popover-content.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-popover-content.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-popover-content.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-popover-content.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-popover-item.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-popover-item.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-popover-item.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-popover-item.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-root.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-root.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-row-root.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-row-root.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-row-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-row-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-row-trigger.gen.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-row-trigger.gen.d.ts.map +1 -0
- package/dist/build/components/table-handle/table-handle-row-trigger.gen.svelte.d.ts +1 -0
- package/dist/build/components/table-handle/table-handle-row-trigger.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/tooltip/index.gen.d.ts +1 -0
- package/dist/build/components/tooltip/index.gen.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-content.gen.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-content.gen.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-content.gen.svelte.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-content.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-root.gen.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-root.gen.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-root.gen.svelte.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-root.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-trigger.gen.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-trigger.gen.d.ts.map +1 -0
- package/dist/build/components/tooltip/tooltip-trigger.gen.svelte.d.ts +1 -0
- package/dist/build/components/tooltip/tooltip-trigger.gen.svelte.d.ts.map +1 -0
- package/dist/build/components/use-component.d.ts +1 -0
- package/dist/build/components/use-component.d.ts.map +1 -0
- package/dist/build/components/use-event-handlers.d.ts +1 -0
- package/dist/build/components/use-event-handlers.d.ts.map +1 -0
- package/dist/build/contexts/editor-context.d.ts +1 -0
- package/dist/build/contexts/editor-context.d.ts.map +1 -0
- package/dist/build/extensions/svelte-mark-view.d.ts +1 -0
- package/dist/build/extensions/svelte-mark-view.d.ts.map +1 -0
- package/dist/build/extensions/svelte-node-view.d.ts +1 -0
- package/dist/build/extensions/svelte-node-view.d.ts.map +1 -0
- package/dist/build/hooks/use-doc-change.d.ts +1 -0
- package/dist/build/hooks/use-doc-change.d.ts.map +1 -0
- package/dist/build/hooks/use-editor-extension.d.ts +1 -0
- package/dist/build/hooks/use-editor-extension.d.ts.map +1 -0
- package/dist/build/hooks/use-editor.d.ts +1 -0
- package/dist/build/hooks/use-editor.d.ts.map +1 -0
- package/dist/build/hooks/use-extension.d.ts +1 -0
- package/dist/build/hooks/use-extension.d.ts.map +1 -0
- package/dist/build/hooks/use-keymap.d.ts +1 -0
- package/dist/build/hooks/use-keymap.d.ts.map +1 -0
- package/dist/build/hooks/use-priority-extension.d.ts +1 -0
- package/dist/build/hooks/use-priority-extension.d.ts.map +1 -0
- package/dist/build/hooks/use-state-update.d.ts +1 -0
- package/dist/build/hooks/use-state-update.d.ts.map +1 -0
- package/dist/build/index.d.ts +1 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/types.d.ts +1 -0
- package/dist/build/types.d.ts.map +1 -0
- package/package.json +21 -21
- package/src/components/autocomplete/autocomplete-empty.gen.svelte +23 -0
- package/src/components/autocomplete/autocomplete-empty.gen.ts +14 -0
- package/src/components/autocomplete/autocomplete-item.gen.svelte +23 -0
- package/src/components/autocomplete/autocomplete-item.gen.ts +14 -0
- package/src/components/autocomplete/autocomplete-list.gen.svelte +23 -0
- package/src/components/autocomplete/autocomplete-list.gen.ts +14 -0
- package/src/components/autocomplete/autocomplete-popover.gen.svelte +23 -0
- package/src/components/autocomplete/autocomplete-popover.gen.ts +14 -0
- package/src/components/autocomplete/index.gen.ts +7 -0
- package/src/components/block-handle/block-handle-add.gen.svelte +23 -0
- package/src/components/block-handle/block-handle-add.gen.ts +14 -0
- package/src/components/block-handle/block-handle-draggable.gen.svelte +23 -0
- package/src/components/block-handle/block-handle-draggable.gen.ts +14 -0
- package/src/components/block-handle/block-handle-popover.gen.svelte +23 -0
- package/src/components/block-handle/block-handle-popover.gen.ts +14 -0
- package/src/components/block-handle/index.gen.ts +5 -0
- package/src/components/client-update/client-update.svelte +15 -0
- package/src/components/client-update/index.ts +3 -0
- package/src/components/create-props.ts +13 -0
- package/src/components/drop-indicator/drop-indicator.gen.svelte +23 -0
- package/src/components/drop-indicator/drop-indicator.gen.ts +14 -0
- package/src/components/drop-indicator/index.gen.ts +1 -0
- package/src/components/inline-popover/index.gen.ts +1 -0
- package/src/components/inline-popover/inline-popover.gen.svelte +23 -0
- package/src/components/inline-popover/inline-popover.gen.ts +14 -0
- package/src/components/mark-view-consumer/index.ts +8 -0
- package/src/components/mark-view-consumer/mark-view-consumer.svelte +15 -0
- package/src/components/mark-view-wrapper/index.ts +6 -0
- package/src/components/mark-view-wrapper/mark-view-wrapper.svelte +17 -0
- package/src/components/mark-view-wrapper/props.ts +7 -0
- package/src/components/node-view-consumer/index.ts +8 -0
- package/src/components/node-view-consumer/node-view-consumer.svelte +15 -0
- package/src/components/node-view-wrapper/index.ts +6 -0
- package/src/components/node-view-wrapper/node-view-wrapper.svelte +22 -0
- package/src/components/node-view-wrapper/props.ts +7 -0
- package/src/components/popover/index.gen.ts +5 -0
- package/src/components/popover/popover-content.gen.svelte +23 -0
- package/src/components/popover/popover-content.gen.ts +14 -0
- package/src/components/popover/popover-root.gen.svelte +23 -0
- package/src/components/popover/popover-root.gen.ts +14 -0
- package/src/components/popover/popover-trigger.gen.svelte +23 -0
- package/src/components/popover/popover-trigger.gen.ts +14 -0
- package/src/components/prosekit/index.ts +15 -0
- package/src/components/prosekit/prosekit.svelte +16 -0
- package/src/components/resizable/index.gen.ts +3 -0
- package/src/components/resizable/resizable-handle.gen.svelte +23 -0
- package/src/components/resizable/resizable-handle.gen.ts +14 -0
- package/src/components/resizable/resizable-root.gen.svelte +23 -0
- package/src/components/resizable/resizable-root.gen.ts +14 -0
- package/src/components/table-handle/index.gen.ts +17 -0
- package/src/components/table-handle/table-handle-column-root.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-column-root.gen.ts +14 -0
- package/src/components/table-handle/table-handle-column-trigger.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-column-trigger.gen.ts +14 -0
- package/src/components/table-handle/table-handle-drag-preview.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-drag-preview.gen.ts +14 -0
- package/src/components/table-handle/table-handle-drop-indicator.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-drop-indicator.gen.ts +14 -0
- package/src/components/table-handle/table-handle-popover-content.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-popover-content.gen.ts +14 -0
- package/src/components/table-handle/table-handle-popover-item.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-popover-item.gen.ts +14 -0
- package/src/components/table-handle/table-handle-root.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-root.gen.ts +14 -0
- package/src/components/table-handle/table-handle-row-root.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-row-root.gen.ts +14 -0
- package/src/components/table-handle/table-handle-row-trigger.gen.svelte +23 -0
- package/src/components/table-handle/table-handle-row-trigger.gen.ts +14 -0
- package/src/components/tooltip/index.gen.ts +5 -0
- package/src/components/tooltip/tooltip-content.gen.svelte +23 -0
- package/src/components/tooltip/tooltip-content.gen.ts +14 -0
- package/src/components/tooltip/tooltip-root.gen.svelte +23 -0
- package/src/components/tooltip/tooltip-root.gen.ts +14 -0
- package/src/components/tooltip/tooltip-trigger.gen.svelte +23 -0
- package/src/components/tooltip/tooltip-trigger.gen.ts +14 -0
- package/src/components/use-component.ts +71 -0
- package/src/components/use-event-handlers.ts +26 -0
- package/src/contexts/editor-context.ts +31 -0
- package/src/extensions/svelte-mark-view.ts +90 -0
- package/src/extensions/svelte-node-view.ts +90 -0
- package/src/hooks/use-doc-change.ts +21 -0
- package/src/hooks/use-editor-extension.ts +45 -0
- package/src/hooks/use-editor.ts +57 -0
- package/src/hooks/use-extension.ts +39 -0
- package/src/hooks/use-keymap.ts +21 -0
- package/src/hooks/use-priority-extension.ts +21 -0
- package/src/hooks/use-state-update.ts +21 -0
- package/src/index.ts +25 -0
- 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'
|