@inshapardaz/likhari-react 0.1.7-dev.81 → 0.1.7-dev.84

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.
@@ -1,110 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect } from 'react';
3
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
4
- import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection';
5
- import { addClassNamesToElement, mergeRegister, removeClassNamesFromElement } from '@lexical/utils';
6
- import { useUiStrings } from '../i18n/useStrings.js';
7
- import { $applyNodeReplacement, $getSelection, $isNodeSelection, CLICK_COMMAND, COMMAND_PRIORITY_LOW, createCommand, DecoratorNode, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND, } from 'lexical';
8
- export const INSERT_PAGE_BREAK_COMMAND = createCommand('INSERT_PAGE_BREAK_COMMAND');
9
- const SELECTED_CLASS_NAME = 'likhari-page-break-selected';
10
- function PageBreakComponent({ nodeKey }) {
11
- const [editor] = useLexicalComposerContext();
12
- const strings = useUiStrings();
13
- const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey);
14
- const onDelete = useCallback((event) => {
15
- const selection = $getSelection();
16
- if (isSelected && $isNodeSelection(selection)) {
17
- event.preventDefault();
18
- editor.update(() => {
19
- selection.getNodes().forEach((node) => {
20
- if ($isPageBreakNode(node))
21
- node.remove();
22
- });
23
- });
24
- }
25
- return false;
26
- }, [editor, isSelected]);
27
- useEffect(() => {
28
- return mergeRegister(editor.registerCommand(CLICK_COMMAND, (event) => {
29
- const element = editor.getElementByKey(nodeKey);
30
- if (event.target !== element)
31
- return false;
32
- if (!event.shiftKey)
33
- clearSelection();
34
- setSelected(!isSelected);
35
- return true;
36
- }, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_DELETE_COMMAND, onDelete, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_BACKSPACE_COMMAND, onDelete, COMMAND_PRIORITY_LOW));
37
- }, [clearSelection, editor, isSelected, nodeKey, onDelete, setSelected]);
38
- useEffect(() => {
39
- const element = editor.getElementByKey(nodeKey);
40
- if (!element)
41
- return;
42
- if (isSelected)
43
- addClassNamesToElement(element, SELECTED_CLASS_NAME);
44
- else
45
- removeClassNamesFromElement(element, SELECTED_CLASS_NAME);
46
- }, [editor, isSelected, nodeKey]);
47
- return (_jsxs(_Fragment, { children: [_jsx("span", { className: "likhari-page-break-line", "aria-hidden": "true" }), _jsx("span", { className: "likhari-page-break-label", children: strings.editor.pageBreakLabel }), _jsx("span", { className: "likhari-page-break-line", "aria-hidden": "true" })] }));
48
- }
49
- /**
50
- * A manual page break — a print/paginated-export concept with no native
51
- * Lexical node (lexical-editor-spec.md §4.3/§4.6). Renders as a visible
52
- * dashed marker while editing, and as `page-break-after: always` both live
53
- * (a print stylesheet, editor.css) and in exported HTML (`exportDOM`).
54
- *
55
- * Mirrors @lexical/react's HorizontalRuleNode pattern: `createDOM` returns
56
- * the actual visible element (the click target `PageBreakComponent` wires
57
- * selection/delete against), rather than `decorate()` rendering visuals.
58
- */
59
- export class PageBreakNode extends DecoratorNode {
60
- static getType() {
61
- return 'page-break';
62
- }
63
- static clone(node) {
64
- return new PageBreakNode(node.__key);
65
- }
66
- static importJSON() {
67
- return $createPageBreakNode();
68
- }
69
- exportJSON() {
70
- return { type: 'page-break', version: 1 };
71
- }
72
- static importDOM() {
73
- return {
74
- div: (domNode) => {
75
- if (!domNode.hasAttribute('data-likhari-page-break'))
76
- return null;
77
- return { conversion: () => ({ node: $createPageBreakNode() }), priority: 2 };
78
- },
79
- };
80
- }
81
- exportDOM() {
82
- const element = document.createElement('div');
83
- element.setAttribute('data-likhari-page-break', '');
84
- element.style.pageBreakAfter = 'always';
85
- return { element };
86
- }
87
- createDOM(config) {
88
- const element = document.createElement('div');
89
- addClassNamesToElement(element, config.theme.pageBreak ?? 'likhari-page-break');
90
- return element;
91
- }
92
- getTextContent() {
93
- return '\n';
94
- }
95
- isInline() {
96
- return false;
97
- }
98
- updateDOM() {
99
- return false;
100
- }
101
- decorate() {
102
- return _jsx(PageBreakComponent, { nodeKey: this.__key });
103
- }
104
- }
105
- export function $createPageBreakNode() {
106
- return $applyNodeReplacement(new PageBreakNode());
107
- }
108
- export function $isPageBreakNode(node) {
109
- return node instanceof PageBreakNode;
110
- }
@@ -1,3 +0,0 @@
1
- /** Registers INSERT_PAGE_BREAK_COMMAND — mirrors @lexical/react's own HorizontalRulePlugin. */
2
- export declare function PageBreakPlugin(): null;
3
- //# sourceMappingURL=PageBreakPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PageBreakPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/PageBreakPlugin.tsx"],"names":[],"mappings":"AAMA,+FAA+F;AAC/F,wBAAgB,eAAe,SAiB9B"}
@@ -1,19 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
3
- import { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from 'lexical';
4
- import { $insertNodeToNearestRoot } from '@lexical/utils';
5
- import { $createPageBreakNode, INSERT_PAGE_BREAK_COMMAND } from '../blocks/PageBreakNode.js';
6
- /** Registers INSERT_PAGE_BREAK_COMMAND — mirrors @lexical/react's own HorizontalRulePlugin. */
7
- export function PageBreakPlugin() {
8
- const [editor] = useLexicalComposerContext();
9
- useEffect(() => {
10
- return editor.registerCommand(INSERT_PAGE_BREAK_COMMAND, () => {
11
- const selection = $getSelection();
12
- if (!$isRangeSelection(selection))
13
- return false;
14
- $insertNodeToNearestRoot($createPageBreakNode());
15
- return true;
16
- }, COMMAND_PRIORITY_EDITOR);
17
- }, [editor]);
18
- return null;
19
- }