@verdant-web/tiptap 2.0.0 → 2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerdantMedia.js","sourceRoot":"","sources":["../../../src/extensions/VerdantMedia.ts"],"names":[],"mappings":"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"}
@@ -52,4 +52,5 @@ export type TipTapDocumentEntity = ObjectEntity<TipTapFieldInitializer, {
52
52
  export declare function createTipTapFieldSchema(options: {
53
53
  default: TipTapFieldInitializer | null;
54
54
  }): TiptapFieldSchema;
55
+ export declare function createTipTapFileMapSchema(): StorageMapFieldSchema<import("@verdant-web/common").StorageFileFieldSchema>;
55
56
  export {};
@@ -64,4 +64,9 @@ export function createTipTapFieldSchema(options) {
64
64
  });
65
65
  return rootField;
66
66
  }
67
+ export function createTipTapFileMapSchema() {
68
+ return schema.fields.map({
69
+ values: schema.fields.file(),
70
+ });
71
+ }
67
72
  //# sourceMappingURL=fields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,GAQN,MAAM,qBAAqB,CAAC;AAmD7B,MAAM,aAAa,GAAG;IACrB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAEvC;IACA,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACd,8FAA8F,CAC9F,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE;QAClE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9C,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;SAC3B,CAAC;QACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,IAAI;SACd,CAAC;QACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,IAAI;SACd,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,EAAE;YACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;aAC3B,CAAC;YACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC5B,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,IAAI;aACd,CAAC;YACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1B,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,IAAI;aACd,CAAC;SACF;QACD,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACb,CAAC;YACD,uCAAY,aAAa,GAAK,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAG;QAClE,CAAC;QACD,QAAQ,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;KAClC,CAAC,CAAC;IAEH,OAAO,SAAgB,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,GAQN,MAAM,qBAAqB,CAAC;AAmD7B,MAAM,aAAa,GAAG;IACrB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAEvC;IACA,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACd,8FAA8F,CAC9F,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE;QAClE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9C,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;SAC3B,CAAC;QACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,IAAI;SACd,CAAC;QACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,IAAI;SACd,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,EAAE;YACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;aAC3B,CAAC;YACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC5B,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,IAAI;aACd,CAAC;YACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1B,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,IAAI;aACd,CAAC;SACF;QACD,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACb,CAAC;YACD,uCAAY,aAAa,GAAK,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAG;QAClE,CAAC;QACD,QAAQ,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;KAClC,CAAC,CAAC;IAEH,OAAO,SAAgB,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,yBAAyB;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;KAC5B,CAAC,CAAC;AACJ,CAAC"}
@@ -1,2 +1,4 @@
1
+ export * from './extensions/NodeId.js';
2
+ export * from './extensions/Verdant.js';
3
+ export * from './extensions/VerdantMedia.js';
1
4
  export * from './fields.js';
2
- export * from './plugins.js';
package/dist/esm/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ export * from './extensions/NodeId.js';
2
+ export * from './extensions/Verdant.js';
3
+ export * from './extensions/VerdantMedia.js';
1
4
  export * from './fields.js';
2
- export * from './plugins.js';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { UseEditorOptions } from '@tiptap/react';
2
2
  import { AnyEntity } from '@verdant-web/store';
