@pie-lib/editable-html 12.1.0-next.2 → 12.1.0-next.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/lib/block-tags.js +25 -0
- package/lib/block-tags.js.map +1 -0
- package/lib/constants.js +12 -0
- package/lib/constants.js.map +1 -0
- package/lib/editor.js +1254 -0
- package/lib/editor.js.map +1 -0
- package/lib/index.js +224 -0
- package/lib/index.js.map +1 -0
- package/lib/parse-html.js +19 -0
- package/lib/parse-html.js.map +1 -0
- package/lib/plugins/characters/custom-popper.js +58 -0
- package/lib/plugins/characters/custom-popper.js.map +1 -0
- package/lib/plugins/characters/index.js +280 -0
- package/lib/plugins/characters/index.js.map +1 -0
- package/lib/plugins/characters/utils.js +380 -0
- package/lib/plugins/characters/utils.js.map +1 -0
- package/lib/plugins/css/icons/index.js +26 -0
- package/lib/plugins/css/icons/index.js.map +1 -0
- package/lib/plugins/css/index.js +350 -0
- package/lib/plugins/css/index.js.map +1 -0
- package/lib/plugins/customPlugin/index.js +109 -0
- package/lib/plugins/customPlugin/index.js.map +1 -0
- package/lib/plugins/html/icons/index.js +31 -0
- package/lib/plugins/html/icons/index.js.map +1 -0
- package/lib/plugins/html/index.js +72 -0
- package/lib/plugins/html/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +105 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -0
- package/lib/plugins/image/component.js +357 -0
- package/lib/plugins/image/component.js.map +1 -0
- package/lib/plugins/image/image-toolbar.js +140 -0
- package/lib/plugins/image/image-toolbar.js.map +1 -0
- package/lib/plugins/image/index.js +237 -0
- package/lib/plugins/image/index.js.map +1 -0
- package/lib/plugins/image/insert-image-handler.js +141 -0
- package/lib/plugins/image/insert-image-handler.js.map +1 -0
- package/lib/plugins/index.js +359 -0
- package/lib/plugins/index.js.map +1 -0
- package/lib/plugins/list/index.js +300 -0
- package/lib/plugins/list/index.js.map +1 -0
- package/lib/plugins/math/index.js +417 -0
- package/lib/plugins/math/index.js.map +1 -0
- package/lib/plugins/media/index.js +343 -0
- package/lib/plugins/media/index.js.map +1 -0
- package/lib/plugins/media/media-dialog.js +612 -0
- package/lib/plugins/media/media-dialog.js.map +1 -0
- package/lib/plugins/media/media-toolbar.js +78 -0
- package/lib/plugins/media/media-toolbar.js.map +1 -0
- package/lib/plugins/media/media-wrapper.js +66 -0
- package/lib/plugins/media/media-wrapper.js.map +1 -0
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/rendering/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +288 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/index.js +56 -0
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/utils.js +48 -0
- package/lib/plugins/respArea/drag-in-the-blank/utils.js.map +1 -0
- package/lib/plugins/respArea/explicit-constructed-response/index.js +51 -0
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
- package/lib/plugins/respArea/icons/index.js +82 -0
- package/lib/plugins/respArea/icons/index.js.map +1 -0
- package/lib/plugins/respArea/index.js +298 -0
- package/lib/plugins/respArea/index.js.map +1 -0
- package/lib/plugins/respArea/inline-dropdown/index.js +68 -0
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
- package/lib/plugins/respArea/math-templated/index.js +113 -0
- package/lib/plugins/respArea/math-templated/index.js.map +1 -0
- package/lib/plugins/respArea/utils.js +101 -0
- package/lib/plugins/respArea/utils.js.map +1 -0
- package/lib/plugins/table/CustomTablePlugin.js +123 -0
- package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
- package/lib/plugins/table/icons/index.js +57 -0
- package/lib/plugins/table/icons/index.js.map +1 -0
- package/lib/plugins/table/index.js +431 -0
- package/lib/plugins/table/index.js.map +1 -0
- package/lib/plugins/table/table-toolbar.js +153 -0
- package/lib/plugins/table/table-toolbar.js.map +1 -0
- package/lib/plugins/textAlign/icons/index.js +202 -0
- package/lib/plugins/textAlign/icons/index.js.map +1 -0
- package/lib/plugins/textAlign/index.js +27 -0
- package/lib/plugins/textAlign/index.js.map +1 -0
- package/lib/plugins/toolbar/default-toolbar.js +194 -0
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
- package/lib/plugins/toolbar/done-button.js +36 -0
- package/lib/plugins/toolbar/done-button.js.map +1 -0
- package/lib/plugins/toolbar/editor-and-toolbar.js +270 -0
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
- package/lib/plugins/toolbar/index.js +30 -0
- package/lib/plugins/toolbar/index.js.map +1 -0
- package/lib/plugins/toolbar/toolbar-buttons.js +157 -0
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
- package/lib/plugins/toolbar/toolbar.js +321 -0
- package/lib/plugins/toolbar/toolbar.js.map +1 -0
- package/lib/plugins/utils.js +45 -0
- package/lib/plugins/utils.js.map +1 -0
- package/lib/serialization.js +595 -0
- package/lib/serialization.js.map +1 -0
- package/lib/shared/alert-dialog.js +69 -0
- package/lib/theme.js +9 -0
- package/lib/theme.js.map +1 -0
- package/package.json +9 -11
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.array.filter.js");
|
|
4
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
5
|
+
require("core-js/modules/es.object.define-property.js");
|
|
6
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
7
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
8
|
+
require("core-js/modules/es.object.keys.js");
|
|
9
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
10
|
+
Object.defineProperty(exports, "__esModule", {
|
|
11
|
+
value: true
|
|
12
|
+
});
|
|
13
|
+
exports["default"] = CharactersPlugin;
|
|
14
|
+
exports.removeDialogs = void 0;
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
17
|
+
require("core-js/modules/es.symbol.js");
|
|
18
|
+
require("core-js/modules/es.symbol.description.js");
|
|
19
|
+
require("core-js/modules/es.array.concat.js");
|
|
20
|
+
require("core-js/modules/es.array.for-each.js");
|
|
21
|
+
require("core-js/modules/es.array.map.js");
|
|
22
|
+
require("core-js/modules/es.array.reduce.js");
|
|
23
|
+
require("core-js/modules/es.object.to-string.js");
|
|
24
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
25
|
+
require("core-js/modules/web.timers.js");
|
|
26
|
+
var _react = _interopRequireDefault(require("react"));
|
|
27
|
+
var _client = require("react-dom/client");
|
|
28
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
29
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
30
|
+
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
31
|
+
var _customPopper = _interopRequireDefault(require("./custom-popper"));
|
|
32
|
+
var _utils = require("../respArea/utils");
|
|
33
|
+
var _utils2 = require("./utils");
|
|
34
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
35
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
36
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
37
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:characters');
|
|
38
|
+
var removePopOvers = function removePopOvers() {
|
|
39
|
+
var prevPopOvers = document.querySelectorAll('#mouse-over-popover');
|
|
40
|
+
log('[characters:removePopOvers]');
|
|
41
|
+
prevPopOvers.forEach(function (s) {
|
|
42
|
+
return s.remove();
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
var removeDialogs = exports.removeDialogs = function removeDialogs() {
|
|
46
|
+
var prevDialogs = document.querySelectorAll('.insert-character-dialog');
|
|
47
|
+
log('[characters:removeDialogs]');
|
|
48
|
+
prevDialogs.forEach(function (s) {
|
|
49
|
+
return s.remove();
|
|
50
|
+
});
|
|
51
|
+
removePopOvers();
|
|
52
|
+
};
|
|
53
|
+
var insertDialog = function insertDialog(_ref) {
|
|
54
|
+
var editorDOM = _ref.editorDOM,
|
|
55
|
+
value = _ref.value,
|
|
56
|
+
callback = _ref.callback,
|
|
57
|
+
opts = _ref.opts;
|
|
58
|
+
var newEl = document.createElement('div');
|
|
59
|
+
log('[characters:insertDialog]');
|
|
60
|
+
removeDialogs();
|
|
61
|
+
newEl.className = 'insert-character-dialog';
|
|
62
|
+
var configToUse;
|
|
63
|
+
switch (true) {
|
|
64
|
+
case opts.language === 'spanish':
|
|
65
|
+
configToUse = _utils2.spanishConfig;
|
|
66
|
+
break;
|
|
67
|
+
case opts.language === 'special':
|
|
68
|
+
configToUse = _utils2.specialConfig;
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
configToUse = opts;
|
|
72
|
+
}
|
|
73
|
+
if (!configToUse.characters) {
|
|
74
|
+
(0, _utils.insertSnackBar)('No characters provided or language not recognized');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
var layoutForCharacters = configToUse.characters.reduce(function (obj, arr) {
|
|
78
|
+
if (arr.length >= obj.columns) {
|
|
79
|
+
obj.columns = arr.length;
|
|
80
|
+
}
|
|
81
|
+
return obj;
|
|
82
|
+
}, {
|
|
83
|
+
rows: configToUse.characters.length,
|
|
84
|
+
columns: 0
|
|
85
|
+
});
|
|
86
|
+
var popoverEl;
|
|
87
|
+
var popoverRoot;
|
|
88
|
+
var closePopOver = function closePopOver() {
|
|
89
|
+
if (popoverRoot) {
|
|
90
|
+
popoverRoot.unmount();
|
|
91
|
+
popoverRoot = null;
|
|
92
|
+
}
|
|
93
|
+
if (popoverEl) {
|
|
94
|
+
popoverEl.remove();
|
|
95
|
+
popoverEl = null;
|
|
96
|
+
}
|
|
97
|
+
removePopOvers();
|
|
98
|
+
};
|
|
99
|
+
var renderPopOver = function renderPopOver(event, el) {
|
|
100
|
+
if (!event) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
var infoStyle = {
|
|
104
|
+
fontSize: '20px',
|
|
105
|
+
lineHeight: '20px'
|
|
106
|
+
};
|
|
107
|
+
closePopOver();
|
|
108
|
+
popoverEl = document.createElement('div');
|
|
109
|
+
popoverRoot = (0, _client.createRoot)(popoverEl);
|
|
110
|
+
popoverRoot.render(/*#__PURE__*/_react["default"].createElement(_customPopper["default"], {
|
|
111
|
+
onClose: closePopOver,
|
|
112
|
+
anchorEl: event.currentTarget
|
|
113
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, el.label), /*#__PURE__*/_react["default"].createElement("div", {
|
|
114
|
+
style: infoStyle
|
|
115
|
+
}, el.description), /*#__PURE__*/_react["default"].createElement("div", {
|
|
116
|
+
style: infoStyle
|
|
117
|
+
}, el.unicode)));
|
|
118
|
+
document.body.appendChild(newEl);
|
|
119
|
+
};
|
|
120
|
+
var firstCallMade = false;
|
|
121
|
+
var listener = function listener(e) {
|
|
122
|
+
// this will be triggered right after setting it because
|
|
123
|
+
// this toolbar is added on the mousedown event
|
|
124
|
+
// so right after mouseup, the click will be triggered
|
|
125
|
+
if (firstCallMade) {
|
|
126
|
+
var focusIsInModals = newEl.contains(e.target) || popoverEl && popoverEl.contains(e.target);
|
|
127
|
+
var focusIsInEditor = editorDOM.contains(e.target);
|
|
128
|
+
if (!(focusIsInModals || focusIsInEditor)) {
|
|
129
|
+
handleClose();
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
firstCallMade = true;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
var handleClose = function handleClose() {
|
|
136
|
+
callback(undefined, true);
|
|
137
|
+
newEl.remove();
|
|
138
|
+
closePopOver();
|
|
139
|
+
document.body.removeEventListener('click', listener);
|
|
140
|
+
};
|
|
141
|
+
var handleChange = function handleChange(val) {
|
|
142
|
+
if (typeof val === 'string') {
|
|
143
|
+
callback(val, true);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
var el = /*#__PURE__*/_react["default"].createElement(_mathToolbar.PureToolbar, {
|
|
147
|
+
keyPadCharacterRef: opts.keyPadCharacterRef,
|
|
148
|
+
setKeypadInteraction: opts.setKeypadInteraction,
|
|
149
|
+
autoFocus: true,
|
|
150
|
+
noDecimal: true,
|
|
151
|
+
hideInput: true,
|
|
152
|
+
noLatexHandling: true,
|
|
153
|
+
hideDoneButtonBackground: true,
|
|
154
|
+
layoutForKeyPad: layoutForCharacters,
|
|
155
|
+
additionalKeys: configToUse.characters.reduce(function (arr, n) {
|
|
156
|
+
arr = [].concat((0, _toConsumableArray2["default"])(arr), (0, _toConsumableArray2["default"])(n.map(function (k) {
|
|
157
|
+
return _objectSpread({
|
|
158
|
+
name: (0, _get["default"])(k, 'name') || k,
|
|
159
|
+
write: (0, _get["default"])(k, 'write') || k,
|
|
160
|
+
label: (0, _get["default"])(k, 'label') || k,
|
|
161
|
+
category: 'character',
|
|
162
|
+
extraClass: 'character',
|
|
163
|
+
extraProps: _objectSpread(_objectSpread({}, k.extraProps || {}), {}, {
|
|
164
|
+
style: _objectSpread(_objectSpread({}, (k.extraProps || {}).style), {}, {
|
|
165
|
+
border: '1px solid #000'
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
}, configToUse.hasPreview ? {
|
|
169
|
+
actions: {
|
|
170
|
+
onMouseEnter: function onMouseEnter(ev) {
|
|
171
|
+
return renderPopOver(ev, k);
|
|
172
|
+
},
|
|
173
|
+
onMouseLeave: closePopOver
|
|
174
|
+
}
|
|
175
|
+
} : {});
|
|
176
|
+
})));
|
|
177
|
+
return arr;
|
|
178
|
+
}, []),
|
|
179
|
+
keypadMode: "language",
|
|
180
|
+
onChange: handleChange,
|
|
181
|
+
onDone: handleClose
|
|
182
|
+
});
|
|
183
|
+
var dialogRoot = (0, _client.createRoot)(newEl);
|
|
184
|
+
dialogRoot.render(el);
|
|
185
|
+
|
|
186
|
+
// Use setTimeout to ensure the element is rendered before positioning
|
|
187
|
+
setTimeout(function () {
|
|
188
|
+
var cursorItem = document.querySelector("[data-key=\"".concat(value.anchorKey, "\"]"));
|
|
189
|
+
if (cursorItem) {
|
|
190
|
+
var bodyRect = document.body.getBoundingClientRect();
|
|
191
|
+
var boundRect = cursorItem.getBoundingClientRect();
|
|
192
|
+
document.body.appendChild(newEl);
|
|
193
|
+
|
|
194
|
+
// when height of toolbar exceeds screen - can happen in scrollable contexts
|
|
195
|
+
var additionalTopOffset = 0;
|
|
196
|
+
if (boundRect.y < newEl.offsetHeight) {
|
|
197
|
+
additionalTopOffset = newEl.offsetHeight - boundRect.y + 10;
|
|
198
|
+
}
|
|
199
|
+
newEl.style.maxWidth = '500px';
|
|
200
|
+
newEl.style.position = 'absolute';
|
|
201
|
+
newEl.style.top = "".concat(boundRect.top + Math.abs(bodyRect.top) - newEl.offsetHeight - 10 + additionalTopOffset, "px");
|
|
202
|
+
newEl.style.zIndex = 99999;
|
|
203
|
+
var leftValue = "".concat(boundRect.left + Math.abs(bodyRect.left) + cursorItem.offsetWidth + 10, "px");
|
|
204
|
+
var rightValue = "".concat(boundRect.x, "px");
|
|
205
|
+
newEl.style.left = leftValue;
|
|
206
|
+
var leftAlignedWidth = newEl.offsetWidth;
|
|
207
|
+
newEl.style.left = 'unset';
|
|
208
|
+
newEl.style.right = rightValue;
|
|
209
|
+
var rightAlignedWidth = newEl.offsetWidth;
|
|
210
|
+
newEl.style.left = 'unset';
|
|
211
|
+
newEl.style.right = 'unset';
|
|
212
|
+
if (leftAlignedWidth >= rightAlignedWidth) {
|
|
213
|
+
newEl.style.left = leftValue;
|
|
214
|
+
} else {
|
|
215
|
+
newEl.style.right = rightValue;
|
|
216
|
+
}
|
|
217
|
+
document.body.addEventListener('click', listener);
|
|
218
|
+
}
|
|
219
|
+
}, 0);
|
|
220
|
+
};
|
|
221
|
+
var CharacterIcon = function CharacterIcon(_ref2) {
|
|
222
|
+
var letter = _ref2.letter;
|
|
223
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
224
|
+
style: {
|
|
225
|
+
fontSize: '24px',
|
|
226
|
+
lineHeight: '24px'
|
|
227
|
+
}
|
|
228
|
+
}, letter);
|
|
229
|
+
};
|
|
230
|
+
CharacterIcon.propTypes = {
|
|
231
|
+
letter: _propTypes["default"].string
|
|
232
|
+
};
|
|
233
|
+
function CharactersPlugin(opts) {
|
|
234
|
+
removeDialogs();
|
|
235
|
+
return {
|
|
236
|
+
name: 'characters',
|
|
237
|
+
toolbar: {
|
|
238
|
+
icon: /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
|
|
239
|
+
letter: opts.characterIcon || _utils2.characterIcons[opts.language] || 'ñ'
|
|
240
|
+
}),
|
|
241
|
+
ariaLabel: "".concat(opts.language, " characters Toolbar"),
|
|
242
|
+
onClick: function onClick(value, onChange, getFocusedValue) {
|
|
243
|
+
var editorDOM = document.querySelector("[data-key=\"".concat(value.document.key, "\"]"));
|
|
244
|
+
var valueToUse = value;
|
|
245
|
+
var callback = function callback(_char, focus) {
|
|
246
|
+
if (getFocusedValue) {
|
|
247
|
+
valueToUse = getFocusedValue() || valueToUse;
|
|
248
|
+
}
|
|
249
|
+
if (_char) {
|
|
250
|
+
var change = valueToUse.change().insertTextByKey(valueToUse.anchorKey, valueToUse.anchorOffset, _char);
|
|
251
|
+
valueToUse = change.value;
|
|
252
|
+
log('[characters:insert]: ', value);
|
|
253
|
+
onChange(change);
|
|
254
|
+
}
|
|
255
|
+
log('[characters:click]');
|
|
256
|
+
if (focus) {
|
|
257
|
+
if (editorDOM) {
|
|
258
|
+
editorDOM.focus();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
insertDialog({
|
|
263
|
+
editorDOM: editorDOM,
|
|
264
|
+
value: valueToUse,
|
|
265
|
+
callback: callback,
|
|
266
|
+
opts: opts
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
pluginStyles: function pluginStyles(node, parentNode, p) {
|
|
271
|
+
if (p) {
|
|
272
|
+
return {
|
|
273
|
+
position: 'absolute',
|
|
274
|
+
top: 'initial'
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_get","_mathToolbar","_customPopper","_utils","_utils2","_propTypes","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","removePopOvers","prevPopOvers","document","querySelectorAll","s","remove","removeDialogs","exports","prevDialogs","insertDialog","_ref","editorDOM","value","callback","opts","newEl","createElement","className","configToUse","language","spanishConfig","specialConfig","characters","insertSnackBar","layoutForCharacters","reduce","obj","arr","columns","rows","popoverEl","popoverRoot","closePopOver","unmount","renderPopOver","event","el","infoStyle","fontSize","lineHeight","createRoot","render","onClose","anchorEl","currentTarget","label","style","description","unicode","body","appendChild","firstCallMade","listener","focusIsInModals","contains","target","focusIsInEditor","handleClose","undefined","removeEventListener","handleChange","val","PureToolbar","keyPadCharacterRef","setKeypadInteraction","autoFocus","noDecimal","hideInput","noLatexHandling","hideDoneButtonBackground","layoutForKeyPad","additionalKeys","n","concat","_toConsumableArray2","map","k","name","get","write","category","extraClass","extraProps","border","hasPreview","actions","onMouseEnter","ev","onMouseLeave","keypadMode","onChange","onDone","dialogRoot","setTimeout","cursorItem","querySelector","anchorKey","bodyRect","getBoundingClientRect","boundRect","additionalTopOffset","y","offsetHeight","maxWidth","position","top","Math","abs","zIndex","leftValue","left","offsetWidth","rightValue","x","leftAlignedWidth","right","rightAlignedWidth","addEventListener","CharacterIcon","_ref2","letter","propTypes","PropTypes","string","CharactersPlugin","toolbar","icon","characterIcon","characterIcons","ariaLabel","onClick","getFocusedValue","key","valueToUse","char","focus","change","insertTextByKey","anchorOffset","pluginStyles","node","parentNode","p"],"sources":["../../../src/plugins/characters/index.jsx"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport get from 'lodash/get';\n\nimport { PureToolbar } from '@pie-lib/math-toolbar';\n\nimport CustomPopper from './custom-popper';\nimport { insertSnackBar } from '../respArea/utils';\nimport { characterIcons, spanishConfig, specialConfig } from './utils';\nimport PropTypes from 'prop-types';\n\nconst log = debug('@pie-lib:editable-html:plugins:characters');\n\nconst removePopOvers = () => {\n const prevPopOvers = document.querySelectorAll('#mouse-over-popover');\n\n log('[characters:removePopOvers]');\n prevPopOvers.forEach((s) => s.remove());\n};\n\nexport const removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-character-dialog');\n\n log('[characters:removeDialogs]');\n prevDialogs.forEach((s) => s.remove());\n removePopOvers();\n};\n\nconst insertDialog = ({ editorDOM, value, callback, opts }) => {\n const newEl = document.createElement('div');\n\n log('[characters:insertDialog]');\n\n removeDialogs();\n\n newEl.className = 'insert-character-dialog';\n\n let configToUse;\n\n switch (true) {\n case opts.language === 'spanish':\n configToUse = spanishConfig;\n break;\n case opts.language === 'special':\n configToUse = specialConfig;\n break;\n default:\n configToUse = opts;\n }\n\n if (!configToUse.characters) {\n insertSnackBar('No characters provided or language not recognized');\n return;\n }\n\n const layoutForCharacters = configToUse.characters.reduce(\n (obj, arr) => {\n if (arr.length >= obj.columns) {\n obj.columns = arr.length;\n }\n\n return obj;\n },\n { rows: configToUse.characters.length, columns: 0 },\n );\n\n let popoverEl;\n let popoverRoot;\n\n const closePopOver = () => {\n if (popoverRoot) {\n popoverRoot.unmount();\n popoverRoot = null;\n }\n if (popoverEl) {\n popoverEl.remove();\n popoverEl = null;\n }\n\n removePopOvers();\n };\n\n const renderPopOver = (event, el) => {\n if (!event) {\n return;\n }\n\n const infoStyle = { fontSize: '20px', lineHeight: '20px' };\n\n closePopOver();\n\n popoverEl = document.createElement('div');\n popoverRoot = createRoot(popoverEl);\n popoverRoot.render(\n <CustomPopper onClose={closePopOver} anchorEl={event.currentTarget}>\n <div>{el.label}</div>\n\n <div style={infoStyle}>{el.description}</div>\n\n <div style={infoStyle}>{el.unicode}</div>\n </CustomPopper>,\n );\n\n document.body.appendChild(newEl);\n };\n\n let firstCallMade = false;\n\n const listener = (e) => {\n // this will be triggered right after setting it because\n // this toolbar is added on the mousedown event\n // so right after mouseup, the click will be triggered\n if (firstCallMade) {\n const focusIsInModals = newEl.contains(e.target) || (popoverEl && popoverEl.contains(e.target));\n const focusIsInEditor = editorDOM.contains(e.target);\n\n if (!(focusIsInModals || focusIsInEditor)) {\n handleClose();\n }\n } else {\n firstCallMade = true;\n }\n };\n\n const handleClose = () => {\n callback(undefined, true);\n newEl.remove();\n closePopOver();\n document.body.removeEventListener('click', listener);\n };\n\n const handleChange = (val) => {\n if (typeof val === 'string') {\n callback(val, true);\n }\n };\n\n const el = (\n <PureToolbar\n keyPadCharacterRef={opts.keyPadCharacterRef}\n setKeypadInteraction={opts.setKeypadInteraction}\n autoFocus\n noDecimal\n hideInput\n noLatexHandling\n hideDoneButtonBackground\n layoutForKeyPad={layoutForCharacters}\n additionalKeys={configToUse.characters.reduce((arr, n) => {\n arr = [\n ...arr,\n ...n.map((k) => ({\n name: get(k, 'name') || k,\n write: get(k, 'write') || k,\n label: get(k, 'label') || k,\n category: 'character',\n extraClass: 'character',\n extraProps: {\n ...(k.extraProps || {}),\n style: {\n ...(k.extraProps || {}).style,\n border: '1px solid #000',\n },\n },\n ...(configToUse.hasPreview\n ? {\n actions: { onMouseEnter: (ev) => renderPopOver(ev, k), onMouseLeave: closePopOver },\n }\n : {}),\n })),\n ];\n\n return arr;\n }, [])}\n keypadMode=\"language\"\n onChange={handleChange}\n onDone={handleClose}\n />\n );\n\n const dialogRoot = createRoot(newEl);\n dialogRoot.render(el);\n\n // Use setTimeout to ensure the element is rendered before positioning\n setTimeout(() => {\n const cursorItem = document.querySelector(`[data-key=\"${value.anchorKey}\"]`);\n\n if (cursorItem) {\n const bodyRect = document.body.getBoundingClientRect();\n const boundRect = cursorItem.getBoundingClientRect();\n\n document.body.appendChild(newEl);\n\n // when height of toolbar exceeds screen - can happen in scrollable contexts\n let additionalTopOffset = 0;\n if (boundRect.y < newEl.offsetHeight) {\n additionalTopOffset = newEl.offsetHeight - boundRect.y + 10;\n }\n\n newEl.style.maxWidth = '500px';\n newEl.style.position = 'absolute';\n newEl.style.top = `${boundRect.top + Math.abs(bodyRect.top) - newEl.offsetHeight - 10 + additionalTopOffset}px`;\n newEl.style.zIndex = 99999;\n\n const leftValue = `${boundRect.left + Math.abs(bodyRect.left) + cursorItem.offsetWidth + 10}px`;\n\n const rightValue = `${boundRect.x}px`;\n\n newEl.style.left = leftValue;\n\n const leftAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = rightValue;\n\n const rightAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = 'unset';\n\n if (leftAlignedWidth >= rightAlignedWidth) {\n newEl.style.left = leftValue;\n } else {\n newEl.style.right = rightValue;\n }\n\n document.body.addEventListener('click', listener);\n }\n }, 0);\n};\n\nconst CharacterIcon = ({ letter }) => (\n <div\n style={{\n fontSize: '24px',\n lineHeight: '24px',\n }}\n >\n {letter}\n </div>\n);\n\nCharacterIcon.propTypes = {\n letter: PropTypes.string,\n};\n\nexport default function CharactersPlugin(opts) {\n removeDialogs();\n\n return {\n name: 'characters',\n toolbar: {\n icon: <CharacterIcon letter={opts.characterIcon || characterIcons[opts.language] || 'ñ'} />,\n ariaLabel: `${opts.language} characters Toolbar`,\n onClick: (value, onChange, getFocusedValue) => {\n const editorDOM = document.querySelector(`[data-key=\"${value.document.key}\"]`);\n let valueToUse = value;\n\n const callback = (char, focus) => {\n if (getFocusedValue) {\n valueToUse = getFocusedValue() || valueToUse;\n }\n\n if (char) {\n const change = valueToUse.change().insertTextByKey(valueToUse.anchorKey, valueToUse.anchorOffset, char);\n\n valueToUse = change.value;\n log('[characters:insert]: ', value);\n onChange(change);\n }\n\n log('[characters:click]');\n\n if (focus) {\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n };\n\n insertDialog({ editorDOM, value: valueToUse, callback, opts });\n },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|