@olddevs/ui 4.5.1 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/editor/RichTextEditor.d.ts +2 -2
- package/dist/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/editor/RichTextEditor.js +3 -0
- package/dist/editor/RichTextEditor.js.map +1 -1
- package/dist/editor/core/blockTypes.d.ts +2 -8
- package/dist/editor/core/blockTypes.d.ts.map +1 -1
- package/dist/editor/core/blockTypes.js +11 -54
- package/dist/editor/core/blockTypes.js.map +1 -1
- package/dist/editor/core/containers.d.ts.map +1 -1
- package/dist/editor/core/containers.js +1 -0
- package/dist/editor/core/containers.js.map +1 -1
- package/dist/editor/core/customMarkdown.js +1 -1
- package/dist/editor/core/customMarkdown.js.map +1 -1
- package/dist/editor/core/customTool.d.ts +6 -6
- package/dist/editor/core/customTool.d.ts.map +1 -1
- package/dist/editor/core/customToolEngine.d.ts +2 -2
- package/dist/editor/core/extensions.d.ts +7 -2
- package/dist/editor/core/extensions.d.ts.map +1 -1
- package/dist/editor/core/extensions.js +96 -64
- package/dist/editor/core/extensions.js.map +1 -1
- package/dist/editor/core/fieldNotice.d.ts +1 -1
- package/dist/editor/core/insertItems.d.ts +5 -28
- package/dist/editor/core/insertItems.d.ts.map +1 -1
- package/dist/editor/core/insertItems.js +3 -94
- package/dist/editor/core/insertItems.js.map +1 -1
- package/dist/editor/core/insertMenuTool.d.ts +13 -0
- package/dist/editor/core/insertMenuTool.d.ts.map +1 -0
- package/dist/editor/core/insertMenuTool.js +20 -0
- package/dist/editor/core/insertMenuTool.js.map +1 -0
- package/dist/editor/core/schema.d.ts +20 -5
- package/dist/editor/core/schema.d.ts.map +1 -1
- package/dist/editor/core/schema.js +18 -3
- package/dist/editor/core/schema.js.map +1 -1
- package/dist/editor/core/shortcuts.d.ts +56 -5
- package/dist/editor/core/shortcuts.d.ts.map +1 -1
- package/dist/editor/core/shortcuts.js +91 -156
- package/dist/editor/core/shortcuts.js.map +1 -1
- package/dist/editor/core/skeleton.d.ts +1 -1
- package/dist/editor/core/skeleton.d.ts.map +1 -1
- package/dist/editor/core/skeleton.js +1 -0
- package/dist/editor/core/skeleton.js.map +1 -1
- package/dist/editor/core/toolButtons.d.ts +3 -3
- package/dist/editor/core/toolDefinition.d.ts +3 -3
- package/dist/editor/core/toolDescriptor.d.ts +49 -30
- package/dist/editor/core/toolDescriptor.d.ts.map +1 -1
- package/dist/editor/core/toolDescriptor.js +2 -5
- package/dist/editor/core/toolDescriptor.js.map +1 -1
- package/dist/editor/core/toolLoader.d.ts +1 -1
- package/dist/editor/core/toolLoader.d.ts.map +1 -1
- package/dist/editor/core/toolOptions.d.ts +19 -2
- package/dist/editor/core/toolOptions.d.ts.map +1 -1
- package/dist/editor/core/toolOptions.js.map +1 -1
- package/dist/editor/core/tools.d.ts +10 -2
- package/dist/editor/core/tools.d.ts.map +1 -1
- package/dist/editor/core/tools.js +1 -0
- package/dist/editor/core/tools.js.map +1 -1
- package/dist/editor/features/builtins.d.ts +6 -8
- package/dist/editor/features/builtins.d.ts.map +1 -1
- package/dist/editor/features/builtins.js +48 -21
- package/dist/editor/features/builtins.js.map +1 -1
- package/dist/editor/features/code/codeBlockTool.d.ts +5 -6
- package/dist/editor/features/code/codeBlockTool.d.ts.map +1 -1
- package/dist/editor/features/code/codeBlockTool.js +10 -1
- package/dist/editor/features/code/codeBlockTool.js.map +1 -1
- package/dist/editor/features/color/colorTools.d.ts +14 -0
- package/dist/editor/features/color/colorTools.d.ts.map +1 -0
- package/dist/editor/features/color/colorTools.js +39 -0
- package/dist/editor/features/color/colorTools.js.map +1 -0
- package/dist/editor/features/details/details.d.ts +68 -0
- package/dist/editor/features/details/details.d.ts.map +1 -0
- package/dist/editor/features/details/details.js +237 -0
- package/dist/editor/features/details/details.js.map +1 -0
- package/dist/editor/features/details/detailsMarkdown.d.ts +17 -0
- package/dist/editor/features/details/detailsMarkdown.d.ts.map +1 -0
- package/dist/editor/features/details/detailsMarkdown.js +84 -0
- package/dist/editor/features/details/detailsMarkdown.js.map +1 -0
- package/dist/editor/features/details/detailsTool.d.ts +16 -0
- package/dist/editor/features/details/detailsTool.d.ts.map +1 -0
- package/dist/editor/features/details/detailsTool.js +39 -0
- package/dist/editor/features/details/detailsTool.js.map +1 -0
- package/dist/editor/features/emoji/emojiTool.d.ts +1 -1
- package/dist/editor/features/heading/headingTool.d.ts +18 -0
- package/dist/editor/features/heading/headingTool.d.ts.map +1 -0
- package/dist/editor/features/heading/headingTool.js +59 -0
- package/dist/editor/features/heading/headingTool.js.map +1 -0
- package/dist/editor/features/history/historyTool.d.ts +15 -0
- package/dist/editor/features/history/historyTool.d.ts.map +1 -0
- package/dist/editor/features/history/historyTool.js +28 -0
- package/dist/editor/features/history/historyTool.js.map +1 -0
- package/dist/editor/features/image/imageTool.d.ts +19 -0
- package/dist/editor/features/image/imageTool.d.ts.map +1 -0
- package/dist/editor/features/image/imageTool.js +28 -0
- package/dist/editor/features/image/imageTool.js.map +1 -0
- package/dist/editor/features/layout/layoutTool.d.ts +11 -0
- package/dist/editor/features/layout/layoutTool.d.ts.map +1 -0
- package/dist/editor/features/layout/layoutTool.js +20 -0
- package/dist/editor/features/layout/layoutTool.js.map +1 -0
- package/dist/editor/features/lists/listTools.d.ts +15 -0
- package/dist/editor/features/lists/listTools.d.ts.map +1 -0
- package/dist/editor/features/lists/listTools.js +78 -0
- package/dist/editor/features/lists/listTools.js.map +1 -0
- package/dist/editor/features/marks/markTools.d.ts +16 -0
- package/dist/editor/features/marks/markTools.d.ts.map +1 -0
- package/dist/editor/features/marks/markTools.js +43 -0
- package/dist/editor/features/marks/markTools.js.map +1 -0
- package/dist/editor/features/search/searchTool.d.ts +1 -1
- package/dist/editor/features/table/tableTool.d.ts +3 -3
- package/dist/editor/features/wrapper/wrapperTool.d.ts +11 -0
- package/dist/editor/features/wrapper/wrapperTool.d.ts.map +1 -0
- package/dist/editor/features/wrapper/wrapperTool.js +32 -0
- package/dist/editor/features/wrapper/wrapperTool.js.map +1 -0
- package/dist/editor/index.d.ts +1 -1
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/schema-entry.d.ts +1 -1
- package/dist/editor/styles/prose.d.ts.map +1 -1
- package/dist/editor/styles/prose.js +26 -0
- package/dist/editor/styles/prose.js.map +1 -1
- package/dist/editor/ui/EditorToolbar.d.ts.map +1 -1
- package/dist/editor/ui/EditorToolbar.js +5 -38
- package/dist/editor/ui/EditorToolbar.js.map +1 -1
- package/dist/editor/ui/SelectionBubble.d.ts.map +1 -1
- package/dist/editor/ui/SelectionBubble.js +1 -1
- package/dist/editor/ui/SelectionBubble.js.map +1 -1
- package/dist/editor/ui/ToolButtonView.d.ts.map +1 -1
- package/dist/editor/ui/ToolButtonView.js +1 -1
- package/dist/editor/ui/ToolButtonView.js.map +1 -1
- package/dist/i18n/defaults.d.ts.map +1 -1
- package/dist/i18n/defaults.js +3 -0
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/messages.d.ts +16 -1
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/icons.d.ts +8 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/locales/ru.d.ts.map +1 -1
- package/dist/locales/ru.js +3 -0
- package/dist/locales/ru.js.map +1 -1
- package/docs/api/editor-extension.en.md +68 -68
- package/docs/api/editor-extension.md +55 -55
- package/docs/api/messages.en.md +4 -1
- package/docs/api/messages.md +3 -0
- package/docs/api/migration-notes.en.md +11 -11
- package/docs/api/migration-notes.md +2 -2
- package/docs/api/utilities.en.md +6 -6
- package/docs/components/actions/split-button.en.md +9 -9
- package/docs/components/content/data-display.en.md +1 -1
- package/docs/components/content/layout-primitives.en.md +3 -3
- package/docs/components/content/rich-text-toc.en.md +1 -1
- package/docs/components/content/rich-text-view.en.md +23 -17
- package/docs/components/content/rich-text-view.md +17 -11
- package/docs/components/content/virtual-grid.en.md +2 -2
- package/docs/components/date-time/date-picker.en.md +1 -1
- package/docs/components/inputs/rich-text-editor.en.md +283 -230
- package/docs/components/inputs/rich-text-editor.md +139 -86
- package/docs/components/navigation/mega-menu.en.md +10 -10
- package/docs/components/overlays/menu.en.md +2 -2
- package/docs/components/overlays/shortcuts-help.en.md +1 -1
- package/docs/components/table/data-table.en.md +3 -3
- package/docs/components/table/filter-bar.en.md +1 -1
- package/docs/components/table/toolbar.en.md +1 -1
- package/docs/conventions.en.md +2 -2
- package/docs/conventions.md +1 -1
- package/docs/getting-started.en.md +9 -9
- package/docs/getting-started.md +8 -8
- package/docs/glossary.en.md +193 -133
- package/docs/glossary.md +191 -132
- package/docs/icons.en.md +12 -9
- package/docs/icons.md +3 -0
- package/docs/palette.en.md +3 -3
- package/docs/theming.en.md +6 -6
- package/package.json +2 -1
- package/src/editor/RichTextEditor.tsx +9 -6
- package/src/editor/core/atomText.ts +2 -2
- package/src/editor/core/blockTypes.ts +19 -83
- package/src/editor/core/containers.ts +4 -2
- package/src/editor/core/customMarkdown.ts +2 -2
- package/src/editor/core/customTool.ts +6 -6
- package/src/editor/core/customToolEngine.ts +9 -9
- package/src/editor/core/extensions.ts +165 -110
- package/src/editor/core/fieldNotice.ts +1 -1
- package/src/editor/core/handle.ts +2 -2
- package/src/editor/core/insertItems.ts +12 -158
- package/src/editor/core/insertMenuTool.ts +32 -0
- package/src/editor/core/jsonDocument.ts +1 -1
- package/src/editor/core/schema.ts +42 -7
- package/src/editor/core/shortcuts.ts +116 -177
- package/src/editor/core/skeleton.ts +4 -3
- package/src/editor/core/toolButtons.ts +3 -3
- package/src/editor/core/toolDefinition.ts +4 -4
- package/src/editor/core/toolDescriptor.ts +65 -52
- package/src/editor/core/toolLoader.ts +3 -3
- package/src/editor/core/toolOptions.ts +21 -2
- package/src/editor/core/tools.ts +10 -1
- package/src/editor/core/viewIsland.ts +1 -1
- package/src/editor/features/builtins.ts +76 -41
- package/src/editor/features/code/codeBlockTool.ts +16 -8
- package/src/editor/features/color/colorTools.ts +68 -0
- package/src/editor/features/details/details.ts +389 -0
- package/src/editor/features/details/detailsMarkdown.ts +158 -0
- package/src/editor/features/details/detailsTool.ts +69 -0
- package/src/editor/features/emoji/emojiTool.tsx +1 -1
- package/src/editor/features/heading/headingTool.ts +96 -0
- package/src/editor/features/history/historyTool.ts +42 -0
- package/src/editor/features/image/imageTool.ts +49 -0
- package/src/editor/features/layout/layoutTool.ts +40 -0
- package/src/editor/features/lists/listTools.ts +112 -0
- package/src/editor/features/marks/markTools.ts +78 -0
- package/src/editor/features/search/searchTool.ts +1 -1
- package/src/editor/features/table/tableTool.ts +3 -3
- package/src/editor/features/toc/tocTool.ts +1 -1
- package/src/editor/features/wrapper/wrapperTool.ts +52 -0
- package/src/editor/index.ts +1 -0
- package/src/editor/schema-entry.ts +1 -1
- package/src/editor/styles/prose.ts +49 -0
- package/src/editor/ui/EditorToolbar.tsx +7 -50
- package/src/editor/ui/SelectionBubble.tsx +2 -5
- package/src/editor/ui/ToolButtonView.tsx +2 -1
- package/src/i18n/defaults.ts +3 -0
- package/src/i18n/messages.ts +14 -1
- package/src/icons.ts +7 -0
- package/src/locales/ru.ts +3 -0
package/dist/locales/ru.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAuCtD,eAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAuCtD,eAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,eAAO,MAAM,QAAQ,EAAE,UAmpBtB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/locales/ru.js
CHANGED
|
@@ -459,6 +459,9 @@ export const messages = {
|
|
|
459
459
|
warning: "Внимание",
|
|
460
460
|
danger: "Осторожно",
|
|
461
461
|
},
|
|
462
|
+
details: "Сворачиваемый блок",
|
|
463
|
+
unwrapDetails: "Снять сворачивание",
|
|
464
|
+
detailsToggle: ({ text }) => (text ? `Подробности: ${text}` : "Подробности: без заголовка"),
|
|
462
465
|
emoji: "Эмодзи",
|
|
463
466
|
emojiGrid: "Выберите эмодзи",
|
|
464
467
|
emojiCategory: {
|
package/dist/locales/ru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
category: api
|
|
3
3
|
status: stable
|
|
4
4
|
source: src/editor/index.ts
|
|
5
|
-
sourceHash:
|
|
5
|
+
sourceHash: 808244893ee6
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Editor extension API
|
|
9
9
|
|
|
10
10
|
## Summary for AI
|
|
11
11
|
|
|
12
|
-
A map of how a product extends `RichTextEditor` from `@olddevs/ui/editor`, and the stability boundary of this API. The unit of extension is a **custom Tool** (`CustomTool`): the description of one Editor capability, passed in `tools` mixed in with the kit's names. It carries Blocks and Marks with Schema rules (as data),
|
|
12
|
+
A map of how a product extends `RichTextEditor` from `@olddevs/ui/editor`, and the stability boundary of this API. The unit of extension is a **custom Tool** (`CustomTool`): the description of one Editor capability, passed in `tools` mixed in with the kit's names. It carries Blocks and Marks with Schema rules (as data), Extensions (Tiptap extensions, supplied directly or through a Loader) and UI contributions: buttons, Insert items, Block actions, Text cards. A custom Trigger character (`trigger`) is also available: `@` for mentions opens the same list as `/`. The screen's code controls the field through the Handle (`ref`) and the `useRichTextEditorState` hook, learns about Readiness and Field focus through the `onReady`, `onFocus` and `onBlur` callbacks, puts its own content into the Status bar (`status`) and reports an error with the `showNotice` command. A Tool has three typed parts, like `options`, `storage` and `commands` of a Tiptap extension: **options** (`tool(name, options)` for the built-in `search` and `toc`, `defineTool` for a custom Tool), **state** (the `useRichTextToolState` hook) and **commands** (`handle.tool(name)`); their types are collected in the extensible `RichTextTools` map, where a custom Tool adds itself through `declare module "@olddevs/ui/editor"`. The same `tools` array is understood by server-side sanitizing (`sanitizeRichText`, `richTextSchema`) and by `RichTextView` with Islands. Everything listed follows the kit's semver from the first release, the HTML convention is frozen, and a Tiptap major is a kit major (section "Stability"). The details of each item live on the [RichTextEditor](../components/inputs/rich-text-editor.md) page; this page covers the map, the contract boundary and the recipes.
|
|
13
13
|
|
|
14
14
|
```tsx
|
|
15
15
|
import {
|
|
@@ -32,7 +32,7 @@ The decision is ADR-0058, which supplements ADR-0050. Capitalized terms come fro
|
|
|
32
32
|
- The Document needs a custom Block, Atom or Mark: a merge tag, an embed, a product card, a comment on a fragment. Their Schema, HTML, Markdown and display in `RichTextView` are described by one Tool.
|
|
33
33
|
- Your own command in the Editor's interface: a button on the Toolbar, an Insert item in "/" and "+", a Block action in the Block handle menu, a Text card next to a fragment of text.
|
|
34
34
|
- The screen controls the field: it inserts a template at the caret, renders its own panel, saves on focus loss, and shows "Saved" and the word count.
|
|
35
|
-
- A built-in Tool needs configuring (`toc` under a header with its own height variable, Find with case matching on) or you need to know what is happening inside it: a match counter in the Status
|
|
35
|
+
- A built-in Tool needs configuring (`toc` under a header with its own height variable, Find with case matching on) or you need to know what is happening inside it: a match counter in the Status bar, an external navigation over the headings, a "Find" button in the screen header.
|
|
36
36
|
- A custom Tool with options whose state and commands the screen needs: `defineTool` instead of a hand-written factory.
|
|
37
37
|
- The server stores a Document with custom Blocks and must sanitize it with the same set of rules as the Editor.
|
|
38
38
|
|
|
@@ -40,39 +40,39 @@ The decision is ADR-0058, which supplements ADR-0050. Capitalized terms come fro
|
|
|
40
40
|
|
|
41
41
|
- What you need is already among the kit's Tools (["Tools and Presets"](../components/inputs/rich-text-editor.md#инструменты-и-пресеты)): pass the name in `tools`, do not write a custom Tool.
|
|
42
42
|
- To hide a built-in button or item, narrow `tools`. A built-in Tool cannot be replaced by name: turn it off and add a custom Tool under your own name.
|
|
43
|
-
- Only `search` and `
|
|
43
|
+
- Only `search`, `toc` and `details` have options; `tool("bold", …)` does not compile. Options for other built-in Tools will be added one at a time, as consumers ask for them. You cannot change the behavior of a built-in Tool by substitution (there is no `extend()` as in Tiptap): the descriptions of built-in Tools are not exported.
|
|
44
44
|
- You cannot change the options of a mounted field: they are read once, when the engine is created, together with `tools`. Remount the field with a key.
|
|
45
45
|
- You cannot put arbitrary React in the Toolbar row or in a menu: the kit renders the UI contributions itself. React is allowed only in the content of a popover (of a button, Insert item or Block action) and in a Text card.
|
|
46
|
-
- You cannot intercept paste and drop through a prop: the
|
|
47
|
-
- What is not provided until consumers ask for it (ADR-0058, section 13): `insertImage` and the selection's HTML in the Handle, `onSelectionChange`, `onPaste`, `onDrop`, `onEmpty`, `onDestroy`, history events, a signal about removed images, locked template Blocks, a "menu" UI contribution kind, Text cards and the Status
|
|
46
|
+
- You cannot intercept paste and drop through a prop: the Extensions of a custom Tool handle them (["Paste and drop order"](../components/inputs/rich-text-editor.md#порядок-вставки-и-drop)).
|
|
47
|
+
- What is not provided until consumers ask for it (ADR-0058, section 13): `insertImage` and the selection's HTML in the Handle, `onSelectionChange`, `onPaste`, `onDrop`, `onEmpty`, `onDestroy`, history events, a signal about removed images, locked template Blocks, a "menu" UI contribution kind, Text cards and the Status bar in `RichTextView`. Until then the screen has `ref.current.editor` and its events.
|
|
48
48
|
- Custom Trigger characters like `@` are no longer on this list: they are supported by the `trigger` field of a Tool (ADR-0064, section "Trigger character" below).
|
|
49
49
|
|
|
50
50
|
## API map
|
|
51
51
|
|
|
52
|
-
| What | Where in the API
|
|
53
|
-
| -------------------------------------------- |
|
|
54
|
-
| Custom Tool | `CustomTool` in `tools`; Presets — `RICH_TEXT_PRESETS`
|
|
55
|
-
| Schema rules and the HTML convention | `blocks` (`CustomBlock`), `marks` (`CustomMark`), `CustomAttribute`, `PrefixedName`
|
|
56
|
-
| Button | `buttons` (`CustomToolButton`, `CustomToolPopover`, `CustomToolLabel`)
|
|
57
|
-
| Insert item, Block action | `insertItems` (`CustomInsertItem`), `blockActions` (`CustomBlockAction`)
|
|
58
|
-
| Trigger character | `trigger` (`CustomTrigger`, `TriggerItem`, `TriggerContext`)
|
|
59
|
-
| Text card | `textCards` (`CustomTextCard`), the `markRange` helper
|
|
60
|
-
| Handle and your own panel | `RichTextEditorHandle`, `useRichTextEditorState(ref, selector)`
|
|
61
|
-
| Options of a built-in Tool | `tool(name, options)` → `ConfiguredTool` for `search` and `
|
|
62
|
-
| A custom Tool with options, state, commands | `defineTool({ name, defaults, create, state, commands })` → `ToolDefinition`, `tool(definition, options)`
|
|
63
|
-
| Types of options, state and commands | the extensible `RichTextTools` interface
|
|
64
|
-
| Tool state | `useRichTextToolState(ref, name, selector?)`, `SearchToolState`, `TocToolState`, `TocToolHeading`
|
|
65
|
-
| Tool commands | `handle.tool(name)`, `SearchToolCommands`, `TocToolCommands`
|
|
66
|
-
| Events | `onReady`, `onFocus`, `onBlur`; paste and drop — by the
|
|
67
|
-
| Status
|
|
68
|
-
| Loader, Readiness and Skeleton | `engine: () => import(…)`
|
|
69
|
-
| Atom text: `getText`, `maxLength`, emptiness | `renderText` of the
|
|
70
|
-
| Server, Markdown, View | `sanitizeRichText(html, DOMPurify, tools)`, `richTextSchema(tools)`, `RichTextView`
|
|
71
|
-
| Island of a custom Block | `CustomBlock.island`, `CustomIslandProps`, the `tools` prop of `RichTextView`
|
|
52
|
+
| What | Where in the API | Details |
|
|
53
|
+
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| Custom Tool | `CustomTool` in `tools`; Presets — `RICH_TEXT_PRESETS` | ["Custom Tool"](../components/inputs/rich-text-editor.md#свой-инструмент) |
|
|
55
|
+
| Schema rules and the HTML convention | `blocks` (`CustomBlock`), `marks` (`CustomMark`), `CustomAttribute`, `PrefixedName` | ["Custom Tool"](../components/inputs/rich-text-editor.md#свой-инструмент) |
|
|
56
|
+
| Button | `buttons` (`CustomToolButton`, `CustomToolPopover`, `CustomToolLabel`) | ["Custom Tool's button"](../components/inputs/rich-text-editor.md#кнопка-своего-инструмента) |
|
|
57
|
+
| Insert item, Block action | `insertItems` (`CustomInsertItem`), `blockActions` (`CustomBlockAction`) | ["Insert items and Block actions"](../components/inputs/rich-text-editor.md#пункты-вставки-и-действия-над-блоком) |
|
|
58
|
+
| Trigger character | `trigger` (`CustomTrigger`, `TriggerItem`, `TriggerContext`) | ["Custom Trigger character"](../components/inputs/rich-text-editor.md#свой-символ-триггер) |
|
|
59
|
+
| Text card | `textCards` (`CustomTextCard`), the `markRange` helper | ["Text card"](../components/inputs/rich-text-editor.md#карточка-у-текста) |
|
|
60
|
+
| Handle and your own panel | `RichTextEditorHandle`, `useRichTextEditorState(ref, selector)` | ["Handle (`ref`) and your own toolbar outside the field"](../components/inputs/rich-text-editor.md#хэндл-ref-и-своя-панель-вне-поля) |
|
|
61
|
+
| Options of a built-in Tool | `tool(name, options)` → `ConfiguredTool` for `search`, `toc` and `details`; `SearchToolOptions`, `TocToolOptions`, `TocLevel`, `DetailsToolOptions` | ["Options of a built-in Tool: `tool()`"](../components/inputs/rich-text-editor.md#опции-встроенного-инструмента-tool) |
|
|
62
|
+
| A custom Tool with options, state, commands | `defineTool({ name, defaults, create, state, commands })` → `ToolDefinition`, `tool(definition, options)` | ["Options, state and commands"](editor-extension.md#опции-состояние-и-команды) |
|
|
63
|
+
| Types of options, state and commands | the extensible `RichTextTools` interface | ["The `RichTextTools` map and declaration merging"](editor-extension.md#карта-richtexttools-и-declaration-merging) |
|
|
64
|
+
| Tool state | `useRichTextToolState(ref, name, selector?)`, `SearchToolState`, `TocToolState`, `TocToolHeading` | ["Tool state: `useRichTextToolState`"](../components/inputs/rich-text-editor.md#состояние-инструмента-userichtexttoolstate) |
|
|
65
|
+
| Tool commands | `handle.tool(name)`, `SearchToolCommands`, `TocToolCommands` | ["Tool commands: `handle.tool()`"](../components/inputs/rich-text-editor.md#команды-инструмента-handletool) |
|
|
66
|
+
| Events | `onReady`, `onFocus`, `onBlur`; paste and drop — by the Extensions | ["Events"](../components/inputs/rich-text-editor.md#события) |
|
|
67
|
+
| Status bar and Field notice | the `status` prop; the engine command `showNotice`, the `FieldNotice` type | ["Status bar and Field notice"](../components/inputs/rich-text-editor.md#строка-статуса-и-сообщение-поля) |
|
|
68
|
+
| Loader, Readiness and Skeleton | `engine: () => import(…)` | ["Extensions Loader"](../components/inputs/rich-text-editor.md#загрузчик-extensions), ["Skeleton"](../components/inputs/rich-text-editor.md#скелет) |
|
|
69
|
+
| Atom text: `getText`, `maxLength`, emptiness | `renderText` of the Extensions | ["Atom text"](../components/inputs/rich-text-editor.md#текст-атома) |
|
|
70
|
+
| Server, Markdown, View | `sanitizeRichText(html, DOMPurify, tools)`, `richTextSchema(tools)`, `RichTextView` | ["Outside the Editor"](../components/inputs/rich-text-editor.md#вне-редактора-сервер-markdown-и-просмотр), [RichTextView, "Custom Tools: the third argument"](../components/content/rich-text-view.md#свои-инструменты-третий-аргумент) |
|
|
71
|
+
| Island of a custom Block | `CustomBlock.island`, `CustomIslandProps`, the `tools` prop of `RichTextView` | [RichTextView, "Custom Block's Island"](../components/content/rich-text-view.md#остров-своего-блока) |
|
|
72
72
|
|
|
73
73
|
## Custom Tool and the HTML convention
|
|
74
74
|
|
|
75
|
-
There is one description, with two parts inside. The **Schema rules** are plain data with no Tiptap: the Editor, server-side sanitizing and the View read them. The **
|
|
75
|
+
There is one description, with two parts inside. The **Schema rules** are plain data with no Tiptap: the Editor, server-side sanitizing and the View read them. The **Extensions** are made up entirely of Tiptap extensions (Node, Mark, Extension, ProseMirror plugins, a React node view): behavior only, while the kit sets up HTML parsing and output. The name, the Extensions and a Schema rule for each of their Nodes and Marks are required; everything else has defaults: a plain Block with no traits, exported to Markdown as its content, paragraph rhythm in the View, no UI contributions. A Tool may carry no Block at all — for example, only a paste filter.
|
|
76
76
|
|
|
77
77
|
Every custom name starts with a Consumer prefix followed by an underscore: the Tool `acme_mergeTag`, the attribute `acme_size`. The kit's names have no underscores, so custom and built-in names do not collide, either in the `tools` array or in a saved Document. The kit writes and reads custom HTML:
|
|
78
78
|
|
|
@@ -83,7 +83,7 @@ Every custom name starts with a Consumer prefix followed by an underscore: the T
|
|
|
83
83
|
| Mark | `<span data-mark="acme_comment">…</span>` |
|
|
84
84
|
| Attribute | `data-acme_size="m"` — the value follows the rule: list, pattern or URL |
|
|
85
85
|
|
|
86
|
-
The `tools` array is checked once, when the engine is created (with Loaders, after they have run). A name without a prefix, a name clash,
|
|
86
|
+
The `tools` array is checked once, when the engine is created (with Loaders, after they have run). A name without a prefix, a name clash, Extensions with a Node or Mark that has no Schema rule (or the reverse), or a UI contribution without a required field produces an "Editor failed to start" field error, not a silent loss of Blocks on the first save. An unknown **string** in `tools` is still dropped silently.
|
|
87
87
|
|
|
88
88
|
## UI contributions
|
|
89
89
|
|
|
@@ -91,7 +91,7 @@ The kit renders, the Tool describes. So the ARIA roles, the Toolbar's single Tab
|
|
|
91
91
|
|
|
92
92
|
| UI contribution | Field | Slot |
|
|
93
93
|
| --------------- | -------------- | ---------------------------------------------------------------------------------------------------- |
|
|
94
|
-
| Button | `buttons` | A Toolbar group before "Undo" and "Redo"; with `selectionMenu: true`, also the
|
|
94
|
+
| Button | `buttons` | A Toolbar group before "Undo" and "Redo"; with `selectionMenu: true`, also the Bubble menu |
|
|
95
95
|
| Insert item | `insertItems` | The end of its section ("Add" or "Turn into") in "/", "+", "Add ›" and the Block handle's "Format ›" |
|
|
96
96
|
| Block action | `blockActions` | A section of the Block handle menu before "Delete" — for Blocks from `blocks` |
|
|
97
97
|
| Text card | `textCards` | A frame under the text range where the caret is; no more than one is open |
|
|
@@ -99,21 +99,21 @@ The kit renders, the Tool describes. So the ARIA roles, the Toolbar's single Tab
|
|
|
99
99
|
- **The label** is a string or a function that receives `{ locale }` (the `UiProvider` locale); the `UiProvider` message catalog is not extended for third-party Tools, and overriding is through the Tool factory's options (recipe below).
|
|
100
100
|
- **The icon** is required for a button, item and action: a component with the `IconProps` contract from `@olddevs/ui/icons`, or your own.
|
|
101
101
|
- **The popover** — a button, Insert item and Block action have exactly one of `run` and `popover`. The content is a function that receives `{ editor, close }` (for an action, also the Block's `pos`), and the kit provides the frame: the overlay layer, the Editor's popover Glass, the Escape stack, the name (the UI contribution's label), and returning focus and selection to the Document. A Text card sits on the same Glass, so your content does not need a solid background: it would cover the Glass backing. When the system transparency or contrast setting is on, the backing becomes solid on its own anyway. The popover opens at the button (click), at the caret (the button's shortcut, an item from "/", "+", "Add ›", "Format ›" and its shortcut) or at the Block (an action from the Block handle menu and its shortcut).
|
|
102
|
-
- **The shortcut** (`shortcut`) is the single source: the kit binds the keyboard shortcut and writes it into the tooltip, `aria-keyshortcuts` and the
|
|
102
|
+
- **The shortcut** (`shortcut`) is the single source: the kit binds the keyboard shortcut and writes it into the tooltip, `aria-keyshortcuts` and the Keyboard shortcuts popover. Keyboard shortcuts bound by the Extensions do not reach the Keyboard shortcuts popover.
|
|
103
103
|
- **A disabled Tool** removes its UI contributions from every surface.
|
|
104
104
|
|
|
105
105
|
## Trigger character
|
|
106
106
|
|
|
107
|
-
A Tool's `trigger` is not a UI contribution of a Slot but another way into the same list as "/": typing the `char` character (`@`, `#`) at the start of a Block or after a space opens a list of items at the caret, which the Tool returns on demand (`items(query)`, synchronously or as a promise). The kit renders the list: it is the same component as the
|
|
107
|
+
A Tool's `trigger` is not a UI contribution of a Slot but another way into the same list as "/": typing the `char` character (`@`, `#`) at the start of a Block or after a space opens a list of items at the caret, which the Tool returns on demand (`items(query)`, synchronously or as a promise). The kit renders the list: it is the same component as the Slash menu, with search as you type, arrow keys, `Enter`, `Escape` and a "Nothing found" row. Picking an item calls `onSelect(item, { editor, range, query })`, and the handler replaces `range` (the typed `@query`) with a custom node. Inside a word (`a@b.com`) and in code, the list does not open. The character is one printable character, not `/` and not a space, unique in `tools`; a violation produces an error in the `tools` array (ADR-0064, details on the [RichTextEditor](../components/inputs/rich-text-editor.md#свой-символ-триггер) page).
|
|
108
108
|
|
|
109
|
-
## Handle (`ref`), events, Status
|
|
109
|
+
## Handle (`ref`), events, Status bar
|
|
110
110
|
|
|
111
|
-
- **The Handle** (`ref`) — insertion at the caret (`insertHTML`, `insertText` → `boolean`), reading (`getText`, `getSelectedText`, `isEmpty`, `getHTML`, `getMarkdown`, `getJSON`), focus (`focus("start" | "end" | "restore")`, `blur`), history (`undo`, `redo`, `canUndo`, `canRedo`), plus `clear`, `setMarkdown` and `setJSON` (a JSON envelope → `boolean`) and `tool(name)`, the commands of a Tool (see "Options, state and commands" below). `openSearch({ replace? })` is deprecated: it works as `tool("search")?.open({ replace })`, warns once in development and is removed in 5.0. Insertion is
|
|
111
|
+
- **The Handle** (`ref`) — insertion at the caret (`insertHTML`, `insertText` → `boolean`), reading (`getText`, `getSelectedText`, `isEmpty`, `getHTML`, `getMarkdown`, `getJSON`), focus (`focus("start" | "end" | "restore")`, `blur`), history (`undo`, `redo`, `canUndo`, `canRedo`), plus `clear`, `setMarkdown` and `setJSON` (a JSON envelope → `boolean`) and `tool(name)`, the commands of a Tool (see "Options, state and commands" below). `openSearch({ replace? })` is deprecated: it works as `tool("search")?.open({ replace })`, warns once in development and is removed in 5.0. Insertion is a User edit: a history step, `onChange` after a delay, the `maxLength` limit; past the limit, the insertion does not happen. Before Readiness the methods do not throw and change nothing: `insertHTML` and `insertText` return `false`. `editor` is the raw Tiptap for commands of Marks, Blocks and custom Tools; its API follows the Tiptap major.
|
|
112
112
|
- **`useRichTextEditorState(ref, selector)`** — the state of your own panel: re-renders only when the slice changes, `null` before the engine and on the server.
|
|
113
113
|
- **`useRichTextToolState(ref, name, selector?)`** — the state of a Tool: a data snapshot; the screen re-renders only when it changes, and the hook returns `null` before mount, on the server, after the Editor unmounts and without the Tool in the set.
|
|
114
114
|
- **`onReady()`** — once per mount, when Readiness arrives; **`onFocus()`** and **`onBlur()`** — report focus on the field as a whole (Document, Toolbar, the kit's popovers, the HTML field); before `onBlur`, a pending `onChange` is flushed.
|
|
115
115
|
- **`status`** — the screen's React node in the line under the Document, at the start; the kit's counter is at the end. The kit does not announce the line.
|
|
116
|
-
- **`showNotice({ tone: "status" | "error", text } | null)`** — an engine command: one Field notice, a new one replaces the previous; `status` is only announced, `error` is visible as a `role="alert"` line until the next
|
|
116
|
+
- **`showNotice({ tone: "status" | "error", text } | null)`** — an engine command: one Field notice, a new one replaces the previous; `status` is only announced, `error` is visible as a `role="alert"` line until the next User edit. The kit's image messages go through the same channel.
|
|
117
117
|
|
|
118
118
|
## Options, state and commands
|
|
119
119
|
|
|
@@ -125,11 +125,11 @@ A Tool has three typed parts. They carry Tiptap's `options`, `storage` and `comm
|
|
|
125
125
|
| State | A snapshot the screen reads | The kit for built-ins; the `state` field of `defineTool` | `useRichTextToolState(ref, name, selector?)` |
|
|
126
126
|
| Commands | What the screen calls | The kit for built-ins; the `commands` field of `defineTool` | `ref.current?.tool(name)?.command()` |
|
|
127
127
|
|
|
128
|
-
The
|
|
128
|
+
The Extensions still follow the Tiptap major (ADR-0058, item 12.4). The three new parts do not depend on Tiptap: their types and behavior follow the kit's semver.
|
|
129
129
|
|
|
130
130
|
### `tool()`: a built-in Tool with options
|
|
131
131
|
|
|
132
|
-
`tool(name, options)` returns a Configured Tool: an opaque entry for `tools` (only the kit reads its fields). `search` has options (the starting flags) and so
|
|
132
|
+
`tool(name, options)` returns a Configured Tool: an opaque entry for `tools` (only the kit reads its fields). `search` has options (the starting flags), and so do `toc` (`offsetVar`, `levels`, `listWidth`) and `details` (`persist`: whether the open state of a collapsible Block is written into the Document); their values and an example are on the [RichTextEditor](../components/inputs/rich-text-editor.md#опции-встроенного-инструмента-tool) page. An entry switches the Tool on even without the name in `tools`, and a name from a Preset gives way to it. Two `tool()` entries with the same name are a set error.
|
|
133
133
|
|
|
134
134
|
`tool(definition, options)` configures a `defineTool` definition the same way; the options come from its `defaults`.
|
|
135
135
|
|
|
@@ -138,17 +138,17 @@ The Engine part still follows the Tiptap major (ADR-0058, item 12.4). The three
|
|
|
138
138
|
`defineTool({ name, defaults, create, state?, commands? })` returns a definition: an element of `tools` that works both without `tool()` (with the defaults from `defaults`) and with it.
|
|
139
139
|
|
|
140
140
|
- **`defaults`** is the full set of options. The options type is inferred from it, so you do not declare it a second time. A literal widens to its base type (`tone: "info"` becomes `string`): for a union, give the value a type, `tone: "info" as "info" | "warning"`.
|
|
141
|
-
- **`create(options)`** returns the body of the description: the same shape as `CustomTool`, without the name (`CustomToolBody`): the
|
|
141
|
+
- **`create(options)`** returns the body of the description: the same shape as `CustomTool`, without the name (`CustomToolBody`): the Extensions, Schema rules, UI contributions. It is called once per `tools` entry (the definition itself, or the object that `tool(definition, options)` returned): the kit remembers the result for the pair of the definition and the entry's options object. Anything closed over in the `create` body (a counter, a cache) is therefore shared by every Editor that uses that entry. A `tool(…)` entry created in a component body is new on every render, and the Island in `RichTextView` remounts on every render: take the `tools` set out of the render, into a module constant or `useMemo`. Keep the Extensions Loader a module constant: the Loader's cache lives on the function itself, and a new function on every `create` call would load the Extensions again for every entry.
|
|
142
142
|
- **`state({ editor, options })`** is the state for `useRichTextToolState`. It is called on every transaction and on every hook read, so it must be fast and free of side effects, and it must return data without DOM nodes. Primitives, arrays and plain objects are compared by value, so the screen re-renders only when the snapshot has changed. `Date`, `Map`, `Set` and class instances are compared by reference: a `state` that creates them anew on every call re-renders the screen on every transaction. Return plain data (`date.toISOString()`) or the same reference while the data has not changed. With no `state`, the Tool has no state and the hook returns `null`.
|
|
143
143
|
- **`commands({ editor, options })`** returns the commands for `handle.tool(name)`. It is called on every access through the Handle: thin wrappers over the engine, no subscriptions. A command returns a `boolean`, like the built-in ones. With no `commands`, `handle.tool(name)` returns `null`.
|
|
144
144
|
- **Merging options.** Nested plain objects are merged with the defaults, and arrays and functions are replaced whole, like `configure` in Tiptap v3. An `undefined` value is ignored: the existing value stays. The `defaults` object is not changed; the options object is shared by `create`, `state` and `commands`: read it, do not mutate it.
|
|
145
145
|
- **Options are read once**, when the engine is created, together with the set. To change them, remount the Editor with a key (`key`). The kit does not validate the values of a custom Tool's options; that is up to its author.
|
|
146
|
-
- **All the rules of a custom Tool apply** (ADR-0058): the Consumer prefix in the name, a unique name in `tools` (the same definition twice, with `tool()` and without, is also a set error), the set checks, the
|
|
146
|
+
- **All the rules of a custom Tool apply** (ADR-0058): the Consumer prefix in the name, a unique name in `tools` (the same definition twice, with `tool()` and without, is also a set error), the set checks, the Extensions Loader. `defineTool` is sugar over the same `CustomTool` shape: it has no build path of its own. A plain `CustomTool` object in `tools` works as before, without options, state and commands.
|
|
147
147
|
- **Server.** `defineTool` and `tool()` live in a module with no Tiptap or React at run time (Tiptap appears there only as types), so the `tools` set can be built in a server module next to the rest of the screen's configuration. A definition holds functions, like `CustomTool`, so it reaches a client component together with its module (an import), not as a prop across the RSC boundary. A configured built-in Tool is made of data: with data in its options, it can be passed as a prop too.
|
|
148
148
|
|
|
149
149
|
### The `RichTextTools` map and declaration merging
|
|
150
150
|
|
|
151
|
-
The types of all three parts are collected in the `RichTextTools` interface, like `Storage` and `Commands` in Tiptap: the key is the Tool's name, the value is `{ options; state; commands }`. The kit declares `search` and `
|
|
151
|
+
The types of all three parts are collected in the `RichTextTools` interface, like `Storage` and `Commands` in Tiptap: the key is the Tool's name, the value is `{ options; state; commands }`. The kit declares `search`, `toc` and `details` in it (the last has only `options`), and the consumer adds a custom Tool:
|
|
152
152
|
|
|
153
153
|
```ts
|
|
154
154
|
declare module "@olddevs/ui/editor" {
|
|
@@ -165,7 +165,7 @@ declare module "@olddevs/ui/editor" {
|
|
|
165
165
|
- The map gives the snapshot type to `useRichTextToolState`, the commands type to `handle.tool()` and the options to `tool()` for a built-in Tool. For a custom Tool, `tool()` takes the options from the `defaults` of its definition, so the `options` field in the map describes the options for readers of the map (`RichTextTools["acme_note"]["options"]`), and `tool()` does not use it.
|
|
166
166
|
- **Typing is optional.** A Tool not added to the map works: its state and commands have the type `unknown`.
|
|
167
167
|
- The file with `declare module` must be a module (it has an `import` or an `export`); otherwise the declaration does not augment the map but declares a module of its own. Put it next to the Tool's definition.
|
|
168
|
-
- Do not confuse the map with typing the engine. If you already type
|
|
168
|
+
- Do not confuse the map with typing the engine. If you already type Extensions through `declare module "@tiptap/core"` (`Commands`, `Storage`), keep doing so: that is the engine layer and follows its major, while `RichTextTools` is the kit layer.
|
|
169
169
|
|
|
170
170
|
### An end-to-end example
|
|
171
171
|
|
|
@@ -299,12 +299,12 @@ What to note here. The `tool("toc", …)` entry switches the Table of contents o
|
|
|
299
299
|
|
|
300
300
|
## Loaders, Readiness and Skeleton
|
|
301
301
|
|
|
302
|
-
The
|
|
302
|
+
The Extensions can be supplied by a Loader — `engine: () => import("./engine.js").then((m) => m.engine)`: the server then imports the module with the description, and Tiptap goes into a separate chunk. Loading starts on the first render in the browser, and the promise is cached on the Loader function (so a Loader is one function per module). **Readiness** is when the engine is created and the Loaders of all enabled Tools — custom and the heavy built-in ones (`codeBlock`, `table`) — have run. Before it, the field is a **Skeleton**: the frame, the place of the Toolbar and the Document cleaned by the Schema, with no input and no height jump; on the server, the frame without the Document. A Loader failure is a field error with "Retry", and the Document stays visible. For details, see ["Extensions Loader"](../components/inputs/rich-text-editor.md#загрузчик-extensions) and ["Skeleton"](../components/inputs/rich-text-editor.md#скелет).
|
|
303
303
|
|
|
304
304
|
## Server, Markdown, View and Island
|
|
305
305
|
|
|
306
306
|
- **The server** sanitizes the Document with the same `tools` array: `sanitizeRichText(html, DOMPurify, tools)`, the rules as data — `richTextSchema(tools)`. Both are also in the lightweight `@olddevs/ui/editor/schema` without Tiptap and React — together with `markRange`: the description of a custom Tool with a Text card can be built in a server module too. The names of the kit's Tools in `tools` do not narrow the allowlist: sanitizing accepts everything the kit accepts. Without the third argument sanitizing works as before, and custom Blocks are stripped.
|
|
307
|
-
- **Markdown** — rules in the
|
|
307
|
+
- **Markdown** — rules in the Extensions (`renderMarkdown`, `markdownTokenizer`, `parseMarkdown`). Without them a Block is exported as its content, an Atom as Atom text, and the text is not lost.
|
|
308
308
|
- **`RichTextView`** shows a custom Block as sanitized HTML with paragraph rhythm; styling is your CSS, keyed on `data-block`. An **Island** is a client component in the Block's `island` field: it comes to life after mounting and only if such a Block is in the Document; for this, `RichTextView` receives the same `tools`.
|
|
309
309
|
|
|
310
310
|
## Stability
|
|
@@ -316,34 +316,34 @@ The contract boundary per ADR-0058, item 12. The reviewer checks the changeset t
|
|
|
316
316
|
- the description of a custom Tool (`CustomTool` and its fields, `trigger` included), UI contributions and their Slots, Schema rules (`CustomBlock`, `CustomMark`, `CustomAttribute`), Block traits;
|
|
317
317
|
- the HTML convention (`data-block`, `data-mark`, `data-<prefix>_<name>`);
|
|
318
318
|
- the Handle's methods, `useRichTextEditorState`, the `onReady`, `onFocus`, `onBlur` callbacks, the `status` prop, the `showNotice` command and the `FieldNotice` type;
|
|
319
|
-
- options, state and commands (ADR-0069): the `RichTextTools` map, `tool()`, `defineTool()` and its types (`ToolDefinition`, `ConfiguredTool`), `useRichTextToolState`, `handle.tool()`, and the options, state and command fields of `search` and `toc`;
|
|
319
|
+
- options, state and commands (ADR-0069): the `RichTextTools` map, `tool()`, `defineTool()` and its types (`ToolDefinition`, `ConfiguredTool`), `useRichTextToolState`, `handle.tool()`, and the options, state and command fields of `search` and `toc` and the options of `details`;
|
|
320
320
|
- the third argument of `sanitizeRichText` and `richTextSchema`, the `tools` prop and the Island of `RichTextView`, `markRange`;
|
|
321
321
|
- the names of built-in Tools (`ToolName`) and the existence of the Preset arrays `RICH_TEXT_PRESETS` — but not their composition (below).
|
|
322
322
|
|
|
323
|
-
**Not included:** the kit's DOM and classes around a Slot; the ids of built-in buttons and items; the internal description of built-in Tools (a superset of the public shape) — it is not exported; the exact place of a UI contribution inside a surface; the look of the Skeleton; the shape of a Configured Tool from the inside (the entry is opaque, only the kit reads its fields); the timing of the scroll after the Find commands (it happens a moment after the call); file and chunk names in `dist`, like any path inside the package (["Public contract"](../conventions.md#публичный-контракт)). The API of the raw `editor` and of the
|
|
323
|
+
**Not included:** the kit's DOM and classes around a Slot; the ids of built-in buttons and items; the internal description of built-in Tools (a superset of the public shape) — it is not exported; the exact place of a UI contribution inside a surface; the look of the Skeleton; the shape of a Configured Tool from the inside (the entry is opaque, only the kit reads its fields); the timing of the scroll after the Find commands (it happens a moment after the call); file and chunk names in `dist`, like any path inside the package (["Public contract"](../conventions.md#публичный-контракт)). The API of the raw `editor` and of the Extensions is Tiptap's API, and it follows the engine's major.
|
|
324
324
|
|
|
325
325
|
**Neither a minor nor a patch breaks a saved Document.** The HTML convention is frozen: `data-block` and `data-mark` are extended only by addition. If the form has to change, that is a major, and until the next major the kit reads both forms — both in engine parsing and in the sanitizer.
|
|
326
326
|
|
|
327
327
|
**What counts as breaking is a violation of the contract, not a pixel shift:**
|
|
328
328
|
|
|
329
|
-
| Change
|
|
330
|
-
|
|
|
331
|
-
| A new required field of the description
|
|
332
|
-
| A new Block trait or a default that changes the behavior of already described Blocks
|
|
333
|
-
| Abandoning "one Slot per surface" or "custom UI contributions in the order of `tools`"
|
|
334
|
-
| Moving a UI contribution kind to another surface
|
|
335
|
-
| Changing the form of the HTML convention
|
|
336
|
-
| A new Tiptap major — even with no changes in the kit's code: the consumer's
|
|
337
|
-
| Removing a Tool from a Preset, renaming a Tool
|
|
338
|
-
| Removing a public name
|
|
339
|
-
| A new optional field, a new UI contribution kind, a Handle method or a callback
|
|
340
|
-
| A new option or state field, a new command, an option on another built-in Tool
|
|
341
|
-
| Removing an option, state or command field, changing its meaning
|
|
342
|
-
| A new built-in Tool in a Preset
|
|
343
|
-
| A shift of a Slot inside a surface
|
|
344
|
-
| Raising Tiptap's lower bound within a major
|
|
345
|
-
| Tightening sanitizing for security
|
|
346
|
-
| The look of the Skeleton, DOM and classes around a Slot
|
|
329
|
+
| Change | Version |
|
|
330
|
+
| -------------------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
331
|
+
| A new required field of the description | major |
|
|
332
|
+
| A new Block trait or a default that changes the behavior of already described Blocks | major |
|
|
333
|
+
| Abandoning "one Slot per surface" or "custom UI contributions in the order of `tools`" | major |
|
|
334
|
+
| Moving a UI contribution kind to another surface | major |
|
|
335
|
+
| Changing the form of the HTML convention | major, and both forms are read until the next major |
|
|
336
|
+
| A new Tiptap major — even with no changes in the kit's code: the consumer's Extensions break | major |
|
|
337
|
+
| Removing a Tool from a Preset, renaming a Tool | major |
|
|
338
|
+
| Removing a public name | major, after `@deprecated` in a minor (below) |
|
|
339
|
+
| A new optional field, a new UI contribution kind, a Handle method or a callback | minor |
|
|
340
|
+
| A new option or state field, a new command, an option on another built-in Tool | minor |
|
|
341
|
+
| Removing an option, state or command field, changing its meaning | major |
|
|
342
|
+
| A new built-in Tool in a Preset | minor, the changeset line is in bold |
|
|
343
|
+
| A shift of a Slot inside a surface | minor with a changeset line |
|
|
344
|
+
| Raising Tiptap's lower bound within a major | minor |
|
|
345
|
+
| Tightening sanitizing for security | patch or minor with a note in migration-notes |
|
|
346
|
+
| The look of the Skeleton, DOM and classes around a Slot | outside the contract |
|
|
347
347
|
|
|
348
348
|
- **A Tiptap major is a kit major.** The kit supports one Tiptap major at a time; the engine is not in the kit manifest, and the consumer maintains the version range (`^3.31.4`) given on the [RichTextEditor](../components/inputs/rich-text-editor.md#установка) page.
|
|
349
349
|
- **A Preset** is "what the kit considers a full set", not a frozen list. If you need a stable composition, pass an exact list of names.
|
|
@@ -354,11 +354,11 @@ The contract boundary per ADR-0058, item 12. The reviewer checks the changeset t
|
|
|
354
354
|
|
|
355
355
|
### Your own panel outside the field: `preventDefault` on `mousedown`
|
|
356
356
|
|
|
357
|
-
The buttons of your own panel outside the field call `event.preventDefault()` on `mousedown`: focus stays in the Document, and the floating Toolbar, the
|
|
357
|
+
The buttons of your own panel outside the field call `event.preventDefault()` on `mousedown`: focus stays in the Document, and the floating Toolbar, the Bubble menu and the image panel do not hide. The state of the buttons comes from `useRichTextEditorState`, the commands are `ref.current?.editor?.chain().focus()…run()`. The example and details are in [RichTextEditor, "Your own panel"](../components/inputs/rich-text-editor.md#своя-панель-userichtexteditorstate). The rule "a click into your own panel does not clear the selection" is a recipe, not a property of the field.
|
|
358
358
|
|
|
359
|
-
### "Saved" in the Status
|
|
359
|
+
### "Saved" in the Status bar
|
|
360
360
|
|
|
361
|
-
Autosave on focus loss and announcing the result. The live region stays in the Status
|
|
361
|
+
Autosave on focus loss and announcing the result. The live region stays in the Status bar **permanently**, and only its text changes: screen readers often do not read a region that is inserted together with its text. The word count next to it has no `role`, so it is not announced on every edit.
|
|
362
362
|
|
|
363
363
|
```tsx
|
|
364
364
|
import { useRef, useState } from "react";
|
|
@@ -401,7 +401,7 @@ function ArticleBody({
|
|
|
401
401
|
}
|
|
402
402
|
```
|
|
403
403
|
|
|
404
|
-
Show a save error where the screen shows form errors: `showNotice` is for the field's own events (a refused paste, a file upload), and the `error` line goes away with the first
|
|
404
|
+
Show a save error where the screen shows form errors: `showNotice` is for the field's own events (a refused paste, a file upload), and the `error` line goes away with the first User edit. For details about the line, see ["Status bar: `status`"](../components/inputs/rich-text-editor.md#строка-статуса-status).
|
|
405
405
|
|
|
406
406
|
### Removed images: comparing `src` on the server
|
|
407
407
|
|
|
@@ -499,11 +499,11 @@ An empty label does not crash the field: in development there is a `console.erro
|
|
|
499
499
|
|
|
500
500
|
### `modulepreload` for lazy chunks
|
|
501
501
|
|
|
502
|
-
The kit does not publish preloads. The chunks of
|
|
502
|
+
The kit does not publish preloads. The chunks of Extensions (of custom Loaders and of the built-in `codeBlock` and `table` in `full`) start loading on the Editor's first render, and the Skeleton is shown in the meantime. To have a chunk arrive with the page, add a `<link rel="modulepreload">` for it (in React 19, `preloadModule(url)` from `react-dom`); take the hashed URL from your bundler's manifest: the kit's chunk names are not part of the contract. For an example, see [RichTextEditor, "Extensions Loader"](../components/inputs/rich-text-editor.md#загрузчик-extensions); the cost of the "start" and "full" scenarios is in ["Import size"](../getting-started.md#размер-импорта).
|
|
503
503
|
|
|
504
504
|
## Links
|
|
505
505
|
|
|
506
506
|
- Pages: [RichTextEditor](../components/inputs/rich-text-editor.md), [RichTextView](../components/content/rich-text-view.md), [Editor glossary](../glossary.md#редактор), [migration-notes](migration-notes.md).
|
|
507
507
|
- Decisions: ADR-0058 — the extension API, ADR-0069 — Tool options, state and commands, ADR-0050 — the Editor.
|
|
508
508
|
- Source: the entry point `src/editor/index.ts`, the public form of a custom Tool `src/editor/core/customTool.ts`, validation of the `tools` array and wiring `src/editor/core/customToolEngine.ts`, the Handle `src/editor/core/handle.ts`, the hooks `src/editor/hooks/useRichTextEditorState.ts` and `src/editor/hooks/useRichTextToolState.ts`, options and the map `src/editor/core/toolOptions.ts`, the command types `src/editor/core/toolCommands.ts` and the state types `src/editor/core/toolState.ts`, the Field notice `src/editor/core/fieldNotice.ts`, the Schema and sanitizing `src/editor/core/schema.ts`, Islands `src/editor/core/viewIsland.ts`.
|
|
509
|
-
- Tests: `tests/rich-text-editor-custom-tool.test.tsx` (description, Schema, `tools` array validation), `tests/rich-text-editor-custom-button.test.tsx`, `tests/rich-text-editor-custom-ui.test.tsx` and `tests/rich-text-editor-text-card.test.tsx` (UI contributions), `tests/rich-text-editor-handle.test.tsx` and `tests/rich-text-editor-handle-ssr.test.tsx` (the Handle and the hook), `tests/rich-text-editor-events.test.tsx` (callbacks, paste and drop order), `tests/rich-text-editor-notice.test.tsx` (Status
|
|
509
|
+
- Tests: `tests/rich-text-editor-custom-tool.test.tsx` (description, Schema, `tools` array validation), `tests/rich-text-editor-custom-button.test.tsx`, `tests/rich-text-editor-custom-ui.test.tsx` and `tests/rich-text-editor-text-card.test.tsx` (UI contributions), `tests/rich-text-editor-handle.test.tsx` and `tests/rich-text-editor-handle-ssr.test.tsx` (the Handle and the hook), `tests/rich-text-editor-events.test.tsx` (callbacks, paste and drop order), `tests/rich-text-editor-notice.test.tsx` (Status bar and Field notice), `tests/rich-text-editor-loaders.test.tsx`, `tests/rich-text-editor-skeleton.test.tsx` and `tests/rich-text-editor-lazy-builtins.test.tsx` (Loaders, Skeleton, lazy built-ins), `tests/rich-text-editor-atom-text.test.tsx` (Atom text), `tests/rich-text-editor-custom-markdown.test.tsx`, `tests/editor-sanitize-tools.test.tsx`, `tests/rich-text-view-island.test.tsx`, `tests/editor-entry.test.ts`, `tests/rich-text-editor-tool-options.test.tsx`, `tests/rich-text-editor-tool-state.test.tsx`, `tests/rich-text-editor-tool-commands.test.tsx` and `tests/rich-text-editor-define-tool.test.tsx` (options, state, commands, `defineTool`), `tests/editor-tool-options-types.test.ts`, `tests/editor-tool-state-types.test.ts`, `tests/editor-tool-commands-types.test.ts` and `tests/editor-define-tool-types.test.ts` (types and the map); test Tools — `tests/editor-test-tools.ts`.
|