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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/block-tags.js +24 -0
  3. package/lib/block-tags.js.map +1 -0
  4. package/lib/constants.js +11 -0
  5. package/lib/constants.js.map +1 -0
  6. package/lib/editor.js +1224 -0
  7. package/lib/editor.js.map +1 -0
  8. package/lib/index.js +208 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/parse-html.js +16 -0
  11. package/lib/parse-html.js.map +1 -0
  12. package/lib/plugins/characters/custom-popper.js +57 -0
  13. package/lib/plugins/characters/custom-popper.js.map +1 -0
  14. package/lib/plugins/characters/index.js +265 -0
  15. package/lib/plugins/characters/index.js.map +1 -0
  16. package/lib/plugins/characters/utils.js +378 -0
  17. package/lib/plugins/characters/utils.js.map +1 -0
  18. package/lib/plugins/css/icons/index.js +25 -0
  19. package/lib/plugins/css/icons/index.js.map +1 -0
  20. package/lib/plugins/css/index.js +338 -0
  21. package/lib/plugins/css/index.js.map +1 -0
  22. package/lib/plugins/customPlugin/index.js +98 -0
  23. package/lib/plugins/customPlugin/index.js.map +1 -0
  24. package/lib/plugins/html/icons/index.js +30 -0
  25. package/lib/plugins/html/icons/index.js.map +1 -0
  26. package/lib/plugins/html/index.js +71 -0
  27. package/lib/plugins/html/index.js.map +1 -0
  28. package/lib/plugins/image/alt-dialog.js +100 -0
  29. package/lib/plugins/image/alt-dialog.js.map +1 -0
  30. package/lib/plugins/image/component.js +343 -0
  31. package/lib/plugins/image/component.js.map +1 -0
  32. package/lib/plugins/image/image-toolbar.js +137 -0
  33. package/lib/plugins/image/image-toolbar.js.map +1 -0
  34. package/lib/plugins/image/index.js +223 -0
  35. package/lib/plugins/image/index.js.map +1 -0
  36. package/lib/plugins/image/insert-image-handler.js +140 -0
  37. package/lib/plugins/image/insert-image-handler.js.map +1 -0
  38. package/lib/plugins/index.js +342 -0
  39. package/lib/plugins/index.js.map +1 -0
  40. package/lib/plugins/list/index.js +288 -0
  41. package/lib/plugins/list/index.js.map +1 -0
  42. package/lib/plugins/math/index.js +402 -0
  43. package/lib/plugins/math/index.js.map +1 -0
  44. package/lib/plugins/media/index.js +330 -0
  45. package/lib/plugins/media/index.js.map +1 -0
  46. package/lib/plugins/media/media-dialog.js +594 -0
  47. package/lib/plugins/media/media-dialog.js.map +1 -0
  48. package/lib/plugins/media/media-toolbar.js +76 -0
  49. package/lib/plugins/media/media-toolbar.js.map +1 -0
  50. package/lib/plugins/media/media-wrapper.js +64 -0
  51. package/lib/plugins/media/media-wrapper.js.map +1 -0
  52. package/lib/plugins/rendering/index.js +36 -0
  53. package/lib/plugins/rendering/index.js.map +1 -0
  54. package/lib/plugins/respArea/drag-in-the-blank/choice.js +271 -0
  55. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -0
  56. package/lib/plugins/respArea/drag-in-the-blank/index.js +55 -0
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
  58. package/lib/plugins/respArea/drag-in-the-blank/utils.js +38 -0
  59. package/lib/plugins/respArea/drag-in-the-blank/utils.js.map +1 -0
  60. package/lib/plugins/respArea/explicit-constructed-response/index.js +50 -0
  61. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
  62. package/lib/plugins/respArea/icons/index.js +72 -0
  63. package/lib/plugins/respArea/icons/index.js.map +1 -0
  64. package/lib/plugins/respArea/index.js +287 -0
  65. package/lib/plugins/respArea/index.js.map +1 -0
  66. package/lib/plugins/respArea/inline-dropdown/index.js +67 -0
  67. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
  68. package/lib/plugins/respArea/math-templated/index.js +112 -0
  69. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  70. package/lib/plugins/respArea/utils.js +95 -0
  71. package/lib/plugins/respArea/utils.js.map +1 -0
  72. package/lib/plugins/table/CustomTablePlugin.js +116 -0
  73. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  74. package/lib/plugins/table/icons/index.js +55 -0
  75. package/lib/plugins/table/icons/index.js.map +1 -0
  76. package/lib/plugins/table/index.js +413 -0
  77. package/lib/plugins/table/index.js.map +1 -0
  78. package/lib/plugins/table/table-toolbar.js +138 -0
  79. package/lib/plugins/table/table-toolbar.js.map +1 -0
  80. package/lib/plugins/textAlign/icons/index.js +187 -0
  81. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  82. package/lib/plugins/textAlign/index.js +26 -0
  83. package/lib/plugins/textAlign/index.js.map +1 -0
  84. package/lib/plugins/toolbar/default-toolbar.js +180 -0
  85. package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
  86. package/lib/plugins/toolbar/done-button.js +35 -0
  87. package/lib/plugins/toolbar/done-button.js.map +1 -0
  88. package/lib/plugins/toolbar/editor-and-toolbar.js +258 -0
  89. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
  90. package/lib/plugins/toolbar/index.js +29 -0
  91. package/lib/plugins/toolbar/index.js.map +1 -0
  92. package/lib/plugins/toolbar/toolbar-buttons.js +145 -0
  93. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
  94. package/lib/plugins/toolbar/toolbar.js +307 -0
  95. package/lib/plugins/toolbar/toolbar.js.map +1 -0
  96. package/lib/plugins/utils.js +42 -0
  97. package/lib/plugins/utils.js.map +1 -0
  98. package/lib/serialization.js +571 -0
  99. package/lib/serialization.js.map +1 -0
  100. package/lib/shared/alert-dialog.js +68 -0
  101. package/lib/theme.js +8 -0
  102. package/lib/theme.js.map +1 -0
  103. package/package.json +7 -7
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = CharactersPlugin;
8
+ exports.removeDialogs = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _client = require("react-dom/client");
13
+ var _debug = _interopRequireDefault(require("debug"));
14
+ var _get = _interopRequireDefault(require("lodash/get"));
15
+ var _mathToolbar = require("@pie-lib/math-toolbar");
16
+ var _customPopper = _interopRequireDefault(require("./custom-popper"));
17
+ var _utils = require("../respArea/utils");
18
+ var _utils2 = require("./utils");
19
+ var _propTypes = _interopRequireDefault(require("prop-types"));
20
+ 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; }
21
+ 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; }
22
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:characters');
23
+ var removePopOvers = function removePopOvers() {
24
+ var prevPopOvers = document.querySelectorAll('#mouse-over-popover');
25
+ log('[characters:removePopOvers]');
26
+ prevPopOvers.forEach(function (s) {
27
+ return s.remove();
28
+ });
29
+ };
30
+ var removeDialogs = exports.removeDialogs = function removeDialogs() {
31
+ var prevDialogs = document.querySelectorAll('.insert-character-dialog');
32
+ log('[characters:removeDialogs]');
33
+ prevDialogs.forEach(function (s) {
34
+ return s.remove();
35
+ });
36
+ removePopOvers();
37
+ };
38
+ var insertDialog = function insertDialog(_ref) {
39
+ var editorDOM = _ref.editorDOM,
40
+ value = _ref.value,
41
+ callback = _ref.callback,
42
+ opts = _ref.opts;
43
+ var newEl = document.createElement('div');
44
+ log('[characters:insertDialog]');
45
+ removeDialogs();
46
+ newEl.className = 'insert-character-dialog';
47
+ var configToUse;
48
+ switch (true) {
49
+ case opts.language === 'spanish':
50
+ configToUse = _utils2.spanishConfig;
51
+ break;
52
+ case opts.language === 'special':
53
+ configToUse = _utils2.specialConfig;
54
+ break;
55
+ default:
56
+ configToUse = opts;
57
+ }
58
+ if (!configToUse.characters) {
59
+ (0, _utils.insertSnackBar)('No characters provided or language not recognized');
60
+ return;
61
+ }
62
+ var layoutForCharacters = configToUse.characters.reduce(function (obj, arr) {
63
+ if (arr.length >= obj.columns) {
64
+ obj.columns = arr.length;
65
+ }
66
+ return obj;
67
+ }, {
68
+ rows: configToUse.characters.length,
69
+ columns: 0
70
+ });
71
+ var popoverEl;
72
+ var popoverRoot;
73
+ var closePopOver = function closePopOver() {
74
+ if (popoverRoot) {
75
+ popoverRoot.unmount();
76
+ popoverRoot = null;
77
+ }
78
+ if (popoverEl) {
79
+ popoverEl.remove();
80
+ popoverEl = null;
81
+ }
82
+ removePopOvers();
83
+ };
84
+ var renderPopOver = function renderPopOver(event, el) {
85
+ if (!event) {
86
+ return;
87
+ }
88
+ var infoStyle = {
89
+ fontSize: '20px',
90
+ lineHeight: '20px'
91
+ };
92
+ closePopOver();
93
+ popoverEl = document.createElement('div');
94
+ popoverRoot = (0, _client.createRoot)(popoverEl);
95
+ popoverRoot.render(/*#__PURE__*/_react["default"].createElement(_customPopper["default"], {
96
+ onClose: closePopOver,
97
+ anchorEl: event.currentTarget
98
+ }, /*#__PURE__*/_react["default"].createElement("div", null, el.label), /*#__PURE__*/_react["default"].createElement("div", {
99
+ style: infoStyle
100
+ }, el.description), /*#__PURE__*/_react["default"].createElement("div", {
101
+ style: infoStyle
102
+ }, el.unicode)));
103
+ document.body.appendChild(newEl);
104
+ };
105
+ var firstCallMade = false;
106
+ var listener = function listener(e) {
107
+ // this will be triggered right after setting it because
108
+ // this toolbar is added on the mousedown event
109
+ // so right after mouseup, the click will be triggered
110
+ if (firstCallMade) {
111
+ var focusIsInModals = newEl.contains(e.target) || popoverEl && popoverEl.contains(e.target);
112
+ var focusIsInEditor = editorDOM.contains(e.target);
113
+ if (!(focusIsInModals || focusIsInEditor)) {
114
+ handleClose();
115
+ }
116
+ } else {
117
+ firstCallMade = true;
118
+ }
119
+ };
120
+ var handleClose = function handleClose() {
121
+ callback(undefined, true);
122
+ newEl.remove();
123
+ closePopOver();
124
+ document.body.removeEventListener('click', listener);
125
+ };
126
+ var handleChange = function handleChange(val) {
127
+ if (typeof val === 'string') {
128
+ callback(val, true);
129
+ }
130
+ };
131
+ var el = /*#__PURE__*/_react["default"].createElement(_mathToolbar.PureToolbar, {
132
+ keyPadCharacterRef: opts.keyPadCharacterRef,
133
+ setKeypadInteraction: opts.setKeypadInteraction,
134
+ autoFocus: true,
135
+ noDecimal: true,
136
+ hideInput: true,
137
+ noLatexHandling: true,
138
+ hideDoneButtonBackground: true,
139
+ layoutForKeyPad: layoutForCharacters,
140
+ additionalKeys: configToUse.characters.reduce(function (arr, n) {
141
+ arr = [].concat((0, _toConsumableArray2["default"])(arr), (0, _toConsumableArray2["default"])(n.map(function (k) {
142
+ return _objectSpread({
143
+ name: (0, _get["default"])(k, 'name') || k,
144
+ write: (0, _get["default"])(k, 'write') || k,
145
+ label: (0, _get["default"])(k, 'label') || k,
146
+ category: 'character',
147
+ extraClass: 'character',
148
+ extraProps: _objectSpread(_objectSpread({}, k.extraProps || {}), {}, {
149
+ style: _objectSpread(_objectSpread({}, (k.extraProps || {}).style), {}, {
150
+ border: '1px solid #000'
151
+ })
152
+ })
153
+ }, configToUse.hasPreview ? {
154
+ actions: {
155
+ onMouseEnter: function onMouseEnter(ev) {
156
+ return renderPopOver(ev, k);
157
+ },
158
+ onMouseLeave: closePopOver
159
+ }
160
+ } : {});
161
+ })));
162
+ return arr;
163
+ }, []),
164
+ keypadMode: "language",
165
+ onChange: handleChange,
166
+ onDone: handleClose
167
+ });
168
+ var dialogRoot = (0, _client.createRoot)(newEl);
169
+ dialogRoot.render(el);
170
+
171
+ // Use setTimeout to ensure the element is rendered before positioning
172
+ setTimeout(function () {
173
+ var cursorItem = document.querySelector("[data-key=\"".concat(value.anchorKey, "\"]"));
174
+ if (cursorItem) {
175
+ var bodyRect = document.body.getBoundingClientRect();
176
+ var boundRect = cursorItem.getBoundingClientRect();
177
+ document.body.appendChild(newEl);
178
+
179
+ // when height of toolbar exceeds screen - can happen in scrollable contexts
180
+ var additionalTopOffset = 0;
181
+ if (boundRect.y < newEl.offsetHeight) {
182
+ additionalTopOffset = newEl.offsetHeight - boundRect.y + 10;
183
+ }
184
+ newEl.style.maxWidth = '500px';
185
+ newEl.style.position = 'absolute';
186
+ newEl.style.top = "".concat(boundRect.top + Math.abs(bodyRect.top) - newEl.offsetHeight - 10 + additionalTopOffset, "px");
187
+ newEl.style.zIndex = 99999;
188
+ var leftValue = "".concat(boundRect.left + Math.abs(bodyRect.left) + cursorItem.offsetWidth + 10, "px");
189
+ var rightValue = "".concat(boundRect.x, "px");
190
+ newEl.style.left = leftValue;
191
+ var leftAlignedWidth = newEl.offsetWidth;
192
+ newEl.style.left = 'unset';
193
+ newEl.style.right = rightValue;
194
+ var rightAlignedWidth = newEl.offsetWidth;
195
+ newEl.style.left = 'unset';
196
+ newEl.style.right = 'unset';
197
+ if (leftAlignedWidth >= rightAlignedWidth) {
198
+ newEl.style.left = leftValue;
199
+ } else {
200
+ newEl.style.right = rightValue;
201
+ }
202
+ document.body.addEventListener('click', listener);
203
+ }
204
+ }, 0);
205
+ };
206
+ var CharacterIcon = function CharacterIcon(_ref2) {
207
+ var letter = _ref2.letter;
208
+ return /*#__PURE__*/_react["default"].createElement("div", {
209
+ style: {
210
+ fontSize: '24px',
211
+ lineHeight: '24px'
212
+ }
213
+ }, letter);
214
+ };
215
+ CharacterIcon.propTypes = {
216
+ letter: _propTypes["default"].string
217
+ };
218
+ function CharactersPlugin(opts) {
219
+ removeDialogs();
220
+ return {
221
+ name: 'characters',
222
+ toolbar: {
223
+ icon: /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
224
+ letter: opts.characterIcon || _utils2.characterIcons[opts.language] || 'ñ'
225
+ }),
226
+ ariaLabel: "".concat(opts.language, " characters Toolbar"),
227
+ onClick: function onClick(value, onChange, getFocusedValue) {
228
+ var editorDOM = document.querySelector("[data-key=\"".concat(value.document.key, "\"]"));
229
+ var valueToUse = value;
230
+ var callback = function callback(_char, focus) {
231
+ if (getFocusedValue) {
232
+ valueToUse = getFocusedValue() || valueToUse;
233
+ }
234
+ if (_char) {
235
+ var change = valueToUse.change().insertTextByKey(valueToUse.anchorKey, valueToUse.anchorOffset, _char);
236
+ valueToUse = change.value;
237
+ log('[characters:insert]: ', value);
238
+ onChange(change);
239
+ }
240
+ log('[characters:click]');
241
+ if (focus) {
242
+ if (editorDOM) {
243
+ editorDOM.focus();
244
+ }
245
+ }
246
+ };
247
+ insertDialog({
248
+ editorDOM: editorDOM,
249
+ value: valueToUse,
250
+ callback: callback,
251
+ opts: opts
252
+ });
253
+ }
254
+ },
255
+ pluginStyles: function pluginStyles(node, parentNode, p) {
256
+ if (p) {
257
+ return {
258
+ position: 'absolute',
259
+ top: 'initial'
260
+ };
261
+ }
262
+ }
263
+ };
264
+ }
265
+ //# 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":[]}
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.specialConfig = exports.spanishConfig = exports.characterIcons = void 0;
7
+ var spanishConfig = exports.spanishConfig = {
8
+ characters: [['á', 'é', 'í', 'ó', 'ú'], ['Á', 'É', 'Í', 'Ó', 'Ú'], ['—', '«', '»', 'ñ', 'ü'], ['-', '¿', '¡', 'Ñ', 'Ü']]
9
+ };
10
+ var specialConfig = exports.specialConfig = {
11
+ hasPreview: true,
12
+ characters: [[{
13
+ unicode: 'U+00A2',
14
+ description: 'CENT SIGN',
15
+ write: '¢',
16
+ label: '¢'
17
+ }, {
18
+ unicode: 'U+00BF',
19
+ description: 'INVERTED QUESTION MARK',
20
+ write: '¿',
21
+ label: '¿'
22
+ }, {
23
+ unicode: 'U+00B4',
24
+ description: 'ACUTE ACCENT',
25
+ write: '´',
26
+ label: '´',
27
+ extraProps: {
28
+ style: {
29
+ gridRow: 'span 2'
30
+ }
31
+ }
32
+ }, {
33
+ unicode: 'U+00E1',
34
+ description: 'LATIN SMALL LETTER A WITH ACUTE',
35
+ write: 'á',
36
+ label: 'á'
37
+ }, {
38
+ unicode: 'U+00E9',
39
+ description: 'LATIN SMALL LETTER E WITH ACUTE',
40
+ write: 'é',
41
+ label: 'é'
42
+ }, {
43
+ unicode: 'U+00ED',
44
+ description: 'LATIN SMALL LETTER I WITH ACUTE',
45
+ write: 'í',
46
+ label: 'í'
47
+ }, {
48
+ unicode: 'U+00F3',
49
+ description: 'LATIN SMALL LETTER O WITH ACUTE',
50
+ write: 'ó',
51
+ label: 'ó'
52
+ }, {
53
+ unicode: 'U+00FA',
54
+ description: 'LATIN SMALL LETTER U WITH ACUTE',
55
+ write: 'ú',
56
+ label: 'ú'
57
+ }, {
58
+ unicode: 'U+00F1',
59
+ description: 'LATIN SMALL LETTER N WITH TILDE',
60
+ write: 'ñ',
61
+ label: 'ñ'
62
+ }], [{
63
+ unicode: 'U+20AC',
64
+ description: 'EURO SIGN',
65
+ write: '€',
66
+ label: '€'
67
+ }, {
68
+ unicode: 'U+00A1',
69
+ description: 'INVERTED EXCLAMATION MARK',
70
+ write: '¡',
71
+ label: '¡'
72
+ }, {
73
+ unicode: 'U+00C1',
74
+ description: 'LATIN CAPITAL LETTER A WITH ACUTE',
75
+ write: 'Á',
76
+ label: 'Á'
77
+ }, {
78
+ unicode: 'U+00C9',
79
+ description: 'LATIN CAPITAL LETTER E WITH ACUTE',
80
+ write: 'É',
81
+ label: 'É'
82
+ }, {
83
+ unicode: 'U+00CD',
84
+ description: 'LATIN CAPITAL LETTER I WITH ACUTE',
85
+ write: 'Í',
86
+ label: 'Í'
87
+ }, {
88
+ unicode: 'U+00D3',
89
+ description: 'LATIN CAPITAL LETTER O WITH ACUTE',
90
+ write: 'Ó',
91
+ label: 'Ó'
92
+ }, {
93
+ unicode: 'U+00DA',
94
+ description: 'LATIN CAPITAL LETTER U WITH ACUTE',
95
+ write: 'Ú',
96
+ label: 'Ú'
97
+ }, {
98
+ unicode: 'U+00D1',
99
+ description: 'LATIN CAPITAL LETTER N WITH TILDE',
100
+ write: 'Ñ',
101
+ label: 'Ñ'
102
+ }], [{
103
+ unicode: 'U+00A3',
104
+ description: 'POUND SIGN',
105
+ write: '£',
106
+ label: '£'
107
+ }, {
108
+ unicode: 'U+00AB',
109
+ description: 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK',
110
+ write: '«',
111
+ label: '«'
112
+ }, {
113
+ unicode: 'U+005E',
114
+ description: 'CIRCUMFLEX ACCENT',
115
+ write: '^',
116
+ label: '^',
117
+ extraProps: {
118
+ style: {
119
+ gridRow: 'span 2'
120
+ }
121
+ }
122
+ }, {
123
+ unicode: 'U+00E2',
124
+ description: 'LATIN SMALL LETTER A WITH CIRCUMFLEX',
125
+ write: 'â',
126
+ label: 'â'
127
+ }, {
128
+ unicode: 'U+00EA',
129
+ description: 'LATIN SMALL LETTER E WITH CIRCUMFLEX',
130
+ write: 'ê',
131
+ label: 'ê'
132
+ }, {
133
+ unicode: 'U+00EE',
134
+ description: 'LATIN SMALL LETTER I WITH CIRCUMFLEX',
135
+ write: 'î',
136
+ label: 'î'
137
+ }, {
138
+ unicode: 'U+00F4',
139
+ description: 'LATIN SMALL LETTER O WITH CIRCUMFLEX',
140
+ write: 'ô',
141
+ label: 'ô'
142
+ }, {
143
+ unicode: 'U+00FB',
144
+ description: 'LATIN SMALL LETTER U WITH CIRCUMFLEX',
145
+ write: 'û',
146
+ label: 'û'
147
+ }, {
148
+ unicode: 'U+00E7',
149
+ description: 'LATIN SMALL LETTER C WITH CEDILLA',
150
+ write: 'ç',
151
+ label: 'ç'
152
+ }], [{
153
+ unicode: 'U+00A5',
154
+ description: 'YEN SIGN',
155
+ write: '¥',
156
+ label: '¥'
157
+ }, {
158
+ unicode: 'U+00BB',
159
+ description: 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK',
160
+ write: '»',
161
+ label: '»'
162
+ }, {
163
+ unicode: 'U+00C2',
164
+ description: 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX',
165
+ write: 'Â',
166
+ label: 'Â'
167
+ }, {
168
+ unicode: 'U+00CA',
169
+ description: 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX',
170
+ write: 'Ê',
171
+ label: 'Ê'
172
+ }, {
173
+ unicode: 'U+00CE',
174
+ description: 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX',
175
+ write: 'Î',
176
+ label: 'Î'
177
+ }, {
178
+ unicode: 'U+00D4',
179
+ description: 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX',
180
+ write: 'Ô',
181
+ label: 'Ô'
182
+ }, {
183
+ unicode: 'U+00DB',
184
+ description: 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX',
185
+ write: 'Û',
186
+ label: 'Û'
187
+ }, {
188
+ unicode: 'U+00C7',
189
+ description: 'LATIN CAPITAL LETTER C WITH CEDILLA',
190
+ write: 'Ç',
191
+ label: 'Ç'
192
+ }], [{
193
+ unicode: 'U+200A',
194
+ description: 'HAIR SPACE',
195
+ write: String.fromCodePoint('0x200A'),
196
+ label: '&hairsp;'
197
+ }, {
198
+ unicode: 'U+00A7',
199
+ description: 'SECTION SIGN',
200
+ write: '§',
201
+ label: '§'
202
+ }, {
203
+ unicode: 'U+00A8',
204
+ description: 'DIAERESIS',
205
+ write: '¨',
206
+ label: '¨',
207
+ extraProps: {
208
+ style: {
209
+ gridRow: 'span 2'
210
+ }
211
+ }
212
+ }, {
213
+ unicode: 'U+00E4',
214
+ description: 'LATIN SMALL LETTER A WITH DIAERESIS',
215
+ write: 'ä',
216
+ label: 'ä'
217
+ }, {
218
+ unicode: 'U+00EB',
219
+ description: 'LATIN SMALL LETTER E WITH DIAERESIS',
220
+ write: 'ë',
221
+ label: 'ë'
222
+ }, {
223
+ unicode: 'U+00EF',
224
+ description: 'LATIN SMALL LETTER I WITH DIAERESIS',
225
+ write: 'ï',
226
+ label: 'ï'
227
+ }, {
228
+ unicode: 'U+00F6',
229
+ description: 'LATIN SMALL LETTER O WITH DIAERESIS',
230
+ write: 'ö',
231
+ label: 'ö'
232
+ }, {
233
+ unicode: 'U+00FC',
234
+ description: 'LATIN SMALL LETTER U WITH DIAERESIS',
235
+ write: 'ü',
236
+ label: 'ü'
237
+ }, {
238
+ unicode: 'U+00DF',
239
+ description: 'LATIN SMALL LETTER SHARP S',
240
+ write: 'ß',
241
+ label: 'ß'
242
+ }], [{
243
+ unicode: 'U+2009',
244
+ description: 'THIN SPACE',
245
+ write: String.fromCodePoint('0x2009'),
246
+ label: '&thinsp;'
247
+ }, {
248
+ unicode: 'U+2026',
249
+ description: 'HORIZONTAL ELLIPSIS',
250
+ write: '…',
251
+ label: '…'
252
+ }, {
253
+ unicode: 'U+00C4',
254
+ description: 'LATIN CAPITAL LETTER A WITH DIAERESIS',
255
+ write: 'Ä',
256
+ label: 'Ä'
257
+ }, {
258
+ unicode: 'U+00CB',
259
+ description: 'LATIN CAPITAL LETTER E WITH DIAERESIS',
260
+ write: 'Ë',
261
+ label: 'Ë'
262
+ }, {
263
+ unicode: 'U+00CF',
264
+ description: 'LATIN CAPITAL LETTER I WITH DIAERESIS',
265
+ write: 'Ï',
266
+ label: 'Ï'
267
+ }, {
268
+ unicode: 'U+00D6',
269
+ description: 'LATIN CAPITAL LETTER O WITH DIAERESIS',
270
+ write: 'Ö',
271
+ label: 'Ö'
272
+ }, {
273
+ unicode: 'U+00DC',
274
+ description: 'LATIN CAPITAL LETTER U WITH DIAERESIS',
275
+ write: 'Ü',
276
+ label: 'Ü'
277
+ }, {
278
+ unicode: 'U+2212',
279
+ description: 'MINUS SIGN',
280
+ write: '−',
281
+ label: '−'
282
+ }], [{
283
+ unicode: 'U+00A0',
284
+ description: 'NO-BREAK SPACE',
285
+ write: String.fromCodePoint('0x00A0'),
286
+ label: '&nbsp;'
287
+ }, {
288
+ unicode: 'U+2022',
289
+ description: 'BULLET',
290
+ write: '•',
291
+ label: '•'
292
+ }, {
293
+ unicode: 'U+0060',
294
+ description: 'GRAVE ACCENT',
295
+ write: '`',
296
+ label: '`',
297
+ extraProps: {
298
+ style: {
299
+ gridRow: 'span 2'
300
+ }
301
+ }
302
+ }, {
303
+ unicode: 'U+00E0',
304
+ description: 'LATIN SMALL LETTER A WITH GRAVE',
305
+ write: 'à',
306
+ label: 'à'
307
+ }, {
308
+ unicode: 'U+00E8',
309
+ description: 'LATIN SMALL LETTER E WITH GRAVE',
310
+ write: 'è',
311
+ label: 'è'
312
+ }, {
313
+ unicode: 'U+00EC',
314
+ description: 'LATIN SMALL LETTER I WITH GRAVE',
315
+ write: 'ì',
316
+ label: 'ì'
317
+ }, {
318
+ unicode: 'U+00F2',
319
+ description: 'LATIN SMALL LETTER O WITH GRAVE',
320
+ write: 'ò',
321
+ label: 'ò'
322
+ }, {
323
+ unicode: 'U+00F9',
324
+ description: 'LATIN SMALL LETTER U WITH GRAVE',
325
+ write: 'ù',
326
+ label: 'ù'
327
+ }, {
328
+ unicode: 'U+2013',
329
+ description: 'EN DASH',
330
+ write: '–',
331
+ label: '–'
332
+ }], [{
333
+ unicode: 'U+2003',
334
+ description: 'EM SPACE',
335
+ write: String.fromCodePoint('0x2003'),
336
+ label: '&emsp;'
337
+ }, {
338
+ unicode: 'U+25E6',
339
+ description: 'WHITE BULLET',
340
+ write: '◦',
341
+ label: '◦'
342
+ }, {
343
+ unicode: 'U+00C0',
344
+ description: 'LATIN CAPITAL LETTER A WITH GRAVE',
345
+ write: 'À',
346
+ label: 'À'
347
+ }, {
348
+ unicode: 'U+00C8',
349
+ description: 'LATIN CAPITAL LETTER E WITH GRAVE',
350
+ write: 'È',
351
+ label: 'È'
352
+ }, {
353
+ unicode: 'U+00CC',
354
+ description: 'LATIN CAPITAL LETTER I WITH GRAVE',
355
+ write: 'Ì',
356
+ label: 'Ì'
357
+ }, {
358
+ unicode: 'U+00D2',
359
+ description: 'LATIN CAPITAL LETTER O WITH GRAVE',
360
+ write: 'Ò',
361
+ label: 'Ò'
362
+ }, {
363
+ unicode: 'U+00D9',
364
+ description: 'LATIN CAPITAL LETTER U WITH GRAVE',
365
+ write: 'Ù',
366
+ label: 'Ù'
367
+ }, {
368
+ unicode: 'U+2014',
369
+ description: 'EM DASH',
370
+ write: '—',
371
+ label: '—'
372
+ }]]
373
+ };
374
+ var characterIcons = exports.characterIcons = {
375
+ spanish: 'ñ',
376
+ special: '€'
377
+ };
378
+ //# sourceMappingURL=utils.js.map