@prosekit/preact 0.5.0 → 0.5.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 (91) 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 +11 -10
  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 +40 -34
  40. package/dist/prosekit-preact.d.ts.map +1 -0
  41. package/dist/prosekit-preact.js +2 -1
  42. package/dist/prosekit-preact.js.map +1 -0
  43. package/package.json +14 -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 +24 -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/hooks/use-doc-change.ts +24 -0
  84. package/src/hooks/use-editor-extension.ts +24 -0
  85. package/src/hooks/use-editor.ts +57 -0
  86. package/src/hooks/use-extension.ts +41 -0
  87. package/src/hooks/use-keymap.ts +15 -0
  88. package/src/hooks/use-priority-extension.ts +18 -0
  89. package/src/hooks/use-state-update.ts +24 -0
  90. package/src/index.ts +16 -0
  91. package/src/types.ts +16 -0
@@ -0,0 +1,34 @@
1
+ import {
2
+ type TooltipContentElement,
3
+ type TooltipContentProps as Props,
4
+ type TooltipContentEvents as Events,
5
+ tooltipContentProps,
6
+ tooltipContentEvents,
7
+ } from '@prosekit/web/tooltip'
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 TooltipContent} component.
19
+ */
20
+ export interface TooltipContentProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const TooltipContent: ForwardRefExoticComponent<
23
+ Partial<TooltipContentProps> &
24
+ RefAttributes<TooltipContentElement> &
25
+ HTMLAttributes<TooltipContentElement>
26
+ > = createComponent<
27
+ TooltipContentProps,
28
+ TooltipContentElement
29
+ >(
30
+ 'prosekit-tooltip-content',
31
+ 'TooltipContent',
32
+ Object.keys(tooltipContentProps),
33
+ Object.keys(tooltipContentEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type TooltipRootElement,
3
+ type TooltipRootProps as Props,
4
+ type TooltipRootEvents as Events,
5
+ tooltipRootProps,
6
+ tooltipRootEvents,
7
+ } from '@prosekit/web/tooltip'
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 TooltipRoot} component.
19
+ */
20
+ export interface TooltipRootProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const TooltipRoot: ForwardRefExoticComponent<
23
+ Partial<TooltipRootProps> &
24
+ RefAttributes<TooltipRootElement> &
25
+ HTMLAttributes<TooltipRootElement>
26
+ > = createComponent<
27
+ TooltipRootProps,
28
+ TooltipRootElement
29
+ >(
30
+ 'prosekit-tooltip-root',
31
+ 'TooltipRoot',
32
+ Object.keys(tooltipRootProps),
33
+ Object.keys(tooltipRootEvents),
34
+ )
@@ -0,0 +1,34 @@
1
+ import {
2
+ type TooltipTriggerElement,
3
+ type TooltipTriggerProps as Props,
4
+ type TooltipTriggerEvents as Events,
5
+ tooltipTriggerProps,
6
+ tooltipTriggerEvents,
7
+ } from '@prosekit/web/tooltip'
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 TooltipTrigger} component.
19
+ */
20
+ export interface TooltipTriggerProps extends Partial<CreateProps<Props, Events>> {}
21
+
22
+ export const TooltipTrigger: ForwardRefExoticComponent<
23
+ Partial<TooltipTriggerProps> &
24
+ RefAttributes<TooltipTriggerElement> &
25
+ HTMLAttributes<TooltipTriggerElement>
26
+ > = createComponent<
27
+ TooltipTriggerProps,
28
+ TooltipTriggerElement
29
+ >(
30
+ 'prosekit-tooltip-trigger',
31
+ 'TooltipTrigger',
32
+ Object.keys(tooltipTriggerProps),
33
+ Object.keys(tooltipTriggerEvents),
34
+ )
@@ -0,0 +1,23 @@
1
+ import type {
2
+ Editor,
3
+ Extension,
4
+ } from '@prosekit/core'
5
+ import {
6
+ createContext,
7
+ type Provider,
8
+ } from 'preact'
9
+ import { useContext } from 'preact/hooks'
10
+
11
+ const editorContext = createContext<Editor | null>(null)
12
+
13
+ /**
14
+ * @internal
15
+ */
16
+ export function useEditorContext<E extends Extension>(): Editor<E> | null {
17
+ return useContext(editorContext)
18
+ }
19
+
20
+ /**
21
+ * @internal
22
+ */
23
+ export const EditorContextProvider: Provider<Editor | null> = editorContext.Provider
@@ -0,0 +1,24 @@
1
+ import { defineDocChangeHandler } from '@prosekit/core'
2
+ import type { ProseMirrorNode } from '@prosekit/pm/model'
3
+ import { useMemo } from 'preact/hooks'
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 = useMemo(
20
+ () => defineDocChangeHandler((view) => handler(view.state.doc)),
21
+ [handler],
22
+ )
23
+ useExtension(extension, options)
24
+ }
@@ -0,0 +1,24 @@
1
+ import {
2
+ EditorNotFoundError,
3
+ type Editor,
4
+ type Extension,
5
+ } from '@prosekit/core'
6
+ import { useEffect } from 'preact/hooks'
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export function useEditorExtension(
12
+ editor: Editor | null | undefined,
13
+ extension: Extension | null,
14
+ ): void {
15
+ if (!editor) {
16
+ throw new EditorNotFoundError()
17
+ }
18
+
19
+ useEffect(() => {
20
+ if (extension) {
21
+ return editor.use(extension)
22
+ }
23
+ }, [editor, extension])
24
+ }
@@ -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 {
10
+ useEffect,
11
+ useReducer,
12
+ } from 'preact/hooks'
13
+
14
+ import { useEditorContext } from '../contexts/editor-context'
15
+
16
+ /**
17
+ * Retrieves the editor instance from the nearest ProseKit component.
18
+ *
19
+ * @public
20
+ */
21
+ export function useEditor<E extends Extension = any>(options?: {
22
+ /**
23
+ * Whether to update the component when the editor is mounted or editor state
24
+ * is updated.
25
+ *
26
+ * @default false
27
+ */
28
+ update?: boolean
29
+ }): Editor<E> {
30
+ const update = options?.update ?? false
31
+
32
+ const editor = useEditorContext<E>()
33
+ if (!editor) {
34
+ throw new ProseKitError(
35
+ 'useEditor must be used within the ProseKit component',
36
+ )
37
+ }
38
+
39
+ const forceUpdate = useForceUpdate()
40
+
41
+ useEffect(() => {
42
+ if (update) {
43
+ const extension = union(
44
+ defineMountHandler(forceUpdate),
45
+ defineUpdateHandler(forceUpdate),
46
+ )
47
+ return editor.use(extension)
48
+ }
49
+ }, [editor, update, forceUpdate])
50
+
51
+ return editor
52
+ }
53
+
54
+ function useForceUpdate() {
55
+ const [, dispatch] = useReducer((x: number) => x + 1, 0)
56
+ return dispatch
57
+ }
@@ -0,0 +1,41 @@
1
+ import type {
2
+ Editor,
3
+ Extension,
4
+ Priority,
5
+ } from '@prosekit/core'
6
+
7
+ import { useEditorContext } from '../contexts/editor-context'
8
+
9
+ import { useEditorExtension } from './use-editor-extension'
10
+ import { usePriorityExtension } from './use-priority-extension'
11
+
12
+ export interface UseExtensionOptions {
13
+ /**
14
+ * The editor to add the extension to. If not provided, it will use the
15
+ * editor from the nearest `ProseKit` component.
16
+ */
17
+ editor?: Editor
18
+
19
+ /**
20
+ * Optional priority to add the extension with.
21
+ */
22
+ priority?: Priority
23
+ }
24
+
25
+ /**
26
+ * Add an extension to the editor.
27
+ */
28
+ export function useExtension(
29
+ /**
30
+ * The extension to add to the editor. If it changes, the previous
31
+ * extension will be removed and the new one (if not null) will be added.
32
+ */
33
+ extension: Extension | null,
34
+ options?: UseExtensionOptions,
35
+ ): void {
36
+ const editorContext = useEditorContext()
37
+ useEditorExtension(
38
+ options?.editor || editorContext,
39
+ usePriorityExtension(extension, options?.priority),
40
+ )
41
+ }
@@ -0,0 +1,15 @@
1
+ import {
2
+ defineKeymap,
3
+ type Keymap,
4
+ } from '@prosekit/core'
5
+ import { useMemo } from 'preact/hooks'
6
+
7
+ import {
8
+ useExtension,
9
+ type UseExtensionOptions,
10
+ } from './use-extension'
11
+
12
+ export function useKeymap(keymap: Keymap, options?: UseExtensionOptions): void {
13
+ const extension = useMemo(() => defineKeymap(keymap), [keymap])
14
+ useExtension(extension, options)
15
+ }
@@ -0,0 +1,18 @@
1
+ import {
2
+ withPriority,
3
+ type Extension,
4
+ type Priority,
5
+ } from '@prosekit/core'
6
+ import { useMemo } from 'preact/hooks'
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export function usePriorityExtension<T extends Extension = Extension>(
12
+ extension: T | null,
13
+ priority?: Priority | null,
14
+ ): T | null {
15
+ return useMemo(() => {
16
+ return extension && priority ? withPriority(extension, priority) : extension
17
+ }, [extension, priority])
18
+ }
@@ -0,0 +1,24 @@
1
+ import { defineUpdateHandler } from '@prosekit/core'
2
+ import type { EditorState } from '@prosekit/pm/state'
3
+ import { useMemo } from 'preact/hooks'
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 = useMemo(
20
+ () => defineUpdateHandler((view) => handler(view.state)),
21
+ [handler],
22
+ )
23
+ useExtension(extension, options)
24
+ }
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ export {
2
+ ProseKit,
3
+ type ProseKitProps,
4
+ } from './components/prosekit'
5
+ export { useDocChange } from './hooks/use-doc-change'
6
+ export { useEditor } from './hooks/use-editor'
7
+ export {
8
+ useExtension,
9
+ type UseExtensionOptions,
10
+ } from './hooks/use-extension'
11
+ export { useKeymap } from './hooks/use-keymap'
12
+ export { useStateUpdate } from './hooks/use-state-update'
13
+ export type {
14
+ PropsWithChildren,
15
+ PropsWithClass,
16
+ } from './types'
package/src/types.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { ComponentChildren } from 'preact'
2
+
3
+ /**
4
+ * @internal
5
+ */
6
+ export type PropsWithClass<P = unknown> = P & {
7
+ class?: string | undefined
8
+ className?: string | undefined
9
+ }
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export type PropsWithChildren<P = unknown> = P & {
15
+ children?: ComponentChildren | undefined
16
+ }