From fb87646e8643e1d0547134cea9d1f57912f06a92 Mon Sep 17 00:00:00 2001 From: Joe Anderson Date: Sat, 7 Jun 2025 00:42:11 +0100 Subject: [PATCH] Experimental chunking optimisation and other performance improvements (#5871) * Chunking optimization * Fix comments * Remove redundant `insertionsMinusRemovals` variable * Fix typo * Unblock Netlify builds * Add placeholder * Upgrade Playwright (fixes crash when debugging) * Fix `autoFocus` not working * Fix huge document test * Fix the previous issue without changing `useSlateSelector` * Retry `test:integration` * Re-implement `useSlateWithV` * Retry `test:integration` * Update docs * Update JS examples to match TS examples * Upload Playwright's `test-results` directory in CI to access traces * Change trace mode to `retain-on-first-failure` * Fix: `Locator.fill(text)` is flaky on Editable * Add changesets * Increase minimum `slate-dom` version * Update changeset * Update 09-performance.md * Deprecate the `useSlateWithV` hook * Fix errors and improve clarity in 09-performance.md * Minimum `slate-dom` version is now 0.116 * Update `yarn.lock` --- .changeset/chatty-flies-pay.md | 5 + .changeset/silly-crabs-sort.md | 5 + .changeset/tiny-scissors-yell.md | 14 + .github/workflows/ci.yml | 8 + .gitignore | 1 + .yarn/sdks/integrations.yml | 1 + docs/Summary.md | 3 +- docs/concepts/09-rendering.md | 4 + docs/images/performance/firefox-inp.png | Bin 0 -> 647796 bytes docs/libraries/slate-react/hooks.md | 36 +- ...urce.md => 08-using-the-bundled-source.md} | 0 docs/walkthroughs/09-performance.md | 118 +++ jest.config.js | 10 + package.json | 2 +- packages/slate-dom/src/index.ts | 1 + packages/slate-dom/src/utils/range-list.ts | 89 +- packages/slate-react/package.json | 3 +- .../src/chunking/children-helper.ts | 122 +++ .../src/chunking/chunk-tree-helper.ts | 574 +++++++++++ .../src/chunking/get-chunk-tree-for-node.ts | 47 + packages/slate-react/src/chunking/index.ts | 2 + .../src/chunking/reconcile-children.ts | 127 +++ packages/slate-react/src/chunking/types.ts | 52 + .../slate-react/src/components/chunk-tree.tsx | 65 ++ .../slate-react/src/components/editable.tsx | 29 +- .../slate-react/src/components/element.tsx | 32 +- packages/slate-react/src/components/leaf.tsx | 10 +- packages/slate-react/src/components/slate.tsx | 27 +- packages/slate-react/src/components/text.tsx | 9 +- .../slate-react/src/hooks/use-children.tsx | 194 ++-- .../slate-react/src/hooks/use-decorate.ts | 18 - .../slate-react/src/hooks/use-decorations.ts | 81 ++ packages/slate-react/src/hooks/use-element.ts | 25 + .../src/hooks/use-generic-selector.tsx | 92 ++ .../slate-react/src/hooks/use-selected.ts | 38 +- .../src/hooks/use-slate-selector.tsx | 206 ++-- packages/slate-react/src/hooks/use-slate.tsx | 79 +- packages/slate-react/src/index.ts | 2 + .../slate-react/src/plugin/react-editor.ts | 10 +- packages/slate-react/src/plugin/with-react.ts | 26 +- packages/slate-react/test/chunking.spec.ts | 953 ++++++++++++++++++ .../slate-react/test/decorations.spec.tsx | 672 ++++++++++++ .../slate-react/test/react-editor.spec.tsx | 4 +- packages/slate-react/test/tsconfig.json | 3 + .../slate-react/test/use-selected.spec.tsx | 183 ++++ ...r.test.tsx => use-slate-selector.spec.tsx} | 15 +- packages/slate-react/test/use-slate.spec.tsx | 59 ++ packages/slate/src/interfaces/point.ts | 119 +-- packages/slate/src/interfaces/range.ts | 75 +- .../src/interfaces/transforms/general.ts | 573 ++++++----- playwright.config.ts | 4 +- .../examples/code-highlighting.test.ts | 3 +- .../examples/huge-document.test.ts | 13 +- .../integration/examples/shadow-dom.test.ts | 4 +- site/examples/js/code-highlighting.jsx | 66 +- site/examples/js/embeds.jsx | 1 + site/examples/js/huge-document.jsx | 438 +++++++- site/examples/js/search-highlighting.jsx | 2 +- site/examples/ts/code-highlighting.tsx | 91 +- site/examples/ts/embeds.tsx | 1 + site/examples/ts/huge-document.tsx | 528 +++++++++- site/examples/ts/search-highlighting.tsx | 2 +- site/pages/examples/[example].tsx | 7 +- site/public/index.css | 41 +- yarn.lock | 86 +- 65 files changed, 5234 insertions(+), 876 deletions(-) create mode 100644 .changeset/chatty-flies-pay.md create mode 100644 .changeset/silly-crabs-sort.md create mode 100644 .changeset/tiny-scissors-yell.md create mode 100644 docs/images/performance/firefox-inp.png rename docs/walkthroughs/{xx-using-the-bundled-source.md => 08-using-the-bundled-source.md} (100%) create mode 100644 docs/walkthroughs/09-performance.md create mode 100644 packages/slate-react/src/chunking/children-helper.ts create mode 100644 packages/slate-react/src/chunking/chunk-tree-helper.ts create mode 100644 packages/slate-react/src/chunking/get-chunk-tree-for-node.ts create mode 100644 packages/slate-react/src/chunking/index.ts create mode 100644 packages/slate-react/src/chunking/reconcile-children.ts create mode 100644 packages/slate-react/src/chunking/types.ts create mode 100644 packages/slate-react/src/components/chunk-tree.tsx delete mode 100644 packages/slate-react/src/hooks/use-decorate.ts create mode 100644 packages/slate-react/src/hooks/use-decorations.ts create mode 100644 packages/slate-react/src/hooks/use-element.ts create mode 100644 packages/slate-react/src/hooks/use-generic-selector.tsx create mode 100644 packages/slate-react/test/chunking.spec.ts create mode 100644 packages/slate-react/test/decorations.spec.tsx create mode 100644 packages/slate-react/test/use-selected.spec.tsx rename packages/slate-react/test/{use-slate-selector.test.tsx => use-slate-selector.spec.tsx} (84%) create mode 100644 packages/slate-react/test/use-slate.spec.tsx diff --git a/.changeset/chatty-flies-pay.md b/.changeset/chatty-flies-pay.md new file mode 100644 index 000000000..8651323a3 --- /dev/null +++ b/.changeset/chatty-flies-pay.md @@ -0,0 +1,5 @@ +--- +'slate-dom': minor +--- + +- Add `splitDecorationsByChild` to split an array of decorated ranges by child index. diff --git a/.changeset/silly-crabs-sort.md b/.changeset/silly-crabs-sort.md new file mode 100644 index 000000000..5716d7e20 --- /dev/null +++ b/.changeset/silly-crabs-sort.md @@ -0,0 +1,5 @@ +--- +'slate': patch +--- + +- PERF: Use pure JS instead of Immer for applying operations and transforming points and ranges. Immer is now used only for producing fragments. diff --git a/.changeset/tiny-scissors-yell.md b/.changeset/tiny-scissors-yell.md new file mode 100644 index 000000000..4fb814622 --- /dev/null +++ b/.changeset/tiny-scissors-yell.md @@ -0,0 +1,14 @@ +--- +'slate-react': minor +--- + +- Implement experimental chunking optimization (disabled by default, see https://docs.slatejs.org/walkthroughs/09-performance). +- Add `useElement` and `useElementIf` hooks to get the current element. +- **BREAKING CHANGE:** Decorations are no longer recomputed when a node's parent re-renders, only when the node itself re-renders or when the `decorate` function is changed. + - Ensure that `decorate` is a pure function of the node passed into it. Depending on the node's parent may result in decorations not being recomputed when you expect them to be. + - If this change impacts you, consider changing your `decorate` function to work on the node's parent instead. + - For example, if your `decorate` function decorates a `code-line` based on the parent `code-block`'s language, decorate the `code-block` instead. + - This is unlikely to result in any performance detriment, since in previous versions of `slate-react`, the decorations of all siblings were recomputed when one sibling was modified. +- Increase minimum `slate-dom` version to `0.116.0`. +- Deprecate the `useSlateWithV` hook +- PERF: Use subscribable pattern for `useSlate`, `useSelected` and decorations to reduce re-renders. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d20da8c15..e1acc6ddc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,3 +34,11 @@ jobs: run: yarn && yarn build && yarn ${{ matrix.command }} env: CI: true + + - name: Upload Playwright test results + if: ${{ !cancelled() && matrix.command == 'test:integration' }} + uses: actions/upload-artifact@v4 + with: + name: test-results + path: test-results + retention-days: 30 diff --git a/.gitignore b/.gitignore index c408a4335..a885b8a8f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ packages/*/yarn.lock site/out/ tmp/ test-results/ +coverage .DS_Store # Recommendation from https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored (not using Zero-installs) diff --git a/.yarn/sdks/integrations.yml b/.yarn/sdks/integrations.yml index aa9d0d0ad..401be9985 100644 --- a/.yarn/sdks/integrations.yml +++ b/.yarn/sdks/integrations.yml @@ -2,4 +2,5 @@ # Manual changes might be lost! integrations: + - vim - vscode diff --git a/docs/Summary.md b/docs/Summary.md index 2b8b2faa1..f6e312487 100644 --- a/docs/Summary.md +++ b/docs/Summary.md @@ -11,7 +11,8 @@ - [Executing Commands](walkthroughs/05-executing-commands.md) - [Saving to a Database](walkthroughs/06-saving-to-a-database.md) - [Enabling Collaborative Editing](walkthroughs/07-enabling-collaborative-editing.md) -- [Using the Bundled Source](walkthroughs/xx-using-the-bundled-source.md) +- [Using the Bundled Source](walkthroughs/08-using-the-bundled-source.md) +- [Improving Performance](walkthroughs/09-performance.md) ## Concepts diff --git a/docs/concepts/09-rendering.md b/docs/concepts/09-rendering.md index 15c790fbc..b2bf404a2 100644 --- a/docs/concepts/09-rendering.md +++ b/docs/concepts/09-rendering.md @@ -192,3 +192,7 @@ It is also possible to apply custom styles with a stylesheet and `className`. Ho - Provide your styles using the `style` prop instead of a stylesheet, which overrides the default inline styles. - Pass the `disableDefaultStyles` prop to the `` component. - Use `!important` in your stylesheet declarations to make them override the inline styles. + +## Performance + +See [Improving Performance](../walkthroughs/09-performance.md) for ways to improve the rendering performance of the editor. diff --git a/docs/images/performance/firefox-inp.png b/docs/images/performance/firefox-inp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcbc031e966334f921c487d487681c8b7ac2ad9 GIT binary patch literal 647796 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

aG?@nc1ndo0^52C3_zKVPInq>u@0B%+*0^Y0W^ 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

F6M{{XT92bMTd{hBr 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�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

v6bT=F-90 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 G5{6NE}jKT4m8JQ34XR(aRY{- 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%0A*M8by#&%US1xsT_pN;RR~%oq(SxY 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%0DDZX6| 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 BOpE{k literal 0 HcmV?d00001 diff --git a/docs/libraries/slate-react/hooks.md b/docs/libraries/slate-react/hooks.md index 2ef22d140..eadef7f41 100644 --- a/docs/libraries/slate-react/hooks.md +++ b/docs/libraries/slate-react/hooks.md @@ -1,19 +1,19 @@ # Slate React Hooks -- [Check hooks](hooks.md#check-hooks) -- [Editor hooks](hooks.md#editor-hooks) -- [Selection hooks](hooks.md#selection-hooks) - -### Check hooks - -React hooks for Slate editors - #### `useComposing(): boolean` Get the current `composing` state of the editor. It deals with `compositionstart`, `compositionupdate`, `compositionend` events. Composition events are triggered by typing (composing) with a language that uses a composition character (e.g. Chinese, Japanese, Korean, etc.) [example](https://en.wikipedia.org/wiki/Input_method#/media/File:Typing_%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4_in_Dubeolsik_keyboard_layout.gif). +#### `useElement(): Element` + +Get the current element object. Re-renders whenever the element or any of its descendants changes. + +#### `useElementIf(): Element | null` + +The same as `useElement()` but returns `null` instead of throwing an error when not inside an element. + #### `useFocused(): boolean` Get the current `focused` state of the editor. @@ -24,35 +24,27 @@ Get the current `readOnly` state of the editor. #### `useSelected(): boolean` -Get the current `selected` state of an element. - -### Editor hooks +Get the current `selected` state of an element. An element is selected if `editor.selection` exists and overlaps any part of the element. #### `useSlate(): Editor` -Get the current editor object from the React context. Re-renders the context whenever changes occur in the editor. - -#### `useSlateWithV(): { editor: Editor, v: number }` - -The same as `useSlate()` but includes a version counter which you can use to prevent re-renders. +Get the current editor object. Re-renders whenever changes occur in the editor. #### `useSlateStatic(): Editor` Get the current editor object from the React context. A version of useSlate that does not re-render the context. Previously called `useEditor`. -### Selection hooks - #### `useSlateSelection(): (BaseRange & { placeholder?: string | undefined; onPlaceholderResize?: ((node: HTMLElement | null) => void) | undefined }) | null` -Get the current editor selection from the React context. Only re-renders when the selection changes. +Get the current editor selection. Only re-renders when the selection changes. #### `useSlateSelector(selector: (editor: Editor) => T, equalityFn?: (a: T, b: T) => boolean): T` -Similar to `useSlateSelection` but uses redux style selectors to prevent rerendering on every keystroke. +Use redux style selectors to prevent re-rendering on every keystroke. -Returns a subset of the full selection value based on the `selector`. +Bear in mind re-rendering can only prevented if the returned value is a value type or for reference types (e.g. objects and arrays) add a custom equality function. -Bear in mind rerendering can only prevented if the returned value is a value type or for reference types (e.g. objects and arrays) add a custom equality function for the `equalityFn` argument. +If `selector` is memoized using `useCallback`, then it will only be called when it or the editor state changes. Otherwise, `selector` will be called every time the component renders. Example: diff --git a/docs/walkthroughs/xx-using-the-bundled-source.md b/docs/walkthroughs/08-using-the-bundled-source.md similarity index 100% rename from docs/walkthroughs/xx-using-the-bundled-source.md rename to docs/walkthroughs/08-using-the-bundled-source.md diff --git a/docs/walkthroughs/09-performance.md b/docs/walkthroughs/09-performance.md new file mode 100644 index 000000000..194398873 --- /dev/null +++ b/docs/walkthroughs/09-performance.md @@ -0,0 +1,118 @@ +# Improving Performance + +When building a text editor, it's important for user interactions to take place without any noticeable delay. For small and moderately sized documents (less than 1000 blocks), you probably don't need to worry about performance. If your editor needs to support very large documents (10,000+ or 100,000+ blocks), follow this guide to ensure the editor stays responsive. + +The [Huge Document](https://slatejs.org/examples/huge-document) example contains an interactive playground where you can explore the effect of various factors on the performance of a very simple Slate editor. + +The type of performance this guide is mostly concerned with is the **Interaction to Next Paint** (INP) while typing. If the INP is below roughly 100ms, typing should feel very responsive. The editor will still be usable when the INP duration is longer, but it will feel increasingly sluggish and unpleasant to use. + +Other performance metrics to be aware of (but which are not currently covered in this guide) are **time to first paint** and the INP when performing non-typing operations (such as selecting all content or pasting). + +INP is easiest to measure in Chrome using the [Performance panel](https://developer.chrome.com/docs/devtools/performance) in DevTools, but there are ways to determine it in Firefox and Safari too. For example, in Firefox, you can use the [Firefox Profiler](https://profiler.firefox.com/) to see a timeline of events. + +![Screenshot of the Stack Chart tab of the Firefox Profiler, annotated to show a breakdown of time spent in core Slate, React, and painting the DOM.](../images/performance/firefox-inp.png) + +There are three main areas that can be optimized: + +- [Slate core](#optimizing-slate-core) +- [React](#optimizing-react) +- [DOM painting](#optimizing-dom-painting) + +Before you start optimizing, make sure you know which of these areas is most responsible for any slowness you're seeing. The best way of doing this is to use your browser's profiler (see the example for Firefox above), but you can also use these heuristics to guess which area is most at fault: + +1. If performance is much better in Firefox than in Chrome or Safari, DOM painting is usually the problem (tested May 2025). +2. If disabling any custom normalization logic improves performance, the normalization logic is the problem. +3. Otherwise, it's likely to be React. + +## Optimizing Slate Core + +Usually, if the core Slate logic is causing a noticeable delay, it's because of [normalizing](../concepts/11-normalizing.md). If custom normalization logic is causing slowness in your app, consider whether the logic can be made more efficient. + +Understand that `normalizeNode` is called once for every modified node and every ancestor of a modified node. As a result, `normalizeNode` is called for the editor node whenever anything changes in the editor, but for other nodes it is called much less frequently. + +Make sure you only normalize the node passed into `normalizeNode` and (occasionally) its direct children, not its children's descendants. Normalization logic should only be applied directly to the editor node when absolutely necessary, such when enforcing that the last block in the document is a paragraph. + +## Optimizing React + +### Reduce Renders + +The `renderElement` prop and any React component it returns will re-render every time the element or any of its descendants changes. This is unavoidable. However, sometimes custom logic can cause React components to re-render more often than this, which can have a detrimental effect on performance. + +Ensure that function props such as `renderElement`, `renderLeaf`, `renderChunk` and `decorate` do not change on every render. Either they should be defined at the top level of the file (not inside a component or hook), or they should be wrapped inside a `useCallback` and all dependencies should be properly memoized. + +If unmodified elements are being re-rendered, check to see if they are subscribing to any contexts or hooks that are causing unnecessary re-renders. You can also apply these techniques to any toolbars or other non-element React components that may be re-rendering in response to changes in the editor. + +The `useSlate`, `useSlateSelection`, `useSlateSelector`, `useSelected` and `useFocused` hooks cause React components to re-render in various circumstances. If you're using `useSlate`, consider if you can use `useSlateStatic` (which does not cause re-renders) instead. If you're using `useSlateSelection`, consider using `editor.selection`. If you only care about some value derived from the editor (such as whether a given mark is active), use `useSlateSelector` to only re-render when this value changes. + +If your components depend on custom React contexts containing non-primitive values (such as objects or arrays), ensure that these values are properly memoized so that components only re-render when these values change. In some circumstances, you may instead want to consider passing a ref object or an unchanging getter function to retrieve the latest value. + +```tsx +// Provider +const myDataRef = useRef(myData) +myDataRef.current = myData +return {children} + +// Consumer +// Does not re-render when `myData` changes +const myDataRef = useContext(MyContext) + +const onClick = () => { + console.log(myDataRef.current) +} +``` + +### Enable Chunking (experimental) + +Chunking is an internal optimization used by `slate-react`, and must be explicitly enabled. It works by splitting a node's children into nested "chunks", each of which is a separately memoized React component. This reduces the amount of work React needs to do when processing changes to the JSX, resulting in a 10x speed-up in ideal circumstances. + +To enable chunking, you need to implement `editor.getChunkSize(node: Ancestor) => number | null`, which controls the number of nodes per lowest-level chunk for a given parent node. In most circumstances, setting the chunk size to 1000 for the editor and `null` for all other ancestors works well. + +```typescript +editor.getChunkSize = node => (Editor.isEditor(node) ? 1000 : null) +``` + +Note that chunking can only be enabled for nodes whose children are all block elements. Attempting to enable chunking for leaf blocks (blocks containing inline nodes) will have no effect. + +By default, chunking has no effect on the DOM. You can override this by passing a `renderChunk` prop to `Editable`. + +## Optimizing DOM Painting + +In Chrome and Safari, painting large numbers of DOM nodes can be extremely slow, over 100x slower than the core Slate logic and React rendering combined in some cases. In Firefox, the impact of painting on performance is much less significant. + +The best way of speeding up painting large documents is to use the [`content-visibility`](https://developer.mozilla.org/en-US/docs/Web/CSS/content-visibility) CSS property. When set to `auto`, this property instructs browsers not to paint content that is off-screen. However, it also comes with a performance overhead proportional to the number of DOM nodes it is applied to, which is especially bad in Safari. When rendering large documents in Safari, applying `content-visibility: auto` to each Slate element individually is often slower than not using it at all. + +The recommended solution is to enable [chunking](#enable-chunking-experimental) and apply `content-visibility: auto` on each lowest-level chunk by passing a `renderChunk` prop to `Editable`. + +```tsx +const renderChunk = ({ attributes, lowest, children }: RenderChunkProps) => ( +

+) +``` + +Note that this will modify the DOM structure of your editor, which may have adverse effects on its appearance. During development, it is recommended to set the chunk size to a small number such as 3 so that styling issues caused by nested chunks are easier to detect. + +If you previously had a CSS rule such as this to apply spacing between top-level blocks: + +```css +[data-slate-editor] > * + * { + margin-top: 1em; +} +``` + +It should be changed to this: + +```css +[data-slate-editor] > * + *, +[data-slate-chunk] > * + * { + margin-top: 1em; +} +``` + +Also bear in mind this warning about `content-visibility: auto` from MDN: + +> Since styles for off-screen content are not rendered, elements intentionally hidden with `display: none` or `visibility: hidden` _will still appear in the accessibility tree_. If you don't want an element to appear in the accessibility tree, use `aria-hidden="true"`. diff --git a/jest.config.js b/jest.config.js index d04c9ff3c..b62954178 100644 --- a/jest.config.js +++ b/jest.config.js @@ -10,6 +10,16 @@ const config = { ], }, testEnvironment: 'jsdom', + collectCoverage: true, + collectCoverageFrom: ['./packages/slate-react/src/chunking/*'], + coverageThreshold: { + './packages/slate-react/src/chunking/*': { + branches: 100, + functions: 100, + lines: 100, + statements: 100, + }, + }, } module.exports = config diff --git a/package.json b/package.json index 8580a62c2..b68429014 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@changesets/cli": "^2.26.2", "@emotion/css": "^11.11.2", "@faker-js/faker": "^8.2.0", - "@playwright/test": "^1.39.0", + "@playwright/test": "^1.52.0", "@types/is-hotkey": "^0.1.10", "@types/is-url": "^1.2.32", "@types/jest": "29.5.6", diff --git a/packages/slate-dom/src/index.ts b/packages/slate-dom/src/index.ts index 4742d7bc4..e5c4a4640 100644 --- a/packages/slate-dom/src/index.ts +++ b/packages/slate-dom/src/index.ts @@ -59,6 +59,7 @@ export { Key } from './utils/key' export { isElementDecorationsEqual, isTextDecorationsEqual, + splitDecorationsByChild, } from './utils/range-list' export { diff --git a/packages/slate-dom/src/utils/range-list.ts b/packages/slate-dom/src/utils/range-list.ts index 1c0b5e19c..8201fc1b4 100644 --- a/packages/slate-dom/src/utils/range-list.ts +++ b/packages/slate-dom/src/utils/range-list.ts @@ -1,5 +1,6 @@ -import { Range } from 'slate' +import { Ancestor, DecoratedRange, Editor, Range } from 'slate' import { PLACEHOLDER_SYMBOL } from './weak-maps' +import { DOMEditor } from '../plugin/dom-editor' export const shallowCompare = ( obj1: { [key: string]: unknown }, @@ -29,9 +30,17 @@ const isDecorationFlagsEqual = (range: Range, other: Range) => { */ export const isElementDecorationsEqual = ( - list: Range[], - another: Range[] + list: Range[] | null, + another: Range[] | null ): boolean => { + if (list === another) { + return true + } + + if (!list || !another) { + return false + } + if (list.length !== another.length) { return false } @@ -57,9 +66,17 @@ export const isElementDecorationsEqual = ( */ export const isTextDecorationsEqual = ( - list: Range[], - another: Range[] + list: Range[] | null, + another: Range[] | null ): boolean => { + if (list === another) { + return true + } + + if (!list || !another) { + return false + } + if (list.length !== another.length) { return false } @@ -80,3 +97,65 @@ export const isTextDecorationsEqual = ( return true } + +/** + * Split and group decorations by each child of a node. + * + * @returns An array with length equal to that of `node.children`. Each index + * corresponds to a child of `node`, and the value is an array of decorations + * for that child. + */ + +export const splitDecorationsByChild = ( + editor: Editor, + node: Ancestor, + decorations: DecoratedRange[] +): DecoratedRange[][] => { + const decorationsByChild = Array.from( + node.children, + (): DecoratedRange[] => [] + ) + + if (decorations.length === 0) { + return decorationsByChild + } + + const path = DOMEditor.findPath(editor, node) + const level = path.length + const ancestorRange = Editor.range(editor, path) + + const cachedChildRanges = new Array(node.children.length) + + const getChildRange = (index: number) => { + const cachedRange = cachedChildRanges[index] + if (cachedRange) return cachedRange + const childRange = Editor.range(editor, [...path, index]) + cachedChildRanges[index] = childRange + return childRange + } + + for (const decoration of decorations) { + const decorationRange = Range.intersection(ancestorRange, decoration) + if (!decorationRange) continue + + const [startPoint, endPoint] = Range.edges(decorationRange) + const startIndex = startPoint.path[level] + const endIndex = endPoint.path[level] + + for (let i = startIndex; i <= endIndex; i++) { + const ds = decorationsByChild[i] + if (!ds) continue + + const childRange = getChildRange(i) + const childDecorationRange = Range.intersection(childRange, decoration) + if (!childDecorationRange) continue + + ds.push({ + ...decoration, + ...childDecorationRange, + }) + } + } + + return decorationsByChild +} diff --git a/packages/slate-react/package.json b/packages/slate-react/package.json index 9f38c7224..2323760de 100644 --- a/packages/slate-react/package.json +++ b/packages/slate-react/package.json @@ -23,6 +23,7 @@ }, "devDependencies": { "@babel/runtime": "^7.23.2", + "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^14.0.0", "@types/is-hotkey": "^0.1.8", "@types/jest": "29.5.6", @@ -42,7 +43,7 @@ "react": ">=18.2.0", "react-dom": ">=18.2.0", "slate": ">=0.114.0", - "slate-dom": ">=0.110.2" + "slate-dom": ">=0.116.0" }, "umdGlobals": { "react": "React", diff --git a/packages/slate-react/src/chunking/children-helper.ts b/packages/slate-react/src/chunking/children-helper.ts new file mode 100644 index 000000000..aa3bb6116 --- /dev/null +++ b/packages/slate-react/src/chunking/children-helper.ts @@ -0,0 +1,122 @@ +import { Editor, Descendant } from 'slate' +import { Key } from 'slate-dom' +import { ChunkLeaf } from './types' +import { ReactEditor } from '../plugin/react-editor' + +/** + * Traverse an array of children, providing helpers useful for reconciling the + * children array with a chunk tree + */ +export class ChildrenHelper { + private editor: Editor + private children: Descendant[] + + /** + * Sparse array of Slate node keys, each index corresponding to an index in + * the children array + * + * Fetching the key for a Slate node is expensive, so we cache them here. + */ + private cachedKeys: Array + + /** + * The index of the next node to be read in the children array + */ + public pointerIndex: number + + constructor(editor: Editor, children: Descendant[]) { + this.editor = editor + this.children = children + this.cachedKeys = new Array(children.length) + this.pointerIndex = 0 + } + + /** + * Read a given number of nodes, advancing the pointer by that amount + */ + public read(n: number): Descendant[] { + // PERF: If only one child was requested (the most common case), use array + // indexing instead of slice + if (n === 1) { + return [this.children[this.pointerIndex++]] + } + + const slicedChildren = this.remaining(n) + this.pointerIndex += n + + return slicedChildren + } + + /** + * Get the remaining children without advancing the pointer + * + * @param [maxChildren] Limit the number of children returned. + */ + public remaining(maxChildren?: number): Descendant[] { + if (maxChildren === undefined) { + return this.children.slice(this.pointerIndex) + } + + return this.children.slice( + this.pointerIndex, + this.pointerIndex + maxChildren + ) + } + + /** + * Whether all children have been read + */ + public get reachedEnd() { + return this.pointerIndex >= this.children.length + } + + /** + * Determine whether a node with a given key appears in the unread part of the + * children array, and return its index relative to the current pointer if so + * + * Searching for the node object itself using indexOf is most efficient, but + * will fail to locate nodes that have been modified. In this case, nodes + * should be identified by their keys instead. + * + * Searching an array of keys using indexOf is very inefficient since fetching + * the keys for all children in advance is very slow. Insead, if the node + * search fails to return a value, fetch the keys of each remaining child one + * by one and compare it to the known key. + */ + public lookAhead(node: Descendant, key: Key) { + const elementResult = this.children.indexOf(node, this.pointerIndex) + if (elementResult > -1) return elementResult - this.pointerIndex + + for (let i = this.pointerIndex; i < this.children.length; i++) { + const candidateNode = this.children[i] + const candidateKey = this.findKey(candidateNode, i) + if (candidateKey === key) return i - this.pointerIndex + } + + return -1 + } + + /** + * Convert an array of Slate nodes to an array of chunk leaves, each + * containing the node and its key + */ + public toChunkLeaves(nodes: Descendant[], startIndex: number): ChunkLeaf[] { + return nodes.map((node, i) => ({ + type: 'leaf', + node, + key: this.findKey(node, startIndex + i), + index: startIndex + i, + })) + } + + /** + * Get the key for a Slate node, cached using the node's index + */ + private findKey(node: Descendant, index: number): Key { + const cachedKey = this.cachedKeys[index] + if (cachedKey) return cachedKey + const key = ReactEditor.findKey(this.editor, node) + this.cachedKeys[index] = key + return key + } +} diff --git a/packages/slate-react/src/chunking/chunk-tree-helper.ts b/packages/slate-react/src/chunking/chunk-tree-helper.ts new file mode 100644 index 000000000..34bd36a81 --- /dev/null +++ b/packages/slate-react/src/chunking/chunk-tree-helper.ts @@ -0,0 +1,574 @@ +import { Path } from 'slate' +import { Key } from 'slate-dom' +import { + Chunk, + ChunkTree, + ChunkLeaf, + ChunkDescendant, + ChunkAncestor, +} from './types' + +type SavedPointer = + | 'start' + | { + chunk: ChunkAncestor + node: ChunkDescendant + } + +export interface ChunkTreeHelperOptions { + chunkSize: number + debug?: boolean +} + +/** + * Traverse and modify a chunk tree + */ +export class ChunkTreeHelper { + /** + * The root of the chunk tree + */ + private root: ChunkTree + + /** + * The ideal size of a chunk + */ + private chunkSize: number + + /** + * Whether debug mode is enabled + * + * If enabled, the pointer state will be checked for internal consistency + * after each mutating operation. + */ + private debug: boolean + + /** + * Whether the traversal has reached the end of the chunk tree + * + * When this is true, the pointerChunk and pointerIndex point to the last + * top-level node in the chunk tree, although pointerNode returns null. + */ + private reachedEnd: boolean + + /** + * The chunk containing the current node + */ + private pointerChunk: ChunkAncestor + + /** + * The index of the current node within pointerChunk + * + * Can be -1 to indicate that the pointer is before the start of the tree. + */ + private pointerIndex: number + + /** + * Similar to a Slate path; tracks the path of pointerChunk relative to the + * root. + * + * Used to move the pointer from the current chunk to the parent chunk more + * efficiently. + */ + private pointerIndexStack: number[] + + /** + * Indexing the current chunk's children has a slight time cost, which adds up + * when traversing very large trees, so the current node is cached. + * + * A value of undefined means that the current node is not cached. This + * property must be set to undefined whenever the pointer is moved, unless + * the pointer is guaranteed to point to the same node that it did previously. + */ + private cachedPointerNode: ChunkDescendant | null | undefined + + constructor( + chunkTree: ChunkTree, + { chunkSize, debug }: ChunkTreeHelperOptions + ) { + this.root = chunkTree + this.chunkSize = chunkSize + // istanbul ignore next + this.debug = debug ?? false + this.pointerChunk = chunkTree + this.pointerIndex = -1 + this.pointerIndexStack = [] + this.reachedEnd = false + this.validateState() + } + + /** + * Move the pointer to the next leaf in the chunk tree + */ + public readLeaf(): ChunkLeaf | null { + // istanbul ignore next + if (this.reachedEnd) return null + + // Get the next sibling or aunt node + while (true) { + if (this.pointerIndex + 1 < this.pointerSiblings.length) { + this.pointerIndex++ + this.cachedPointerNode = undefined + break + } else if (this.pointerChunk.type === 'root') { + this.reachedEnd = true + return null + } else { + this.exitChunk() + } + } + + this.validateState() + + // If the next sibling or aunt is a chunk, descend into it + this.enterChunkUntilLeaf(false) + + return this.pointerNode as ChunkLeaf + } + + /** + * Move the pointer to the previous leaf in the chunk tree + */ + public returnToPreviousLeaf() { + // If we were at the end of the tree, descend into the end of the last + // chunk in the tree + if (this.reachedEnd) { + this.reachedEnd = false + this.enterChunkUntilLeaf(true) + return + } + + // Get the previous sibling or aunt node + while (true) { + if (this.pointerIndex >= 1) { + this.pointerIndex-- + this.cachedPointerNode = undefined + break + } else if (this.pointerChunk.type === 'root') { + this.pointerIndex = -1 + return + } else { + this.exitChunk() + } + } + + this.validateState() + + // If the previous sibling or aunt is a chunk, descend into it + this.enterChunkUntilLeaf(true) + } + + /** + * Insert leaves before the current leaf, leaving the pointer unchanged + */ + public insertBefore(leaves: ChunkLeaf[]) { + this.returnToPreviousLeaf() + this.insertAfter(leaves) + this.readLeaf() + } + + /** + * Insert leaves after the current leaf, leaving the pointer on the last + * inserted leaf + * + * The insertion algorithm first checks for any chunk we're currently at the + * end of that can receive additional leaves. Next, it tries to insert leaves + * at the starts of any subsequent chunks. + * + * Any remaining leaves are passed to rawInsertAfter to be chunked and + * inserted at the highest possible level. + */ + public insertAfter(leaves: ChunkLeaf[]) { + // istanbul ignore next + if (leaves.length === 0) return + + let beforeDepth = 0 + let afterDepth = 0 + + // While at the end of a chunk, insert any leaves that will fit, and then + // exit the chunk + while ( + this.pointerChunk.type === 'chunk' && + this.pointerIndex === this.pointerSiblings.length - 1 + ) { + const remainingCapacity = this.chunkSize - this.pointerSiblings.length + const toInsertCount = Math.min(remainingCapacity, leaves.length) + + if (toInsertCount > 0) { + const leavesToInsert = leaves.splice(0, toInsertCount) + this.rawInsertAfter(leavesToInsert, beforeDepth) + } + + this.exitChunk() + beforeDepth++ + } + + if (leaves.length === 0) return + + // Save the pointer so that we can come back here after inserting leaves + // into the starts of subsequent blocks + const rawInsertPointer = this.savePointer() + + // If leaves are inserted into the start of a subsequent block, then we + // eventually need to restore the pointer to the last such inserted leaf + let finalPointer: SavedPointer | null = null + + // Move the pointer into the chunk containing the next leaf, if it exists + if (this.readLeaf()) { + // While at the start of a chunk, insert any leaves that will fit, and + // then exit the chunk + while (this.pointerChunk.type === 'chunk' && this.pointerIndex === 0) { + const remainingCapacity = this.chunkSize - this.pointerSiblings.length + const toInsertCount = Math.min(remainingCapacity, leaves.length) + + if (toInsertCount > 0) { + const leavesToInsert = leaves.splice(-toInsertCount, toInsertCount) + + // Insert the leaves at the start of the chunk + this.pointerIndex = -1 + this.cachedPointerNode = undefined + this.rawInsertAfter(leavesToInsert, afterDepth) + + // If this is the first batch of insertions at the start of a + // subsequent chunk, set the final pointer to the last inserted leaf + if (!finalPointer) { + finalPointer = this.savePointer() + } + } + + this.exitChunk() + afterDepth++ + } + } + + this.restorePointer(rawInsertPointer) + + // If there are leaves left to insert, insert them between the end of the + // previous chunk and the start of the first subsequent chunk, or wherever + // the pointer ended up after the first batch of insertions + const minDepth = Math.max(beforeDepth, afterDepth) + this.rawInsertAfter(leaves, minDepth) + + if (finalPointer) { + this.restorePointer(finalPointer) + } + + this.validateState() + } + + /** + * Remove the current node and decrement the pointer, deleting any ancestor + * chunk that becomes empty as a result + */ + public remove() { + this.pointerSiblings.splice(this.pointerIndex--, 1) + this.cachedPointerNode = undefined + + if ( + this.pointerSiblings.length === 0 && + this.pointerChunk.type === 'chunk' + ) { + this.exitChunk() + this.remove() + } else { + this.invalidateChunk() + } + + this.validateState() + } + + /** + * Add the current chunk and all ancestor chunks to the list of modified + * chunks + */ + public invalidateChunk() { + for (let c = this.pointerChunk; c.type === 'chunk'; c = c.parent) { + this.root.modifiedChunks.add(c) + } + } + + /** + * Whether the pointer is at the start of the tree + */ + private get atStart() { + return this.pointerChunk.type === 'root' && this.pointerIndex === -1 + } + + /** + * The siblings of the current node + */ + private get pointerSiblings(): ChunkDescendant[] { + return this.pointerChunk.children + } + + /** + * Get the current node (uncached) + * + * If the pointer is at the start or end of the document, returns null. + * + * Usually, the current node is a chunk leaf, although it can be a chunk + * while insertions are in progress. + */ + private getPointerNode(): ChunkDescendant | null { + if (this.reachedEnd || this.pointerIndex === -1) { + return null + } + + return this.pointerSiblings[this.pointerIndex] + } + + /** + * Cached getter for the current node + */ + private get pointerNode(): ChunkDescendant | null { + if (this.cachedPointerNode !== undefined) return this.cachedPointerNode + const pointerNode = this.getPointerNode() + this.cachedPointerNode = pointerNode + return pointerNode + } + + /** + * Get the path of a chunk relative to the root, returning null if the chunk + * is not connected to the root + */ + private getChunkPath(chunk: ChunkAncestor): number[] | null { + const path: number[] = [] + + for (let c = chunk; c.type === 'chunk'; c = c.parent) { + const index = c.parent.children.indexOf(c) + + // istanbul ignore next + if (index === -1) { + return null + } + + path.unshift(index) + } + + return path + } + + /** + * Save the current pointer to be restored later + */ + private savePointer(): SavedPointer { + if (this.atStart) return 'start' + + // istanbul ignore next + if (!this.pointerNode) { + throw new Error('Cannot save pointer when pointerNode is null') + } + + return { + chunk: this.pointerChunk, + node: this.pointerNode, + } + } + + /** + * Restore the pointer to a previous state + */ + private restorePointer(savedPointer: SavedPointer) { + if (savedPointer === 'start') { + this.pointerChunk = this.root + this.pointerIndex = -1 + this.pointerIndexStack = [] + this.reachedEnd = false + this.cachedPointerNode = undefined + return + } + + // Since nodes may have been inserted or removed prior to the saved + // pointer since it was saved, the index and index stack must be + // recomputed. This is slow, but this is fine since restoring a pointer is + // not a frequent operation. + + const { chunk, node } = savedPointer + const index = chunk.children.indexOf(node) + + // istanbul ignore next + if (index === -1) { + throw new Error( + 'Cannot restore point because saved node is no longer in saved chunk' + ) + } + + const indexStack = this.getChunkPath(chunk) + + // istanbul ignore next + if (!indexStack) { + throw new Error( + 'Cannot restore point because saved chunk is no longer connected to root' + ) + } + + this.pointerChunk = chunk + this.pointerIndex = index + this.pointerIndexStack = indexStack + this.reachedEnd = false + this.cachedPointerNode = node + this.validateState() + } + + /** + * Assuming the current node is a chunk, move the pointer into that chunk + * + * @param end If true, place the pointer on the last node of the chunk. + * Otherwise, place the pointer on the first node. + */ + private enterChunk(end: boolean) { + // istanbul ignore next + if (this.pointerNode?.type !== 'chunk') { + throw new Error('Cannot enter non-chunk') + } + + this.pointerIndexStack.push(this.pointerIndex) + this.pointerChunk = this.pointerNode + this.pointerIndex = end ? this.pointerSiblings.length - 1 : 0 + this.cachedPointerNode = undefined + this.validateState() + + // istanbul ignore next + if (this.pointerChunk.children.length === 0) { + throw new Error('Cannot enter empty chunk') + } + } + + /** + * Assuming the current node is a chunk, move the pointer into that chunk + * repeatedly until the current node is a leaf + * + * @param end If true, place the pointer on the last node of the chunk. + * Otherwise, place the pointer on the first node. + */ + private enterChunkUntilLeaf(end: boolean) { + while (this.pointerNode?.type === 'chunk') { + this.enterChunk(end) + } + } + + /** + * Move the pointer to the parent chunk + */ + private exitChunk() { + // istanbul ignore next + if (this.pointerChunk.type === 'root') { + throw new Error('Cannot exit root') + } + + const previousPointerChunk = this.pointerChunk + this.pointerChunk = previousPointerChunk.parent + this.pointerIndex = this.pointerIndexStack.pop()! + this.cachedPointerNode = undefined + this.validateState() + } + + /** + * Insert leaves immediately after the current node, leaving the pointer on + * the last inserted leaf + * + * Leaves are chunked according to the number of nodes already in the parent + * plus the number of nodes being inserted, or the minimum depth if larger + */ + private rawInsertAfter(leaves: ChunkLeaf[], minDepth: number) { + if (leaves.length === 0) return + + const groupIntoChunks = ( + leaves: ChunkLeaf[], + parent: ChunkAncestor, + perChunk: number + ): ChunkDescendant[] => { + if (perChunk === 1) return leaves + const chunks: Chunk[] = [] + + for (let i = 0; i < this.chunkSize; i++) { + const chunkNodes = leaves.slice(i * perChunk, (i + 1) * perChunk) + if (chunkNodes.length === 0) break + + const chunk: Chunk = { + type: 'chunk', + key: new Key(), + parent, + children: [], + } + + chunk.children = groupIntoChunks( + chunkNodes, + chunk, + perChunk / this.chunkSize + ) + chunks.push(chunk) + } + + return chunks + } + + // Determine the chunking depth based on the number of existing nodes in + // the chunk and the number of nodes being inserted + const newTotal = this.pointerSiblings.length + leaves.length + let depthForTotal = 0 + + for (let i = this.chunkSize; i < newTotal; i *= this.chunkSize) { + depthForTotal++ + } + + // A depth of 0 means no chunking + const depth = Math.max(depthForTotal, minDepth) + const perTopLevelChunk = Math.pow(this.chunkSize, depth) + + const chunks = groupIntoChunks(leaves, this.pointerChunk, perTopLevelChunk) + this.pointerSiblings.splice(this.pointerIndex + 1, 0, ...chunks) + this.pointerIndex += chunks.length + this.cachedPointerNode = undefined + this.invalidateChunk() + this.validateState() + } + + /** + * If debug mode is enabled, ensure that the state is internally consistent + */ + // istanbul ignore next + private validateState() { + if (!this.debug) return + + const validateDescendant = (node: ChunkDescendant) => { + if (node.type === 'chunk') { + const { parent, children } = node + + if (!parent.children.includes(node)) { + throw new Error( + `Debug: Chunk ${node.key.id} has an incorrect parent property` + ) + } + + children.forEach(validateDescendant) + } + } + + this.root.children.forEach(validateDescendant) + + if ( + this.cachedPointerNode !== undefined && + this.cachedPointerNode !== this.getPointerNode() + ) { + throw new Error( + 'Debug: The cached pointer is incorrect and has not been invalidated' + ) + } + + const actualIndexStack = this.getChunkPath(this.pointerChunk) + + if (!actualIndexStack) { + throw new Error('Debug: The pointer chunk is not connected to the root') + } + + if (!Path.equals(this.pointerIndexStack, actualIndexStack)) { + throw new Error( + `Debug: The cached index stack [${this.pointerIndexStack.join( + ', ' + )}] does not match the path of the pointer chunk [${actualIndexStack.join( + ', ' + )}]` + ) + } + } +} diff --git a/packages/slate-react/src/chunking/get-chunk-tree-for-node.ts b/packages/slate-react/src/chunking/get-chunk-tree-for-node.ts new file mode 100644 index 000000000..fd073b315 --- /dev/null +++ b/packages/slate-react/src/chunking/get-chunk-tree-for-node.ts @@ -0,0 +1,47 @@ +import { Ancestor, Editor } from 'slate' +import { Key } from 'slate-dom' +import { ChunkTree } from './types' +import { ReconcileOptions, reconcileChildren } from './reconcile-children' +import { ReactEditor } from '../plugin/react-editor' + +export const KEY_TO_CHUNK_TREE = new WeakMap() + +/** + * Get or create the chunk tree for a Slate node + * + * If the reconcile option is provided, the chunk tree will be updated to + * match the current children of the node. The children are chunked + * automatically using the given chunk size. + */ +export const getChunkTreeForNode = ( + editor: Editor, + node: Ancestor, + // istanbul ignore next + options: { + reconcile?: Omit | false + } = {} +) => { + const key = ReactEditor.findKey(editor, node) + let chunkTree = KEY_TO_CHUNK_TREE.get(key) + + if (!chunkTree) { + chunkTree = { + type: 'root', + movedNodeKeys: new Set(), + modifiedChunks: new Set(), + children: [], + } + + KEY_TO_CHUNK_TREE.set(key, chunkTree) + } + + if (options.reconcile) { + reconcileChildren(editor, { + chunkTree, + children: node.children, + ...options.reconcile, + }) + } + + return chunkTree +} diff --git a/packages/slate-react/src/chunking/index.ts b/packages/slate-react/src/chunking/index.ts new file mode 100644 index 000000000..ee8ea2a2d --- /dev/null +++ b/packages/slate-react/src/chunking/index.ts @@ -0,0 +1,2 @@ +export * from './get-chunk-tree-for-node' +export * from './types' diff --git a/packages/slate-react/src/chunking/reconcile-children.ts b/packages/slate-react/src/chunking/reconcile-children.ts new file mode 100644 index 000000000..f8911a171 --- /dev/null +++ b/packages/slate-react/src/chunking/reconcile-children.ts @@ -0,0 +1,127 @@ +import { Editor, Descendant } from 'slate' +import { ChunkTree, ChunkLeaf } from './types' +import { ChunkTreeHelper, ChunkTreeHelperOptions } from './chunk-tree-helper' +import { ChildrenHelper } from './children-helper' + +export interface ReconcileOptions extends ChunkTreeHelperOptions { + chunkTree: ChunkTree + children: Descendant[] + chunkSize: number + rerenderChildren?: number[] + onInsert?: (node: Descendant, index: number) => void + onUpdate?: (node: Descendant, index: number) => void + onIndexChange?: (node: Descendant, index: number) => void + debug?: boolean +} + +/** + * Update the chunk tree to match the children array, inserting, removing and + * updating differing nodes + */ +export const reconcileChildren = ( + editor: Editor, + { + chunkTree, + children, + chunkSize, + rerenderChildren = [], + onInsert, + onUpdate, + onIndexChange, + debug, + }: ReconcileOptions +) => { + chunkTree.modifiedChunks.clear() + + const chunkTreeHelper = new ChunkTreeHelper(chunkTree, { chunkSize, debug }) + const childrenHelper = new ChildrenHelper(editor, children) + + let treeLeaf: ChunkLeaf | null + + // Read leaves from the tree one by one, each one representing a single Slate + // node. Each leaf from the tree is compared to the current node in the + // children array to determine whether nodes have been inserted, removed or + // updated. + while ((treeLeaf = chunkTreeHelper.readLeaf())) { + // Check where the tree node appears in the children array. In the most + // common case (where no insertions or removals have occurred), this will be + // 0. If the node has been removed, this will be -1. If new nodes have been + // inserted before the node, or if the node has been moved to a later + // position in the same children array, this will be a positive number. + const lookAhead = childrenHelper.lookAhead(treeLeaf.node, treeLeaf.key) + + // If the node was moved, we want to remove it and insert it later, rather + // then re-inserting all intermediate nodes before it. + const wasMoved = lookAhead > 0 && chunkTree.movedNodeKeys.has(treeLeaf.key) + + // If the tree leaf was moved or removed, remove it + if (lookAhead === -1 || wasMoved) { + chunkTreeHelper.remove() + continue + } + + // Get the matching Slate node and any nodes that may have been inserted + // prior to it. Insert these into the chunk tree. + const insertedChildrenStartIndex = childrenHelper.pointerIndex + const insertedChildren = childrenHelper.read(lookAhead + 1) + const matchingChild = insertedChildren.pop()! + + if (insertedChildren.length) { + const leavesToInsert = childrenHelper.toChunkLeaves( + insertedChildren, + insertedChildrenStartIndex + ) + + chunkTreeHelper.insertBefore(leavesToInsert) + + insertedChildren.forEach((node, relativeIndex) => { + onInsert?.(node, insertedChildrenStartIndex + relativeIndex) + }) + } + + const matchingChildIndex = childrenHelper.pointerIndex - 1 + + // Make sure the chunk tree contains the most recent version of the Slate + // node + if (treeLeaf.node !== matchingChild) { + treeLeaf.node = matchingChild + chunkTreeHelper.invalidateChunk() + onUpdate?.(matchingChild, matchingChildIndex) + } + + // Update the index if it has changed + if (treeLeaf.index !== matchingChildIndex) { + treeLeaf.index = matchingChildIndex + onIndexChange?.(matchingChild, matchingChildIndex) + } + + // Manually invalidate chunks containing specific children that we want to + // re-render + if (rerenderChildren.includes(matchingChildIndex)) { + chunkTreeHelper.invalidateChunk() + } + } + + // If there are still Slate nodes remaining from the children array that were + // not matched to nodes in the tree, insert them at the end of the tree + if (!childrenHelper.reachedEnd) { + const remainingChildren = childrenHelper.remaining() + + const leavesToInsert = childrenHelper.toChunkLeaves( + remainingChildren, + childrenHelper.pointerIndex + ) + + // Move the pointer back to the final leaf in the tree, or the start of the + // tree if the tree is currently empty + chunkTreeHelper.returnToPreviousLeaf() + + chunkTreeHelper.insertAfter(leavesToInsert) + + remainingChildren.forEach((node, relativeIndex) => { + onInsert?.(node, childrenHelper.pointerIndex + relativeIndex) + }) + } + + chunkTree.movedNodeKeys.clear() +} diff --git a/packages/slate-react/src/chunking/types.ts b/packages/slate-react/src/chunking/types.ts new file mode 100644 index 000000000..b86033184 --- /dev/null +++ b/packages/slate-react/src/chunking/types.ts @@ -0,0 +1,52 @@ +import { Descendant } from 'slate' +import { Key } from 'slate-dom' + +export interface ChunkTree { + type: 'root' + children: ChunkDescendant[] + + /** + * The keys of any Slate nodes that have been moved using move_node since the + * last render + * + * Detecting when a node has been moved to a different position in the + * children array is impossible to do efficiently while reconciling the chunk + * tree. This interferes with the reconciliation logic since it is treated as + * if the intermediate nodes were inserted and removed, causing them to be + * re-chunked unnecessarily. + * + * This set is used to detect when a node has been moved so that this case + * can be handled correctly and efficiently. + */ + movedNodeKeys: Set + + /** + * The chunks whose descendants have been modified during the most recent + * reconciliation + * + * Used to determine when the otherwise memoized React components for each + * chunk should be re-rendered. + */ + modifiedChunks: Set +} + +export interface Chunk { + type: 'chunk' + key: Key + parent: ChunkAncestor + children: ChunkDescendant[] +} + +// A chunk leaf is unrelated to a Slate leaf; it is a leaf of the chunk tree, +// containing a single element that is a child of the Slate node the chunk tree +// belongs to. +export interface ChunkLeaf { + type: 'leaf' + key: Key + node: Descendant + index: number +} + +export type ChunkAncestor = ChunkTree | Chunk +export type ChunkDescendant = Chunk | ChunkLeaf +export type ChunkNode = ChunkTree | Chunk | ChunkLeaf diff --git a/packages/slate-react/src/components/chunk-tree.tsx b/packages/slate-react/src/components/chunk-tree.tsx new file mode 100644 index 000000000..d55b8c024 --- /dev/null +++ b/packages/slate-react/src/components/chunk-tree.tsx @@ -0,0 +1,65 @@ +import React, { Fragment } from 'react' +import { Element } from 'slate' +import { Key } from 'slate-dom' +import { RenderChunkProps } from './editable' +import { + Chunk as TChunk, + ChunkAncestor as TChunkAncestor, + ChunkTree as TChunkTree, +} from '../chunking' + +const defaultRenderChunk = ({ children }: RenderChunkProps) => children + +const ChunkAncestor = (props: { + root: TChunkTree + ancestor: C + renderElement: (node: Element, index: number, key: Key) => JSX.Element + renderChunk?: (props: RenderChunkProps) => JSX.Element +}) => { + const { + root, + ancestor, + renderElement, + renderChunk = defaultRenderChunk, + } = props + + return ancestor.children.map(chunkNode => { + if (chunkNode.type === 'chunk') { + const key = chunkNode.key.id + + const renderedChunk = renderChunk({ + highest: ancestor === root, + lowest: chunkNode.children.some(c => c.type === 'leaf'), + attributes: { 'data-slate-chunk': true }, + children: ( + + ), + }) + + return {renderedChunk} + } + + // Only blocks containing no inlines are chunked + const element = chunkNode.node as Element + + return renderElement(element, chunkNode.index, chunkNode.key) + }) +} + +const ChunkTree = ChunkAncestor + +const MemoizedChunk = React.memo( + ChunkAncestor, + (prev, next) => + prev.root === next.root && + prev.renderElement === next.renderElement && + prev.renderChunk === next.renderChunk && + !next.root.modifiedChunks.has(next.ancestor) +) + +export default ChunkTree diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx index c11a9a932..8e8a6c41e 100644 --- a/packages/slate-react/src/components/editable.tsx +++ b/packages/slate-react/src/components/editable.tsx @@ -27,7 +27,7 @@ import { } from 'slate' import { useAndroidInputManager } from '../hooks/android-input-manager/use-android-input-manager' import useChildren from '../hooks/use-children' -import { DecorateContext } from '../hooks/use-decorate' +import { DecorateContext, useDecorateContext } from '../hooks/use-decorations' import { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect' import { ReadOnlyContext } from '../hooks/use-read-only' import { useSlate } from '../hooks/use-slate' @@ -77,6 +77,7 @@ import { import { RestoreDOM } from './restore-dom/restore-dom' import { AndroidInputManager } from '../hooks/android-input-manager/android-input-manager' import { ComposingContext } from '../hooks/use-composing' +import { useFlushDeferredSelectorsOnRender } from '../hooks/use-slate-selector' type DeferredOperation = () => void @@ -100,6 +101,18 @@ export interface RenderElementProps { } } +/** + * `RenderChunkProps` are passed to the `renderChunk` handler + */ +export interface RenderChunkProps { + highest: boolean + lowest: boolean + children: any + attributes: { + 'data-slate-chunk': true + } +} + /** * `RenderLeafProps` are passed to the `renderLeaf` handler. */ @@ -145,6 +158,7 @@ export type EditableProps = { role?: string style?: React.CSSProperties renderElement?: (props: RenderElementProps) => JSX.Element + renderChunk?: (props: RenderChunkProps) => JSX.Element renderLeaf?: (props: RenderLeafProps) => JSX.Element renderText?: (props: RenderTextProps) => JSX.Element renderPlaceholder?: (props: RenderPlaceholderProps) => JSX.Element @@ -170,6 +184,7 @@ export const Editable = forwardRef( placeholder, readOnly = false, renderElement, + renderChunk, renderLeaf, renderText, renderPlaceholder = defaultRenderPlaceholder, @@ -210,6 +225,11 @@ export const Editable = forwardRef( // The autoFocus TextareaHTMLAttribute doesn't do anything on a div, so it // needs to be manually focused. + // + // If this stops working in Firefox, make sure nothing is causing this + // component to re-render during the initial mount. If the DOM selection is + // set by `useIsomorphicLayoutEffect` before `onDOMSelectionChange` updates + // `editor.selection`, the DOM selection can be removed accidentally. useEffect(() => { if (ref.current && autoFocus) { ref.current.focus() @@ -920,6 +940,7 @@ export const Editable = forwardRef( }, [scheduleOnDOMSelectionChange, state]) const decorations = decorate([editor, []]) + const decorateContext = useDecorateContext(decorate) const showPlaceholder = placeholder && @@ -999,10 +1020,12 @@ export const Editable = forwardRef( }) }) + useFlushDeferredSelectorsOnRender() + return ( - + diff --git a/packages/slate-react/src/components/element.tsx b/packages/slate-react/src/components/element.tsx index 37a4b83cc..1c553ed07 100644 --- a/packages/slate-react/src/components/element.tsx +++ b/packages/slate-react/src/components/element.tsx @@ -1,13 +1,7 @@ import getDirection from 'direction' import React, { useCallback } from 'react' import { JSX } from 'react' -import { - Editor, - Element as SlateElement, - Node, - Range, - DecoratedRange, -} from 'slate' +import { Editor, Element as SlateElement, Node, DecoratedRange } from 'slate' import { ReactEditor, useReadOnly, useSlateStatic } from '..' import useChildren from '../hooks/use-children' import { isElementDecorationsEqual } from 'slate-dom' @@ -19,6 +13,7 @@ import { NODE_TO_PARENT, } from 'slate-dom' import { + RenderChunkProps, RenderElementProps, RenderLeafProps, RenderPlaceholderProps, @@ -26,6 +21,11 @@ import { } from './editable' import Text from './text' +import { useDecorations } from '../hooks/use-decorations' + +const defaultRenderElement = (props: RenderElementProps) => ( + +) /** * Element. @@ -35,23 +35,24 @@ const Element = (props: { decorations: DecoratedRange[] element: SlateElement renderElement?: (props: RenderElementProps) => JSX.Element + renderChunk?: (props: RenderChunkProps) => JSX.Element renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element renderText?: (props: RenderTextProps) => JSX.Element renderLeaf?: (props: RenderLeafProps) => JSX.Element - selection: Range | null }) => { const { - decorations, + decorations: parentDecorations, element, - renderElement = (p: RenderElementProps) => , + renderElement = defaultRenderElement, + renderChunk, renderPlaceholder, renderLeaf, renderText, - selection, } = props const editor = useSlateStatic() const readOnly = useReadOnly() const isInline = editor.isInline(element) + const decorations = useDecorations(element, parentDecorations) const key = ReactEditor.findKey(editor, element) const ref = useCallback( (ref: HTMLElement | null) => { @@ -72,10 +73,10 @@ const Element = (props: { decorations, node: element, renderElement, + renderChunk, renderPlaceholder, renderLeaf, renderText, - selection, }) // Attributes that the developer must mix into the element in their @@ -149,14 +150,11 @@ const MemoizedElement = React.memo(Element, (prev, next) => { return ( prev.element === next.element && prev.renderElement === next.renderElement && + prev.renderChunk === next.renderChunk && prev.renderText === next.renderText && prev.renderLeaf === next.renderLeaf && prev.renderPlaceholder === next.renderPlaceholder && - isElementDecorationsEqual(prev.decorations, next.decorations) && - (prev.selection === next.selection || - (!!prev.selection && - !!next.selection && - Range.equals(prev.selection, next.selection))) + isElementDecorationsEqual(prev.decorations, next.decorations) ) }) diff --git a/packages/slate-react/src/components/leaf.tsx b/packages/slate-react/src/components/leaf.tsx index cee5c2d0c..10ecc6d1c 100644 --- a/packages/slate-react/src/components/leaf.tsx +++ b/packages/slate-react/src/components/leaf.tsx @@ -9,11 +9,7 @@ import { JSX } from 'react' import { Element, LeafPosition, Text } from 'slate' import { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer' import String from './string' -import { - PLACEHOLDER_SYMBOL, - EDITOR_TO_PLACEHOLDER_ELEMENT, - EDITOR_TO_FORCE_RENDER, -} from 'slate-dom' +import { PLACEHOLDER_SYMBOL, EDITOR_TO_PLACEHOLDER_ELEMENT } from 'slate-dom' import { RenderLeafProps, RenderPlaceholderProps } from './editable' import { useSlateStatic } from '../hooks/use-slate-static' import { IS_WEBKIT, IS_ANDROID } from 'slate-dom' @@ -43,6 +39,8 @@ function clearTimeoutRef(timeoutRef: MutableRefObject) { } } +const defaultRenderLeaf = (props: RenderLeafProps) => + /** * Individual leaves in a text node with unique formatting. */ @@ -61,7 +59,7 @@ const Leaf = (props: { text, parent, renderPlaceholder, - renderLeaf = (props: RenderLeafProps) => , + renderLeaf = defaultRenderLeaf, leafPosition, } = props diff --git a/packages/slate-react/src/components/slate.tsx b/packages/slate-react/src/components/slate.tsx index 1ed3af02d..45dff3056 100644 --- a/packages/slate-react/src/components/slate.tsx +++ b/packages/slate-react/src/components/slate.tsx @@ -3,7 +3,6 @@ import { Descendant, Editor, Node, Operation, Scrubber, Selection } from 'slate' import { EDITOR_TO_ON_CHANGE } from 'slate-dom' import { FocusedContext } from '../hooks/use-focused' import { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect' -import { SlateContext, SlateContextValue } from '../hooks/use-slate' import { useSelectorContext, SlateSelectorContext, @@ -35,7 +34,8 @@ export const Slate = (props: { ...rest } = props - const [context, setContext] = React.useState(() => { + // Run once on first mount, but before `useEffect` or render + React.useState(() => { if (!Node.isNodeList(initialValue)) { throw new Error( `[Slate] initialValue is invalid! Expected a list of elements but got: ${Scrubber.stringify( @@ -43,18 +43,19 @@ export const Slate = (props: { )}` ) } + if (!Editor.isEditor(editor)) { throw new Error( `[Slate] editor is invalid! You passed: ${Scrubber.stringify(editor)}` ) } + editor.children = initialValue Object.assign(editor, rest) - return { v: 0, editor } }) const { selectorContext, onChange: handleSelectorChange } = - useSelectorContext(editor) + useSelectorContext() const onContextChange = useCallback( (options?: { operation?: Operation }) => { @@ -70,11 +71,7 @@ export const Slate = (props: { onValueChange?.(editor.children) } - setContext(prevContext => ({ - v: prevContext.v + 1, - editor, - })) - handleSelectorChange(editor) + handleSelectorChange() }, [editor, handleSelectorChange, onChange, onSelectionChange, onValueChange] ) @@ -117,13 +114,11 @@ export const Slate = (props: { return ( - - - - {children} - - - + + + {children} + + ) } diff --git a/packages/slate-react/src/components/text.tsx b/packages/slate-react/src/components/text.tsx index e592faf81..d9d436b22 100644 --- a/packages/slate-react/src/components/text.tsx +++ b/packages/slate-react/src/components/text.tsx @@ -13,6 +13,9 @@ import { RenderTextProps, } from './editable' import Leaf from './leaf' +import { useDecorations } from '../hooks/use-decorations' + +const defaultRenderText = (props: RenderTextProps) => /** * Text. @@ -28,16 +31,18 @@ const Text = (props: { text: SlateText }) => { const { - decorations, + decorations: parentDecorations, isLast, parent, renderPlaceholder, renderLeaf, - renderText = (props: RenderTextProps) => , + renderText = defaultRenderText, text, } = props + const editor = useSlateStatic() const ref = useRef(null) + const decorations = useDecorations(text, parentDecorations) const decoratedLeaves = SlateText.decorations(text, decorations) const key = ReactEditor.findKey(editor, text) const children = [] diff --git a/packages/slate-react/src/hooks/use-children.tsx b/packages/slate-react/src/hooks/use-children.tsx index ec170a54e..66fecf3d6 100644 --- a/packages/slate-react/src/hooks/use-children.tsx +++ b/packages/slate-react/src/hooks/use-children.tsx @@ -1,13 +1,8 @@ -import React from 'react' -import { - Ancestor, - Descendant, - Editor, - Element, - Range, - DecoratedRange, -} from 'slate' +import React, { useCallback, useRef } from 'react' +import { Ancestor, Editor, Element, DecoratedRange, Text } from 'slate' +import { Key, isElementDecorationsEqual } from 'slate-dom' import { + RenderChunkProps, RenderElementProps, RenderLeafProps, RenderPlaceholderProps, @@ -17,10 +12,16 @@ import { import ElementComponent from '../components/element' import TextComponent from '../components/text' import { ReactEditor } from '../plugin/react-editor' -import { IS_NODE_MAP_DIRTY, NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-dom' -import { useDecorate } from './use-decorate' -import { SelectedContext } from './use-selected' +import { + IS_NODE_MAP_DIRTY, + NODE_TO_INDEX, + NODE_TO_PARENT, + splitDecorationsByChild, +} from 'slate-dom' import { useSlateStatic } from './use-slate-static' +import { getChunkTreeForNode } from '../chunking' +import ChunkTree from '../components/chunk-tree' +import { ElementContext } from './use-element' /** * Children. @@ -30,81 +31,160 @@ const useChildren = (props: { decorations: DecoratedRange[] node: Ancestor renderElement?: (props: RenderElementProps) => JSX.Element + renderChunk?: (props: RenderChunkProps) => JSX.Element renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element renderText?: (props: RenderTextProps) => JSX.Element renderLeaf?: (props: RenderLeafProps) => JSX.Element - selection: Range | null }) => { const { decorations, node, renderElement, + renderChunk, renderPlaceholder, renderText, renderLeaf, - selection, } = props - const decorate = useDecorate() const editor = useSlateStatic() IS_NODE_MAP_DIRTY.set(editor as ReactEditor, false) - const path = ReactEditor.findPath(editor, node) - const children = [] - const isLeafBlock = - Element.isElement(node) && - !editor.isInline(node) && - Editor.hasInlines(editor, node) - for (let i = 0; i < node.children.length; i++) { - const p = path.concat(i) - const n = node.children[i] as Descendant - const key = ReactEditor.findKey(editor, n) - const range = Editor.range(editor, p) - const sel = selection && Range.intersection(range, selection) - const ds = decorate([n, p]) + const isEditor = Editor.isEditor(node) + const isBlock = !isEditor && Element.isElement(node) && !editor.isInline(node) + const isLeafBlock = isBlock && Editor.hasInlines(editor, node) + const chunkSize = isLeafBlock ? null : editor.getChunkSize(node) + const chunking = !!chunkSize - for (const dec of decorations) { - const d = Range.intersection(dec, range) + const { decorationsByChild, childrenToRedecorate } = useDecorationsByChild( + editor, + node, + decorations + ) - if (d) { - ds.push(d) - } - } + // Update the index and parent of each child. + // PERF: If chunking is enabled, this is done while traversing the chunk tree + // instead to eliminate unnecessary weak map operations. + if (!chunking) { + node.children.forEach((n, i) => { + NODE_TO_INDEX.set(n, i) + NODE_TO_PARENT.set(n, node) + }) + } - if (Element.isElement(n)) { - children.push( - + const renderElementComponent = useCallback( + (n: Element, i: number, cachedKey?: Key) => { + const key = cachedKey ?? ReactEditor.findKey(editor, n) + + return ( + - + ) - } else { - children.push( - - ) - } + }, + [ + editor, + decorationsByChild, + renderElement, + renderChunk, + renderPlaceholder, + renderLeaf, + renderText, + ] + ) - NODE_TO_INDEX.set(n, i) - NODE_TO_PARENT.set(n, node) + const renderTextComponent = (n: Text, i: number) => { + const key = ReactEditor.findKey(editor, n) + + return ( + + ) } - return children + if (!chunking) { + return node.children.map((n, i) => + Text.isText(n) ? renderTextComponent(n, i) : renderElementComponent(n, i) + ) + } + + const chunkTree = getChunkTreeForNode(editor, node, { + reconcile: { + chunkSize, + rerenderChildren: childrenToRedecorate, + onInsert: (n, i) => { + NODE_TO_INDEX.set(n, i) + NODE_TO_PARENT.set(n, node) + }, + onUpdate: (n, i) => { + NODE_TO_INDEX.set(n, i) + NODE_TO_PARENT.set(n, node) + }, + onIndexChange: (n, i) => { + NODE_TO_INDEX.set(n, i) + }, + }, + }) + + return ( + + ) +} + +const useDecorationsByChild = ( + editor: Editor, + node: Ancestor, + decorations: DecoratedRange[] +) => { + const decorationsByChild = splitDecorationsByChild(editor, node, decorations) + + // The value we return is a mutable array of `DecoratedRange[]` arrays. This + // lets us avoid passing an immutable array of decorations for each child into + // `ChunkTree` using props. Each `DecoratedRange[]` is only updated if the + // decorations at that index have changed, which speeds up the equality check + // for the `decorations` prop in the memoized `Element` and `Text` components. + const mutableDecorationsByChild = useRef(decorationsByChild).current + + // Track the list of child indices whose decorations have changed, so that we + // can tell the chunk tree to re-render these children. + const childrenToRedecorate: number[] = [] + + // Resize the mutable array to match the latest result + mutableDecorationsByChild.length = decorationsByChild.length + + for (let i = 0; i < decorationsByChild.length; i++) { + const decorations = decorationsByChild[i] + + const previousDecorations: DecoratedRange[] | null = + mutableDecorationsByChild[i] ?? null + + if (!isElementDecorationsEqual(previousDecorations, decorations)) { + mutableDecorationsByChild[i] = decorations + childrenToRedecorate.push(i) + } + } + + return { decorationsByChild: mutableDecorationsByChild, childrenToRedecorate } } export default useChildren diff --git a/packages/slate-react/src/hooks/use-decorate.ts b/packages/slate-react/src/hooks/use-decorate.ts deleted file mode 100644 index 7155efe87..000000000 --- a/packages/slate-react/src/hooks/use-decorate.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createContext, useContext } from 'react' -import { DecoratedRange, NodeEntry } from 'slate' - -/** - * A React context for sharing the `decorate` prop of the editable. - */ - -export const DecorateContext = createContext< - (entry: NodeEntry) => DecoratedRange[] ->(() => []) - -/** - * Get the current `decorate` prop of the editable. - */ - -export const useDecorate = (): ((entry: NodeEntry) => DecoratedRange[]) => { - return useContext(DecorateContext) -} diff --git a/packages/slate-react/src/hooks/use-decorations.ts b/packages/slate-react/src/hooks/use-decorations.ts new file mode 100644 index 000000000..b10b88a35 --- /dev/null +++ b/packages/slate-react/src/hooks/use-decorations.ts @@ -0,0 +1,81 @@ +import { createContext, useCallback, useContext, useMemo, useRef } from 'react' +import { DecoratedRange, Descendant, NodeEntry, Text } from 'slate' +import { isTextDecorationsEqual, isElementDecorationsEqual } from 'slate-dom' +import { useSlateStatic } from './use-slate-static' +import { ReactEditor } from '../plugin/react-editor' +import { useGenericSelector } from './use-generic-selector' +import { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect' + +type Callback = () => void + +/** + * A React context for sharing the `decorate` prop of the editable and + * subscribing to changes on this prop. + */ + +export const DecorateContext = createContext<{ + decorate: (entry: NodeEntry) => DecoratedRange[] + addEventListener: (callback: Callback) => () => void +}>({} as any) + +export const useDecorations = ( + node: Descendant, + parentDecorations: DecoratedRange[] +): DecoratedRange[] => { + const editor = useSlateStatic() + const { decorate, addEventListener } = useContext(DecorateContext) + + // Not memoized since we want nodes to be decorated on each render + const selector = () => { + const path = ReactEditor.findPath(editor, node) + return decorate([node, path]) + } + + const equalityFn = Text.isText(node) + ? isTextDecorationsEqual + : isElementDecorationsEqual + + const [decorations, update] = useGenericSelector(selector, equalityFn) + + useIsomorphicLayoutEffect(() => { + const unsubscribe = addEventListener(update) + update() + return unsubscribe + }, [addEventListener, update]) + + return useMemo( + () => [...decorations, ...parentDecorations], + [decorations, parentDecorations] + ) +} + +export const useDecorateContext = ( + decorateProp: (entry: NodeEntry) => DecoratedRange[] +) => { + const eventListeners = useRef(new Set()) + + const latestDecorate = useRef(decorateProp) + + useIsomorphicLayoutEffect(() => { + latestDecorate.current = decorateProp + eventListeners.current.forEach(listener => listener()) + }, [decorateProp]) + + const decorate = useCallback( + (entry: NodeEntry) => latestDecorate.current(entry), + [] + ) + + const addEventListener = useCallback((callback: Callback) => { + eventListeners.current.add(callback) + + return () => { + eventListeners.current.delete(callback) + } + }, []) + + return useMemo( + () => ({ decorate, addEventListener }), + [decorate, addEventListener] + ) +} diff --git a/packages/slate-react/src/hooks/use-element.ts b/packages/slate-react/src/hooks/use-element.ts new file mode 100644 index 000000000..21585eebc --- /dev/null +++ b/packages/slate-react/src/hooks/use-element.ts @@ -0,0 +1,25 @@ +import { createContext, useContext } from 'react' +import { Element } from 'slate' + +export const ElementContext = createContext(null) + +/** + * Get the current element. + */ + +export const useElement = (): Element => { + const context = useContext(ElementContext) + + if (!context) { + throw new Error( + 'The `useElement` hook must be used inside `renderElement`.' + ) + } + + return context +} + +/** + * Get the current element, or return null if not inside `renderElement`. + */ +export const useElementIf = () => useContext(ElementContext) diff --git a/packages/slate-react/src/hooks/use-generic-selector.tsx b/packages/slate-react/src/hooks/use-generic-selector.tsx new file mode 100644 index 000000000..7bb8705af --- /dev/null +++ b/packages/slate-react/src/hooks/use-generic-selector.tsx @@ -0,0 +1,92 @@ +import { useCallback, useReducer, useRef } from 'react' + +/** + * Create a selector that updates when an `update` function is called, and + * which only causes the component to render when the result of `selector` + * differs from the previous result according to `equalityFn`. + * + * If `selector` is memoized using `useCallback`, then it will only be called + * when it changes or when `update` is called. Otherwise, `selector` will be + * called every time the component renders. + * + * @example + * const [state, update] = useGenericSelector(selector, equalityFn) + * + * useIsomorphicLayoutEffect(() => { + * return addEventListener(update) + * }, [addEventListener, update]) + * + * return state + */ + +export function useGenericSelector( + selector: () => T, + equalityFn: (a: T | null, b: T) => boolean +): [state: T, update: () => void] { + const [, forceRender] = useReducer(s => s + 1, 0) + + const latestSubscriptionCallbackError = useRef() + const latestSelector = useRef<() => T>(() => null as any) + const latestSelectedState = useRef(null) + let selectedState: T + + try { + if ( + selector !== latestSelector.current || + latestSubscriptionCallbackError.current + ) { + const selectorResult = selector() + + if (equalityFn(latestSelectedState.current, selectorResult)) { + selectedState = latestSelectedState.current as T + } else { + selectedState = selectorResult + } + } else { + selectedState = latestSelectedState.current as T + } + } catch (err) { + if (latestSubscriptionCallbackError.current && isError(err)) { + err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n` + } + + throw err + } + + latestSelector.current = selector + latestSelectedState.current = selectedState + latestSubscriptionCallbackError.current = undefined + + const update = useCallback(() => { + try { + const newSelectedState = latestSelector.current() + + if (equalityFn(latestSelectedState.current, newSelectedState)) { + return + } + + latestSelectedState.current = newSelectedState + } catch (err) { + // we ignore all errors here, since when the component + // is re-rendered, the selectors are called again, and + // will throw again, if neither props nor store state + // changed + if (err instanceof Error) { + latestSubscriptionCallbackError.current = err + } else { + latestSubscriptionCallbackError.current = new Error(String(err)) + } + } + + forceRender() + + // don't rerender on equalityFn change since we want to be able to define it inline + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + return [selectedState, update] +} + +function isError(error: any): error is Error { + return error instanceof Error +} diff --git a/packages/slate-react/src/hooks/use-selected.ts b/packages/slate-react/src/hooks/use-selected.ts index fd96418a7..d26393f65 100644 --- a/packages/slate-react/src/hooks/use-selected.ts +++ b/packages/slate-react/src/hooks/use-selected.ts @@ -1,15 +1,37 @@ -import { createContext, useContext } from 'react' - -/** - * A React context for sharing the `selected` state of an element. - */ - -export const SelectedContext = createContext(false) +import { useCallback } from 'react' +import { Editor, Range } from 'slate' +import { useElementIf } from './use-element' +import { useSlateSelector } from './use-slate-selector' +import { ReactEditor } from '../plugin/react-editor' /** * Get the current `selected` state of an element. */ export const useSelected = (): boolean => { - return useContext(SelectedContext) + const element = useElementIf() + + // Breaking the rules of hooks is fine here since `!element` will remain true + // or false for the entire lifetime of the component this hook is called from. + // TODO: Decide if we want to throw an error instead when calling + // `useSelected` outside of an element (potentially a breaking change). + if (!element) return false + + // eslint-disable-next-line react-hooks/rules-of-hooks + const selector = useCallback( + (editor: Editor) => { + if (!editor.selection) return false + const path = ReactEditor.findPath(editor, element) + const range = Editor.range(editor, path) + return !!Range.intersection(range, editor.selection) + }, + [element] + ) + + // eslint-disable-next-line react-hooks/rules-of-hooks + return useSlateSelector(selector, undefined, { + // Defer the selector until after `Editable` has rendered so that the path + // will be accurate. + deferred: true, + }) } diff --git a/packages/slate-react/src/hooks/use-slate-selector.tsx b/packages/slate-react/src/hooks/use-slate-selector.tsx index 288b40481..c43ebd62a 100644 --- a/packages/slate-react/src/hooks/use-slate-selector.tsx +++ b/packages/slate-react/src/hooks/use-slate-selector.tsx @@ -1,120 +1,78 @@ -import { - createContext, - useCallback, - useContext, - useMemo, - useReducer, - useRef, -} from 'react' +import { createContext, useCallback, useContext, useMemo, useRef } from 'react' import { Editor } from 'slate' import { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect' +import { useSlateStatic } from './use-slate-static' +import { useGenericSelector } from './use-generic-selector' -function isError(error: any): error is Error { - return error instanceof Error +type Callback = () => void + +export interface SlateSelectorOptions { + /** + * If true, defer calling the selector function until after `Editable` has + * finished rendering. This ensures that `ReactEditor.findPath` won't return + * an outdated path if called inside the selector. + */ + deferred?: boolean } -type EditorChangeHandler = (editor: Editor) => void /** - * A React context for sharing the editor selector context in a way to control rerenders + * A React context for sharing the editor selector context in a way to control + * re-renders. */ export const SlateSelectorContext = createContext<{ - getSlate: () => Editor - addEventListener: (callback: EditorChangeHandler) => () => void + addEventListener: ( + callback: Callback, + options?: SlateSelectorOptions + ) => () => void + flushDeferred: () => void }>({} as any) const refEquality = (a: any, b: any) => a === b /** - * use redux style selectors to prevent rerendering on every keystroke. - * Bear in mind rerendering can only prevented if the returned value is a value type or for reference types (e.g. objects and arrays) add a custom equality function. + * Use redux style selectors to prevent re-rendering on every keystroke. * - * Example: - * ``` - * const isSelectionActive = useSlateSelector(editor => Boolean(editor.selection)); - * ``` + * Bear in mind re-rendering can only prevented if the returned value is a value + * type or for reference types (e.g. objects and arrays) add a custom equality + * function. + * + * If `selector` is memoized using `useCallback`, then it will only be called + * when it or the editor state changes. Otherwise, `selector` will be called + * every time the component renders. + * + * @example + * const isSelectionActive = useSlateSelector(editor => Boolean(editor.selection)) */ + export function useSlateSelector( selector: (editor: Editor) => T, - equalityFn: (a: T, b: T) => boolean = refEquality -) { - const [, forceRender] = useReducer(s => s + 1, 0) + equalityFn: (a: T | null, b: T) => boolean = refEquality, + { deferred }: SlateSelectorOptions = {} +): T { const context = useContext(SlateSelectorContext) if (!context) { throw new Error( `The \`useSlateSelector\` hook must be used inside the component's context.` ) } - const { getSlate, addEventListener } = context + const { addEventListener } = context - const latestSubscriptionCallbackError = useRef() - const latestSelector = useRef<(editor: Editor) => T>(() => null as any) - const latestSelectedState = useRef(null as any as T) - let selectedState: T - - try { - if ( - selector !== latestSelector.current || - latestSubscriptionCallbackError.current - ) { - const selectorResult = selector(getSlate()) - - if (equalityFn(latestSelectedState.current, selectorResult)) { - selectedState = latestSelectedState.current - } else { - selectedState = selectorResult - } - } else { - selectedState = latestSelectedState.current - } - } catch (err) { - if (latestSubscriptionCallbackError.current && isError(err)) { - err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n` - } - - throw err - } - useIsomorphicLayoutEffect(() => { - latestSelector.current = selector - latestSelectedState.current = selectedState - latestSubscriptionCallbackError.current = undefined - }) - - useIsomorphicLayoutEffect( - () => { - function checkForUpdates() { - try { - const newSelectedState = latestSelector.current(getSlate()) - - if (equalityFn(newSelectedState, latestSelectedState.current)) { - return - } - - latestSelectedState.current = newSelectedState - } catch (err) { - // we ignore all errors here, since when the component - // is re-rendered, the selectors are called again, and - // will throw again, if neither props nor store state - // changed - if (err instanceof Error) { - latestSubscriptionCallbackError.current = err - } else { - latestSubscriptionCallbackError.current = new Error(String(err)) - } - } - - forceRender() - } - - const unsubscribe = addEventListener(checkForUpdates) - - checkForUpdates() - - return () => unsubscribe() - }, - // don't rerender on equalityFn change since we want to be able to define it inline - [addEventListener, getSlate] + const editor = useSlateStatic() + const genericSelector = useCallback( + () => selector(editor), + [editor, selector] ) + const [selectedState, update] = useGenericSelector( + genericSelector, + equalityFn + ) + + useIsomorphicLayoutEffect(() => { + const unsubscribe = addEventListener(update, { deferred }) + update() + return unsubscribe + }, [addEventListener, update, deferred]) return selectedState } @@ -122,33 +80,49 @@ export function useSlateSelector( /** * Create selector context with editor updating on every editor change */ -export function useSelectorContext(editor: Editor) { - const eventListeners = useRef([]).current - const slateRef = useRef<{ - editor: Editor - }>({ - editor, - }).current - const onChange = useCallback( - (editor: Editor) => { - slateRef.editor = editor - eventListeners.forEach((listener: EditorChangeHandler) => - listener(editor) - ) +export function useSelectorContext() { + const eventListeners = useRef(new Set()) + const deferredEventListeners = useRef(new Set()) + + const onChange = useCallback(() => { + eventListeners.current.forEach(listener => listener()) + }, []) + + const flushDeferred = useCallback(() => { + deferredEventListeners.current.forEach(listener => listener()) + deferredEventListeners.current.clear() + }, []) + + const addEventListener = useCallback( + ( + callbackProp: Callback, + { deferred = false }: SlateSelectorOptions = {} + ) => { + const callback = deferred + ? () => deferredEventListeners.current.add(callbackProp) + : callbackProp + + eventListeners.current.add(callback) + + return () => { + eventListeners.current.delete(callback) + } }, - [eventListeners, slateRef] + [] + ) + + const selectorContext = useMemo( + () => ({ + addEventListener, + flushDeferred, + }), + [addEventListener, flushDeferred] ) - const selectorContext = useMemo(() => { - return { - getSlate: () => slateRef.editor, - addEventListener: (callback: EditorChangeHandler) => { - eventListeners.push(callback) - return () => { - eventListeners.splice(eventListeners.indexOf(callback), 1) - } - }, - } - }, [eventListeners, slateRef]) return { selectorContext, onChange } } + +export function useFlushDeferredSelectorsOnRender() { + const { flushDeferred } = useContext(SlateSelectorContext) + useIsomorphicLayoutEffect(flushDeferred) +} diff --git a/packages/slate-react/src/hooks/use-slate.tsx b/packages/slate-react/src/hooks/use-slate.tsx index 27e84e771..bf6acf0dc 100644 --- a/packages/slate-react/src/hooks/use-slate.tsx +++ b/packages/slate-react/src/hooks/use-slate.tsx @@ -1,47 +1,64 @@ -import { createContext, useContext } from 'react' +import { MutableRefObject, useContext, useMemo, useReducer } from 'react' import { Editor } from 'slate' -import { ReactEditor } from '../plugin/react-editor' +import { SlateSelectorContext } from './use-slate-selector' +import { useSlateStatic } from './use-slate-static' +import { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect' /** - * A React context for sharing the editor object, in a way that re-renders the - * context whenever changes occur. - */ - -export interface SlateContextValue { - v: number - editor: ReactEditor -} - -export const SlateContext = createContext<{ - v: number - editor: ReactEditor -} | null>(null) - -/** - * Get the current editor object from the React context. + * Get the current editor object and re-render whenever it changes. */ export const useSlate = (): Editor => { - const context = useContext(SlateContext) + const { addEventListener } = useContext(SlateSelectorContext) + const [, forceRender] = useReducer(s => s + 1, 0) - if (!context) { + if (!addEventListener) { throw new Error( `The \`useSlate\` hook must be used inside the component's context.` ) } - const { editor } = context - return editor + useIsomorphicLayoutEffect( + () => addEventListener(forceRender), + [addEventListener] + ) + + return useSlateStatic() } +const EDITOR_TO_V = new WeakMap>() + +const getEditorVersionRef = (editor: Editor): MutableRefObject => { + let v = EDITOR_TO_V.get(editor) + + if (v) { + return v + } + + v = { current: 0 } + EDITOR_TO_V.set(editor, v) + + // Register the `onChange` handler exactly once per editor + const { onChange } = editor + + editor.onChange = options => { + v!.current++ + onChange(options) + } + + return v +} + +/** + * Get the current editor object and its version, which increments on every + * change. + * + * @deprecated The `v` counter is no longer used except for this hook, and may + * be removed in a future version. + */ + export const useSlateWithV = (): { editor: Editor; v: number } => { - const context = useContext(SlateContext) - - if (!context) { - throw new Error( - `The \`useSlate\` hook must be used inside the component's context.` - ) - } - - return context + const editor = useSlate() + const vRef = useMemo(() => getEditorVersionRef(editor), [editor]) + return { editor, v: vRef.current } } diff --git a/packages/slate-react/src/index.ts b/packages/slate-react/src/index.ts index fee79b000..0f1ffce23 100644 --- a/packages/slate-react/src/index.ts +++ b/packages/slate-react/src/index.ts @@ -2,6 +2,7 @@ export { Editable, RenderElementProps, + RenderChunkProps, RenderLeafProps, RenderPlaceholderProps, DefaultPlaceholder, @@ -14,6 +15,7 @@ export { Slate } from './components/slate' // Hooks export { useEditor } from './hooks/use-editor' +export { useElement, useElementIf } from './hooks/use-element' export { useSlateStatic } from './hooks/use-slate-static' export { useComposing } from './hooks/use-composing' export { useFocused } from './hooks/use-focused' diff --git a/packages/slate-react/src/plugin/react-editor.ts b/packages/slate-react/src/plugin/react-editor.ts index ce199041f..5ab4a9952 100644 --- a/packages/slate-react/src/plugin/react-editor.ts +++ b/packages/slate-react/src/plugin/react-editor.ts @@ -1,10 +1,18 @@ +import { Ancestor } from 'slate' import { DOMEditor, type DOMEditorInterface } from 'slate-dom' /** * A React and DOM-specific version of the `Editor` interface. */ -export interface ReactEditor extends DOMEditor {} +export interface ReactEditor extends DOMEditor { + /** + * Determines the chunk size used by the children chunking optimization. If + * null is returned (which is the default), the chunking optimization is + * disabled. + */ + getChunkSize: (node: Ancestor) => number | null +} export interface ReactEditorInterface extends DOMEditorInterface {} diff --git a/packages/slate-react/src/plugin/with-react.ts b/packages/slate-react/src/plugin/with-react.ts index 033dfd07e..b8258e1a8 100644 --- a/packages/slate-react/src/plugin/with-react.ts +++ b/packages/slate-react/src/plugin/with-react.ts @@ -1,8 +1,9 @@ import ReactDOM from 'react-dom' -import { BaseEditor } from 'slate' +import { BaseEditor, Node } from 'slate' import { withDOM } from 'slate-dom' import { ReactEditor } from './react-editor' import { REACT_MAJOR_VERSION } from '../utils/environment' +import { getChunkTreeForNode } from '../chunking' /** * `withReact` adds React and DOM specific behaviors to the editor. @@ -20,7 +21,9 @@ export const withReact = ( e = withDOM(e, clipboardFormatKey) - const { onChange } = e + const { onChange, apply } = e + + e.getChunkSize = () => null e.onChange = options => { // COMPAT: React < 18 doesn't batch `setState` hook calls, which means @@ -38,5 +41,24 @@ export const withReact = ( }) } + // On move_node, if the chunking optimization is enabled for the parent of the + // node being moved, add the moved node to the movedNodeKeys set of the + // parent's chunk tree. + e.apply = operation => { + if (operation.type === 'move_node') { + const parent = Node.parent(e, operation.path) + const chunking = !!e.getChunkSize(parent) + + if (chunking) { + const node = Node.get(e, operation.path) + const chunkTree = getChunkTreeForNode(e, parent) + const key = ReactEditor.findKey(e, node) + chunkTree.movedNodeKeys.add(key) + } + } + + apply(operation) + } + return e } diff --git a/packages/slate-react/test/chunking.spec.ts b/packages/slate-react/test/chunking.spec.ts new file mode 100644 index 000000000..c8c2ed125 --- /dev/null +++ b/packages/slate-react/test/chunking.spec.ts @@ -0,0 +1,953 @@ +import { + Descendant, + Editor, + Element, + Node, + Transforms, + createEditor, +} from 'slate' +import { Key } from 'slate-dom' +import { ReactEditor, withReact } from '../src' +import { + Chunk, + ChunkAncestor, + ChunkDescendant, + ChunkLeaf, + ChunkNode, + ChunkTree, + KEY_TO_CHUNK_TREE, + getChunkTreeForNode, +} from '../src/chunking' +import { ReconcileOptions } from '../src/chunking/reconcile-children' + +const block = (text: string): Element => ({ children: [{ text }] }) + +const blocks = (count: number) => + Array.from( + { + length: count, + }, + (_, i) => block(i.toString()) + ) + +const reconcileEditor = ( + editor: ReactEditor, + options: Omit = {} +) => + getChunkTreeForNode(editor, editor, { + reconcile: { + chunkSize: 3, + debug: true, + ...options, + }, + }) + +type TreeShape = string | TreeShape[] + +const getTreeShape = (chunkNode: ChunkNode): TreeShape => { + if (chunkNode.type === 'leaf') { + return Node.string(chunkNode.node) + } + + return chunkNode.children.map(getTreeShape) +} + +const getChildrenAndTreeForShape = ( + editor: ReactEditor, + treeShape: TreeShape[] +): { children: Descendant[]; chunkTree: ChunkTree } => { + const children: Descendant[] = [] + + const shapeToNode = ( + ts: TreeShape, + parent: ChunkAncestor + ): ChunkDescendant => { + if (Array.isArray(ts)) { + const chunk: Chunk = { + type: 'chunk', + key: new Key(), + parent, + children: [], + } + + chunk.children = ts.map(child => shapeToNode(child, chunk)) + + return chunk + } + + const node = block(ts) + const index = children.length + children.push(node) + + return { + type: 'leaf', + key: ReactEditor.findKey(editor, node), + node, + index, + } + } + + const chunkTree: ChunkTree = { + type: 'root', + modifiedChunks: new Set(), + movedNodeKeys: new Set(), + children: [], + } + + chunkTree.children = treeShape.map(child => shapeToNode(child, chunkTree)) + + return { children, chunkTree } +} + +const withChunking = (editor: ReactEditor) => { + editor.getChunkSize = node => (Editor.isEditor(node) ? 3 : null) + return editor +} + +const createEditorWithShape = (treeShape: TreeShape[]) => { + const editor = withChunking(withReact(createEditor())) + const { children, chunkTree } = getChildrenAndTreeForShape(editor, treeShape) + editor.children = children + const key = ReactEditor.findKey(editor, editor) + KEY_TO_CHUNK_TREE.set(key, chunkTree) + return editor +} + +// https://stackoverflow.com/a/29450606 +const createPRNG = (seed: number) => { + const mask = 0xffffffff + let m_w = (123456789 + seed) & mask + let m_z = (987654321 - seed) & mask + + return () => { + m_z = (36969 * (m_z & 65535) + (m_z >>> 16)) & mask + m_w = (18000 * (m_w & 65535) + (m_w >>> 16)) & mask + + let result = ((m_z << 16) + (m_w & 65535)) >>> 0 + result /= 4294967296 + return result + } +} + +describe('getChunkTreeForNode', () => { + describe('chunking initial value', () => { + const getShapeForInitialCount = (count: number) => { + const editor = withChunking(withReact(createEditor())) + editor.children = blocks(count) + const chunkTree = reconcileEditor(editor) + return getTreeShape(chunkTree) + } + + it('returns empty tree for 0 children', () => { + expect(getShapeForInitialCount(0)).toEqual([]) + }) + + it('returns flat tree for 1 child', () => { + expect(getShapeForInitialCount(1)).toEqual(['0']) + }) + + it('returns flat tree for 3 children', () => { + expect(getShapeForInitialCount(3)).toEqual(['0', '1', '2']) + }) + + it('returns 1 layer of chunking for 4 children', () => { + expect(getShapeForInitialCount(4)).toEqual([['0', '1', '2'], ['3']]) + }) + + it('returns 1 layer of chunking for 9 children', () => { + expect(getShapeForInitialCount(9)).toEqual([ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ]) + }) + + it('returns 2 layers of chunking for 10 children', () => { + expect(getShapeForInitialCount(10)).toEqual([ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [['9']], + ]) + }) + + it('returns 2 layers of chunking for 27 children', () => { + expect(getShapeForInitialCount(27)).toEqual([ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [ + ['18', '19', '20'], + ['21', '22', '23'], + ['24', '25', '26'], + ], + ]) + }) + + it('returns 3 layers of chunking for 28 children', () => { + expect(getShapeForInitialCount(28)).toEqual([ + [ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [ + ['18', '19', '20'], + ['21', '22', '23'], + ['24', '25', '26'], + ], + ], + [[['27']]], + ]) + }) + + it('calls onInsert for initial children', () => { + const editor = withChunking(withReact(createEditor())) + editor.children = blocks(3) + + const onInsert = jest.fn() + reconcileEditor(editor, { onInsert }) + + expect(onInsert.mock.calls).toEqual([ + [editor.children[0], 0], + [editor.children[1], 1], + [editor.children[2], 2], + ]) + }) + + it('sets the index of each chunk leaf', () => { + const editor = withChunking(withReact(createEditor())) + editor.children = blocks(9) + + const chunkTree = reconcileEditor(editor) + const chunks = chunkTree.children as Chunk[] + const leaves = chunks.map(chunk => chunk.children) + + expect(leaves).toMatchObject([ + [{ index: 0 }, { index: 1 }, { index: 2 }], + [{ index: 3 }, { index: 4 }, { index: 5 }], + [{ index: 6 }, { index: 7 }, { index: 8 }], + ]) + }) + }) + + describe('inserting nodes', () => { + describe('in empty editor', () => { + it('inserts a single node', () => { + const editor = createEditorWithShape([]) + Transforms.insertNodes(editor, block('x'), { at: [0] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['x']) + }) + + it('inserts 27 nodes with 2 layers of chunking', () => { + const editor = createEditorWithShape([]) + Transforms.insertNodes(editor, blocks(27), { at: [0] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [ + ['18', '19', '20'], + ['21', '22', '23'], + ['24', '25', '26'], + ], + ]) + }) + + it('inserts 28 nodes with 3 layers of chunking', () => { + const editor = createEditorWithShape([]) + Transforms.insertNodes(editor, blocks(28), { at: [0] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + [ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [ + ['18', '19', '20'], + ['21', '22', '23'], + ['24', '25', '26'], + ], + ], + [[['27']]], + ]) + }) + + it('inserts nodes one by one', () => { + const editor = createEditorWithShape([]) + let chunkTree: ChunkTree + + blocks(31).forEach((node, i) => { + Transforms.insertNodes(editor, node, { at: [i] }) + chunkTree = reconcileEditor(editor) + }) + + expect(getTreeShape(chunkTree!)).toEqual([ + '0', + '1', + '2', + ['3', '4', '5'], + ['6', '7', '8'], + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ['18', '19', '20'], + [ + ['21', '22', '23'], + ['24', '25', '26'], + ['27', '28', '29'], + ], + [['30']], + ]) + }) + + it('inserts nodes one by one in reverse order', () => { + const editor = createEditorWithShape([]) + let chunkTree: ChunkTree + + blocks(31) + .reverse() + .forEach(node => { + Transforms.insertNodes(editor, node, { at: [0] }) + chunkTree = reconcileEditor(editor) + }) + + expect(getTreeShape(chunkTree!)).toEqual([ + [['0']], + [ + ['1', '2', '3'], + ['4', '5', '6'], + ['7', '8', '9'], + ], + ['10', '11', '12'], + ['13', '14', '15'], + ['16', '17', '18'], + ['19', '20', '21'], + ['22', '23', '24'], + ['25', '26', '27'], + '28', + '29', + '30', + ]) + }) + }) + + describe('at end of editor', () => { + it('inserts a single node at the top level', () => { + const editor = createEditorWithShape(['0', ['1', '2', ['3', '4', '5']]]) + Transforms.insertNodes(editor, block('x'), { at: [6] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + '0', + ['1', '2', ['3', '4', '5']], + [['x']], + ]) + }) + + it('inserts a single node into a chunk', () => { + const editor = createEditorWithShape(['0', ['1', ['2', '3', '4']]]) + Transforms.insertNodes(editor, block('x'), { at: [5] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + '0', + ['1', ['2', '3', '4'], ['x']], + ]) + }) + + it('inserts a single node into a nested chunk', () => { + const editor = createEditorWithShape(['0', ['1', '2', ['3', '4']]]) + Transforms.insertNodes(editor, block('x'), { at: [5] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + '0', + ['1', '2', ['3', '4', 'x']], + ]) + }) + + it('inserts 25 nodes after 2 nodes with 2 layers of chunking', () => { + const editor = createEditorWithShape(['a', 'b']) + Transforms.insertNodes(editor, blocks(25), { at: [2] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + 'a', + 'b', + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [['18', '19', '20'], ['21', '22', '23'], ['24']], + ]) + }) + + it('inserts 25 nodes after 3 nodes with 3 layers of chunking', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(25), { at: [3] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + 'a', + 'b', + 'c', + [ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [ + ['9', '10', '11'], + ['12', '13', '14'], + ['15', '16', '17'], + ], + [['18', '19', '20'], ['21', '22', '23'], ['24']], + ], + ]) + }) + + it('inserts many nodes at the ends of multiple nested chunks', () => { + const editor = createEditorWithShape(['a', ['b', ['c']]]) + Transforms.insertNodes(editor, blocks(12), { at: [3] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + 'a', + ['b', ['c', '0', '1'], ['2']], + [ + ['3', '4', '5'], + ['6', '7', '8'], + ['9', '10', '11'], + ], + ]) + }) + + it('calls onInsert for inserted nodes', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(2), { at: [3] }) + + const onInsert = jest.fn() + reconcileEditor(editor, { onInsert }) + + expect(onInsert.mock.calls).toEqual([ + [editor.children[3], 3], + [editor.children[4], 4], + ]) + }) + + it('sets the index of inserted leaves', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(2), { at: [3] }) + + const chunkTree = reconcileEditor(editor) + const chunk = chunkTree.children[3] as Chunk + + expect(chunk.children).toMatchObject([{ index: 3 }, { index: 4 }]) + }) + }) + + describe('at start of editor', () => { + it('inserts a single node at the top level', () => { + const editor = createEditorWithShape(['0', '1']) + Transforms.insertNodes(editor, block('x'), { at: [0] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['x', '0', '1']) + }) + + it('inserts many nodes at the starts of multiple nested chunks', () => { + const editor = createEditorWithShape([[['a'], 'b'], 'c']) + Transforms.insertNodes(editor, blocks(12), { at: [0] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7', '8'], + ], + [['9'], ['10', '11', 'a'], 'b'], + 'c', + ]) + }) + }) + + describe('in the middle of editor', () => { + describe('at the top level', () => { + it('inserts a single node', () => { + const editor = createEditorWithShape(['0', '1']) + Transforms.insertNodes(editor, block('x'), { at: [1] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual(['0', 'x', '1']) + }) + + it('inserts nodes at the start of subsequent sibling chunks', () => { + const editor = createEditorWithShape(['a', [['b', 'c'], 'd'], 'e']) + Transforms.insertNodes(editor, blocks(3), { at: [1] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + 'a', + [['0']], + [['1'], ['2', 'b', 'c'], 'd'], + 'e', + ]) + }) + + it('calls onInsert for inserted nodes', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(2), { at: [1] }) + + const onInsert = jest.fn() + reconcileEditor(editor, { onInsert }) + + expect(onInsert.mock.calls).toEqual([ + [editor.children[1], 1], + [editor.children[2], 2], + ]) + }) + + it('calls onIndexChange for subsequent nodes', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(2), { at: [1] }) + + const onIndexChange = jest.fn() + reconcileEditor(editor, { onIndexChange }) + + expect(onIndexChange.mock.calls).toEqual([ + [editor.children[3], 3], + [editor.children[4], 4], + ]) + }) + + it('updates the index of subsequent leaves', () => { + const editor = createEditorWithShape(['a', 'b', 'c']) + Transforms.insertNodes(editor, blocks(3), { at: [1] }) + + const chunkTree = reconcileEditor(editor) + const subsequentLeaves = chunkTree.children.slice(2) + + expect(subsequentLeaves).toMatchObject([{ index: 4 }, { index: 5 }]) + }) + }) + + describe('in the middle of a chunk', () => { + it('inserts a single node', () => { + const editor = createEditorWithShape([[['0', '1']]]) + Transforms.insertNodes(editor, block('x'), { at: [1] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual([[['0', 'x', '1']]]) + }) + + it('inserts 8 nodes between 2 nodes', () => { + const editor = createEditorWithShape([[['a', 'b']]]) + Transforms.insertNodes(editor, blocks(8), { at: [1] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + [ + [ + 'a', + [ + ['0', '1', '2'], + ['3', '4', '5'], + ['6', '7'], + ], + 'b', + ], + ], + ]) + }) + + it('inserts nodes at the start of subsequent sibling chunks', () => { + const editor = createEditorWithShape([['a', [['b', 'c'], 'd'], 'e']]) + Transforms.insertNodes(editor, blocks(3), { at: [1] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + ['a', [['0']], [['1'], ['2', 'b', 'c'], 'd'], 'e'], + ]) + }) + }) + + describe('at the end of a chunk', () => { + it('inserts 2 nodes in 2 adjacent shallow chunks', () => { + const editor = createEditorWithShape([['a', 'b'], ['c']]) + Transforms.insertNodes(editor, blocks(2), { at: [2] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + ['a', 'b', '0'], + ['1', 'c'], + ]) + }) + + it('inserts nodes in many adjacent nested chunks', () => { + const editor = createEditorWithShape([ + [ + ['a', ['b', ['c']]], + [[['d'], 'e'], 'f'], + ], + ]) + + Transforms.insertNodes(editor, blocks(17), { at: [3] }) + const chunkTree = reconcileEditor(editor) + + expect(getTreeShape(chunkTree)).toEqual([ + [ + ['a', ['b', ['c', '0', '1'], ['2']], [['3']]], + [ + [ + ['4', '5', '6'], + ['7', '8', '9'], + ['10', '11', '12'], + ], + ], + [[['13']], [['14'], ['15', '16', 'd'], 'e'], 'f'], + ], + ]) + }) + }) + }) + }) + + describe('removing nodes', () => { + it('removes a node', () => { + const editor = createEditorWithShape(['0', [['1']], '2']) + Transforms.removeNodes(editor, { at: [1] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', '2']) + }) + + it('removes multiple consecutive nodes', () => { + const editor = createEditorWithShape(['0', ['1', '2', '3'], '4']) + Transforms.removeNodes(editor, { at: [3] }) + Transforms.removeNodes(editor, { at: [2] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', ['1'], '4']) + }) + + it('removes multiple non-consecutive nodes', () => { + const editor = createEditorWithShape(['0', ['1', '2', '3'], '4']) + Transforms.removeNodes(editor, { at: [3] }) + Transforms.removeNodes(editor, { at: [1] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', ['2'], '4']) + }) + + it('calls onIndexChange for subsequent nodes', () => { + const editor = createEditorWithShape(['a', 'b', 'c', 'd']) + Transforms.removeNodes(editor, { at: [1] }) + + const onIndexChange = jest.fn() + reconcileEditor(editor, { onIndexChange }) + + expect(onIndexChange.mock.calls).toEqual([ + [editor.children[1], 1], + [editor.children[2], 2], + ]) + }) + + it('updates the index of subsequent leaves', () => { + const editor = createEditorWithShape(['a', 'b', 'c', 'd']) + Transforms.removeNodes(editor, { at: [1] }) + + const chunkTree = reconcileEditor(editor) + const subsequentLeaves = chunkTree.children.slice(1) + + expect(subsequentLeaves).toMatchObject([{ index: 1 }, { index: 2 }]) + }) + }) + + describe('removing and inserting nodes', () => { + it('removes and inserts a node from the start', () => { + const editor = createEditorWithShape(['0', [['1']], '2']) + Transforms.removeNodes(editor, { at: [0] }) + Transforms.insertNodes(editor, block('x'), { at: [0] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual([[['x', '1']], '2']) + }) + + it('removes and inserts a node from the middle', () => { + const editor = createEditorWithShape(['0', [['1']], '2']) + Transforms.removeNodes(editor, { at: [1] }) + Transforms.insertNodes(editor, block('x'), { at: [1] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', 'x', '2']) + }) + + it('removes and inserts a node from the end', () => { + const editor = createEditorWithShape(['0', [['1']], '2']) + Transforms.removeNodes(editor, { at: [2] }) + Transforms.insertNodes(editor, block('x'), { at: [2] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', [['1', 'x']]]) + }) + + it('removes 2 nodes and inserts 1 node', () => { + const editor = createEditorWithShape(['0', ['1', '2'], '2']) + Transforms.removeNodes(editor, { at: [2] }) + Transforms.removeNodes(editor, { at: [1] }) + Transforms.insertNodes(editor, block('x'), { at: [1] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', 'x', '2']) + }) + + it('removes 1 nodes and inserts 2 node', () => { + const editor = createEditorWithShape(['0', ['1'], '2']) + Transforms.removeNodes(editor, { at: [1] }) + Transforms.insertNodes(editor, block('x'), { at: [1] }) + Transforms.insertNodes(editor, block('y'), { at: [2] }) + const chunkTree = reconcileEditor(editor) + expect(getTreeShape(chunkTree)).toEqual(['0', ['x', 'y'], '2']) + }) + + it('calls onIndexChange for nodes until insertions equal removals', () => { + const editor = createEditorWithShape([ + 'a', + // Insert 2 here + 'b', + 'c', + 'd', // Remove + 'e', + 'f', + 'g', // Remove + 'h', + ]) + + Transforms.removeNodes(editor, { at: [6] }) + Transforms.removeNodes(editor, { at: [3] }) + Transforms.insertNodes(editor, blocks(2), { at: [1] }) + + const onIndexChange = jest.fn() + reconcileEditor(editor, { onIndexChange }) + + expect(onIndexChange.mock.calls).toEqual([ + [editor.children[3], 3], + [editor.children[4], 4], + [editor.children[5], 5], + [editor.children[6], 6], + ]) + }) + }) + + describe('updating nodes', () => { + it('replaces updated Slate nodes in the chunk tree', () => { + const editor = createEditorWithShape(['0', ['1'], '2']) + Transforms.setNodes(editor, { updated: true } as any, { at: [1] }) + + const chunkTree = reconcileEditor(editor) + const chunk = chunkTree.children[1] as Chunk + const leaf = chunk.children[0] as ChunkLeaf + + expect(leaf.node).toMatchObject({ updated: true }) + }) + + it('invalidates ancestor chunks of updated Slate nodes', () => { + const editor = createEditorWithShape(['0', [['1']], '2']) + Transforms.insertText(editor, 'x', { at: [1, 0] }) + + const chunkTree = reconcileEditor(editor) + const outerChunk = chunkTree.children[1] as Chunk + const innerChunk = outerChunk.children[0] + + expect(getTreeShape(chunkTree)).toEqual(['0', [['x']], '2']) + + expect(chunkTree.modifiedChunks).toEqual( + new Set([outerChunk, innerChunk]) + ) + }) + + it('calls onUpdate for updated Slate nodes', () => { + const editor = createEditorWithShape(['0', '1', '2', '3']) + Transforms.setNodes(editor, { updated: true } as any, { at: [1] }) + Transforms.setNodes(editor, { updated: true } as any, { at: [2] }) + + const onUpdate = jest.fn() + reconcileEditor(editor, { onUpdate }) + + expect(onUpdate.mock.calls).toEqual([ + [editor.children[1], 1], + [editor.children[2], 2], + ]) + }) + }) + + describe('moving nodes', () => { + it('moves a node down', () => { + const editor = createEditorWithShape([['0'], ['1'], ['2'], ['3'], ['4']]) + + // Move 1 to after 3 + Transforms.moveNodes(editor, { at: [1], to: [3] }) + + const onInsert = jest.fn() + const onIndexChange = jest.fn() + const chunkTree = reconcileEditor(editor, { onInsert, onIndexChange }) + + expect(getTreeShape(chunkTree)).toEqual([['0'], ['2'], ['3', '1'], ['4']]) + + expect(onInsert.mock.calls).toEqual([[editor.children[3], 3]]) + + expect(onIndexChange.mock.calls).toEqual([ + [editor.children[1], 1], + [editor.children[2], 2], + ]) + + expect(chunkTree.movedNodeKeys.size).toBe(0) + }) + + it('moves a node up', () => { + const editor = createEditorWithShape([['0'], ['1'], ['2'], ['3'], ['4']]) + + // Move 3 to after 0 + Transforms.moveNodes(editor, { at: [3], to: [1] }) + + const onInsert = jest.fn() + const onIndexChange = jest.fn() + const chunkTree = reconcileEditor(editor, { onInsert, onIndexChange }) + + expect(getTreeShape(chunkTree)).toEqual([['0', '3'], ['1'], ['2'], ['4']]) + + expect(onInsert.mock.calls).toEqual([[editor.children[1], 1]]) + + expect(onIndexChange.mock.calls).toEqual([ + [editor.children[2], 2], + [editor.children[3], 3], + ]) + + expect(chunkTree.movedNodeKeys.size).toBe(0) + }) + }) + + describe('manual rerendering', () => { + it('invalidates specific child indices', () => { + const editor = createEditorWithShape([ + ['0'], + ['1', ['2'], '3'], + ['4'], + '5', + ]) + + reconcileEditor(editor) + + const chunkTree = reconcileEditor(editor, { rerenderChildren: [2, 4] }) + const twoOuterChunk = chunkTree.children[1] as Chunk + const twoInnerChunk = twoOuterChunk.children[1] + const fourChunk = chunkTree.children[2] + + expect(chunkTree.modifiedChunks).toEqual( + new Set([twoOuterChunk, twoInnerChunk, fourChunk]) + ) + }) + }) + + describe('random testing', () => { + it('remains correct after random operations', () => { + // Hard code a value here to reproduce a test failure + const seed = Math.floor(10000000 * Math.random()) + const random = createPRNG(seed) + + const duration = 250 + const startTime = performance.now() + const endTime = startTime + duration + let iteration = 0 + + try { + while (performance.now() < endTime) { + iteration++ + + const editor = withChunking(withReact(createEditor())) + + const randomPosition = (includeEnd: boolean) => + Math.floor( + random() * (editor.children.length + (includeEnd ? 1 : 0)) + ) + + for (let i = 0; i < 30; i++) { + const randomValue = random() + + if (randomValue < 0.33) { + reconcileEditor(editor) + } else if (randomValue < 0.66) { + Transforms.insertNodes(editor, block(i.toString()), { + at: [randomPosition(true)], + }) + } else if (randomValue < 0.8) { + if (editor.children.length > 0) { + Transforms.removeNodes(editor, { at: [randomPosition(false)] }) + } + } else { + if (editor.children.length > 0) { + Transforms.setNodes(editor, { updated: i } as any, { + at: [randomPosition(false)], + }) + } + } + } + + const chunkTree = reconcileEditor(editor) + const chunkTreeSlateNodes: Descendant[] = [] + + const flattenTree = (node: ChunkNode) => { + if (node.type === 'leaf') { + chunkTreeSlateNodes.push(node.node) + } else { + node.children.forEach(flattenTree) + } + } + + flattenTree(chunkTree) + + expect(chunkTreeSlateNodes).toEqual(editor.children) + } + } catch (e) { + // eslint-disable-next-line no-console + console.warn( + `Random testing encountered an error or test failure on iteration ${iteration}. To reproduce this failure reliably, use the random seed: ${seed}` + ) + throw e + } + }) + }) +}) diff --git a/packages/slate-react/test/decorations.spec.tsx b/packages/slate-react/test/decorations.spec.tsx new file mode 100644 index 000000000..c68ecc467 --- /dev/null +++ b/packages/slate-react/test/decorations.spec.tsx @@ -0,0 +1,672 @@ +import React from 'react' +import { + DecoratedRange, + Node, + NodeEntry, + Path, + createEditor as slateCreateEditor, + Editor, + Text, + Transforms, +} from 'slate' +import { act, render } from '@testing-library/react' +import { + Slate, + withReact, + Editable, + RenderLeafProps, + ReactEditor, +} from '../src' + +const renderLeaf = ({ leaf, attributes, children }: RenderLeafProps) => { + const decorations = Object.keys(Node.extractProps(leaf)).sort() + + return ( + + {children} + + ) +} + +interface DecorateConfig { + path: Path + decorations: (node: Node) => (DecoratedRange & Record)[] +} + +const decoratePaths = + (editor: ReactEditor, configs: DecorateConfig[]) => + ([node, path]: NodeEntry): DecoratedRange[] => { + // Validate that decorate was called with a node matching the path + if (Node.get(editor, path) !== node) { + throw new Error('decorate was called with an incorrect node entry') + } + + const matchingConfig = configs.find(({ path: p }) => Path.equals(path, p)) + if (!matchingConfig) return [] + + return matchingConfig.decorations(node) + } + +const getDecoratedLeaves = ( + editor: ReactEditor, + path: Path +): { text: string; decorations: string[] }[] => { + const text = ReactEditor.toDOMNode(editor, Node.leaf(editor, path)) + const leaves = Array.from(text.children) as HTMLElement[] + + return leaves.map(leaf => ({ + text: leaf.textContent!, + decorations: JSON.parse(leaf.dataset.decorations!), + })) +} + +// Pad children arrays with additional nodes to test whether decorations work +// correctly on chunked children +const otherNodes = () => + Array.from({ length: 7 }, () => ({ children: [{ text: '' }] })) + +describe('decorations', () => { + const withChunking = (chunking: boolean) => { + const createEditor = () => { + const editor = withReact(slateCreateEditor()) + + if (chunking) { + editor.getChunkSize = () => 2 + } + + return editor + } + + describe('decorating initial value', () => { + it('decorates part of a single text node', () => { + const editor = createEditor() + + const initialValue = [ + { children: [{ text: 'Hello world!' }] }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0, 0], + decorations: () => [ + { + anchor: { path: [0, 0], offset: 6 }, + focus: { path: [0, 0], offset: 11 }, + bold: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'Hello ', decorations: [] }, + { text: 'world', decorations: ['bold'] }, + { text: '!', decorations: [] }, + ]) + }) + + it('decorates an entire text node', () => { + const editor = createEditor() + + const initialValue = [ + { + children: [{ text: 'before' }, { text: 'bold' }, { text: 'after' }], + }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0, 1], + decorations: () => [ + { + ...Editor.range(editor, [0, 1]), + bold: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'before', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 1])).toEqual([ + { text: 'bold', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 2])).toEqual([ + { text: 'after', decorations: [] }, + ]) + }) + + it('applies multiple overlapping decorations in a single text node', () => { + const editor = createEditor() + + const initialValue = [ + { children: [{ text: 'Hello world!' }] }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0, 0], + decorations: () => [ + { + anchor: { path: [0, 0], offset: 0 }, + focus: { path: [0, 0], offset: 11 }, + bold: true, + }, + { + anchor: { path: [0, 0], offset: 6 }, + focus: { path: [0, 0], offset: 12 }, + italic: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'Hello ', decorations: ['bold'] }, + { text: 'world', decorations: ['bold', 'italic'] }, + { text: '!', decorations: ['italic'] }, + ]) + }) + + it('passes down decorations from the parent element', () => { + const editor = createEditor() + + const initialValue = [ + { + children: [ + { text: 'before' }, + { text: 'middle' }, + { text: 'after' }, + ], + }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0], + decorations: () => [ + { + anchor: { path: [0, 0], offset: 2 }, + focus: { path: [0, 2], offset: 2 }, + bold: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'be', decorations: [] }, + { text: 'fore', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 1])).toEqual([ + { text: 'middle', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 2])).toEqual([ + { text: 'af', decorations: ['bold'] }, + { text: 'ter', decorations: [] }, + ]) + }) + + it('passes decorations down from the editor', () => { + const editor = createEditor() + + const initialValue = [ + { + children: [{ text: '0.0' }, { text: '0.1' }, { text: '0.2' }], + }, + { + children: [{ text: '1.0' }], + }, + { + children: [{ text: '2.0' }], + }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [], + decorations: () => [ + { + anchor: { path: [0, 1], offset: 0 }, + focus: { path: [1, 0], offset: 3 }, + bold: true, + }, + ], + }, + { + path: [0], + decorations: () => [ + { + ...Editor.range(editor, [0, 2]), + italic: true, + }, + ], + }, + { + path: [1, 0], + decorations: () => [ + { + ...Editor.range(editor, [1, 0]), + underline: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: '0.0', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 1])).toEqual([ + { text: '0.1', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 2])).toEqual([ + { text: '0.2', decorations: ['bold', 'italic'] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 0])).toEqual([ + { text: '1.0', decorations: ['bold', 'underline'] }, + ]) + + expect(getDecoratedLeaves(editor, [2, 0])).toEqual([ + { text: '2.0', decorations: [] }, + ]) + }) + }) + + describe('redecorating', () => { + it('redecorates all nodes when the decorate function changes', () => { + const editor = createEditor() + + const initialValue = [ + { + children: [{ text: '0.0' }, { text: '0.1' }, { text: '0.2' }], + }, + { + children: [{ text: '1.0' }, { text: '1.1' }, { text: '1.2' }], + }, + ...otherNodes(), + ] + + const decorate1 = decoratePaths(editor, [ + { + path: [], + decorations: () => [ + { + ...Editor.range(editor, [0, 0]), + bold: true, + }, + { + ...Editor.range(editor, [0, 1]), + italic: true, + }, + ], + }, + { + path: [1, 0], + decorations: () => [ + { + ...Editor.range(editor, [1, 0]), + bold: true, + }, + ], + }, + { + path: [1, 1], + decorations: () => [ + { + ...Editor.range(editor, [1, 1]), + italic: true, + }, + ], + }, + ]) + + const decorate2 = decoratePaths(editor, [ + { + path: [0], + decorations: () => [ + { + ...Editor.range(editor, [0, 1]), + underline: true, + }, + { + ...Editor.range(editor, [0, 2]), + bold: true, + }, + ], + }, + { + path: [1, 1], + decorations: () => [ + { + ...Editor.range(editor, [1, 1]), + underline: true, + }, + ], + }, + { + path: [1, 2], + decorations: () => [ + { + ...Editor.range(editor, [1, 2]), + bold: true, + }, + ], + }, + ]) + + const { rerender } = render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: '0.0', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 1])).toEqual([ + { text: '0.1', decorations: ['italic'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 2])).toEqual([ + { text: '0.2', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 0])).toEqual([ + { text: '1.0', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 1])).toEqual([ + { text: '1.1', decorations: ['italic'] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 2])).toEqual([ + { text: '1.2', decorations: [] }, + ]) + + rerender( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: '0.0', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 1])).toEqual([ + { text: '0.1', decorations: ['underline'] }, + ]) + + expect(getDecoratedLeaves(editor, [0, 2])).toEqual([ + { text: '0.2', decorations: ['bold'] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 0])).toEqual([ + { text: '1.0', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 1])).toEqual([ + { text: '1.1', decorations: ['underline'] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 2])).toEqual([ + { text: '1.2', decorations: ['bold'] }, + ]) + }) + + it('redecorates undecorated nodes when they change', async () => { + const editor = createEditor() + + const initialValue = [ + { children: [{ text: 'The quick brown fox' }] }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0, 0], + decorations: node => + Text.isText(node) && node.text.includes('box') + ? [ + { + ...Editor.range(editor, [0, 0]), + bold: true, + }, + ] + : [], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'The quick brown fox', decorations: [] }, + ]) + + await act(async () => { + Transforms.insertText(editor, 'b', { + at: { + anchor: { path: [0, 0], offset: 16 }, + focus: { path: [0, 0], offset: 17 }, + }, + }) + }) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'The quick brown box', decorations: ['bold'] }, + ]) + }) + + it('redecorates decorated nodes when they change', async () => { + const editor = createEditor() + + const initialValue = [ + { children: [{ text: 'The quick brown box' }] }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [0, 0], + decorations: node => + Text.isText(node) && node.text.includes('box') + ? [ + { + ...Editor.range(editor, [0, 0]), + bold: true, + }, + ] + : [], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'The quick brown box', decorations: ['bold'] }, + ]) + + await act(async () => { + Transforms.insertText(editor, 'f', { + at: { + anchor: { path: [0, 0], offset: 16 }, + focus: { path: [0, 0], offset: 17 }, + }, + }) + }) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'The quick brown fox', decorations: [] }, + ]) + }) + + it('passes down new decorations from changed ancestors', async () => { + const editor = createEditor() + + const initialValue = [ + { + children: [ + { children: [{ text: 'Hello world!' }] }, + ...otherNodes(), + ], + }, + ] + + const decorate = decoratePaths(editor, [ + { + path: [0], + decorations: node => + 'bold' in node + ? [ + { + ...Editor.range(editor, [0, 0, 0]), + bold: true, + }, + ] + : [], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0, 0])).toEqual([ + { text: 'Hello world!', decorations: [] }, + ]) + + await act(async () => { + Transforms.setNodes(editor, { bold: true } as any, { + at: [0], + }) + }) + + expect(getDecoratedLeaves(editor, [0, 0, 0])).toEqual([ + { text: 'Hello world!', decorations: ['bold'] }, + ]) + }) + + it('does not redecorate unchanged nodes when their paths change', async () => { + const editor = createEditor() + + const initialValue = [ + { children: [{ text: 'A' }] }, + { children: [{ text: 'B' }] }, + ...otherNodes(), + ] + + const decorate = decoratePaths(editor, [ + { + path: [1, 0], + decorations: () => [ + { + ...Editor.range(editor, [1, 0]), + bold: true, + }, + ], + }, + ]) + + render( + + + + ) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: 'A', decorations: [] }, + ]) + + expect(getDecoratedLeaves(editor, [1, 0])).toEqual([ + { text: 'B', decorations: ['bold'] }, + ]) + + await act(async () => { + Transforms.insertNodes( + editor, + { children: [{ text: '0' }] }, + { + at: [0], + } + ) + }) + + expect(getDecoratedLeaves(editor, [0, 0])).toEqual([ + { text: '0', decorations: [] }, + ]) + + // A does not become bold even though it now matches the decoration + expect(getDecoratedLeaves(editor, [1, 0])).toEqual([ + { text: 'A', decorations: [] }, + ]) + + // B remains bold even though it no longer matches the decoration + expect(getDecoratedLeaves(editor, [2, 0])).toEqual([ + { text: 'B', decorations: ['bold'] }, + ]) + }) + }) + } + + describe('without chunking', () => { + withChunking(false) + }) + + describe('with chunking', () => { + withChunking(true) + }) +}) diff --git a/packages/slate-react/test/react-editor.spec.tsx b/packages/slate-react/test/react-editor.spec.tsx index f7a2ede1b..8ffe5ab75 100644 --- a/packages/slate-react/test/react-editor.spec.tsx +++ b/packages/slate-react/test/react-editor.spec.tsx @@ -1,5 +1,5 @@ -import React, { useEffect } from 'react' -import { createEditor, Text, Transforms } from 'slate' +import React from 'react' +import { createEditor, Transforms } from 'slate' import { act, render } from '@testing-library/react' import { Slate, withReact, Editable, ReactEditor } from '../src' diff --git a/packages/slate-react/test/tsconfig.json b/packages/slate-react/test/tsconfig.json index 9e802d417..a9b230f88 100644 --- a/packages/slate-react/test/tsconfig.json +++ b/packages/slate-react/test/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "../../../config/typescript/tsconfig.json", + "compilerOptions": { + "types": ["@testing-library/jest-dom"] + }, "references": [{ "path": "../" }] } diff --git a/packages/slate-react/test/use-selected.spec.tsx b/packages/slate-react/test/use-selected.spec.tsx new file mode 100644 index 000000000..b59569e16 --- /dev/null +++ b/packages/slate-react/test/use-selected.spec.tsx @@ -0,0 +1,183 @@ +import React from 'react' +import { createEditor, Transforms } from 'slate' +import { render, act } from '@testing-library/react' +import { + Slate, + withReact, + Editable, + useSelected, + RenderElementProps, + ReactEditor, +} from '../src' + +let editor: ReactEditor +let elementSelectedRenders: Record + +const clearRenders = () => + Object.values(elementSelectedRenders).forEach(selectedRenders => { + if (selectedRenders) { + selectedRenders.length = 0 + } + }) + +const initialValue = () => [ + { + id: '0', + children: [ + { id: '0.0', children: [{ text: '' }] }, + { id: '0.1', children: [{ text: '' }] }, + { id: '0.2', children: [{ text: '' }] }, + ], + }, + { id: '1', children: [{ text: '' }] }, + { id: '2', children: [{ text: '' }] }, +] + +describe('useSelected', () => { + const withChunking = (chunking: boolean) => { + beforeEach(() => { + editor = withReact(createEditor()) + + if (chunking) { + editor.getChunkSize = () => 3 + } + + elementSelectedRenders = {} + + const renderElement = ({ + element, + attributes, + children, + }: RenderElementProps) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const selected = useSelected() + const { id } = element as any + + let selectedRenders = elementSelectedRenders[id] + + if (!selectedRenders) { + selectedRenders = [] + elementSelectedRenders[id] = selectedRenders + } + + selectedRenders.push(selected) + + return
{children}
+ } + + render( + + + + ) + }) + + it('returns false initially', () => { + expect(elementSelectedRenders).toEqual({ + '0': [false], + '0.0': [false], + '0.1': [false], + '0.2': [false], + '1': [false], + '2': [false], + }) + }) + + it('re-renders elements when it becomes true or false', async () => { + clearRenders() + + await act(async () => { + Transforms.select(editor, [0, 0]) + }) + + expect(elementSelectedRenders).toEqual({ + '0': [true], + '0.0': [true], + '0.1': [], + '0.2': [], + '1': [], + '2': [], + }) + + clearRenders() + + await act(async () => { + Transforms.select(editor, [2]) + }) + + expect(elementSelectedRenders).toEqual({ + '0': [false], + '0.0': [false], + '0.1': [], + '0.2': [], + '1': [], + '2': [true], + }) + }) + + it('returns true for elements in the middle of the selection', async () => { + clearRenders() + + await act(async () => { + Transforms.select(editor, { + anchor: { path: [2, 0], offset: 0 }, + focus: { path: [0, 1, 0], offset: 0 }, + }) + }) + + expect(elementSelectedRenders).toEqual({ + '0': [true], + '0.0': [], + '0.1': [true], + '0.2': [true], + '1': [true], + '2': [true], + }) + }) + + it('remains true when the path changes', async () => { + clearRenders() + + await act(async () => { + Transforms.select(editor, { path: [2, 0], offset: 0 }) + }) + + expect(elementSelectedRenders).toEqual({ + '0': [], + '0.0': [], + '0.1': [], + '0.2': [], + '1': [], + '2': [true], + }) + + clearRenders() + + await act(async () => { + Transforms.insertNodes( + editor, + { id: 'new', children: [{ text: '' }] } as any, + { at: [2] } + ) + }) + + expect(elementSelectedRenders).toEqual({ + '0': [], + '0.0': [], + '0.1': [], + '0.2': [], + '1': [], + new: [false], + '2': [], // Remains true, no rerender + }) + }) + } + + describe('without chunking', () => { + withChunking(false) + }) + + describe('with chunking', () => { + withChunking(true) + }) +}) diff --git a/packages/slate-react/test/use-slate-selector.test.tsx b/packages/slate-react/test/use-slate-selector.spec.tsx similarity index 84% rename from packages/slate-react/test/use-slate-selector.test.tsx rename to packages/slate-react/test/use-slate-selector.spec.tsx index 5cc1769ae..1b5a98db8 100644 --- a/packages/slate-react/test/use-slate-selector.test.tsx +++ b/packages/slate-react/test/use-slate-selector.spec.tsx @@ -1,14 +1,7 @@ -/* eslint-disable no-console */ -import React, { useEffect } from 'react' -import { createEditor, Editor, Text, Transforms } from 'slate' -import { act, render, renderHook } from '@testing-library/react' -import { - Slate, - withReact, - Editable, - ReactEditor, - useSlateSelector, -} from '../src' +import React from 'react' +import { createEditor, Transforms } from 'slate' +import { act, renderHook } from '@testing-library/react' +import { Slate, withReact, Editable, useSlateSelector } from '../src' import _ from 'lodash' describe('useSlateSelector', () => { diff --git a/packages/slate-react/test/use-slate.spec.tsx b/packages/slate-react/test/use-slate.spec.tsx new file mode 100644 index 000000000..1951849fa --- /dev/null +++ b/packages/slate-react/test/use-slate.spec.tsx @@ -0,0 +1,59 @@ +/* eslint-disable import/no-deprecated */ +import React from 'react' +import { Transforms, createEditor } from 'slate' +import { render, act } from '@testing-library/react' +import '@testing-library/jest-dom' +import { Slate, withReact, Editable, useSlateWithV } from '../src' + +describe('useSlateWithV', () => { + const ShowVersion = () => { + const { v } = useSlateWithV() + return <>V = {v} + } + + it('tracks a global `v` counter for the editor', async () => { + const editor = withReact(createEditor()) + const initialValue = [{ type: 'block', children: [{ text: 'test' }] }] + + const { getByText, rerender } = render( + + +

+ First: +

+

+ Second: +

+
+ ) + + expect(getByText('First: V = 0')).toBeInTheDocument() + expect(getByText('Second: V = 0')).toBeInTheDocument() + + await act(async () => { + Transforms.insertText(editor, '!', { at: { path: [0, 0], offset: 4 } }) + }) + + expect(getByText('First: V = 1')).toBeInTheDocument() + expect(getByText('Second: V = 1')).toBeInTheDocument() + + rerender( + + +

+ First: +

+

+ Second: +

+

+ Third: +

+
+ ) + + expect(getByText('First: V = 1')).toBeInTheDocument() + expect(getByText('Second: V = 1')).toBeInTheDocument() + expect(getByText('Third: V = 1')).toBeInTheDocument() + }) +}) diff --git a/packages/slate/src/interfaces/point.ts b/packages/slate/src/interfaces/point.ts index cb4acebbd..baccf3395 100644 --- a/packages/slate/src/interfaces/point.ts +++ b/packages/slate/src/interfaces/point.ts @@ -1,4 +1,3 @@ -import { produce } from 'immer' import { ExtendedType, Operation, Path, isObject } from '..' import { TextDirection } from '../types/types' @@ -99,81 +98,85 @@ export const Point: PointInterface = { op: Operation, options: PointTransformOptions = {} ): Point | null { - return produce(point, p => { - if (p === null) { - return null + if (point === null) { + return null + } + + const { affinity = 'forward' } = options + let { path, offset } = point + + switch (op.type) { + case 'insert_node': + case 'move_node': { + path = Path.transform(path, op, options)! + break } - const { affinity = 'forward' } = options - const { path, offset } = p - switch (op.type) { - case 'insert_node': - case 'move_node': { - p.path = Path.transform(path, op, options)! - break + case 'insert_text': { + if ( + Path.equals(op.path, path) && + (op.offset < offset || + (op.offset === offset && affinity === 'forward')) + ) { + offset += op.text.length } - case 'insert_text': { - if ( - Path.equals(op.path, path) && - (op.offset < offset || - (op.offset === offset && affinity === 'forward')) - ) { - p.offset += op.text.length - } + break + } - break + case 'merge_node': { + if (Path.equals(op.path, path)) { + offset += op.position } - case 'merge_node': { - if (Path.equals(op.path, path)) { - p.offset += op.position - } + path = Path.transform(path, op, options)! + break + } - p.path = Path.transform(path, op, options)! - break + case 'remove_text': { + if (Path.equals(op.path, path) && op.offset <= offset) { + offset -= Math.min(offset - op.offset, op.text.length) } - case 'remove_text': { - if (Path.equals(op.path, path) && op.offset <= offset) { - p.offset -= Math.min(offset - op.offset, op.text.length) - } + break + } - break + case 'remove_node': { + if (Path.equals(op.path, path) || Path.isAncestor(op.path, path)) { + return null } - case 'remove_node': { - if (Path.equals(op.path, path) || Path.isAncestor(op.path, path)) { + path = Path.transform(path, op, options)! + break + } + + case 'split_node': { + if (Path.equals(op.path, path)) { + if (op.position === offset && affinity == null) { return null - } + } else if ( + op.position < offset || + (op.position === offset && affinity === 'forward') + ) { + offset -= op.position - p.path = Path.transform(path, op, options)! - break + path = Path.transform(path, op, { + ...options, + affinity: 'forward', + })! + } + } else { + path = Path.transform(path, op, options)! } - case 'split_node': { - if (Path.equals(op.path, path)) { - if (op.position === offset && affinity == null) { - return null - } else if ( - op.position < offset || - (op.position === offset && affinity === 'forward') - ) { - p.offset -= op.position - - p.path = Path.transform(path, op, { - ...options, - affinity: 'forward', - })! - } - } else { - p.path = Path.transform(path, op, options)! - } - - break - } + break } - }) + + default: + return point + } + + return { path, offset } }, } diff --git a/packages/slate/src/interfaces/range.ts b/packages/slate/src/interfaces/range.ts index 4a6711cc9..034ef6e95 100644 --- a/packages/slate/src/interfaces/range.ts +++ b/packages/slate/src/interfaces/range.ts @@ -1,4 +1,3 @@ -import { produce } from 'immer' import { ExtendedType, Operation, Path, Point, PointEntry, isObject } from '..' import { RangeDirection } from '../types/types' @@ -220,47 +219,47 @@ export const Range: RangeInterface = { op: Operation, options: RangeTransformOptions = {} ): Range | null { - return produce(range, r => { - if (r === null) { - return null - } - const { affinity = 'inward' } = options - let affinityAnchor: 'forward' | 'backward' | null - let affinityFocus: 'forward' | 'backward' | null + if (range === null) { + return null + } - if (affinity === 'inward') { - // If the range is collapsed, make sure to use the same affinity to - // avoid the two points passing each other and expanding in the opposite - // direction - const isCollapsed = Range.isCollapsed(r) - if (Range.isForward(r)) { - affinityAnchor = 'forward' - affinityFocus = isCollapsed ? affinityAnchor : 'backward' - } else { - affinityAnchor = 'backward' - affinityFocus = isCollapsed ? affinityAnchor : 'forward' - } - } else if (affinity === 'outward') { - if (Range.isForward(r)) { - affinityAnchor = 'backward' - affinityFocus = 'forward' - } else { - affinityAnchor = 'forward' - affinityFocus = 'backward' - } + const { affinity = 'inward' } = options + let affinityAnchor: 'forward' | 'backward' | null + let affinityFocus: 'forward' | 'backward' | null + + if (affinity === 'inward') { + // If the range is collapsed, make sure to use the same affinity to + // avoid the two points passing each other and expanding in the opposite + // direction + const isCollapsed = Range.isCollapsed(range) + if (Range.isForward(range)) { + affinityAnchor = 'forward' + affinityFocus = isCollapsed ? affinityAnchor : 'backward' } else { - affinityAnchor = affinity - affinityFocus = affinity + affinityAnchor = 'backward' + affinityFocus = isCollapsed ? affinityAnchor : 'forward' } - const anchor = Point.transform(r.anchor, op, { affinity: affinityAnchor }) - const focus = Point.transform(r.focus, op, { affinity: affinityFocus }) - - if (!anchor || !focus) { - return null + } else if (affinity === 'outward') { + if (Range.isForward(range)) { + affinityAnchor = 'backward' + affinityFocus = 'forward' + } else { + affinityAnchor = 'forward' + affinityFocus = 'backward' } - - r.anchor = anchor - r.focus = focus + } else { + affinityAnchor = affinity + affinityFocus = affinity + } + const anchor = Point.transform(range.anchor, op, { + affinity: affinityAnchor, }) + const focus = Point.transform(range.focus, op, { affinity: affinityFocus }) + + if (!anchor || !focus) { + return null + } + + return { anchor, focus } }, } diff --git a/packages/slate/src/interfaces/transforms/general.ts b/packages/slate/src/interfaces/transforms/general.ts index 63f9d87e6..ad0fea4ee 100644 --- a/packages/slate/src/interfaces/transforms/general.ts +++ b/packages/slate/src/interfaces/transforms/general.ts @@ -1,4 +1,3 @@ -import { createDraft, finishDraft, isDraft } from 'immer' import { Ancestor, Descendant, @@ -22,224 +21,320 @@ export interface GeneralTransforms { transform: (editor: Editor, op: Operation) => void } -const applyToDraft = (editor: Editor, selection: Selection, op: Operation) => { - switch (op.type) { - case 'insert_node': { - const { path, node } = op - const parent = Node.parent(editor, path) - const index = path[path.length - 1] +const insertChildren = (xs: T[], index: number, ...newValues: T[]) => [ + ...xs.slice(0, index), + ...newValues, + ...xs.slice(index), +] - if (index > parent.children.length) { - throw new Error( - `Cannot apply an "insert_node" operation at path [${path}] because the destination is past the end of the node.` - ) - } +const replaceChildren = ( + xs: T[], + index: number, + removeCount: number, + ...newValues: T[] +) => [...xs.slice(0, index), ...newValues, ...xs.slice(index + removeCount)] - parent.children.splice(index, 0, node) +const removeChildren = replaceChildren - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } - } +/** + * Replace a descendant with a new node, replacing all ancestors + */ +const modifyDescendant = ( + editor: Editor, + path: Path, + f: (node: N) => N +) => { + if (path.length === 0) { + throw new Error('Cannot modify the editor') + } - break + const node = Node.get(editor, path) as N + const slicedPath = path.slice() + let modifiedNode: Node = f(node) + + while (slicedPath.length > 1) { + const index = slicedPath.pop()! + const ancestorNode = Node.get(editor, slicedPath) as Ancestor + + modifiedNode = { + ...ancestorNode, + children: replaceChildren(ancestorNode.children, index, 1, modifiedNode), } + } - case 'insert_text': { - const { path, offset, text } = op - if (text.length === 0) break - const node = Node.leaf(editor, path) - const before = node.text.slice(0, offset) - const after = node.text.slice(offset) - node.text = before + text + after + const index = slicedPath.pop()! + editor.children = replaceChildren(editor.children, index, 1, modifiedNode) +} - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } - } - - break - } - - case 'merge_node': { - const { path } = op - const node = Node.get(editor, path) - const prevPath = Path.previous(path) - const prev = Node.get(editor, prevPath) - const parent = Node.parent(editor, path) - const index = path[path.length - 1] - - if (Text.isText(node) && Text.isText(prev)) { - prev.text += node.text - } else if (!Text.isText(node) && !Text.isText(prev)) { - prev.children.push(...node.children) - } else { +/** + * Replace the children of a node, replacing all ancestors + */ +const modifyChildren = ( + editor: Editor, + path: Path, + f: (children: Descendant[]) => Descendant[] +) => { + if (path.length === 0) { + editor.children = f(editor.children) + } else { + modifyDescendant(editor, path, node => { + if (Text.isText(node)) { throw new Error( - `Cannot apply a "merge_node" operation at path [${path}] to nodes of different interfaces: ${Scrubber.stringify( + `Cannot get the element at path [${path}] because it refers to a leaf node: ${Scrubber.stringify( node - )} ${Scrubber.stringify(prev)}` + )}` ) } - parent.children.splice(index, 1) + return { ...node, children: f(node.children) } + }) + } +} - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } - } - - break +/** + * Replace a leaf, replacing all ancestors + */ +const modifyLeaf = (editor: Editor, path: Path, f: (leaf: Text) => Text) => + modifyDescendant(editor, path, node => { + if (!Text.isText(node)) { + throw new Error( + `Cannot get the leaf node at path [${path}] because it refers to a non-leaf node: ${Scrubber.stringify( + node + )}` + ) } - case 'move_node': { - const { path, newPath } = op + return f(node) + }) - if (Path.isAncestor(path, newPath)) { - throw new Error( - `Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.` - ) +// eslint-disable-next-line no-redeclare +export const GeneralTransforms: GeneralTransforms = { + transform(editor: Editor, op: Operation): void { + let transformSelection = false + + switch (op.type) { + case 'insert_node': { + const { path, node } = op + + modifyChildren(editor, Path.parent(path), children => { + const index = path[path.length - 1] + + if (index > children.length) { + throw new Error( + `Cannot apply an "insert_node" operation at path [${path}] because the destination is past the end of the node.` + ) + } + + return insertChildren(children, index, node) + }) + + transformSelection = true + break } - const node = Node.get(editor, path) - const parent = Node.parent(editor, path) - const index = path[path.length - 1] + case 'insert_text': { + const { path, offset, text } = op + if (text.length === 0) break - // This is tricky, but since the `path` and `newPath` both refer to - // the same snapshot in time, there's a mismatch. After either - // removing the original position, the second step's path can be out - // of date. So instead of using the `op.newPath` directly, we - // transform `op.path` to ascertain what the `newPath` would be after - // the operation was applied. - parent.children.splice(index, 1) - const truePath = Path.transform(path, op)! - const newParent = Node.get(editor, Path.parent(truePath)) as Ancestor - const newIndex = truePath[truePath.length - 1] + modifyLeaf(editor, path, node => { + const before = node.text.slice(0, offset) + const after = node.text.slice(offset) - newParent.children.splice(newIndex, 0, node) + return { + ...node, + text: before + text + after, + } + }) - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } + transformSelection = true + break } - break - } + case 'merge_node': { + const { path } = op + const index = path[path.length - 1] + const prevPath = Path.previous(path) + const prevIndex = prevPath[prevPath.length - 1] - case 'remove_node': { - const { path } = op - const index = path[path.length - 1] - const parent = Node.parent(editor, path) - parent.children.splice(index, 1) + modifyChildren(editor, Path.parent(path), children => { + const node = children[index] + const prev = children[prevIndex] + let newNode: Descendant - // Transform all the points in the value, but if the point was in the - // node that was removed we need to update the range or remove it. - if (selection) { - for (const [point, key] of Range.points(selection)) { - const result = Point.transform(point, op) - - if (selection != null && result != null) { - selection[key] = result + if (Text.isText(node) && Text.isText(prev)) { + newNode = { ...prev, text: prev.text + node.text } + } else if (!Text.isText(node) && !Text.isText(prev)) { + newNode = { ...prev, children: prev.children.concat(node.children) } } else { - let prev: NodeEntry | undefined - let next: NodeEntry | undefined + throw new Error( + `Cannot apply a "merge_node" operation at path [${path}] to nodes of different interfaces: ${Scrubber.stringify( + node + )} ${Scrubber.stringify(prev)}` + ) + } - for (const [n, p] of Node.texts(editor)) { - if (Path.compare(p, path) === -1) { - prev = [n, p] - } else { - next = [n, p] - break - } - } + return replaceChildren(children, prevIndex, 2, newNode) + }) - let preferNext = false - if (prev && next) { - if (Path.equals(next[1], path)) { - preferNext = !Path.hasPrevious(next[1]) - } else { - preferNext = - Path.common(prev[1], path).length < - Path.common(next[1], path).length - } - } + transformSelection = true + break + } - if (prev && !preferNext) { - point.path = prev[1] - point.offset = prev[0].text.length - } else if (next) { - point.path = next[1] - point.offset = 0 + case 'move_node': { + const { path, newPath } = op + const index = path[path.length - 1] + + if (Path.isAncestor(path, newPath)) { + throw new Error( + `Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.` + ) + } + + const node = Node.get(editor, path) + + modifyChildren(editor, Path.parent(path), children => + removeChildren(children, index, 1) + ) + + // This is tricky, but since the `path` and `newPath` both refer to + // the same snapshot in time, there's a mismatch. After either + // removing the original position, the second step's path can be out + // of date. So instead of using the `op.newPath` directly, we + // transform `op.path` to ascertain what the `newPath` would be after + // the operation was applied. + const truePath = Path.transform(path, op)! + const newIndex = truePath[truePath.length - 1] + + modifyChildren(editor, Path.parent(truePath), children => + insertChildren(children, newIndex, node) + ) + + transformSelection = true + break + } + + case 'remove_node': { + const { path } = op + const index = path[path.length - 1] + + modifyChildren(editor, Path.parent(path), children => + removeChildren(children, index, 1) + ) + + // Transform all the points in the value, but if the point was in the + // node that was removed we need to update the range or remove it. + if (editor.selection) { + let selection: Selection = { ...editor.selection } + + for (const [point, key] of Range.points(selection)) { + const result = Point.transform(point, op) + + if (selection != null && result != null) { + selection[key] = result } else { - selection = null + let prev: NodeEntry | undefined + let next: NodeEntry | undefined + + for (const [n, p] of Node.texts(editor)) { + if (Path.compare(p, path) === -1) { + prev = [n, p] + } else { + next = [n, p] + break + } + } + + let preferNext = false + if (prev && next) { + if (Path.equals(next[1], path)) { + preferNext = !Path.hasPrevious(next[1]) + } else { + preferNext = + Path.common(prev[1], path).length < + Path.common(next[1], path).length + } + } + + if (prev && !preferNext) { + selection![key] = { path: prev[1], offset: prev[0].text.length } + } else if (next) { + selection![key] = { path: next[1], offset: 0 } + } else { + selection = null + } } } - } - } - break - } - - case 'remove_text': { - const { path, offset, text } = op - if (text.length === 0) break - const node = Node.leaf(editor, path) - const before = node.text.slice(0, offset) - const after = node.text.slice(offset + text.length) - node.text = before + after - - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } - } - - break - } - - case 'set_node': { - const { path, properties, newProperties } = op - - if (path.length === 0) { - throw new Error(`Cannot set properties on the root node!`) - } - - const node = Node.get(editor, path) - - for (const key in newProperties) { - if (key === 'children' || key === 'text') { - throw new Error(`Cannot set the "${key}" property of nodes!`) + editor.selection = selection } - const value = newProperties[key] - - if (value == null) { - delete node[key] - } else { - node[key] = value - } + break } - // properties that were previously defined, but are now missing, must be deleted - for (const key in properties) { - if (!newProperties.hasOwnProperty(key)) { - delete node[key] - } + case 'remove_text': { + const { path, offset, text } = op + if (text.length === 0) break + + modifyLeaf(editor, path, node => { + const before = node.text.slice(0, offset) + const after = node.text.slice(offset + text.length) + + return { + ...node, + text: before + after, + } + }) + + transformSelection = true + break } - break - } + case 'set_node': { + const { path, properties, newProperties } = op - case 'set_selection': { - const { newProperties } = op + if (path.length === 0) { + throw new Error(`Cannot set properties on the root node!`) + } - if (newProperties == null) { - selection = newProperties - } else { - if (selection == null) { + modifyDescendant(editor, path, node => { + const newNode = { ...node } + + for (const key in newProperties) { + if (key === 'children' || key === 'text') { + throw new Error(`Cannot set the "${key}" property of nodes!`) + } + + const value = newProperties[key] + + if (value == null) { + delete newNode[key] + } else { + newNode[key] = value + } + } + + // properties that were previously defined, but are now missing, must be deleted + for (const key in properties) { + if (!newProperties.hasOwnProperty(key)) { + delete newNode[key] + } + } + + return newNode + }) + + break + } + + case 'set_selection': { + const { newProperties } = op + + if (newProperties == null) { + editor.selection = null + break + } + + if (editor.selection == null) { if (!Range.isRange(newProperties)) { throw new Error( `Cannot apply an incomplete "set_selection" operation properties ${Scrubber.stringify( @@ -248,9 +343,12 @@ const applyToDraft = (editor: Editor, selection: Selection, op: Operation) => { ) } - selection = { ...newProperties } + editor.selection = { ...newProperties } + break } + const selection = { ...editor.selection } + for (const key in newProperties) { const value = newProperties[key] @@ -264,76 +362,67 @@ const applyToDraft = (editor: Editor, selection: Selection, op: Operation) => { selection[key] = value } } + + editor.selection = selection + + break } - break + case 'split_node': { + const { path, position, properties } = op + const index = path[path.length - 1] + + if (path.length === 0) { + throw new Error( + `Cannot apply a "split_node" operation at path [${path}] because the root node cannot be split.` + ) + } + + modifyChildren(editor, Path.parent(path), children => { + const node = children[index] + let newNode: Descendant + let nextNode: Descendant + + if (Text.isText(node)) { + const before = node.text.slice(0, position) + const after = node.text.slice(position) + newNode = { + ...node, + text: before, + } + nextNode = { + ...(properties as Partial), + text: after, + } + } else { + const before = node.children.slice(0, position) + const after = node.children.slice(position) + newNode = { + ...node, + children: before, + } + nextNode = { + ...(properties as Partial), + children: after, + } + } + + return replaceChildren(children, index, 1, newNode, nextNode) + }) + + transformSelection = true + break + } } - case 'split_node': { - const { path, position, properties } = op + if (transformSelection && editor.selection) { + const selection = { ...editor.selection } - if (path.length === 0) { - throw new Error( - `Cannot apply a "split_node" operation at path [${path}] because the root node cannot be split.` - ) + for (const [point, key] of Range.points(selection)) { + selection[key] = Point.transform(point, op)! } - const node = Node.get(editor, path) - const parent = Node.parent(editor, path) - const index = path[path.length - 1] - let newNode: Descendant - - if (Text.isText(node)) { - const before = node.text.slice(0, position) - const after = node.text.slice(position) - node.text = before - newNode = { - ...(properties as Partial), - text: after, - } - } else { - const before = node.children.slice(0, position) - const after = node.children.slice(position) - node.children = before - - newNode = { - ...(properties as Partial), - children: after, - } - } - - parent.children.splice(index + 1, 0, newNode) - - if (selection) { - for (const [point, key] of Range.points(selection)) { - selection[key] = Point.transform(point, op)! - } - } - - break - } - } - return selection -} - -// eslint-disable-next-line no-redeclare -export const GeneralTransforms: GeneralTransforms = { - transform(editor: Editor, op: Operation): void { - editor.children = createDraft(editor.children) - let selection = editor.selection && createDraft(editor.selection) - - try { - selection = applyToDraft(editor, selection, op) - } finally { - editor.children = finishDraft(editor.children) - - if (selection) { - editor.selection = isDraft(selection) - ? (finishDraft(selection) as Range) - : selection - } else { - editor.selection = null - } + editor.selection = selection } }, } diff --git a/playwright.config.ts b/playwright.config.ts index fee9d0003..1dbd7156d 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -76,8 +76,8 @@ const config: PlaywrightTestConfig = { /* Base URL to use in actions like `await page.goto('/')`. */ // baseURL: 'http://localhost:3000', - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', + /* Collect trace if the first attempt fails. See https://playwright.dev/docs/trace-viewer */ + trace: 'retain-on-first-failure', /* Name of attribute for selecting elements by page.getByTestId */ testIdAttribute: 'data-test-id', diff --git a/playwright/integration/examples/code-highlighting.test.ts b/playwright/integration/examples/code-highlighting.test.ts index e22d0abf1..0ff83c7fd 100644 --- a/playwright/integration/examples/code-highlighting.test.ts +++ b/playwright/integration/examples/code-highlighting.test.ts @@ -30,7 +30,8 @@ test.describe('code highlighting', () => { // it also tests if select and code block button works the right way async function setText(page: Page, text: string, language: string) { - await page.locator('[data-slate-editor]').fill('') // clear editor + await page.locator('[data-slate-editor]').selectText() + await page.keyboard.press('Backspace') // clear editor await page.getByTestId('code-block-button').click() // convert first and the only one paragraph to code block await page.getByTestId('language-select').selectOption({ value: language }) // select the language option diff --git a/playwright/integration/examples/huge-document.test.ts b/playwright/integration/examples/huge-document.test.ts index 1480b0eaf..321ba2563 100644 --- a/playwright/integration/examples/huge-document.test.ts +++ b/playwright/integration/examples/huge-document.test.ts @@ -1,18 +1,13 @@ import { test, expect } from '@playwright/test' test.describe('huge document example', () => { - const elements = [ - { tag: '#__next h1', count: 100 }, - { tag: '#__next p', count: 700 }, - ] - test.beforeEach(async ({ page }) => { await page.goto('http://localhost:3000/examples/huge-document') }) - test('contains image', async ({ page }) => { - for (const { tag, count } of elements) { - await expect(page.locator(tag)).toHaveCount(count) - } + test('uses chunking', async ({ page }) => { + await expect(page.getByLabel('Blocks')).toHaveValue('10000') + await expect(page.getByLabel('Chunk size')).toHaveValue('1000') + await expect(page.locator('[data-slate-chunk]')).toHaveCount(10) }) }) diff --git a/playwright/integration/examples/shadow-dom.test.ts b/playwright/integration/examples/shadow-dom.test.ts index 76ffb6fc6..110e7a425 100644 --- a/playwright/integration/examples/shadow-dom.test.ts +++ b/playwright/integration/examples/shadow-dom.test.ts @@ -24,7 +24,9 @@ test.describe('shadow-dom example', () => { await expect(textbox).toHaveCount(1) // Clear any existing text and type new text into the textbox - await textbox.fill('Hello, Playwright!') + await page.locator('[data-slate-editor]').selectText() + await page.keyboard.press('Backspace') + await page.keyboard.type('Hello, Playwright!') // Assert that the textbox contains the correct text await expect(textbox).toHaveText('Hello, Playwright!') diff --git a/site/examples/js/code-highlighting.jsx b/site/examples/js/code-highlighting.jsx index c56c0cc3d..ab3c661d8 100644 --- a/site/examples/js/code-highlighting.jsx +++ b/site/examples/js/code-highlighting.jsx @@ -17,7 +17,6 @@ import { Editable, ReactEditor, Slate, - useSlate, useSlateStatic, withReact, } from 'slate-react' @@ -29,12 +28,11 @@ const CodeBlockType = 'code-block' const CodeLineType = 'code-line' const CodeHighlightingExample = () => { const [editor] = useState(() => withHistory(withReact(createEditor()))) - const decorate = useDecorate(editor) + const decorate = useDecorate() const onKeyDown = useOnKeydown(editor) return ( - { ) } -const useDecorate = editor => { - return useCallback( - ([node, path]) => { - if (Element.isElement(node) && node.type === CodeLineType) { - const ranges = editor.nodeToDecorations?.get(node) || [] - return ranges - } - return [] - }, - [editor.nodeToDecorations] - ) +const useDecorate = () => { + return useCallback(([node, path]) => { + if (Element.isElement(node) && node.type === CodeBlockType) { + return decorateCodeBlock([node, path]) + } + return [] + }, []) } -const getChildNodeToDecorations = ([block, blockPath]) => { - const nodeToDecorations = new Map() +const decorateCodeBlock = ([block, blockPath]) => { const text = block.children.map(line => Node.string(line)).join('\n') - const language = block.language - const tokens = Prism.tokenize(text, Prism.languages[language]) + const tokens = Prism.tokenize(text, Prism.languages[block.language]) const normalizedTokens = normalizeTokens(tokens) // make tokens flat and grouped by line - const blockChildren = block.children + const decorations = [] for (let index = 0; index < normalizedTokens.length; index++) { const tokens = normalizedTokens[index] - const element = blockChildren[index] - if (!nodeToDecorations.has(element)) { - nodeToDecorations.set(element, []) - } let start = 0 for (const token of tokens) { const length = token.content.length @@ -168,33 +156,16 @@ const getChildNodeToDecorations = ([block, blockPath]) => { } const end = start + length const path = [...blockPath, index, 0] - const range = { + decorations.push({ anchor: { path, offset: start }, focus: { path, offset: end }, token: true, ...Object.fromEntries(token.types.map(type => [type, true])), - } - nodeToDecorations.get(element).push(range) + }) start = end } } - return nodeToDecorations -} -// precalculate editor.nodeToDecorations map to use it inside decorate function then -const SetNodeToDecorations = () => { - const editor = useSlate() - const blockEntries = Array.from( - Editor.nodes(editor, { - at: [], - mode: 'highest', - match: n => Element.isElement(n) && n.type === CodeBlockType, - }) - ) - const nodeToDecorations = mergeMaps( - ...blockEntries.map(getChildNodeToDecorations) - ) - editor.nodeToDecorations = nodeToDecorations - return null + return decorations } const useOnKeydown = editor => { const onKeyDown = useCallback( @@ -236,15 +207,6 @@ const LanguageSelect = props => { ) } -const mergeMaps = (...maps) => { - const map = new Map() - for (const m of maps) { - for (const item of m) { - map.set(...item) - } - } - return map -} const toChildren = content => [{ text: content }] const toCodeLines = content => content diff --git a/site/examples/js/embeds.jsx b/site/examples/js/embeds.jsx index ae4026914..f95456be7 100644 --- a/site/examples/js/embeds.jsx +++ b/site/examples/js/embeds.jsx @@ -90,6 +90,7 @@ const UrlInput = ({ url, onChange }) => { const [value, setValue] = React.useState(url) return ( e.stopPropagation()} style={{ diff --git a/site/examples/js/huge-document.jsx b/site/examples/js/huge-document.jsx index deae2380e..896764ad9 100644 --- a/site/examples/js/huge-document.jsx +++ b/site/examples/js/huge-document.jsx @@ -1,40 +1,430 @@ import { faker } from '@faker-js/faker' -import React, { useCallback, useMemo } from 'react' -import { createEditor } from 'slate' -import { Editable, Slate, withReact } from 'slate-react' +import React, { useCallback, useEffect, useState } from 'react' +import { createEditor as slateCreateEditor, Editor } from 'slate' +import { Editable, Slate, withReact, useSelected } from 'slate-react' -const HEADINGS = 100 -const PARAGRAPHS = 7 -const initialValue = [] -for (let h = 0; h < HEADINGS; h++) { - const heading = { - type: 'heading-one', - children: [{ text: faker.lorem.sentence() }], +const SUPPORTS_EVENT_TIMING = + typeof window !== 'undefined' && 'PerformanceEventTiming' in window +const SUPPORTS_LOAF_TIMING = + typeof window !== 'undefined' && + 'PerformanceLongAnimationFrameTiming' in window +const blocksOptions = [ + 2, 1000, 2500, 5000, 7500, 10000, 15000, 20000, 25000, 30000, 40000, 50000, + 100000, 200000, +] +const chunkSizeOptions = [3, 10, 100, 1000] +const searchParams = + typeof document === 'undefined' + ? null + : new URLSearchParams(document.location.search) +const parseNumber = (key, defaultValue) => + parseInt(searchParams?.get(key) ?? '', 10) || defaultValue +const parseBoolean = (key, defaultValue) => { + const value = searchParams?.get(key) + if (value) return value === 'true' + return defaultValue +} +const parseEnum = (key, options, defaultValue) => { + const value = searchParams?.get(key) + if (value && options.includes(value)) return value + return defaultValue +} +const initialConfig = { + blocks: parseNumber('blocks', 10000), + chunking: parseBoolean('chunking', true), + chunkSize: parseNumber('chunk_size', 1000), + chunkDivs: parseBoolean('chunk_divs', true), + chunkOutlines: parseBoolean('chunk_outlines', false), + contentVisibilityMode: parseEnum( + 'content_visibility', + ['none', 'element', 'chunk'], + 'chunk' + ), + showSelectedHeadings: parseBoolean('selected_headings', false), +} +const setSearchParams = config => { + if (searchParams) { + searchParams.set('blocks', config.blocks.toString()) + searchParams.set('chunking', config.chunking ? 'true' : 'false') + searchParams.set('chunk_size', config.chunkSize.toString()) + searchParams.set('chunk_divs', config.chunkDivs ? 'true' : 'false') + searchParams.set('chunk_outlines', config.chunkOutlines ? 'true' : 'false') + searchParams.set('content_visibility', config.contentVisibilityMode) + searchParams.set( + 'selected_headings', + config.showSelectedHeadings ? 'true' : 'false' + ) + history.replaceState({}, '', `?${searchParams.toString()}`) } - initialValue.push(heading) - for (let p = 0; p < PARAGRAPHS; p++) { - const paragraph = { - type: 'paragraph', - children: [{ text: faker.lorem.paragraph() }], +} +const cachedInitialValue = [] +const getInitialValue = blocks => { + if (cachedInitialValue.length >= blocks) { + return cachedInitialValue.slice(0, blocks) + } + faker.seed(1) + for (let i = cachedInitialValue.length; i < blocks; i++) { + if (i % 100 === 0) { + const heading = { + type: 'heading-one', + children: [{ text: faker.lorem.sentence() }], + } + cachedInitialValue.push(heading) + } else { + const paragraph = { + type: 'paragraph', + children: [{ text: faker.lorem.paragraph() }], + } + cachedInitialValue.push(paragraph) } - initialValue.push(paragraph) } + return cachedInitialValue.slice() +} +const initialInitialValue = + typeof window === 'undefined' ? [] : getInitialValue(initialConfig.blocks) +const createEditor = config => { + const editor = withReact(slateCreateEditor()) + editor.getChunkSize = node => + config.chunking && Editor.isEditor(node) ? config.chunkSize : null + return editor } const HugeDocumentExample = () => { - const renderElement = useCallback(props => , []) - const editor = useMemo(() => withReact(createEditor()), []) + const [rendering, setRendering] = useState(false) + const [config, baseSetConfig] = useState(initialConfig) + const [initialValue, setInitialValue] = useState(initialInitialValue) + const [editor, setEditor] = useState(() => createEditor(config)) + const [editorVersion, setEditorVersion] = useState(0) + const setConfig = useCallback( + partialConfig => { + const newConfig = { ...config, ...partialConfig } + setRendering(true) + baseSetConfig(newConfig) + setSearchParams(newConfig) + setTimeout(() => { + setRendering(false) + setInitialValue(getInitialValue(newConfig.blocks)) + setEditor(createEditor(newConfig)) + setEditorVersion(n => n + 1) + }) + }, + [config] + ) + const renderElement = useCallback( + props => ( + + ), + [config.contentVisibilityMode, config.showSelectedHeadings] + ) + const renderChunk = useCallback( + props => ( + + ), + [config.contentVisibilityMode, config.chunkOutlines] + ) return ( - - - + <> + + + {rendering ? ( +
Rendering…
+ ) : ( + + + + )} + ) } -const Element = ({ attributes, children, element }) => { +const Chunk = ({ + attributes, + children, + lowest, + contentVisibilityLowest, + outline, +}) => { + const style = { + contentVisibility: contentVisibilityLowest && lowest ? 'auto' : undefined, + border: outline ? '1px solid red' : undefined, + padding: outline ? 20 : undefined, + marginBottom: outline ? 20 : undefined, + } + return ( +
+ {children} +
+ ) +} +const Heading = React.forwardRef( + ({ style: styleProp, showSelectedHeadings = false, ...props }, ref) => { + // Fine since the editor is remounted if the config changes + // eslint-disable-next-line react-hooks/rules-of-hooks + const selected = showSelectedHeadings ? useSelected() : false + const style = { ...styleProp, color: selected ? 'green' : undefined } + return

+ } +) +const Paragraph = 'p' +const Element = ({ + attributes, + children, + element, + contentVisibility, + showSelectedHeadings, +}) => { + const style = { + contentVisibility: contentVisibility ? 'auto' : undefined, + } switch (element.type) { case 'heading-one': - return

{children}

+ return ( + + {children} + + ) default: - return

{children}

+ return ( + + {children} + + ) } } +const PerformanceControls = ({ editor, config, setConfig }) => { + const [configurationOpen, setConfigurationOpen] = useState(true) + const [keyPressDurations, setKeyPressDurations] = useState([]) + const [lastLongAnimationFrameDuration, setLastLongAnimationFrameDuration] = + useState(null) + const lastKeyPressDuration = keyPressDurations[0] ?? null + const averageKeyPressDuration = + keyPressDurations.length === 10 + ? Math.round(keyPressDurations.reduce((total, d) => total + d) / 10) + : null + useEffect(() => { + if (!SUPPORTS_EVENT_TIMING) return + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + if (entry.name === 'keypress') { + const duration = Math.round( + // @ts-ignore Entry type is missing processingStart and processingEnd + entry.processingEnd - entry.processingStart + ) + setKeyPressDurations(durations => [ + duration, + ...durations.slice(0, 9), + ]) + } + }) + }) + // @ts-ignore Options type is missing durationThreshold + observer.observe({ type: 'event', durationThreshold: 16 }) + return () => observer.disconnect() + }, []) + useEffect(() => { + if (!SUPPORTS_LOAF_TIMING) return + const { apply } = editor + let afterOperation = false + editor.apply = operation => { + apply(operation) + afterOperation = true + } + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + if (afterOperation) { + setLastLongAnimationFrameDuration(Math.round(entry.duration)) + afterOperation = false + } + }) + }) + // Register the observer for events + observer.observe({ type: 'long-animation-frame' }) + return () => observer.disconnect() + }, [editor]) + return ( +
+

+ +

+ +
setConfigurationOpen(event.currentTarget.open)} + > + Configuration + +

+ +

+ + {config.chunking && ( + <> +

+ +

+ + {config.chunkDivs && ( +

+ +

+ )} + +

+ +

+ + )} + +

+ +

+ +

+ +

+
+ +
+ Statistics + +

+ Last keypress (ms):{' '} + {SUPPORTS_EVENT_TIMING + ? lastKeyPressDuration ?? '-' + : 'Not supported'} +

+ +

+ Average of last 10 keypresses (ms):{' '} + {SUPPORTS_EVENT_TIMING + ? averageKeyPressDuration ?? '-' + : 'Not supported'} +

+ +

+ Last long animation frame (ms):{' '} + {SUPPORTS_LOAF_TIMING + ? lastLongAnimationFrameDuration ?? '-' + : 'Not supported'} +

+ + {SUPPORTS_EVENT_TIMING && lastKeyPressDuration === null && ( +

Events shorter than 16ms may not be detected.

+ )} +
+
+ ) +} export default HugeDocumentExample diff --git a/site/examples/js/search-highlighting.jsx b/site/examples/js/search-highlighting.jsx index d4bd3ec43..98757a863 100644 --- a/site/examples/js/search-highlighting.jsx +++ b/site/examples/js/search-highlighting.jsx @@ -83,7 +83,7 @@ const SearchHighlightingExample = () => { placeholder="Search the text..." onChange={e => setSearch(e.target.value)} className={css` - padding-left: 2.5em; + padding-left: 2.5em !important; width: 100%; `} /> diff --git a/site/examples/ts/code-highlighting.tsx b/site/examples/ts/code-highlighting.tsx index c663cb1e0..2bab94b5d 100644 --- a/site/examples/ts/code-highlighting.tsx +++ b/site/examples/ts/code-highlighting.tsx @@ -16,9 +16,9 @@ import { Element, Node, NodeEntry, - Range, Transforms, createEditor, + DecoratedRange, } from 'slate' import { withHistory } from 'slate-history' import { @@ -27,7 +27,6 @@ import { RenderElementProps, RenderLeafProps, Slate, - useSlate, useSlateStatic, withReact, } from 'slate-react' @@ -48,13 +47,12 @@ const CodeLineType = 'code-line' const CodeHighlightingExample = () => { const [editor] = useState(() => withHistory(withReact(createEditor()))) - const decorate = useDecorate(editor) + const decorate = useDecorate() const onKeyDown = useOnKeydown(editor) return ( - { ) } -const useDecorate = (editor: CustomEditor) => { - return useCallback( - ([node, path]: NodeEntry) => { - if (Element.isElement(node) && node.type === CodeLineType) { - const ranges = editor.nodeToDecorations?.get(node) || [] - return ranges - } +const useDecorate = () => { + return useCallback(([node, path]: NodeEntry) => { + if (Element.isElement(node) && node.type === CodeBlockType) { + return decorateCodeBlock([node, path]) + } - return [] - }, - [editor.nodeToDecorations] - ) + return [] + }, []) } -interface TokenRange extends Range { - token: boolean - [key: string]: unknown -} - -type EditorWithDecorations = CustomEditor & { - nodeToDecorations: Map -} - -const getChildNodeToDecorations = ([ +const decorateCodeBlock = ([ block, blockPath, -]: NodeEntry): Map => { - const nodeToDecorations = new Map() - +]: NodeEntry): DecoratedRange[] => { const text = block.children.map(line => Node.string(line)).join('\n') - const language = block.language - const tokens = Prism.tokenize(text, Prism.languages[language]) + const tokens = Prism.tokenize(text, Prism.languages[block.language]) const normalizedTokens = normalizeTokens(tokens) // make tokens flat and grouped by line - const blockChildren = block.children as Element[] + const decorations: DecoratedRange[] = [] for (let index = 0; index < normalizedTokens.length; index++) { const tokens = normalizedTokens[index] - const element = blockChildren[index] - - if (!nodeToDecorations.has(element)) { - nodeToDecorations.set(element, []) - } let start = 0 for (const token of tokens) { @@ -219,41 +196,19 @@ const getChildNodeToDecorations = ([ const end = start + length const path = [...blockPath, index, 0] - const range = { + + decorations.push({ anchor: { path, offset: start }, focus: { path, offset: end }, token: true, ...Object.fromEntries(token.types.map(type => [type, true])), - } - - nodeToDecorations.get(element)!.push(range) + }) start = end } } - return nodeToDecorations -} - -// precalculate editor.nodeToDecorations map to use it inside decorate function then -const SetNodeToDecorations = () => { - const editor = useSlate() as EditorWithDecorations - - const blockEntries = Array.from( - Editor.nodes(editor, { - at: [], - mode: 'highest', - match: n => Element.isElement(n) && n.type === CodeBlockType, - }) - ) - - const nodeToDecorations = mergeMaps( - ...blockEntries.map(getChildNodeToDecorations) - ) - - editor.nodeToDecorations = nodeToDecorations - - return null + return decorations } const useOnKeydown = (editor: CustomEditor) => { @@ -306,18 +261,6 @@ const LanguageSelect = (props: LanguageSelectProps) => { ) } -const mergeMaps = (...maps: Map[]) => { - const map = new Map() - - for (const m of maps) { - for (const item of m) { - map.set(...item) - } - } - - return map -} - const toChildren = (content: string): CustomText[] => [{ text: content }] const toCodeLines = (content: string): CodeLineElement[] => content diff --git a/site/examples/ts/embeds.tsx b/site/examples/ts/embeds.tsx index 2a4e5c618..dc43a4e8d 100644 --- a/site/examples/ts/embeds.tsx +++ b/site/examples/ts/embeds.tsx @@ -117,6 +117,7 @@ const UrlInput = ({ url, onChange }: UrlInputProps) => { const [value, setValue] = React.useState(url) return ( e.stopPropagation()} style={{ diff --git a/site/examples/ts/huge-document.tsx b/site/examples/ts/huge-document.tsx index 2aed98ba5..e8d2742b5 100644 --- a/site/examples/ts/huge-document.tsx +++ b/site/examples/ts/huge-document.tsx @@ -1,54 +1,520 @@ import { faker } from '@faker-js/faker' -import React, { useCallback, useMemo } from 'react' -import { createEditor, Descendant } from 'slate' -import { Editable, RenderElementProps, Slate, withReact } from 'slate-react' - +import React, { + CSSProperties, + Dispatch, + useCallback, + useEffect, + useState, +} from 'react' +import { createEditor as slateCreateEditor, Descendant, Editor } from 'slate' import { - CustomEditor, - HeadingElement, - ParagraphElement, -} from './custom-types.d' + Editable, + RenderElementProps, + RenderChunkProps, + Slate, + withReact, + useSelected, +} from 'slate-react' -const HEADINGS = 100 -const PARAGRAPHS = 7 -const initialValue: Descendant[] = [] +import { HeadingElement, ParagraphElement } from './custom-types.d' -for (let h = 0; h < HEADINGS; h++) { - const heading: HeadingElement = { - type: 'heading-one', - children: [{ text: faker.lorem.sentence() }], +const SUPPORTS_EVENT_TIMING = + typeof window !== 'undefined' && 'PerformanceEventTiming' in window + +const SUPPORTS_LOAF_TIMING = + typeof window !== 'undefined' && + 'PerformanceLongAnimationFrameTiming' in window + +interface Config { + blocks: number + chunking: boolean + chunkSize: number + chunkDivs: boolean + chunkOutlines: boolean + contentVisibilityMode: 'none' | 'element' | 'chunk' + showSelectedHeadings: boolean +} + +const blocksOptions = [ + 2, 1000, 2500, 5000, 7500, 10000, 15000, 20000, 25000, 30000, 40000, 50000, + 100000, 200000, +] + +const chunkSizeOptions = [3, 10, 100, 1000] + +const searchParams = + typeof document === 'undefined' + ? null + : new URLSearchParams(document.location.search) + +const parseNumber = (key: string, defaultValue: number) => + parseInt(searchParams?.get(key) ?? '', 10) || defaultValue + +const parseBoolean = (key: string, defaultValue: boolean) => { + const value = searchParams?.get(key) + if (value) return value === 'true' + return defaultValue +} + +const parseEnum = ( + key: string, + options: T[], + defaultValue: T +): T => { + const value = searchParams?.get(key) as T | null | undefined + if (value && options.includes(value)) return value + return defaultValue +} + +const initialConfig: Config = { + blocks: parseNumber('blocks', 10000), + chunking: parseBoolean('chunking', true), + chunkSize: parseNumber('chunk_size', 1000), + chunkDivs: parseBoolean('chunk_divs', true), + chunkOutlines: parseBoolean('chunk_outlines', false), + contentVisibilityMode: parseEnum( + 'content_visibility', + ['none', 'element', 'chunk'], + 'chunk' + ), + showSelectedHeadings: parseBoolean('selected_headings', false), +} + +const setSearchParams = (config: Config) => { + if (searchParams) { + searchParams.set('blocks', config.blocks.toString()) + searchParams.set('chunking', config.chunking ? 'true' : 'false') + searchParams.set('chunk_size', config.chunkSize.toString()) + searchParams.set('chunk_divs', config.chunkDivs ? 'true' : 'false') + searchParams.set('chunk_outlines', config.chunkOutlines ? 'true' : 'false') + searchParams.set('content_visibility', config.contentVisibilityMode) + searchParams.set( + 'selected_headings', + config.showSelectedHeadings ? 'true' : 'false' + ) + history.replaceState({}, '', `?${searchParams.toString()}`) } - initialValue.push(heading) +} - for (let p = 0; p < PARAGRAPHS; p++) { - const paragraph: ParagraphElement = { - type: 'paragraph', - children: [{ text: faker.lorem.paragraph() }], +const cachedInitialValue: Descendant[] = [] + +const getInitialValue = (blocks: number) => { + if (cachedInitialValue.length >= blocks) { + return cachedInitialValue.slice(0, blocks) + } + + faker.seed(1) + + for (let i = cachedInitialValue.length; i < blocks; i++) { + if (i % 100 === 0) { + const heading: HeadingElement = { + type: 'heading-one', + children: [{ text: faker.lorem.sentence() }], + } + cachedInitialValue.push(heading) + } else { + const paragraph: ParagraphElement = { + type: 'paragraph', + children: [{ text: faker.lorem.paragraph() }], + } + cachedInitialValue.push(paragraph) } - initialValue.push(paragraph) } + + return cachedInitialValue.slice() +} + +const initialInitialValue = + typeof window === 'undefined' ? [] : getInitialValue(initialConfig.blocks) + +const createEditor = (config: Config) => { + const editor = withReact(slateCreateEditor()) + + editor.getChunkSize = node => + config.chunking && Editor.isEditor(node) ? config.chunkSize : null + + return editor } const HugeDocumentExample = () => { - const renderElement = useCallback( - (props: RenderElementProps) => , - [] + const [rendering, setRendering] = useState(false) + const [config, baseSetConfig] = useState(initialConfig) + const [initialValue, setInitialValue] = useState(initialInitialValue) + const [editor, setEditor] = useState(() => createEditor(config)) + const [editorVersion, setEditorVersion] = useState(0) + + const setConfig = useCallback( + (partialConfig: Partial) => { + const newConfig = { ...config, ...partialConfig } + + setRendering(true) + baseSetConfig(newConfig) + setSearchParams(newConfig) + + setTimeout(() => { + setRendering(false) + setInitialValue(getInitialValue(newConfig.blocks)) + setEditor(createEditor(newConfig)) + setEditorVersion(n => n + 1) + }) + }, + [config] ) - const editor = useMemo(() => withReact(createEditor()) as CustomEditor, []) + + const renderElement = useCallback( + (props: RenderElementProps) => ( + + ), + [config.contentVisibilityMode, config.showSelectedHeadings] + ) + + const renderChunk = useCallback( + (props: RenderChunkProps) => ( + + ), + [config.contentVisibilityMode, config.chunkOutlines] + ) + return ( - - - + <> + + + {rendering ? ( +
Rendering…
+ ) : ( + + + + )} + ) } -const Element = ({ attributes, children, element }: RenderElementProps) => { +const Chunk = ({ + attributes, + children, + lowest, + contentVisibilityLowest, + outline, +}: RenderChunkProps & { + contentVisibilityLowest: boolean + outline: boolean +}) => { + const style: CSSProperties = { + contentVisibility: contentVisibilityLowest && lowest ? 'auto' : undefined, + border: outline ? '1px solid red' : undefined, + padding: outline ? 20 : undefined, + marginBottom: outline ? 20 : undefined, + } + + return ( +
+ {children} +
+ ) +} + +const Heading = React.forwardRef< + HTMLHeadingElement, + React.ComponentProps<'h1'> & { showSelectedHeadings: boolean } +>(({ style: styleProp, showSelectedHeadings = false, ...props }, ref) => { + // Fine since the editor is remounted if the config changes + // eslint-disable-next-line react-hooks/rules-of-hooks + const selected = showSelectedHeadings ? useSelected() : false + const style = { ...styleProp, color: selected ? 'green' : undefined } + return

+}) + +const Paragraph = 'p' + +const Element = ({ + attributes, + children, + element, + contentVisibility, + showSelectedHeadings, +}: RenderElementProps & { + contentVisibility: boolean + showSelectedHeadings: boolean +}) => { + const style: CSSProperties = { + contentVisibility: contentVisibility ? 'auto' : undefined, + } + switch (element.type) { case 'heading-one': - return

{children}

+ return ( + + {children} + + ) default: - return

{children}

+ return ( + + {children} + + ) } } +const PerformanceControls = ({ + editor, + config, + setConfig, +}: { + editor: Editor + config: Config + setConfig: Dispatch> +}) => { + const [configurationOpen, setConfigurationOpen] = useState(true) + const [keyPressDurations, setKeyPressDurations] = useState([]) + const [lastLongAnimationFrameDuration, setLastLongAnimationFrameDuration] = + useState(null) + + const lastKeyPressDuration: number | null = keyPressDurations[0] ?? null + + const averageKeyPressDuration = + keyPressDurations.length === 10 + ? Math.round(keyPressDurations.reduce((total, d) => total + d) / 10) + : null + + useEffect(() => { + if (!SUPPORTS_EVENT_TIMING) return + + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + if (entry.name === 'keypress') { + const duration = Math.round( + // @ts-ignore Entry type is missing processingStart and processingEnd + entry.processingEnd - entry.processingStart + ) + setKeyPressDurations(durations => [ + duration, + ...durations.slice(0, 9), + ]) + } + }) + }) + + // @ts-ignore Options type is missing durationThreshold + observer.observe({ type: 'event', durationThreshold: 16 }) + + return () => observer.disconnect() + }, []) + + useEffect(() => { + if (!SUPPORTS_LOAF_TIMING) return + + const { apply } = editor + let afterOperation = false + + editor.apply = operation => { + apply(operation) + afterOperation = true + } + + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + if (afterOperation) { + setLastLongAnimationFrameDuration(Math.round(entry.duration)) + afterOperation = false + } + }) + }) + + // Register the observer for events + observer.observe({ type: 'long-animation-frame' }) + + return () => observer.disconnect() + }, [editor]) + + return ( +
+

+ +

+ +
setConfigurationOpen(event.currentTarget.open)} + > + Configuration + +

+ +

+ + {config.chunking && ( + <> +

+ +

+ + {config.chunkDivs && ( +

+ +

+ )} + +

+ +

+ + )} + +

+ +

+ +

+ +

+
+ +
+ Statistics + +

+ Last keypress (ms):{' '} + {SUPPORTS_EVENT_TIMING + ? lastKeyPressDuration ?? '-' + : 'Not supported'} +

+ +

+ Average of last 10 keypresses (ms):{' '} + {SUPPORTS_EVENT_TIMING + ? averageKeyPressDuration ?? '-' + : 'Not supported'} +

+ +

+ Last long animation frame (ms):{' '} + {SUPPORTS_LOAF_TIMING + ? lastLongAnimationFrameDuration ?? '-' + : 'Not supported'} +

+ + {SUPPORTS_EVENT_TIMING && lastKeyPressDuration === null && ( +

Events shorter than 16ms may not be detected.

+ )} +
+
+ ) +} + export default HugeDocumentExample diff --git a/site/examples/ts/search-highlighting.tsx b/site/examples/ts/search-highlighting.tsx index bb17da99c..11ee20357 100644 --- a/site/examples/ts/search-highlighting.tsx +++ b/site/examples/ts/search-highlighting.tsx @@ -97,7 +97,7 @@ const SearchHighlightingExample = () => { placeholder="Search the text..." onChange={e => setSearch(e.target.value)} className={css` - padding-left: 2.5em; + padding-left: 2.5em !important; width: 100%; `} /> diff --git a/site/pages/examples/[example].tsx b/site/pages/examples/[example].tsx index eb0e44d7c..df81ee9ab 100644 --- a/site/pages/examples/[example].tsx +++ b/site/pages/examples/[example].tsx @@ -78,7 +78,7 @@ const Header = (props: React.HTMLAttributes) => ( display: flex; height: 42px; position: relative; - z-index: 1; /* To appear above the underlay */ + z-index: 3; /* To appear above the underlay */ `} /> ) @@ -147,7 +147,7 @@ const TabList = ({ width: ${isVisible ? '200px' : '0'}; white-space: nowrap; max-height: 70vh; - z-index: 1; /* To appear above the underlay */ + z-index: 3; /* To appear above the underlay */ `} /> ) @@ -165,6 +165,7 @@ const TabListUnderlay = ({ top: 0; position: fixed; width: 100%; + z-index: 2; `} /> ) @@ -248,7 +249,7 @@ const ExampleHeader = (props: React.HTMLAttributes) => ( display: flex; height: 42px; position: relative; - z-index: 1; /* To appear above the underlay */ + z-index: 3; /* To appear above the underlay */ `} /> ) diff --git a/site/public/index.css b/site/public/index.css index bcd5333f9..922005fb6 100644 --- a/site/public/index.css +++ b/site/public/index.css @@ -10,6 +10,10 @@ body { margin: 0; } +h1 { + margin-top: 0; +} + p { margin: 0; } @@ -56,7 +60,8 @@ td { border: 2px solid #ddd; } -input { +input[type='text'], +input[type='search'] { box-sizing: border-box; font-size: 0.85em; width: 100%; @@ -65,7 +70,8 @@ input { background: #fafafa; } -input:focus { +input[type='text']:focus, +input[type='search']:focus { outline: 0; border-color: blue; } @@ -75,7 +81,12 @@ iframe { border: 1px solid #eee; } -[data-slate-editor] > * + * { +details > summary { + user-select: none; +} + +[data-slate-editor] > * + *, +[data-slate-chunk] > * + * { margin-top: 1em; } @@ -89,3 +100,27 @@ iframe { outline-offset: -20px; white-space: pre-wrap; } + +.performance-controls { + padding: 20px; + margin: -20px -20px 20px -20px; + background-color: white; + position: sticky; + top: 0; + z-index: 1; + border-bottom: 1px solid lightgrey; + max-height: 50vh; + overflow-y: auto; +} + +.performance-controls > * { + margin-top: 10px; +} + +.performance-controls > details > :not(summary) { + margin-left: 10px; +} + +.performance-controls p { + margin-top: 5px; +} diff --git a/yarn.lock b/yarn.lock index b40e0a312..b493d8274 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adobe/css-tools@npm:^4.4.0": + version: 4.4.3 + resolution: "@adobe/css-tools@npm:4.4.3" + checksum: 701379c514b7a43ca6681705a93cd57ad79565cfef9591122e9499897550cf324a5e5bb1bc51df0e7433cf0e91b962c90f18ac459dcc98b2431daa04aa63cb20 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -3040,14 +3047,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.39.0": - version: 1.39.0 - resolution: "@playwright/test@npm:1.39.0" +"@playwright/test@npm:^1.52.0": + version: 1.52.0 + resolution: "@playwright/test@npm:1.52.0" dependencies: - playwright: "npm:1.39.0" + playwright: "npm:1.52.0" bin: playwright: cli.js - checksum: 5d039234609395f3eab46b5954b259bdd80dacf79efe531369c1633647dcafce25a78d497e61e671d661274bf66076426a1bd46be585c44addf23bb5bfaa15a2 + checksum: e18a4eb626c7bc6cba212ff2e197cf9ae2e4da1c91bfdf08a744d62e27222751173e4b220fa27da72286a89a3b4dea7c09daf384d23708f284b64f98e9a63a88 languageName: node linkType: hard @@ -3239,6 +3246,21 @@ __metadata: languageName: node linkType: hard +"@testing-library/jest-dom@npm:^6.6.3": + version: 6.6.3 + resolution: "@testing-library/jest-dom@npm:6.6.3" + dependencies: + "@adobe/css-tools": "npm:^4.4.0" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.21" + redent: "npm:^3.0.0" + checksum: 1f3427e45870eab9dcc59d6504b780d4a595062fe1687762ae6e67d06a70bf439b40ab64cf58cbace6293a99e3764d4647fdc8300a633b721764f5ce39dade18 + languageName: node + linkType: hard + "@testing-library/react@npm:^14.0.0": version: 14.0.0 resolution: "@testing-library/react@npm:14.0.0" @@ -4065,6 +4087,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 + languageName: node + linkType: hard + "array-buffer-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "array-buffer-byte-length@npm:1.0.0" @@ -4875,6 +4904,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -5544,6 +5583,13 @@ __metadata: languageName: node linkType: hard +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 + languageName: node + linkType: hard + "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -5981,6 +6027,13 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: 83d3371f8226487fbad36e160d44f1d9017fb26d46faba6a06fcad15f34633fc827b8c3e99d49f71d5f3253d866e2131826866fd0a3c86626f8eccfc361881ff + languageName: node + linkType: hard + "domexception@npm:^4.0.0": version: 4.0.0 resolution: "domexception@npm:4.0.0" @@ -11871,27 +11924,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.39.0": - version: 1.39.0 - resolution: "playwright-core@npm:1.39.0" +"playwright-core@npm:1.52.0": + version: 1.52.0 + resolution: "playwright-core@npm:1.52.0" bin: playwright-core: cli.js - checksum: e4e01ddea024c7564bbfacdba5f545b004a4017b466af08ae90e5184da4f5bc61e74c96e37cc5e30b7d4f97341c0883cfb2038c8cfbfab65316d714f65b82d83 + checksum: 42e13f5f98dc25ebc95525fb338a215b9097b2ba39d41e99972a190bf75d79979f163f5bc07b1ca06847ee07acb2c9b487d070fab67e9cd55e33310fc05aca3c languageName: node linkType: hard -"playwright@npm:1.39.0": - version: 1.39.0 - resolution: "playwright@npm:1.39.0" +"playwright@npm:1.52.0": + version: 1.52.0 + resolution: "playwright@npm:1.52.0" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.39.0" + playwright-core: "npm:1.52.0" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 6f6b2f4381fccfbc560c4cd25e164f5093fec4e2046990587282e18618151d723b299b56c16741ce08e44a759c22e38c3e705b716d31238320e08e6ffcfa7319 + checksum: 214175446089000c2ac997b925063b95f7d86d129c5d7c74caa5ddcb05bcad598dfd569d2133a10dc82d288bf67e7858877dcd099274b0b928b9c63db7d6ecec languageName: node linkType: hard @@ -13344,7 +13397,7 @@ __metadata: "@changesets/cli": "npm:^2.26.2" "@emotion/css": "npm:^11.11.2" "@faker-js/faker": "npm:^8.2.0" - "@playwright/test": "npm:^1.39.0" + "@playwright/test": "npm:^1.52.0" "@types/is-hotkey": "npm:^0.1.10" "@types/is-url": "npm:^1.2.32" "@types/jest": "npm:29.5.6" @@ -13415,6 +13468,7 @@ __metadata: dependencies: "@babel/runtime": "npm:^7.23.2" "@juggle/resize-observer": "npm:^3.4.0" + "@testing-library/jest-dom": "npm:^6.6.3" "@testing-library/react": "npm:^14.0.0" "@types/is-hotkey": "npm:^0.1.8" "@types/jest": "npm:29.5.6" @@ -13438,7 +13492,7 @@ __metadata: react: ">=18.2.0" react-dom: ">=18.2.0" slate: ">=0.114.0" - slate-dom: ">=0.110.2" + slate-dom: ">=0.116.0" languageName: unknown linkType: soft