diff --git a/package-lock.json b/package-lock.json index 4554bee452..79343c82ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17940,12 +17940,25 @@ "eslint-config-react-app": "^7.0.0", "jsdom": "^21.1.0", "prettier": "^2.7.1", - "typescript": "^4.5.4", + "typescript": "^5.0.4", "vite": "^4.1.2", "vite-plugin-eslint": "^1.8.1", "vitest": "^0.28.5" } }, + "packages/core/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, "packages/react": { "name": "@blocknote/react", "version": "0.5.1", @@ -19588,7 +19601,7 @@ "remark-parse": "^10.0.1", "remark-rehype": "^10.1.0", "remark-stringify": "^10.0.2", - "typescript": "^4.5.4", + "typescript": "^5.0.4", "unified": "^10.1.2", "uuid": "^8.3.2", "vite": "^4.1.2", @@ -19597,6 +19610,14 @@ "y-prosemirror": "1.0.20", "y-protocols": "1.0.5", "yjs": "13.5.44" + }, + "dependencies": { + "typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true + } } }, "@blocknote/example-editor": { @@ -21873,7 +21894,7 @@ "prosemirror-keymap": "^1.2.0", "prosemirror-markdown": "^1.10.1", "prosemirror-menu": "^1.2.1", - "prosemirror-model": "^1.18.1", + "prosemirror-model": "1.18.3", "prosemirror-schema-basic": "^1.2.0", "prosemirror-schema-list": "^1.2.2", "prosemirror-state": "^1.4.1", @@ -28821,7 +28842,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.0.tgz", "integrity": "sha512-zL0Fxbj3fh71GPNHn5YdYgYGX2aU2XLecZYk2ekEF0oOD259HcXtM+96VjPVi5o3h4sGUdDfEEhGiREXW6U+4A==", "requires": { - "prosemirror-model": "^1.0.0", + "prosemirror-model": "1.18.3", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" } @@ -28842,7 +28863,7 @@ "integrity": "sha512-GKTeE7ZoMsx5uVfc51/ouwMFPq0o8YrZ7Hx4jTF4EeGbXxBveUV8CGv46mSHuBBeXGmvu50guoV2kSnOeZZnUA==", "requires": { "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", + "prosemirror-model": "1.18.3", "prosemirror-state": "^1.0.0", "prosemirror-view": "^1.0.0" } @@ -28881,7 +28902,7 @@ "integrity": "sha512-s7iaTLiX+qO5z8kF2NcMmy2T7mIlxzkS4Sp3vTKSYChPtbMpg6YxFkU0Y06rUg2WtKlvBu7v1bXzlGBkfjUWAA==", "requires": { "markdown-it": "^13.0.1", - "prosemirror-model": "^1.0.0" + "prosemirror-model": "1.18.3" } }, "prosemirror-menu": { @@ -28908,7 +28929,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.1.tgz", "integrity": "sha512-vYBdIHsYKSDIqYmPBC7lnwk9DsKn8PnVqK97pMYP5MLEDFqWIX75JiaJTzndBii4bRuNqhC2UfDOfM3FKhlBHg==", "requires": { - "prosemirror-model": "^1.19.0" + "prosemirror-model": "1.18.3" } }, "prosemirror-schema-list": { @@ -28916,7 +28937,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.2.tgz", "integrity": "sha512-rd0pqSDp86p0MUMKG903g3I9VmElFkQpkZ2iOd3EOVg1vo5Cst51rAsoE+5IPy0LPXq64eGcCYlW1+JPNxOj2w==", "requires": { - "prosemirror-model": "^1.0.0", + "prosemirror-model": "1.18.3", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" } @@ -28926,7 +28947,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.2.tgz", "integrity": "sha512-puuzLD2mz/oTdfgd8msFbe0A42j5eNudKAAPDB0+QJRw8cO1ygjLmhLrg9RvDpf87Dkd6D4t93qdef00KKNacQ==", "requires": { - "prosemirror-model": "^1.0.0", + "prosemirror-model": "1.18.3", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.27.0" } @@ -28937,7 +28958,7 @@ "integrity": "sha512-/9JTeN6s58Zq66HXaxP6uf8PAmc7XXKZFPlOGVtLvxEd6xBP6WtzaJB9wBjiGUzwbdhdMEy7V62yuHqk/3VrnQ==", "requires": { "prosemirror-keymap": "^1.1.2", - "prosemirror-model": "^1.8.1", + "prosemirror-model": "1.18.3", "prosemirror-state": "^1.3.1", "prosemirror-transform": "^1.2.1", "prosemirror-view": "^1.13.3" @@ -28959,7 +28980,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.7.1.tgz", "integrity": "sha512-VteoifAfpt46z0yEt6Fc73A5OID9t/y2QIeR5MgxEwTuitadEunD/V0c9jQW8ziT8pbFM54uTzRLJ/nLuQjMxg==", "requires": { - "prosemirror-model": "^1.0.0" + "prosemirror-model": "1.18.3" } }, "prosemirror-view": { @@ -28967,7 +28988,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.30.1.tgz", "integrity": "sha512-pZUfr7lICJkEY7XwzldAKrkflZDeIvnbfuu2RIS01N5NwJmR/dfZzDzJRzhb3SM2QtT/bM8b4Nnib8X3MGpAhA==", "requires": { - "prosemirror-model": "^1.16.0", + "prosemirror-model": "1.18.3", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } diff --git a/packages/core/package.json b/packages/core/package.json index bedf3760f7..035bb497a3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -91,7 +91,7 @@ "eslint-config-react-app": "^7.0.0", "jsdom": "^21.1.0", "prettier": "^2.7.1", - "typescript": "^4.5.4", + "typescript": "^5.0.4", "vite": "^4.1.2", "vite-plugin-eslint": "^1.8.1", "vitest": "^0.28.5" @@ -110,4 +110,4 @@ "registry": "https://registry.npmjs.org/" }, "gitHead": "37614ab348dcc7faa830a9a88437b37197a2162d" -} +} \ No newline at end of file diff --git a/packages/core/src/api/nodeConversions/nodeConversions.ts b/packages/core/src/api/nodeConversions/nodeConversions.ts index a3092b27b0..3e46296f40 100644 --- a/packages/core/src/api/nodeConversions/nodeConversions.ts +++ b/packages/core/src/api/nodeConversions/nodeConversions.ts @@ -275,14 +275,13 @@ export function nodeToBlock( ); } - // TODO: fix types - const block: any = { + const block = { id, - type: blockInfo.contentType.name as Block["type"], + type: blockInfo.contentType.name, props, content, children, - }; + } satisfies Block; blockCache?.set(node, block); diff --git a/packages/core/src/extensions/Blocks/api/blockTypes.ts b/packages/core/src/extensions/Blocks/api/blockTypes.ts index 194faabd8e..1f703c6eea 100644 --- a/packages/core/src/extensions/Blocks/api/blockTypes.ts +++ b/packages/core/src/extensions/Blocks/api/blockTypes.ts @@ -1,7 +1,7 @@ /** Define the main block types **/ import { Node, NodeConfig } from "@tiptap/core"; -import { InlineContent, PartialInlineContent } from "./inlineContentTypes"; import { BlockNoteEditor } from "../../../BlockNoteEditor"; +import { InlineContent, PartialInlineContent } from "./inlineContentTypes"; // A configuration for a TipTap node, but with stricter type constraints on the // "name" and "group" properties. The "name" property is now always a string @@ -75,10 +75,14 @@ export type BlockConfig< render: ( block: () => Block, editor: BlockNoteEditor - ) => { - dom: HTMLElement; - contentDOM: ContainsInlineContent extends true ? HTMLElement : undefined; - }; + ) => ContainsInlineContent extends true + ? { + dom: HTMLElement; + contentDOM: HTMLElement; + } + : { + dom: HTMLElement; + }; }; // Defines a single block spec, which includes the props that the block has and diff --git a/packages/core/src/extensions/Blocks/api/defaultBlocks.ts b/packages/core/src/extensions/Blocks/api/defaultBlocks.ts index 58825c512e..ab63b134ae 100644 --- a/packages/core/src/extensions/Blocks/api/defaultBlocks.ts +++ b/packages/core/src/extensions/Blocks/api/defaultBlocks.ts @@ -3,7 +3,7 @@ import { BulletListItemBlockContent } from "../nodes/BlockContent/ListItemBlockC import { NumberedListItemBlockContent } from "../nodes/BlockContent/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent"; import { ParagraphBlockContent } from "../nodes/BlockContent/ParagraphBlockContent/ParagraphBlockContent"; import { createBlockSpec } from "./block"; -import { TypesMatch } from "./blockTypes"; +import { BlockSchema, PropSchema, TypesMatch } from "./blockTypes"; export const defaultProps = { backgroundColor: { @@ -16,7 +16,7 @@ export const defaultProps = { default: "left" as const, values: ["left", "center", "right", "justify"] as const, }, -} as const; // TODO: upgrade typescript and use satisfies PropSpec +} as const satisfies PropSchema; export const defaultBlockSchema = { paragraph: { @@ -38,7 +38,7 @@ export const defaultBlockSchema = { propSchema: defaultProps, node: NumberedListItemBlockContent, }, -} as const; +} as const satisfies BlockSchema; const imageProps = { src: { default: "gfr" } } as const; export const onlyImageBlockSchema = { @@ -52,7 +52,7 @@ export const onlyImageBlockSchema = { return { dom: img }; }, }), -} as const; +} as const satisfies BlockSchema; export type DefaultBlockSchema = TypesMatch;