@pilotiq/tiptap 0.1.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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/Block.d.ts +47 -0
  4. package/dist/Block.d.ts.map +1 -0
  5. package/dist/Block.js +56 -0
  6. package/dist/Block.js.map +1 -0
  7. package/dist/MentionProvider.d.ts +97 -0
  8. package/dist/MentionProvider.d.ts.map +1 -0
  9. package/dist/MentionProvider.js +104 -0
  10. package/dist/MentionProvider.js.map +1 -0
  11. package/dist/RichTextField.d.ts +286 -0
  12. package/dist/RichTextField.d.ts.map +1 -0
  13. package/dist/RichTextField.js +369 -0
  14. package/dist/RichTextField.js.map +1 -0
  15. package/dist/extensions/BlockNodeExtension.d.ts +41 -0
  16. package/dist/extensions/BlockNodeExtension.d.ts.map +1 -0
  17. package/dist/extensions/BlockNodeExtension.js +103 -0
  18. package/dist/extensions/BlockNodeExtension.js.map +1 -0
  19. package/dist/extensions/DragHandleExtension.d.ts +19 -0
  20. package/dist/extensions/DragHandleExtension.d.ts.map +1 -0
  21. package/dist/extensions/DragHandleExtension.js +166 -0
  22. package/dist/extensions/DragHandleExtension.js.map +1 -0
  23. package/dist/extensions/GridExtension.d.ts +49 -0
  24. package/dist/extensions/GridExtension.d.ts.map +1 -0
  25. package/dist/extensions/GridExtension.js +105 -0
  26. package/dist/extensions/GridExtension.js.map +1 -0
  27. package/dist/extensions/MentionExtension.d.ts +71 -0
  28. package/dist/extensions/MentionExtension.d.ts.map +1 -0
  29. package/dist/extensions/MentionExtension.js +165 -0
  30. package/dist/extensions/MentionExtension.js.map +1 -0
  31. package/dist/extensions/MergeTagExtension.d.ts +24 -0
  32. package/dist/extensions/MergeTagExtension.d.ts.map +1 -0
  33. package/dist/extensions/MergeTagExtension.js +57 -0
  34. package/dist/extensions/MergeTagExtension.js.map +1 -0
  35. package/dist/extensions/SlashCommandExtension.d.ts +71 -0
  36. package/dist/extensions/SlashCommandExtension.d.ts.map +1 -0
  37. package/dist/extensions/SlashCommandExtension.js +244 -0
  38. package/dist/extensions/SlashCommandExtension.js.map +1 -0
  39. package/dist/extensions/TextSizeMarks.d.ts +33 -0
  40. package/dist/extensions/TextSizeMarks.d.ts.map +1 -0
  41. package/dist/extensions/TextSizeMarks.js +47 -0
  42. package/dist/extensions/TextSizeMarks.js.map +1 -0
  43. package/dist/index.d.ts +8 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +8 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/plugin.d.ts +18 -0
  48. package/dist/plugin.d.ts.map +1 -0
  49. package/dist/plugin.js +25 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/react/BlockNodeView.d.ts +19 -0
  52. package/dist/react/BlockNodeView.d.ts.map +1 -0
  53. package/dist/react/BlockNodeView.js +60 -0
  54. package/dist/react/BlockNodeView.js.map +1 -0
  55. package/dist/react/BlockSidePanel.d.ts +105 -0
  56. package/dist/react/BlockSidePanel.d.ts.map +1 -0
  57. package/dist/react/BlockSidePanel.js +339 -0
  58. package/dist/react/BlockSidePanel.js.map +1 -0
  59. package/dist/react/FloatingToolbar.d.ts +13 -0
  60. package/dist/react/FloatingToolbar.d.ts.map +1 -0
  61. package/dist/react/FloatingToolbar.js +113 -0
  62. package/dist/react/FloatingToolbar.js.map +1 -0
  63. package/dist/react/MentionMenu.d.ts +26 -0
  64. package/dist/react/MentionMenu.d.ts.map +1 -0
  65. package/dist/react/MentionMenu.js +64 -0
  66. package/dist/react/MentionMenu.js.map +1 -0
  67. package/dist/react/Palette.d.ts +26 -0
  68. package/dist/react/Palette.d.ts.map +1 -0
  69. package/dist/react/Palette.js +21 -0
  70. package/dist/react/Palette.js.map +1 -0
  71. package/dist/react/SlashMenu.d.ts +24 -0
  72. package/dist/react/SlashMenu.d.ts.map +1 -0
  73. package/dist/react/SlashMenu.js +74 -0
  74. package/dist/react/SlashMenu.js.map +1 -0
  75. package/dist/react/TableFloatingToolbar.d.ts +7 -0
  76. package/dist/react/TableFloatingToolbar.d.ts.map +1 -0
  77. package/dist/react/TableFloatingToolbar.js +108 -0
  78. package/dist/react/TableFloatingToolbar.js.map +1 -0
  79. package/dist/react/TiptapEditor.d.ts +20 -0
  80. package/dist/react/TiptapEditor.d.ts.map +1 -0
  81. package/dist/react/TiptapEditor.js +398 -0
  82. package/dist/react/TiptapEditor.js.map +1 -0
  83. package/dist/react/Toolbar.d.ts +45 -0
  84. package/dist/react/Toolbar.d.ts.map +1 -0
  85. package/dist/react/Toolbar.js +204 -0
  86. package/dist/react/Toolbar.js.map +1 -0
  87. package/dist/react/toolbarButtons.d.ts +36 -0
  88. package/dist/react/toolbarButtons.d.ts.map +1 -0
  89. package/dist/react/toolbarButtons.js +300 -0
  90. package/dist/react/toolbarButtons.js.map +1 -0
  91. package/dist/register.d.ts +20 -0
  92. package/dist/register.d.ts.map +1 -0
  93. package/dist/register.js +27 -0
  94. package/dist/register.js.map +1 -0
  95. package/dist/render.d.ts +89 -0
  96. package/dist/render.d.ts.map +1 -0
  97. package/dist/render.js +439 -0
  98. package/dist/render.js.map +1 -0
  99. package/package.json +92 -0
  100. package/src/Block.ts +75 -0
  101. package/src/MentionProvider.ts +153 -0
  102. package/src/RichTextField.test.ts +447 -0
  103. package/src/RichTextField.ts +508 -0
  104. package/src/extensions/BlockNodeExtension.ts +134 -0
  105. package/src/extensions/DragHandleExtension.ts +184 -0
  106. package/src/extensions/GridExtension.test.ts +31 -0
  107. package/src/extensions/GridExtension.ts +138 -0
  108. package/src/extensions/MentionExtension.ts +248 -0
  109. package/src/extensions/MergeTagExtension.ts +75 -0
  110. package/src/extensions/SlashCommandExtension.test.ts +147 -0
  111. package/src/extensions/SlashCommandExtension.ts +332 -0
  112. package/src/extensions/TextSizeMarks.ts +73 -0
  113. package/src/index.ts +28 -0
  114. package/src/plugin.test.ts +19 -0
  115. package/src/plugin.ts +26 -0
  116. package/src/react/BlockNodeView.tsx +99 -0
  117. package/src/react/BlockSidePanel.test.ts +412 -0
  118. package/src/react/BlockSidePanel.tsx +451 -0
  119. package/src/react/FloatingToolbar.tsx +304 -0
  120. package/src/react/MentionMenu.tsx +120 -0
  121. package/src/react/Palette.tsx +86 -0
  122. package/src/react/SlashMenu.tsx +129 -0
  123. package/src/react/TableFloatingToolbar.tsx +154 -0
  124. package/src/react/TiptapEditor.tsx +535 -0
  125. package/src/react/Toolbar.tsx +438 -0
  126. package/src/react/toolbarButtons.tsx +579 -0
  127. package/src/register.test.ts +14 -0
  128. package/src/register.ts +27 -0
  129. package/src/render.test.ts +745 -0
  130. package/src/render.ts +480 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "@pilotiq/tiptap",
