@pie-lib/editable-html 11.4.0 → 11.5.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +13 -65
  2. package/package.json +8 -7
  3. package/src/editor.jsx +2 -2
  4. package/src/plugins/media/media-dialog.js +1 -1
  5. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +1 -1
  6. package/src/plugins/toolbar/editor-and-toolbar.jsx +1 -1
  7. package/lib/block-tags.js +0 -25
  8. package/lib/block-tags.js.map +0 -1
  9. package/lib/constants.js +0 -16
  10. package/lib/constants.js.map +0 -1
  11. package/lib/editor.js +0 -1355
  12. package/lib/editor.js.map +0 -1
  13. package/lib/index.js +0 -269
  14. package/lib/index.js.map +0 -1
  15. package/lib/parse-html.js +0 -16
  16. package/lib/parse-html.js.map +0 -1
  17. package/lib/plugins/characters/custom-popper.js +0 -73
  18. package/lib/plugins/characters/custom-popper.js.map +0 -1
  19. package/lib/plugins/characters/index.js +0 -305
  20. package/lib/plugins/characters/index.js.map +0 -1
  21. package/lib/plugins/characters/utils.js +0 -381
  22. package/lib/plugins/characters/utils.js.map +0 -1
  23. package/lib/plugins/css/icons/index.js +0 -37
  24. package/lib/plugins/css/icons/index.js.map +0 -1
  25. package/lib/plugins/css/index.js +0 -397
  26. package/lib/plugins/css/index.js.map +0 -1
  27. package/lib/plugins/customPlugin/index.js +0 -114
  28. package/lib/plugins/customPlugin/index.js.map +0 -1
  29. package/lib/plugins/html/icons/index.js +0 -38
  30. package/lib/plugins/html/icons/index.js.map +0 -1
  31. package/lib/plugins/html/index.js +0 -80
  32. package/lib/plugins/html/index.js.map +0 -1
  33. package/lib/plugins/image/alt-dialog.js +0 -129
  34. package/lib/plugins/image/alt-dialog.js.map +0 -1
  35. package/lib/plugins/image/component.js +0 -419
  36. package/lib/plugins/image/component.js.map +0 -1
  37. package/lib/plugins/image/image-toolbar.js +0 -177
  38. package/lib/plugins/image/image-toolbar.js.map +0 -1
  39. package/lib/plugins/image/index.js +0 -263
  40. package/lib/plugins/image/index.js.map +0 -1
  41. package/lib/plugins/image/insert-image-handler.js +0 -161
  42. package/lib/plugins/image/insert-image-handler.js.map +0 -1
  43. package/lib/plugins/index.js +0 -402
  44. package/lib/plugins/index.js.map +0 -1
  45. package/lib/plugins/list/index.js +0 -334
  46. package/lib/plugins/list/index.js.map +0 -1
  47. package/lib/plugins/math/index.js +0 -454
  48. package/lib/plugins/math/index.js.map +0 -1
  49. package/lib/plugins/media/index.js +0 -387
  50. package/lib/plugins/media/index.js.map +0 -1
  51. package/lib/plugins/media/media-dialog.js +0 -709
  52. package/lib/plugins/media/media-dialog.js.map +0 -1
  53. package/lib/plugins/media/media-toolbar.js +0 -101
  54. package/lib/plugins/media/media-toolbar.js.map +0 -1
  55. package/lib/plugins/media/media-wrapper.js +0 -93
  56. package/lib/plugins/media/media-wrapper.js.map +0 -1
  57. package/lib/plugins/rendering/index.js +0 -46
  58. package/lib/plugins/rendering/index.js.map +0 -1
  59. package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -254
  60. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +0 -1
  61. package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -97
  62. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +0 -1
  63. package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -57
  64. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +0 -1
  65. package/lib/plugins/respArea/icons/index.js +0 -95
  66. package/lib/plugins/respArea/icons/index.js.map +0 -1
  67. package/lib/plugins/respArea/index.js +0 -341
  68. package/lib/plugins/respArea/index.js.map +0 -1
  69. package/lib/plugins/respArea/inline-dropdown/index.js +0 -75
  70. package/lib/plugins/respArea/inline-dropdown/index.js.map +0 -1
  71. package/lib/plugins/respArea/math-templated/index.js +0 -130
  72. package/lib/plugins/respArea/math-templated/index.js.map +0 -1
  73. package/lib/plugins/respArea/utils.js +0 -125
  74. package/lib/plugins/respArea/utils.js.map +0 -1
  75. package/lib/plugins/table/CustomTablePlugin.js +0 -133
  76. package/lib/plugins/table/CustomTablePlugin.js.map +0 -1
  77. package/lib/plugins/table/icons/index.js +0 -69
  78. package/lib/plugins/table/icons/index.js.map +0 -1
  79. package/lib/plugins/table/index.js +0 -483
  80. package/lib/plugins/table/index.js.map +0 -1
  81. package/lib/plugins/table/table-toolbar.js +0 -187
  82. package/lib/plugins/table/table-toolbar.js.map +0 -1
  83. package/lib/plugins/textAlign/icons/index.js +0 -226
  84. package/lib/plugins/textAlign/icons/index.js.map +0 -1
  85. package/lib/plugins/textAlign/index.js +0 -34
  86. package/lib/plugins/textAlign/index.js.map +0 -1
  87. package/lib/plugins/toolbar/default-toolbar.js +0 -229
  88. package/lib/plugins/toolbar/default-toolbar.js.map +0 -1
  89. package/lib/plugins/toolbar/done-button.js +0 -53
  90. package/lib/plugins/toolbar/done-button.js.map +0 -1
  91. package/lib/plugins/toolbar/editor-and-toolbar.js +0 -286
  92. package/lib/plugins/toolbar/editor-and-toolbar.js.map +0 -1
  93. package/lib/plugins/toolbar/index.js +0 -34
  94. package/lib/plugins/toolbar/index.js.map +0 -1
  95. package/lib/plugins/toolbar/toolbar-buttons.js +0 -194
  96. package/lib/plugins/toolbar/toolbar-buttons.js.map +0 -1
  97. package/lib/plugins/toolbar/toolbar.js +0 -376
  98. package/lib/plugins/toolbar/toolbar.js.map +0 -1
  99. package/lib/plugins/utils.js +0 -62
  100. package/lib/plugins/utils.js.map +0 -1
  101. package/lib/serialization.js +0 -677
  102. package/lib/serialization.js.map +0 -1
  103. package/lib/shared/alert-dialog.js +0 -75
  104. package/lib/shared/index.js +0 -136
  105. package/lib/theme.js +0 -9
  106. package/lib/theme.js.map +0 -1
