@pie-lib/editable-html 12.1.0-next.2 → 12.1.0-next.5

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 (103) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/block-tags.js +24 -0
  3. package/lib/block-tags.js.map +1 -0
  4. package/lib/constants.js +11 -0
  5. package/lib/constants.js.map +1 -0
  6. package/lib/editor.js +1224 -0
  7. package/lib/editor.js.map +1 -0
  8. package/lib/index.js +208 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/parse-html.js +16 -0
  11. package/lib/parse-html.js.map +1 -0
  12. package/lib/plugins/characters/custom-popper.js +57 -0
  13. package/lib/plugins/characters/custom-popper.js.map +1 -0
  14. package/lib/plugins/characters/index.js +265 -0
  15. package/lib/plugins/characters/index.js.map +1 -0
  16. package/lib/plugins/characters/utils.js +378 -0
  17. package/lib/plugins/characters/utils.js.map +1 -0
  18. package/lib/plugins/css/icons/index.js +25 -0
  19. package/lib/plugins/css/icons/index.js.map +1 -0
  20. package/lib/plugins/css/index.js +338 -0
  21. package/lib/plugins/css/index.js.map +1 -0
  22. package/lib/plugins/customPlugin/index.js +98 -0
  23. package/lib/plugins/customPlugin/index.js.map +1 -0
  24. package/lib/plugins/html/icons/index.js +30 -0
  25. package/lib/plugins/html/icons/index.js.map +1 -0
  26. package/lib/plugins/html/index.js +71 -0
  27. package/lib/plugins/html/index.js.map +1 -0
  28. package/lib/plugins/image/alt-dialog.js +100 -0
  29. package/lib/plugins/image/alt-dialog.js.map +1 -0
  30. package/lib/plugins/image/component.js +343 -0
  31. package/lib/plugins/image/component.js.map +1 -0
  32. package/lib/plugins/image/image-toolbar.js +137 -0
  33. package/lib/plugins/image/image-toolbar.js.map +1 -0
  34. package/lib/plugins/image/index.js +223 -0
  35. package/lib/plugins/image/index.js.map +1 -0
  36. package/lib/plugins/image/insert-image-handler.js +140 -0
  37. package/lib/plugins/image/insert-image-handler.js.map +1 -0
  38. package/lib/plugins/index.js +342 -0
  39. package/lib/plugins/index.js.map +1 -0
  40. package/lib/plugins/list/index.js +288 -0
  41. package/lib/plugins/list/index.js.map +1 -0
  42. package/lib/plugins/math/index.js +402 -0
  43. package/lib/plugins/math/index.js.map +1 -0
  44. package/lib/plugins/media/index.js +330 -0
  45. package/lib/plugins/media/index.js.map +1 -0
  46. package/lib/plugins/media/media-dialog.js +594 -0
  47. package/lib/plugins/media/media-dialog.js.map +1 -0
  48. package/lib/plugins/media/media-toolbar.js +76 -0
  49. package/lib/plugins/media/media-toolbar.js.map +1 -0
  50. package/lib/plugins/media/media-wrapper.js +64 -0
  51. package/lib/plugins/media/media-wrapper.js.map +1 -0
  52. package/lib/plugins/rendering/index.js +36 -0
  53. package/lib/plugins/rendering/index.js.map +1 -0
  54. package/lib/plugins/respArea/drag-in-the-blank/choice.js +271 -0
  55. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -0
  56. package/lib/plugins/respArea/drag-in-the-blank/index.js +55 -0
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
  58. package/lib/plugins/respArea/drag-in-the-blank/utils.js +38 -0
  59. package/lib/plugins/respArea/drag-in-the-blank/utils.js.map +1 -0
  60. package/lib/plugins/respArea/explicit-constructed-response/index.js +50 -0
  61. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
  62. package/lib/plugins/respArea/icons/index.js +72 -0
  63. package/lib/plugins/respArea/icons/index.js.map +1 -0
  64. package/lib/plugins/respArea/index.js +287 -0
  65. package/lib/plugins/respArea/index.js.map +1 -0
  66. package/lib/plugins/respArea/inline-dropdown/index.js +67 -0
  67. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
  68. package/lib/plugins/respArea/math-templated/index.js +112 -0
  69. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  70. package/lib/plugins/respArea/utils.js +95 -0
  71. package/lib/plugins/respArea/utils.js.map +1 -0
  72. package/lib/plugins/table/CustomTablePlugin.js +116 -0
  73. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  74. package/lib/plugins/table/icons/index.js +55 -0
  75. package/lib/plugins/table/icons/index.js.map +1 -0
  76. package/lib/plugins/table/index.js +413 -0
  77. package/lib/plugins/table/index.js.map +1 -0
  78. package/lib/plugins/table/table-toolbar.js +138 -0
  79. package/lib/plugins/table/table-toolbar.js.map +1 -0
  80. package/lib/plugins/textAlign/icons/index.js +187 -0
  81. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  82. package/lib/plugins/textAlign/index.js +26 -0
  83. package/lib/plugins/textAlign/index.js.map +1 -0
  84. package/lib/plugins/toolbar/default-toolbar.js +180 -0
  85. package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
  86. package/lib/plugins/toolbar/done-button.js +35 -0
  87. package/lib/plugins/toolbar/done-button.js.map +1 -0
  88. package/lib/plugins/toolbar/editor-and-toolbar.js +258 -0
  89. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
  90. package/lib/plugins/toolbar/index.js +29 -0
  91. package/lib/plugins/toolbar/index.js.map +1 -0
  92. package/lib/plugins/toolbar/toolbar-buttons.js +145 -0
  93. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
  94. package/lib/plugins/toolbar/toolbar.js +307 -0
  95. package/lib/plugins/toolbar/toolbar.js.map +1 -0
  96. package/lib/plugins/utils.js +42 -0
  97. package/lib/plugins/utils.js.map +1 -0
  98. package/lib/serialization.js +571 -0
  99. package/lib/serialization.js.map +1 -0
  100. package/lib/shared/alert-dialog.js +68 -0
  101. package/lib/theme.js +8 -0
  102. package/lib/theme.js.map +1 -0
  103. package/package.json +7 -7
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = MediaPlugin;
8
+ exports.serialization = exports.insertDialog = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
+ var _react = _interopRequireDefault(require("react"));
13
+ var _client = require("react-dom/client");
14
+ var _slate = require("slate");
15
+ var _Theaters = _interopRequireDefault(require("@mui/icons-material/Theaters"));
16
+ var _VolumeUp = _interopRequireDefault(require("@mui/icons-material/VolumeUp"));
17
+ var _debug = _interopRequireDefault(require("debug"));
18
+ var _mediaDialog = _interopRequireDefault(require("./media-dialog"));
19
+ var _mediaToolbar = _interopRequireDefault(require("./media-toolbar"));
20
+ var _mediaWrapper = _interopRequireDefault(require("./media-wrapper"));
21
+ var _excluded = ["type", "callback", "opts"],
22
+ _excluded2 = ["src", "height", "width", "editing", "tag"];
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image');
26
+ var removeDialogs = function removeDialogs() {
27
+ var prevDialogs = document.querySelectorAll('.insert-media-dialog');
28
+ prevDialogs.forEach(function (s) {
29
+ return s.remove();
30
+ });
31
+ };
32
+ var insertDialog = exports.insertDialog = function insertDialog(props) {
33
+ var newEl = document.createElement('div');
34
+ var type = props.type,
35
+ callback = props.callback,
36
+ opts = props.opts,
37
+ rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
38
+ var initialBodyOverflow = document.body.style.overflow;
39
+ removeDialogs();
40
+ newEl.className = 'insert-media-dialog';
41
+ document.body.style.overflow = 'hidden';
42
+ var handleClose = function handleClose(val, data) {
43
+ callback(val, data);
44
+ newEl.remove();
45
+ document.body.style.overflow = initialBodyOverflow;
46
+ };
47
+ var el = /*#__PURE__*/_react["default"].createElement(_mediaDialog["default"], (0, _extends2["default"])({}, rest, {
48
+ uploadSoundSupport: opts.uploadSoundSupport,
49
+ type: type,
50
+ disablePortal: true,
51
+ open: true,
52
+ handleClose: handleClose
53
+ }));
54
+ var dialogRoot = (0, _client.createRoot)(newEl);
55
+ dialogRoot.render(el);
56
+ document.body.appendChild(newEl);
57
+ };
58
+ var types = ['audio', 'video'];
59
+ function MediaPlugin(type, opts) {
60
+ var toolbar = {
61
+ icon: type === 'audio' ? /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null),
62
+ ariaLabel: type === 'audio' ? 'Insert audio' : 'Insert video',
63
+ onClick: function onClick(value, onChange) {
64
+ log('[toolbar] onClick');
65
+ var inline = _slate.Inline.create({
66
+ type: type,
67
+ isVoid: true,
68
+ data: {
69
+ editing: false,
70
+ ends: undefined,
71
+ height: undefined,
72
+ title: undefined,
73
+ starts: undefined,
74
+ src: undefined,
75
+ url: undefined,
76
+ width: undefined
77
+ }
78
+ });
79
+ var change = value.change().insertInline(inline);
80
+ onChange(change);
81
+ insertDialog({
82
+ type: type,
83
+ opts: opts,
84
+ callback: function callback(val, data) {
85
+ var nodeIsThere = change.value.document.findDescendant(function (d) {
86
+ return d.key === inline.key;
87
+ });
88
+ if (nodeIsThere) {
89
+ if (!val) {
90
+ var c = change.removeNodeByKey(inline.key);
91
+ onChange(c, function () {
92
+ return opts.focus();
93
+ });
94
+ } else {
95
+ var _c = change.setNodeByKey(inline.key, {
96
+ data: data
97
+ });
98
+ onChange(_c, function () {
99
+ return opts.focus('beginning', nodeIsThere);
100
+ });
101
+ }
102
+ } else {
103
+ opts.focus();
104
+ }
105
+ }
106
+ });
107
+ },
108
+ supports: function supports(node) {
109
+ return node.object === 'inline' && node.type === type;
110
+ }
111
+ };
112
+ return {
113
+ name: type,
114
+ toolbar: toolbar,
115
+ deleteNode: function deleteNode(e, node, value, onChange) {
116
+ e.preventDefault();
117
+ var change = value.change().removeNodeByKey(node.key);
118
+ onChange(change);
119
+ },
120
+ renderNode: function renderNode(props) {
121
+ if (props.node.type === type) {
122
+ var node = props.node,
123
+ key = props.key;
124
+ var data = node.data;
125
+ var jsonData = data.toJSON();
126
+ var src = jsonData.src,
127
+ height = jsonData.height,
128
+ width = jsonData.width,
129
+ editing = jsonData.editing,
130
+ tag = jsonData.tag,
131
+ rest = (0, _objectWithoutProperties2["default"])(jsonData, _excluded2);
132
+ var handleEdit = function handleEdit() {
133
+ var change = opts.createChange();
134
+ var c = change.setNodeByKey(key, {
135
+ data: _objectSpread(_objectSpread({}, jsonData), {}, {
136
+ editing: true
137
+ })
138
+ });
139
+ opts.onChange(c, function () {
140
+ insertDialog(_objectSpread(_objectSpread({}, jsonData), {}, {
141
+ edit: true,
142
+ type: type,
143
+ opts: opts,
144
+ callback: function callback(val, data) {
145
+ var key = node.key;
146
+ var nodeIsThere = change.value.document.findDescendant(function (d) {
147
+ return d.type === type && d.data.get('editing');
148
+ });
149
+ if (nodeIsThere && val) {
150
+ var _c2 = change.setNodeByKey(key, {
151
+ data: data,
152
+ editing: false
153
+ });
154
+ opts.onChange(_c2, function () {
155
+ return opts.focus('beginning', nodeIsThere);
156
+ });
157
+ } else {
158
+ opts.focus();
159
+ }
160
+ }
161
+ }));
162
+ });
163
+ };
164
+ var handleDelete = function handleDelete() {
165
+ var change = opts.createChange();
166
+ var c = change.removeNodeByKey(node.key);
167
+ opts.onChange(c);
168
+ };
169
+ var style = {};
170
+ if (width) {
171
+ style.width = "".concat(width, "px");
172
+ }
173
+ if (height) {
174
+ style.height = "".concat(height, "px");
175
+ }
176
+ if (tag === 'audio') {
177
+ return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
178
+ editor: true,
179
+ "data-type": type,
180
+ width: style.width
181
+ }, rest), /*#__PURE__*/_react["default"].createElement("audio", {
182
+ controls: "controls",
183
+ controlsList: "nodownload"
184
+ }, /*#__PURE__*/_react["default"].createElement("source", {
185
+ type: "audio/mp3",
186
+ src: src
187
+ })), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
188
+ hideEdit: true,
189
+ onRemove: handleDelete
190
+ }));
191
+ }
192
+ return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
193
+ editor: true,
194
+ "data-type": type,
195
+ width: style.width
196
+ }, rest), /*#__PURE__*/_react["default"].createElement("iframe", (0, _extends2["default"])({
197
+ frameBorder: "0",
198
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
199
+ allowFullScreen: true,
200
+ src: src,
201
+ "data-editing": editing ? 1 : 0
202
+ }, rest, style)), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
203
+ onEdit: handleEdit,
204
+ onRemove: handleDelete
205
+ }));
206
+ }
207
+ },
208
+ normalizeNode: function normalizeNode(node) {
209
+ var textNodeMap = {};
210
+ var updateNodesArray = [];
211
+ var index = 0;
212
+ if (node.object !== 'document') return;
213
+ node.findDescendant(function (d) {
214
+ if (d.object === 'text') {
215
+ textNodeMap[index] = d;
216
+ }
217
+ var isMedia = types.indexOf(d.type) >= 0;
218
+ if (isMedia) {
219
+ if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {
220
+ updateNodesArray.push(textNodeMap[index - 1]);
221
+ }
222
+ }
223
+ index++;
224
+ });
225
+ if (!updateNodesArray.length) return;
226
+ return function (change) {
227
+ change.withoutNormalization(function () {
228
+ updateNodesArray.forEach(function (n) {
229
+ return change.insertTextByKey(n.key, 0, ' ');
230
+ });
231
+ });
232
+ };
233
+ }
234
+ };
235
+ }
236
+ var serialization = exports.serialization = {
237
+ deserialize: function deserialize(el /*, next*/) {
238
+ var type = el.dataset && el.dataset.type;
239
+ var tag = 'iframe';
240
+ var src;
241
+ var typeIndex = types.indexOf(type);
242
+ if (typeIndex < 0) {
243
+ if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {
244
+ var _el$firstChild;
245
+ type = 'audio';
246
+ tag = 'audio';
247
+ src = (_el$firstChild = el.firstChild) === null || _el$firstChild === void 0 ? void 0 : _el$firstChild.getAttribute('src');
248
+ } else {
249
+ return;
250
+ }
251
+ }
252
+ var _ref = el.dataset || {},
253
+ ends = _ref.ends,
254
+ starts = _ref.starts,
255
+ title = _ref.title,
256
+ editing = _ref.editing,
257
+ url = _ref.url;
258
+ log('deserialize: ', name);
259
+ var width = parseInt(el.getAttribute('width'), 10) || null;
260
+ var height = parseInt(el.getAttribute('height'), 10) || null;
261
+ var out = {
262
+ object: 'inline',
263
+ type: type,
264
+ isVoid: true,
265
+ data: {
266
+ tag: tag,
267
+ src: src || el.getAttribute('src'),
268
+ editing: editing,
269
+ ends: ends,
270
+ height: height,
271
+ starts: starts,
272
+ title: title,
273
+ width: width,
274
+ url: url
275
+ }
276
+ };
277
+ log('return object: ', out);
278
+ return out;
279
+ },
280
+ serialize: function serialize(object /*, children*/) {
281
+ var typeIndex = types.indexOf(object.type);
282
+ if (typeIndex < 0) return;
283
+ var type = types[typeIndex];
284
+ var data = object.data;
285
+ var editing = data.get('editing');
286
+ var tag = data.get('tag');
287
+ var ends = data.get('ends');
288
+ var src = data.get('src');
289
+ var starts = data.get('starts');
290
+ var title = data.get('title');
291
+ var width = data.get('width');
292
+ var height = data.get('height');
293
+ var url = data.get('url');
294
+ var style = {};
295
+ if (width) {
296
+ style.width = "".concat(width, "px");
297
+ }
298
+ if (height) {
299
+ style.height = "".concat(height, "px");
300
+ }
301
+ var divProps = {
302
+ 'data-editing': editing,
303
+ 'data-ends': ends,
304
+ 'data-starts': starts,
305
+ 'data-title': title,
306
+ 'data-url': url
307
+ };
308
+ var props = _objectSpread(_objectSpread({}, style), {}, {
309
+ src: src
310
+ });
311
+ if (tag === 'audio') {
312
+ return /*#__PURE__*/_react["default"].createElement("audio", {
313
+ controls: "controls",
314
+ controlsList: "nodownload"
315
+ }, /*#__PURE__*/_react["default"].createElement("source", {
316
+ type: "audio/mp3",
317
+ src: src
318
+ }));
319
+ }
320
+ return /*#__PURE__*/_react["default"].createElement("iframe", (0, _extends2["default"])({
321
+ "data-type": type,
322
+ src: src
323
+ }, divProps, {
324
+ frameBorder: "0",
325
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
326
+ allowFullScreen: true
327
+ }, props));
328
+ }
329
+ };
330
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_slate","_Theaters","_VolumeUp","_debug","_mediaDialog","_mediaToolbar","_mediaWrapper","_excluded","_excluded2","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","removeDialogs","prevDialogs","document","querySelectorAll","s","remove","insertDialog","exports","props","newEl","createElement","type","callback","opts","rest","_objectWithoutProperties2","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","_extends2","uploadSoundSupport","disablePortal","open","dialogRoot","createRoot","render","appendChild","types","MediaPlugin","toolbar","icon","ariaLabel","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","concat","editor","controls","controlsList","hideEdit","onRemove","frameBorder","allow","allowFullScreen","onEdit","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","_el$firstChild","firstChild","getAttribute","_ref","parseInt","out","serialize","divProps"],"sources":["../../../src/plugins/media/index.jsx"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@mui/icons-material/Theaters';\nimport VolumeUpIcon from '@mui/icons-material/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n const dialogRoot = createRoot(newEl);\n dialogRoot.render(el);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n ariaLabel: type === 'audio' ? 'Insert audio' : 'Insert video',\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant((d) => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n },\n });\n },\n supports: (node) => node.object === 'inline' && node.type === type,\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true,\n },\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n (d) => d.type === type && d.data.get('editing'),\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n },\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n data-editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: (node) => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return (change) => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach((n) => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n },\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild?.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url,\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url,\n };\n const props = {\n ...style,\n src,\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n },\n};\n"],"mappings":"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","ignoreList":[]}