3
+ "version": "0.1.0",
4
+ "description": "Tiptap rich-text editor adapter for @pilotiq/pilotiq — slash menu, draggable blocks, custom-block API",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/pilotiq-io/pilotiq",
9
+ "directory": "packages/tiptap"
10
+ },
11
+ "homepage": "https://pilotiq.io",
12
+ "type": "module",
13
+ "files": [
14
+ "dist",
15
+ "src"
16
+ ],
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.js",
22
+ "types": "./dist/index.d.ts"
23
+ },
24
+ "./register": {
25
+ "import": "./dist/register.js",
26
+ "types": "./dist/register.d.ts"
27
+ },
28
+ "./render": {
29
+ "import": "./dist/render.js",
30
+ "types": "./dist/render.d.ts"
31
+ }
32
+ },
33
+ "dependencies": {},
34
+ "peerDependencies": {
35
+ "@base-ui/react": "^1",
36
+ "@tiptap/core": "^3",
37
+ "@tiptap/pm": "^3",
38
+ "@tiptap/react": "^3",
39
+ "@tiptap/starter-kit": "^3",
40
+ "@tiptap/extension-link": "^3",
41
+ "@tiptap/extension-placeholder": "^3",
42
+ "@tiptap/extension-underline": "3.22.4",
43
+ "@tiptap/extension-subscript": "3.22.4",
44
+ "@tiptap/extension-superscript": "3.22.4",
45
+ "@tiptap/extension-text-align": "3.22.4",
46
+ "@tiptap/extension-text-style": "3.22.4",
47
+ "@tiptap/extension-color": "3.22.4",
48
+ "@tiptap/extension-highlight": "3.22.4",
49
+ "@tiptap/extension-image": "3.22.4",
50
+ "@tiptap/extension-table": "3.22.4",
51
+ "@tiptap/extension-details": "3.22.4",
52
+ "@tiptap/suggestion": "^3",
53
+ "react": "^18 || ^19",
54
+ "react-dom": "^18 || ^19",
55
+ "@pilotiq/pilotiq": "0.1.0"
56
+ },
57
+ "devDependencies": {
58
+ "@base-ui/react": "^1",
59
+ "@tiptap/core": "^3",
60
+ "@tiptap/pm": "^3",
61
+ "@tiptap/react": "^3",
62
+ "@tiptap/starter-kit": "^3",
63
+ "@tiptap/extension-link": "^3",
64
+ "@tiptap/extension-placeholder": "^3",
65
+ "@tiptap/extension-underline": "3.22.4",
66
+ "@tiptap/extension-subscript": "3.22.4",
67
+ "@tiptap/extension-superscript": "3.22.4",
68
+ "@tiptap/extension-text-align": "3.22.4",
69
+ "@tiptap/extension-text-style": "3.22.4",
70
+ "@tiptap/extension-color": "3.22.4",
71
+ "@tiptap/extension-highlight": "3.22.4",
72
+ "@tiptap/extension-image": "3.22.4",
73
+ "@tiptap/extension-table": "3.22.4",
74
+ "@tiptap/extension-details": "3.22.4",
75
+ "@tiptap/suggestion": "^3",
76
+ "@types/node": "^20",
77
+ "@types/react": "^19",
78
+ "@types/react-dom": "^19",
79
+ "react": "^19",
80
+ "react-dom": "^19",
81
+ "typescript": "^5",
82
+ "@pilotiq/pilotiq": "0.1.0"
83
+ },
84
+ "author": "Suleiman Shahbari",
85
+ "scripts": {
86
+ "build": "tsc -p tsconfig.build.json",
87
+ "dev": "tsc -p tsconfig.build.json --watch",
88
+ "typecheck": "tsc --noEmit",
89
+ "clean": "rm -rf dist",
90
+ "test": "tsc -p tsconfig.test.json && node --test \"dist-test/**/*.test.js\"; EXIT=$?; rm -rf dist-test; exit $EXIT"
91
+ }
92
+ }
package/src/Block.ts ADDED
@@ -0,0 +1,75 @@
1
+ import type { Field } from '@pilotiq/pilotiq'
2
+ import type { FieldMeta } from '@pilotiq/pilotiq'
3
+
4
+ /**
5
+ * JSON-serializable block descriptor sent to the editor renderer.
6
+ */
7
+ export interface BlockMeta {
8
+ name: string
9
+ label: string
10
+ icon: string | undefined
11
+ schema: FieldMeta[]
12
+ }
13
+
14
+ /**
15
+ * Builder for a custom block type that can be inserted into a `RichTextField`
16
+ * via the slash menu and rendered inline as an editable form.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * Block.make('callout')
21
+ * .label('Callout')
22
+ * .icon('💡')
23
+ * .schema([
24
+ * TextField.make('title'),
25
+ * TextareaField.make('content').required(),
26
+ * ])
27
+ * ```
28
+ */
29
+ export class Block {
30
+ private _name: string
31
+ private _label?: string
32
+ private _icon?: string
33
+ private _schema: Field[] = []
34
+
35
+ protected constructor(name: string) {
36
+ this._name = name
37
+ }
38
+
39
+ static make(name: string): Block {
40
+ return new Block(name)
41
+ }
42
+
43
+ /** Display label shown in the slash menu. Defaults to the block name. */
44
+ label(label: string): this {
45
+ this._label = label
46
+ return this
47
+ }
48
+
49
+ /** Emoji or icon string shown in the slash menu. */
50
+ icon(icon: string): this {
51
+ this._icon = icon
52
+ return this
53
+ }
54
+
55
+ /** Fields rendered inline when this block is inserted. */
56
+ schema(fields: Field[]): this {
57
+ this._schema = fields
58
+ return this
59
+ }
60
+
61
+ getName(): string { return this._name }
62
+ getLabel(): string { return this._label ?? this._name }
63
+ getIcon(): string | undefined { return this._icon }
64
+ getSchema(): readonly Field[] { return this._schema }
65
+
66
+ /** @internal */
67
+ toMeta(): BlockMeta {
68
+ return {
69
+ name: this._name,
70
+ label: this._label ?? this._name,
71
+ icon: this._icon,
72
+ schema: this._schema.map((f) => f.toMeta() as FieldMeta),
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Static menu item surfaced by a {@link MentionProvider}. `id` is the wire
3
+ * identifier that survives serialization; `label` is what the editor shows
4
+ * after the trigger char (`@Sleman`). `group` is purely cosmetic — the menu
5
+ * uses it to bucket items under headings.
6
+ */
7
+ export interface MentionItem {
8
+ id: string
9
+ label: string
10
+ group?: string
11
+ }
12
+
13
+ /** Wire-side shape of a {@link MentionProvider}. */
14
+ export interface MentionProviderMeta {
15
+ trigger: string
16
+ items: MentionItem[]
17
+ /** Set when the provider is backed by an `itemsUsing(fn)` resolver — the
18
+ * client fetches items from the field's `mentionsUrl` instead of using
19
+ * the (empty) inlined list. */
20
+ async?: boolean
21
+ }
22
+
23
+ /**
24
+ * Context handed to `MentionProvider.itemsUsing(fn)` resolvers. Mirrors the
25
+ * subset of {@link RenderContext} the route handler can re-derive at request
26
+ * time — `user` from `Pilotiq.user(req=>…)`, `record` for edit-mode forms,
27
+ * and the raw `request` for adapters that need cookie / header access.
28
+ */
29
+ export interface MentionResolverContext {
30
+ user?: unknown
31
+ record?: unknown
32
+ request?: unknown
33
+ }
34
+
35
+ export type MentionItemsResolver = (
36
+ query: string,
37
+ ctx: MentionResolverContext,
38
+ ) => MentionItem[] | Promise<MentionItem[]>
39
+
40
+ /**
41
+ * Builder for a single mention provider — the trigger character (`@` /
42
+ * `#` / …) and the items the popover offers when the user types it.
43
+ *
44
+ * Two shapes:
45
+ * - `MentionProvider.make('@').items([...])` — static items declared at
46
+ * form-build time, inlined into the field meta.
47
+ * - `MentionProvider.make('@').itemsUsing(async (query, ctx) => […])` —
48
+ * async resolver. The client fetches every keystroke; the server runs
49
+ * the user fn and returns the matched items. `items` and `itemsUsing`
50
+ * are mutually exclusive — last call wins, with a warning when both
51
+ * have been set.
52
+ *
53
+ * Read-time label resolution still works through `renderRichTextToHtml(
54
+ * content, { resolveMention })` for cases where the cached label has gone
55
+ * stale.
56
+ *
57
+ * @example Static items
58
+ * ```ts
59
+ * MentionProvider.make('@').items([
60
+ * { id: 'sleman', label: 'Sleman' },
61
+ * { id: 'alex', label: 'Alex' },
62
+ * ])
63
+ * ```
64
+ *
65
+ * @example Async items
66
+ * ```ts
67
+ * MentionProvider.make('@').itemsUsing(async (query) => {
68
+ * const users = await db.users.search(query, { limit: 10 })
69
+ * return users.map(u => ({ id: u.id, label: u.name }))
70
+ * })
71
+ * ```
72
+ */
73
+ export class MentionProvider {
74
+ private _trigger: string
75
+ private _items: MentionItem[] = []
76
+ private _itemsUsing?: MentionItemsResolver
77
+
78
+ protected constructor(trigger: string) {
79
+ if (typeof trigger !== 'string' || trigger.length !== 1) {
80
+ throw new Error(`MentionProvider trigger must be a single character (got ${JSON.stringify(trigger)})`)
81
+ }
82
+ this._trigger = trigger
83
+ }
84
+
85
+ static make(trigger: string): MentionProvider {
86
+ return new MentionProvider(trigger)
87
+ }
88
+
89
+ /** Replace the static item list. Mutually exclusive with `itemsUsing()`. */
90
+ items(items: MentionItem[]): this {
91
+ if (this._itemsUsing !== undefined) {
92
+ console.warn(
93
+ `[pilotiq/tiptap] MentionProvider('${this._trigger}'): items() called after ` +
94
+ `itemsUsing(). The static list now wins; clear itemsUsing first to avoid surprise.`,
95
+ )
96
+ delete this._itemsUsing
97
+ }
98
+ this._items = items
99
+ return this
100
+ }
101
+
102
+ /**
103
+ * Install an async resolver. Called every keystroke with the current
104
+ * query (the text after the trigger char) and a `MentionResolverContext`.
105
+ *
106
+ * Mutually exclusive with `items()` — the last call wins; a warning fires
107
+ * when the previously-set static items are dropped silently.
108
+ */
109
+ itemsUsing(fn: MentionItemsResolver): this {
110
+ if (this._items.length > 0) {
111
+ console.warn(
112
+ `[pilotiq/tiptap] MentionProvider('${this._trigger}'): itemsUsing() called after ` +
113
+ `items(). The async resolver now wins; the static items array will be ignored.`,
114
+ )
115
+ this._items = []
116
+ }
117
+ this._itemsUsing = fn
118
+ return this
119
+ }
120
+
121
+ getTrigger(): string { return this._trigger }
122
+ getItems(): readonly MentionItem[] { return this._items }
123
+ isAsync(): boolean { return this._itemsUsing !== undefined }
124
+
125
+ /**
126
+ * Run the resolver — `itemsUsing(fn)` when set, otherwise the cached
127
+ * static list. Wraps non-array returns in `[]` so a misbehaving
128
+ * resolver doesn't crash the route handler.
129
+ *
130
+ * Synchronous resolvers are awaited the same way as async ones; the
131
+ * single code path keeps the call-site cheap.
132
+ */
133
+ async runResolver(query: string, ctx: MentionResolverContext): Promise<MentionItem[]> {
134
+ if (this._itemsUsing === undefined) {
135
+ // Static path mirrors the client-side filter so the server endpoint
136
+ // would be useful for static providers too — but the client never
137
+ // calls it for them (no `async: true` flag → no fetch).
138
+ return [...this._items]
139
+ }
140
+ const result = await this._itemsUsing(query, ctx)
141
+ return Array.isArray(result) ? result : []
142
+ }
143
+
144
+ /** @internal */
145
+ toMeta(): MentionProviderMeta {
146
+ if (this._itemsUsing !== undefined) {
147
+ // Async providers ship empty `items`; the client checks `async: true`
148
+ // and fetches from the field's `mentionsUrl` per-keystroke instead.
149
+ return { trigger: this._trigger, items: [], async: true }
150
+ }
151
+ return { trigger: this._trigger, items: [...this._items] }
152
+ }
153
+ }