@@ -1,161 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _slate = require("slate");
15
-
16
- var _debug = _interopRequireDefault(require("debug"));
17
-
18
- var log = (0, _debug["default"])('@pie-lib:editable-html:image:insert-image-handler');
19
- /**
20
- * Handles user selection, insertion (or cancellation) of an image into the editor.
21
- * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
22
- * @param {Function} onFinish - a function to call if uploading fails or succeeds
23
- * @param {Function} getValue - a function to return the value of the editor
24
- * @param {Function} onChange - callback to notify changes applied by the handler
25
- * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
26
- */
27
-
28
- var InsertImageHandler = /*#__PURE__*/function () {
29
- function InsertImageHandler(placeholderBlock, onFinish, getValue, onChange) {
30
- var isPasted = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
31
- (0, _classCallCheck2["default"])(this, InsertImageHandler);
32
- this.placeholderBlock = placeholderBlock;
33
- this.getValue = getValue;
34
- this.onFinish = onFinish;
35
- this.onChange = onChange;
36
- this.isPasted = isPasted;
37
- this.chosenFile = null;
38
- }
39
-
40
- (0, _createClass2["default"])(InsertImageHandler, [{
41
- key: "getPlaceholderInDocument",
42
- value: function getPlaceholderInDocument(value) {
43
- var document = value.document;
44
- var directChild = document.getChild(this.placeholderBlock.key);
45
-
46
- if (directChild) {
47
- return directChild;
48
- }
49
-
50
- var child = document.getDescendant(this.placeholderBlock.key);
51
-
52
- if (child) {
53
- return child;
54
- } else {
55
- // eslint-disable-next-line
56
- throw new Error("insert-image: Can't find placeholder!");
57
- }
58
- }
59
- }, {
60
- key: "cancel",
61
- value: function cancel() {
62
- log('insert cancelled');
63
-
64
- try {
65
- var value = this.getValue();
66
- var child = this.getPlaceholderInDocument(value);
67
-
68
- if (child) {
69
- var c = value.change().removeNodeByKey(child.key);
70
- this.onChange(c);
71
- this.onFinish(false);
72
- }
73
- } catch (err) {//
74
- }
75
- }
76
- }, {
77
- key: "done",
78
- value: function done(err, src) {
79
- log('done: err:', err);
80
-
81
- if (err) {
82
- //eslint-disable-next-line
83
- console.log(err);
84
- this.onFinish(false);
85
- } else {
86
- var value = this.getValue();
87
- var child = this.getPlaceholderInDocument(value);
88
- var data = child.data.merge(_slate.Data.create({
89
- loaded: true,
90
- src: src,
91
- percent: 100
92
- }));
93
- var change = value.change().setNodeByKey(this.placeholderBlock.key, {
94
- data: data
95
- });
96
- this.onChange(change);
97
- this.onFinish(true);
98
- }
99
- }
100
- /**
101
- * Notify handler that the user chose a file - will create a change with a preview in the editor.
102
- *
103
- * @param {File} file - the file that the user chose using a file input.
104
- */
105
-
106
- }, {
107
- key: "fileChosen",
108
- value: function fileChosen(file) {
109
- var _this = this;
110
-
111
- if (!file) {
112
- return;
113
- } // Save the chosen file to this.chosenFile
114
-
115
-
116
- this.chosenFile = file;
117
- log('[fileChosen] file: ', file);
118
- var reader = new FileReader();
119
-
120
- reader.onload = function () {
121
- var value = _this.getValue();
122
-
123
- var dataURL = reader.result;
124
-
125
- var child = _this.getPlaceholderInDocument(value);
126
-
127
- var data = child.data.set('src', dataURL);
128
- var change = value.change().setNodeByKey(_this.placeholderBlock.key, {
129
- data: data
130
- });
131
-
132
- _this.onChange(change);
133
- };
134
-
135
- reader.readAsDataURL(file);
136
- }
137
- }, {
138
- key: "progress",
139
- value: function progress(percent, bytes, total) {
140
- log('progress: ', percent, bytes, total);
141
- var value = this.getValue();
142
- var child = this.getPlaceholderInDocument(value);
143
- var data = child.data.set('percent', percent);
144
- var change = value.change().setNodeByKey(this.placeholderBlock.key, {
145
- data: data
146
- });
147
- this.onChange(change);
148
- } // Add a getter method to retrieve the chosen file
149
-
150
- }, {
151
- key: "getChosenFile",
152
- value: function getChosenFile() {
153
- return this.chosenFile;
154
- }
155
- }]);
156
- return InsertImageHandler;
157
- }();
158
-
159
- var _default = InsertImageHandler;
160
- exports["default"] = _default;
161
- //# sourceMappingURL=insert-image-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/plugins/image/insert-image-handler.js"],"names":["log","InsertImageHandler","placeholderBlock","onFinish","getValue","onChange","isPasted","chosenFile","value","document","directChild","getChild","key","child","getDescendant","Error","getPlaceholderInDocument","c","change","removeNodeByKey","err","src","console","data","merge","Data","create","loaded","percent","setNodeByKey","file","reader","FileReader","onload","dataURL","result","set","readAsDataURL","bytes","total"],"mappings":"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","sourcesContent":["import { Data } from 'slate';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:image:insert-image-handler');\n\n/**\n * Handles user selection, insertion (or cancellation) of an image into the editor.\n * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image\n * @param {Function} onFinish - a function to call if uploading fails or succeeds\n * @param {Function} getValue - a function to return the value of the editor\n * @param {Function} onChange - callback to notify changes applied by the handler\n * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted\n */\nclass InsertImageHandler {\n constructor(placeholderBlock, onFinish, getValue, onChange, isPasted = false) {\n this.placeholderBlock = placeholderBlock;\n this.getValue = getValue;\n this.onFinish = onFinish;\n this.onChange = onChange;\n this.isPasted = isPasted;\n this.chosenFile = null;\n }\n\n getPlaceholderInDocument(value) {\n const { document } = value;\n const directChild = document.getChild(this.placeholderBlock.key);\n\n if (directChild) {\n return directChild;\n }\n\n const child = document.getDescendant(this.placeholderBlock.key);\n\n if (child) {\n return child;\n } else {\n // eslint-disable-next-line\n throw new Error(\"insert-image: Can't find placeholder!\");\n }\n }\n\n cancel() {\n log('insert cancelled');\n\n try {\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n\n if (child) {\n const c = value.change().removeNodeByKey(child.key);\n this.onChange(c);\n this.onFinish(false);\n }\n } catch (err) {\n //\n }\n }\n\n done(err, src) {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.onFinish(false);\n } else {\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.merge(Data.create({ loaded: true, src, percent: 100 }));\n\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n this.onFinish(true);\n }\n }\n\n /**\n * Notify handler that the user chose a file - will create a change with a preview in the editor.\n *\n * @param {File} file - the file that the user chose using a file input.\n */\n fileChosen(file) {\n if (!file) {\n return;\n }\n\n // Save the chosen file to this.chosenFile\n this.chosenFile = file;\n\n log('[fileChosen] file: ', file);\n const reader = new FileReader();\n reader.onload = () => {\n const value = this.getValue();\n const dataURL = reader.result;\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('src', dataURL);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n };\n reader.readAsDataURL(file);\n }\n\n progress(percent, bytes, total) {\n log('progress: ', percent, bytes, total);\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('percent', percent);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n }\n\n // Add a getter method to retrieve the chosen file\n getChosenFile() {\n return this.chosenFile;\n }\n}\n\nexport default InsertImageHandler;\n"],"file":"insert-image-handler.js"}
@@ -1,402 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _slateHotkeys = _interopRequireDefault(require("slate-hotkeys"));
15
-
16
- var _slateDevEnvironment = require("slate-dev-environment");
17
-
18
- var _slate = require("slate");
19
-
20
- var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
21
-
22
- var _FormatQuote = _interopRequireDefault(require("@material-ui/icons/FormatQuote"));
23
-
24
- var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
25
-
26
- var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
27
-
28
- var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
29
-
30
- var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
31
-
32
- var _image = _interopRequireDefault(require("./image"));
33
-
34
- var _media = _interopRequireDefault(require("./media"));
35
-
36
- var _characters = _interopRequireDefault(require("./characters"));
37
-
38
- var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
39
-
40
- var _math = _interopRequireDefault(require("./math"));
41
-
42
- var _react = _interopRequireDefault(require("react"));
43
-
44
- var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
45
-
46
- var _toolbar = _interopRequireDefault(require("./toolbar"));
47
-
48
- var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
49
-
50
- var _compact = _interopRequireDefault(require("lodash/compact"));
51
-
52
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
53
-
54
- var _slateSoftBreak = _interopRequireDefault(require("slate-soft-break"));
55
-
56
- var _debug = _interopRequireDefault(require("debug"));
57
-
58
- var _list = _interopRequireDefault(require("./list"));
59
-
60
- var _table = _interopRequireDefault(require("./table"));
61
-
62
- var _respArea = _interopRequireDefault(require("./respArea"));
63
-
64
- var _html = _interopRequireDefault(require("./html"));
65
-
66
- var _css = _interopRequireDefault(require("./css"));
67
-
68
- var _customPlugin = _interopRequireDefault(require("./customPlugin"));
69
-
70
- var _rendering = _interopRequireDefault(require("./rendering"));
71
-
72
- var _textAlign = _interopRequireDefault(require("./textAlign"));
73
-
74
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
75
-
76
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
77
-
78
- var log = (0, _debug["default"])('@pie-lib:editable-html:plugins');
79
-
80
- var SuperscriptIcon = function SuperscriptIcon() {
81
- return /*#__PURE__*/_react["default"].createElement("svg", {
82
- xmlns: "http://www.w3.org/2000/svg",
83
- height: "24px",
84
- viewBox: "0 0 24 24",
85
- width: "24px",
86
- fill: "none"
87
- }, /*#__PURE__*/_react["default"].createElement("path", {
88
- d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
89
- fill: "currentColor"
90
- }));
91
- };
92
-
93
- var SubscriptIcon = function SubscriptIcon() {
94
- return /*#__PURE__*/_react["default"].createElement("svg", {
95
- xmlns: "http://www.w3.org/2000/svg",
96
- height: "24px",
97
- viewBox: "0 0 24 24",
98
- width: "24px",
99
- fill: "none"
100
- }, /*#__PURE__*/_react["default"].createElement("path", {
101
- d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
102
- fill: "currentColor"
103
- }));
104
- };
105
-
106
- var HeadingIcon = function HeadingIcon() {
107
- return /*#__PURE__*/_react["default"].createElement("svg", {
108
- width: "30",
109
- height: "28",
110
- viewBox: "0 0 30 28",
111
- fill: "none",
112
- xmlns: "http://www.w3.org/2000/svg",
113
- style: {
114
- width: '20px',
115
- height: '18px'
116
- }
117
- }, /*#__PURE__*/_react["default"].createElement("path", {
118
- d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
119
- fill: "currentColor"
120
- }));
121
- };
122
-
123
- var STYLES_MAP = {
124
- h3: {
125
- fontSize: 'inherit',
126
- fontWeight: 'inherit'
127
- },
128
- blockquote: {
129
- background: '#f9f9f9',
130
- borderLeft: '5px solid #ccc',
131
- margin: '1.5em 10px',
132
- padding: '.5em 10px'
133
- }
134
- };
135
-
136
- function MarkHotkey(options) {
137
- var type = options.type,
138
- key = options.key,
139
- icon = options.icon,
140
- tag = options.tag; // Return our "plugin" object, containing the `onKeyDown` handler.
141
-
142
- return {
143
- name: type,
144
- toolbar: {
145
- isMark: true,
146
- type: type,
147
- icon: icon,
148
- onToggle: function onToggle(change) {
149
- log('[onToggleMark] type: ', type);
150
- var selection = change.value.selection;
151
-
152
- if (['blockquote', 'h3'].includes(type)) {
153
- var texts = change.value.document.getTextsAtRangeAsArray(selection);
154
- var onlyOneText = texts.length === 1;
155
- var hasMark = false;
156
- var sameMark = true;
157
- texts.forEach(function (t) {
158
- var marks = t.getMarksAsArray();
159
- var markIsThere = marks.find(function (m) {
160
- return m.type === type;
161
- });
162
-
163
- if (!markIsThere) {
164
- // not all texts have this mark
165
- sameMark = false;
166
- } else {
167
- // at least one mark
168
- hasMark = true;
169
- }
170
- });
171
- var shouldContinue = onlyOneText || sameMark || !hasMark;
172
-
173
- if (!shouldContinue) {
174
- return change;
175
- }
176
-
177
- if (selection.startKey === selection.endKey && selection.anchorOffset === selection.focusOffset) {
178
- var textNode = change.value.document.getNode(selection.startKey); // select the whole line if there is no selection
179
-
180
- change.moveFocusTo(textNode.key, 0).moveAnchorTo(textNode.key, textNode.text.length); // remove toggle
181
-
182
- var _hasMark = change.value.activeMarks.find(function (entry) {
183
- return entry.type === type;
184
- });
185
-
186
- if (_hasMark) {
187
- change.removeMark(_hasMark);
188
- } else {
189
- var newMark = _slate.Mark.create(type);
190
-
191
- change.addMark(newMark);
192
- } // move focus to end of text
193
-
194
-
195
- return change.moveFocusTo(textNode.key, textNode.text.length).moveAnchorTo(textNode.key, textNode.text.length);
196
- }
197
- }
198
-
199
- return change.toggleMark(type);
200
- }
201
- },
202
- renderMark: function renderMark(props) {
203
- if (props.mark.type === type) {
204
- var _ref = props.node || {},
205
- data = _ref.data;
206
-
207
- var jsonData = (data === null || data === void 0 ? void 0 : data.toJSON()) || {};
208
- var K = tag || type;
209
- var additionalStyles = STYLES_MAP[K];
210
-
211
- if (additionalStyles) {
212
- if (!jsonData.attributes) {
213
- jsonData.attributes = {};
214
- }
215
-
216
- jsonData.attributes.style = _objectSpread(_objectSpread({}, jsonData.attributes.style), additionalStyles);
217
- }
218
-
219
- return /*#__PURE__*/_react["default"].createElement(K, jsonData.attributes, props.children);
220
- }
221
- },
222
- onKeyDown: function onKeyDown(event, change) {
223
- // Check that the key pressed matches our `key` option.
224
- if (!event.metaKey || event.key != key) return; // Prevent the default characters from being inserted.
225
-
226
- event.preventDefault(); // Toggle the mark `type`.
227
-
228
- change.toggleMark(type);
229
- return true;
230
- }
231
- };
232
- }
233
-
234
- var ALL_PLUGINS = ['bold', // 'code',
235
- 'html', 'extraCSSRules', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'text-align', 'blockquote', 'h3', 'table', 'video', 'audio', 'responseArea', 'redo', 'undo', 'superscript', 'subscript'];
236
- exports.ALL_PLUGINS = ALL_PLUGINS;
237
- var DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
238
- return !['responseArea', 'h3', 'blockquote'].includes(plug);
239
- });
240
- exports.DEFAULT_PLUGINS = DEFAULT_PLUGINS;
241
- var ICON_MAP = {
242
- undo: _Undo["default"],
243
- redo: _Redo["default"]
244
- };
245
-
246
- function UndoRedo(type) {
247
- var IconToUse = ICON_MAP[type];
248
- return {
249
- name: type,
250
- toolbar: {
251
- type: type,
252
- icon: /*#__PURE__*/_react["default"].createElement(IconToUse, null),
253
- ariaLabel: type === 'undo' ? 'Undo (revert the last action)' : 'Redo (reapply the last undone action)',
254
- onClick: function onClick(value, onChange) {
255
- var change = value.change();
256
- onChange(change[type]());
257
- }
258
- }
259
- };
260
- }
261
-
262
- function EnterHandlingPlugin() {
263
- return {
264
- name: 'enterHandling',
265
- onKeyDown: function onKeyDown(event, change) {
266
- if (_slateHotkeys["default"].isSplitBlock(event) && !_slateDevEnvironment.IS_IOS) {
267
- if (change.value.isInVoid) {
268
- return change.collapseToStartOfNextText();
269
- }
270
-
271
- change.splitBlock();
272
- var range = change.value.selection;
273
- var newBlock = change.value.document.getClosestBlock(range.startKey);
274
-
275
- if (newBlock.type !== 'paragraph') {
276
- change.setNodeByKey(newBlock.key, {
277
- type: 'paragraph'
278
- });
279
- }
280
-
281
- return change;
282
- }
283
-
284
- return undefined;
285
- }
286
- };
287
- }
288
-
289
- var buildPlugins = function buildPlugins(activePlugins, customPlugins, opts) {
290
- log('[buildPlugins] opts: ', opts);
291
- activePlugins = activePlugins || DEFAULT_PLUGINS;
292
-
293
- var addIf = function addIf(key, p) {
294
- return activePlugins.includes(key) && p;
295
- };
296
-
297
- var imagePlugin = opts.image && opts.image.onDelete && (0, _image["default"])(opts.image);
298
- var mathPlugin = (0, _math["default"])(opts.math);
299
- var respAreaPlugin = opts.responseArea && opts.responseArea.type && (0, _respArea["default"])(opts.responseArea, (0, _compact["default"])([mathPlugin]));
300
- var cssPlugin = !(0, _isEmpty["default"])(opts.extraCSSRules) && (0, _css["default"])(opts.extraCSSRules);
301
- var languageCharactersPlugins = ((opts === null || opts === void 0 ? void 0 : opts.languageCharacters) || []).map(function (config) {
302
- return (0, _characters["default"])(_objectSpread(_objectSpread({}, config), {}, {
303
- keyPadCharacterRef: opts.keyPadCharacterRef,
304
- setKeypadInteraction: opts.setKeypadInteraction
305
- }));
306
- });
307
- var tablePlugins = [imagePlugin, mathPlugin, respAreaPlugin].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins));
308
-
309
- if (opts.responseArea && opts.responseArea.type === 'math-templated') {
310
- tablePlugins.push(respAreaPlugin);
311
- }
312
-
313
- var builtCustomPlugins = [];
314
- customPlugins.forEach(function (customPlugin) {
315
- var _ref2 = customPlugin || {},
316
- event = _ref2.event,
317
- icon = _ref2.icon,
318
- iconType = _ref2.iconType,
319
- iconAlt = _ref2.iconAlt;
320
-
321
- function isValidEventName(eventName) {
322
- // Check if eventName is a non-empty string
323
- if (typeof eventName !== 'string' || eventName.length === 0) {
324
- return false;
325
- } // Regular expression to match valid event names (only alphanumeric characters and underscore)
326
-
327
-
328
- var regex = /^[a-zA-Z0-9_]+$/; // Check if the eventName matches the regular expression
329
-
330
- return regex.test(eventName);
331
- }
332
-
333
- if (!isValidEventName(event)) {
334
- console.error("The event name: ".concat(event, " is not a valid event name!"));
335
- return;
336
- }
337
-
338
- if (!icon && !iconType && !iconAlt) {
339
- console.error('Your custom button requires icon, iconType and iconAlt');
340
- return;
341
- }
342
-
343
- builtCustomPlugins.push((0, _customPlugin["default"])('custom-plugin', customPlugin));
344
- });
345
- return (0, _compact["default"])([addIf('table', (0, _table["default"])(opts.table, (0, _compact["default"])(tablePlugins))), addIf('bold', MarkHotkey({
346
- key: 'b',
347
- type: 'bold',
348
- icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
349
- tag: 'strong'
350
- })), // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),
351
- addIf('italic', MarkHotkey({
352
- key: 'i',
353
- type: 'italic',
354
- icon: /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null),
355
- tag: 'em'
356
- })), addIf('strikethrough', MarkHotkey({
357
- key: '~',
358
- type: 'strikethrough',
359
- icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
360
- tag: 'del'
361
- })), addIf('underline', MarkHotkey({
362
- key: 'u',
363
- type: 'underline',
364
- icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
365
- tag: 'u'
366
- })), // icon should be modifies accordingly
367
- addIf('superscript', MarkHotkey({
368
- type: 'sup',
369
- icon: /*#__PURE__*/_react["default"].createElement(SuperscriptIcon, null),
370
- tag: 'sup'
371
- })), // icon should be modifies accordingly
372
- addIf('subscript', MarkHotkey({
373
- type: 'sub',
374
- icon: /*#__PURE__*/_react["default"].createElement(SubscriptIcon, null),
375
- tag: 'sub'
376
- })), addIf('image', imagePlugin), addIf('video', (0, _media["default"])('video', opts.media)), addIf('audio', (0, _media["default"])('audio', opts.media)), addIf('math', mathPlugin)].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins.map(function (plugin) {
377
- return addIf('languageCharacters', plugin);
378
- })), [addIf('text-align', (0, _textAlign["default"])(opts.textAlign)), addIf('blockquote', MarkHotkey({
379
- key: 'q',
380
- type: 'blockquote',
381
- icon: /*#__PURE__*/_react["default"].createElement(_FormatQuote["default"], null),
382
- tag: 'blockquote'
383
- })), addIf('h3', MarkHotkey({
384
- key: 'h3',
385
- type: 'h3',
386
- icon: /*#__PURE__*/_react["default"].createElement(HeadingIcon, null),
387
- tag: 'h3'
388
- })), addIf('bulleted-list', (0, _list["default"])({
389
- key: 'l',
390
- type: 'ul_list',
391
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null)
392
- })), addIf('numbered-list', (0, _list["default"])({
393
- key: 'n',
394
- type: 'ol_list',
395
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)
396
- })), addIf('undo', UndoRedo('undo')), addIf('redo', UndoRedo('redo')), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
397
- shift: true
398
- })], builtCustomPlugins, [addIf('responseArea', respAreaPlugin), cssPlugin, addIf('html', (0, _html["default"])(opts.html)), EnterHandlingPlugin(), (0, _rendering["default"])()]));
399
- };
400
-
401
- exports.buildPlugins = buildPlugins;
402
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/plugins/index.jsx"],"names":["log","SuperscriptIcon","SubscriptIcon","HeadingIcon","width","height","STYLES_MAP","h3","fontSize","fontWeight","blockquote","background","borderLeft","margin","padding","MarkHotkey","options","type","key","icon","tag","name","toolbar","isMark","onToggle","change","selection","value","includes","texts","document","getTextsAtRangeAsArray","onlyOneText","length","hasMark","sameMark","forEach","t","marks","getMarksAsArray","markIsThere","find","m","shouldContinue","startKey","endKey","anchorOffset","focusOffset","textNode","getNode","moveFocusTo","moveAnchorTo","text","activeMarks","entry","removeMark","newMark","Mark","create","addMark","toggleMark","renderMark","props","mark","node","data","jsonData","toJSON","K","additionalStyles","attributes","style","children","onKeyDown","event","metaKey","preventDefault","ALL_PLUGINS","DEFAULT_PLUGINS","filter","plug","ICON_MAP","undo","Undo","redo","Redo","UndoRedo","IconToUse","ariaLabel","onClick","onChange","EnterHandlingPlugin","Hotkeys","isSplitBlock","IS_IOS","isInVoid","collapseToStartOfNextText","splitBlock","range","newBlock","getClosestBlock","setNodeByKey","undefined","buildPlugins","activePlugins","customPlugins","opts","addIf","p","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","cssPlugin","extraCSSRules","languageCharactersPlugins","languageCharacters","map","config","keyPadCharacterRef","setKeypadInteraction","tablePlugins","push","builtCustomPlugins","customPlugin","iconType","iconAlt","isValidEventName","eventName","regex","test","console","error","table","media","plugin","textAlign","shift","html"],"mappings":"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","sourcesContent":["import Hotkeys from 'slate-hotkeys';\nimport { IS_IOS } from 'slate-dev-environment';\nimport { Mark } from 'slate';\nimport Bold from '@material-ui/icons/FormatBold';\nimport FormatQuote from '@material-ui/icons/FormatQuote';\n//import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\nimport Redo from '@material-ui/icons/Redo';\nimport Undo from '@material-ui/icons/Undo';\nimport ImagePlugin from './image';\nimport MediaPlugin from './media';\nimport CharactersPlugin from './characters';\nimport Italic from '@material-ui/icons/FormatItalic';\nimport MathPlugin from './math';\nimport React from 'react';\nimport Strikethrough from '@material-ui/icons/FormatStrikethrough';\nimport ToolbarPlugin from './toolbar';\nimport Underline from '@material-ui/icons/FormatUnderlined';\nimport compact from 'lodash/compact';\nimport isEmpty from 'lodash/isEmpty';\nimport SoftBreakPlugin from 'slate-soft-break';\nimport debug from 'debug';\nimport List from './list';\nimport TablePlugin from './table';\nimport RespAreaPlugin from './respArea';\nimport HtmlPlugin from './html';\nimport CSSPlugin from './css';\nimport CustomPlugin from './customPlugin';\nimport RenderingPlugin from './rendering';\nimport TextAlign from './textAlign';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nconst SuperscriptIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"none\">\n <path\n d=\"M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst SubscriptIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"none\">\n <path\n d=\"M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst HeadingIcon = () => (\n <svg\n width=\"30\"\n height=\"28\"\n viewBox=\"0 0 30 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ width: '20px', height: '18px' }}\n >\n <path\n d=\"M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nconst STYLES_MAP = {\n h3: {\n fontSize: 'inherit',\n fontWeight: 'inherit',\n },\n blockquote: {\n background: '#f9f9f9',\n borderLeft: '5px solid #ccc',\n margin: '1.5em 10px',\n padding: '.5em 10px',\n },\n};\n\nfunction MarkHotkey(options) {\n const { type, key, icon, tag } = options;\n\n // Return our \"plugin\" object, containing the `onKeyDown` handler.\n return {\n name: type,\n toolbar: {\n isMark: true,\n type,\n icon,\n onToggle: (change) => {\n log('[onToggleMark] type: ', type);\n const { selection } = change.value;\n\n if (['blockquote', 'h3'].includes(type)) {\n const texts = change.value.document.getTextsAtRangeAsArray(selection);\n const onlyOneText = texts.length === 1;\n let hasMark = false;\n let sameMark = true;\n\n texts.forEach((t) => {\n const marks = t.getMarksAsArray();\n const markIsThere = marks.find((m) => m.type === type);\n\n if (!markIsThere) {\n // not all texts have this mark\n sameMark = false;\n } else {\n // at least one mark\n hasMark = true;\n }\n });\n\n const shouldContinue = onlyOneText || sameMark || !hasMark;\n\n if (!shouldContinue) {\n return change;\n }\n\n if (selection.startKey === selection.endKey && selection.anchorOffset === selection.focusOffset) {\n const textNode = change.value.document.getNode(selection.startKey);\n\n // select the whole line if there is no selection\n change.moveFocusTo(textNode.key, 0).moveAnchorTo(textNode.key, textNode.text.length);\n\n // remove toggle\n const hasMark = change.value.activeMarks.find((entry) => {\n return entry.type === type;\n });\n\n if (hasMark) {\n change.removeMark(hasMark);\n } else {\n const newMark = Mark.create(type);\n\n change.addMark(newMark);\n }\n\n // move focus to end of text\n return change\n .moveFocusTo(textNode.key, textNode.text.length)\n .moveAnchorTo(textNode.key, textNode.text.length);\n }\n }\n\n return change.toggleMark(type);\n },\n },\n renderMark(props) {\n if (props.mark.type === type) {\n const { data } = props.node || {};\n const jsonData = data?.toJSON() || {};\n const K = tag || type;\n const additionalStyles = STYLES_MAP[K];\n\n if (additionalStyles) {\n if (!jsonData.attributes) {\n jsonData.attributes = {};\n }\n\n jsonData.attributes.style = {\n ...jsonData.attributes.style,\n ...additionalStyles,\n };\n }\n\n return <K {...jsonData.attributes}>{props.children}</K>;\n }\n },\n onKeyDown(event, change) {\n // Check that the key pressed matches our `key` option.\n if (!event.metaKey || event.key != key) return;\n\n // Prevent the default characters from being inserted.\n event.preventDefault();\n\n // Toggle the mark `type`.\n change.toggleMark(type);\n return true;\n },\n };\n}\n\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'html',\n 'extraCSSRules',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'blockquote',\n 'h3',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'redo',\n 'undo',\n 'superscript',\n 'subscript',\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => !['responseArea', 'h3', 'blockquote'].includes(plug));\n\nconst ICON_MAP = {\n undo: Undo,\n redo: Redo,\n};\nfunction UndoRedo(type) {\n const IconToUse = ICON_MAP[type];\n\n return {\n name: type,\n toolbar: {\n type,\n icon: <IconToUse />,\n ariaLabel: type === 'undo' ? 'Undo (revert the last action)' : 'Redo (reapply the last undone action)',\n onClick: (value, onChange) => {\n const change = value.change();\n\n onChange(change[type]());\n },\n },\n };\n}\n\nfunction EnterHandlingPlugin() {\n return {\n name: 'enterHandling',\n onKeyDown: (event, change) => {\n if (Hotkeys.isSplitBlock(event) && !IS_IOS) {\n if (change.value.isInVoid) {\n return change.collapseToStartOfNextText();\n }\n\n change.splitBlock();\n\n const range = change.value.selection;\n const newBlock = change.value.document.getClosestBlock(range.startKey);\n\n if (newBlock.type !== 'paragraph') {\n change.setNodeByKey(newBlock.key, {\n type: 'paragraph',\n });\n }\n\n return change;\n }\n\n return undefined;\n },\n };\n}\n\nexport const buildPlugins = (activePlugins, customPlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\n\n const imagePlugin = opts.image && opts.image.onDelete && ImagePlugin(opts.image);\n const mathPlugin = MathPlugin(opts.math);\n const respAreaPlugin =\n opts.responseArea && opts.responseArea.type && RespAreaPlugin(opts.responseArea, compact([mathPlugin]));\n const cssPlugin = !isEmpty(opts.extraCSSRules) && CSSPlugin(opts.extraCSSRules);\n\n const languageCharactersPlugins = (opts?.languageCharacters || []).map((config) =>\n CharactersPlugin({\n ...config,\n keyPadCharacterRef: opts.keyPadCharacterRef,\n setKeypadInteraction: opts.setKeypadInteraction,\n }),\n );\n\n const tablePlugins = [imagePlugin, mathPlugin, respAreaPlugin, ...languageCharactersPlugins];\n\n if (opts.responseArea && opts.responseArea.type === 'math-templated') {\n tablePlugins.push(respAreaPlugin);\n }\n\n let builtCustomPlugins = [];\n\n customPlugins.forEach((customPlugin) => {\n const { event, icon, iconType, iconAlt } = customPlugin || {};\n\n function isValidEventName(eventName) {\n // Check if eventName is a non-empty string\n if (typeof eventName !== 'string' || eventName.length === 0) {\n return false;\n }\n\n // Regular expression to match valid event names (only alphanumeric characters and underscore)\n const regex = /^[a-zA-Z0-9_]+$/;\n\n // Check if the eventName matches the regular expression\n return regex.test(eventName);\n }\n\n if (!isValidEventName(event)) {\n console.error(`The event name: ${event} is not a valid event name!`);\n return;\n }\n\n if (!icon && !iconType && !iconAlt) {\n console.error('Your custom button requires icon, iconType and iconAlt');\n return;\n }\n\n builtCustomPlugins.push(CustomPlugin('custom-plugin', customPlugin));\n });\n\n return compact([\n addIf('table', TablePlugin(opts.table, compact(tablePlugins))),\n addIf('bold', MarkHotkey({ key: 'b', type: 'bold', icon: <Bold />, tag: 'strong' })),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic', MarkHotkey({ key: 'i', type: 'italic', icon: <Italic />, tag: 'em' })),\n addIf(\n 'strikethrough',\n MarkHotkey({\n key: '~',\n type: 'strikethrough',\n icon: <Strikethrough />,\n tag: 'del',\n }),\n ),\n addIf('underline', MarkHotkey({ key: 'u', type: 'underline', icon: <Underline />, tag: 'u' })),\n // icon should be modifies accordingly\n addIf('superscript', MarkHotkey({ type: 'sup', icon: <SuperscriptIcon />, tag: 'sup' })),\n // icon should be modifies accordingly\n addIf('subscript', MarkHotkey({ type: 'sub', icon: <SubscriptIcon />, tag: 'sub' })),\n addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n ...languageCharactersPlugins.map((plugin) => addIf('languageCharacters', plugin)),\n addIf('text-align', TextAlign(opts.textAlign)),\n addIf('blockquote', MarkHotkey({ key: 'q', type: 'blockquote', icon: <FormatQuote />, tag: 'blockquote' })),\n addIf('h3', MarkHotkey({ key: 'h3', type: 'h3', icon: <HeadingIcon />, tag: 'h3' })),\n addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),\n addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),\n addIf('undo', UndoRedo('undo')),\n addIf('redo', UndoRedo('redo')),\n ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin({ shift: true }),\n ...builtCustomPlugins,\n addIf('responseArea', respAreaPlugin),\n cssPlugin,\n addIf('html', HtmlPlugin(opts.html)),\n EnterHandlingPlugin(),\n RenderingPlugin(),\n ]);\n};\n"],"file":"index.js"}