@pie-lib/editable-html 11.1.1 → 11.1.2-next.1595

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 (160) hide show
  1. package/CHANGELOG.json +12 -3322
  2. package/CHANGELOG.md +170 -100
  3. package/NEXT.CHANGELOG.json +1 -0
  4. package/lib/block-tags.js +25 -0
  5. package/lib/block-tags.js.map +1 -0
  6. package/lib/constants.js +16 -0
  7. package/lib/constants.js.map +1 -0
  8. package/lib/editor.js +352 -90
  9. package/lib/editor.js.map +1 -1
  10. package/lib/index.js +25 -9
  11. package/lib/index.js.map +1 -1
  12. package/lib/plugins/characters/index.js +8 -3
  13. package/lib/plugins/characters/index.js.map +1 -1
  14. package/lib/plugins/characters/utils.js +12 -12
  15. package/lib/plugins/characters/utils.js.map +1 -1
  16. package/lib/plugins/css/icons/index.js +37 -0
  17. package/lib/plugins/css/icons/index.js.map +1 -0
  18. package/lib/plugins/css/index.js +397 -0
  19. package/lib/plugins/css/index.js.map +1 -0
  20. package/lib/plugins/customPlugin/index.js +114 -0
  21. package/lib/plugins/customPlugin/index.js.map +1 -0
  22. package/lib/plugins/html/index.js +11 -7
  23. package/lib/plugins/html/index.js.map +1 -1
  24. package/lib/plugins/image/index.js +2 -1
  25. package/lib/plugins/image/index.js.map +1 -1
  26. package/lib/plugins/image/insert-image-handler.js +13 -4
  27. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  28. package/lib/plugins/index.js +270 -11
  29. package/lib/plugins/index.js.map +1 -1
  30. package/lib/plugins/list/index.js +130 -0
  31. package/lib/plugins/list/index.js.map +1 -1
  32. package/lib/plugins/math/index.js +91 -56
  33. package/lib/plugins/math/index.js.map +1 -1
  34. package/lib/plugins/media/index.js +5 -2
  35. package/lib/plugins/media/index.js.map +1 -1
  36. package/lib/plugins/media/media-dialog.js +98 -57
  37. package/lib/plugins/media/media-dialog.js.map +1 -1
  38. package/lib/plugins/rendering/index.js +46 -0
  39. package/lib/plugins/rendering/index.js.map +1 -0
  40. package/lib/plugins/respArea/drag-in-the-blank/choice.js +45 -7
  41. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  42. package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
  43. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  44. package/lib/plugins/respArea/index.js +69 -21
  45. package/lib/plugins/respArea/index.js.map +1 -1
  46. package/lib/plugins/respArea/inline-dropdown/index.js +9 -4
  47. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  48. package/lib/plugins/respArea/math-templated/index.js +130 -0
  49. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  50. package/lib/plugins/respArea/utils.js +16 -1
  51. package/lib/plugins/respArea/utils.js.map +1 -1
  52. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  53. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  54. package/lib/plugins/table/index.js +43 -59
  55. package/lib/plugins/table/index.js.map +1 -1
  56. package/lib/plugins/table/table-toolbar.js +33 -4
  57. package/lib/plugins/table/table-toolbar.js.map +1 -1
  58. package/lib/plugins/textAlign/icons/index.js +226 -0
  59. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  60. package/lib/plugins/textAlign/index.js +34 -0
  61. package/lib/plugins/textAlign/index.js.map +1 -0
  62. package/lib/plugins/toolbar/default-toolbar.js +82 -27
  63. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  64. package/lib/plugins/toolbar/done-button.js +5 -2
  65. package/lib/plugins/toolbar/done-button.js.map +1 -1
  66. package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
  67. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  68. package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
  69. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  70. package/lib/plugins/toolbar/toolbar.js +35 -11
  71. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  72. package/lib/serialization.js +233 -44
  73. package/lib/serialization.js.map +1 -1
  74. package/lib/shared/alert-dialog.js +75 -0
  75. package/package.json +7 -6
  76. package/src/__tests__/editor.test.jsx +363 -0
  77. package/src/__tests__/serialization.test.js +291 -0
  78. package/src/__tests__/utils.js +36 -0
  79. package/src/block-tags.js +17 -0
  80. package/src/constants.js +7 -0
  81. package/src/editor.jsx +307 -52
  82. package/src/index.jsx +19 -10
  83. package/src/plugins/characters/index.jsx +11 -3
  84. package/src/plugins/characters/utils.js +12 -12
  85. package/src/plugins/css/icons/index.jsx +17 -0
  86. package/src/plugins/css/index.jsx +346 -0
  87. package/src/plugins/customPlugin/index.jsx +85 -0
  88. package/src/plugins/html/index.jsx +9 -6
  89. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  90. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  91. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  92. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  93. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  94. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  95. package/src/plugins/image/__tests__/index.test.js +95 -0
  96. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  97. package/src/plugins/image/__tests__/mock-change.js +15 -0
  98. package/src/plugins/image/index.jsx +2 -1
  99. package/src/plugins/image/insert-image-handler.js +13 -6
  100. package/src/plugins/index.jsx +248 -5
  101. package/src/plugins/list/__tests__/index.test.js +54 -0
  102. package/src/plugins/list/index.jsx +130 -0
  103. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  104. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  105. package/src/plugins/math/index.jsx +87 -56
  106. package/src/plugins/media/__tests__/index.test.js +75 -0
  107. package/src/plugins/media/index.jsx +3 -2
  108. package/src/plugins/media/media-dialog.js +106 -57
  109. package/src/plugins/rendering/index.js +31 -0
  110. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +35 -5
  111. package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
  112. package/src/plugins/respArea/index.jsx +53 -7
  113. package/src/plugins/respArea/inline-dropdown/index.jsx +12 -5
  114. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  115. package/src/plugins/respArea/utils.jsx +11 -0
  116. package/src/plugins/table/CustomTablePlugin.js +113 -0
  117. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  118. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  119. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  120. package/src/plugins/table/index.jsx +46 -59
  121. package/src/plugins/table/table-toolbar.jsx +39 -2
  122. package/src/plugins/textAlign/icons/index.jsx +139 -0
  123. package/src/plugins/textAlign/index.jsx +23 -0
  124. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  125. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  126. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  127. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  128. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  129. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  130. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  131. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  132. package/src/plugins/toolbar/default-toolbar.jsx +82 -20
  133. package/src/plugins/toolbar/done-button.jsx +3 -1
  134. package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
  135. package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
  136. package/src/plugins/toolbar/toolbar.jsx +31 -8
  137. package/src/serialization.jsx +213 -38
  138. package/README.md +0 -45
  139. package/deploy.sh +0 -16
  140. package/playground/image/data.js +0 -59
  141. package/playground/image/index.html +0 -22
  142. package/playground/image/index.jsx +0 -81
  143. package/playground/index.html +0 -25
  144. package/playground/mathquill/index.html +0 -22
  145. package/playground/mathquill/index.jsx +0 -155
  146. package/playground/package.json +0 -15
  147. package/playground/prod-test/index.html +0 -22
  148. package/playground/prod-test/index.jsx +0 -28
  149. package/playground/schema-override/data.js +0 -29
  150. package/playground/schema-override/image-plugin.jsx +0 -41
  151. package/playground/schema-override/index.html +0 -21
  152. package/playground/schema-override/index.jsx +0 -97
  153. package/playground/serialization/data.js +0 -29
  154. package/playground/serialization/image-plugin.jsx +0 -41
  155. package/playground/serialization/index.html +0 -22
  156. package/playground/serialization/index.jsx +0 -12
  157. package/playground/static.json +0 -3
  158. package/playground/table-examples.html +0 -70
  159. package/playground/webpack.config.js +0 -42
  160. package/static.json +0 -1
