phx-react 1.3.1792 → 1.3.1794
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/cjs/components/TableV6/TableV6.d.ts +2 -1
- package/dist/cjs/components/TableV6/TableV6.js +13 -5
- package/dist/cjs/components/TableV6/TableV6.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/constants.d.ts +1 -1
- package/dist/cjs/components/TextEditorV2/constants.js +187 -1
- package/dist/cjs/components/TextEditorV2/constants.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/editor.js +4 -1
- package/dist/cjs/components/TextEditorV2/editor.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/nodes/ImageNode.d.ts +99 -3
- package/dist/cjs/components/TextEditorV2/nodes/ImageNode.js +143 -9
- package/dist/cjs/components/TextEditorV2/nodes/ImageNode.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageComponent.d.ts +5 -5
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageComponent.js +66 -66
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageComponent.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageNode.d.ts +90 -1
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageNode.js +128 -5
- package/dist/cjs/components/TextEditorV2/nodes/InlineImageNode.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/nodes/MentionNode.js +2 -0
- package/dist/cjs/components/TextEditorV2/nodes/MentionNode.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ImagesPlugin/index.js +1 -0
- package/dist/cjs/components/TextEditorV2/plugins/ImagesPlugin/index.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/InlineImagePlugin/index.d.ts +9 -0
- package/dist/cjs/components/TextEditorV2/plugins/InlineImagePlugin/index.js +71 -1
- package/dist/cjs/components/TextEditorV2/plugins/InlineImagePlugin/index.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.d.ts +4 -0
- package/dist/cjs/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.js +37 -0
- package/dist/cjs/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.js +8 -0
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.d.ts +11 -0
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.js +41 -0
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.js +8 -0
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.d.ts +7 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.js +47 -3
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/index.js +42 -12
- package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/index.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/style.js +139 -0
- package/dist/cjs/components/TextEditorV2/style.js.map +1 -1
- package/dist/cjs/components/TextEditorV2/ui/ImageResizer.js +1 -1
- package/dist/cjs/components/TextEditorV2/ui/ImageResizer.js.map +1 -1
- package/dist/esm/components/TableV6/TableV6.d.ts +2 -1
- package/dist/esm/components/TableV6/TableV6.js +13 -5
- package/dist/esm/components/TableV6/TableV6.js.map +1 -1
- package/dist/esm/components/TextEditorV2/constants.d.ts +1 -1
- package/dist/esm/components/TextEditorV2/constants.js +187 -1
- package/dist/esm/components/TextEditorV2/constants.js.map +1 -1
- package/dist/esm/components/TextEditorV2/editor.js +4 -1
- package/dist/esm/components/TextEditorV2/editor.js.map +1 -1
- package/dist/esm/components/TextEditorV2/nodes/ImageNode.d.ts +99 -3
- package/dist/esm/components/TextEditorV2/nodes/ImageNode.js +143 -9
- package/dist/esm/components/TextEditorV2/nodes/ImageNode.js.map +1 -1
- package/dist/esm/components/TextEditorV2/nodes/InlineImageComponent.d.ts +5 -5
- package/dist/esm/components/TextEditorV2/nodes/InlineImageComponent.js +66 -65
- package/dist/esm/components/TextEditorV2/nodes/InlineImageComponent.js.map +1 -1
- package/dist/esm/components/TextEditorV2/nodes/InlineImageNode.d.ts +90 -1
- package/dist/esm/components/TextEditorV2/nodes/InlineImageNode.js +128 -5
- package/dist/esm/components/TextEditorV2/nodes/InlineImageNode.js.map +1 -1
- package/dist/esm/components/TextEditorV2/nodes/MentionNode.js +2 -0
- package/dist/esm/components/TextEditorV2/nodes/MentionNode.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ImagesPlugin/index.js +1 -0
- package/dist/esm/components/TextEditorV2/plugins/ImagesPlugin/index.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/InlineImagePlugin/index.d.ts +9 -0
- package/dist/esm/components/TextEditorV2/plugins/InlineImagePlugin/index.js +71 -1
- package/dist/esm/components/TextEditorV2/plugins/InlineImagePlugin/index.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.d.ts +4 -0
- package/dist/esm/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.js +37 -0
- package/dist/esm/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.js +9 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.d.ts +11 -0
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.js +39 -0
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.js +9 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.d.ts +7 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.js +48 -4
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.js.map +1 -1
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/index.js +43 -13
- package/dist/esm/components/TextEditorV2/plugins/ToolbarPlugin/index.js.map +1 -1
- package/dist/esm/components/TextEditorV2/style.js +139 -0
- package/dist/esm/components/TextEditorV2/style.js.map +1 -1
- package/dist/esm/components/TextEditorV2/ui/ImageResizer.js +1 -1
- package/dist/esm/components/TextEditorV2/ui/ImageResizer.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,23 +16,44 @@ const UploadFile_1 = require("../../../UploadFile");
|
|
|
16
16
|
const Select_1 = require("../../../Select");
|
|
17
17
|
const Input_1 = require("../../../Input");
|
|
18
18
|
const Checkbox_1 = require("../../../Checkbox");
|
|
19
|
+
/**
|
|
20
|
+
* Gets the DOM selection for a target window when DOM APIs are available.
|
|
21
|
+
* @param targetWindow Window to read selection from.
|
|
22
|
+
* @returns DOM selection, or null when unavailable.
|
|
23
|
+
*/
|
|
19
24
|
const getDOMSelection = (targetWindow) => canUseDOM_1.CAN_USE_DOM ? (targetWindow || window).getSelection() : null;
|
|
20
25
|
exports.INSERT_INLINE_IMAGE_COMMAND = (0, lexical_1.createCommand)('INSERT_INLINE_IMAGE_COMMAND');
|
|
26
|
+
/**
|
|
27
|
+
* Renders the modal used to insert an inline image.
|
|
28
|
+
* @param props Insert inline image modal props.
|
|
29
|
+
* @returns Inline image insert modal element.
|
|
30
|
+
*/
|
|
21
31
|
function InsertInlineImageModal({ activeEditor, setShow, show, }) {
|
|
22
32
|
const [cdnLink, setCdnLink] = (0, react_1.useState)('');
|
|
23
|
-
let position = '
|
|
33
|
+
let position = 'center';
|
|
24
34
|
let altText = 'photo';
|
|
25
35
|
let fileName = '';
|
|
26
36
|
let showCaption = false;
|
|
37
|
+
/**
|
|
38
|
+
* Hides the modal and resets local upload state.
|
|
39
|
+
*/
|
|
27
40
|
const onHide = () => {
|
|
28
41
|
setShow(false);
|
|
29
42
|
setCdnLink('');
|
|
30
43
|
fileName = '';
|
|
31
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Stores uploaded file metadata returned from the CDN uploader.
|
|
47
|
+
* @param fileUpload Uploaded file object.
|
|
48
|
+
* @param linkCdn CDN URLs returned by the uploader.
|
|
49
|
+
*/
|
|
32
50
|
const handleListenUpload = (fileUpload, linkCdn) => {
|
|
33
51
|
fileName = fileUpload.name;
|
|
34
52
|
setCdnLink(linkCdn[0]);
|
|
35
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Dispatches the inline image insert command with the current modal values.
|
|
56
|
+
*/
|
|
36
57
|
const handleSubmit = () => {
|
|
37
58
|
activeEditor.dispatchCommand(exports.INSERT_INLINE_IMAGE_COMMAND, {
|
|
38
59
|
altText,
|
|
@@ -42,9 +63,17 @@ function InsertInlineImageModal({ activeEditor, setShow, show, }) {
|
|
|
42
63
|
});
|
|
43
64
|
onHide();
|
|
44
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Updates caption visibility from the checkbox field.
|
|
68
|
+
* @param e Checkbox change event.
|
|
69
|
+
*/
|
|
45
70
|
const handleShowCaptionChange = (e) => {
|
|
46
71
|
showCaption = e.target.checked;
|
|
47
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Updates the selected inline image position.
|
|
75
|
+
* @param e Select change event.
|
|
76
|
+
*/
|
|
48
77
|
const handlePositionChange = (e) => {
|
|
49
78
|
position = e.target.value;
|
|
50
79
|
};
|
|
@@ -56,10 +85,15 @@ function InsertInlineImageModal({ activeEditor, setShow, show, }) {
|
|
|
56
85
|
border: '1px gray solid',
|
|
57
86
|
} },
|
|
58
87
|
React.createElement("option", { value: 'left' }, "Left"),
|
|
88
|
+
React.createElement("option", { value: 'center' }, "Center"),
|
|
59
89
|
React.createElement("option", { value: 'right' }, "Right"),
|
|
60
90
|
React.createElement("option", { value: 'full' }, "Full Width")),
|
|
61
91
|
React.createElement(Checkbox_1.PHXCheckbox, { key: 'show_cation', onChange: handleShowCaptionChange, title: 'Show Caption' }))));
|
|
62
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Registers inline image insertion and drag/drop behavior with Lexical.
|
|
95
|
+
* @returns Null because the plugin renders no UI.
|
|
96
|
+
*/
|
|
63
97
|
function InlineImagePlugin() {
|
|
64
98
|
const [editor] = (0, LexicalComposerContext_1.useLexicalComposerContext)();
|
|
65
99
|
(0, react_1.useEffect)(() => {
|
|
@@ -78,6 +112,11 @@ function InlineImagePlugin() {
|
|
|
78
112
|
return null;
|
|
79
113
|
}
|
|
80
114
|
const TRANSPARENT_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
115
|
+
/**
|
|
116
|
+
* Starts dragging the currently selected inline image.
|
|
117
|
+
* @param event Drag start event from Lexical.
|
|
118
|
+
* @returns True when drag data was written.
|
|
119
|
+
*/
|
|
81
120
|
function onDragStart(event) {
|
|
82
121
|
const img = document.createElement('img');
|
|
83
122
|
img.src = TRANSPARENT_IMAGE;
|
|
@@ -97,6 +136,7 @@ function onDragStart(event) {
|
|
|
97
136
|
caption: node.__caption,
|
|
98
137
|
height: node.__height,
|
|
99
138
|
key: node.getKey(),
|
|
139
|
+
position: node.__position,
|
|
100
140
|
showCaption: node.__showCaption,
|
|
101
141
|
src: node.__src,
|
|
102
142
|
width: node.__width,
|
|
@@ -105,6 +145,11 @@ function onDragStart(event) {
|
|
|
105
145
|
}));
|
|
106
146
|
return true;
|
|
107
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Handles drag over behavior for selected inline images.
|
|
150
|
+
* @param event Drag over event from Lexical.
|
|
151
|
+
* @returns True when an inline image is being dragged.
|
|
152
|
+
*/
|
|
108
153
|
function onDragover(event) {
|
|
109
154
|
const node = getImageNodeInSelection();
|
|
110
155
|
if (!node) {
|
|
@@ -115,6 +160,12 @@ function onDragover(event) {
|
|
|
115
160
|
}
|
|
116
161
|
return true;
|
|
117
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Drops the dragged inline image into a valid editor location.
|
|
165
|
+
* @param event Drop event from Lexical.
|
|
166
|
+
* @param editor Active Lexical editor.
|
|
167
|
+
* @returns True when a selected inline image handled the drop.
|
|
168
|
+
*/
|
|
118
169
|
function onDrop(event, editor) {
|
|
119
170
|
const node = getImageNodeInSelection();
|
|
120
171
|
if (!node) {
|
|
@@ -137,6 +188,10 @@ function onDrop(event, editor) {
|
|
|
137
188
|
}
|
|
138
189
|
return true;
|
|
139
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Gets the selected inline image node.
|
|
193
|
+
* @returns Selected inline image node, or null when selection is not an inline image.
|
|
194
|
+
*/
|
|
140
195
|
function getImageNodeInSelection() {
|
|
141
196
|
const selection = (0, lexical_1.$getSelection)();
|
|
142
197
|
if (!(0, lexical_1.$isNodeSelection)(selection)) {
|
|
@@ -146,6 +201,11 @@ function getImageNodeInSelection() {
|
|
|
146
201
|
const node = nodes[0];
|
|
147
202
|
return (0, InlineImageNode_1.$isInlineImageNode)(node) ? node : null;
|
|
148
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Reads inline image payload from drag data.
|
|
206
|
+
* @param event Drag event carrying data transfer payload.
|
|
207
|
+
* @returns Inline image payload, or null when drag data is not an image payload.
|
|
208
|
+
*/
|
|
149
209
|
function getDragImageData(event) {
|
|
150
210
|
var _a;
|
|
151
211
|
const dragData = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('application/x-lexical-drag');
|
|
@@ -158,6 +218,11 @@ function getDragImageData(event) {
|
|
|
158
218
|
}
|
|
159
219
|
return data;
|
|
160
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Checks whether an inline image can be dropped on the current event target.
|
|
223
|
+
* @param event Drag event to inspect.
|
|
224
|
+
* @returns True when the target is a valid editor drop location.
|
|
225
|
+
*/
|
|
161
226
|
function canDropImage(event) {
|
|
162
227
|
const target = event.target;
|
|
163
228
|
return !!(target &&
|
|
@@ -166,6 +231,11 @@ function canDropImage(event) {
|
|
|
166
231
|
target.parentElement &&
|
|
167
232
|
target.parentElement.closest('div.ContentEditable__root'));
|
|
168
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Gets the DOM range at the drag event location.
|
|
236
|
+
* @param event Drag event to inspect.
|
|
237
|
+
* @returns DOM range for the drop location.
|
|
238
|
+
*/
|
|
169
239
|
function getDragSelection(event) {
|
|
170
240
|
let range;
|
|
171
241
|
const target = event.target;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/TextEditorV2/plugins/InlineImagePlugin/index.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/TextEditorV2/plugins/InlineImagePlugin/index.tsx"],"names":[],"mappings":";;;AAsDA,wDAkGC;AAMD,oCA6BC;;AA3LD,kFAAiF;AACjF,0CAAkE;AAClE,qCAiBgB;AAChB,iCAA2C;AAC3C,qDAA8B;AAE9B,iEAKoC;AACpC,sDAAoD;AACpD,0CAAyC;AACzC,oDAAmD;AACnD,4CAA2C;AAC3C,0CAAyC;AACzC,gDAA+C;AAI/C;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,YAA2B,EAAoB,EAAE,CACxE,uBAAW,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAEjD,QAAA,2BAA2B,GACtC,IAAA,uBAAa,EAAC,6BAA6B,CAAC,CAAA;AAE9C;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,OAAO,EACP,IAAI,GAKL;IACC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAA;IAClD,IAAI,QAAQ,GAAa,QAAQ,CAAA;IACjC,IAAI,OAAO,GAAG,OAAO,CAAA;IACrB,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB;;OAEG;IACH,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,UAAU,CAAC,EAAE,CAAC,CAAA;QACd,QAAQ,GAAG,EAAE,CAAA;IACf,CAAC,CAAA;IAED;;;;OAIG;IACH,MAAM,kBAAkB,GAAG,CAAC,UAAe,EAAE,OAAsB,EAAE,EAAE;QACrE,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAA;QAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,YAAY,CAAC,eAAe,CAAC,mCAA2B,EAAE;YACxD,OAAO;YACP,QAAQ;YACR,WAAW;YACX,GAAG,EAAE,OAAO;SACb,CAAC,CAAA;QACF,MAAM,EAAE,CAAA;IACV,CAAC,CAAA;IAED;;;OAGG;IACH,MAAM,uBAAuB,GAAG,CAAC,CAAsC,EAAE,EAAE;QACzE,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IAChC,CAAC,CAAA;IAED;;;OAGG;IACH,MAAM,oBAAoB,GAAG,CAAC,CAAuC,EAAE,EAAE;QACvE,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAiB,CAAA;IACvC,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,gBAAQ,IAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,cAAc;QACtF,6BAAK,SAAS,EAAC,WAAW;YACxB,oBAAC,0BAAa,IACZ,YAAY,EAAC,iBAAiB,EAC9B,QAAQ,EAAC,EAAE,EACX,WAAW,EAAE,CAAC,OAAO,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAC,OAAO,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,KAAK,EACb,KAAK,EAAC,cAAc,EACpB,QAAQ,EAAC,qBAAqB,EAC9B,MAAM,QACN,SAAS,EAAC,UAAU,EACpB,iBAAiB,EAAC,EAAE,GACpB;YACF,oBAAC,gBAAQ,IAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI;YACjG,oBAAC,kBAAS,IACR,YAAY,EAAE,QAAQ,EACtB,KAAK,EAAC,UAAU,EAChB,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE;oBACL,MAAM,EAAE,gBAAgB;iBACzB;gBAED,gCAAQ,KAAK,EAAC,MAAM,WAAc;gBAClC,gCAAQ,KAAK,EAAC,QAAQ,aAAgB;gBACtC,gCAAQ,KAAK,EAAC,OAAO,YAAe;gBACpC,gCAAQ,KAAK,EAAC,MAAM,iBAAoB,CAC9B;YACZ,oBAAC,sBAAW,IAAC,GAAG,EAAC,aAAa,EAAC,QAAQ,EAAE,uBAAuB,EAAE,KAAK,EAAC,cAAc,GAAG,CACrF,CACG,CACZ,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAwB,iBAAiB;IACvC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAA,kDAAyB,GAAE,CAAA;IAE5C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAe,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACrE,CAAC;QAED,OAAO,IAAA,qBAAa,EAClB,MAAM,CAAC,eAAe,CACpB,mCAA2B,EAC3B,CAAC,OAAO,EAAE,EAAE;YACV,MAAM,SAAS,GAAG,IAAA,wCAAsB,EAAC,OAAO,CAAC,CAAA;YACjD,IAAA,sBAAY,EAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YACzB,IAAI,IAAA,6BAAmB,EAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;gBACtD,IAAA,0BAAkB,EAAC,SAAS,EAAE,8BAAoB,CAAC,CAAC,SAAS,EAAE,CAAA;YACjE,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC,EACD,iCAAuB,CACxB,EACD,MAAM,CAAC,eAAe,CAAY,2BAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,+BAAqB,CAAC,EAC1G,MAAM,CAAC,eAAe,CAAY,0BAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,8BAAoB,CAAC,EACvG,MAAM,CAAC,eAAe,CAAY,sBAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,+BAAqB,CAAC,CACzG,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,iBAAiB,GAAG,gFAAgF,CAAA;AAE1G;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAgB;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,GAAG,CAAC,GAAG,GAAG,iBAAiB,CAAA;IAC3B,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IACvC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,YAAY,CAAC,OAAO,CAClB,4BAA4B,EAC5B,IAAI,CAAC,SAAS,CAAC;QACb,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,IAAI,CAAC,UAAU;YACzB,WAAW,EAAE,IAAI,CAAC,aAAa;YAC/B,GAAG,EAAE,IAAI,CAAC,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,OAAO;SACpB;QACD,IAAI,EAAE,OAAO;KACd,CAAC,CACH,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAgB;IAClC,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,cAAc,EAAE,CAAA;IACxB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAC,KAAgB,EAAE,MAAqB;IACrD,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,MAAM,cAAc,GAAG,IAAA,+BAAqB,GAAE,CAAA;QAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;QACD,IAAA,uBAAa,EAAC,cAAc,CAAC,CAAA;QAC7B,MAAM,CAAC,eAAe,CAAC,mCAA2B,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB;IAC9B,MAAM,SAAS,GAAG,IAAA,uBAAa,GAAE,CAAA;IACjC,IAAI,CAAC,IAAA,0BAAgB,EAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACrB,OAAO,IAAA,oCAAkB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAgB;;IACxC,MAAM,QAAQ,GAAG,MAAA,KAAK,CAAC,YAAY,0CAAE,OAAO,CAAC,4BAA4B,CAAC,CAAA;IAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AASD;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAgB;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,CAAC,CACP,MAAM;QACN,MAAM,YAAY,WAAW;QAC7B,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC1C,MAAM,CAAC,aAAa;QACpB,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAC1D,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAgB;IACxC,IAAI,KAAK,CAAA;IACT,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmC,CAAA;IACxD,MAAM,YAAY,GAChB,MAAM,IAAI,IAAI;QACZ,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC;YACvB,CAAC,CAAE,MAAmB,CAAC,WAAW;YAClC,CAAC,CAAE,MAAkB,CAAC,aAAa,CAAC,WAAW,CAAA;IACnD,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAClD,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACjC,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACpE,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QACtD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAA;QAChE,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -3,12 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.default = PreserveFontSizeOnEnterPlugin;
|
|
4
4
|
const LexicalComposerContext_1 = require("@lexical/react/LexicalComposerContext");
|
|
5
5
|
const lexical_1 = require("lexical");
|
|
6
|
+
const list_1 = require("@lexical/list");
|
|
6
7
|
const selection_1 = require("@lexical/selection");
|
|
7
8
|
const react_1 = require("react");
|
|
9
|
+
/**
|
|
10
|
+
* Extracts font size from a CSS style string.
|
|
11
|
+
* @param style CSS style text to parse.
|
|
12
|
+
* @returns Font size value, or an empty string when absent.
|
|
13
|
+
*/
|
|
8
14
|
function getFontSizeFromStyle(style) {
|
|
9
15
|
var _a;
|
|
10
16
|
return ((_a = (0, selection_1.getStyleObjectFromCSS)(style)) === null || _a === void 0 ? void 0 : _a['font-size']) || '';
|
|
11
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Gets the font size that should be preserved for a collapsed selection.
|
|
20
|
+
* @returns Font size value, or an empty string when no font size is available.
|
|
21
|
+
*/
|
|
12
22
|
function getCollapsedSelectionFontSize() {
|
|
13
23
|
const selection = (0, lexical_1.$getSelection)();
|
|
14
24
|
if (!(0, lexical_1.$isRangeSelection)(selection) || !selection.isCollapsed()) {
|
|
@@ -35,6 +45,30 @@ function getCollapsedSelectionFontSize() {
|
|
|
35
45
|
}
|
|
36
46
|
return '';
|
|
37
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Checks whether the current selection is inside an empty list item.
|
|
50
|
+
* @returns True when the collapsed selection is in an empty list item.
|
|
51
|
+
*/
|
|
52
|
+
function isSelectionInEmptyListItem() {
|
|
53
|
+
const selection = (0, lexical_1.$getSelection)();
|
|
54
|
+
if (!(0, lexical_1.$isRangeSelection)(selection) || !selection.isCollapsed()) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const anchorNode = selection.anchor.getNode();
|
|
58
|
+
if ((0, list_1.$isListItemNode)(anchorNode) && anchorNode.getChildrenSize() === 0) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
if (!(0, lexical_1.$isTextNode)(anchorNode)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const parent = anchorNode.getParent();
|
|
65
|
+
return ((0, list_1.$isListItemNode)(parent) &&
|
|
66
|
+
parent.getChildren().every((node) => (0, lexical_1.$isTextNode)(node) && node.getTextContent().trim() === ''));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Preserves font size when inserting a paragraph with Enter.
|
|
70
|
+
* @returns Null because the plugin renders no UI.
|
|
71
|
+
*/
|
|
38
72
|
function PreserveFontSizeOnEnterPlugin() {
|
|
39
73
|
const [editor] = (0, LexicalComposerContext_1.useLexicalComposerContext)();
|
|
40
74
|
(0, react_1.useEffect)(() => {
|
|
@@ -44,6 +78,9 @@ function PreserveFontSizeOnEnterPlugin() {
|
|
|
44
78
|
if (!(0, lexical_1.$isRangeSelection)(selection) || !selection.isCollapsed() || !fontSize) {
|
|
45
79
|
return false;
|
|
46
80
|
}
|
|
81
|
+
if (isSelectionInEmptyListItem()) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
47
84
|
const insertedBlock = selection.insertParagraph();
|
|
48
85
|
if ((0, lexical_1.$isElementNode)(insertedBlock)) {
|
|
49
86
|
const insertedBlockKey = insertedBlock.getKey();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/TextEditorV2/plugins/PreserveFontSizeOnEnterPlugin/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,15 @@ function Bullet({ editor, isActive }) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
+
const headingTag = (0, heading_1.getSelectedListHeadingTag)(editor);
|
|
24
25
|
editor.dispatchCommand(list_1.REMOVE_LIST_COMMAND, undefined);
|
|
26
|
+
if (headingTag !== null) {
|
|
27
|
+
queueMicrotask(() => {
|
|
28
|
+
editor.update(() => {
|
|
29
|
+
(0, heading_1.applyHeadingTypeToSelection)(headingTag);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
} },
|
|
27
35
|
react_1.default.createElement("span", null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullet.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"bullet.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/bullet.tsx"],"names":[],"mappings":";;AAWA,yBAqEC;;AAhFD,wCAAkF;AAElF,0DAAyB;AACzB,6CAA8C;AAC9C,uCAKkB;AAElB,SAAwB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgD;IAC/F,OAAO,CACL,uCAAK,SAAS,EAAC,2BAA2B;QACxC,0CACE,IAAI,EAAC,QAAQ,uBACK,MAAM,EACxB,SAAS,EAAE,IAAA,kBAAU,EACnB,4CAA4C,EAC5C,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAC/C,EACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,iBAAiB,GAAG,IAAA,wCAA8B,EAAC,MAAM,CAAC,CAAA;oBAEhE,MAAM,CAAC,eAAe,CAAC,oCAA6B,EAAE,SAAS,CAAC,CAAA;oBAEhE,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAC/B,cAAc,CAAC,GAAG,EAAE;4BAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gCACjB,IAAA,+BAAqB,EAAC,iBAAiB,CAAC,CAAA;4BAC1C,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAA,mCAAyB,EAAC,MAAM,CAAC,CAAA;oBAEpD,MAAM,CAAC,eAAe,CAAC,0BAAmB,EAAE,SAAS,CAAC,CAAA;oBAEtD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBACxB,cAAc,CAAC,GAAG,EAAE;4BAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gCACjB,IAAA,qCAA2B,EAAC,UAAU,CAAC,CAAA;4BACzC,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED;gBACE,uCAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;oBAC5F,wCACE,CAAC,EAAC,uGAAuG,EACzG,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,6GAA6G,EAC/G,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,gHAAgH,EAClH,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,0JAA0J,EAC5J,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,4JAA4J,EAC9J,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,mKAAmK,EACrK,IAAI,EAAC,SAAS,GACR,CACJ,CACD,CACA,CACL,CACP,CAAA;AACH,CAAC"}
|
|
@@ -2,6 +2,17 @@ import React from 'react';
|
|
|
2
2
|
import { HeadingTagType } from '@lexical/rich-text';
|
|
3
3
|
import { LexicalEditor } from 'lexical';
|
|
4
4
|
export declare const DEFAULT_HEADING_FONT_SIZES: Record<HeadingTagType, string>;
|
|
5
|
+
/**
|
|
6
|
+
* Gets the heading tag represented by the current selected list item font size.
|
|
7
|
+
* @param editor Active Lexical editor.
|
|
8
|
+
* @returns Matching heading tag, or null when the selected list item is normal text.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getSelectedListHeadingTag(editor: LexicalEditor): HeadingTagType | null;
|
|
11
|
+
/**
|
|
12
|
+
* Converts the current selected blocks to a heading tag while preserving heading font size.
|
|
13
|
+
* @param headingTag Heading tag to apply.
|
|
14
|
+
*/
|
|
15
|
+
export declare function applyHeadingTypeToSelection(headingTag: HeadingTagType): void;
|
|
5
16
|
export declare function preserveHeadingFontSizeForList(editor: LexicalEditor): null;
|
|
6
17
|
export declare function applyListItemFontSize(defaultFontSize: string): boolean;
|
|
7
18
|
export default function HeaderDropdown({ editor, value }: {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_HEADING_FONT_SIZES = void 0;
|
|
4
|
+
exports.getSelectedListHeadingTag = getSelectedListHeadingTag;
|
|
5
|
+
exports.applyHeadingTypeToSelection = applyHeadingTypeToSelection;
|
|
4
6
|
exports.preserveHeadingFontSizeForList = preserveHeadingFontSizeForList;
|
|
5
7
|
exports.applyListItemFontSize = applyListItemFontSize;
|
|
6
8
|
exports.default = HeaderDropdown;
|
|
@@ -34,6 +36,45 @@ function getListItemNode(node) {
|
|
|
34
36
|
function getHeadingNode(node) {
|
|
35
37
|
return (0, rich_text_1.$isHeadingNode)(node) ? node : (0, utils_1.$findMatchingParent)(node, (parent) => (0, rich_text_1.$isHeadingNode)(parent));
|
|
36
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Gets the heading tag represented by the current selected list item font size.
|
|
41
|
+
* @param editor Active Lexical editor.
|
|
42
|
+
* @returns Matching heading tag, or null when the selected list item is normal text.
|
|
43
|
+
*/
|
|
44
|
+
function getSelectedListHeadingTag(editor) {
|
|
45
|
+
let selectedHeadingTag = null;
|
|
46
|
+
editor.getEditorState().read(() => {
|
|
47
|
+
const selection = (0, lexical_1.$getSelection)();
|
|
48
|
+
if (!(0, lexical_1.$isRangeSelection)(selection)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const selectedNodes = [selection.anchor.getNode(), selection.focus.getNode(), ...selection.getNodes()];
|
|
52
|
+
for (const node of selectedNodes) {
|
|
53
|
+
const listItemNode = getListItemNode(node);
|
|
54
|
+
if (listItemNode === null) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const listItemFontSize = (0, selection_1.getStyleObjectFromCSS)(listItemNode.getTextStyle())['font-size'];
|
|
58
|
+
const headingEntry = Object.entries(exports.DEFAULT_HEADING_FONT_SIZES).find(([, fontSize]) => fontSize === listItemFontSize);
|
|
59
|
+
if (headingEntry !== undefined) {
|
|
60
|
+
selectedHeadingTag = headingEntry[0];
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return selectedHeadingTag;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Converts the current selected blocks to a heading tag while preserving heading font size.
|
|
69
|
+
* @param headingTag Heading tag to apply.
|
|
70
|
+
*/
|
|
71
|
+
function applyHeadingTypeToSelection(headingTag) {
|
|
72
|
+
const selection = (0, lexical_1.$getSelection)();
|
|
73
|
+
if (!(0, lexical_1.$isRangeSelection)(selection)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
(0, selection_1.$setBlocksType)(selection, () => (0, rich_text_1.$createHeadingNode)(headingTag), (prevNode) => applyHeadingFontSize(prevNode, exports.DEFAULT_HEADING_FONT_SIZES[headingTag]));
|
|
77
|
+
}
|
|
37
78
|
function preserveHeadingFontSizeForList(editor) {
|
|
38
79
|
let preservedFontSize = null;
|
|
39
80
|
editor.update(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"heading.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/heading.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,15 @@ function NumberBullet({ editor, isActive }) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
+
const headingTag = (0, heading_1.getSelectedListHeadingTag)(editor);
|
|
24
25
|
editor.dispatchCommand(list_1.REMOVE_LIST_COMMAND, undefined);
|
|
26
|
+
if (headingTag !== null) {
|
|
27
|
+
queueMicrotask(() => {
|
|
28
|
+
editor.update(() => {
|
|
29
|
+
(0, heading_1.applyHeadingTypeToSelection)(headingTag);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
} },
|
|
27
35
|
react_1.default.createElement("span", null,
|
package/dist/cjs/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-bullet.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"number-bullet.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/number-bullet.tsx"],"names":[],"mappings":";;AAWA,+BAsEC;;AAjFD,wCAAgF;AAEhF,0DAAyB;AACzB,6CAA8C;AAC9C,uCAKkB;AAElB,SAAwB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgD;IACrG,OAAO,CACL,uCAAK,SAAS,EAAC,2BAA2B;QACxC,0CACE,IAAI,EAAC,QAAQ,uBACK,MAAM,EACxB,SAAS,EAAE,IAAA,kBAAU,EACnB,4CAA4C,EAC5C,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAC/C,EACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,iBAAiB,GAAG,IAAA,wCAA8B,EAAC,MAAM,CAAC,CAAA;oBAEhE,MAAM,CAAC,eAAe,CAAC,kCAA2B,EAAE,SAAS,CAAC,CAAA;oBAE9D,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAC/B,cAAc,CAAC,GAAG,EAAE;4BAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gCACjB,IAAA,+BAAqB,EAAC,iBAAiB,CAAC,CAAA;4BAC1C,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAA,mCAAyB,EAAC,MAAM,CAAC,CAAA;oBAEpD,MAAM,CAAC,eAAe,CAAC,0BAAmB,EAAE,SAAS,CAAC,CAAA;oBAEtD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBACxB,cAAc,CAAC,GAAG,EAAE;4BAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gCACjB,IAAA,qCAA2B,EAAC,UAAU,CAAC,CAAA;4BACzC,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED;gBACE,uCAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;oBAC5F,wCACE,CAAC,EAAC,2aAA2a,EAC7a,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,+KAA+K,EACjL,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,oLAAoL,EACtL,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,qLAAqL,EACvL,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,2iBAA2iB,EAC7iB,IAAI,EAAC,SAAS,GACR;oBACR,wCACE,CAAC,EAAC,guBAAguB,EACluB,IAAI,EAAC,SAAS,GACR,CACJ,CACD,CACA;QACT,uCAAK,SAAS,EAAC,yBAAyB,GAAO,CAC3C,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { ElementFormatType, LexicalEditor } from 'lexical';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Renders toolbar controls for text and image alignment.
|
|
5
|
+
* @param props Text alignment toolbar props.
|
|
6
|
+
* @returns Text alignment toolbar element.
|
|
7
|
+
*/
|
|
8
|
+
export default function TextAlign({ editor, isImageSelected, value, }: {
|
|
4
9
|
editor: LexicalEditor;
|
|
10
|
+
isImageSelected: boolean;
|
|
5
11
|
value: ElementFormatType;
|
|
6
12
|
}): React.JSX.Element;
|
|
@@ -5,7 +5,44 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const lexical_1 = require("lexical");
|
|
6
6
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
7
7
|
const types_1 = require("../../../../types");
|
|
8
|
-
|
|
8
|
+
const ImageNode_1 = require("../../../nodes/ImageNode");
|
|
9
|
+
const InlineImageNode_1 = require("../../../nodes/InlineImageNode");
|
|
10
|
+
/**
|
|
11
|
+
* Applies alignment directly to selected image nodes.
|
|
12
|
+
* @param editor Active Lexical editor.
|
|
13
|
+
* @param value Requested alignment value.
|
|
14
|
+
* @returns True when at least one selected image was formatted.
|
|
15
|
+
*/
|
|
16
|
+
function formatSelectedImage(editor, value) {
|
|
17
|
+
if (value !== 'left' && value !== 'center' && value !== 'right') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
let formatted = false;
|
|
21
|
+
editor.update(() => {
|
|
22
|
+
const selection = (0, lexical_1.$getSelection)();
|
|
23
|
+
if (!(0, lexical_1.$isNodeSelection)(selection)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const selectedNode of selection.getNodes()) {
|
|
27
|
+
const node = (0, lexical_1.$getNodeByKey)(selectedNode.getKey());
|
|
28
|
+
if ((0, ImageNode_1.$isImageNode)(node)) {
|
|
29
|
+
node.setPosition(value);
|
|
30
|
+
formatted = true;
|
|
31
|
+
}
|
|
32
|
+
if ((0, InlineImageNode_1.$isInlineImageNode)(node)) {
|
|
33
|
+
node.update({ position: value });
|
|
34
|
+
formatted = true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return formatted;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Renders toolbar controls for text and image alignment.
|
|
42
|
+
* @param props Text alignment toolbar props.
|
|
43
|
+
* @returns Text alignment toolbar element.
|
|
44
|
+
*/
|
|
45
|
+
function TextAlign({ editor, isImageSelected, value, }) {
|
|
9
46
|
const data = [
|
|
10
47
|
{
|
|
11
48
|
icon: (react_1.default.createElement("svg", { width: '20', height: '20', viewBox: '0 0 20 20', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' },
|
|
@@ -42,8 +79,15 @@ function TextAlign({ editor, value }) {
|
|
|
42
79
|
];
|
|
43
80
|
return (react_1.default.createElement("div", { className: 'flex items-center gap-x-2' },
|
|
44
81
|
data.map((button, index) => {
|
|
45
|
-
|
|
46
|
-
|
|
82
|
+
const isDisabled = isImageSelected && button.value === 'justify';
|
|
83
|
+
return (react_1.default.createElement("button", { key: index, type: 'button', "data-color-button": 'true', disabled: isDisabled, className: (0, types_1.classNames)('p-1 rounded-md duration-200 cursor-pointer', isDisabled ? 'cursor-not-allowed opacity-40' : '', value === button.value ? 'bg-gray-200' : 'hover:bg-gray-200'), onClick: () => {
|
|
84
|
+
if (isDisabled) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const format = button.value;
|
|
88
|
+
if (!formatSelectedImage(editor, format)) {
|
|
89
|
+
editor.dispatchCommand(lexical_1.FORMAT_ELEMENT_COMMAND, format);
|
|
90
|
+
}
|
|
47
91
|
} }, button.icon));
|
|
48
92
|
}),
|
|
49
93
|
react_1.default.createElement("div", { className: 'w-[1px] h-5 bg-gray-300' })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-align.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"text-align.js","sourceRoot":"","sources":["../../../../../../../src/components/TextEditorV2/plugins/ToolbarPlugin/components/text-align.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ const number_bullet_1 = tslib_1.__importDefault(require("./components/number-bul
|
|
|
25
25
|
const upload_pdf_1 = tslib_1.__importDefault(require("./components/upload-pdf"));
|
|
26
26
|
const upload_image_1 = tslib_1.__importDefault(require("./components/upload-image"));
|
|
27
27
|
const link_2 = tslib_1.__importDefault(require("./components/link"));
|
|
28
|
+
const ImageNode_1 = require("../../nodes/ImageNode");
|
|
29
|
+
const InlineImageNode_1 = require("../../nodes/InlineImageNode");
|
|
28
30
|
const blockTypeToBlockName = {
|
|
29
31
|
bullet: 'Bulleted List',
|
|
30
32
|
check: 'Check List',
|
|
@@ -47,6 +49,11 @@ function getBlockTypeFromFontSize(fontSize) {
|
|
|
47
49
|
function getFontSizeFromStyle(style) {
|
|
48
50
|
return (0, selection_1.getStyleObjectFromCSS)(style)['font-size'];
|
|
49
51
|
}
|
|
52
|
+
function DisabledToolbarGroup({ children, disabled, }) {
|
|
53
|
+
return (React.createElement("div", { className: disabled ? 'relative cursor-not-allowed opacity-40' : undefined },
|
|
54
|
+
children,
|
|
55
|
+
disabled && React.createElement("div", { className: 'absolute inset-0 z-10 cursor-not-allowed' })));
|
|
56
|
+
}
|
|
50
57
|
function ToolbarPlugin({ apiCdnUpload, disabled, }) {
|
|
51
58
|
const [editor] = (0, LexicalComposerContext_1.useLexicalComposerContext)();
|
|
52
59
|
const [activeEditor, setActiveEditor] = (0, react_1.useState)(editor);
|
|
@@ -55,13 +62,26 @@ function ToolbarPlugin({ apiCdnUpload, disabled, }) {
|
|
|
55
62
|
const [fontSize, setFontSize] = (0, react_1.useState)('14px');
|
|
56
63
|
const [fontColor, setFontColor] = (0, react_1.useState)('#000');
|
|
57
64
|
const [elementFormat, setElementFormat] = (0, react_1.useState)('left');
|
|
65
|
+
const [isImageSelected, setIsImageSelected] = (0, react_1.useState)(false);
|
|
58
66
|
const [isLink, setIsLink] = (0, react_1.useState)(false);
|
|
59
67
|
const [isBold, setIsBold] = (0, react_1.useState)(false);
|
|
60
68
|
const [isItalic, setIsItalic] = (0, react_1.useState)(false);
|
|
61
69
|
const [isUnderline, setIsUnderline] = (0, react_1.useState)(false);
|
|
62
70
|
const $updateToolbar = (0, react_1.useCallback)(() => {
|
|
63
71
|
const selection = (0, lexical_1.$getSelection)();
|
|
72
|
+
if ((0, lexical_1.$isNodeSelection)(selection)) {
|
|
73
|
+
const node = selection.getNodes()[0];
|
|
74
|
+
if ((0, ImageNode_1.$isImageNode)(node) || (0, InlineImageNode_1.$isInlineImageNode)(node)) {
|
|
75
|
+
setIsImageSelected(true);
|
|
76
|
+
setElementFormat((node.getPosition() || 'center'));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
setIsImageSelected(false);
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
64
83
|
if ((0, lexical_1.$isRangeSelection)(selection)) {
|
|
84
|
+
setIsImageSelected(false);
|
|
65
85
|
const anchorNode = selection.anchor.getNode();
|
|
66
86
|
let element = anchorNode.getKey() === 'root'
|
|
67
87
|
? anchorNode
|
|
@@ -164,17 +184,27 @@ function ToolbarPlugin({ apiCdnUpload, disabled, }) {
|
|
|
164
184
|
const parsedFontSize = parseInt(fontSize, 10);
|
|
165
185
|
return (React.createElement("div", { className: 'flex relative flex-wrap gap-1 p-2 bg-gray-100 border-b border-gray-300' },
|
|
166
186
|
disabled && React.createElement("div", { className: 'cursor-not-allowed z-20 absolute inset-0 bg-gray-200 opacity-20' }),
|
|
167
|
-
blockType in blockTypeToBlockName && activeEditor === editor && (React.createElement(heading_1.default, { value: blockType, editor: activeEditor })),
|
|
168
|
-
React.createElement(
|
|
169
|
-
|
|
170
|
-
React.createElement(
|
|
171
|
-
|
|
172
|
-
React.createElement(
|
|
173
|
-
|
|
174
|
-
React.createElement(
|
|
175
|
-
|
|
176
|
-
React.createElement(
|
|
177
|
-
|
|
178
|
-
React.createElement(
|
|
187
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected }, blockType in blockTypeToBlockName && activeEditor === editor && (React.createElement(heading_1.default, { value: blockType, editor: activeEditor }))),
|
|
188
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
189
|
+
React.createElement(font_size_1.default, { editor: activeEditor, fontSize: Number.isNaN(parsedFontSize) ? null : parsedFontSize })),
|
|
190
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
191
|
+
React.createElement(bold_text_1.default, { isActive: isBold, editor: activeEditor })),
|
|
192
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
193
|
+
React.createElement(italic_text_1.default, { isActive: isItalic, editor: activeEditor })),
|
|
194
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
195
|
+
React.createElement(underline_text_1.default, { isActive: isUnderline, editor: activeEditor })),
|
|
196
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
197
|
+
React.createElement(text_color_1.default, { editor: activeEditor, color: fontColor })),
|
|
198
|
+
React.createElement(text_align_1.default, { value: elementFormat, editor: activeEditor, isImageSelected: isImageSelected }),
|
|
199
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
200
|
+
React.createElement(bullet_1.default, { isActive: listBlockType === 'bullet', editor: activeEditor })),
|
|
201
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
202
|
+
React.createElement(number_bullet_1.default, { isActive: listBlockType === 'number', editor: activeEditor })),
|
|
203
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
204
|
+
React.createElement(upload_pdf_1.default, { editor: activeEditor, apiCdnUpload: apiCdnUpload })),
|
|
205
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
206
|
+
React.createElement(upload_image_1.default, { editor: activeEditor, apiCdnUpload: apiCdnUpload })),
|
|
207
|
+
React.createElement(DisabledToolbarGroup, { disabled: isImageSelected },
|
|
208
|
+
React.createElement(link_2.default, { editor: activeEditor }))));
|
|
179
209
|
}
|
|
180
210
|
//# sourceMappingURL=index.js.map
|