@prosekit/preact 0.5.0 → 0.6.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 (94) hide show
  1. package/dist/create-component-D7yDR5ux.js +2 -1
  2. package/dist/create-component-D7yDR5ux.js.map +1 -0
  3. package/dist/{create-props-CkTwd_m_.d.ts → create-props-EGV61dJR.d.ts} +3 -2
  4. package/dist/create-props-EGV61dJR.d.ts.map +1 -0
  5. package/dist/editor-context-imq7MdJr.js +2 -1
  6. package/dist/editor-context-imq7MdJr.js.map +1 -0
  7. package/dist/prosekit-preact-autocomplete.d.ts +12 -11
  8. package/dist/prosekit-preact-autocomplete.d.ts.map +1 -0
  9. package/dist/prosekit-preact-autocomplete.js +2 -1
  10. package/dist/prosekit-preact-autocomplete.js.map +1 -0
  11. package/dist/prosekit-preact-block-handle.d.ts +9 -8
  12. package/dist/prosekit-preact-block-handle.d.ts.map +1 -0
  13. package/dist/prosekit-preact-block-handle.js +2 -1
  14. package/dist/prosekit-preact-block-handle.js.map +1 -0
  15. package/dist/prosekit-preact-drop-indicator.d.ts +5 -4
  16. package/dist/prosekit-preact-drop-indicator.d.ts.map +1 -0
  17. package/dist/prosekit-preact-drop-indicator.js +2 -1
  18. package/dist/prosekit-preact-drop-indicator.js.map +1 -0
  19. package/dist/prosekit-preact-inline-popover.d.ts +5 -4
  20. package/dist/prosekit-preact-inline-popover.d.ts.map +1 -0
  21. package/dist/prosekit-preact-inline-popover.js +2 -1
  22. package/dist/prosekit-preact-inline-popover.js.map +1 -0
  23. package/dist/prosekit-preact-popover.d.ts +9 -8
  24. package/dist/prosekit-preact-popover.d.ts.map +1 -0
  25. package/dist/prosekit-preact-popover.js +2 -1
  26. package/dist/prosekit-preact-popover.js.map +1 -0
  27. package/dist/prosekit-preact-resizable.d.ts +7 -6
  28. package/dist/prosekit-preact-resizable.d.ts.map +1 -0
  29. package/dist/prosekit-preact-resizable.js +2 -1
  30. package/dist/prosekit-preact-resizable.js.map +1 -0
  31. package/dist/prosekit-preact-table-handle.d.ts +21 -20
  32. package/dist/prosekit-preact-table-handle.d.ts.map +1 -0
  33. package/dist/prosekit-preact-table-handle.js +2 -1
  34. package/dist/prosekit-preact-table-handle.js.map +1 -0
  35. package/dist/prosekit-preact-tooltip.d.ts +9 -8
  36. package/dist/prosekit-preact-tooltip.d.ts.map +1 -0
  37. package/dist/prosekit-preact-tooltip.js +2 -1
  38. package/dist/prosekit-preact-tooltip.js.map +1 -0
  39. package/dist/prosekit-preact.d.ts +124 -34
  40. package/dist/prosekit-preact.d.ts.map +1 -0
  41. package/dist/prosekit-preact.js +137 -23
  42. package/dist/prosekit-preact.js.map +1 -0
  43. package/package.json +16 -14
  44. package/src/components/autocomplete/autocomplete-empty.gen.ts +34 -0
  45. package/src/components/autocomplete/autocomplete-item.gen.ts +34 -0
  46. package/src/components/autocomplete/autocomplete-list.gen.ts +34 -0
  47. package/src/components/autocomplete/autocomplete-popover.gen.ts +34 -0
  48. package/src/components/autocomplete/index.gen.ts +7 -0
  49. package/src/components/block-handle/block-handle-add.gen.ts +34 -0
  50. package/src/components/block-handle/block-handle-draggable.gen.ts +34 -0
  51. package/src/components/block-handle/block-handle-popover.gen.ts +34 -0
  52. package/src/components/block-handle/index.gen.ts +5 -0
  53. package/src/components/create-component.ts +135 -0
  54. package/src/components/create-props.ts +13 -0
  55. package/src/components/drop-indicator/drop-indicator.gen.ts +34 -0
  56. package/src/components/drop-indicator/index.gen.ts +1 -0
  57. package/src/components/inline-popover/index.gen.ts +1 -0
  58. package/src/components/inline-popover/inline-popover.gen.ts +34 -0
  59. package/src/components/merge-refs.ts +35 -0
  60. package/src/components/popover/index.gen.ts +5 -0
  61. package/src/components/popover/popover-content.gen.ts +34 -0
  62. package/src/components/popover/popover-root.gen.ts +34 -0
  63. package/src/components/popover/popover-trigger.gen.ts +34 -0
  64. package/src/components/prosekit.ts +37 -0
  65. package/src/components/resizable/index.gen.ts +3 -0
  66. package/src/components/resizable/resizable-handle.gen.ts +34 -0
  67. package/src/components/resizable/resizable-root.gen.ts +34 -0
  68. package/src/components/table-handle/index.gen.ts +17 -0
  69. package/src/components/table-handle/table-handle-column-root.gen.ts +34 -0
  70. package/src/components/table-handle/table-handle-column-trigger.gen.ts +34 -0
  71. package/src/components/table-handle/table-handle-drag-preview.gen.ts +34 -0
  72. package/src/components/table-handle/table-handle-drop-indicator.gen.ts +34 -0
  73. package/src/components/table-handle/table-handle-popover-content.gen.ts +34 -0
  74. package/src/components/table-handle/table-handle-popover-item.gen.ts +34 -0
  75. package/src/components/table-handle/table-handle-root.gen.ts +34 -0
  76. package/src/components/table-handle/table-handle-row-root.gen.ts +34 -0
  77. package/src/components/table-handle/table-handle-row-trigger.gen.ts +34 -0
  78. package/src/components/tooltip/index.gen.ts +5 -0
  79. package/src/components/tooltip/tooltip-content.gen.ts +34 -0
  80. package/src/components/tooltip/tooltip-root.gen.ts +34 -0
  81. package/src/components/tooltip/tooltip-trigger.gen.ts +34 -0
  82. package/src/contexts/editor-context.ts +23 -0
  83. package/src/extensions/preact-mark-view.ts +93 -0
  84. package/src/extensions/preact-node-view.ts +93 -0
  85. package/src/hooks/use-doc-change.ts +24 -0
  86. package/src/hooks/use-editor-derived-value.ts +81 -0
  87. package/src/hooks/use-editor-extension.ts +24 -0
  88. package/src/hooks/use-editor.ts +57 -0
  89. package/src/hooks/use-extension.ts +41 -0
  90. package/src/hooks/use-keymap.ts +15 -0
  91. package/src/hooks/use-priority-extension.ts +18 -0
  92. package/src/hooks/use-state-update.ts +24 -0
  93. package/src/index.ts +32 -0
  94. package/src/types.ts +16 -0
