@byline/richtext-lexical 1.11.2 → 1.12.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/dist/field/apply-value-plugin.js +1 -3
- package/dist/field/config/default-extensions.d.ts +32 -0
- package/dist/field/config/default-extensions.js +49 -0
- package/dist/field/config/default.d.ts +8 -0
- package/dist/field/config/default.js +0 -28
- package/dist/field/config/editor-config-context.js +2 -6
- package/dist/field/config/extensions-list.d.ts +44 -0
- package/dist/field/config/extensions-list.js +55 -0
- package/dist/field/config/types.d.ts +28 -1
- package/dist/field/editor-context.d.ts +1 -1
- package/dist/field/editor-context.js +39 -35
- package/dist/field/editor.js +11 -57
- package/dist/field/{plugins/admonition-plugin/index.d.ts → extensions/admonition/admonition-extension.d.ts} +2 -1
- package/dist/field/{plugins/admonition-plugin/index.js → extensions/admonition/admonition-extension.js} +51 -4
- package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.d.ts +1 -1
- package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.js +1 -1
- package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node.d.ts +1 -1
- package/dist/field/{plugins/admonition-plugin → extensions/admonition}/fields.d.ts +1 -1
- package/dist/field/{nodes/admonition-node → extensions/admonition}/index.js +1 -1
- package/dist/field/{plugins/admonition-plugin → extensions/admonition}/types.d.ts +1 -1
- package/dist/field/{plugins/auto-embed-plugin/index.d.ts → extensions/auto-embed/auto-embed-extension.d.ts} +1 -0
- package/dist/field/{plugins/auto-embed-plugin/index.js → extensions/auto-embed/auto-embed-extension.js} +47 -4
- package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.d.ts +1 -1
- package/dist/field/extensions/byline-floating-ui/byline-floating-ui-extension.d.ts +68 -0
- package/dist/field/extensions/byline-floating-ui/byline-floating-ui-extension.js +19 -0
- package/dist/field/{nodes/admonition-node → extensions/byline-floating-ui}/index.d.ts +1 -2
- package/dist/field/extensions/byline-floating-ui/index.js +1 -0
- package/dist/field/extensions/byline-toolbar/byline-toolbar-extension.d.ts +69 -0
- package/dist/field/extensions/byline-toolbar/byline-toolbar-extension.js +19 -0
- package/dist/field/{nodes/inline-image-node → extensions/byline-toolbar}/index.d.ts +1 -2
- package/dist/field/extensions/byline-toolbar/index.js +1 -0
- package/dist/field/extensions/code-highlight/code-highlight-extension.d.ts +10 -0
- package/dist/field/extensions/code-highlight/code-highlight-extension.js +11 -0
- package/dist/field/extensions/floating-text-format/floating-text-format-extension.d.ts +18 -0
- package/dist/field/extensions/floating-text-format/floating-text-format-extension.js +17 -0
- package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.js +1 -1
- package/dist/field/extensions/horizontal-rule/horizontal-rule-extension.d.ts +6 -0
- package/dist/field/extensions/horizontal-rule/horizontal-rule-extension.js +45 -0
- package/dist/field/{nodes/inline-image-node → extensions/inline-image}/index.js +1 -1
- package/dist/field/{plugins/inline-image-plugin/index.d.ts → extensions/inline-image/inline-image-extension.d.ts} +6 -3
- package/dist/field/{plugins/inline-image-plugin/index.js → extensions/inline-image/inline-image-extension.js} +57 -5
- package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.d.ts +2 -2
- package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.js +4 -4
- package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.d.ts +2 -2
- package/dist/field/{nodes/inline-image-node/types.d.ts → extensions/inline-image/node-types.d.ts} +1 -1
- package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/types.d.ts +1 -1
- package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.d.ts +1 -1
- package/dist/field/{plugins/layout-plugin/layout-plugin.d.ts → extensions/layout/layout-extension.d.ts} +1 -0
- package/dist/field/{plugins/layout-plugin/layout-plugin.js → extensions/layout/layout-extension.js} +53 -5
- package/dist/field/extensions/link/auto-link-extension.d.ts +12 -0
- package/dist/field/{plugins/link-plugin/auto-link/index.js → extensions/link/auto-link-extension.js} +14 -2
- package/dist/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.d.ts +1 -1
- package/dist/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.js +2 -2
- package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.css +2 -2
- package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.js +4 -4
- package/dist/field/extensions/link/index.d.ts +5 -0
- package/dist/field/extensions/link/index.js +5 -0
- package/dist/field/extensions/link/link-extension.d.ts +14 -0
- package/dist/field/extensions/link/link-extension.js +66 -0
- package/dist/field/{plugins/link-plugin/link/types.d.ts → extensions/link/link-modal-types.d.ts} +1 -1
- package/dist/field/{plugins/link-plugin → extensions}/link/link-modal.d.ts +1 -1
- package/dist/field/{plugins/link-plugin → extensions}/link/link-modal.js +3 -3
- package/dist/field/{nodes/link-nodes → extensions/link}/types.d.ts +1 -1
- package/dist/field/extensions/table/table-action-menu-plugin/index.d.ts +4 -0
- package/dist/field/{plugins → extensions/table}/table-action-menu-plugin/index.js +8 -6
- package/dist/field/extensions/table/table-extension.d.ts +17 -0
- package/dist/field/extensions/table/table-extension.js +58 -0
- package/dist/field/extensions/vimeo/vimeo-extension.d.ts +12 -0
- package/dist/field/extensions/vimeo/vimeo-extension.js +16 -0
- package/dist/field/extensions/youtube/youtube-extension.d.ts +12 -0
- package/dist/field/extensions/youtube/youtube-extension.js +16 -0
- package/dist/field/nodes/index.js +7 -7
- package/dist/field/plugins/table-plugin/index.js +5 -6
- package/dist/field/plugins/toolbar-plugin/index.js +40 -114
- package/dist/field/plugins/toolbar-plugin/toolbar-active-editor.d.ts +25 -0
- package/dist/field/plugins/toolbar-plugin/toolbar-active-editor.js +17 -0
- package/dist/field/themes/lexical-editor-theme.css +13 -3
- package/dist/field/themes/lexical-editor-theme.js +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.js +16 -0
- package/dist/lexical-editor.d.ts +25 -13
- package/dist/lexical-editor.js +9 -1
- package/dist/richtext-field.js +6 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +2 -2
- package/package.json +7 -10
- package/src/field/apply-value-plugin.tsx +6 -6
- package/src/field/config/default-extensions.ts +104 -0
- package/src/field/config/default.ts +8 -28
- package/src/field/config/editor-config-context.tsx +1 -7
- package/src/field/config/extensions-list.ts +107 -0
- package/src/field/config/types.ts +28 -28
- package/src/field/editor-context.tsx +77 -41
- package/src/field/editor.tsx +24 -72
- package/src/field/extensions/README.md +31 -0
- package/src/field/{plugins/admonition-plugin/index.tsx → extensions/admonition/admonition-extension.tsx} +45 -2
- package/src/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.tsx +1 -1
- package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.tsx +5 -5
- package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node.tsx +1 -1
- package/src/field/{plugins/admonition-plugin → extensions/admonition}/fields.ts +1 -1
- package/src/field/{nodes/admonition-node → extensions/admonition}/index.ts +5 -1
- package/src/field/{plugins/admonition-plugin → extensions/admonition}/types.ts +1 -1
- package/src/field/{plugins/auto-embed-plugin/index.tsx → extensions/auto-embed/auto-embed-extension.tsx} +46 -3
- package/src/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.tsx +1 -1
- package/src/field/extensions/byline-floating-ui/byline-floating-ui-extension.ts +90 -0
- package/src/field/extensions/byline-floating-ui/index.ts +15 -0
- package/src/field/extensions/byline-toolbar/byline-toolbar-extension.ts +95 -0
- package/src/field/extensions/byline-toolbar/index.ts +15 -0
- package/src/field/extensions/code-highlight/code-highlight-extension.ts +18 -0
- package/src/field/extensions/floating-text-format/floating-text-format-extension.ts +39 -0
- package/src/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.tsx +1 -1
- package/src/field/extensions/horizontal-rule/horizontal-rule-extension.tsx +57 -0
- package/src/field/{nodes/inline-image-node → extensions/inline-image}/index.ts +1 -1
- package/src/field/{plugins/inline-image-plugin/index.tsx → extensions/inline-image/inline-image-extension.tsx} +54 -6
- package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.tsx +1 -1
- package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.tsx +6 -6
- package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.tsx +2 -2
- package/src/field/{nodes/inline-image-node/types.ts → extensions/inline-image/node-types.ts} +1 -1
- package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/types.ts +1 -1
- package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.ts +1 -1
- package/src/field/{plugins/layout-plugin/layout-plugin.tsx → extensions/layout/layout-extension.tsx} +47 -8
- package/src/field/{plugins/link-plugin/auto-link/index.tsx → extensions/link/auto-link-extension.tsx} +13 -3
- package/src/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.tsx +2 -2
- package/src/field/{plugins/link-plugin → extensions}/link/floating-link-editor.css +2 -2
- package/src/field/{plugins/link-plugin → extensions}/link/floating-link-editor.tsx +5 -5
- package/src/field/extensions/link/index.ts +5 -0
- package/src/field/extensions/link/link-extension.tsx +131 -0
- package/src/field/{plugins/link-plugin/link/types.ts → extensions/link/link-modal-types.ts} +1 -1
- package/src/field/{plugins/link-plugin → extensions}/link/link-modal.tsx +6 -6
- package/src/field/{nodes/link-nodes → extensions/link}/types.ts +1 -1
- package/src/field/{plugins → extensions/table}/table-action-menu-plugin/index.tsx +12 -8
- package/src/field/extensions/table/table-extension.tsx +86 -0
- package/src/field/extensions/vimeo/vimeo-extension.ts +36 -0
- package/src/field/extensions/youtube/youtube-extension.ts +37 -0
- package/src/field/nodes/index.ts +7 -7
- package/src/field/plugins/table-plugin/index.tsx +10 -10
- package/src/field/plugins/toolbar-plugin/index.tsx +59 -122
- package/src/field/plugins/toolbar-plugin/toolbar-active-editor.tsx +48 -0
- package/src/field/themes/lexical-editor-theme.css +18 -3
- package/src/field/themes/lexical-editor-theme.tsx +1 -0
- package/src/index.ts +45 -2
- package/src/lexical-editor.tsx +35 -14
- package/src/richtext-field.tsx +8 -1
- package/src/server.ts +4 -4
- package/dist/field/nodes/link-nodes/index.d.ts +0 -3
- package/dist/field/nodes/link-nodes/index.js +0 -3
- package/dist/field/plugins/code-highlight-plugin/index.d.ts +0 -9
- package/dist/field/plugins/code-highlight-plugin/index.js +0 -11
- package/dist/field/plugins/link-plugin/auto-link/index.d.ts +0 -9
- package/dist/field/plugins/link-plugin/link/index.d.ts +0 -1
- package/dist/field/plugins/link-plugin/link/index.js +0 -43
- package/dist/field/plugins/table-action-menu-plugin/index.d.ts +0 -5
- package/dist/field/plugins/vimeo-plugin/index.d.ts +0 -3
- package/dist/field/plugins/vimeo-plugin/index.js +0 -24
- package/dist/field/plugins/youtube-plugin/index.d.ts +0 -3
- package/dist/field/plugins/youtube-plugin/index.js +0 -24
- package/dist/field/toolbar-extensions.d.ts +0 -31
- package/dist/field/toolbar-extensions.js +0 -56
- package/src/field/nodes/link-nodes/index.ts +0 -3
- package/src/field/plugins/code-highlight-plugin/index.ts +0 -23
- package/src/field/plugins/link-plugin/link/index.tsx +0 -99
- package/src/field/plugins/vimeo-plugin/index.ts +0 -42
- package/src/field/plugins/youtube-plugin/index.ts +0 -43
- package/src/field/themes/lexical-editor-theme.js +0 -104
- package/src/field/toolbar-extensions.tsx +0 -93
- /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.css +0 -0
- /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.d.ts +0 -0
- /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.css +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node.js +0 -0
- /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/fields.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.css +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.d.ts +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/index.d.ts +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/index.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.css +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.d.ts +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.css +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.d.ts +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.js +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.css +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.d.ts +0 -0
- /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.js +0 -0
- /package/dist/field/{nodes/admonition-node/types.d.ts → extensions/admonition/node-types.d.ts} +0 -0
- /package/dist/field/{nodes/admonition-node/types.js → extensions/admonition/node-types.js} +0 -0
- /package/dist/field/{nodes/inline-image-node → extensions/admonition}/types.js +0 -0
- /package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.css +0 -0
- /package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.js +0 -0
- /package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.css +0 -0
- /package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.d.ts +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.d.ts +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.js +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.css +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.d.ts +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.js +0 -0
- /package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.css +0 -0
- /package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.js +0 -0
- /package/dist/field/{nodes/link-nodes/types.js → extensions/inline-image/node-types.js} +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.d.ts +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.js +0 -0
- /package/dist/field/{plugins/admonition-plugin → extensions/inline-image}/types.js +0 -0
- /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.js +0 -0
- /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.css +0 -0
- /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.d.ts +0 -0
- /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.js +0 -0
- /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.d.ts +0 -0
- /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.js +0 -0
- /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.d.ts +0 -0
- /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.js +0 -0
- /package/dist/field/{nodes/link-nodes → extensions/link}/auto-link-node.d.ts +0 -0
- /package/dist/field/{nodes/link-nodes → extensions/link}/auto-link-node.js +0 -0
- /package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.d.ts +0 -0
- /package/dist/field/{plugins/inline-image-plugin/types.js → extensions/link/link-modal-types.js} +0 -0
- /package/dist/field/{nodes/link-nodes → extensions/link}/link-node.d.ts +0 -0
- /package/dist/field/{nodes/link-nodes → extensions/link}/link-node.js +0 -0
- /package/dist/field/{plugins/link-plugin → extensions/link}/populate.d.ts +0 -0
- /package/dist/field/{plugins/link-plugin → extensions/link}/populate.js +0 -0
- /package/dist/field/{plugins/link-plugin → extensions}/link/types.js +0 -0
- /package/dist/field/{nodes/vimeo-node/index.d.ts → extensions/vimeo/vimeo-node.d.ts} +0 -0
- /package/dist/field/{nodes/vimeo-node/index.js → extensions/vimeo/vimeo-node.js} +0 -0
- /package/dist/field/{nodes/youtube-node/index.d.ts → extensions/youtube/youtube-node.d.ts} +0 -0
- /package/dist/field/{nodes/youtube-node/index.js → extensions/youtube/youtube-node.js} +0 -0
- /package/src/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.js +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.tsx +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/index.js +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/index.ts +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.js +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.tsx +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.js +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.tsx +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.css +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.js +0 -0
- /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.tsx +0 -0
- /package/src/field/{nodes/admonition-node/types.ts → extensions/admonition/node-types.ts} +0 -0
- /package/src/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.css +0 -0
- /package/src/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.css +0 -0
- /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.ts +0 -0
- /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.css +0 -0
- /package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.css +0 -0
- /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.ts +0 -0
- /package/src/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.css +0 -0
- /package/src/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.tsx +0 -0
- /package/src/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.ts +0 -0
- /package/src/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.ts +0 -0
- /package/src/field/{nodes/link-nodes → extensions/link}/auto-link-node.ts +0 -0
- /package/src/field/{nodes/link-nodes → extensions/link}/link-node.ts +0 -0
- /package/src/field/{plugins/link-plugin → extensions/link}/populate.ts +0 -0
- /package/src/field/{nodes/vimeo-node/index.tsx → extensions/vimeo/vimeo-node.tsx} +0 -0
- /package/src/field/{nodes/youtube-node/index.tsx → extensions/youtube/youtube-node.tsx} +0 -0
|
@@ -1,29 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Fragment as external_react_Fragment, useCallback, useEffect, useState } from "react";
|
|
4
|
-
import { $createCodeNode, $isCodeNode, CODE_LANGUAGE_FRIENDLY_NAME_MAP, CODE_LANGUAGE_MAP, getLanguageFriendlyName } from "@lexical/code";
|
|
5
|
-
import { $isListNode, INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, ListNode, REMOVE_LIST_COMMAND } from "@lexical/list";
|
|
6
|
-
import { INSERT_EMBED_COMMAND } from "@lexical/react/LexicalAutoEmbedPlugin";
|
|
3
|
+
import { Fragment as external_react_Fragment, useCallback, useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { $createCodeNode, $isCodeNode, CODE_LANGUAGE_FRIENDLY_NAME_MAP, CODE_LANGUAGE_MAP, CodeNode, getLanguageFriendlyName } from "@lexical/code";
|
|
5
|
+
import { $isListNode, CheckListExtension, INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, ListExtension, ListNode, REMOVE_LIST_COMMAND } from "@lexical/list";
|
|
7
6
|
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
8
7
|
import { $isDecoratorBlockNode } from "@lexical/react/LexicalDecoratorBlockNode";
|
|
9
|
-
import {
|
|
8
|
+
import { useExtensionDependency, useOptionalExtensionDependency } from "@lexical/react/useExtensionComponent";
|
|
10
9
|
import { $createHeadingNode, $createQuoteNode, $isHeadingNode, $isQuoteNode } from "@lexical/rich-text";
|
|
11
10
|
import { $setBlocksType } from "@lexical/selection";
|
|
12
11
|
import { $isTableNode } from "@lexical/table";
|
|
13
12
|
import { $findMatchingParent, $getNearestBlockElementAncestorOrThrow, $getNearestNodeOfType, mergeRegister } from "@lexical/utils";
|
|
14
13
|
import { $createParagraphNode, $getNodeByKey, $getSelection, $isRangeSelection, $isRootOrShadowRoot, $isTextNode, CAN_REDO_COMMAND, CAN_UNDO_COMMAND, COMMAND_PRIORITY_CRITICAL, COMMAND_PRIORITY_NORMAL, FORMAT_ELEMENT_COMMAND, FORMAT_TEXT_COMMAND, INDENT_CONTENT_COMMAND, KEY_MODIFIER_COMMAND, OUTDENT_CONTENT_COMMAND, REDO_COMMAND, SELECTION_CHANGE_COMMAND, UNDO_COMMAND } from "lexical";
|
|
15
14
|
import { useEditorConfig } from "../../config/editor-config-context.js";
|
|
16
|
-
import {
|
|
15
|
+
import { BylineToolbarExtension, selectToolbarItems } from "../../extensions/byline-toolbar/byline-toolbar-extension.js";
|
|
16
|
+
import { $isLinkNode, LinkExtension, OPEN_LINK_MODAL_COMMAND, TOGGLE_LINK_COMMAND } from "../../extensions/link/index.js";
|
|
17
17
|
import { IS_APPLE } from "../../shared/environment.js";
|
|
18
|
-
import { useToolbarExtensions } from "../../toolbar-extensions.js";
|
|
19
18
|
import { DropDown, DropDownItem } from "../../ui/dropdown.js";
|
|
20
19
|
import { getSelectedNode } from "../../utils/getSelectedNode.js";
|
|
21
20
|
import { sanitizeUrl } from "../../utils/url.js";
|
|
22
|
-
import {
|
|
23
|
-
import { EmbedConfigs } from "../auto-embed-plugin/index.js";
|
|
24
|
-
import { OPEN_INLINE_IMAGE_MODAL_COMMAND } from "../inline-image-plugin/index.js";
|
|
25
|
-
import { OPEN_INSERT_LAYOUT_MODAL_COMMAND } from "../layout-plugin/layout-plugin.js";
|
|
26
|
-
import { OPEN_TABLE_MODAL_COMMAND } from "../table-plugin/index.js";
|
|
21
|
+
import { ToolbarActiveEditorProvider } from "./toolbar-active-editor.js";
|
|
27
22
|
const blockTypeToBlockName = {
|
|
28
23
|
bullet: 'Bulleted List',
|
|
29
24
|
check: 'Check List',
|
|
@@ -52,7 +47,12 @@ function dropDownActiveClass(active) {
|
|
|
52
47
|
return '';
|
|
53
48
|
}
|
|
54
49
|
function BlockFormatDropDown({ editor, blockType, rootType, disabled = false }) {
|
|
55
|
-
const
|
|
50
|
+
const hasList = void 0 !== useOptionalExtensionDependency(ListExtension);
|
|
51
|
+
const hasCheckList = void 0 !== useOptionalExtensionDependency(CheckListExtension);
|
|
52
|
+
const [composerEditor] = useLexicalComposerContext();
|
|
53
|
+
const hasCodeHighlight = composerEditor.hasNodes([
|
|
54
|
+
CodeNode
|
|
55
|
+
]);
|
|
56
56
|
const formatParagraph = ()=>{
|
|
57
57
|
editor.update(()=>{
|
|
58
58
|
const selection = $getSelection();
|
|
@@ -178,7 +178,7 @@ function BlockFormatDropDown({ editor, blockType, rootType, disabled = false })
|
|
|
178
178
|
})
|
|
179
179
|
]
|
|
180
180
|
}),
|
|
181
|
-
|
|
181
|
+
hasList && /*#__PURE__*/ jsxs(Fragment, {
|
|
182
182
|
children: [
|
|
183
183
|
/*#__PURE__*/ jsxs(DropDownItem, {
|
|
184
184
|
className: `item ${dropDownActiveClass('bullet' === blockType)}`,
|
|
@@ -208,7 +208,7 @@ function BlockFormatDropDown({ editor, blockType, rootType, disabled = false })
|
|
|
208
208
|
})
|
|
209
209
|
]
|
|
210
210
|
}),
|
|
211
|
-
|
|
211
|
+
hasCheckList && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
212
212
|
className: `item ${dropDownActiveClass('check' === blockType)}`,
|
|
213
213
|
onClick: formatCheckList,
|
|
214
214
|
children: [
|
|
@@ -234,7 +234,7 @@ function BlockFormatDropDown({ editor, blockType, rootType, disabled = false })
|
|
|
234
234
|
})
|
|
235
235
|
]
|
|
236
236
|
}),
|
|
237
|
-
|
|
237
|
+
hasCodeHighlight && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
238
238
|
className: `item ${dropDownActiveClass('code' === blockType)}`,
|
|
239
239
|
onClick: formatCode,
|
|
240
240
|
children: [
|
|
@@ -275,8 +275,15 @@ function ToolbarPlugin() {
|
|
|
275
275
|
const [isRTL, _setIsRTL] = useState(false);
|
|
276
276
|
const [codeLanguage, setCodeLanguage] = useState('');
|
|
277
277
|
const [isEditable, setIsEditable] = useState(()=>editor.isEditable());
|
|
278
|
-
const {
|
|
279
|
-
const
|
|
278
|
+
const { config: toolbarConfig } = useExtensionDependency(BylineToolbarExtension);
|
|
279
|
+
const insertMenuItems = useMemo(()=>selectToolbarItems(toolbarConfig.items, 'insert-menu'), [
|
|
280
|
+
toolbarConfig.items
|
|
281
|
+
]);
|
|
282
|
+
const trailingToolbarItems = useMemo(()=>selectToolbarItems(toolbarConfig.items, 'toolbar'), [
|
|
283
|
+
toolbarConfig.items
|
|
284
|
+
]);
|
|
285
|
+
const hasLinkExtension = void 0 !== useOptionalExtensionDependency(LinkExtension);
|
|
286
|
+
const { uuid, config: { options: { textAlignment, undoRedo, textStyle, inlineCode } } } = useEditorConfig();
|
|
280
287
|
const $updateToolbar = useCallback(()=>{
|
|
281
288
|
const selection = $getSelection();
|
|
282
289
|
if ($isRangeSelection(selection)) {
|
|
@@ -638,7 +645,7 @@ function ToolbarPlugin() {
|
|
|
638
645
|
className: "format code"
|
|
639
646
|
})
|
|
640
647
|
}),
|
|
641
|
-
|
|
648
|
+
hasLinkExtension && /*#__PURE__*/ jsx("button", {
|
|
642
649
|
type: "button",
|
|
643
650
|
disabled: !isEditable,
|
|
644
651
|
onClick: insertLink,
|
|
@@ -724,113 +731,32 @@ function ToolbarPlugin() {
|
|
|
724
731
|
})
|
|
725
732
|
]
|
|
726
733
|
}),
|
|
727
|
-
activeEditor === editor &&
|
|
734
|
+
activeEditor === editor && insertMenuItems.length > 0 && /*#__PURE__*/ jsxs(Fragment, {
|
|
728
735
|
children: [
|
|
729
736
|
/*#__PURE__*/ jsx(Divider, {}),
|
|
730
|
-
/*#__PURE__*/
|
|
737
|
+
/*#__PURE__*/ jsx(DropDown, {
|
|
731
738
|
disabled: !isEditable,
|
|
732
739
|
buttonClassName: "toolbar-item spaced",
|
|
733
740
|
buttonLabel: "Insert",
|
|
734
741
|
buttonAriaLabel: "Insert specialized editor node",
|
|
735
742
|
buttonIconClassName: "icon plus",
|
|
736
|
-
children:
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
},
|
|
741
|
-
|
|
742
|
-
children: [
|
|
743
|
-
/*#__PURE__*/ jsx("i", {
|
|
744
|
-
className: "icon horizontal-rule"
|
|
745
|
-
}),
|
|
746
|
-
/*#__PURE__*/ jsx("span", {
|
|
747
|
-
className: "text",
|
|
748
|
-
children: "Horizontal Rule"
|
|
749
|
-
})
|
|
750
|
-
]
|
|
751
|
-
}),
|
|
752
|
-
layoutPlugin && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
753
|
-
onClick: ()=>{
|
|
754
|
-
activeEditor.dispatchCommand(OPEN_INSERT_LAYOUT_MODAL_COMMAND, null);
|
|
755
|
-
},
|
|
756
|
-
className: "item",
|
|
757
|
-
children: [
|
|
758
|
-
/*#__PURE__*/ jsx("i", {
|
|
759
|
-
className: "icon columns"
|
|
760
|
-
}),
|
|
761
|
-
/*#__PURE__*/ jsx("span", {
|
|
762
|
-
className: "text",
|
|
763
|
-
children: "Columns Layout"
|
|
764
|
-
})
|
|
765
|
-
]
|
|
766
|
-
}),
|
|
767
|
-
admonitionPlugin && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
768
|
-
onClick: ()=>{
|
|
769
|
-
activeEditor.dispatchCommand(OPEN_ADMONITION_MODAL_COMMAND, null);
|
|
770
|
-
},
|
|
771
|
-
className: "item",
|
|
772
|
-
children: [
|
|
773
|
-
/*#__PURE__*/ jsx("i", {
|
|
774
|
-
className: "icon admonition"
|
|
775
|
-
}),
|
|
776
|
-
/*#__PURE__*/ jsx("span", {
|
|
777
|
-
className: "text",
|
|
778
|
-
children: "Admonition"
|
|
779
|
-
})
|
|
780
|
-
]
|
|
781
|
-
}),
|
|
782
|
-
inlineImagePlugin && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
783
|
-
onClick: ()=>{
|
|
784
|
-
activeEditor.dispatchCommand(OPEN_INLINE_IMAGE_MODAL_COMMAND, null);
|
|
785
|
-
},
|
|
786
|
-
className: "item",
|
|
787
|
-
children: [
|
|
788
|
-
/*#__PURE__*/ jsx("i", {
|
|
789
|
-
className: "icon image"
|
|
790
|
-
}),
|
|
791
|
-
/*#__PURE__*/ jsx("span", {
|
|
792
|
-
className: "text",
|
|
793
|
-
children: "Inline Image"
|
|
794
|
-
})
|
|
795
|
-
]
|
|
796
|
-
}),
|
|
797
|
-
tablePlugin && /*#__PURE__*/ jsxs(DropDownItem, {
|
|
798
|
-
onClick: ()=>{
|
|
799
|
-
activeEditor.dispatchCommand(OPEN_TABLE_MODAL_COMMAND, null);
|
|
800
|
-
},
|
|
801
|
-
className: "item",
|
|
802
|
-
children: [
|
|
803
|
-
/*#__PURE__*/ jsx("i", {
|
|
804
|
-
className: "icon table"
|
|
805
|
-
}),
|
|
806
|
-
/*#__PURE__*/ jsx("span", {
|
|
807
|
-
className: "text",
|
|
808
|
-
children: "Table"
|
|
809
|
-
})
|
|
810
|
-
]
|
|
811
|
-
}),
|
|
812
|
-
autoEmbedPlugin && EmbedConfigs.map((embedConfig)=>/*#__PURE__*/ jsxs(DropDownItem, {
|
|
813
|
-
onClick: ()=>{
|
|
814
|
-
activeEditor.dispatchCommand(INSERT_EMBED_COMMAND, embedConfig.type);
|
|
815
|
-
},
|
|
816
|
-
className: "item",
|
|
817
|
-
children: [
|
|
818
|
-
embedConfig.icon,
|
|
819
|
-
/*#__PURE__*/ jsx("span", {
|
|
820
|
-
className: "text",
|
|
821
|
-
children: embedConfig.contentName
|
|
822
|
-
})
|
|
823
|
-
]
|
|
824
|
-
}, embedConfig.type))
|
|
825
|
-
]
|
|
743
|
+
children: /*#__PURE__*/ jsx(ToolbarActiveEditorProvider, {
|
|
744
|
+
editor: activeEditor,
|
|
745
|
+
children: insertMenuItems.map((item)=>/*#__PURE__*/ jsx(external_react_Fragment, {
|
|
746
|
+
children: item.node
|
|
747
|
+
}, item.id))
|
|
748
|
+
})
|
|
826
749
|
})
|
|
827
750
|
]
|
|
828
751
|
})
|
|
829
752
|
]
|
|
830
753
|
}),
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
754
|
+
/*#__PURE__*/ jsx(ToolbarActiveEditorProvider, {
|
|
755
|
+
editor: activeEditor,
|
|
756
|
+
children: trailingToolbarItems.map((item)=>/*#__PURE__*/ jsx(external_react_Fragment, {
|
|
757
|
+
children: item.node
|
|
758
|
+
}, item.id))
|
|
759
|
+
})
|
|
834
760
|
]
|
|
835
761
|
});
|
|
836
762
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import type * as React from 'react';
|
|
9
|
+
import type { LexicalEditor } from 'lexical';
|
|
10
|
+
/**
|
|
11
|
+
* Provider used by the toolbar plugin to expose the *active* Lexical
|
|
12
|
+
* editor (the editor for the current selection — may be a nested
|
|
13
|
+
* composer's editor) to contributed toolbar items.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ToolbarActiveEditorProvider({ editor, children, }: {
|
|
16
|
+
editor: LexicalEditor;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the editor a toolbar contribution should dispatch commands on.
|
|
21
|
+
* Falls back to the root composer editor when called outside the
|
|
22
|
+
* toolbar's provider, so contributions remain usable in standalone
|
|
23
|
+
* test/preview contexts.
|
|
24
|
+
*/
|
|
25
|
+
export declare function useToolbarActiveEditor(): LexicalEditor;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
5
|
+
const ToolbarActiveEditorContext = /*#__PURE__*/ createContext(null);
|
|
6
|
+
function ToolbarActiveEditorProvider({ editor, children }) {
|
|
7
|
+
return /*#__PURE__*/ jsx(ToolbarActiveEditorContext.Provider, {
|
|
8
|
+
value: editor,
|
|
9
|
+
children: children
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function useToolbarActiveEditor() {
|
|
13
|
+
const fromToolbar = useContext(ToolbarActiveEditorContext);
|
|
14
|
+
const [composerEditor] = useLexicalComposerContext();
|
|
15
|
+
return fromToolbar ?? composerEditor;
|
|
16
|
+
}
|
|
17
|
+
export { ToolbarActiveEditorProvider, useToolbarActiveEditor };
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
font-weight: 400;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
html[data-theme="dark"] .LexicalEditorTheme__textCode {
|
|
97
|
+
html[data-theme="dark"] .LexicalEditorTheme__textCode, .dark .LexicalEditorTheme__textCode {
|
|
98
98
|
color: #f1f5f9;
|
|
99
99
|
background-color: #1e293b;
|
|
100
100
|
border-color: #495362;
|
|
@@ -145,11 +145,11 @@ html[data-theme="dark"] .LexicalEditorTheme__textCode {
|
|
|
145
145
|
left: 0;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
html[data-theme="dark"] .LexicalEditorTheme__code {
|
|
148
|
+
html[data-theme="dark"] .LexicalEditorTheme__code, .dark .LexicalEditorTheme__code {
|
|
149
149
|
background-color: #1a1a1a;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
html[data-theme="dark"] .LexicalEditorTheme__code:before {
|
|
152
|
+
html[data-theme="dark"] .LexicalEditorTheme__code:before, .dark .LexicalEditorTheme__code:before {
|
|
153
153
|
color: #777;
|
|
154
154
|
background-color: #161616;
|
|
155
155
|
border-right: 1px solid #ccc;
|
|
@@ -165,6 +165,16 @@ html[data-theme="dark"] .LexicalEditorTheme__code:before {
|
|
|
165
165
|
overflow-y: scroll;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
+
.LexicalEditorTheme__tableScrollableWrapper {
|
|
169
|
+
margin: 30px 0;
|
|
170
|
+
overflow-x: auto;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.LexicalEditorTheme__tableScrollableWrapper > .LexicalEditorTheme__table {
|
|
174
|
+
margin-top: 0;
|
|
175
|
+
margin-bottom: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
168
178
|
.LexicalEditorTheme__tableSelected {
|
|
169
179
|
outline: 2px solid #3c84f4;
|
|
170
180
|
}
|
|
@@ -90,6 +90,7 @@ const theme = {
|
|
|
90
90
|
tableCellSelected: 'LexicalEditorTheme__tableCellSelected',
|
|
91
91
|
tableCellSortedIndicator: 'LexicalEditorTheme__tableCellSortedIndicator',
|
|
92
92
|
tableResizeRuler: 'LexicalEditorTheme__tableCellResizeRuler',
|
|
93
|
+
tableScrollableWrapper: 'LexicalEditorTheme__tableScrollableWrapper',
|
|
93
94
|
tableSelected: 'LexicalEditorTheme__tableSelected',
|
|
94
95
|
text: {
|
|
95
96
|
bold: 'LexicalEditorTheme__textBold',
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
export type { SerializedEditor, SerializedEditorState, SerializedElementNode, SerializedLexicalNode, SerializedRootNode, SerializedTextNode, } from 'lexical';
|
|
2
2
|
export { defaultEditorConfig } from './field/config/default';
|
|
3
|
+
export { defaultClientEditorConfig, defaultExtensionsArray, defaultExtensionsList, } from './field/config/default-extensions';
|
|
4
|
+
export { ExtensionsList } from './field/config/extensions-list';
|
|
3
5
|
export { EditorField } from './field/editor-field';
|
|
6
|
+
export { AdmonitionExtension } from './field/extensions/admonition/admonition-extension';
|
|
7
|
+
export { AutoEmbedExtension } from './field/extensions/auto-embed/auto-embed-extension';
|
|
8
|
+
export { type BylineFloatingUIConfig, BylineFloatingUIExtension, type BylineFloatingUIItem, type BylineFloatingUIProps, selectFloatingUIItems, } from './field/extensions/byline-floating-ui';
|
|
9
|
+
export { type BylineToolbarConfig, BylineToolbarExtension, type BylineToolbarItem, type BylineToolbarPlacement, selectToolbarItems, } from './field/extensions/byline-toolbar';
|
|
10
|
+
export { CodeHighlightExtension } from './field/extensions/code-highlight/code-highlight-extension';
|
|
11
|
+
export { FloatingTextFormatExtension } from './field/extensions/floating-text-format/floating-text-format-extension';
|
|
12
|
+
export { HorizontalRuleExtension } from './field/extensions/horizontal-rule/horizontal-rule-extension';
|
|
13
|
+
export { type InlineImageConfig, InlineImageExtension, } from './field/extensions/inline-image/inline-image-extension';
|
|
14
|
+
export { LayoutExtension } from './field/extensions/layout/layout-extension';
|
|
15
|
+
export { AutoLinkExtension, LinkExtension } from './field/extensions/link';
|
|
16
|
+
export { TableExtension } from './field/extensions/table/table-extension';
|
|
17
|
+
export { VimeoExtension } from './field/extensions/vimeo/vimeo-extension';
|
|
18
|
+
export { YouTubeExtension } from './field/extensions/youtube/youtube-extension';
|
|
4
19
|
export { Nodes } from './field/nodes';
|
|
20
|
+
export { ToolbarActiveEditorProvider, useToolbarActiveEditor, } from './field/plugins/toolbar-plugin/toolbar-active-editor';
|
|
5
21
|
export { lexicalEditor } from './lexical-editor';
|
|
6
22
|
export { RichTextField } from './richtext-field';
|
|
7
23
|
export { createEmptyEditorState } from './validate/createEmptyEditorState';
|
|
8
24
|
export { hasText } from './validate/hasText';
|
|
9
25
|
export type { EditorConfig, EditorSettings, EditorSettingsOverride } from './field/config/types';
|
|
26
|
+
export type { InlineImageAttributes, Position as InlineImagePosition, SerializedInlineImageNode, } from './field/extensions/inline-image/node-types';
|
|
10
27
|
export type { DocumentRelation } from './field/nodes/document-relation';
|
|
11
|
-
export type { InlineImageAttributes, Position as InlineImagePosition, SerializedInlineImageNode, } from './field/nodes/inline-image-node/types';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
export { defaultEditorConfig } from "./field/config/default.js";
|
|
2
|
+
export { defaultClientEditorConfig, defaultExtensionsArray, defaultExtensionsList } from "./field/config/default-extensions.js";
|
|
3
|
+
export { ExtensionsList } from "./field/config/extensions-list.js";
|
|
2
4
|
export { EditorField } from "./field/editor-field.js";
|
|
5
|
+
export { AdmonitionExtension } from "./field/extensions/admonition/admonition-extension.js";
|
|
6
|
+
export { AutoEmbedExtension } from "./field/extensions/auto-embed/auto-embed-extension.js";
|
|
7
|
+
export { BylineFloatingUIExtension, selectFloatingUIItems } from "./field/extensions/byline-floating-ui/index.js";
|
|
8
|
+
export { BylineToolbarExtension, selectToolbarItems } from "./field/extensions/byline-toolbar/index.js";
|
|
9
|
+
export { CodeHighlightExtension } from "./field/extensions/code-highlight/code-highlight-extension.js";
|
|
10
|
+
export { FloatingTextFormatExtension } from "./field/extensions/floating-text-format/floating-text-format-extension.js";
|
|
11
|
+
export { HorizontalRuleExtension } from "./field/extensions/horizontal-rule/horizontal-rule-extension.js";
|
|
12
|
+
export { InlineImageExtension } from "./field/extensions/inline-image/inline-image-extension.js";
|
|
13
|
+
export { LayoutExtension } from "./field/extensions/layout/layout-extension.js";
|
|
14
|
+
export { AutoLinkExtension, LinkExtension } from "./field/extensions/link/index.js";
|
|
15
|
+
export { TableExtension } from "./field/extensions/table/table-extension.js";
|
|
16
|
+
export { VimeoExtension } from "./field/extensions/vimeo/vimeo-extension.js";
|
|
17
|
+
export { YouTubeExtension } from "./field/extensions/youtube/youtube-extension.js";
|
|
3
18
|
export { Nodes } from "./field/nodes/index.js";
|
|
19
|
+
export { ToolbarActiveEditorProvider, useToolbarActiveEditor } from "./field/plugins/toolbar-plugin/toolbar-active-editor.js";
|
|
4
20
|
export { lexicalEditor } from "./lexical-editor.js";
|
|
5
21
|
export { RichTextField } from "./richtext-field.js";
|
|
6
22
|
export { createEmptyEditorState } from "./validate/createEmptyEditorState.js";
|
package/dist/lexical-editor.d.ts
CHANGED
|
@@ -6,30 +6,42 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { RichTextEditorComponent } from '@byline/core';
|
|
9
|
+
import type { ExtensionsList } from './field/config/extensions-list';
|
|
9
10
|
import type { EditorConfig } from './field/config/types';
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
12
|
+
* Inside `lexicalEditor((c) => ...)` the seed always carries an
|
|
13
|
+
* `ExtensionsList`, so narrow the callback parameter so callers can write
|
|
14
|
+
* `c.extensions.add(...)` without a non-null assertion.
|
|
15
|
+
*/
|
|
16
|
+
export type LexicalEditorConfigureInput = Omit<EditorConfig, 'extensions'> & {
|
|
17
|
+
extensions: ExtensionsList;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Returns a `RichTextEditorComponent` with editor settings baked in. Use
|
|
21
|
+
* this at the registration site in your admin config when you want to
|
|
22
|
+
* customise the editor across the whole installation; per-field
|
|
23
|
+
* overrides via `RichTextField.editorConfig` continue to take precedence
|
|
24
|
+
* at render time.
|
|
15
25
|
*
|
|
16
|
-
* The `configure` callback receives a deep clone of `defaultEditorConfig`
|
|
17
|
-
*
|
|
18
|
-
*
|
|
26
|
+
* The `configure` callback receives a deep clone of `defaultEditorConfig`
|
|
27
|
+
* with `extensions` populated from `defaultExtensionsList()`. Mutate the
|
|
28
|
+
* clone freely — it's local to this call. Use the chainable
|
|
29
|
+
* `c.extensions.add(...)`, `.remove(...)`, `.replace(...)`, and
|
|
30
|
+
* `.configure(...)` methods to manipulate the extension graph.
|
|
19
31
|
*
|
|
20
|
-
* Calling `lexicalEditor()` with no argument is equivalent to
|
|
21
|
-
* `RichTextField` directly.
|
|
32
|
+
* Calling `lexicalEditor()` with no argument is equivalent to
|
|
33
|
+
* registering `RichTextField` directly with the package defaults.
|
|
22
34
|
*
|
|
23
35
|
* @example
|
|
24
36
|
* ```ts
|
|
25
|
-
* import { lexicalEditor } from '@byline/richtext-lexical'
|
|
37
|
+
* import { lexicalEditor, TableExtension } from '@byline/richtext-lexical'
|
|
26
38
|
*
|
|
27
39
|
* defineClientConfig({
|
|
28
40
|
* fields: {
|
|
29
41
|
* richText: {
|
|
30
42
|
* editor: lexicalEditor((c) => {
|
|
31
|
-
* c.
|
|
32
|
-
* c.settings.
|
|
43
|
+
* c.extensions.remove(TableExtension) // drop a built-in
|
|
44
|
+
* c.settings.placeholderText = 'Start writing...'
|
|
33
45
|
* return c
|
|
34
46
|
* }),
|
|
35
47
|
* },
|
|
@@ -37,4 +49,4 @@ import type { EditorConfig } from './field/config/types';
|
|
|
37
49
|
* })
|
|
38
50
|
* ```
|
|
39
51
|
*/
|
|
40
|
-
export declare function lexicalEditor(configure?: (config:
|
|
52
|
+
export declare function lexicalEditor(configure?: (config: LexicalEditorConfigureInput) => LexicalEditorConfigureInput): RichTextEditorComponent;
|
package/dist/lexical-editor.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cloneDeep } from "lodash-es";
|
|
3
3
|
import { defaultEditorConfig } from "./field/config/default.js";
|
|
4
|
+
import { defaultExtensionsList } from "./field/config/default-extensions.js";
|
|
4
5
|
import { RichTextField } from "./richtext-field.js";
|
|
5
6
|
function lexicalEditor(configure) {
|
|
6
|
-
|
|
7
|
+
let baked;
|
|
8
|
+
if (configure) {
|
|
9
|
+
const seed = {
|
|
10
|
+
...cloneDeep(defaultEditorConfig),
|
|
11
|
+
extensions: defaultExtensionsList()
|
|
12
|
+
};
|
|
13
|
+
baked = configure(seed);
|
|
14
|
+
}
|
|
7
15
|
const ConfiguredEditor = (props)=>/*#__PURE__*/ jsx(RichTextField, {
|
|
8
16
|
...props,
|
|
9
17
|
editorConfig: baked
|
package/dist/richtext-field.js
CHANGED
|
@@ -2,6 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ErrorText, Label, LocaleBadge, useFieldError, useFieldValue } from "@byline/ui/react";
|
|
3
3
|
import classnames from "classnames";
|
|
4
4
|
import { defaultEditorConfig } from "./field/config/default.js";
|
|
5
|
+
import { defaultExtensionsList } from "./field/config/default-extensions.js";
|
|
5
6
|
import { EditorField } from "./field/editor-field.js";
|
|
6
7
|
import richtext_field_module from "./richtext-field.module.js";
|
|
7
8
|
const RichTextField = ({ field, value, defaultValue, editorConfig, readonly = false, instanceKey, onChange, path, locale, featureBeforeEditor, featureAfterEditor, featureChildren })=>{
|
|
@@ -11,7 +12,11 @@ const RichTextField = ({ field, value, defaultValue, editorConfig, readonly = fa
|
|
|
11
12
|
const incomingValue = value ?? fieldValue;
|
|
12
13
|
const incomingDefault = defaultValue;
|
|
13
14
|
const fieldId = instanceKey ? `${field.name}-${instanceKey}` : field.name;
|
|
14
|
-
const
|
|
15
|
+
const resolved = field.editorConfig ?? editorConfig ?? defaultEditorConfig;
|
|
16
|
+
const baseEditorConfig = null != resolved.extensions ? resolved : {
|
|
17
|
+
...resolved,
|
|
18
|
+
extensions: defaultExtensionsList()
|
|
19
|
+
};
|
|
15
20
|
const resolvedEditorConfig = void 0 === field.embedRelationsOnSave ? baseEditorConfig : {
|
|
16
21
|
...baseEditorConfig,
|
|
17
22
|
settings: {
|
package/dist/server.d.ts
CHANGED
|
@@ -29,8 +29,8 @@ import type { BylineClient } from '@byline/client';
|
|
|
29
29
|
import type { RichTextPopulateFn } from '@byline/core';
|
|
30
30
|
import { type LexicalNodeVisitor } from './field/lexical-populate-shared';
|
|
31
31
|
export { defaultEditorConfig } from './field/config/default';
|
|
32
|
-
export { inlineImageVisitor } from './field/
|
|
33
|
-
export { linkVisitor } from './field/
|
|
32
|
+
export { inlineImageVisitor } from './field/extensions/inline-image/populate';
|
|
33
|
+
export { linkVisitor } from './field/extensions/link/populate';
|
|
34
34
|
export type { EditorConfig, EditorSettings, EditorSettingsOverride } from './field/config/types';
|
|
35
35
|
export type { LexicalNodeLike, LexicalNodeVisitor, PendingHydration, } from './field/lexical-populate-shared';
|
|
36
36
|
export interface LexicalServerOptions {
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { inlineImageVisitor } from "./field/extensions/inline-image/populate.js";
|
|
2
|
+
import { linkVisitor } from "./field/extensions/link/populate.js";
|
|
1
3
|
import { runLexicalPopulate } from "./field/lexical-populate-shared.js";
|
|
2
|
-
import { inlineImageVisitor } from "./field/plugins/inline-image-plugin/populate.js";
|
|
3
|
-
import { linkVisitor } from "./field/plugins/link-plugin/populate.js";
|
|
4
4
|
function lexicalEditorServer(options) {
|
|
5
5
|
const visitors = options.visitors ?? [
|
|
6
6
|
inlineImageVisitor,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.12.1",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=20.9.0"
|
|
9
9
|
},
|
|
@@ -42,10 +42,6 @@
|
|
|
42
42
|
"main": "./dist/index.js",
|
|
43
43
|
"default": "./dist/index.js"
|
|
44
44
|
},
|
|
45
|
-
"./toolbar-extensions": {
|
|
46
|
-
"types": "./dist/field/toolbar-extensions.d.ts",
|
|
47
|
-
"import": "./dist/field/toolbar-extensions.js"
|
|
48
|
-
},
|
|
49
45
|
"./server": {
|
|
50
46
|
"types": "./dist/server.d.ts",
|
|
51
47
|
"import": "./dist/server.js",
|
|
@@ -56,6 +52,7 @@
|
|
|
56
52
|
"dependencies": {
|
|
57
53
|
"@lexical/clipboard": "0.44.0",
|
|
58
54
|
"@lexical/code": "0.44.0",
|
|
55
|
+
"@lexical/extension": "0.44.0",
|
|
59
56
|
"@lexical/hashtag": "0.44.0",
|
|
60
57
|
"@lexical/headless": "0.44.0",
|
|
61
58
|
"@lexical/html": "0.44.0",
|
|
@@ -75,9 +72,9 @@
|
|
|
75
72
|
"npm-run-all": "^4.1.5",
|
|
76
73
|
"prism-react-renderer": "^2.4.1",
|
|
77
74
|
"react-error-boundary": "^6.1.1",
|
|
78
|
-
"@byline/
|
|
79
|
-
"@byline/
|
|
80
|
-
"@byline/
|
|
75
|
+
"@byline/ui": "1.12.1",
|
|
76
|
+
"@byline/core": "1.12.1",
|
|
77
|
+
"@byline/client": "1.12.1"
|
|
81
78
|
},
|
|
82
79
|
"peerDependencies": {
|
|
83
80
|
"react": "^19.0.0",
|
|
@@ -113,10 +110,10 @@
|
|
|
113
110
|
"dev": "run-p dev:*",
|
|
114
111
|
"dev:code": "rslib build --watch",
|
|
115
112
|
"build": "run-s build:*",
|
|
116
|
-
"build:clean": "
|
|
113
|
+
"build:clean": "node scripts/clean.js dist build",
|
|
117
114
|
"build:code": "rslib build",
|
|
118
115
|
"typecheck": "tsc --noEmit",
|
|
119
|
-
"clean": "
|
|
116
|
+
"clean": "node scripts/clean.js node_modules dist build types .turbo",
|
|
120
117
|
"lint": "biome check --write --unsafe --diagnostic-level=error",
|
|
121
118
|
"skip:test": "vitest"
|
|
122
119
|
}
|
|
@@ -61,12 +61,12 @@ export function ApplyValuePlugin({
|
|
|
61
61
|
|
|
62
62
|
const nextState = editor.parseEditorState(value)
|
|
63
63
|
|
|
64
|
-
editor.update
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
64
|
+
// Must NOT be wrapped in editor.update — setEditorState defers its commit
|
|
65
|
+
// when called inside an active update, leaving selection/node references
|
|
66
|
+
// pointing into the pre-swap nodeMap. Surfaces as @lexical/table observer
|
|
67
|
+
// errors ("Expected node with key N to exist") on the very next selection
|
|
68
|
+
// change. setEditorState applies the tag itself.
|
|
69
|
+
editor.setEditorState(nextState, { tag: APPLY_VALUE_TAG })
|
|
70
70
|
lastAppliedHashRef.current = nextRawHash
|
|
71
71
|
|
|
72
72
|
let cancelled = false
|