3
- import { VerdantExtensionOptions, type EntitySnapshot, type ValidEntityKey } from './plugins.js';
4
- export declare function useSyncedEditor<Ent extends AnyEntity<any, any, any>, Key extends ValidEntityKey<Ent>>(parent: Ent, fieldName: Key, { editorOptions: extraOptions, editorDependencies, nullDocumentDefault, extensionOptions, }?: {
3
+ import { VerdantExtensionOptions, type EntitySnapshot, type ValidEntityKey } from './extensions/Verdant.js';
4
+ import { VerdantMediaFileMap } from './extensions/VerdantMedia.js';
5
+ export declare function useSyncedEditor<Ent extends AnyEntity<any, any, any>, Key extends ValidEntityKey<Ent>>(parent: Ent, fieldName: Key, { editorOptions: extraOptions, editorDependencies, nullDocumentDefault, extensionOptions, files, }?: {
5
6
  editorOptions?: UseEditorOptions;
6
7
  editorDependencies?: any[];
7
8
  nullDocumentDefault?: EntitySnapshot<Ent, Key>;
8
9
  extensionOptions?: Partial<VerdantExtensionOptions>;
10
+ files?: VerdantMediaFileMap;
9
11
  }): import("@tiptap/react").Editor | null;
package/dist/esm/react.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { useEditor } from '@tiptap/react';
2
2
  import { useRef, useState } from 'react';
3
- import { VerdantExtension, } from './plugins.js';
4
- export function useSyncedEditor(parent, fieldName, { editorOptions: extraOptions, editorDependencies, nullDocumentDefault, extensionOptions, } = {}) {
3
+ import { VerdantExtension, } from './extensions/Verdant.js';
4
+ import { VerdantMediaExtension, } from './extensions/VerdantMedia.js';
5
+ export function useSyncedEditor(parent, fieldName, { editorOptions: extraOptions, editorDependencies, nullDocumentDefault, extensionOptions, files, } = {}) {
5
6
  var _a;
6
7
  const cachedOptions = useRef({
7
8
  nullDocumentDefault,
@@ -13,10 +14,17 @@ export function useSyncedEditor(parent, fieldName, { editorOptions: extraOptions
13
14
  };
14
15
  // create a configured version of the Verdant extension, which handles
15
16
  // the actual syncing of the editor content to the field
16
- const [extension] = useState(() => VerdantExtension.configure(Object.assign({ parent, fieldName: fieldName, nullDocumentDefault }, extensionOptions)));
17
+ const [extensions] = useState(() => [
18
+ VerdantExtension.configure(Object.assign({ parent, fieldName: fieldName, nullDocumentDefault }, extensionOptions)),
19
+ files
20
+ ? VerdantMediaExtension.configure({
21
+ fileMap: files,
22
+ })
23
+ : undefined,
24
+ ].filter((v) => !!v));
17
25
  const editor = useEditor(Object.assign(Object.assign({}, extraOptions), { onContentError(props) {
18
26
  console.error('Content error:', props.error);
19
- }, extensions: [extension, ...((_a = extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.extensions) !== null && _a !== void 0 ? _a : [])] }), editorDependencies);
27
+ }, extensions: [...extensions, ...((_a = extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.extensions) !== null && _a !== void 0 ? _a : [])] }), editorDependencies);
20
28
  return editor;
21
29
  }
22
30
  //# sourceMappingURL=react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EACN,gBAAgB,GAIhB,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,eAAe,CAI9B,MAAW,EACX,SAAc,EACd,EACC,aAAa,EAAE,YAAY,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,MAMb,EAAE;;IAEN,MAAM,aAAa,GAAG,MAAM,CAAC;QAC5B,mBAAmB;QACnB,SAAS;KACT,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,GAAG;QACvB,mBAAmB;QACnB,SAAS;KACT,CAAC;IACF,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACjC,gBAAgB,CAAC,SAAS,iBACzB,MAAM,EACN,SAAS,EAAE,SAA4B,EACvC,mBAAmB,IAChB,gBAAgB,EAClB,CACF,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,iCAEnB,YAAY,KACf,cAAc,CAAC,KAAK;YACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,EACD,UAAU,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,mCAAI,EAAE,CAAC,CAAC,KAE7D,kBAAkB,CAClB,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EACN,gBAAgB,GAIhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,qBAAqB,GAErB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,eAAe,CAI9B,MAAW,EACX,SAAc,EACd,EACC,aAAa,EAAE,YAAY,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,MAOF,EAAE;;IAEN,MAAM,aAAa,GAAG,MAAM,CAAC;QAC5B,mBAAmB;QACnB,SAAS;KACT,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,GAAG;QACvB,mBAAmB;QACnB,SAAS;KACT,CAAC;IACF,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAClC;QACC,gBAAgB,CAAC,SAAS,iBACzB,MAAM,EACN,SAAS,EAAE,SAA4B,EACvC,mBAAmB,IAChB,gBAAgB,EAClB;QACF,KAAK;YACJ,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;gBAChC,OAAO,EAAE,KAAK;aACd,CAAC;YACH,CAAC,CAAC,SAAS;KACZ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,iCAEnB,YAAY,KACf,cAAc,CAAC,KAAK;YACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,EACD,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,mCAAI,EAAE,CAAC,CAAC,KAEjE,kBAAkB,CAClB,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdant-web/tiptap",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "access": "public",
5
5
  "type": "module",
6
6
  "main": "dist/esm/index.js",
@@ -57,12 +57,13 @@
57
57
  "playwright": "1.51.0",
58
58
  "vite": "6.1.1",
59
59
  "@vitejs/plugin-react": "4.3.4",
60
+ "@vitejs/plugin-basic-ssl": "2.0.0",
60
61
  "react-dom": "19.0.0",
61
62
  "@types/react-dom": "19.0.4",
62
- "@verdant-web/react": "42.0.0",
63
63
  "@verdant-web/store": "4.3.0",
64
- "@verdant-web/cli": "4.8.2",
65
- "@verdant-web/server": "3.3.10"
64
+ "@verdant-web/react": "42.0.0",
65
+ "@verdant-web/server": "3.3.10",
66
+ "@verdant-web/cli": "4.8.2"
66
67
  },
67
68
  "scripts": {
68
69
  "test": "vitest",
@@ -4,10 +4,13 @@ import { createMigration, schema } from '@verdant-web/common';
4
4
  import { createHooks } from '@verdant-web/react';
5
5
  import { ClientDescriptor, ClientWithCollections } from '@verdant-web/store';
6
6
  import { userEvent } from '@vitest/browser/context';
7
- import { ReactNode, Suspense } from 'react';
7
+ import { ChangeEvent, ReactNode, Suspense } from 'react';
8
8
  import { afterAll, beforeAll, expect, it } from 'vitest';
9
9
  import { render } from 'vitest-browser-react';
10
- import { createTipTapFieldSchema } from '../fields.js';
10
+ import {
11
+ createTipTapFieldSchema,
12
+ createTipTapFileMapSchema,
13
+ } from '../fields.js';
11
14
  import { useSyncedEditor } from '../react.js';
12
15
 
13
16
  const testSchema = schema({
@@ -25,6 +28,7 @@ const testSchema = schema({
25
28
  content: [],
26
29
  },
27
30
  }),
31
+ files: createTipTapFileMapSchema(),
28
32
  },
29
33
  }),