@@ -33,6 +33,7 @@ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image');
33
33
  function ImagePlugin(opts) {
34
34
  var toolbar = opts.insertImageRequested && {
35
35
  icon: /*#__PURE__*/_react["default"].createElement(_Image["default"], null),
36
+ ariaLabel: 'Insert Image',
36
37
  onClick: function onClick(value, onChange) {
37
38
  log('[toolbar] onClick');
38
39
 
@@ -96,7 +97,7 @@ function ImagePlugin(opts) {
96
97
  data: update
97
98
  });
98
99
  onChange(change);
99
- opts.onDelete(node.data.get('src'), function (err, v) {
100
+ opts.onDelete(node, function (err, v) {
100
101
  if (!err) {
101
102
  change = v.change().removeNodeByKey(node.key);
102
103
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/index.jsx"],"names":["log","ImagePlugin","opts","toolbar","insertImageRequested","icon","onClick","value","onChange","inline","Inline","create","type","isVoid","data","loaded","src","undefined","change","insertInline","onFinish","getValue","InsertImageHandler","supports","node","object","customToolbar","onToolbarDone","alignment","get","alt","imageLoaded","newValues","done","update","toObject","setNodeByKey","key","Tb","disableImageAlignmentButtons","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":"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","sourcesContent":["import { Data, Inline } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport React from 'react';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loaded: false,\n src: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n\n onChange(change);\n opts.insertImageRequested(\n inline,\n (onFinish, getValue) => new InsertImageHandler(inline, onFinish, getValue, onChange),\n );\n },\n supports: (node) => node.object === 'inline' && node.type === 'image',\n customToolbar: (node, value, onToolbarDone) => {\n const alignment = node.data.get('alignment');\n const alt = node.data.get('alt');\n const imageLoaded = node.data.get('loaded') !== false;\n const onChange = (newValues, done) => {\n const update = {\n ...node.data.toObject(),\n ...newValues,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, done);\n };\n\n const Tb = () => (\n <ImageToolbar\n disableImageAlignmentButtons={opts.disableImageAlignmentButtons}\n alt={alt}\n imageLoaded={imageLoaded}\n alignment={alignment || 'left'}\n onChange={onChange}\n />\n );\n return Tb;\n },\n showDone: true,\n };\n\n return {\n name: 'image',\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n if (opts.onDelete) {\n const update = node.data.merge(Data.create({ deleteStatus: 'pending' }));\n\n let change = value.change().setNodeByKey(node.key, { data: update });\n\n onChange(change);\n opts.onDelete(node.data.get('src'), (err, v) => {\n if (!err) {\n change = v.change().removeNodeByKey(node.key);\n } else {\n log('[error]: ', err);\n change = v.change().setNodeByKey(node.key, node.data.merge(Data.create({ deleteStatus: 'failed' })));\n }\n onChange(change);\n });\n } else {\n let change = value.change().removeNodeByKey(node.key);\n onChange(change);\n }\n },\n stopReset: (value) => {\n const imgPendingInsertion = value.document.findDescendant((n) => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.get('loaded') === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight,\n },\n props,\n );\n return <ImageComponent {...all} />;\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 if (d.type === 'image') {\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 const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = {\n object: 'inline',\n type: 'image',\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt'),\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const src = data.get('src');\n const width = data.get('width');\n const height = data.get('height');\n const alignment = data.get('alignment') || 'left';\n const margin = data.get('margin');\n const justifyContent = data.get('margin');\n const alt = data.get('alt');\n const style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt,\n };\n\n return <img {...props} />;\n },\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/index.jsx"],"names":["log","ImagePlugin","opts","toolbar","insertImageRequested","icon","ariaLabel","onClick","value","onChange","inline","Inline","create","type","isVoid","data","loaded","src","undefined","change","insertInline","onFinish","getValue","InsertImageHandler","supports","node","object","customToolbar","onToolbarDone","alignment","get","alt","imageLoaded","newValues","done","update","toObject","setNodeByKey","key","Tb","disableImageAlignmentButtons","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":"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","sourcesContent":["import { Data, Inline } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport React from 'react';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n ariaLabel: 'Insert Image',\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loaded: false,\n src: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n\n onChange(change);\n opts.insertImageRequested(\n inline,\n (onFinish, getValue) => new InsertImageHandler(inline, onFinish, getValue, onChange),\n );\n },\n supports: (node) => node.object === 'inline' && node.type === 'image',\n customToolbar: (node, value, onToolbarDone) => {\n const alignment = node.data.get('alignment');\n const alt = node.data.get('alt');\n const imageLoaded = node.data.get('loaded') !== false;\n const onChange = (newValues, done) => {\n const update = {\n ...node.data.toObject(),\n ...newValues,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, done);\n };\n\n const Tb = () => (\n <ImageToolbar\n disableImageAlignmentButtons={opts.disableImageAlignmentButtons}\n alt={alt}\n imageLoaded={imageLoaded}\n alignment={alignment || 'left'}\n onChange={onChange}\n />\n );\n return Tb;\n },\n showDone: true,\n };\n\n return {\n name: 'image',\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n if (opts.onDelete) {\n const update = node.data.merge(Data.create({ deleteStatus: 'pending' }));\n\n let change = value.change().setNodeByKey(node.key, { data: update });\n\n onChange(change);\n opts.onDelete(node, (err, v) => {\n if (!err) {\n change = v.change().removeNodeByKey(node.key);\n } else {\n log('[error]: ', err);\n change = v.change().setNodeByKey(node.key, node.data.merge(Data.create({ deleteStatus: 'failed' })));\n }\n onChange(change);\n });\n } else {\n let change = value.change().removeNodeByKey(node.key);\n onChange(change);\n }\n },\n stopReset: (value) => {\n const imgPendingInsertion = value.document.findDescendant((n) => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.get('loaded') === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight,\n },\n props,\n );\n return <ImageComponent {...all} />;\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 if (d.type === 'image') {\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 const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = {\n object: 'inline',\n type: 'image',\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt'),\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const src = data.get('src');\n const width = data.get('width');\n const height = data.get('height');\n const alignment = data.get('alignment') || 'left';\n const margin = data.get('margin');\n const justifyContent = data.get('margin');\n const alt = data.get('alt');\n const style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt,\n };\n\n return <img {...props} />;\n },\n};\n"],"file":"index.js"}
@@ -52,7 +52,7 @@ var InsertImageHandler = /*#__PURE__*/function () {
52
52
  if (child) {
53
53
  return child;
54
54
  } else {
55
- //eslint-disable-next-line
55
+ // eslint-disable-next-line
56
56
  throw new Error("insert-image: Can't find placeholder!");
57
57
  }
58
58
  }
@@ -60,9 +60,18 @@ var InsertImageHandler = /*#__PURE__*/function () {
60
60
  key: "cancel",
61
61
  value: function cancel() {
62
62
  log('insert cancelled');
63
- var c = this.getValue().change().removeNodeByKey(this.placeholderBlock.key);
64
- this.onChange(c);
65
- this.onFinish(false);
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
+ }
66
75
  }
67
76
  }, {
68
77
  key: "done",
@@ -1 +1 @@
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","c","change","removeNodeByKey","err","src","console","getPlaceholderInDocument","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 const c = this.getValue()\n .change()\n .removeNodeByKey(this.placeholderBlock.key);\n this.onChange(c);\n\n this.onFinish(false);\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
+ {"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"}
@@ -9,12 +9,26 @@ exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
9
9
 
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
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
+
12
20
  var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
13
21
 
22
+ var _FormatQuote = _interopRequireDefault(require("@material-ui/icons/FormatQuote"));
23
+
14
24
  var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
15
25
 
16
26
  var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
17
27
 
28
+ var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
29
+
30
+ var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
31
+
18
32
  var _image = _interopRequireDefault(require("./image"));
19
33
 
20
34
  var _media = _interopRequireDefault(require("./media"));
@@ -35,6 +49,8 @@ var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/Forma
35
49
 
36
50
  var _compact = _interopRequireDefault(require("lodash/compact"));
37
51
 
52
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
53
+
38
54
  var _slateSoftBreak = _interopRequireDefault(require("slate-soft-break"));
39
55
 
40
56
  var _debug = _interopRequireDefault(require("debug"));
@@ -47,9 +63,76 @@ var _respArea = _interopRequireDefault(require("./respArea"));
47
63
 
48
64
  var _html = _interopRequireDefault(require("./html"));
49
65
 
50
- //import Code from '@material-ui/icons/Code';
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
+
51
78
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins');
52
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
+
53
136
  function MarkHotkey(options) {
54
137
  var type = options.type,
55
138
  key = options.key,
@@ -57,19 +140,83 @@ function MarkHotkey(options) {
57
140
  tag = options.tag; // Return our "plugin" object, containing the `onKeyDown` handler.
58
141
 
59
142
  return {
143
+ name: type,
60
144
  toolbar: {
61
145
  isMark: true,
62
146
  type: type,
63
147
  icon: icon,
64
148
  onToggle: function onToggle(change) {
65
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
+
66
199
  return change.toggleMark(type);
67
200
  }
68
201
  },
69
202
  renderMark: function renderMark(props) {
70
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()) || {};
71
208
  var K = tag || type;
72
- return /*#__PURE__*/_react["default"].createElement(K, null, props.children);
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);
73
220
  }
74
221
  },
75
222
  onKeyDown: function onKeyDown(event, change) {
@@ -85,14 +232,61 @@ function MarkHotkey(options) {
85
232
  }
86
233
 
87
234
  var ALL_PLUGINS = ['bold', // 'code',
88
- 'html', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'table', 'video', 'audio', 'responseArea'];
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'];
89
236
  exports.ALL_PLUGINS = ALL_PLUGINS;
90
237
  var DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
91
- return plug !== 'responseArea';
238
+ return !['responseArea', 'h3', 'blockquote'].includes(plug);
92
239
  });
93
240
  exports.DEFAULT_PLUGINS = DEFAULT_PLUGINS;
241
+ var ICON_MAP = {
242
+ undo: _Undo["default"],
243
+ redo: _Redo["default"]
244
+ };
94
245
 
95
- var buildPlugins = function buildPlugins(activePlugins, opts) {
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) {
96
290
  log('[buildPlugins] opts: ', opts);
97
291
  activePlugins = activePlugins || DEFAULT_PLUGINS;
98
292
 
@@ -103,7 +297,52 @@ var buildPlugins = function buildPlugins(activePlugins, opts) {
103
297
  var imagePlugin = opts.image && opts.image.onDelete && (0, _image["default"])(opts.image);
104
298
  var mathPlugin = (0, _math["default"])(opts.math);
105
299
  var respAreaPlugin = opts.responseArea && opts.responseArea.type && (0, _respArea["default"])(opts.responseArea, (0, _compact["default"])([mathPlugin]));
106
- return (0, _compact["default"])([addIf('table', (0, _table["default"])(opts.table, (0, _compact["default"])([imagePlugin, mathPlugin, respAreaPlugin]))), addIf('bold', MarkHotkey({
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({
107
346
  key: 'b',
108
347
  type: 'bold',
109
348
  icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
@@ -124,9 +363,29 @@ var buildPlugins = function buildPlugins(activePlugins, opts) {
124
363
  type: 'underline',
125
364
  icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
126
365
  tag: 'u'
127
- })), 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"])(opts.languageCharacters.map(function (config) {
128
- return addIf('languageCharacters', (0, _characters["default"])(config));
129
- })), [addIf('bulleted-list', (0, _list["default"])({
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"])({
130
389
  key: 'l',
131
390
  type: 'ul_list',
132
391
  icon: /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null)
@@ -134,9 +393,9 @@ var buildPlugins = function buildPlugins(activePlugins, opts) {
134
393
  key: 'n',
135
394
  type: 'ol_list',
136
395
  icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)
137
- })), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
396
+ })), addIf('undo', UndoRedo('undo')), addIf('redo', UndoRedo('redo')), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
138
397
  shift: true
139
- }), addIf('responseArea', respAreaPlugin), addIf('html', (0, _html["default"])(opts.html))]));
398
+ })], builtCustomPlugins, [addIf('responseArea', respAreaPlugin), cssPlugin, addIf('html', (0, _html["default"])(opts.html)), EnterHandlingPlugin(), (0, _rendering["default"])()]));
140
399
  };
