@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.
- package/dist/EditorRoot.d.ts +27 -0
- package/dist/EditorRoot.d.ts.map +1 -1
- package/dist/EditorRoot.js +92 -4
- package/dist/components/DraftBanner.d.ts +18 -0
- package/dist/components/DraftBanner.d.ts.map +1 -0
- package/dist/components/DraftBanner.js +43 -0
- package/dist/components/DraftsDialog.d.ts +25 -0
- package/dist/components/DraftsDialog.d.ts.map +1 -0
- package/dist/components/DraftsDialog.js +66 -0
- package/dist/components/Toolbar.d.ts +4 -1
- package/dist/components/Toolbar.d.ts.map +1 -1
- package/dist/components/Toolbar.js +8 -6
- package/dist/i18n/strings.d.ts +27 -3
- package/dist/i18n/strings.d.ts.map +1 -1
- package/dist/i18n/strings.js +69 -6
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +0 -2
- package/dist/persistence/draftStorage.d.ts +54 -0
- package/dist/persistence/draftStorage.d.ts.map +1 -0
- package/dist/persistence/draftStorage.js +195 -0
- package/dist/persistence/draftUi.d.ts +9 -0
- package/dist/persistence/draftUi.d.ts.map +1 -0
- package/dist/persistence/draftUi.js +23 -0
- package/dist/theme/editor.css +74 -39
- package/dist/theme/editorTheme.d.ts.map +1 -1
- package/dist/theme/editorTheme.js +0 -1
- package/package.json +1 -1
- package/dist/blocks/PageBreakNode.d.ts +0 -30
- package/dist/blocks/PageBreakNode.d.ts.map +0 -1
- package/dist/blocks/PageBreakNode.js +0 -110
- package/dist/plugins/PageBreakPlugin.d.ts +0 -3
- package/dist/plugins/PageBreakPlugin.d.ts.map +0 -1
- package/dist/plugins/PageBreakPlugin.js +0 -19
|
@@ -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 +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
|
-
}
|