30
34
  },
@@ -409,7 +413,6 @@ it('should initialize from an existing document', async () => {
409
413
  await expect.element(screen.getByTestId('editor')).toBeVisible();
410
414
 
411
415
  const editor = screen.getByTestId('editor').getByRole('textbox');
412
- await expect.element(editor).toHaveTextContent('');
413
416
  await expect.element(editor).toHaveTextContent('Hello, world!');
414
417
  });
415
418
 
@@ -466,7 +469,6 @@ it('should withstand multiple edits, undo, and redo consistently', async () => {
466
469
  await expect.element(screen.getByTestId('editor')).toBeVisible();
467
470
 
468
471
  const editor = screen.getByTestId('editor').getByRole('textbox');
469
- await expect.element(editor).toHaveTextContent('');
470
472
  await expect.element(editor).toHaveTextContent('Hello, world!');
471
473
 
472
474
  await userEvent.type(editor, '[pageDown]');
@@ -510,3 +512,102 @@ it('should withstand multiple edits, undo, and redo consistently', async () => {
510
512
  .element(editor)
511
513
  .toHaveTextContent(/^Hello, world!Line 2!Line 3!$/);
512
514
  });
515
+
516
+ it('should support media nodes', async () => {
517
+ const testPost = await client.posts.put({});
518
+
519
+ // reset history
520
+ await client.entities.flushAllBatches();
521
+ client.undoHistory.clear();
522
+
523
+ const user = userEvent.setup();
524
+
525
+ const TipTapTest = () => {
526
+ const editor = useSyncedEditor(testPost, 'requiredBody', {
527
+ editorOptions: {
528
+ extensions: [StarterKit.configure({ history: false })],
529
+ },
530
+ files: testPost.get('files'),
531
+ });
532
+
533
+ const insertMedia = async (ev: ChangeEvent<HTMLInputElement>) => {
534
+ const file = ev.target.files?.[0];
535
+ if (!file) return;
536
+ editor?.chain().insertMedia(file).run();
537
+ };
538
+
539
+ return (
540
+ <div>
541
+ <input type="file" onChange={insertMedia} data-testid="insert-media" />
542
+ <div>Text editor:</div>
543
+ <EditorContent
544
+ style={{
545
+ width: 500,
546
+ height: 300,
547
+ }}
548
+ editor={editor}
549
+ id="#editor"
550
+ data-testid="editor"
551
+ />
552
+ </div>
553
+ );
554
+ };
555
+
556
+ // load the image fixture to a file
557
+ const imageRes = await fetch('/cat.jpg', { method: 'GET' });
558
+ const imageBlob = await imageRes.blob();
559
+
560
+ const screen = await renderWithProvider(<TipTapTest />);
561
+ await expect.element(screen.getByTestId('editor')).toBeVisible();
562
+
563
+ const editor = screen.getByTestId('editor').getByRole('textbox');
564
+ await expect.element(editor).toHaveTextContent('');
565
+
566
+ // send keystrokes to the editor
567
+ await user.type(editor, 'Hello, world!');
568
+ await expect.element(editor).toHaveTextContent('Hello, world!');
569
+
570
+ // simulate paste of an image
571
+ // load the image into the clipboard
572
+ await user.upload(
573
+ screen.getByTestId('insert-media'),
574
+ new File([imageBlob], 'cat.jpg', { type: 'image/jpeg' }),
575
+ );
576
+
577
+ // the image should be visible in the editor
578
+ await expect.element(screen.getByRole('img')).toBeVisible();
579
+
580
+ const audioRes = await fetch('/cat.m4a', { method: 'GET' });
581
+ const audioBlob = await audioRes.blob();
582
+ await user.upload(
583
+ screen.getByTestId('insert-media'),
584
+ new File([audioBlob], 'cat.m4a', { type: 'audio/m4a' }),
585
+ );
586
+
587
+ // the audio should be visible in the editor
588
+ const audio = screen.container.querySelector('audio');
589
+ expect(audio).not.toBe(null);
590
+ await expect.element(audio!).toBeVisible();
591
+
592
+ const videoRes = await fetch('/cat.mp4', { method: 'GET' });
593
+ const videoBlob = await videoRes.blob();
594
+ await user.upload(
595
+ screen.getByTestId('insert-media'),
596
+ new File([videoBlob], 'cat.mp4', { type: 'video/mp4' }),
597
+ );
598
+
599
+ // the video should be visible in the editor
600
+ const video = screen.container.querySelector('video');
601
+ expect(video).not.toBe(null);
602
+ await expect.element(video!).toBeVisible();
603
+
604
+ const files = testPost.get('files');
605
+ expect(files.values().length).toBe(3);
606
+
607
+ // delete all media nodes; the files should also be removed from Verdant.
608
+ await user.keyboard('{Delete}{Delete}{Delete}');
609
+ await expect
610
+ .element(screen.getByTestId('editor'))
611
+ .toHaveTextContent('Hello, world!');
612
+ expect(files.values().length).toBe(0);
613
+ });
@@ -0,0 +1,67 @@
1
+ import { Extension } from '@tiptap/core';
2
+
3
+ import { Plugin, PluginKey } from '@tiptap/pm/state';
4
+ import { id } from '@verdant-web/store';
5
+
6
+ const NodeIdPlugin = new Plugin({
7
+ key: new PluginKey('node-ids'),
8
+ appendTransaction: (_, oldState, newState) => {
9
+ // no changes
10
+ if (newState.doc === oldState.doc) return;
11
+ const tr = newState.tr;
12
+ // force replacement of any duplicates, too
13
+ const usedIds = new Set<string>();
14
+ newState.doc.descendants((node, pos) => {
15
+ if (
16
+ !node.isText &&
17
+ (!node.attrs.id || usedIds.has(node.attrs.id)) &&
18
+ node !== newState.doc
19
+ ) {
20
+ const nodeId = id();
21
+ try {
22
+ tr.setNodeMarkup(pos, null, {
23
+ ...node.attrs,
24
+ id: nodeId,
25
+ });
26
+ usedIds.add(nodeId);
27
+ } catch (err) {
28
+ console.error('Error assigning node ID', err);
29
+ }
30
+ } else if (node.attrs?.id) {
31
+ usedIds.add(node.attrs.id);
32
+ }
33
+ });
34
+ return tr;
35
+ },
36
+ });
37
+ export const NodeIdExtension = Extension.create({
38
+ name: 'nodeId',
39
+ addProseMirrorPlugins() {
40
+ return [NodeIdPlugin];
41
+ },
42
+ addOptions() {
43
+ return {
44
+ types: [],
45
+ };
46
+ },
47
+ addGlobalAttributes() {
48
+ return [
49
+ {
50
+ types: this.options.types,
51
+ attributes: {
52
+ id: {
53
+ default: null,
54
+ keepOnSplit: false,
55
+ parseHTML: (element) => element.getAttribute('data-id'),
56
+ renderHTML: (attributes) => {
57
+ if (!attributes.id) return {};
58
+ return {
59
+ 'data-id': attributes.id,
60
+ };
61
+ },
62
+ },
63
+ },
64
+ },
65
+ ];
66
+ },
67
+ });
@@ -1,75 +1,6 @@
1
1
  import { Extension, JSONContent } from '@tiptap/core';
2
- import { Plugin, PluginKey } from '@tiptap/pm/state';
3
2
  import { assignOid, cloneDeep, maybeGetOid } from '@verdant-web/common';
4
- import {
5
- AnyEntity,
6
- getEntityClient,
7
- id,
8
- ObjectEntity,
9
- } from '@verdant-web/store';
10
-
11
- const NodeIdPlugin = new Plugin({
12
- key: new PluginKey('node-ids'),
13
- appendTransaction: (_, oldState, newState) => {
14
- // no changes
15
- if (newState.doc === oldState.doc) return;
16
- const tr = newState.tr;
17
- // force replacement of any duplicates, too
18
- const usedIds = new Set<string>();
19
- newState.doc.descendants((node, pos) => {
20
- if (
21
- !node.isText &&
22
- (!node.attrs.id || usedIds.has(node.attrs.id)) &&
23
- node !== newState.doc
24
- ) {
25
- const nodeId = id();
26
- try {
27
- tr.setNodeMarkup(pos, null, {
28
- ...node.attrs,
29
- id: nodeId,
30
- });
31
- usedIds.add(nodeId);
32
- } catch (err) {
33
- console.error('Error assigning node ID', err);
34
- }
35
- } else if (node.attrs?.id) {
36
- usedIds.add(node.attrs.id);
37
- }
38
- });
39
- return tr;
40
- },
41
- });
42
- export const NodeIdExtension = Extension.create({
43
- name: 'nodeId',
44
- addProseMirrorPlugins() {
45
- return [NodeIdPlugin];
46
- },
47
- addOptions() {
48
- return {
49
- types: [],
50
- };
51
- },
52
- addGlobalAttributes() {
53
- return [
54
- {
55
- types: this.options.types,
56
- attributes: {
57
- id: {
58
- default: null,
59
- keepOnSplit: false,
60
- parseHTML: (element) => element.getAttribute('data-id'),
61
- renderHTML: (attributes) => {
62
- if (!attributes.id) return {};
63
- return {
64
- 'data-id': attributes.id,
65
- };
66
- },
67
- },
68
- },
69
- },
70
- ];
71
- },
72
- });
3
+ import { AnyEntity, getEntityClient, ObjectEntity } from '@verdant-web/store';
73
4
 
74
5
  export const verdantIdAttribute = 'data-verdant-oid';
75
6
  export interface VerdantExtensionOptions {
@@ -327,13 +258,3 @@ function addOidAttrs(doc: JSONContent) {
327
258
  doc.content.forEach(addOidAttrs);
328
259
  }
329
260
  }
330
-
331
- function printAllOids(obj: any) {
332
- if (obj && typeof obj === 'object') {
333
- const oid = maybeGetOid(obj);
334
- if (oid) console.log(oid, obj);
335
- for (const key in obj) {
336
- printAllOids(obj[key]);
337
- }
338
- }
339
- }