@pie-lib/editable-html 11.7.0 → 11.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +6 -10
  2. package/lib/block-tags.js +25 -0
  3. package/lib/block-tags.js.map +1 -0
  4. package/lib/constants.js +16 -0
  5. package/lib/constants.js.map +1 -0
  6. package/lib/editor.js +1355 -0
  7. package/lib/editor.js.map +1 -0
  8. package/lib/index.js +269 -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 +73 -0
  13. package/lib/plugins/characters/custom-popper.js.map +1 -0
  14. package/lib/plugins/characters/index.js +305 -0
  15. package/lib/plugins/characters/index.js.map +1 -0
  16. package/lib/plugins/characters/utils.js +381 -0
  17. package/lib/plugins/characters/utils.js.map +1 -0
  18. package/lib/plugins/css/icons/index.js +37 -0
  19. package/lib/plugins/css/icons/index.js.map +1 -0
  20. package/lib/plugins/css/index.js +397 -0
  21. package/lib/plugins/css/index.js.map +1 -0
  22. package/lib/plugins/customPlugin/index.js +114 -0
  23. package/lib/plugins/customPlugin/index.js.map +1 -0
  24. package/lib/plugins/html/icons/index.js +38 -0
  25. package/lib/plugins/html/icons/index.js.map +1 -0
  26. package/lib/plugins/html/index.js +80 -0
  27. package/lib/plugins/html/index.js.map +1 -0
  28. package/lib/plugins/image/alt-dialog.js +129 -0
  29. package/lib/plugins/image/alt-dialog.js.map +1 -0
  30. package/lib/plugins/image/component.js +419 -0
  31. package/lib/plugins/image/component.js.map +1 -0
  32. package/lib/plugins/image/image-toolbar.js +177 -0
  33. package/lib/plugins/image/image-toolbar.js.map +1 -0
  34. package/lib/plugins/image/index.js +263 -0
  35. package/lib/plugins/image/index.js.map +1 -0
  36. package/lib/plugins/image/insert-image-handler.js +161 -0
  37. package/lib/plugins/image/insert-image-handler.js.map +1 -0
  38. package/lib/plugins/index.js +402 -0
  39. package/lib/plugins/index.js.map +1 -0
  40. package/lib/plugins/list/index.js +334 -0
  41. package/lib/plugins/list/index.js.map +1 -0
  42. package/lib/plugins/math/index.js +454 -0
  43. package/lib/plugins/math/index.js.map +1 -0
  44. package/lib/plugins/media/index.js +387 -0
  45. package/lib/plugins/media/index.js.map +1 -0
  46. package/lib/plugins/media/media-dialog.js +709 -0
  47. package/lib/plugins/media/media-dialog.js.map +1 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-toolbar.js.map +1 -0
  50. package/lib/plugins/media/media-wrapper.js +93 -0
  51. package/lib/plugins/media/media-wrapper.js.map +1 -0
  52. package/lib/plugins/rendering/index.js +46 -0
  53. package/lib/plugins/rendering/index.js.map +1 -0
  54. package/lib/plugins/respArea/drag-in-the-blank/choice.js +254 -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 +97 -0
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
  58. package/lib/plugins/respArea/explicit-constructed-response/index.js +57 -0
  59. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
  60. package/lib/plugins/respArea/icons/index.js +95 -0
  61. package/lib/plugins/respArea/icons/index.js.map +1 -0
  62. package/lib/plugins/respArea/index.js +341 -0
  63. package/lib/plugins/respArea/index.js.map +1 -0
  64. package/lib/plugins/respArea/inline-dropdown/index.js +75 -0
  65. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
  66. package/lib/plugins/respArea/math-templated/index.js +130 -0
  67. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  68. package/lib/plugins/respArea/utils.js +125 -0
  69. package/lib/plugins/respArea/utils.js.map +1 -0
  70. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  71. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  72. package/lib/plugins/table/icons/index.js +69 -0
  73. package/lib/plugins/table/icons/index.js.map +1 -0
  74. package/lib/plugins/table/index.js +483 -0
  75. package/lib/plugins/table/index.js.map +1 -0
  76. package/lib/plugins/table/table-toolbar.js +187 -0
  77. package/lib/plugins/table/table-toolbar.js.map +1 -0
  78. package/lib/plugins/textAlign/icons/index.js +226 -0
  79. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  80. package/lib/plugins/textAlign/index.js +34 -0
  81. package/lib/plugins/textAlign/index.js.map +1 -0
  82. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  83. package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
  84. package/lib/plugins/toolbar/done-button.js +53 -0
  85. package/lib/plugins/toolbar/done-button.js.map +1 -0
  86. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  87. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
  88. package/lib/plugins/toolbar/index.js +34 -0
  89. package/lib/plugins/toolbar/index.js.map +1 -0
  90. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  91. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
  92. package/lib/plugins/toolbar/toolbar.js +376 -0
  93. package/lib/plugins/toolbar/toolbar.js.map +1 -0
  94. package/lib/plugins/utils.js +62 -0
  95. package/lib/plugins/utils.js.map +1 -0
  96. package/lib/serialization.js +677 -0
  97. package/lib/serialization.js.map +1 -0
  98. package/lib/shared/alert-dialog.js +75 -0
  99. package/lib/theme.js +9 -0
  100. package/lib/theme.js.map +1 -0
  101. package/package.json +8 -8
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.ToolbarButton = exports.DefaultToolbar = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _doneButton = require("./done-button");
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _react = _interopRequireDefault(require("react"));
19
+
20
+ var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _styles = require("@material-ui/core/styles");
25
+
26
+ var _toolbarButtons = require("./toolbar-buttons");
27
+
28
+ var _debug = _interopRequireDefault(require("debug"));
29
+
30
+ 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; }
31
+
32
+ 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; }
33
+
34
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:toolbar');
35
+
36
+ var ToolbarButton = function ToolbarButton(props) {
37
+ var onToggle = function onToggle() {
38
+ var c = props.onToggle(props.value.change(), props);
39
+ props.onChange(c);
40
+ };
41
+
42
+ if (props.isMark) {
43
+ var _isActive = (0, _utils.hasMark)(props.value, props.type);
44
+
45
+ var fnToCall = props.type === 'css' ? function () {
46
+ return props.onClick(props.value, props.onChange, props.getFocusedValue);
47
+ } : onToggle;
48
+ log('[ToolbarButton] mark:isActive: ', _isActive);
49
+ var ariaLabel;
50
+
51
+ if (props.type === 'sup') {
52
+ ariaLabel = 'Superscript (marks text as superscripted)';
53
+ } else if (props.type === 'sub') {
54
+ ariaLabel = 'Subscript (marks text as subscripted)';
55
+ } else {
56
+ ariaLabel = props.type;
57
+ }
58
+
59
+ return /*#__PURE__*/_react["default"].createElement(_toolbarButtons.MarkButton, {
60
+ active: _isActive,
61
+ onToggle: fnToCall,
62
+ mark: props.type,
63
+ label: ariaLabel
64
+ }, props.icon);
65
+ }
66
+
67
+ var disabled = props.disabled;
68
+ var isActive = props.isActive ? props.isActive(props.value, props.type) : (0, _utils.hasBlock)(props.value, props.type);
69
+ log('[ToolbarButton] block:isActive: ', isActive);
70
+
71
+ var newIcon = /*#__PURE__*/_react["default"].cloneElement(props.icon);
72
+
73
+ return /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
74
+ ariaLabel: props.ariaLabel,
75
+ active: isActive,
76
+ disabled: disabled,
77
+ onClick: function onClick(event) {
78
+ return props.onClick(props.value, props.onChange, props.getFocusedValue, event);
79
+ },
80
+ extraStyles: props.buttonStyles
81
+ }, newIcon);
82
+ };
83
+
84
+ exports.ToolbarButton = ToolbarButton;
85
+ ToolbarButton.propTypes = {
86
+ buttonStyles: _propTypes["default"].object,
87
+ disabled: _propTypes["default"].bool,
88
+ icon: _propTypes["default"].any,
89
+ isActive: _propTypes["default"].bool,
90
+ isMark: _propTypes["default"].bool,
91
+ getFocusedValue: _propTypes["default"].func,
92
+ onToggle: _propTypes["default"].func,
93
+ onChange: _propTypes["default"].func,
94
+ onClick: _propTypes["default"].func,
95
+ type: _propTypes["default"].string,
96
+ value: _propTypes["default"].object,
97
+ ariaLabel: _propTypes["default"].string
98
+ };
99
+
100
+ var isActiveToolbarPlugin = function isActiveToolbarPlugin(props) {
101
+ return function (plugin) {
102
+ var isDisabled = (props[plugin.name] || {}).disabled;
103
+ return plugin && plugin.toolbar && !isDisabled;
104
+ };
105
+ };
106
+
107
+ var DefaultToolbar = function DefaultToolbar(_ref) {
108
+ var plugins = _ref.plugins,
109
+ pluginProps = _ref.pluginProps,
110
+ value = _ref.value,
111
+ onChange = _ref.onChange,
112
+ getFocusedValue = _ref.getFocusedValue,
113
+ onDone = _ref.onDone,
114
+ classes = _ref.classes,
115
+ showDone = _ref.showDone,
116
+ deletable = _ref.deletable,
117
+ isHtmlMode = _ref.isHtmlMode,
118
+ doneButtonRef = _ref.doneButtonRef,
119
+ onBlur = _ref.onBlur,
120
+ onFocus = _ref.onFocus;
121
+ pluginProps = _objectSpread({
122
+ // disable HTML plugin by default, at least for now
123
+ html: {
124
+ disabled: true
125
+ }
126
+ }, pluginProps);
127
+ var filtered;
128
+
129
+ var handleFocus = function handleFocus(event) {
130
+ var _doneButtonRef$curren, _event$target;
131
+
132
+ var doneButtonClassName = doneButtonRef === null || doneButtonRef === void 0 ? void 0 : (_doneButtonRef$curren = doneButtonRef.current) === null || _doneButtonRef$curren === void 0 ? void 0 : _doneButtonRef$curren.className;
133
+ var isRawDoneButton = doneButtonClassName && ((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.closest("[class*=\"".concat(doneButtonClassName, "\"]")));
134
+
135
+ if (onFocus && !isRawDoneButton) {
136
+ onFocus(event);
137
+ }
138
+ };
139
+
140
+ if (isHtmlMode) {
141
+ filtered = plugins.filter(function (plugin) {
142
+ return isActiveToolbarPlugin(pluginProps)(plugin) && (plugin.name === 'characters' || plugin.name === 'html');
143
+ }).map(function (p) {
144
+ return p.toolbar;
145
+ });
146
+ } else {
147
+ filtered = plugins.filter(isActiveToolbarPlugin(pluginProps)).map(function (p) {
148
+ return p.toolbar;
149
+ });
150
+ }
151
+
152
+ var isListActive = plugins.some(function (plugin) {
153
+ return isActiveToolbarPlugin(pluginProps)(plugin) && ['ul_list', 'ol_list'].includes(plugin.name) && plugin.toolbar.isActive(value, plugin.name);
154
+ });
155
+ var isTableActive = plugins.some(function (plugin) {
156
+ return isActiveToolbarPlugin(pluginProps)(plugin) && plugin.name === 'table' && plugin.utils && plugin.utils.isSelectionInTable && plugin.utils.isSelectionInTable(value);
157
+ });
158
+
159
+ var isToolbarButtonDisabled = function isToolbarButtonDisabled(plugin) {
160
+ if (plugin.type === 'table') {
161
+ return isListActive;
162
+ } else if (plugin.type === 'ul_list' || plugin.type === 'ol_list') {
163
+ return isTableActive;
164
+ }
165
+
166
+ return plugin.disabled;
167
+ };
168
+
169
+ return /*#__PURE__*/_react["default"].createElement("div", {
170
+ className: classes.defaultToolbar,
171
+ onFocus: handleFocus,
172
+ tabIndex: "1",
173
+ onBlur: onBlur
174
+ }, /*#__PURE__*/_react["default"].createElement("div", {
175
+ className: classes.buttonsContainer
176
+ }, filtered.map(function (p, index) {
177
+ return /*#__PURE__*/_react["default"].createElement(ToolbarButton, (0, _extends2["default"])({}, p, {
178
+ key: index,
179
+ value: value,
180
+ onChange: onChange,
181
+ getFocusedValue: getFocusedValue,
182
+ disabled: isToolbarButtonDisabled(p)
183
+ }));
184
+ })), showDone && !deletable && /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
185
+ doneButtonRef: doneButtonRef,
186
+ onClick: onDone
187
+ }));
188
+ };
189
+
190
+ exports.DefaultToolbar = DefaultToolbar;
191
+ DefaultToolbar.propTypes = {
192
+ classes: _propTypes["default"].object.isRequired,
193
+ plugins: _propTypes["default"].array.isRequired,
194
+ pluginProps: _propTypes["default"].object,
195
+ value: _slatePropTypes["default"].value.isRequired,
196
+ onChange: _propTypes["default"].func.isRequired,
197
+ getFocusedValue: _propTypes["default"].func.isRequired,
198
+ onDone: _propTypes["default"].func.isRequired,
199
+ showDone: _propTypes["default"].bool,
200
+ addArea: _propTypes["default"].bool,
201
+ deletable: _propTypes["default"].bool,
202
+ isHtmlMode: _propTypes["default"].bool,
203
+ doneButtonRef: _propTypes["default"].func,
204
+ onBlur: _propTypes["default"].func,
205
+ onFocus: _propTypes["default"].func
206
+ };
207
+ DefaultToolbar.defaultProps = {
208
+ pluginProps: {}
209
+ };
210
+
211
+ var toolbarStyles = function toolbarStyles() {
212
+ return {
213
+ defaultToolbar: {
214
+ display: 'flex',
215
+ width: '100%',
216
+ justifyContent: 'space-between'
217
+ },
218
+ buttonsContainer: {
219
+ alignItems: 'center',
220
+ display: 'flex',
221
+ width: '100%'
222
+ }
223
+ };
224
+ };
225
+
226
+ var _default = (0, _styles.withStyles)(toolbarStyles)(DefaultToolbar);
227
+
228
+ exports["default"] = _default;
229
+ //# sourceMappingURL=default-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/default-toolbar.jsx"],"names":["log","ToolbarButton","props","onToggle","c","value","change","onChange","isMark","isActive","type","fnToCall","onClick","getFocusedValue","ariaLabel","icon","disabled","newIcon","React","cloneElement","event","buttonStyles","propTypes","PropTypes","object","bool","any","func","string","isActiveToolbarPlugin","plugin","isDisabled","name","toolbar","DefaultToolbar","plugins","pluginProps","onDone","classes","showDone","deletable","isHtmlMode","doneButtonRef","onBlur","onFocus","html","filtered","handleFocus","doneButtonClassName","current","className","isRawDoneButton","target","closest","filter","map","p","isListActive","some","includes","isTableActive","utils","isSelectionInTable","isToolbarButtonDisabled","defaultToolbar","buttonsContainer","index","isRequired","array","SlatePropTypes","addArea","defaultProps","toolbarStyles","display","width","justifyContent","alignItems"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,wCAAN,CAAZ;;AAEO,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAW;AACtC,MAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;AACrB,QAAMC,CAAC,GAAGF,KAAK,CAACC,QAAN,CAAeD,KAAK,CAACG,KAAN,CAAYC,MAAZ,EAAf,EAAqCJ,KAArC,CAAV;AAEAA,IAAAA,KAAK,CAACK,QAAN,CAAeH,CAAf;AACD,GAJD;;AAMA,MAAIF,KAAK,CAACM,MAAV,EAAkB;AAChB,QAAMC,SAAQ,GAAG,oBAAQP,KAAK,CAACG,KAAd,EAAqBH,KAAK,CAACQ,IAA3B,CAAjB;;AACA,QAAMC,QAAQ,GACZT,KAAK,CAACQ,IAAN,KAAe,KAAf,GAAuB;AAAA,aAAMR,KAAK,CAACU,OAAN,CAAcV,KAAK,CAACG,KAApB,EAA2BH,KAAK,CAACK,QAAjC,EAA2CL,KAAK,CAACW,eAAjD,CAAN;AAAA,KAAvB,GAAiGV,QADnG;AAGAH,IAAAA,GAAG,CAAC,iCAAD,EAAoCS,SAApC,CAAH;AAEA,QAAIK,SAAJ;;AAEA,QAAIZ,KAAK,CAACQ,IAAN,KAAe,KAAnB,EAA0B;AACxBI,MAAAA,SAAS,GAAG,2CAAZ;AACD,KAFD,MAEO,IAAIZ,KAAK,CAACQ,IAAN,KAAe,KAAnB,EAA0B;AAC/BI,MAAAA,SAAS,GAAG,uCAAZ;AACD,KAFM,MAEA;AACLA,MAAAA,SAAS,GAAGZ,KAAK,CAACQ,IAAlB;AACD;;AAED,wBACE,gCAAC,0BAAD;AAAY,MAAA,MAAM,EAAED,SAApB;AAA8B,MAAA,QAAQ,EAAEE,QAAxC;AAAkD,MAAA,IAAI,EAAET,KAAK,CAACQ,IAA9D;AAAoE,MAAA,KAAK,EAAEI;AAA3E,OACGZ,KAAK,CAACa,IADT,CADF;AAKD;;AAED,MAAQC,QAAR,GAAqBd,KAArB,CAAQc,QAAR;AACA,MAAMP,QAAQ,GAAGP,KAAK,CAACO,QAAN,GAAiBP,KAAK,CAACO,QAAN,CAAeP,KAAK,CAACG,KAArB,EAA4BH,KAAK,CAACQ,IAAlC,CAAjB,GAA2D,qBAASR,KAAK,CAACG,KAAf,EAAsBH,KAAK,CAACQ,IAA5B,CAA5E;AAEAV,EAAAA,GAAG,CAAC,kCAAD,EAAqCS,QAArC,CAAH;;AACA,MAAMQ,OAAO,gBAAGC,kBAAMC,YAAN,CAAmBjB,KAAK,CAACa,IAAzB,CAAhB;;AAEA,sBACE,gCAAC,sBAAD;AACE,IAAA,SAAS,EAAEb,KAAK,CAACY,SADnB;AAEE,IAAA,MAAM,EAAEL,QAFV;AAGE,IAAA,QAAQ,EAAEO,QAHZ;AAIE,IAAA,OAAO,EAAE,iBAACI,KAAD;AAAA,aAAWlB,KAAK,CAACU,OAAN,CAAcV,KAAK,CAACG,KAApB,EAA2BH,KAAK,CAACK,QAAjC,EAA2CL,KAAK,CAACW,eAAjD,EAAkEO,KAAlE,CAAX;AAAA,KAJX;AAKE,IAAA,WAAW,EAAElB,KAAK,CAACmB;AALrB,KAOGJ,OAPH,CADF;AAWD,CAhDM;;;AAkDPhB,aAAa,CAACqB,SAAd,GAA0B;AACxBD,EAAAA,YAAY,EAAEE,sBAAUC,MADA;AAExBR,EAAAA,QAAQ,EAAEO,sBAAUE,IAFI;AAGxBV,EAAAA,IAAI,EAAEQ,sBAAUG,GAHQ;AAIxBjB,EAAAA,QAAQ,EAAEc,sBAAUE,IAJI;AAKxBjB,EAAAA,MAAM,EAAEe,sBAAUE,IALM;AAMxBZ,EAAAA,eAAe,EAAEU,sBAAUI,IANH;AAOxBxB,EAAAA,QAAQ,EAAEoB,sBAAUI,IAPI;AAQxBpB,EAAAA,QAAQ,EAAEgB,sBAAUI,IARI;AASxBf,EAAAA,OAAO,EAAEW,sBAAUI,IATK;AAUxBjB,EAAAA,IAAI,EAAEa,sBAAUK,MAVQ;AAWxBvB,EAAAA,KAAK,EAAEkB,sBAAUC,MAXO;AAYxBV,EAAAA,SAAS,EAAES,sBAAUK;AAZG,CAA1B;;AAeA,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAC3B,KAAD;AAAA,SAAW,UAAC4B,MAAD,EAAY;AACnD,QAAMC,UAAU,GAAG,CAAC7B,KAAK,CAAC4B,MAAM,CAACE,IAAR,CAAL,IAAsB,EAAvB,EAA2BhB,QAA9C;AAEA,WAAOc,MAAM,IAAIA,MAAM,CAACG,OAAjB,IAA4B,CAACF,UAApC;AACD,GAJ6B;AAAA,CAA9B;;AAMO,IAAMG,cAAc,GAAG,SAAjBA,cAAiB,OAcxB;AAAA,MAbJC,OAaI,QAbJA,OAaI;AAAA,MAZJC,WAYI,QAZJA,WAYI;AAAA,MAXJ/B,KAWI,QAXJA,KAWI;AAAA,MAVJE,QAUI,QAVJA,QAUI;AAAA,MATJM,eASI,QATJA,eASI;AAAA,MARJwB,MAQI,QARJA,MAQI;AAAA,MAPJC,OAOI,QAPJA,OAOI;AAAA,MANJC,QAMI,QANJA,QAMI;AAAA,MALJC,SAKI,QALJA,SAKI;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,aAGI,QAHJA,aAGI;AAAA,MAFJC,MAEI,QAFJA,MAEI;AAAA,MADJC,OACI,QADJA,OACI;AACJR,EAAAA,WAAW;AACT;AACAS,IAAAA,IAAI,EAAE;AAAE7B,MAAAA,QAAQ,EAAE;AAAZ;AAFG,KAGNoB,WAHM,CAAX;AAKA,MAAIU,QAAJ;;AAEA,MAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC3B,KAAD,EAAW;AAAA;;AAC7B,QAAM4B,mBAAmB,GAAGN,aAAH,aAAGA,aAAH,gDAAGA,aAAa,CAAEO,OAAlB,0DAAG,sBAAwBC,SAApD;AACA,QAAMC,eAAe,GAAGH,mBAAmB,sBAAI5B,KAAK,CAACgC,MAAV,kDAAI,cAAcC,OAAd,qBAAkCL,mBAAlC,SAAJ,CAA3C;;AAEA,QAAIJ,OAAO,IAAI,CAACO,eAAhB,EAAiC;AAC/BP,MAAAA,OAAO,CAACxB,KAAD,CAAP;AACD;AACF,GAPD;;AASA,MAAIqB,UAAJ,EAAgB;AACdK,IAAAA,QAAQ,GAAGX,OAAO,CACfmB,MADQ,CACD,UAACxB,MAAD,EAAY;AAClB,aAAOD,qBAAqB,CAACO,WAAD,CAArB,CAAmCN,MAAnC,MAA+CA,MAAM,CAACE,IAAP,KAAgB,YAAhB,IAAgCF,MAAM,CAACE,IAAP,KAAgB,MAA/F,CAAP;AACD,KAHQ,EAIRuB,GAJQ,CAIJ,UAACC,CAAD;AAAA,aAAOA,CAAC,CAACvB,OAAT;AAAA,KAJI,CAAX;AAKD,GAND,MAMO;AACLa,IAAAA,QAAQ,GAAGX,OAAO,CAACmB,MAAR,CAAezB,qBAAqB,CAACO,WAAD,CAApC,EAAmDmB,GAAnD,CAAuD,UAACC,CAAD;AAAA,aAAOA,CAAC,CAACvB,OAAT;AAAA,KAAvD,CAAX;AACD;;AAED,MAAMwB,YAAY,GAAGtB,OAAO,CAACuB,IAAR,CACnB,UAAC5B,MAAD;AAAA,WACED,qBAAqB,CAACO,WAAD,CAArB,CAAmCN,MAAnC,KACA,CAAC,SAAD,EAAY,SAAZ,EAAuB6B,QAAvB,CAAgC7B,MAAM,CAACE,IAAvC,CADA,IAEAF,MAAM,CAACG,OAAP,CAAexB,QAAf,CAAwBJ,KAAxB,EAA+ByB,MAAM,CAACE,IAAtC,CAHF;AAAA,GADmB,CAArB;AAOA,MAAM4B,aAAa,GAAGzB,OAAO,CAACuB,IAAR,CACpB,UAAC5B,MAAD;AAAA,WACED,qBAAqB,CAACO,WAAD,CAArB,CAAmCN,MAAnC,KACAA,MAAM,CAACE,IAAP,KAAgB,OADhB,IAEAF,MAAM,CAAC+B,KAFP,IAGA/B,MAAM,CAAC+B,KAAP,CAAaC,kBAHb,IAIAhC,MAAM,CAAC+B,KAAP,CAAaC,kBAAb,CAAgCzD,KAAhC,CALF;AAAA,GADoB,CAAtB;;AASA,MAAM0D,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACjC,MAAD,EAAY;AAC1C,QAAIA,MAAM,CAACpB,IAAP,KAAgB,OAApB,EAA6B;AAC3B,aAAO+C,YAAP;AACD,KAFD,MAEO,IAAI3B,MAAM,CAACpB,IAAP,KAAgB,SAAhB,IAA6BoB,MAAM,CAACpB,IAAP,KAAgB,SAAjD,EAA4D;AACjE,aAAOkD,aAAP;AACD;;AACD,WAAO9B,MAAM,CAACd,QAAd;AACD,GAPD;;AASA,sBACE;AAAK,IAAA,SAAS,EAAEsB,OAAO,CAAC0B,cAAxB;AAAwC,IAAA,OAAO,EAAEjB,WAAjD;AAA8D,IAAA,QAAQ,EAAC,GAAvE;AAA2E,IAAA,MAAM,EAAEJ;AAAnF,kBACE;AAAK,IAAA,SAAS,EAAEL,OAAO,CAAC2B;AAAxB,KACGnB,QAAQ,CAACS,GAAT,CAAa,UAACC,CAAD,EAAIU,KAAJ,EAAc;AAC1B,wBACE,gCAAC,aAAD,gCACMV,CADN;AAEE,MAAA,GAAG,EAAEU,KAFP;AAGE,MAAA,KAAK,EAAE7D,KAHT;AAIE,MAAA,QAAQ,EAAEE,QAJZ;AAKE,MAAA,eAAe,EAAEM,eALnB;AAME,MAAA,QAAQ,EAAEkD,uBAAuB,CAACP,CAAD;AANnC,OADF;AAUD,GAXA,CADH,CADF,EAeGjB,QAAQ,IAAI,CAACC,SAAb,iBAA0B,gCAAC,sBAAD;AAAY,IAAA,aAAa,EAAEE,aAA3B;AAA0C,IAAA,OAAO,EAAEL;AAAnD,IAf7B,CADF;AAmBD,CArFM;;;AAuFPH,cAAc,CAACZ,SAAf,GAA2B;AACzBgB,EAAAA,OAAO,EAAEf,sBAAUC,MAAV,CAAiB2C,UADD;AAEzBhC,EAAAA,OAAO,EAAEZ,sBAAU6C,KAAV,CAAgBD,UAFA;AAGzB/B,EAAAA,WAAW,EAAEb,sBAAUC,MAHE;AAIzBnB,EAAAA,KAAK,EAAEgE,2BAAehE,KAAf,CAAqB8D,UAJH;AAKzB5D,EAAAA,QAAQ,EAAEgB,sBAAUI,IAAV,CAAewC,UALA;AAMzBtD,EAAAA,eAAe,EAAEU,sBAAUI,IAAV,CAAewC,UANP;AAOzB9B,EAAAA,MAAM,EAAEd,sBAAUI,IAAV,CAAewC,UAPE;AAQzB5B,EAAAA,QAAQ,EAAEhB,sBAAUE,IARK;AASzB6C,EAAAA,OAAO,EAAE/C,sBAAUE,IATM;AAUzBe,EAAAA,SAAS,EAAEjB,sBAAUE,IAVI;AAWzBgB,EAAAA,UAAU,EAAElB,sBAAUE,IAXG;AAYzBiB,EAAAA,aAAa,EAAEnB,sBAAUI,IAZA;AAazBgB,EAAAA,MAAM,EAAEpB,sBAAUI,IAbO;AAczBiB,EAAAA,OAAO,EAAErB,sBAAUI;AAdM,CAA3B;AAiBAO,cAAc,CAACqC,YAAf,GAA8B;AAC5BnC,EAAAA,WAAW,EAAE;AADe,CAA9B;;AAIA,IAAMoC,aAAa,GAAG,SAAhBA,aAAgB;AAAA,SAAO;AAC3BR,IAAAA,cAAc,EAAE;AACdS,MAAAA,OAAO,EAAE,MADK;AAEdC,MAAAA,KAAK,EAAE,MAFO;AAGdC,MAAAA,cAAc,EAAE;AAHF,KADW;AAM3BV,IAAAA,gBAAgB,EAAE;AAChBW,MAAAA,UAAU,EAAE,QADI;AAEhBH,MAAAA,OAAO,EAAE,MAFO;AAGhBC,MAAAA,KAAK,EAAE;AAHS;AANS,GAAP;AAAA,CAAtB;;eAae,wBAAWF,aAAX,EAA0BtC,cAA1B,C","sourcesContent":["import { DoneButton } from './done-button';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport SlatePropTypes from 'slate-prop-types';\n\nimport { hasBlock, hasMark } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Button, MarkButton } from './toolbar-buttons';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nexport const ToolbarButton = (props) => {\n const onToggle = () => {\n const c = props.onToggle(props.value.change(), props);\n\n props.onChange(c);\n };\n\n if (props.isMark) {\n const isActive = hasMark(props.value, props.type);\n const fnToCall =\n props.type === 'css' ? () => props.onClick(props.value, props.onChange, props.getFocusedValue) : onToggle;\n\n log('[ToolbarButton] mark:isActive: ', isActive);\n\n let ariaLabel;\n\n if (props.type === 'sup') {\n ariaLabel = 'Superscript (marks text as superscripted)';\n } else if (props.type === 'sub') {\n ariaLabel = 'Subscript (marks text as subscripted)';\n } else {\n ariaLabel = props.type;\n }\n\n return (\n <MarkButton active={isActive} onToggle={fnToCall} mark={props.type} label={ariaLabel}>\n {props.icon}\n </MarkButton>\n );\n }\n\n const { disabled } = props;\n const isActive = props.isActive ? props.isActive(props.value, props.type) : hasBlock(props.value, props.type);\n\n log('[ToolbarButton] block:isActive: ', isActive);\n const newIcon = React.cloneElement(props.icon);\n\n return (\n <Button\n ariaLabel={props.ariaLabel}\n active={isActive}\n disabled={disabled}\n onClick={(event) => props.onClick(props.value, props.onChange, props.getFocusedValue, event)}\n extraStyles={props.buttonStyles}\n >\n {newIcon}\n </Button>\n );\n};\n\nToolbarButton.propTypes = {\n buttonStyles: PropTypes.object,\n disabled: PropTypes.bool,\n icon: PropTypes.any,\n isActive: PropTypes.bool,\n isMark: PropTypes.bool,\n getFocusedValue: PropTypes.func,\n onToggle: PropTypes.func,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n type: PropTypes.string,\n value: PropTypes.object,\n ariaLabel: PropTypes.string,\n};\n\nconst isActiveToolbarPlugin = (props) => (plugin) => {\n const isDisabled = (props[plugin.name] || {}).disabled;\n\n return plugin && plugin.toolbar && !isDisabled;\n};\n\nexport const DefaultToolbar = ({\n plugins,\n pluginProps,\n value,\n onChange,\n getFocusedValue,\n onDone,\n classes,\n showDone,\n deletable,\n isHtmlMode,\n doneButtonRef,\n onBlur,\n onFocus,\n}) => {\n pluginProps = {\n // disable HTML plugin by default, at least for now\n html: { disabled: true },\n ...pluginProps,\n };\n let filtered;\n\n const handleFocus = (event) => {\n const doneButtonClassName = doneButtonRef?.current?.className;\n const isRawDoneButton = doneButtonClassName && event.target?.closest(`[class*=\"${doneButtonClassName}\"]`);\n\n if (onFocus && !isRawDoneButton) {\n onFocus(event);\n }\n };\n\n if (isHtmlMode) {\n filtered = plugins\n .filter((plugin) => {\n return isActiveToolbarPlugin(pluginProps)(plugin) && (plugin.name === 'characters' || plugin.name === 'html');\n })\n .map((p) => p.toolbar);\n } else {\n filtered = plugins.filter(isActiveToolbarPlugin(pluginProps)).map((p) => p.toolbar);\n }\n\n const isListActive = plugins.some(\n (plugin) =>\n isActiveToolbarPlugin(pluginProps)(plugin) &&\n ['ul_list', 'ol_list'].includes(plugin.name) &&\n plugin.toolbar.isActive(value, plugin.name),\n );\n\n const isTableActive = plugins.some(\n (plugin) =>\n isActiveToolbarPlugin(pluginProps)(plugin) &&\n plugin.name === 'table' &&\n plugin.utils &&\n plugin.utils.isSelectionInTable &&\n plugin.utils.isSelectionInTable(value),\n );\n\n const isToolbarButtonDisabled = (plugin) => {\n if (plugin.type === 'table') {\n return isListActive;\n } else if (plugin.type === 'ul_list' || plugin.type === 'ol_list') {\n return isTableActive;\n }\n return plugin.disabled;\n };\n\n return (\n <div className={classes.defaultToolbar} onFocus={handleFocus} tabIndex=\"1\" onBlur={onBlur}>\n <div className={classes.buttonsContainer}>\n {filtered.map((p, index) => {\n return (\n <ToolbarButton\n {...p}\n key={index}\n value={value}\n onChange={onChange}\n getFocusedValue={getFocusedValue}\n disabled={isToolbarButtonDisabled(p)}\n />\n );\n })}\n </div>\n {showDone && !deletable && <DoneButton doneButtonRef={doneButtonRef} onClick={onDone} />}\n </div>\n );\n};\n\nDefaultToolbar.propTypes = {\n classes: PropTypes.object.isRequired,\n plugins: PropTypes.array.isRequired,\n pluginProps: PropTypes.object,\n value: SlatePropTypes.value.isRequired,\n onChange: PropTypes.func.isRequired,\n getFocusedValue: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n showDone: PropTypes.bool,\n addArea: PropTypes.bool,\n deletable: PropTypes.bool,\n isHtmlMode: PropTypes.bool,\n doneButtonRef: PropTypes.func,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n};\n\nDefaultToolbar.defaultProps = {\n pluginProps: {},\n};\n\nconst toolbarStyles = () => ({\n defaultToolbar: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n },\n buttonsContainer: {\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n },\n});\n\nexport default withStyles(toolbarStyles)(DefaultToolbar);\n"],"file":"default-toolbar.js"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.RawDoneButton = exports.DoneButton = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
13
+
14
+ var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
15
+
16
+ var _styles = require("@material-ui/core/styles");
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var RawDoneButton = function RawDoneButton(_ref) {
21
+ var classes = _ref.classes,
22
+ onClick = _ref.onClick,
23
+ doneButtonRef = _ref.doneButtonRef;
24
+ return /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
25
+ "aria-label": "Done",
26
+ className: classes.iconRoot,
27
+ buttonRef: doneButtonRef,
28
+ onClick: onClick,
29
+ classes: {
30
+ label: classes.label,
31
+ root: classes.iconRoot
32
+ }
33
+ }, /*#__PURE__*/_react["default"].createElement(_Check["default"], null));
34
+ };
35
+
36
+ exports.RawDoneButton = RawDoneButton;
37
+ RawDoneButton.propTypes = {
38
+ classes: _propTypes["default"].object.isRequired,
39
+ onClick: _propTypes["default"].func,
40
+ doneButtonRef: _propTypes["default"].func
41
+ };
42
+ var styles = {
43
+ iconRoot: {
44
+ verticalAlign: 'top',
45
+ width: '28px',
46
+ height: '28px',
47
+ color: 'var(--editable-html-toolbar-check, #00bb00)',
48
+ padding: '4px'
49
+ }
50
+ };
51
+ var DoneButton = (0, _styles.withStyles)(styles)(RawDoneButton);
52
+ exports.DoneButton = DoneButton;
53
+ //# sourceMappingURL=done-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/done-button.jsx"],"names":["RawDoneButton","classes","onClick","doneButtonRef","iconRoot","label","root","propTypes","PropTypes","object","isRequired","func","styles","verticalAlign","width","height","color","padding","DoneButton"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AAEO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB;AAAA,MAAGC,OAAH,QAAGA,OAAH;AAAA,MAAYC,OAAZ,QAAYA,OAAZ;AAAA,MAAqBC,aAArB,QAAqBA,aAArB;AAAA,sBAC3B,gCAAC,sBAAD;AACE,kBAAW,MADb;AAEE,IAAA,SAAS,EAAEF,OAAO,CAACG,QAFrB;AAGE,IAAA,SAAS,EAAED,aAHb;AAIE,IAAA,OAAO,EAAED,OAJX;AAKE,IAAA,OAAO,EAAE;AACPG,MAAAA,KAAK,EAAEJ,OAAO,CAACI,KADR;AAEPC,MAAAA,IAAI,EAAEL,OAAO,CAACG;AAFP;AALX,kBAUE,gCAAC,iBAAD,OAVF,CAD2B;AAAA,CAAtB;;;AAePJ,aAAa,CAACO,SAAd,GAA0B;AACxBN,EAAAA,OAAO,EAAEO,sBAAUC,MAAV,CAAiBC,UADF;AAExBR,EAAAA,OAAO,EAAEM,sBAAUG,IAFK;AAGxBR,EAAAA,aAAa,EAAEK,sBAAUG;AAHD,CAA1B;AAMA,IAAMC,MAAM,GAAG;AACbR,EAAAA,QAAQ,EAAE;AACRS,IAAAA,aAAa,EAAE,KADP;AAERC,IAAAA,KAAK,EAAE,MAFC;AAGRC,IAAAA,MAAM,EAAE,MAHA;AAIRC,IAAAA,KAAK,EAAE,6CAJC;AAKRC,IAAAA,OAAO,EAAE;AALD;AADG,CAAf;AASO,IAAMC,UAAU,GAAG,wBAAWN,MAAX,EAAmBZ,aAAnB,CAAnB","sourcesContent":["import React from 'react';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Check from '@material-ui/icons/Check';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\n\nexport const RawDoneButton = ({ classes, onClick, doneButtonRef }) => (\n <IconButton\n aria-label=\"Done\"\n className={classes.iconRoot}\n buttonRef={doneButtonRef}\n onClick={onClick}\n classes={{\n label: classes.label,\n root: classes.iconRoot,\n }}\n >\n <Check />\n </IconButton>\n);\n\nRawDoneButton.propTypes = {\n classes: PropTypes.object.isRequired,\n onClick: PropTypes.func,\n doneButtonRef: PropTypes.func,\n};\n\nconst styles = {\n iconRoot: {\n verticalAlign: 'top',\n width: '28px',\n height: '28px',\n color: 'var(--editable-html-toolbar-check, #00bb00)',\n padding: '4px',\n },\n};\nexport const DoneButton = withStyles(styles)(RawDoneButton);\n"],"file":"done-button.js"}
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.EditorAndToolbar = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+
16
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
+
18
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
+
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
+
22
+ var _react = _interopRequireDefault(require("react"));
23
+
24
+ var _toolbar = _interopRequireDefault(require("./toolbar"));
25
+
26
+ var _classnames = _interopRequireDefault(require("classnames"));
27
+
28
+ var _debug = _interopRequireDefault(require("debug"));
29
+
30
+ var _theme = require("../../theme");
31
+
32
+ var _styles = require("@material-ui/core/styles");
33
+
34
+ var _propTypes = _interopRequireDefault(require("prop-types"));
35
+
36
+ var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
37
+
38
+ var _renderUi = require("@pie-lib/render-ui");
39
+
40
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
41
+
42
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
43
+
44
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');
45
+
46
+ var EditorAndToolbar = /*#__PURE__*/function (_React$Component) {
47
+ (0, _inherits2["default"])(EditorAndToolbar, _React$Component);
48
+
49
+ var _super = _createSuper(EditorAndToolbar);
50
+
51
+ function EditorAndToolbar() {
52
+ (0, _classCallCheck2["default"])(this, EditorAndToolbar);
53
+ return _super.apply(this, arguments);
54
+ }
55
+
56
+ (0, _createClass2["default"])(EditorAndToolbar, [{
57
+ key: "render",
58
+ value: function render() {
59
+ var _classNames,
60
+ _this = this,
61
+ _classNames2;
62
+
63
+ var _this$props = this.props,
64
+ classes = _this$props.classes,
65
+ children = _this$props.children,
66
+ value = _this$props.value,
67
+ plugins = _this$props.plugins,
68
+ onChange = _this$props.onChange,
69
+ getFocusedValue = _this$props.getFocusedValue,
70
+ onDone = _this$props.onDone,
71
+ focusedNode = _this$props.focusedNode,
72
+ autoWidth = _this$props.autoWidth,
73
+ readOnly = _this$props.readOnly,
74
+ disableScrollbar = _this$props.disableScrollbar,
75
+ disableUnderline = _this$props.disableUnderline,
76
+ pluginProps = _this$props.pluginProps,
77
+ toolbarOpts = _this$props.toolbarOpts,
78
+ onDataChange = _this$props.onDataChange,
79
+ toolbarRef = _this$props.toolbarRef,
80
+ doneButtonRef = _this$props.doneButtonRef,
81
+ focusToolbar = _this$props.focusToolbar,
82
+ onToolbarFocus = _this$props.onToolbarFocus,
83
+ onToolbarBlur = _this$props.onToolbarBlur;
84
+ var inFocus = value.isFocused || focusedNode !== null && focusedNode !== undefined || focusToolbar;
85
+ var holderNames = (0, _classnames["default"])(classes.editorHolder, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.editorInFocus, inFocus), (0, _defineProperty2["default"])(_classNames, classes.readOnly, readOnly), (0, _defineProperty2["default"])(_classNames, classes.disabledUnderline, disableUnderline), (0, _defineProperty2["default"])(_classNames, classes.disabledScrollbar, disableScrollbar), _classNames));
86
+ var clonedChildren = children;
87
+
88
+ if (typeof children !== 'string') {
89
+ clonedChildren = /*#__PURE__*/_react["default"].cloneElement(children, {
90
+ ref: function ref(el) {
91
+ return _this.editorRef = el;
92
+ }
93
+ });
94
+ }
95
+
96
+ log('[render] inFocus: ', inFocus, 'value.isFocused:', value.isFocused, 'focused node: ', focusedNode);
97
+ return /*#__PURE__*/_react["default"].createElement("div", {
98
+ className: (0, _classnames["default"])((_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, classes.noBorder, toolbarOpts && toolbarOpts.noBorder), (0, _defineProperty2["default"])(_classNames2, classes.error, toolbarOpts && toolbarOpts.error), _classNames2), classes.root)
99
+ }, /*#__PURE__*/_react["default"].createElement("div", {
100
+ className: holderNames
101
+ }, /*#__PURE__*/_react["default"].createElement("div", {
102
+ className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.noPadding, toolbarOpts && toolbarOpts.noPadding), classes.children)
103
+ }, clonedChildren)), /*#__PURE__*/_react["default"].createElement(_toolbar["default"], {
104
+ autoWidth: autoWidth,
105
+ plugins: plugins,
106
+ focusedNode: focusedNode,
107
+ value: value,
108
+ isFocused: inFocus,
109
+ onBlur: onToolbarBlur,
110
+ onFocus: onToolbarFocus,
111
+ onChange: onChange,
112
+ getFocusedValue: getFocusedValue,
113
+ onDone: onDone,
114
+ onDataChange: onDataChange,
115
+ toolbarRef: toolbarRef,
116
+ doneButtonRef: doneButtonRef,
117
+ pluginProps: pluginProps,
118
+ toolbarOpts: toolbarOpts
119
+ }));
120
+ }
121
+ }]);
122
+ return EditorAndToolbar;
123
+ }(_react["default"].Component);
124
+
125
+ exports.EditorAndToolbar = EditorAndToolbar;
126
+ (0, _defineProperty2["default"])(EditorAndToolbar, "propTypes", {
127
+ children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired,
128
+ value: _slatePropTypes["default"].value.isRequired,
129
+ plugins: _propTypes["default"].array.isRequired,
130
+ onChange: _propTypes["default"].func.isRequired,
131
+ getFocusedValue: _propTypes["default"].func.isRequired,
132
+ onDone: _propTypes["default"].func.isRequired,
133
+ onDataChange: _propTypes["default"].func,
134
+ toolbarRef: _propTypes["default"].func,
135
+ focusedNode: _slatePropTypes["default"].node,
136
+ readOnly: _propTypes["default"].bool,
137
+ disableScrollbar: _propTypes["default"].bool,
138
+ disableUnderline: _propTypes["default"].bool,
139
+ autoWidth: _propTypes["default"].bool,
140
+ classes: _propTypes["default"].object.isRequired,
141
+ pluginProps: _propTypes["default"].object,
142
+ toolbarOpts: _propTypes["default"].shape({
143
+ position: _propTypes["default"].oneOf(['bottom', 'top']),
144
+ alwaysVisible: _propTypes["default"].bool,
145
+ error: _propTypes["default"].string,
146
+ noBorder: _propTypes["default"].any,
147
+ noPadding: _propTypes["default"].any
148
+ }),
149
+ focusToolbar: _propTypes["default"].bool.isRequired,
150
+ onToolbarFocus: _propTypes["default"].func.isRequired,
151
+ onToolbarBlur: _propTypes["default"].func.isRequired,
152
+ doneButtonRef: _propTypes["default"].func
153
+ });
154
+
155
+ var style = function style(theme) {
156
+ return {
157
+ root: {
158
+ position: 'relative',
159
+ padding: '0px',
160
+ border: '1px solid #ccc',
161
+ borderRadius: '4px',
162
+ cursor: 'text',
163
+ '& [data-slate-editor="true"]': {
164
+ wordBreak: 'break-word',
165
+ overflow: 'visible',
166
+ maxHeight: '500px',
167
+ // needed in order to be able to put the focus before a void element when it is the first one in the editor
168
+ padding: '5px'
169
+ }
170
+ },
171
+ children: {
172
+ padding: '10px 16px'
173
+ },
174
+ editorHolder: {
175
+ position: 'relative',
176
+ padding: '0px',
177
+ overflowY: 'auto',
178
+ color: _renderUi.color.text(),
179
+ backgroundColor: _renderUi.color.background(),
180
+ '&::before': {
181
+ left: '0',
182
+ right: '0',
183
+ bottom: '0',
184
+ height: '1px',
185
+ content: '""',
186
+ position: 'absolute',
187
+ transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
188
+ pointerEvents: 'none',
189
+ backgroundColor: 'rgba(0, 0, 0, 0.42)'
190
+ },
191
+ '&::after': {
192
+ left: '0',
193
+ right: '0',
194
+ bottom: '0',
195
+ height: '1px',
196
+ content: '""',
197
+ position: 'absolute',
198
+ transform: 'scaleX(0)',
199
+ transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',
200
+ backgroundColor: 'rgba(0, 0, 0, 0.42)'
201
+ },
202
+ '&:focus': {
203
+ '&::after': {
204
+ transform: 'scaleX(1)',
205
+ backgroundColor: _theme.primary,
206
+ height: '2px'
207
+ }
208
+ },
209
+ '&:hover': {
210
+ '&::after': {
211
+ transform: 'scaleX(1)',
212
+ backgroundColor: theme.palette.common.black,
213
+ height: '2px'
214
+ }
215
+ }
216
+ },
217
+ disabledUnderline: {
218
+ '&::before': {
219
+ display: 'none'
220
+ },
221
+ '&::after': {
222
+ display: 'none'
223
+ }
224
+ },
225
+ disabledScrollbar: {
226
+ '&::-webkit-scrollbar': {
227
+ display: 'none'
228
+ },
229
+ scrollbarWidth: 'none',
230
+ '-ms-overflow-style': 'none'
231
+ },
232
+ readOnly: {
233
+ '&::before': {
234
+ background: 'transparent',
235
+ backgroundSize: '5px 1px',
236
+ backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',
237
+ backgroundRepeat: 'repeat-x',
238
+ backgroundPosition: 'left top'
239
+ },
240
+ '&::after': {
241
+ left: '0',
242
+ right: '0',
243
+ bottom: '0',
244
+ height: '1px',
245
+ content: '""',
246
+ position: 'absolute',
247
+ transform: 'scaleX(0)',
248
+ transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',
249
+ backgroundColor: 'rgba(0, 0, 0, 0)'
250
+ },
251
+ '&:hover': {
252
+ '&::after': {
253
+ transform: 'scaleX(0)',
254
+ backgroundColor: theme.palette.common.black,
255
+ height: '2px'
256
+ }
257
+ }
258
+ },
259
+ editorInFocus: {
260
+ '&::after': {
261
+ transform: 'scaleX(1)',
262
+ backgroundColor: _theme.primary,
263
+ height: '2px'
264
+ },
265
+ '&:hover': {
266
+ '&::after': {
267
+ backgroundColor: _theme.primary
268
+ }
269
+ }
270
+ },
271
+ error: {
272
+ border: "2px solid ".concat(theme.palette.error.main, " !important")
273
+ },
274
+ noBorder: {
275
+ border: 'none'
276
+ },
277
+ noPadding: {
278
+ padding: 0
279
+ }
280
+ };
281
+ };
282
+
283
+ var _default = (0, _styles.withStyles)(style)(EditorAndToolbar);
284
+
285
+ exports["default"] = _default;
286
+ //# sourceMappingURL=editor-and-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/editor-and-toolbar.jsx"],"names":["log","EditorAndToolbar","props","classes","children","value","plugins","onChange","getFocusedValue","onDone","focusedNode","autoWidth","readOnly","disableScrollbar","disableUnderline","pluginProps","toolbarOpts","onDataChange","toolbarRef","doneButtonRef","focusToolbar","onToolbarFocus","onToolbarBlur","inFocus","isFocused","undefined","holderNames","editorHolder","editorInFocus","disabledUnderline","disabledScrollbar","clonedChildren","React","cloneElement","ref","el","editorRef","noBorder","error","root","noPadding","Component","PropTypes","oneOfType","arrayOf","node","isRequired","SlatePropTypes","array","func","bool","object","shape","position","oneOf","alwaysVisible","string","any","style","theme","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","overflowY","color","text","backgroundColor","background","left","right","bottom","height","content","transition","pointerEvents","transform","primary","palette","common","black","display","scrollbarWidth","backgroundSize","backgroundImage","backgroundRepeat","backgroundPosition","main"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Toolbar from './toolbar';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { primary } from '../../theme';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');\n\nexport class EditorAndToolbar extends React.Component {\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n getFocusedValue: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n onDataChange: PropTypes.func,\n toolbarRef: PropTypes.func,\n focusedNode: SlatePropTypes.node,\n readOnly: PropTypes.bool,\n disableScrollbar: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidth: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alwaysVisible: PropTypes.bool,\n error: PropTypes.string,\n noBorder: PropTypes.any,\n noPadding: PropTypes.any,\n }),\n focusToolbar: PropTypes.bool.isRequired,\n onToolbarFocus: PropTypes.func.isRequired,\n onToolbarBlur: PropTypes.func.isRequired,\n doneButtonRef: PropTypes.func,\n };\n\n render() {\n const {\n classes,\n children,\n value,\n plugins,\n onChange,\n getFocusedValue,\n onDone,\n focusedNode,\n autoWidth,\n readOnly,\n disableScrollbar,\n disableUnderline,\n pluginProps,\n toolbarOpts,\n onDataChange,\n toolbarRef,\n doneButtonRef,\n focusToolbar,\n onToolbarFocus,\n onToolbarBlur,\n } = this.props;\n\n let inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined) || focusToolbar;\n\n const holderNames = classNames(classes.editorHolder, {\n [classes.editorInFocus]: inFocus,\n [classes.readOnly]: readOnly,\n [classes.disabledUnderline]: disableUnderline,\n [classes.disabledScrollbar]: disableScrollbar,\n });\n\n let clonedChildren = children;\n\n if (typeof children !== 'string') {\n clonedChildren = React.cloneElement(children, {\n ref: (el) => (this.editorRef = el),\n });\n }\n\n log('[render] inFocus: ', inFocus, 'value.isFocused:', value.isFocused, 'focused node: ', focusedNode);\n\n return (\n <div\n className={classNames(\n {\n [classes.noBorder]: toolbarOpts && toolbarOpts.noBorder,\n [classes.error]: toolbarOpts && toolbarOpts.error,\n },\n classes.root,\n )}\n >\n <div className={holderNames}>\n <div\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts && toolbarOpts.noPadding,\n },\n classes.children,\n )}\n >\n {clonedChildren}\n </div>\n </div>\n\n <Toolbar\n autoWidth={autoWidth}\n plugins={plugins}\n focusedNode={focusedNode}\n value={value}\n isFocused={inFocus}\n onBlur={onToolbarBlur}\n onFocus={onToolbarFocus}\n onChange={onChange}\n getFocusedValue={getFocusedValue}\n onDone={onDone}\n onDataChange={onDataChange}\n toolbarRef={toolbarRef}\n doneButtonRef={doneButtonRef}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n}\n\nconst style = (theme) => ({\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n // needed in order to be able to put the focus before a void element when it is the first one in the editor\n padding: '5px',\n },\n },\n children: {\n padding: '10px 16px',\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'auto',\n color: color.text(),\n backgroundColor: color.background(),\n '&::before': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.42)',\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0.42)',\n },\n '&:focus': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px',\n },\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: theme.palette.common.black,\n height: '2px',\n },\n },\n },\n disabledUnderline: {\n '&::before': {\n display: 'none',\n },\n '&::after': {\n display: 'none',\n },\n },\n disabledScrollbar: {\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n },\n readOnly: {\n '&::before': {\n background: 'transparent',\n backgroundSize: '5px 1px',\n backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',\n backgroundRepeat: 'repeat-x',\n backgroundPosition: 'left top',\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(0)',\n backgroundColor: theme.palette.common.black,\n height: '2px',\n },\n },\n },\n editorInFocus: {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px',\n },\n '&:hover': {\n '&::after': {\n backgroundColor: primary,\n },\n },\n },\n error: {\n border: `2px solid ${theme.palette.error.main} !important`,\n },\n noBorder: {\n border: 'none',\n },\n noPadding: {\n padding: 0,\n },\n});\n\nexport default withStyles(style)(EditorAndToolbar);\n"],"file":"editor-and-toolbar.js"}