@byline/richtext-lexical 1.11.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.js
RENAMED
|
@@ -15,8 +15,8 @@ import { useEditorConfig } from "../../config/editor-config-context.js";
|
|
|
15
15
|
import { ContentEditable } from "../../content-editable.js";
|
|
16
16
|
import { useSharedHistoryContext } from "../../context/shared-history-context.js";
|
|
17
17
|
import { useSharedOnChange } from "../../context/shared-on-change-context.js";
|
|
18
|
-
import { AdmonitionModal } from "../../plugins/admonition-plugin/admonition-modal.js";
|
|
19
18
|
import { Placeholder } from "../../ui/placeholder.js";
|
|
19
|
+
import { AdmonitionModal } from "./admonition-modal.js";
|
|
20
20
|
import { $isAdmonitionNode } from "./admonition-node.js";
|
|
21
21
|
import { DangerIcon, NoteIcon, TipIcon, WarningIcon } from "./icons/index.js";
|
|
22
22
|
import "./admonition-node-component.css";
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import * as React from 'react';
|
|
9
9
|
import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey } from 'lexical';
|
|
10
10
|
import { DecoratorNode } from 'lexical';
|
|
11
|
-
import type { AdmonitionAttributes, AdmonitionType, SerializedAdmonitionNode } from './types';
|
|
11
|
+
import type { AdmonitionAttributes, AdmonitionType, SerializedAdmonitionNode } from './node-types';
|
|
12
12
|
export declare class AdmonitionNode extends DecoratorNode<React.JSX.Element> {
|
|
13
13
|
__admonitionType: AdmonitionType;
|
|
14
14
|
__title: string;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { RadioGroupValue } from '@byline/ui/react';
|
|
9
|
-
import type { AdmonitionType } from '
|
|
9
|
+
import type { AdmonitionType } from './node-types';
|
|
10
10
|
import type { AdmonitionFormState } from './types';
|
|
11
11
|
export declare const admonitionTypeOptions: RadioGroupValue[];
|
|
12
12
|
export declare function getInitialState(data: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./admonition-node.js";
|
|
2
|
-
export * from "./types.js";
|
|
2
|
+
export * from "./node-types.js";
|
|
@@ -18,3 +18,4 @@ export declare const YoutubeEmbedConfig: AutoEmbedConfig;
|
|
|
18
18
|
export declare const VimeoEmbedConfig: AutoEmbedConfig;
|
|
19
19
|
export declare const EmbedConfigs: AutoEmbedConfig[];
|
|
20
20
|
export declare function AutoEmbedPlugin(): React.JSX.Element;
|
|
21
|
+
export declare const AutoEmbedExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/AutoEmbed", unknown, unknown>;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import { AutoEmbedOption, LexicalAutoEmbedPlugin } from "@lexical/react/LexicalAutoEmbedPlugin";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { AutoEmbedOption, INSERT_EMBED_COMMAND, LexicalAutoEmbedPlugin } from "@lexical/react/LexicalAutoEmbedPlugin";
|
|
5
|
+
import { ReactExtension } from "@lexical/react/ReactExtension";
|
|
6
|
+
import { configExtension, declarePeerDependency, defineExtension } from "lexical";
|
|
7
|
+
import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
|
|
8
|
+
import { DropDownItem } from "../../ui/dropdown.js";
|
|
9
|
+
import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
|
|
10
|
+
import { INSERT_VIMEO_COMMAND } from "../vimeo/vimeo-extension.js";
|
|
11
|
+
import { INSERT_YOUTUBE_COMMAND } from "../youtube/youtube-extension.js";
|
|
7
12
|
import { AutoEmbedModal } from "./auto-embed-modal.js";
|
|
8
13
|
import * as __rspack_external_react_dom_7136dc57 from "react-dom";
|
|
9
14
|
const YoutubeEmbedConfig = {
|
|
@@ -149,4 +154,42 @@ function AutoEmbedPlugin() {
|
|
|
149
154
|
]
|
|
150
155
|
});
|
|
151
156
|
}
|
|
152
|
-
|
|
157
|
+
function EmbedInsertItem({ embedConfig }) {
|
|
158
|
+
const editor = useToolbarActiveEditor();
|
|
159
|
+
return /*#__PURE__*/ jsxs(DropDownItem, {
|
|
160
|
+
onClick: ()=>{
|
|
161
|
+
editor.dispatchCommand(INSERT_EMBED_COMMAND, embedConfig.type);
|
|
162
|
+
},
|
|
163
|
+
className: "item",
|
|
164
|
+
children: [
|
|
165
|
+
embedConfig.icon,
|
|
166
|
+
/*#__PURE__*/ jsx("span", {
|
|
167
|
+
className: "text",
|
|
168
|
+
children: embedConfig.contentName
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const AutoEmbedExtension = defineExtension({
|
|
174
|
+
name: '@byline/richtext-lexical/AutoEmbed',
|
|
175
|
+
dependencies: [
|
|
176
|
+
configExtension(ReactExtension, {
|
|
177
|
+
decorators: [
|
|
178
|
+
/*#__PURE__*/ jsx(AutoEmbedPlugin, {}, "d")
|
|
179
|
+
]
|
|
180
|
+
})
|
|
181
|
+
],
|
|
182
|
+
peerDependencies: [
|
|
183
|
+
declarePeerDependency(BylineToolbarExtension.name, {
|
|
184
|
+
items: EmbedConfigs.map((embedConfig, idx)=>({
|
|
185
|
+
id: `@byline/richtext-lexical/AutoEmbed/${embedConfig.type}`,
|
|
186
|
+
placement: 'insert-menu',
|
|
187
|
+
order: 60 + idx,
|
|
188
|
+
node: /*#__PURE__*/ jsx(EmbedInsertItem, {
|
|
189
|
+
embedConfig: embedConfig
|
|
190
|
+
})
|
|
191
|
+
}))
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
export { AutoEmbedExtension, AutoEmbedPlugin, EmbedConfigs, VimeoEmbedConfig, YoutubeEmbedConfig };
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Props passed by `Editor.tsx` to every registered floating-UI component.
|
|
11
|
+
* The component renders itself (usually via `createPortal(..., anchorElem)`)
|
|
12
|
+
* inside the editor's floating slot.
|
|
13
|
+
*/
|
|
14
|
+
export interface BylineFloatingUIProps {
|
|
15
|
+
anchorElem: HTMLElement;
|
|
16
|
+
}
|
|
17
|
+
export interface BylineFloatingUIItem {
|
|
18
|
+
/**
|
|
19
|
+
* Stable identifier — used as React key and for de-duplication.
|
|
20
|
+
* Convention: `<extension-name>/<purpose>`, e.g.
|
|
21
|
+
* `'@byline/richtext-lexical/Link/floating-editor'`.
|
|
22
|
+
*/
|
|
23
|
+
id: string;
|
|
24
|
+
/**
|
|
25
|
+
* The floating UI component. Receives `anchorElem` (the editor's
|
|
26
|
+
* inner content-editable wrapper) as a prop and is expected to portal
|
|
27
|
+
* itself into that element.
|
|
28
|
+
*/
|
|
29
|
+
Component: React.ComponentType<BylineFloatingUIProps>;
|
|
30
|
+
/** Sort key — lower numbers render first. Mostly cosmetic. */
|
|
31
|
+
order?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface BylineFloatingUIConfig {
|
|
34
|
+
items: BylineFloatingUIItem[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The floating-UI contract. Other extensions contribute floating UIs by
|
|
38
|
+
* listing `BylineFloatingUIExtension` in their `peerDependencies` and
|
|
39
|
+
* supplying an `items` array. The editor's floating slot reads the merged
|
|
40
|
+
* list once and renders every contributor under the shared anchor.
|
|
41
|
+
*
|
|
42
|
+
* Mirror of `BylineToolbarExtension` for the floating-UI surface — same
|
|
43
|
+
* pattern, same authoring shape.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { declarePeerDependency, defineExtension } from 'lexical'
|
|
48
|
+
* import { BylineFloatingUIExtension } from '@byline/richtext-lexical'
|
|
49
|
+
*
|
|
50
|
+
* export const MyExtension = defineExtension({
|
|
51
|
+
* name: '@example/MyExtension',
|
|
52
|
+
* peerDependencies: [
|
|
53
|
+
* declarePeerDependency<typeof BylineFloatingUIExtension>(
|
|
54
|
+
* BylineFloatingUIExtension.name,
|
|
55
|
+
* {
|
|
56
|
+
* items: [{
|
|
57
|
+
* id: '@example/MyExtension/floating',
|
|
58
|
+
* Component: MyFloatingPopover,
|
|
59
|
+
* }],
|
|
60
|
+
* }
|
|
61
|
+
* ),
|
|
62
|
+
* ],
|
|
63
|
+
* })
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare const BylineFloatingUIExtension: import("lexical").LexicalExtension<BylineFloatingUIConfig, "@byline/richtext-lexical/FloatingUI", unknown, unknown>;
|
|
67
|
+
/** Sort helper used by the editor's floating-UI slot. */
|
|
68
|
+
export declare function selectFloatingUIItems(items: ReadonlyArray<BylineFloatingUIItem>): BylineFloatingUIItem[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineExtension, safeCast, shallowMergeConfig } from "lexical";
|
|
2
|
+
const BylineFloatingUIExtension = defineExtension({
|
|
3
|
+
name: '@byline/richtext-lexical/FloatingUI',
|
|
4
|
+
config: safeCast({
|
|
5
|
+
items: []
|
|
6
|
+
}),
|
|
7
|
+
mergeConfig (a, b) {
|
|
8
|
+
const merged = shallowMergeConfig(a, b);
|
|
9
|
+
if (b.items && b.items.length > 0) merged.items = [
|
|
10
|
+
...a.items,
|
|
11
|
+
...b.items
|
|
12
|
+
];
|
|
13
|
+
return merged;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
function selectFloatingUIItems(items) {
|
|
17
|
+
return items.slice().sort((a, b)=>(a.order ?? 0) - (b.order ?? 0));
|
|
18
|
+
}
|
|
19
|
+
export { BylineFloatingUIExtension, selectFloatingUIItems };
|
|
@@ -5,5 +5,4 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
9
|
-
export * from './types';
|
|
8
|
+
export { type BylineFloatingUIConfig, BylineFloatingUIExtension, type BylineFloatingUIItem, type BylineFloatingUIProps, selectFloatingUIItems, } from './byline-floating-ui-extension';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BylineFloatingUIExtension, selectFloatingUIItems } from "./byline-floating-ui-extension.js";
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Where in the Byline toolbar a contributed item is rendered. Built-in
|
|
11
|
+
* extensions and third-party extensions both contribute against these
|
|
12
|
+
* placements via `peerDependencies`; the toolbar plugin reads the merged
|
|
13
|
+
* list and dispatches by `placement`.
|
|
14
|
+
*
|
|
15
|
+
* - `'toolbar'` — appended to the end of the main toolbar row.
|
|
16
|
+
* - `'insert-menu'` — listed inside the "Insert" dropdown that the
|
|
17
|
+
* toolbar shows when at least one insert-menu contribution exists.
|
|
18
|
+
*/
|
|
19
|
+
export type BylineToolbarPlacement = 'toolbar' | 'insert-menu';
|
|
20
|
+
export interface BylineToolbarItem {
|
|
21
|
+
/**
|
|
22
|
+
* Stable identifier — used as React key and for de-duplication.
|
|
23
|
+
* Convention: `<extension-name>/<purpose>`, e.g.
|
|
24
|
+
* `'@byline/richtext-lexical/InlineImage/insert'`.
|
|
25
|
+
*/
|
|
26
|
+
id: string;
|
|
27
|
+
placement: BylineToolbarPlacement;
|
|
28
|
+
/** Sort key within `placement`. Lower numbers render first. */
|
|
29
|
+
order?: number;
|
|
30
|
+
node: React.ReactNode;
|
|
31
|
+
}
|
|
32
|
+
export interface BylineToolbarConfig {
|
|
33
|
+
items: BylineToolbarItem[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The toolbar contract. Other extensions add toolbar entries by listing
|
|
37
|
+
* `BylineToolbarExtension` in their `peerDependencies` and supplying an
|
|
38
|
+
* `items` array — the configs are merged across every contributor and
|
|
39
|
+
* read once by the toolbar plugin.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* import { declarePeerDependency, defineExtension } from 'lexical'
|
|
44
|
+
* import { BylineToolbarExtension } from '@byline/richtext-lexical'
|
|
45
|
+
*
|
|
46
|
+
* export const MyExtension = defineExtension({
|
|
47
|
+
* name: '@example/MyExtension',
|
|
48
|
+
* peerDependencies: [
|
|
49
|
+
* declarePeerDependency<typeof BylineToolbarExtension>(
|
|
50
|
+
* BylineToolbarExtension.name,
|
|
51
|
+
* {
|
|
52
|
+
* items: [{
|
|
53
|
+
* id: '@example/MyExtension/insert',
|
|
54
|
+
* placement: 'insert-menu',
|
|
55
|
+
* order: 100,
|
|
56
|
+
* node: <MyInsertMenuItem />,
|
|
57
|
+
* }],
|
|
58
|
+
* }
|
|
59
|
+
* ),
|
|
60
|
+
* ],
|
|
61
|
+
* })
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare const BylineToolbarExtension: import("lexical").LexicalExtension<BylineToolbarConfig, "@byline/richtext-lexical/Toolbar", unknown, unknown>;
|
|
65
|
+
/**
|
|
66
|
+
* Sort and filter helper used by `toolbar-plugin` and any external
|
|
67
|
+
* surface that wants to render Byline toolbar contributions itself.
|
|
68
|
+
*/
|
|
69
|
+
export declare function selectToolbarItems(items: ReadonlyArray<BylineToolbarItem>, placement: BylineToolbarPlacement): BylineToolbarItem[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineExtension, safeCast, shallowMergeConfig } from "lexical";
|
|
2
|
+
const BylineToolbarExtension = defineExtension({
|
|
3
|
+
name: '@byline/richtext-lexical/Toolbar',
|
|
4
|
+
config: safeCast({
|
|
5
|
+
items: []
|
|
6
|
+
}),
|
|
7
|
+
mergeConfig (a, b) {
|
|
8
|
+
const merged = shallowMergeConfig(a, b);
|
|
9
|
+
if (b.items && b.items.length > 0) merged.items = [
|
|
10
|
+
...a.items,
|
|
11
|
+
...b.items
|
|
12
|
+
];
|
|
13
|
+
return merged;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
function selectToolbarItems(items, placement) {
|
|
17
|
+
return items.filter((item)=>item.placement === placement).slice().sort((a, b)=>(a.order ?? 0) - (b.order ?? 0));
|
|
18
|
+
}
|
|
19
|
+
export { BylineToolbarExtension, selectToolbarItems };
|
|
@@ -5,5 +5,4 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
9
|
-
export * from './types';
|
|
8
|
+
export { type BylineToolbarConfig, BylineToolbarExtension, type BylineToolbarItem, type BylineToolbarPlacement, selectToolbarItems, } from './byline-toolbar-extension';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BylineToolbarExtension, selectToolbarItems } from "./byline-toolbar-extension.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
* Portions Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
9
|
+
*/
|
|
10
|
+
export declare const CodeHighlightExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/CodeHighlight", unknown, unknown>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CodeHighlightNode, CodeNode, registerCodeHighlighting } from "@lexical/code";
|
|
2
|
+
import { defineExtension } from "lexical";
|
|
3
|
+
const CodeHighlightExtension = defineExtension({
|
|
4
|
+
name: '@byline/richtext-lexical/CodeHighlight',
|
|
5
|
+
nodes: ()=>[
|
|
6
|
+
CodeNode,
|
|
7
|
+
CodeHighlightNode
|
|
8
|
+
],
|
|
9
|
+
register: (editor)=>registerCodeHighlighting(editor)
|
|
10
|
+
});
|
|
11
|
+
export { CodeHighlightExtension };
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
/**
|
|
9
|
+
* Standalone Byline extension that contributes the floating text-format
|
|
10
|
+
* toolbar (the popover shown above a non-collapsed range selection) to
|
|
11
|
+
* the editor. Removing this extension from the registered list hides the
|
|
12
|
+
* UI — `c.extensions.remove(FloatingTextFormatExtension)`.
|
|
13
|
+
*
|
|
14
|
+
* Lives in its own extension because the popover isn't owned by any
|
|
15
|
+
* single feature: it handles bold / italic / underline / strikethrough /
|
|
16
|
+
* subscript / superscript / inline-code / link toggle in one place.
|
|
17
|
+
*/
|
|
18
|
+
export declare const FloatingTextFormatExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/FloatingTextFormat", unknown, unknown>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { declarePeerDependency, defineExtension } from "lexical";
|
|
2
|
+
import { BylineFloatingUIExtension } from "../byline-floating-ui/byline-floating-ui-extension.js";
|
|
3
|
+
import { FloatingTextFormatToolbarPlugin } from "./index.js";
|
|
4
|
+
const FloatingTextFormatExtension = defineExtension({
|
|
5
|
+
name: '@byline/richtext-lexical/FloatingTextFormat',
|
|
6
|
+
peerDependencies: [
|
|
7
|
+
declarePeerDependency(BylineFloatingUIExtension.name, {
|
|
8
|
+
items: [
|
|
9
|
+
{
|
|
10
|
+
id: '@byline/richtext-lexical/FloatingTextFormat/popover',
|
|
11
|
+
Component: FloatingTextFormatToolbarPlugin
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
})
|
|
15
|
+
]
|
|
16
|
+
});
|
|
17
|
+
export { FloatingTextFormatExtension };
|
|
@@ -7,10 +7,10 @@ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext
|
|
|
7
7
|
import { mergeRegister } from "@lexical/utils";
|
|
8
8
|
import { $getSelection, $isParagraphNode, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_LOW, FORMAT_TEXT_COMMAND, SELECTION_CHANGE_COMMAND } from "lexical";
|
|
9
9
|
import { createPortal } from "react-dom";
|
|
10
|
-
import { $isLinkNode, TOGGLE_LINK_COMMAND } from "../../nodes/link-nodes/index.js";
|
|
11
10
|
import { getDOMRangeRect } from "../../utils/getDOMRangeRect.js";
|
|
12
11
|
import { getSelectedNode } from "../../utils/getSelectedNode.js";
|
|
13
12
|
import { setFloatingElemPosition } from "../../utils/setFloatingElemPosition.js";
|
|
13
|
+
import { $isLinkNode, TOGGLE_LINK_COMMAND } from "../link/index.js";
|
|
14
14
|
function TextFormatFloatingToolbar({ editor, anchorElem, isLink, isBold, isItalic, isUnderline, isCode, isStrikethrough, isSubscript, isSuperscript }) {
|
|
15
15
|
const popupCharStylesEditorRef = useRef(null);
|
|
16
16
|
const handleOnInsertLink = useCallback(()=>{
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Byline wrapper around the upstream `HorizontalRuleExtension`. Adds a
|
|
3
|
+
* single insert-menu contribution; the underlying extension still owns
|
|
4
|
+
* the node registration and command behaviour.
|
|
5
|
+
*/
|
|
6
|
+
export declare const HorizontalRuleExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/HorizontalRule", unknown, unknown>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { HorizontalRuleExtension } from "@lexical/extension";
|
|
4
|
+
import { INSERT_HORIZONTAL_RULE_COMMAND } from "@lexical/react/LexicalHorizontalRuleNode";
|
|
5
|
+
import { declarePeerDependency, defineExtension } from "lexical";
|
|
6
|
+
import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
|
|
7
|
+
import { DropDownItem } from "../../ui/dropdown.js";
|
|
8
|
+
import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
|
|
9
|
+
function HorizontalRuleInsertItem() {
|
|
10
|
+
const editor = useToolbarActiveEditor();
|
|
11
|
+
return /*#__PURE__*/ jsxs(DropDownItem, {
|
|
12
|
+
onClick: ()=>{
|
|
13
|
+
editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, void 0);
|
|
14
|
+
},
|
|
15
|
+
className: "item",
|
|
16
|
+
children: [
|
|
17
|
+
/*#__PURE__*/ jsx("i", {
|
|
18
|
+
className: "icon horizontal-rule"
|
|
19
|
+
}),
|
|
20
|
+
/*#__PURE__*/ jsx("span", {
|
|
21
|
+
className: "text",
|
|
22
|
+
children: "Horizontal Rule"
|
|
23
|
+
})
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const horizontal_rule_extension_HorizontalRuleExtension = defineExtension({
|
|
28
|
+
name: '@byline/richtext-lexical/HorizontalRule',
|
|
29
|
+
dependencies: [
|
|
30
|
+
HorizontalRuleExtension
|
|
31
|
+
],
|
|
32
|
+
peerDependencies: [
|
|
33
|
+
declarePeerDependency(BylineToolbarExtension.name, {
|
|
34
|
+
items: [
|
|
35
|
+
{
|
|
36
|
+
id: '@byline/richtext-lexical/HorizontalRule/insert',
|
|
37
|
+
placement: 'insert-menu',
|
|
38
|
+
order: 10,
|
|
39
|
+
node: /*#__PURE__*/ jsx(HorizontalRuleInsertItem, {})
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
});
|
|
45
|
+
export { horizontal_rule_extension_HorizontalRuleExtension as HorizontalRuleExtension };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./inline-image-node.js";
|
|
2
|
-
export * from "./types.js";
|
|
2
|
+
export * from "./node-types.js";
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type * as React from 'react';
|
|
11
11
|
import { type LexicalCommand, type NodeKey } from 'lexical';
|
|
12
|
-
import type { InlineImageAttributes } from '
|
|
12
|
+
import type { InlineImageAttributes } from './node-types';
|
|
13
13
|
export type InsertInlineImagePayload = Readonly<InlineImageAttributes>;
|
|
14
14
|
export type UpdateInlineImagePayload = Readonly<{
|
|
15
15
|
nodeKey: NodeKey;
|
|
@@ -28,6 +28,9 @@ export declare const OPEN_INLINE_IMAGE_MODAL_COMMAND: LexicalCommand<OpenInlineI
|
|
|
28
28
|
export declare const INSERT_INLINE_IMAGE_COMMAND: LexicalCommand<InsertInlineImagePayload>;
|
|
29
29
|
/** Updates the InlineImageNode identified by `nodeKey` in place. */
|
|
30
30
|
export declare const UPDATE_INLINE_IMAGE_COMMAND: LexicalCommand<UpdateInlineImagePayload>;
|
|
31
|
-
export declare function InlineImagePlugin(
|
|
31
|
+
export declare function InlineImagePlugin(): React.JSX.Element;
|
|
32
|
+
export interface InlineImageConfig {
|
|
33
|
+
/** Upload collection that the inline-image modal targets. Required. */
|
|
32
34
|
collection: string;
|
|
33
|
-
}
|
|
35
|
+
}
|
|
36
|
+
export declare const InlineImageExtension: import("lexical").LexicalExtension<InlineImageConfig, "@byline/richtext-lexical/InlineImage", unknown, unknown>;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
5
|
+
import { ReactExtension } from "@lexical/react/ReactExtension";
|
|
6
|
+
import { useExtensionDependency } from "@lexical/react/useExtensionComponent";
|
|
5
7
|
import { $wrapNodeInElement, mergeRegister } from "@lexical/utils";
|
|
6
|
-
import { $createParagraphNode, $getNodeByKey, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_NORMAL, createCommand } from "lexical";
|
|
7
|
-
import {
|
|
8
|
+
import { $createParagraphNode, $getNodeByKey, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_NORMAL, configExtension, createCommand, declarePeerDependency, defineExtension, safeCast } from "lexical";
|
|
9
|
+
import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
|
|
10
|
+
import { DropDownItem } from "../../ui/dropdown.js";
|
|
11
|
+
import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
|
|
8
12
|
import { InlineImageModal } from "./inline-image-modal.js";
|
|
13
|
+
import { $createInlineImageNode, $isInlineImageNode, InlineImageNode } from "./inline-image-node.js";
|
|
9
14
|
const OPEN_INLINE_IMAGE_MODAL_COMMAND = createCommand('OPEN_INLINE_IMAGE_MODAL_COMMAND');
|
|
10
15
|
const INSERT_INLINE_IMAGE_COMMAND = createCommand('INSERT_INLINE_IMAGE_COMMAND');
|
|
11
16
|
const UPDATE_INLINE_IMAGE_COMMAND = createCommand('UPDATE_INLINE_IMAGE_COMMAND');
|
|
@@ -30,8 +35,9 @@ function readNodeAsInitialData(editor, nodeKey) {
|
|
|
30
35
|
});
|
|
31
36
|
return data;
|
|
32
37
|
}
|
|
33
|
-
function InlineImagePlugin(
|
|
38
|
+
function InlineImagePlugin() {
|
|
34
39
|
const [editor] = useLexicalComposerContext();
|
|
40
|
+
const { collection } = useExtensionDependency(InlineImageExtension).config;
|
|
35
41
|
const [modalState, setModalState] = useState(CLOSED_STATE);
|
|
36
42
|
useEffect(()=>{
|
|
37
43
|
if (!editor.hasNodes([
|
|
@@ -104,4 +110,50 @@ function InlineImagePlugin({ collection }) {
|
|
|
104
110
|
onClose: handleClose
|
|
105
111
|
});
|
|
106
112
|
}
|
|
107
|
-
|
|
113
|
+
function InlineImageInsertItem() {
|
|
114
|
+
const editor = useToolbarActiveEditor();
|
|
115
|
+
return /*#__PURE__*/ jsxs(DropDownItem, {
|
|
116
|
+
onClick: ()=>{
|
|
117
|
+
editor.dispatchCommand(OPEN_INLINE_IMAGE_MODAL_COMMAND, null);
|
|
118
|
+
},
|
|
119
|
+
className: "item",
|
|
120
|
+
children: [
|
|
121
|
+
/*#__PURE__*/ jsx("i", {
|
|
122
|
+
className: "icon image"
|
|
123
|
+
}),
|
|
124
|
+
/*#__PURE__*/ jsx("span", {
|
|
125
|
+
className: "text",
|
|
126
|
+
children: "Inline Image"
|
|
127
|
+
})
|
|
128
|
+
]
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const InlineImageExtension = defineExtension({
|
|
132
|
+
name: '@byline/richtext-lexical/InlineImage',
|
|
133
|
+
nodes: ()=>[
|
|
134
|
+
InlineImageNode
|
|
135
|
+
],
|
|
136
|
+
config: safeCast({
|
|
137
|
+
collection: ''
|
|
138
|
+
}),
|
|
139
|
+
dependencies: [
|
|
140
|
+
configExtension(ReactExtension, {
|
|
141
|
+
decorators: [
|
|
142
|
+
/*#__PURE__*/ jsx(InlineImagePlugin, {}, "d")
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
],
|
|
146
|
+
peerDependencies: [
|
|
147
|
+
declarePeerDependency(BylineToolbarExtension.name, {
|
|
148
|
+
items: [
|
|
149
|
+
{
|
|
150
|
+
id: '@byline/richtext-lexical/InlineImage/insert',
|
|
151
|
+
placement: 'insert-menu',
|
|
152
|
+
order: 40,
|
|
153
|
+
node: /*#__PURE__*/ jsx(InlineImageInsertItem, {})
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
export { INSERT_INLINE_IMAGE_COMMAND, InlineImageExtension, InlineImagePlugin, OPEN_INLINE_IMAGE_MODAL_COMMAND, UPDATE_INLINE_IMAGE_COMMAND };
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type * as React from 'react';
|
|
9
9
|
import type { LexicalEditor, NodeKey } from 'lexical';
|
|
10
|
-
import type { DocumentRelation } from '
|
|
11
|
-
import type { Position } from './types';
|
|
10
|
+
import type { DocumentRelation } from '../../nodes/document-relation';
|
|
11
|
+
import type { Position } from './node-types';
|
|
12
12
|
import './inline-image-node-component.css';
|
|
13
13
|
export default function InlineImageComponent({ relation, src, position, altText, width, height, showCaption, caption, nodeKey, }: {
|
|
14
14
|
relation: DocumentRelation;
|
|
@@ -13,11 +13,11 @@ import { $getNodeByKey, $getSelection, $isNodeSelection, $setSelection, CLICK_CO
|
|
|
13
13
|
import content_editable_inline from "../../content-editable-inline.js";
|
|
14
14
|
import { useSharedHistoryContext } from "../../context/shared-history-context.js";
|
|
15
15
|
import { useSharedOnChange } from "../../context/shared-on-change-context.js";
|
|
16
|
-
import { FloatingTextFormatToolbarPlugin } from "../../plugins/floating-text-format-toolbar-plugin/index.js";
|
|
17
|
-
import { OPEN_INLINE_IMAGE_MODAL_COMMAND } from "../../plugins/inline-image-plugin/index.js";
|
|
18
|
-
import { LinkPlugin } from "../../plugins/link-plugin/link/index.js";
|
|
19
|
-
import { FloatingLinkEditorPlugin } from "../../plugins/link-plugin/link/floating-link-editor.js";
|
|
20
16
|
import placeholder_inline from "../../ui/placeholder-inline.js";
|
|
17
|
+
import { FloatingTextFormatToolbarPlugin } from "../floating-text-format/index.js";
|
|
18
|
+
import { FloatingLinkEditorPlugin } from "../link/floating-link-editor.js";
|
|
19
|
+
import { LinkPlugin } from "../link/link-extension.js";
|
|
20
|
+
import { OPEN_INLINE_IMAGE_MODAL_COMMAND } from "./inline-image-extension.js";
|
|
21
21
|
import { $isInlineImageNode } from "./inline-image-node.js";
|
|
22
22
|
import "./inline-image-node-component.css";
|
|
23
23
|
const imageCache = new Set();
|
package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.d.ts
RENAMED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
import * as React from 'react';
|
|
9
9
|
import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey } from 'lexical';
|
|
10
10
|
import { DecoratorNode } from 'lexical';
|
|
11
|
-
import type { DocumentRelation } from '
|
|
12
|
-
import type { InlineImageAttributes, Position, SerializedInlineImageNode } from './types';
|
|
11
|
+
import type { DocumentRelation } from '../../nodes/document-relation';
|
|
12
|
+
import type { InlineImageAttributes, Position, SerializedInlineImageNode } from './node-types';
|
|
13
13
|
export declare class InlineImageNode extends DecoratorNode<React.JSX.Element> {
|
|
14
14
|
__relation: DocumentRelation;
|
|
15
15
|
__src: string;
|
package/dist/field/{nodes/inline-image-node/types.d.ts → extensions/inline-image/node-types.d.ts}
RENAMED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { LexicalEditor, NodeKey, SerializedEditor, SerializedLexicalNode, Spread } from 'lexical';
|
|
9
|
-
import type { DocumentRelation } from '
|
|
9
|
+
import type { DocumentRelation } from '../../nodes/document-relation';
|
|
10
10
|
export type Position = 'left' | 'right' | 'full' | 'wide' | 'default' | undefined;
|
|
11
11
|
export interface InlineImageAttributes extends DocumentRelation {
|
|
12
12
|
src: string;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { DocumentRelation } from '../../nodes/document-relation';
|
|
9
|
-
import type { Position } from '
|
|
9
|
+
import type { Position } from './node-types';
|
|
10
10
|
/**
|
|
11
11
|
* The form-shape carried into / out of the inline image modal. Mirrors
|
|
12
12
|
* `InlineImageAttributes` minus the Lexical-managed bits (`key`, `caption:
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { StoredFileValue } from '@byline/core';
|
|
9
|
-
import type { Position } from '
|
|
9
|
+
import type { Position } from './node-types';
|
|
10
10
|
export interface PreferredSize {
|
|
11
11
|
url: string;
|
|
12
12
|
width?: number;
|