141
400
 
142
401
  exports.buildPlugins = buildPlugins;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/index.jsx"],"names":["log","MarkHotkey","options","type","key","icon","tag","toolbar","isMark","onToggle","change","toggleMark","renderMark","props","mark","K","children","onKeyDown","event","metaKey","preventDefault","ALL_PLUGINS","DEFAULT_PLUGINS","filter","plug","buildPlugins","activePlugins","opts","addIf","p","includes","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","table","media","languageCharacters","map","config","shift","html"],"mappings":"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","sourcesContent":["import Bold from '@material-ui/icons/FormatBold';\n//import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\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 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';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nfunction MarkHotkey(options) {\n const { type, key, icon, tag } = options;\n\n // Return our \"plugin\" object, containing the `onKeyDown` handler.\n return {\n toolbar: {\n isMark: true,\n type,\n icon,\n onToggle: (change) => {\n log('[onToggleMark] type: ', type);\n return change.toggleMark(type);\n },\n },\n renderMark(props) {\n if (props.mark.type === type) {\n const K = tag || type;\n\n return <K>{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 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => plug !== 'responseArea');\n\nexport const buildPlugins = (activePlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\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\n return compact([\n addIf('table', TablePlugin(opts.table, compact([imagePlugin, mathPlugin, respAreaPlugin]))),\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 addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n ...opts.languageCharacters.map((config) => addIf('languageCharacters', CharactersPlugin(config))),\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 ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin({ shift: true }),\n addIf('responseArea', respAreaPlugin),\n addIf('html', HtmlPlugin(opts.html)),\n ]);\n};\n"],"file":"index.js"}
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"}