@@ -0,0 +1,34 @@
1
+ import {
2
+ type AutocompletePopoverElement,
3
+ type AutocompletePopoverProps as Props,
4
+ type AutocompletePopoverEvents as Events,
5
+ autocompletePopoverProps,
6
+ autocompletePopoverEvents,
7
+ } from '@prosekit/web/autocomplete'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link AutocompletePopover} component.
19
+ */
20
+ export interface AutocompletePopoverProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const AutocompletePopover: ForwardRefExoticComponent<
23
+ Partial<AutocompletePopoverProps> &
24
+ RefAttributes<AutocompletePopoverElement> &
25
+ HTMLAttributes<AutocompletePopoverElement>
26
+ > = createComponent<
27
+ AutocompletePopoverProps,
28
+ AutocompletePopoverElement
29
+ >(
30
+ 'prosekit-autocomplete-popover',
31
+ 'AutocompletePopover',
32
+ Object.keys(autocompletePopoverProps),
33
+ Object.keys(autocompletePopoverEvents),
34
+ )
@@ -0,0 +1,7 @@
1
+ export { AutocompleteEmpty, type AutocompleteEmptyProps } from './autocomplete-empty.gen'
2
+
3
+ export { AutocompleteItem, type AutocompleteItemProps } from './autocomplete-item.gen'
4
+
5
+ export { AutocompleteList, type AutocompleteListProps } from './autocomplete-list.gen'
6
+
7
+ export { AutocompletePopover, type AutocompletePopoverProps } from './autocomplete-popover.gen'
@@ -0,0 +1,34 @@
1
+ import {
2
+ type BlockHandleAddElement,
3
+ type BlockHandleAddProps as Props,
4
+ type BlockHandleAddEvents as Events,
5
+ blockHandleAddProps,
6
+ blockHandleAddEvents,
7
+ } from '@prosekit/web/block-handle'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link BlockHandleAdd} component.
19
+ */
20
+ export interface BlockHandleAddProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const BlockHandleAdd: ForwardRefExoticComponent<
23
+ Partial<BlockHandleAddProps> &
24
+ RefAttributes<BlockHandleAddElement> &
25
+ HTMLAttributes<BlockHandleAddElement>
26
+ > = createComponent<
27
+ BlockHandleAddProps,
28
+ BlockHandleAddElement
29
+ >(
30
+ 'prosekit-block-handle-add',
31
+ 'BlockHandleAdd',
32
+ Object.keys(blockHandleAddProps),
33
+ Object.keys(blockHandleAddEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type BlockHandleDraggableElement,
3
+ type BlockHandleDraggableProps as Props,
4
+ type BlockHandleDraggableEvents as Events,
5
+ blockHandleDraggableProps,
6
+ blockHandleDraggableEvents,
7
+ } from '@prosekit/web/block-handle'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link BlockHandleDraggable} component.
19
+ */
20
+ export interface BlockHandleDraggableProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const BlockHandleDraggable: ForwardRefExoticComponent<
23
+ Partial<BlockHandleDraggableProps> &
24
+ RefAttributes<BlockHandleDraggableElement> &
25
+ HTMLAttributes<BlockHandleDraggableElement>
26
+ > = createComponent<
27
+ BlockHandleDraggableProps,
28
+ BlockHandleDraggableElement
29
+ >(
30
+ 'prosekit-block-handle-draggable',
31
+ 'BlockHandleDraggable',
32
+ Object.keys(blockHandleDraggableProps),
33
+ Object.keys(blockHandleDraggableEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type BlockHandlePopoverElement,
3
+ type BlockHandlePopoverProps as Props,
4
+ type BlockHandlePopoverEvents as Events,
5
+ blockHandlePopoverProps,
6
+ blockHandlePopoverEvents,
7
+ } from '@prosekit/web/block-handle'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link BlockHandlePopover} component.
19
+ */
20
+ export interface BlockHandlePopoverProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const BlockHandlePopover: ForwardRefExoticComponent<
23
+ Partial<BlockHandlePopoverProps> &
24
+ RefAttributes<BlockHandlePopoverElement> &
25
+ HTMLAttributes<BlockHandlePopoverElement>
26
+ > = createComponent<
27
+ BlockHandlePopoverProps,
28
+ BlockHandlePopoverElement
29
+ >(
30
+ 'prosekit-block-handle-popover',
31
+ 'BlockHandlePopover',
32
+ Object.keys(blockHandlePopoverProps),
33
+ Object.keys(blockHandlePopoverEvents),
34
+ )
@@ -0,0 +1,5 @@
1
+ export { BlockHandleAdd, type BlockHandleAddProps } from './block-handle-add.gen'
2
+
3
+ export { BlockHandleDraggable, type BlockHandleDraggableProps } from './block-handle-draggable.gen'
4
+
5
+ export { BlockHandlePopover, type BlockHandlePopoverProps } from './block-handle-popover.gen'
@@ -0,0 +1,135 @@
1
+ import type { AnyFunction } from '@prosekit/core'
2
+ import { createElement } from 'preact'
3
+ import {
4
+ forwardRef,
5
+ type ForwardRefExoticComponent,
6
+ type HTMLAttributes,
7
+ type RefAttributes,
8
+ } from 'preact/compat'
9
+ import {
10
+ useEffect,
11
+ useLayoutEffect,
12
+ useMemo,
13
+ useRef,
14
+ useState,
15
+ } from 'preact/hooks'
16
+
17
+ import { useEditorContext } from '../contexts/editor-context'
18
+
19
+ import { mergeRefs } from './merge-refs'
20
+
21
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect
22
+
23
+ export function createComponent<
24
+ Props extends object,
25
+ CustomElement extends HTMLElement,
26
+ >(
27
+ tagName: string,
28
+ displayName: string,
29
+ propNames: string[],
30
+ eventNames: string[],
31
+ ): ForwardRefExoticComponent<
32
+ Partial<Props> & RefAttributes<CustomElement> & HTMLAttributes<CustomElement>
33
+ > {
34
+ const hasEditor = propNames.includes('editor')
35
+ const lowerCaseEventNameMap = new Map(
36
+ eventNames.map((name) => [name.toLowerCase(), name]),
37
+ )
38
+
39
+ const Component = forwardRef<any, any>((props: Props, ref) => {
40
+ const [el, setEl] = useState<HTMLElement | null>(null)
41
+
42
+ const properties: Record<string, unknown> = {}
43
+ const attributes: Record<string, unknown> = {}
44
+ const eventHandlersRef = useRef<Record<string, AnyFunction>>({})
45
+ const eventHandlers: Record<string, AnyFunction> = {}
46
+
47
+ for (const [name, value] of Object.entries(props)) {
48
+ if (value === undefined) {
49
+ continue
50
+ }
51
+
52
+ if (propNames.includes(name)) {
53
+ properties[name] = value
54
+ continue
55
+ }
56
+
57
+ if (name.startsWith('on')) {
58
+ const lowerCaseEventName = name.slice(2).toLowerCase()
59
+ const eventName = lowerCaseEventNameMap.get(lowerCaseEventName)
60
+ if (eventName) {
61
+ const extractDetail = eventName.endsWith('Change')
62
+ eventHandlers[eventName] = (event: Event) => {
63
+ const handler = value as AnyFunction | null
64
+ if (typeof handler === 'function') {
65
+ handler(extractDetail ? (event as CustomEvent).detail : event)
66
+ }
67
+ }
68
+ continue
69
+ }
70
+ }
71
+
72
+ if (name === 'className') {
73
+ attributes['class'] = value
74
+ } else {
75
+ attributes[name] = value
76
+ }
77
+ }
78
+
79
+ const editor = useEditorContext()
80
+
81
+ if (hasEditor && editor && !properties['editor']) {
82
+ properties['editor'] = editor
83
+ }
84
+
85
+ // Set all properties.
86
+ useIsomorphicLayoutEffect(() => {
87
+ if (!el) return
88
+ for (const [name, value] of Object.entries(properties)) {
89
+ if (value !== undefined) {
90
+ // @ts-expect-error: we know that name is a valid property name
91
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
92
+ el[name] = value as unknown as any
93
+ }
94
+ }
95
+ }, [el, ...propNames.map((name) => properties[name])])
96
+
97
+ // Put all event listeners extracted from `props` into `eventHandlersRef`.
98
+ useIsomorphicLayoutEffect(() => {
99
+ eventHandlersRef.current = eventHandlers
100
+ })
101
+
102
+ // Register the event listeners to the element.
103
+ useIsomorphicLayoutEffect(() => {
104
+ if (!el) {
105
+ return
106
+ }
107
+
108
+ const fixedEventHandlers: Record<string, AnyFunction> = {}
109
+
110
+ for (const eventName of eventNames) {
111
+ fixedEventHandlers[eventName] = (event: Event) => {
112
+ eventHandlersRef.current[eventName]?.(event)
113
+ }
114
+ }
115
+
116
+ for (const [name, handler] of Object.entries(fixedEventHandlers)) {
117
+ el.addEventListener(name, handler)
118
+ }
119
+
120
+ return () => {
121
+ for (const [name, handler] of Object.entries(fixedEventHandlers)) {
122
+ el.removeEventListener(name, handler)
123
+ }
124
+ }
125
+ }, [el])
126
+
127
+ const mergedRef = useMemo(() => mergeRefs([ref, setEl]), [ref])
128
+
129
+ return createElement(tagName, { ...attributes, ref: mergedRef })
130
+ })
131
+
132
+ Component.displayName = displayName
133
+
134
+ return Component
135
+ }
@@ -0,0 +1,13 @@
1
+ export type CreateProps<
2
+ Props extends { [PropName in keyof Props]: unknown },
3
+ Events extends { [EventName in keyof Events]: CustomEvent },
4
+ > = Props & CreateEventProps<Events>
5
+
6
+ type CreateEventProps<
7
+ Events extends { [EventName in keyof Events]: CustomEvent },
8
+ > = {
9
+ [EventName in keyof Events as `on${Capitalize<string & EventName>}`]: (
10
+ event: EventName extends `${string}Change` ? Events[EventName]['detail']
11
+ : Events[EventName],
12
+ ) => void
13
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ type DropIndicatorElement,
3
+ type DropIndicatorProps as Props,
4
+ type DropIndicatorEvents as Events,
5
+ dropIndicatorProps,
6
+ dropIndicatorEvents,
7
+ } from '@prosekit/web/drop-indicator'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link DropIndicator} component.
19
+ */
20
+ export interface DropIndicatorProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const DropIndicator: ForwardRefExoticComponent<
23
+ Partial<DropIndicatorProps> &
24
+ RefAttributes<DropIndicatorElement> &
25
+ HTMLAttributes<DropIndicatorElement>
26
+ > = createComponent<
27
+ DropIndicatorProps,
28
+ DropIndicatorElement
29
+ >(
30
+ 'prosekit-drop-indicator',
31
+ 'DropIndicator',
32
+ Object.keys(dropIndicatorProps),
33
+ Object.keys(dropIndicatorEvents),
34
+ )
@@ -0,0 +1 @@
1
+ export { DropIndicator, type DropIndicatorProps } from './drop-indicator.gen'
@@ -0,0 +1 @@
1
+ export { InlinePopover, type InlinePopoverProps } from './inline-popover.gen'
@@ -0,0 +1,34 @@
1
+ import {
2
+ type InlinePopoverElement,
3
+ type InlinePopoverProps as Props,
4
+ type InlinePopoverEvents as Events,
5
+ inlinePopoverProps,
6
+ inlinePopoverEvents,
7
+ } from '@prosekit/web/inline-popover'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link InlinePopover} component.
19
+ */
20
+ export interface InlinePopoverProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const InlinePopover: ForwardRefExoticComponent<
23
+ Partial<InlinePopoverProps> &
24
+ RefAttributes<InlinePopoverElement> &
25
+ HTMLAttributes<InlinePopoverElement>
26
+ > = createComponent<
27
+ InlinePopoverProps,
28
+ InlinePopoverElement
29
+ >(
30
+ 'prosekit-inline-popover',
31
+ 'InlinePopover',
32
+ Object.keys(inlinePopoverProps),
33
+ Object.keys(inlinePopoverEvents),
34
+ )
@@ -0,0 +1,35 @@
1
+ import type { Ref } from 'preact'
2
+
3
+ /**
4
+ * Assigns a value to a ref.
5
+ * @returns The ref cleanup callback, if any.
6
+ */
7
+ function assignRef<T>(
8
+ ref: Ref<T> | undefined,
9
+ value: T | null,
10
+ ): VoidFunction | undefined | void {
11
+ if (typeof ref === 'function') {
12
+ return ref(value)
13
+ } else if (ref) {
14
+ ref.current = value
15
+ }
16
+ }
17
+
18
+ /**
19
+ * Merges multiple refs into a single one.
20
+ */
21
+ export function mergeRefs<T>(refs: (Ref<T> | undefined)[]): Ref<T> {
22
+ return (value: T | null) => {
23
+ const cleanups: VoidFunction[] = []
24
+
25
+ for (const ref of refs) {
26
+ const cleanup = assignRef(ref, value)
27
+ const isCleanup = typeof cleanup === 'function'
28
+ cleanups.push(isCleanup ? cleanup : () => assignRef(ref, null))
29
+ }
30
+
31
+ return () => {
32
+ for (const cleanup of cleanups) cleanup()
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,5 @@
1
+ export { PopoverContent, type PopoverContentProps } from './popover-content.gen'
2
+
3
+ export { PopoverRoot, type PopoverRootProps } from './popover-root.gen'
4
+
5
+ export { PopoverTrigger, type PopoverTriggerProps } from './popover-trigger.gen'
@@ -0,0 +1,34 @@
1
+ import {
2
+ type PopoverContentElement,
3
+ type PopoverContentProps as Props,
4
+ type PopoverContentEvents as Events,
5
+ popoverContentProps,
6
+ popoverContentEvents,
7
+ } from '@prosekit/web/popover'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link PopoverContent} component.
19
+ */
20
+ export interface PopoverContentProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const PopoverContent: ForwardRefExoticComponent<
23
+ Partial<PopoverContentProps> &
24
+ RefAttributes<PopoverContentElement> &
25
+ HTMLAttributes<PopoverContentElement>
26
+ > = createComponent<
27
+ PopoverContentProps,
28
+ PopoverContentElement
29
+ >(
30
+ 'prosekit-popover-content',
31
+ 'PopoverContent',
32
+ Object.keys(popoverContentProps),
33
+ Object.keys(popoverContentEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type PopoverRootElement,
3
+ type PopoverRootProps as Props,
4
+ type PopoverRootEvents as Events,
5
+ popoverRootProps,
6
+ popoverRootEvents,
7
+ } from '@prosekit/web/popover'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link PopoverRoot} component.
19
+ */
20
+ export interface PopoverRootProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const PopoverRoot: ForwardRefExoticComponent<
23
+ Partial<PopoverRootProps> &
24
+ RefAttributes<PopoverRootElement> &
25
+ HTMLAttributes<PopoverRootElement>
26
+ > = createComponent<
27
+ PopoverRootProps,
28
+ PopoverRootElement
29
+ >(
30
+ 'prosekit-popover-root',
31
+ 'PopoverRoot',
32
+ Object.keys(popoverRootProps),
33
+ Object.keys(popoverRootEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type PopoverTriggerElement,
3
+ type PopoverTriggerProps as Props,
4
+ type PopoverTriggerEvents as Events,
5
+ popoverTriggerProps,
6
+ popoverTriggerEvents,
7
+ } from '@prosekit/web/popover'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link PopoverTrigger} component.
19
+ */
20
+ export interface PopoverTriggerProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const PopoverTrigger: ForwardRefExoticComponent<
23
+ Partial<PopoverTriggerProps> &
24
+ RefAttributes<PopoverTriggerElement> &
25
+ HTMLAttributes<PopoverTriggerElement>
26
+ > = createComponent<
27
+ PopoverTriggerProps,
28
+ PopoverTriggerElement
29
+ >(
30
+ 'prosekit-popover-trigger',
31
+ 'PopoverTrigger',
32
+ Object.keys(popoverTriggerProps),
33
+ Object.keys(popoverTriggerEvents),
34
+ )
@@ -0,0 +1,37 @@
1
+ import type { Editor } from '@prosekit/core'
2
+ import { ProsemirrorAdapterProvider } from '@prosemirror-adapter/preact'
3
+ import {
4
+ h,
5
+ type ComponentChildren,
6
+ type ComponentType,
7
+ } from 'preact'
8
+
9
+ import { EditorContextProvider } from '../contexts/editor-context'
10
+ import { PreactMarkViewConsumer } from '../extensions/preact-mark-view'
11
+ import { PreactNodeViewConsumer } from '../extensions/preact-node-view'
12
+
13
+ export interface ProseKitProps {
14
+ editor: Editor
15
+ children?: ComponentChildren
16
+ }
17
+
18
+ /**
19
+ * The root component for a ProseKit editor.
20
+ *
21
+ * @public
22
+ */
23
+ export const ProseKit: ComponentType<ProseKitProps> = (props) => {
24
+ const { editor, children } = props
25
+
26
+ return h(
27
+ ProsemirrorAdapterProvider,
28
+ null,
29
+ h(
30
+ EditorContextProvider,
31
+ { value: editor },
32
+ h(PreactNodeViewConsumer, null),
33
+ h(PreactMarkViewConsumer, null),
34
+ children,
35
+ ),
36
+ )
37
+ }
@@ -0,0 +1,3 @@
1
+ export { ResizableHandle, type ResizableHandleProps } from './resizable-handle.gen'
2
+
3
+ export { ResizableRoot, type ResizableRootProps } from './resizable-root.gen'
@@ -0,0 +1,34 @@
1
+ import {
2
+ type ResizableHandleElement,
3
+ type ResizableHandleProps as Props,
4
+ type ResizableHandleEvents as Events,
5
+ resizableHandleProps,
6
+ resizableHandleEvents,
7
+ } from '@prosekit/web/resizable'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link ResizableHandle} component.
19
+ */
20
+ export interface ResizableHandleProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const ResizableHandle: ForwardRefExoticComponent<
23
+ Partial<ResizableHandleProps> &
24
+ RefAttributes<ResizableHandleElement> &
25
+ HTMLAttributes<ResizableHandleElement>
26
+ > = createComponent<
27
+ ResizableHandleProps,
28
+ ResizableHandleElement
29
+ >(
30
+ 'prosekit-resizable-handle',
31
+ 'ResizableHandle',
32
+ Object.keys(resizableHandleProps),
33
+ Object.keys(resizableHandleEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type ResizableRootElement,
3
+ type ResizableRootProps as Props,
4
+ type ResizableRootEvents as Events,
5
+ resizableRootProps,
6
+ resizableRootEvents,
7
+ } from '@prosekit/web/resizable'
8
+ import type {
9
+ ForwardRefExoticComponent,
10
+ HTMLAttributes,
11
+ RefAttributes,
12
+ } from 'preact/compat'
13
+
14
+ import { createComponent } from '../create-component'
15
+ import type { CreateProps } from '../create-props'
16
+
17
+ /**
18
+ * Props for the {@link ResizableRoot} component.
19
+ */
20
+ export interface ResizableRootProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const ResizableRoot: ForwardRefExoticComponent<
23
+ Partial<ResizableRootProps> &
24
+ RefAttributes<ResizableRootElement> &
25
+ HTMLAttributes<ResizableRootElement>
26
+ > = createComponent<
27
+ ResizableRootProps,
28
+ ResizableRootElement
29
+ >(
30
+ 'prosekit-resizable-root',
31
+ 'ResizableRoot',
32
+ Object.keys(resizableRootProps),
33
+ Object.keys(resizableRootEvents),
34
+ )
@@ -0,0 +1,17 @@
1
+ export { TableHandleColumnRoot, type TableHandleColumnRootProps } from './table-handle-column-root.gen'
2
+
3
+ export { TableHandleColumnTrigger, type TableHandleColumnTriggerProps } from './table-handle-column-trigger.gen'
4
+
5
+ export { TableHandleDragPreview, type TableHandleDragPreviewProps } from './table-handle-drag-preview.gen'
6
+
7
+ export { TableHandleDropIndicator, type TableHandleDropIndicatorProps } from './table-handle-drop-indicator.gen'
8
+
9
+ export { TableHandlePopoverContent, type TableHandlePopoverContentProps } from './table-handle-popover-content.gen'
10
+
11
+ export { TableHandlePopoverItem, type TableHandlePopoverItemProps } from './table-handle-popover-item.gen'
12
+
13
+ export { TableHandleRoot, type TableHandleRootProps } from './table-handle-root.gen'
14
+
15
+ export { TableHandleRowRoot, type TableHandleRowRootProps } from './table-handle-row-root.gen'
16
+
17
+ export { TableHandleRowTrigger, type TableHandleRowTriggerProps } from './table-handle-row-trigger.gen'