@contentful/field-editor-rich-text 3.2.1 → 3.3.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/CHANGELOG.md +12 -0
- package/dist/RichTextEditor.d.ts +1 -0
- package/dist/field-editor-rich-text.cjs.development.js +128 -42
- 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 +130 -44
- package/dist/field-editor-rich-text.esm.js.map +1 -1
- package/dist/plugins/Marks/Code.d.ts +6 -0
- package/dist/plugins/Marks/Subscript.d.ts +6 -0
- package/dist/plugins/Marks/Superscript.d.ts +6 -0
- package/dist/plugins/Marks/components/MarkToolbarButton.d.ts +1 -1
- package/dist/plugins/Text/createTextPlugin.d.ts +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/package.json +5 -5
|
@@ -2,7 +2,7 @@ import React__default, { createContext, useContext, useMemo, useState, useEffect
|
|
|
2
2
|
import { MissingEntityCard, WrappedAssetCard, useEntity, useEntityLoader, WrappedEntryCard, ScheduledIconWithTooltip, EntityProvider, getScheduleTooltipContent } from '@contentful/field-editor-reference';
|
|
3
3
|
import { entityHelpers, ModalDialogLauncher, FieldConnector } from '@contentful/field-editor-shared';
|
|
4
4
|
import { BLOCKS, INLINES, TEXT_CONTAINERS, HEADINGS, LIST_ITEM_BLOCKS, MARKS, CONTAINERS, TOP_LEVEL_BLOCKS, VOID_BLOCKS, EMPTY_DOCUMENT } from '@contentful/rich-text-types';
|
|
5
|
-
import { usePlateEditorRef, usePlateEditorState, toggleNodeType, getText, getAbove, removeMark, setMarks, isMarkActive, getNodes, setNodes, isAncestorEmpty, match, getLastChildPath, wrapNodes, getPluginType, unwrapNodes, isCollapsed, isRangeAcrossBlocks, ELEMENT_DEFAULT, findNode, getParent, getBlockAbove, isSelectionAtBlockStart, isSelectionAtBlockEnd, isFirstChild, insertNodes, moveChildren, isBlockAboveEmpty, mockPlugin, deleteFragment, toggleMark, someHtmlElement, KEY_DESERIALIZE_HTML, hasSingleChild, isLastChild, someNode, getChildren as getChildren$1, queryNode, createDeserializeHtmlPlugin, createDeserializeAstPlugin, createPlateEditor, getPlateSelectors, getPlateActions, Plate } from '@udecode/plate-core';
|
|
5
|
+
import { usePlateEditorRef, usePlateEditorState, toggleNodeType, getText, getAbove, removeMark, setMarks, isMarkActive, getNodes, setNodes, isAncestorEmpty, match, getLastChildPath, wrapNodes, getPluginType, unwrapNodes, isCollapsed, isRangeAcrossBlocks, ELEMENT_DEFAULT, findNode, getParent, getBlockAbove, isSelectionAtBlockStart, isSelectionAtBlockEnd, isFirstChild, insertNodes, moveChildren, isBlockAboveEmpty, mockPlugin, deleteFragment, toggleMark, someHtmlElement, KEY_DESERIALIZE_HTML, hasSingleChild, isLastChild, someNode, getChildren as getChildren$1, unsetNodes, queryNode, createDeserializeHtmlPlugin, createDeserializeAstPlugin, createPlateEditor, getPlateSelectors, getPlateActions, Plate } from '@udecode/plate-core';
|
|
6
6
|
import { css, cx } from 'emotion';
|
|
7
7
|
import areEqual from 'fast-deep-equal';
|
|
8
8
|
import noop from 'lodash-es/noop';
|
|
@@ -20,7 +20,7 @@ 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, SuperscriptIcon, SubscriptIcon, 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, MoreHorizontalIcon } 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
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';
|
|
@@ -5113,6 +5113,12 @@ var buildMarkEventHandler = function buildMarkEventHandler(type) {
|
|
|
5113
5113
|
};
|
|
5114
5114
|
};
|
|
5115
5115
|
|
|
5116
|
+
var styles$c = {
|
|
5117
|
+
isActive: /*#__PURE__*/css({
|
|
5118
|
+
backgroundColor: tokens.blue100,
|
|
5119
|
+
color: tokens.blue600
|
|
5120
|
+
})
|
|
5121
|
+
};
|
|
5116
5122
|
var createMarkToolbarButton = function createMarkToolbarButton(_ref) {
|
|
5117
5123
|
var mark = _ref.mark,
|
|
5118
5124
|
title = _ref.title,
|
|
@@ -5131,6 +5137,18 @@ var createMarkToolbarButton = function createMarkToolbarButton(_ref) {
|
|
|
5131
5137
|
focus(editor);
|
|
5132
5138
|
}, [editor]);
|
|
5133
5139
|
if (!editor) return null;
|
|
5140
|
+
|
|
5141
|
+
if (!icon) {
|
|
5142
|
+
var _cx;
|
|
5143
|
+
|
|
5144
|
+
return /*#__PURE__*/createElement(Menu.Item, {
|
|
5145
|
+
onClick: handleClick,
|
|
5146
|
+
disabled: isDisabled,
|
|
5147
|
+
className: cx((_cx = {}, _cx[styles$c.isActive] = isMarkActive(editor, mark), _cx)),
|
|
5148
|
+
testId: mark + "-toolbar-button"
|
|
5149
|
+
}, title);
|
|
5150
|
+
}
|
|
5151
|
+
|
|
5134
5152
|
return /*#__PURE__*/createElement(ToolbarButton, {
|
|
5135
5153
|
title: title,
|
|
5136
5154
|
testId: mark + "-toolbar-button",
|
|
@@ -5149,14 +5167,14 @@ var ToolbarBoldButton = /*#__PURE__*/createMarkToolbarButton({
|
|
|
5149
5167
|
mark: MARKS.BOLD,
|
|
5150
5168
|
icon: /*#__PURE__*/createElement(FormatBoldIcon, null)
|
|
5151
5169
|
});
|
|
5152
|
-
var styles$
|
|
5170
|
+
var styles$d = {
|
|
5153
5171
|
bold: /*#__PURE__*/css({
|
|
5154
5172
|
fontWeight: 600
|
|
5155
5173
|
})
|
|
5156
5174
|
};
|
|
5157
5175
|
function Bold(props) {
|
|
5158
5176
|
return /*#__PURE__*/createElement("strong", _extends({}, props.attributes, {
|
|
5159
|
-
className: styles$
|
|
5177
|
+
className: styles$d.bold
|
|
5160
5178
|
}), props.children);
|
|
5161
5179
|
}
|
|
5162
5180
|
|
|
@@ -5196,7 +5214,11 @@ var ToolbarCodeButton = /*#__PURE__*/createMarkToolbarButton({
|
|
|
5196
5214
|
mark: MARKS.CODE,
|
|
5197
5215
|
icon: /*#__PURE__*/createElement(CodeIcon, null)
|
|
5198
5216
|
});
|
|
5199
|
-
var
|
|
5217
|
+
var ToolbarDropdownCodeButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5218
|
+
title: 'Code',
|
|
5219
|
+
mark: MARKS.CODE
|
|
5220
|
+
});
|
|
5221
|
+
var styles$e = {
|
|
5200
5222
|
code: /*#__PURE__*/css({
|
|
5201
5223
|
fontFamily: 'monospace',
|
|
5202
5224
|
fontSize: '.9em'
|
|
@@ -5204,7 +5226,7 @@ var styles$d = {
|
|
|
5204
5226
|
};
|
|
5205
5227
|
function Code(props) {
|
|
5206
5228
|
return /*#__PURE__*/createElement("code", _extends({}, props.attributes, {
|
|
5207
|
-
className: styles$
|
|
5229
|
+
className: styles$e.code
|
|
5208
5230
|
}), props.children);
|
|
5209
5231
|
}
|
|
5210
5232
|
var createCodePlugin = function createCodePlugin() {
|
|
@@ -5234,14 +5256,14 @@ var ToolbarItalicButton = /*#__PURE__*/createMarkToolbarButton({
|
|
|
5234
5256
|
mark: MARKS.ITALIC,
|
|
5235
5257
|
icon: /*#__PURE__*/createElement(FormatItalicIcon, null)
|
|
5236
5258
|
});
|
|
5237
|
-
var styles$
|
|
5259
|
+
var styles$f = {
|
|
5238
5260
|
italic: /*#__PURE__*/css({
|
|
5239
5261
|
fontStyle: 'italic'
|
|
5240
5262
|
})
|
|
5241
5263
|
};
|
|
5242
5264
|
function Italic(props) {
|
|
5243
5265
|
return /*#__PURE__*/createElement("em", _extends({}, props.attributes, {
|
|
5244
|
-
className: styles$
|
|
5266
|
+
className: styles$f.italic
|
|
5245
5267
|
}), props.children);
|
|
5246
5268
|
}
|
|
5247
5269
|
var createItalicPlugin = function createItalicPlugin() {
|
|
@@ -5306,7 +5328,7 @@ var createUnderlinePlugin = function createUnderlinePlugin() {
|
|
|
5306
5328
|
});
|
|
5307
5329
|
};
|
|
5308
5330
|
|
|
5309
|
-
var styles$
|
|
5331
|
+
var styles$g = {
|
|
5310
5332
|
superscript: /*#__PURE__*/css({
|
|
5311
5333
|
verticalAlign: 'super',
|
|
5312
5334
|
fontSize: 'smaller'
|
|
@@ -5317,9 +5339,13 @@ var ToolbarSuperscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
|
5317
5339
|
mark: MARKS.SUPERSCRIPT,
|
|
5318
5340
|
icon: /*#__PURE__*/createElement(SuperscriptIcon, null)
|
|
5319
5341
|
});
|
|
5342
|
+
var ToolbarDropdownSuperscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5343
|
+
title: 'Superscript',
|
|
5344
|
+
mark: MARKS.SUPERSCRIPT
|
|
5345
|
+
});
|
|
5320
5346
|
function Superscript(props) {
|
|
5321
5347
|
return /*#__PURE__*/createElement("sup", _extends({}, props.attributes, {
|
|
5322
|
-
className: styles$
|
|
5348
|
+
className: styles$g.superscript
|
|
5323
5349
|
}), props.children);
|
|
5324
5350
|
}
|
|
5325
5351
|
var createSuperscriptPlugin = function createSuperscriptPlugin() {
|
|
@@ -5337,7 +5363,7 @@ var createSuperscriptPlugin = function createSuperscriptPlugin() {
|
|
|
5337
5363
|
});
|
|
5338
5364
|
};
|
|
5339
5365
|
|
|
5340
|
-
var styles$
|
|
5366
|
+
var styles$h = {
|
|
5341
5367
|
subscript: /*#__PURE__*/css({
|
|
5342
5368
|
verticalAlign: 'sub',
|
|
5343
5369
|
fontSize: 'smaller'
|
|
@@ -5350,9 +5376,13 @@ var ToolbarSubscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
|
5350
5376
|
viewBox: "0 0 23 18"
|
|
5351
5377
|
})
|
|
5352
5378
|
});
|
|
5379
|
+
var ToolbarDropdownSubscriptButton = /*#__PURE__*/createMarkToolbarButton({
|
|
5380
|
+
title: 'Subscript',
|
|
5381
|
+
mark: MARKS.SUBSCRIPT
|
|
5382
|
+
});
|
|
5353
5383
|
function Subscript(props) {
|
|
5354
5384
|
return /*#__PURE__*/createElement("sub", _extends({}, props.attributes, {
|
|
5355
|
-
className: styles$
|
|
5385
|
+
className: styles$h.subscript
|
|
5356
5386
|
}), props.children);
|
|
5357
5387
|
}
|
|
5358
5388
|
var createSubscriptPlugin = function createSubscriptPlugin() {
|
|
@@ -5581,10 +5611,10 @@ var createNormalizerPlugin = function createNormalizerPlugin() {
|
|
|
5581
5611
|
};
|
|
5582
5612
|
|
|
5583
5613
|
var _templateObject$6, _styles$1;
|
|
5584
|
-
var styles$
|
|
5614
|
+
var styles$i = (_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);
|
|
5585
5615
|
function Paragraph(props) {
|
|
5586
5616
|
return /*#__PURE__*/createElement("div", _extends({}, props.attributes, {
|
|
5587
|
-
className: styles$
|
|
5617
|
+
className: styles$i[BLOCKS.PARAGRAPH]
|
|
5588
5618
|
}), props.children);
|
|
5589
5619
|
}
|
|
5590
5620
|
|
|
@@ -6226,7 +6256,7 @@ var isTable = function isTable(node) {
|
|
|
6226
6256
|
return Element.isElement(node) && node.type === BLOCKS.TABLE;
|
|
6227
6257
|
};
|
|
6228
6258
|
|
|
6229
|
-
var styles$
|
|
6259
|
+
var styles$j = {
|
|
6230
6260
|
topRight: /*#__PURE__*/css({
|
|
6231
6261
|
position: 'absolute',
|
|
6232
6262
|
top: '6px',
|
|
@@ -6315,7 +6345,7 @@ var TableActions = function TableActions() {
|
|
|
6315
6345
|
size: "small",
|
|
6316
6346
|
variant: "transparent",
|
|
6317
6347
|
tabIndex: -1,
|
|
6318
|
-
className: styles$
|
|
6348
|
+
className: styles$j.topRight,
|
|
6319
6349
|
icon: /*#__PURE__*/React__default.createElement(ChevronDownIcon, null),
|
|
6320
6350
|
"aria-label": "Open table menu",
|
|
6321
6351
|
testId: "cf-table-actions-button"
|
|
@@ -6919,7 +6949,11 @@ function ToolbarTableButton(props) {
|
|
|
6919
6949
|
}, /*#__PURE__*/createElement(TableIcon, null));
|
|
6920
6950
|
}
|
|
6921
6951
|
|
|
6922
|
-
function createTextPlugin() {
|
|
6952
|
+
function createTextPlugin(restrictedMarks) {
|
|
6953
|
+
if (restrictedMarks === void 0) {
|
|
6954
|
+
restrictedMarks = [];
|
|
6955
|
+
}
|
|
6956
|
+
|
|
6923
6957
|
return {
|
|
6924
6958
|
key: 'TextPlugin',
|
|
6925
6959
|
handlers: {
|
|
@@ -6984,7 +7018,22 @@ function createTextPlugin() {
|
|
|
6984
7018
|
|
|
6985
7019
|
fixPasteAsPlainText(editor);
|
|
6986
7020
|
return editor;
|
|
6987
|
-
}
|
|
7021
|
+
},
|
|
7022
|
+
normalizer: [{
|
|
7023
|
+
match: Text.isText,
|
|
7024
|
+
transform: function transform(editor, _ref) {
|
|
7025
|
+
var path = _ref[1];
|
|
7026
|
+
unsetNodes(editor, restrictedMarks, {
|
|
7027
|
+
at: path
|
|
7028
|
+
});
|
|
7029
|
+
},
|
|
7030
|
+
validNode: function validNode(_editor, _ref2) {
|
|
7031
|
+
var node = _ref2[0];
|
|
7032
|
+
return !restrictedMarks.some(function (mark) {
|
|
7033
|
+
return mark in node;
|
|
7034
|
+
});
|
|
7035
|
+
}
|
|
7036
|
+
}]
|
|
6988
7037
|
};
|
|
6989
7038
|
}
|
|
6990
7039
|
|
|
@@ -7114,7 +7163,7 @@ var createVoidsPlugin = function createVoidsPlugin() {
|
|
|
7114
7163
|
};
|
|
7115
7164
|
};
|
|
7116
7165
|
|
|
7117
|
-
var getPlugins = function getPlugins(sdk, onAction) {
|
|
7166
|
+
var getPlugins = function getPlugins(sdk, onAction, restrictedMarks) {
|
|
7118
7167
|
return [// AST must come after the HTML deserializer
|
|
7119
7168
|
createDeserializeHtmlPlugin(), createDeserializeAstPlugin(), createDeserializeDocxPlugin(), // Tracking - This should come first so all plugins below will have access to `editor.tracking`
|
|
7120
7169
|
createTrackingPlugin(onAction), // Global / Global shortcuts
|
|
@@ -7122,7 +7171,7 @@ var getPlugins = function getPlugins(sdk, onAction) {
|
|
|
7122
7171
|
createParagraphPlugin(), createListPlugin(), createHrPlugin(), createHeadingPlugin(), createQuotePlugin(), createTablePlugin(), createEmbeddedEntryBlockPlugin(sdk), createEmbeddedAssetBlockPlugin(sdk), // Inline elements
|
|
7123
7172
|
createHyperlinkPlugin(sdk), createEmbeddedEntityInlinePlugin(sdk), // Marks
|
|
7124
7173
|
createMarksPlugin(), // Other
|
|
7125
|
-
createTrailingParagraphPlugin(), createTextPlugin(), createVoidsPlugin(), createSelectOnBackspacePlugin(), // Pasting content from other sources
|
|
7174
|
+
createTrailingParagraphPlugin(), createTextPlugin(restrictedMarks), createVoidsPlugin(), createSelectOnBackspacePlugin(), // Pasting content from other sources
|
|
7126
7175
|
createPasteHTMLPlugin(), // These plugins drive their configurations from the list of plugins
|
|
7127
7176
|
// above. They MUST come last.
|
|
7128
7177
|
createSoftBreakPlugin(), createExitBreakPlugin(), createResetNodePlugin(), createNormalizerPlugin()];
|
|
@@ -7245,7 +7294,7 @@ var normalizeEditorValue = function normalizeEditorValue(value, options) {
|
|
|
7245
7294
|
};
|
|
7246
7295
|
|
|
7247
7296
|
var STYLE_EDITOR_BORDER = "1px solid " + tokens.gray400;
|
|
7248
|
-
var styles$
|
|
7297
|
+
var styles$k = {
|
|
7249
7298
|
root: /*#__PURE__*/css({
|
|
7250
7299
|
position: 'relative'
|
|
7251
7300
|
}),
|
|
@@ -7362,13 +7411,19 @@ var EmbedEntityWidget = function EmbedEntityWidget(_ref) {
|
|
|
7362
7411
|
}, actions) : null;
|
|
7363
7412
|
};
|
|
7364
7413
|
|
|
7365
|
-
var styles$
|
|
7414
|
+
var styles$l = {
|
|
7366
7415
|
toolbar: /*#__PURE__*/css({
|
|
7367
7416
|
border: "1px solid " + tokens.gray400,
|
|
7368
7417
|
backgroundColor: tokens.gray100,
|
|
7369
7418
|
padding: tokens.spacingXs,
|
|
7370
7419
|
borderRadius: tokens.borderRadiusMedium + " " + tokens.borderRadiusMedium + " 0 0"
|
|
7371
7420
|
}),
|
|
7421
|
+
toolbarBtn: /*#__PURE__*/css({
|
|
7422
|
+
height: '30px',
|
|
7423
|
+
width: '30px',
|
|
7424
|
+
marginLeft: tokens.spacing2Xs,
|
|
7425
|
+
marginRight: tokens.spacing2Xs
|
|
7426
|
+
}),
|
|
7372
7427
|
divider: /*#__PURE__*/css({
|
|
7373
7428
|
display: 'inline-block',
|
|
7374
7429
|
height: '21px',
|
|
@@ -7394,8 +7449,30 @@ var styles$k = {
|
|
|
7394
7449
|
})
|
|
7395
7450
|
};
|
|
7396
7451
|
|
|
7397
|
-
var
|
|
7398
|
-
var
|
|
7452
|
+
var Dropdown = function Dropdown(_ref) {
|
|
7453
|
+
var sdk = _ref.sdk,
|
|
7454
|
+
isDisabled = _ref.isDisabled;
|
|
7455
|
+
var editor = useContentfulEditor();
|
|
7456
|
+
var isActive = isMarkActive(editor, MARKS.SUPERSCRIPT) || isMarkActive(editor, MARKS.SUBSCRIPT) || isMarkActive(editor, MARKS.CODE);
|
|
7457
|
+
return /*#__PURE__*/React__default.createElement(Menu, null, /*#__PURE__*/React__default.createElement(Menu.Trigger, null, /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement(IconButton, {
|
|
7458
|
+
size: "small",
|
|
7459
|
+
className: styles$l.toolbarBtn,
|
|
7460
|
+
variant: isActive ? 'secondary' : 'transparent',
|
|
7461
|
+
icon: /*#__PURE__*/React__default.createElement(MoreHorizontalIcon, null),
|
|
7462
|
+
"aria-label": "toggle menu",
|
|
7463
|
+
isDisabled: isDisabled,
|
|
7464
|
+
testId: "dropdown-toolbar-button"
|
|
7465
|
+
}))), /*#__PURE__*/React__default.createElement(Menu.List, null, isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarDropdownSuperscriptButton, {
|
|
7466
|
+
isDisabled: isDisabled
|
|
7467
|
+
}), isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarDropdownSubscriptButton, {
|
|
7468
|
+
isDisabled: isDisabled
|
|
7469
|
+
}), isMarkEnabled(sdk.field, MARKS.CODE) && /*#__PURE__*/React__default.createElement(ToolbarDropdownCodeButton, {
|
|
7470
|
+
isDisabled: isDisabled
|
|
7471
|
+
})));
|
|
7472
|
+
};
|
|
7473
|
+
|
|
7474
|
+
var Toolbar = function Toolbar(_ref2) {
|
|
7475
|
+
var isDisabled = _ref2.isDisabled;
|
|
7399
7476
|
var sdk = useSdkContext();
|
|
7400
7477
|
var editor = useContentfulEditor();
|
|
7401
7478
|
var canInsertBlocks = !isNodeTypeSelected(editor, BLOCKS.TABLE);
|
|
@@ -7404,35 +7481,42 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
7404
7481
|
}, [sdk.field]);
|
|
7405
7482
|
var isListSelected = isNodeTypeSelected(editor, BLOCKS.UL_LIST) || isNodeTypeSelected(editor, BLOCKS.OL_LIST);
|
|
7406
7483
|
var isBlockquoteSelected = isNodeTypeSelected(editor, BLOCKS.QUOTE);
|
|
7407
|
-
var shouldDisableTables = isDisabled || !canInsertBlocks || isListSelected || isBlockquoteSelected;
|
|
7484
|
+
var shouldDisableTables = isDisabled || !canInsertBlocks || isListSelected || isBlockquoteSelected; // We only show the dropdown when: whenever at least bold , italic and underline are available; If nothing that would go inside the dropdown is available, we hide it
|
|
7485
|
+
|
|
7486
|
+
var boldItalicUnderlineAvailable = isMarkEnabled(sdk.field, MARKS.BOLD) || isMarkEnabled(sdk.field, MARKS.ITALIC) || isMarkEnabled(sdk.field, MARKS.UNDERLINE);
|
|
7487
|
+
var dropdownItemsAvailable = isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) || isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) || isMarkEnabled(sdk.field, MARKS.CODE);
|
|
7488
|
+
var shouldShowDropdown = boldItalicUnderlineAvailable && dropdownItemsAvailable;
|
|
7408
7489
|
return /*#__PURE__*/React__default.createElement(Flex, {
|
|
7409
7490
|
testId: "toolbar",
|
|
7410
|
-
className: styles$
|
|
7491
|
+
className: styles$l.toolbar,
|
|
7411
7492
|
alignItems: "center"
|
|
7412
7493
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
7413
|
-
className: styles$
|
|
7494
|
+
className: styles$l.formattingOptionsWrapper
|
|
7414
7495
|
}, /*#__PURE__*/React__default.createElement(ToolbarHeadingButton, {
|
|
7415
7496
|
isDisabled: isDisabled || !canInsertBlocks
|
|
7416
7497
|
}), validationInfo.isAnyMarkEnabled && /*#__PURE__*/React__default.createElement("span", {
|
|
7417
|
-
className: styles$
|
|
7498
|
+
className: styles$l.divider
|
|
7418
7499
|
}), isMarkEnabled(sdk.field, MARKS.BOLD) && /*#__PURE__*/React__default.createElement(ToolbarBoldButton, {
|
|
7419
7500
|
isDisabled: isDisabled
|
|
7420
7501
|
}), isMarkEnabled(sdk.field, MARKS.ITALIC) && /*#__PURE__*/React__default.createElement(ToolbarItalicButton, {
|
|
7421
7502
|
isDisabled: isDisabled
|
|
7422
|
-
}), isMarkEnabled(sdk.field, MARKS.
|
|
7503
|
+
}), isMarkEnabled(sdk.field, MARKS.UNDERLINE) && /*#__PURE__*/React__default.createElement(ToolbarUnderlineButton, {
|
|
7423
7504
|
isDisabled: isDisabled
|
|
7424
|
-
}), isMarkEnabled(sdk.field, MARKS.
|
|
7505
|
+
}), !boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarSuperscriptButton, {
|
|
7425
7506
|
isDisabled: isDisabled
|
|
7426
|
-
}), isMarkEnabled(sdk.field, MARKS.
|
|
7507
|
+
}), !boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) && /*#__PURE__*/React__default.createElement(ToolbarSubscriptButton, {
|
|
7427
7508
|
isDisabled: isDisabled
|
|
7428
|
-
}), isMarkEnabled(sdk.field, MARKS.CODE) && /*#__PURE__*/React__default.createElement(ToolbarCodeButton, {
|
|
7509
|
+
}), !boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.CODE) && /*#__PURE__*/React__default.createElement(ToolbarCodeButton, {
|
|
7510
|
+
isDisabled: isDisabled
|
|
7511
|
+
}), shouldShowDropdown && /*#__PURE__*/React__default.createElement(Dropdown, {
|
|
7512
|
+
sdk: sdk,
|
|
7429
7513
|
isDisabled: isDisabled
|
|
7430
7514
|
}), validationInfo.isAnyHyperlinkEnabled && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("span", {
|
|
7431
|
-
className: styles$
|
|
7515
|
+
className: styles$l.divider
|
|
7432
7516
|
}), /*#__PURE__*/React__default.createElement(ToolbarHyperlinkButton, {
|
|
7433
7517
|
isDisabled: isDisabled
|
|
7434
7518
|
})), validationInfo.isAnyBlockFormattingEnabled && /*#__PURE__*/React__default.createElement("span", {
|
|
7435
|
-
className: styles$
|
|
7519
|
+
className: styles$l.divider
|
|
7436
7520
|
}), /*#__PURE__*/React__default.createElement(ToolbarListButton, {
|
|
7437
7521
|
isDisabled: isDisabled || !canInsertBlocks
|
|
7438
7522
|
}), isNodeTypeEnabled(sdk.field, BLOCKS.QUOTE) && /*#__PURE__*/React__default.createElement(ToolbarQuoteButton, {
|
|
@@ -7442,7 +7526,7 @@ var Toolbar = function Toolbar(_ref) {
|
|
|
7442
7526
|
}), isNodeTypeEnabled(sdk.field, BLOCKS.TABLE) && /*#__PURE__*/React__default.createElement(ToolbarTableButton, {
|
|
7443
7527
|
isDisabled: shouldDisableTables
|
|
7444
7528
|
})), /*#__PURE__*/React__default.createElement("div", {
|
|
7445
|
-
className: styles$
|
|
7529
|
+
className: styles$l.embedActionsWrapper
|
|
7446
7530
|
}, /*#__PURE__*/React__default.createElement(EmbedEntityWidget, {
|
|
7447
7531
|
isDisabled: isDisabled,
|
|
7448
7532
|
canInsertBlocks: canInsertBlocks
|
|
@@ -7467,7 +7551,7 @@ function getValidationInfo(field) {
|
|
|
7467
7551
|
}
|
|
7468
7552
|
|
|
7469
7553
|
var _templateObject$b;
|
|
7470
|
-
var styles$
|
|
7554
|
+
var styles$m = {
|
|
7471
7555
|
nativeSticky: /*#__PURE__*/css(_templateObject$b || (_templateObject$b = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: -webkit-sticky;\n position: sticky;\n top: -1px;\n z-index: 2;\n "])))
|
|
7472
7556
|
};
|
|
7473
7557
|
|
|
@@ -7475,7 +7559,7 @@ var StickyToolbarWrapper = function StickyToolbarWrapper(_ref) {
|
|
|
7475
7559
|
var isDisabled = _ref.isDisabled,
|
|
7476
7560
|
children = _ref.children;
|
|
7477
7561
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
7478
|
-
className: isDisabled ? '' : styles$
|
|
7562
|
+
className: isDisabled ? '' : styles$m.nativeSticky
|
|
7479
7563
|
}, children);
|
|
7480
7564
|
};
|
|
7481
7565
|
|
|
@@ -7542,14 +7626,14 @@ var useOnValueChanged = function useOnValueChanged(_ref) {
|
|
|
7542
7626
|
}, [editorId, onChange, skip, onSkip]);
|
|
7543
7627
|
};
|
|
7544
7628
|
|
|
7545
|
-
var _excluded = ["sdk", "isInitiallyDisabled", "onAction"];
|
|
7629
|
+
var _excluded = ["sdk", "isInitiallyDisabled", "onAction", "restrictedMarks"];
|
|
7546
7630
|
var ConnectedRichTextEditor = function ConnectedRichTextEditor(props) {
|
|
7547
7631
|
var id = getContentfulEditorId(props.sdk);
|
|
7548
7632
|
var plugins = React__default.useMemo(function () {
|
|
7549
7633
|
var _props$onAction;
|
|
7550
7634
|
|
|
7551
|
-
return getPlugins(props.sdk, (_props$onAction = props.onAction) != null ? _props$onAction : noop);
|
|
7552
|
-
}, [props.sdk, props.onAction]);
|
|
7635
|
+
return getPlugins(props.sdk, (_props$onAction = props.onAction) != null ? _props$onAction : noop, props.restrictedMarks);
|
|
7636
|
+
}, [props.sdk, props.onAction, props.restrictedMarks]);
|
|
7553
7637
|
|
|
7554
7638
|
var _useState = useState(true),
|
|
7555
7639
|
isFirstRender = _useState[0],
|
|
@@ -7588,9 +7672,9 @@ var ConnectedRichTextEditor = function ConnectedRichTextEditor(props) {
|
|
|
7588
7672
|
setPendingExternalUpdate(true);
|
|
7589
7673
|
setEditorContent(editor, documentToEditorValue(props.value));
|
|
7590
7674
|
}, [props.value, id]);
|
|
7591
|
-
var classNames = cx(styles$
|
|
7675
|
+
var classNames = cx(styles$k.editor, props.minHeight !== undefined ? css({
|
|
7592
7676
|
minHeight: props.minHeight
|
|
7593
|
-
}) : undefined, props.isDisabled ? styles$
|
|
7677
|
+
}) : undefined, props.isDisabled ? styles$k.disabled : styles$k.enabled, props.isToolbarHidden && styles$k.hiddenToolbar);
|
|
7594
7678
|
useEffect(function () {
|
|
7595
7679
|
if (!isFirstRender) {
|
|
7596
7680
|
return;
|
|
@@ -7606,7 +7690,7 @@ var ConnectedRichTextEditor = function ConnectedRichTextEditor(props) {
|
|
|
7606
7690
|
}, /*#__PURE__*/React__default.createElement(ContentfulEditorIdProvider, {
|
|
7607
7691
|
value: id
|
|
7608
7692
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
7609
|
-
className: styles$
|
|
7693
|
+
className: styles$k.root,
|
|
7610
7694
|
"data-test-id": "rich-text-editor"
|
|
7611
7695
|
}, /*#__PURE__*/React__default.createElement(Plate, {
|
|
7612
7696
|
id: id,
|
|
@@ -7628,6 +7712,7 @@ var RichTextEditor = function RichTextEditor(props) {
|
|
|
7628
7712
|
var sdk = props.sdk,
|
|
7629
7713
|
isInitiallyDisabled = props.isInitiallyDisabled,
|
|
7630
7714
|
onAction = props.onAction,
|
|
7715
|
+
restrictedMarks = props.restrictedMarks,
|
|
7631
7716
|
otherProps = _objectWithoutPropertiesLoose(props, _excluded);
|
|
7632
7717
|
|
|
7633
7718
|
var isEmptyValue = useCallback(function (value) {
|
|
@@ -7652,7 +7737,8 @@ var RichTextEditor = function RichTextEditor(props) {
|
|
|
7652
7737
|
sdk: sdk,
|
|
7653
7738
|
onAction: onAction,
|
|
7654
7739
|
isDisabled: disabled,
|
|
7655
|
-
onChange: setValue
|
|
7740
|
+
onChange: setValue,
|
|
7741
|
+
restrictedMarks: restrictedMarks
|
|
7656
7742
|
}));
|
|
7657
7743
|
}));
|
|
7658
7744
|
};
|