@contentful/field-editor-rich-text 3.1.12 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/field-editor-rich-text.cjs.development.js +111 -39
- package/dist/field-editor-rich-text.cjs.development.js.map +1 -1
- package/dist/field-editor-rich-text.cjs.production.min.js +1 -1
- package/dist/field-editor-rich-text.cjs.production.min.js.map +1 -1
- package/dist/field-editor-rich-text.esm.js +113 -41
- package/dist/field-editor-rich-text.esm.js.map +1 -1
- package/dist/plugins/Marks/Subscript.d.ts +11 -0
- package/dist/plugins/Marks/Superscript.d.ts +11 -0
- package/dist/plugins/Marks/helpers.d.ts +2 -0
- package/dist/types.d.ts +2 -0
- package/package.json +3 -3
|
@@ -20,10 +20,10 @@ import find from 'lodash-es/find';
|
|
|
20
20
|
import flow from 'lodash-es/flow';
|
|
21
21
|
import get from 'lodash-es/get';
|
|
22
22
|
import tokens from '@contentful/f36-tokens';
|
|
23
|
-
import { AssetIcon, EmbeddedEntryBlockIcon, ClockIcon, EmbeddedEntryInlineIcon, ChevronDownIcon, HorizontalRuleIcon, LinkIcon, ListBulletedIcon, ListNumberedIcon, FormatBoldIcon, CodeIcon, FormatItalicIcon, FormatUnderlinedIcon, QuoteIcon, TableIcon, PlusIcon } from '@contentful/f36-icons';
|
|
23
|
+
import { AssetIcon, EmbeddedEntryBlockIcon, ClockIcon, EmbeddedEntryInlineIcon, ChevronDownIcon, HorizontalRuleIcon, LinkIcon, ListBulletedIcon, ListNumberedIcon, FormatBoldIcon, CodeIcon, FormatItalicIcon, FormatUnderlinedIcon, SuperscriptIcon, SubscriptIcon, QuoteIcon, TableIcon, PlusIcon } from '@contentful/f36-icons';
|
|
24
24
|
import { getListTypes, ELEMENT_LIC, getListItemEntry, isListNested, moveListItemUp, ELEMENT_LI, unwrapList as unwrapList$1, removeFirstListItem, removeListItem, deleteForwardList, deleteFragmentList, normalizeList, createListPlugin as createListPlugin$1, ELEMENT_UL, ELEMENT_OL } from '@udecode/plate-list';
|
|
25
25
|
import castArray from 'lodash-es/castArray';
|
|
26
|
-
import { createBoldPlugin as createBoldPlugin$1, createCodePlugin as createCodePlugin$1, createItalicPlugin as createItalicPlugin$1, createUnderlinePlugin as createUnderlinePlugin$1 } from '@udecode/plate-basic-marks';
|
|
26
|
+
import { createBoldPlugin as createBoldPlugin$1, createCodePlugin as createCodePlugin$1, createItalicPlugin as createItalicPlugin$1, createUnderlinePlugin as createUnderlinePlugin$1, createSuperscriptPlugin as createSuperscriptPlugin$1, createSubscriptPlugin as createSubscriptPlugin$1 } from '@udecode/plate-basic-marks';
|
|
27
27
|
import isPlainObject from 'is-plain-obj';
|
|
28
28
|
import { createParagraphPlugin as createParagraphPlugin$1 } from '@udecode/plate-paragraph';
|
|
29
29
|
import { createSelectOnBackspacePlugin as createSelectOnBackspacePlugin$1 } from '@udecode/plate-select';
|
|
@@ -5089,6 +5089,30 @@ function ToolbarListButton(props) {
|
|
|
5089
5089
|
}, /*#__PURE__*/createElement(ListNumberedIcon, null)));
|
|
5090
5090
|
}
|
|
5091
5091
|
|
|
5092
|
+
var toggleMarkAndDeactivateConflictingMarks = function toggleMarkAndDeactivateConflictingMarks(editor, mark) {
|
|
5093
|
+
var subs = [MARKS.SUPERSCRIPT, MARKS.SUBSCRIPT];
|
|
5094
|
+
var clear = subs.includes(mark) ? subs : [];
|
|
5095
|
+
toggleMark(editor, {
|
|
5096
|
+
key: mark,
|
|
5097
|
+
clear: clear
|
|
5098
|
+
});
|
|
5099
|
+
};
|
|
5100
|
+
var buildMarkEventHandler = function buildMarkEventHandler(type) {
|
|
5101
|
+
return function (editor, _ref) {
|
|
5102
|
+
var hotkey = _ref.options.hotkey;
|
|
5103
|
+
return function (event) {
|
|
5104
|
+
if (editor.selection && hotkey && isHotkey(hotkey, event)) {
|
|
5105
|
+
event.preventDefault();
|
|
5106
|
+
var isActive = isMarkActive(editor, type);
|
|
5107
|
+
editor.tracking.onShortcutAction(isActive ? 'unmark' : 'mark', {
|
|
5108
|
+
markType: type
|
|
5109
|
+
});
|
|
5110
|
+
toggleMarkAndDeactivateConflictingMarks(editor, type);
|
|
5111
|
+
}
|
|
5112
|
+
};
|
|
5113
|
+
};
|
|
5114
|
+
};
|
|
5115
|
+
|
|
5092
5116
|
var createMarkToolbarButton = function createMarkToolbarButton(_ref) {
|
|
5093
5117
|
var mark = _ref.mark,
|
|
5094
5118
|
title = _ref.title,
|
|
@@ -5103,9 +5127,7 @@ var createMarkToolbarButton = function createMarkToolbarButton(_ref) {
|
|
|
5103
5127
|
editor.tracking.onToolbarAction(isActive ? 'unmark' : 'mark', {
|
|
5104
5128
|
markType: mark
|
|
5105
5129
|
});
|
|
5106
|
-
|
|
5107
|
-
key: mark
|
|
5108
|
-
});
|
|
5130
|
+
toggleMarkAndDeactivateConflictingMarks(editor, mark);
|
|
5109
5131
|
focus(editor);
|
|
5110
5132
|
}, [editor]);
|
|
5111
5133
|
if (!editor) return null;
|
|
@@ -5122,24 +5144,6 @@ var createMarkToolbarButton = function createMarkToolbarButton(_ref) {
|
|
|
5122
5144
|
return Mark;
|
|
5123
5145
|
};
|
|
5124
5146
|
|
|
5125
|
-
var buildMarkEventHandler = function buildMarkEventHandler(type) {
|
|
5126
|
-
return function (editor, _ref) {
|
|
5127
|
-
var hotkey = _ref.options.hotkey;
|
|
5128
|
-
return function (event) {
|
|
5129
|
-
if (editor.selection && hotkey && isHotkey(hotkey, event)) {
|
|
5130
|
-
event.preventDefault();
|
|
5131
|
-
var isActive = isMarkActive(editor, type);
|
|
5132
|
-
editor.tracking.onShortcutAction(isActive ? 'unmark' : 'mark', {
|
|
5133
|
-
markType: type
|
|
5134
|
-
});
|
|
5135
|
-
toggleMark(editor, {
|
|
5136
|
-
key: type
|
|
5137
|
-
});
|
|
5138
|
-
}
|
|
5139
|
-
};
|
|
5140
|
-
};
|
|
5141
|
-
};
|
|
5142
|
-
|
|
5143
5147
|
var ToolbarBoldButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5144
5148
|
title: 'Bold',
|
|
5145
5149
|
mark: MARKS.BOLD,
|
|
@@ -5302,10 +5306,74 @@ var createUnderlinePlugin = function createUnderlinePlugin() {
|
|
|
5302
5306
|
});
|
|
5303
5307
|
};
|
|
5304
5308
|
|
|
5309
|
+
var styles$f = {
|
|
5310
|
+
superscript: /*#__PURE__*/css({
|
|
5311
|
+
verticalAlign: 'super',
|
|
5312
|
+
fontSize: 'smaller'
|
|
5313
|
+
})
|
|
5314
|
+
};
|
|
5315
|
+
var ToolbarSuperscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5316
|
+
title: 'Superscript',
|
|
5317
|
+
mark: MARKS.SUPERSCRIPT,
|
|
5318
|
+
icon: /*#__PURE__*/createElement(SuperscriptIcon, null)
|
|
5319
|
+
});
|
|
5320
|
+
function Superscript(props) {
|
|
5321
|
+
return /*#__PURE__*/createElement("sup", _extends({}, props.attributes, {
|
|
5322
|
+
className: styles$f.superscript
|
|
5323
|
+
}), props.children);
|
|
5324
|
+
}
|
|
5325
|
+
var createSuperscriptPlugin = function createSuperscriptPlugin() {
|
|
5326
|
+
return createSuperscriptPlugin$1({
|
|
5327
|
+
type: MARKS.SUPERSCRIPT,
|
|
5328
|
+
component: Superscript,
|
|
5329
|
+
handlers: {
|
|
5330
|
+
onKeyDown: buildMarkEventHandler(MARKS.SUPERSCRIPT)
|
|
5331
|
+
},
|
|
5332
|
+
deserializeHtml: {
|
|
5333
|
+
rules: [{
|
|
5334
|
+
validNodeName: ['SUP']
|
|
5335
|
+
}]
|
|
5336
|
+
}
|
|
5337
|
+
});
|
|
5338
|
+
};
|
|
5339
|
+
|
|
5340
|
+
var styles$g = {
|
|
5341
|
+
subscript: /*#__PURE__*/css({
|
|
5342
|
+
verticalAlign: 'sub',
|
|
5343
|
+
fontSize: 'smaller'
|
|
5344
|
+
})
|
|
5345
|
+
};
|
|
5346
|
+
var ToolbarSubscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5347
|
+
title: 'Subscript',
|
|
5348
|
+
mark: MARKS.SUBSCRIPT,
|
|
5349
|
+
icon: /*#__PURE__*/createElement(SubscriptIcon, {
|
|
5350
|
+
viewBox: "0 0 23 18"
|
|
5351
|
+
})
|
|
5352
|
+
});
|
|
5353
|
+
function Subscript(props) {
|
|
5354
|
+
return /*#__PURE__*/createElement("sub", _extends({}, props.attributes, {
|
|
5355
|
+
className: styles$g.subscript
|
|
5356
|
+
}), props.children);
|
|
5357
|
+
}
|
|
5358
|
+
var createSubscriptPlugin = function createSubscriptPlugin() {
|
|
5359
|
+
return createSubscriptPlugin$1({
|
|
5360
|
+
type: MARKS.SUBSCRIPT,
|
|
5361
|
+
component: Subscript,
|
|
5362
|
+
handlers: {
|
|
5363
|
+
onKeyDown: buildMarkEventHandler(MARKS.SUBSCRIPT)
|
|
5364
|
+
},
|
|
5365
|
+
deserializeHtml: {
|
|
5366
|
+
rules: [{
|
|
5367
|
+
validNodeName: ['SUB']
|
|
5368
|
+
}]
|
|
5369
|
+
}
|
|
5370
|
+
});
|
|
5371
|
+
};
|
|
5372
|
+
|
|
5305
5373
|
var createMarksPlugin = function createMarksPlugin() {
|
|
5306
5374
|
return {
|
|
5307
5375
|
key: 'Marks',
|
|
5308
|
-
plugins: [createBoldPlugin(), createCodePlugin(), createItalicPlugin(), createUnderlinePlugin()]
|
|
5376
|
+
plugins: [createBoldPlugin(), createCodePlugin(), createItalicPlugin(), createUnderlinePlugin(), createSuperscriptPlugin(), createSubscriptPlugin()]
|
|
5309
5377
|
};
|
|
5310
5378
|
};
|
|
5311
5379
|
|
|
@@ -5513,10 +5581,10 @@ var createNormalizerPlugin = function createNormalizerPlugin() {
|
|
|
5513
5581
|
};
|
|
5514
5582
|
|
|
5515
5583
|
var _templateObject$6, _styles$1;
|
|
5516
|
-
var styles$
|
|
5584
|
+
var styles$h = (_styles$1 = {}, _styles$1[BLOCKS.PARAGRAPH] = /*#__PURE__*/css(_templateObject$6 || (_templateObject$6 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n line-height: ", ";\n margin-bottom: 1.5em;\n "])), tokens.lineHeightDefault), _styles$1);
|
|
5517
5585
|
function Paragraph(props) {
|
|
5518
5586
|
return /*#__PURE__*/createElement("div", _extends({}, props.attributes, {
|
|
5519
|
-
className: styles$
|
|
5587
|
+
className: styles$h[BLOCKS.PARAGRAPH]
|
|
5520
5588
|
}), props.children);
|
|
5521
5589
|
}
|
|
5522
5590
|
|
|
@@ -6158,7 +6226,7 @@ var isTable = function isTable(node) {
|
|
|
6158
6226
|
return Element.isElement(node) && node.type === BLOCKS.TABLE;
|
|
6159
6227
|
};
|
|
6160
6228
|
|
|
6161
|
-
var styles$
|
|
6229
|
+
var styles$i = {
|
|
6162
6230
|
topRight: /*#__PURE__*/css({
|
|
6163
6231
|
position: 'absolute',
|
|
6164
6232
|
top: '6px',
|
|
@@ -6247,7 +6315,7 @@ var TableActions = function TableActions() {
|
|
|
6247
6315
|
size: "small",
|
|
6248
6316
|
variant: "transparent",
|
|
6249
6317
|
tabIndex: -1,
|
|
6250
|
-
className: styles$
|
|
6318
|
+
className: styles$i.topRight,
|
|
6251
6319
|
icon: /*#__PURE__*/React__default.createElement(ChevronDownIcon, null),
|
|
6252
6320
|
"aria-label": "Open table menu",
|
|
6253
6321
|
testId: "cf-table-actions-button"
|
|
@@ -7177,7 +7245,7 @@ var normalizeEditorValue = function normalizeEditorValue(value, options) {
|
|
|
7177
7245
|
};
|
|
7178
7246
|
|
|
7179
7247
|
var STYLE_EDITOR_BORDER = "1px solid " + tokens.gray400;
|
|
7180
|
-
var styles$
|
|
7248
|
+
var styles$j = {
|
|
7181
7249
|
root: /*#__PURE__*/css({
|
|
7182
7250
|
position: 'relative'
|
|
7183
7251
|
}),
|
|
@@ -7294,7 +7362,7 @@ var EmbedEntityWidget = function EmbedEntityWidget(_ref) {
|
|
|
7294
7362
|
}, actions) : null;
|
|
7295
7363
|
};
|
|
7296
7364
|
|
|
7297
|
-
var styles$
|
|
7365
|
+
var styles$k = {
|
|
7298
7366
|
toolbar: /*#__PURE__*/css({
|
|
7299
7367
|
border: "1px solid " + tokens.gray400,
|
|
7300
7368
|
backgroundColor: tokens.gray100,
|
|
@@ -7339,28 +7407,32 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
7339
7407
|
var shouldDisableTables = isDisabled || !canInsertBlocks || isListSelected || isBlockquoteSelected;
|
|
7340
7408
|
return /*#__PURE__*/React__default.createElement(Flex, {
|
|
7341
7409
|
testId: "toolbar",
|
|
7342
|
-
className: styles$
|
|
7410
|
+
className: styles$k.toolbar,
|
|
7343
7411
|
alignItems: "center"
|
|
7344
7412
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
7345
|
-
className: styles$
|
|
7413
|
+
className: styles$k.formattingOptionsWrapper
|
|
7346
7414
|
}, /*#__PURE__*/React__default.createElement(ToolbarHeadingButton, {
|
|
7347
7415
|
isDisabled: isDisabled || !canInsertBlocks
|
|
7348
7416
|
}), validationInfo.isAnyMarkEnabled && /*#__PURE__*/React__default.createElement("span", {
|
|
7349
|
-
className: styles$
|
|
7417
|
+
className: styles$k.divider
|
|
7350
7418
|
}), isMarkEnabled(sdk.field, MARKS.BOLD) && /*#__PURE__*/React__default.createElement(ToolbarBoldButton, {
|
|
7351
7419
|
isDisabled: isDisabled
|
|
7352
7420
|
}), isMarkEnabled(sdk.field, MARKS.ITALIC) && /*#__PURE__*/React__default.createElement(ToolbarItalicButton, {
|
|
7353
7421
|
isDisabled: isDisabled
|
|
7422
|
+
}), isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarSuperscriptButton, {
|
|
7423
|
+
isDisabled: isDisabled
|
|
7424
|
+
}), isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarSubscriptButton, {
|
|
7425
|
+
isDisabled: isDisabled
|
|
7354
7426
|
}), isMarkEnabled(sdk.field, MARKS.UNDERLINE) && /*#__PURE__*/React__default.createElement(ToolbarUnderlineButton, {
|
|
7355
7427
|
isDisabled: isDisabled
|
|
7356
7428
|
}), isMarkEnabled(sdk.field, MARKS.CODE) && /*#__PURE__*/React__default.createElement(ToolbarCodeButton, {
|
|
7357
7429
|
isDisabled: isDisabled
|
|
7358
7430
|
}), validationInfo.isAnyHyperlinkEnabled && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("span", {
|
|
7359
|
-
className: styles$
|
|
7431
|
+
className: styles$k.divider
|
|
7360
7432
|
}), /*#__PURE__*/React__default.createElement(ToolbarHyperlinkButton, {
|
|
7361
7433
|
isDisabled: isDisabled
|
|
7362
7434
|
})), validationInfo.isAnyBlockFormattingEnabled && /*#__PURE__*/React__default.createElement("span", {
|
|
7363
|
-
className: styles$
|
|
7435
|
+
className: styles$k.divider
|
|
7364
7436
|
}), /*#__PURE__*/React__default.createElement(ToolbarListButton, {
|
|
7365
7437
|
isDisabled: isDisabled || !canInsertBlocks
|
|
7366
7438
|
}), isNodeTypeEnabled(sdk.field, BLOCKS.QUOTE) && /*#__PURE__*/React__default.createElement(ToolbarQuoteButton, {
|
|
@@ -7370,7 +7442,7 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
7370
7442
|
}), isNodeTypeEnabled(sdk.field, BLOCKS.TABLE) && /*#__PURE__*/React__default.createElement(ToolbarTableButton, {
|
|
7371
7443
|
isDisabled: shouldDisableTables
|
|
7372
7444
|
})), /*#__PURE__*/React__default.createElement("div", {
|
|
7373
|
-
className: styles$
|
|
7445
|
+
className: styles$k.embedActionsWrapper
|
|
7374
7446
|
}, /*#__PURE__*/React__default.createElement(EmbedEntityWidget, {
|
|
7375
7447
|
isDisabled: isDisabled,
|
|
7376
7448
|
canInsertBlocks: canInsertBlocks
|
|
@@ -7395,7 +7467,7 @@ function getValidationInfo(field) {
|
|
|
7395
7467
|
}
|
|
7396
7468
|
|
|
7397
7469
|
var _templateObject$b;
|
|
7398
|
-
var styles$
|
|
7470
|
+
var styles$l = {
|
|
7399
7471
|
nativeSticky: /*#__PURE__*/css(_templateObject$b || (_templateObject$b = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: -webkit-sticky;\n position: sticky;\n top: -1px;\n z-index: 2;\n "])))
|
|
7400
7472
|
};
|
|
7401
7473
|
|
|
@@ -7403,7 +7475,7 @@ var StickyToolbarWrapper = function StickyToolbarWrapper(_ref) {
|
|
|
7403
7475
|
var isDisabled = _ref.isDisabled,
|
|
7404
7476
|
children = _ref.children;
|
|
7405
7477
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
7406
|
-
className: isDisabled ? '' : styles$
|
|
7478
|
+
className: isDisabled ? '' : styles$l.nativeSticky
|
|
7407
7479
|
}, children);
|
|
7408
7480
|
};
|
|
7409
7481
|
|
|
@@ -7516,9 +7588,9 @@ var ConnectedRichTextEditor = function ConnectedRichTextEditor(props) {
|
|
|
7516
7588
|
setPendingExternalUpdate(true);
|
|
7517
7589
|
setEditorContent(editor, documentToEditorValue(props.value));
|
|
7518
7590
|
}, [props.value, id]);
|
|
7519
|
-
var classNames = cx(styles$
|
|
7591
|
+
var classNames = cx(styles$j.editor, props.minHeight !== undefined ? css({
|
|
7520
7592
|
minHeight: props.minHeight
|
|
7521
|
-
}) : undefined, props.isDisabled ? styles$
|
|
7593
|
+
}) : undefined, props.isDisabled ? styles$j.disabled : styles$j.enabled, props.isToolbarHidden && styles$j.hiddenToolbar);
|
|
7522
7594
|
useEffect(function () {
|
|
7523
7595
|
if (!isFirstRender) {
|
|
7524
7596
|
return;
|
|
@@ -7534,7 +7606,7 @@ var ConnectedRichTextEditor = function ConnectedRichTextEditor(props) {
|
|
|
7534
7606
|
}, /*#__PURE__*/React__default.createElement(ContentfulEditorIdProvider, {
|
|
7535
7607
|
value: id
|
|
7536
7608
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
7537
|
-
className: styles$
|
|
7609
|
+
className: styles$j.root,
|
|
7538
7610
|
"data-test-id": "rich-text-editor"
|
|
7539
7611
|
}, /*#__PURE__*/React__default.createElement(Plate, {
|
|
7540
7612
|
id: id,
|