@barocss/math-editor 0.1.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 (123) hide show
  1. package/ADAPTERS.md +170 -0
  2. package/CHANGELOG.md +13 -0
  3. package/EMBEDDING.md +95 -0
  4. package/IMPLEMENTATION.md +111 -0
  5. package/LATEX-SCOPE.md +7 -0
  6. package/LICENSE +23 -0
  7. package/LOCALIZATION.md +97 -0
  8. package/README.md +151 -0
  9. package/RELEASING.md +31 -0
  10. package/ROADMAP.md +102 -0
  11. package/SUPPORT.md +160 -0
  12. package/SYMBOLS.md +96 -0
  13. package/VALIDATION.md +85 -0
  14. package/dist/core.d.ts +11 -0
  15. package/dist/core.d.ts.map +1 -0
  16. package/dist/core.js +11 -0
  17. package/dist/core.js.map +1 -0
  18. package/dist/dom/elements.d.ts +3 -0
  19. package/dist/dom/elements.d.ts.map +1 -0
  20. package/dist/dom/elements.js +9 -0
  21. package/dist/dom/elements.js.map +1 -0
  22. package/dist/dom/toolbar.d.ts +11 -0
  23. package/dist/dom/toolbar.d.ts.map +1 -0
  24. package/dist/dom/toolbar.js +46 -0
  25. package/dist/dom/toolbar.js.map +1 -0
  26. package/dist/dom.d.ts +32 -0
  27. package/dist/dom.d.ts.map +1 -0
  28. package/dist/dom.js +581 -0
  29. package/dist/dom.js.map +1 -0
  30. package/dist/editor-labels.d.ts +9 -0
  31. package/dist/editor-labels.d.ts.map +1 -0
  32. package/dist/editor-labels.js +31 -0
  33. package/dist/editor-labels.js.map +1 -0
  34. package/dist/enter-policy.d.ts +11 -0
  35. package/dist/enter-policy.d.ts.map +1 -0
  36. package/dist/enter-policy.js +13 -0
  37. package/dist/enter-policy.js.map +1 -0
  38. package/dist/i18n.d.ts +20 -0
  39. package/dist/i18n.d.ts.map +1 -0
  40. package/dist/i18n.js +58 -0
  41. package/dist/i18n.js.map +1 -0
  42. package/dist/index.d.ts +12 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +12 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lines.d.ts +7 -0
  47. package/dist/lines.d.ts.map +1 -0
  48. package/dist/lines.js +51 -0
  49. package/dist/lines.js.map +1 -0
  50. package/dist/locales/en.js +214 -0
  51. package/dist/locales/en.json +213 -0
  52. package/dist/locales/ko.js +214 -0
  53. package/dist/locales/ko.json +213 -0
  54. package/dist/math-editor-toolbar.d.ts +24 -0
  55. package/dist/math-editor-toolbar.d.ts.map +1 -0
  56. package/dist/math-editor-toolbar.js +21 -0
  57. package/dist/math-editor-toolbar.js.map +1 -0
  58. package/dist/math-editor.d.ts +23 -0
  59. package/dist/math-editor.d.ts.map +1 -0
  60. package/dist/math-editor.js +692 -0
  61. package/dist/math-editor.js.map +1 -0
  62. package/dist/matrix.d.ts +29 -0
  63. package/dist/matrix.d.ts.map +1 -0
  64. package/dist/matrix.js +125 -0
  65. package/dist/matrix.js.map +1 -0
  66. package/dist/model.d.ts +74 -0
  67. package/dist/model.d.ts.map +1 -0
  68. package/dist/model.js +262 -0
  69. package/dist/model.js.map +1 -0
  70. package/dist/outputs.d.ts +13 -0
  71. package/dist/outputs.d.ts.map +1 -0
  72. package/dist/outputs.js +61 -0
  73. package/dist/outputs.js.map +1 -0
  74. package/dist/range.d.ts +30 -0
  75. package/dist/range.d.ts.map +1 -0
  76. package/dist/range.js +275 -0
  77. package/dist/range.js.map +1 -0
  78. package/dist/react.d.ts +11 -0
  79. package/dist/react.d.ts.map +1 -0
  80. package/dist/react.js +20 -0
  81. package/dist/react.js.map +1 -0
  82. package/dist/session.d.ts +50 -0
  83. package/dist/session.d.ts.map +1 -0
  84. package/dist/session.js +116 -0
  85. package/dist/session.js.map +1 -0
  86. package/dist/solid.d.ts +12 -0
  87. package/dist/solid.d.ts.map +1 -0
  88. package/dist/solid.js +9 -0
  89. package/dist/solid.js.map +1 -0
  90. package/dist/suggestions.d.ts +27 -0
  91. package/dist/suggestions.d.ts.map +1 -0
  92. package/dist/suggestions.js +125 -0
  93. package/dist/suggestions.js.map +1 -0
  94. package/dist/svelte.d.ts +5 -0
  95. package/dist/svelte.d.ts.map +1 -0
  96. package/dist/svelte.js +14 -0
  97. package/dist/svelte.js.map +1 -0
  98. package/dist/symbol-browser.d.ts +8 -0
  99. package/dist/symbol-browser.d.ts.map +1 -0
  100. package/dist/symbol-browser.js +32 -0
  101. package/dist/symbol-browser.js.map +1 -0
  102. package/dist/symbols.d.ts +3 -0
  103. package/dist/symbols.d.ts.map +1 -0
  104. package/dist/symbols.js +94 -0
  105. package/dist/symbols.js.map +1 -0
  106. package/dist/templates.d.ts +16 -0
  107. package/dist/templates.d.ts.map +1 -0
  108. package/dist/templates.js +86 -0
  109. package/dist/templates.js.map +1 -0
  110. package/dist/tokens.d.ts +11 -0
  111. package/dist/tokens.d.ts.map +1 -0
  112. package/dist/tokens.js +24 -0
  113. package/dist/tokens.js.map +1 -0
  114. package/dist/vue.d.ts +5 -0
  115. package/dist/vue.d.ts.map +1 -0
  116. package/dist/vue.js +16 -0
  117. package/dist/vue.js.map +1 -0
  118. package/dist/web-component.d.ts +10 -0
  119. package/dist/web-component.d.ts.map +1 -0
  120. package/dist/web-component.js +67 -0
  121. package/dist/web-component.js.map +1 -0
  122. package/package.json +124 -0
  123. package/src/style.css +781 -0
package/dist/dom.js ADDED
@@ -0,0 +1,581 @@
1
+ import { createEditorLabels } from './editor-labels.js';
2
+ import { mathEnterAction } from './enter-policy.js';
3
+ export { mountMathLatex, mountMathPreview, } from './outputs.js';
4
+ import { element } from './dom/elements.js';
5
+ import { mountMathToolbar } from './dom/toolbar.js';
6
+ export { mountMathToolbar } from './dom/toolbar.js';
7
+ import { createMathSession, } from './session.js';
8
+ import { translate, mathLocaleDirection } from './i18n.js';
9
+ import { documentRows, textNodes, setText, moveCaret, unwrapPrevious, gridDeletionTarget, removeGrid, isGrid, toLatex, } from './model.js';
10
+ import { activeGrid, moveMatrixVertical, resizeMatrix } from './matrix.js';
11
+ import { joinPreviousLine, moveLineVertical } from './lines.js';
12
+ import { acceptSuggestion, findSuggestions } from './suggestions.js';
13
+ import { tokenizeMathText } from './tokens.js';
14
+ import { fragmentLatex, parseFragment, MATH_CLIPBOARD_TYPE, resolveRange, } from './range.js';
15
+ /** Native DOM renderer. No React or framework runtime is imported by this module. */
16
+ export function mountMathEditor(host, initial = {}) {
17
+ let options = { ...initial };
18
+ const session = initial.session ??
19
+ createMathSession({
20
+ document: initial.defaultValue,
21
+ locale: initial.locale,
22
+ mode: initial.mode,
23
+ });
24
+ const ownsSession = !initial.session;
25
+ if (initial.session)
26
+ session.configure({ locale: initial.locale, mode: initial.mode });
27
+ const root = element('span', 'me-editor me-dom-editor'), tools = element('span'), surface = element('span', 'me-surface'), status = element('span', 'me-dom-status');
28
+ root.append(tools, surface, status);
29
+ host.append(root);
30
+ surface.tabIndex = 0;
31
+ surface.setAttribute('role', 'group');
32
+ status.setAttribute('role', 'status');
33
+ const menu = element('div', 'me-suggestion-panel me-dom-menu');
34
+ menu.hidden = true;
35
+ (initial.menuHost ?? host.closest('dialog') ?? document.body).append(menu);
36
+ let editing = false, rendering = false, composing = false, destroyed = false, dismissed = '', candidateIndex = 0, selectedGrid;
37
+ let drag;
38
+ let toolbar;
39
+ const t = (value) => translate(session.getSnapshot().locale, value);
40
+ const currentInput = () => surface.querySelector('input');
41
+ const notify = (key) => {
42
+ status.textContent = t(key);
43
+ };
44
+ const apply = (next) => {
45
+ editing = true;
46
+ selectedGrid = undefined;
47
+ session.apply(next);
48
+ };
49
+ const perform = (command) => {
50
+ editing = true;
51
+ selectedGrid = undefined;
52
+ const ok = session.execute(command);
53
+ if (!ok && command.type === 'text')
54
+ notify('clipboard.multilineRejected');
55
+ };
56
+ const candidates = () => {
57
+ const snapshot = session.getSnapshot(), state = snapshot.state, active = textNodes(state.document).find((n) => n.id === state.caret.id);
58
+ const result = findSuggestions(active.text, state.caret.start, snapshot.locale);
59
+ if (!editing ||
60
+ snapshot.range ||
61
+ dismissed === `${active.id}:${active.text}:${state.caret.start}`)
62
+ result.candidates = [];
63
+ return result;
64
+ };
65
+ const choose = (index) => {
66
+ if (composing)
67
+ return;
68
+ const result = candidates(), item = result.candidates[index];
69
+ if (item) {
70
+ dismissed = '';
71
+ candidateIndex = 0;
72
+ apply(acceptSuggestion(session.getSnapshot().state, result.query, item));
73
+ }
74
+ };
75
+ const drawMenu = () => {
76
+ const result = candidates(), input = currentInput();
77
+ menu.replaceChildren();
78
+ menu.hidden = !input || !result.candidates.length;
79
+ input?.setAttribute('aria-expanded', String(!menu.hidden));
80
+ if (menu.hidden)
81
+ return;
82
+ menu.lang = session.getSnapshot().locale;
83
+ menu.dir = mathLocaleDirection(menu.lang);
84
+ const list = element('div', 'me-suggestions');
85
+ list.setAttribute('role', 'listbox');
86
+ list.setAttribute('aria-label', t('suggestion.label'));
87
+ candidateIndex = Math.min(candidateIndex, result.candidates.length - 1);
88
+ result.candidates.forEach((item, index) => {
89
+ const button = element('button', '', `${item.glyph} ${item.label}`);
90
+ button.type = 'button';
91
+ button.setAttribute('role', 'option');
92
+ button.setAttribute('aria-selected', String(index === candidateIndex));
93
+ button.disabled = composing;
94
+ button.onmousedown = (event) => event.preventDefault();
95
+ button.onclick = () => choose(index);
96
+ list.append(button);
97
+ });
98
+ menu.append(list);
99
+ const rect = input.getBoundingClientRect();
100
+ menu.style.left = `${Math.max(8, Math.min(rect.left, window.innerWidth - 300))}px`;
101
+ menu.style.top = `${Math.max(8, Math.min(rect.bottom + 4, window.innerHeight - 240))}px`;
102
+ input.setAttribute('aria-expanded', 'true');
103
+ };
104
+ const render = () => {
105
+ if (destroyed || composing || rendering)
106
+ return;
107
+ rendering = true;
108
+ const snapshot = session.getSnapshot(), { state } = snapshot;
109
+ root.dataset.mode = snapshot.mode;
110
+ root.lang = snapshot.locale;
111
+ root.dir = mathLocaleDirection(snapshot.locale);
112
+ root.setAttribute('aria-label', t('editor.label'));
113
+ surface.dir = 'ltr';
114
+ surface.setAttribute('aria-label', t('selection.surface'));
115
+ surface.replaceChildren();
116
+ const spans = snapshot.range && resolveRange(state.document, snapshot.range);
117
+ const selected = (r) => spans?.find((span) => span.row.id === r.id);
118
+ const labels = createEditorLabels(snapshot.locale);
119
+ const renderRow = (r, name, inheritedSelection = false) => {
120
+ const view = element('span', 'me-row');
121
+ const selection = selected(r);
122
+ let offset = 0;
123
+ for (const child of r.children) {
124
+ const length = child.type === 'text' ? child.text.length : 1;
125
+ const highlighted = inheritedSelection ||
126
+ (!!selection && offset < selection.end && offset + length > selection.start);
127
+ offset += length;
128
+ if (child.type === 'text') {
129
+ const run = element('span', `me-run${child.text ? '' : ' me-empty'}`);
130
+ run.dataset.runId = child.id;
131
+ run.dataset.value = child.text;
132
+ const mirror = element('span', 'me-measure', child.text || '□');
133
+ mirror.setAttribute('aria-hidden', 'true');
134
+ run.append(mirror);
135
+ const active = editing && !snapshot.range && state.caret.id === child.id;
136
+ if (active) {
137
+ const input = element('input', 'me-input');
138
+ input.value = child.text;
139
+ input.placeholder = '□';
140
+ input.setAttribute('aria-label', name);
141
+ input.setAttribute('role', 'combobox');
142
+ input.setAttribute('aria-expanded', 'false');
143
+ input.autocomplete = 'off';
144
+ input.spellcheck = false;
145
+ const syncCaret = () => {
146
+ if (input.isConnected && !rendering && !composing) {
147
+ rendering = true;
148
+ session.select({
149
+ id: child.id,
150
+ start: input.selectionStart ?? 0,
151
+ end: input.selectionEnd ?? 0,
152
+ });
153
+ rendering = false;
154
+ drawMenu();
155
+ }
156
+ };
157
+ input.onselect = syncCaret;
158
+ input.onkeyup = syncCaret;
159
+ input.oninput = () => {
160
+ if (composing) {
161
+ mirror.textContent = input.value || '□';
162
+ return;
163
+ }
164
+ const next = setText(session.getSnapshot().state, input.value, input.selectionStart ?? 0, input.selectionEnd ?? 0);
165
+ dismissed = '';
166
+ candidateIndex = 0;
167
+ apply(next);
168
+ };
169
+ input.addEventListener('compositionstart', () => {
170
+ composing = true;
171
+ menu.hidden = true;
172
+ });
173
+ input.addEventListener('compositionend', () => {
174
+ composing = false;
175
+ dismissed = '';
176
+ apply(setText(session.getSnapshot().state, input.value, input.selectionStart ?? 0, input.selectionEnd ?? 0));
177
+ });
178
+ input.onkeydown = keydown;
179
+ run.append(input);
180
+ }
181
+ else {
182
+ const preview = element('span', 'me-preview-token');
183
+ preview.setAttribute('aria-label', name);
184
+ preview.setAttribute('role', 'button');
185
+ preview.tabIndex = -1;
186
+ for (const token of tokenizeMathText(child.text)) {
187
+ const part = element('span', `me-dom-${token.kind}`, token.text || '□');
188
+ preview.append(part);
189
+ }
190
+ if (highlighted)
191
+ run.classList.add('me-dom-selected');
192
+ run.append(preview);
193
+ }
194
+ view.append(run);
195
+ continue;
196
+ }
197
+ if (isGrid(child)) {
198
+ const grid = element('span', 'me-matrix');
199
+ grid.dataset.structure = child.type;
200
+ grid.dataset.environment =
201
+ child.type === 'matrix'
202
+ ? child.environment
203
+ : child.type === 'cases'
204
+ ? 'Bmatrix'
205
+ : 'matrix';
206
+ grid.dataset.selected = String(selectedGrid === child.id || highlighted);
207
+ grid.append(element('span', 'me-matrix-delimiter me-matrix-left'));
208
+ const cells = element('span', 'me-matrix-grid');
209
+ cells.style.gridTemplateColumns = `repeat(${child.columns},max-content)`;
210
+ child.slots.forEach((slot, i) => {
211
+ const cell = element('span', 'me-matrix-cell');
212
+ cell.append(renderRow(slot, labels.grid(name, child.type, i, child.columns), highlighted));
213
+ cells.append(cell);
214
+ });
215
+ grid.append(cells, element('span', 'me-matrix-delimiter me-matrix-right'));
216
+ view.append(grid);
217
+ continue;
218
+ }
219
+ const structure = element('span', `me-structure me-${child.type}`);
220
+ structure.dataset.structure = child.type;
221
+ if (['sum', 'product', 'integral'].includes(child.type)) {
222
+ structure.classList.add('me-large-operator');
223
+ const limits = element('span', 'me-limits');
224
+ const upper = element('span', 'me-limit'), lower = element('span', 'me-limit');
225
+ upper.append(renderRow(child.slots[1], labels.slot(name, child.type, 1), highlighted));
226
+ lower.append(renderRow(child.slots[0], labels.slot(name, child.type, 0), highlighted));
227
+ limits.append(upper, element('span', 'me-operator-glyph', { sum: '∑', product: '∏', integral: '∫' }[child.type]), lower);
228
+ structure.append(limits, renderRow(child.slots[2], labels.slot(name, child.type, 2), highlighted));
229
+ }
230
+ else {
231
+ const delimiters = {
232
+ parentheses: ['(', ')'],
233
+ brackets: ['[', ']'],
234
+ absolute: ['|', '|'],
235
+ };
236
+ if (delimiters[child.type])
237
+ structure.append(element('span', 'me-delimiter', delimiters[child.type][0]));
238
+ if (child.type === 'root')
239
+ structure.append(element('span', 'me-radical', '√'));
240
+ child.slots.forEach((slot, i) => {
241
+ const wrapper = element('span', 'me-slot');
242
+ wrapper.append(renderRow(slot, labels.slot(name, child.type, i), highlighted));
243
+ structure.append(wrapper);
244
+ });
245
+ if (delimiters[child.type])
246
+ structure.append(element('span', 'me-delimiter', delimiters[child.type][1]));
247
+ }
248
+ view.append(structure);
249
+ }
250
+ return view;
251
+ };
252
+ const lines = element('span', 'me-document-lines');
253
+ documentRows(state.document).forEach((line, index) => {
254
+ const wrapper = element('span', 'me-document-line');
255
+ if (options.showLineNumbers !== false && state.document.additionalLines?.length) {
256
+ const number = element('span', 'me-line-number', String(index + 1));
257
+ number.setAttribute('aria-hidden', 'true');
258
+ wrapper.append(number);
259
+ }
260
+ wrapper.append(renderRow(line, labels.line(index)));
261
+ lines.append(wrapper);
262
+ });
263
+ surface.append(lines);
264
+ const input = currentInput();
265
+ if (input) {
266
+ input.focus();
267
+ input.setSelectionRange(state.caret.start, state.caret.end);
268
+ }
269
+ rendering = false;
270
+ drawMenu();
271
+ };
272
+ function keydown(event) {
273
+ event.stopPropagation();
274
+ if (event.isComposing || composing)
275
+ return;
276
+ const snapshot = session.getSnapshot(), state = snapshot.state, c = state.caret, active = textNodes(state.document).find((n) => n.id === c.id);
277
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'z') {
278
+ event.preventDefault();
279
+ perform({ type: event.shiftKey ? 'redo' : 'undo' });
280
+ return;
281
+ }
282
+ if (event.ctrlKey || event.metaKey)
283
+ return;
284
+ const result = candidates();
285
+ if (result.candidates.length && ['ArrowDown', 'ArrowUp'].includes(event.key) && !event.altKey) {
286
+ event.preventDefault();
287
+ candidateIndex =
288
+ (candidateIndex + (event.key === 'ArrowDown' ? 1 : result.candidates.length - 1)) %
289
+ result.candidates.length;
290
+ drawMenu();
291
+ return;
292
+ }
293
+ if (event.key === 'Escape') {
294
+ event.preventDefault();
295
+ if (result.candidates.length) {
296
+ dismissed = `${active.id}:${active.text}:${c.start}`;
297
+ drawMenu();
298
+ }
299
+ else if (selectedGrid) {
300
+ selectedGrid = undefined;
301
+ render();
302
+ }
303
+ else {
304
+ editing = false;
305
+ render();
306
+ surface.focus();
307
+ options.onCancel?.();
308
+ }
309
+ return;
310
+ }
311
+ if (event.key === 'Enter') {
312
+ event.preventDefault();
313
+ const action = mathEnterAction({
314
+ mode: snapshot.mode,
315
+ behavior: options.enterBehavior,
316
+ shiftKey: event.shiftKey,
317
+ hasSuggestion: result.candidates.length > 0,
318
+ gridKind: activeGrid(state)?.matrix.type,
319
+ });
320
+ if (action === 'suggestion')
321
+ choose(candidateIndex);
322
+ else if (action === 'grid-row')
323
+ apply(resizeMatrix(state, 'row', 'insert'));
324
+ else if (action === 'newline')
325
+ perform({ type: 'newline' });
326
+ else if (action === 'commit') {
327
+ if (options.onCommit)
328
+ options.onCommit(session.getSnapshot());
329
+ else
330
+ options.onExit?.(1);
331
+ }
332
+ return;
333
+ }
334
+ if (activeGrid(state) &&
335
+ event.altKey &&
336
+ event.shiftKey &&
337
+ ['ArrowUp', 'ArrowLeft'].includes(event.key)) {
338
+ event.preventDefault();
339
+ apply(resizeMatrix(state, event.key === 'ArrowUp' ? 'row' : 'column', 'delete'));
340
+ return;
341
+ }
342
+ if (event.altKey)
343
+ return;
344
+ if (event.key === 'Tab' ||
345
+ (!event.shiftKey &&
346
+ c.start === c.end &&
347
+ ((event.key === 'ArrowLeft' && c.start === 0) ||
348
+ (event.key === 'ArrowRight' && c.end === active.text.length)))) {
349
+ const direction = event.key === 'Tab' ? (event.shiftKey ? -1 : 1) : event.key === 'ArrowLeft' ? -1 : 1;
350
+ const next = moveCaret(state, direction);
351
+ if (next !== state) {
352
+ event.preventDefault();
353
+ session.select(next.caret);
354
+ }
355
+ else if (options.onExit) {
356
+ event.preventDefault();
357
+ options.onExit(direction);
358
+ }
359
+ return;
360
+ }
361
+ if (!event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {
362
+ const direction = event.key === 'ArrowUp' ? -1 : 1;
363
+ const next = activeGrid(state)
364
+ ? moveMatrixVertical(state, direction)
365
+ : moveLineVertical(state, direction);
366
+ if (next !== state) {
367
+ event.preventDefault();
368
+ session.select(next.caret);
369
+ }
370
+ return;
371
+ }
372
+ if (c.start === c.end && ['Backspace', 'Delete'].includes(event.key)) {
373
+ const grid = gridDeletionTarget(state, event.key === 'Backspace' ? -1 : 1);
374
+ if (grid) {
375
+ event.preventDefault();
376
+ if ((selectedGrid === grid.id && !event.repeat) ||
377
+ grid.slots.every((slot) => slot.children.every((n) => n.type === 'text' && !n.text)))
378
+ apply(removeGrid(state, grid.id));
379
+ else {
380
+ selectedGrid = grid.id;
381
+ render();
382
+ }
383
+ return;
384
+ }
385
+ if (event.key === 'Backspace' && c.start === 0) {
386
+ const joined = joinPreviousLine(state), next = joined !== state ? joined : unwrapPrevious(state);
387
+ if (next !== state) {
388
+ event.preventDefault();
389
+ apply(next);
390
+ }
391
+ }
392
+ }
393
+ }
394
+ const pointAt = (x, y) => {
395
+ let best, distance = Infinity;
396
+ for (const run of surface.querySelectorAll('.me-run')) {
397
+ const r = run.getBoundingClientRect();
398
+ const d = Math.max(r.left - x, 0, x - r.right) ** 2 + Math.max(r.top - y, 0, y - r.bottom) ** 2;
399
+ if (d < distance) {
400
+ best = run;
401
+ distance = d;
402
+ }
403
+ }
404
+ if (!best)
405
+ return;
406
+ const mirror = best.querySelector('.me-measure'), value = best.dataset.value;
407
+ let offset = 0, closest = Infinity;
408
+ for (let i = 0; i <= value.length; i++) {
409
+ const range = document.createRange();
410
+ range.setStart(mirror.firstChild, i);
411
+ range.collapse(true);
412
+ const d = Math.abs(range.getBoundingClientRect().left - x);
413
+ if (d < closest) {
414
+ closest = d;
415
+ offset = i;
416
+ }
417
+ }
418
+ return { id: best.dataset.runId, offset };
419
+ };
420
+ surface.onpointerdown = (event) => {
421
+ if (event.button || composing || event.target.closest('.me-line-number'))
422
+ return;
423
+ if (event.target instanceof HTMLInputElement)
424
+ return;
425
+ const point = pointAt(event.clientX, event.clientY);
426
+ if (point) {
427
+ event.preventDefault();
428
+ drag = { point, x: event.clientX, y: event.clientY, moved: false };
429
+ surface.setPointerCapture(event.pointerId);
430
+ }
431
+ };
432
+ surface.onpointermove = (event) => {
433
+ if (!drag || Math.hypot(event.clientX - drag.x, event.clientY - drag.y) < 4)
434
+ return;
435
+ const point = pointAt(event.clientX, event.clientY);
436
+ if (point) {
437
+ drag.moved = true;
438
+ editing = false;
439
+ session.selectRange({ anchor: drag.point, focus: point });
440
+ surface.focus();
441
+ }
442
+ };
443
+ surface.onpointerup = (event) => {
444
+ const previous = drag;
445
+ drag = undefined;
446
+ if (surface.hasPointerCapture(event.pointerId))
447
+ surface.releasePointerCapture(event.pointerId);
448
+ if (previous && !previous.moved) {
449
+ editing = true;
450
+ session.select({
451
+ id: previous.point.id,
452
+ start: previous.point.offset,
453
+ end: previous.point.offset,
454
+ });
455
+ }
456
+ };
457
+ surface.onpointercancel = () => {
458
+ drag = undefined;
459
+ };
460
+ surface.onkeydown = (event) => {
461
+ if (event.target instanceof HTMLInputElement)
462
+ return;
463
+ event.stopPropagation();
464
+ const snapshot = session.getSnapshot();
465
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'a') {
466
+ event.preventDefault();
467
+ const nodes = textNodes(snapshot.state.document);
468
+ session.selectRange({
469
+ anchor: { id: nodes[0].id, offset: 0 },
470
+ focus: { id: nodes.at(-1).id, offset: nodes.at(-1).text.length },
471
+ });
472
+ }
473
+ else if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'z') {
474
+ event.preventDefault();
475
+ perform({ type: event.shiftKey ? 'redo' : 'undo' });
476
+ }
477
+ else if (event.key === 'Escape') {
478
+ session.selectRange();
479
+ }
480
+ else if (snapshot.range && ['Delete', 'Backspace'].includes(event.key)) {
481
+ event.preventDefault();
482
+ perform({ type: 'text', value: '' });
483
+ }
484
+ else if (['Enter', 'F2'].includes(event.key)) {
485
+ event.preventDefault();
486
+ editing = true;
487
+ session.selectRange();
488
+ render();
489
+ }
490
+ };
491
+ const copy = (event, cut = false) => {
492
+ const fragment = session.copy();
493
+ if (!fragment)
494
+ return;
495
+ event.preventDefault();
496
+ event.stopPropagation();
497
+ event.clipboardData?.setData(MATH_CLIPBOARD_TYPE, JSON.stringify(fragment));
498
+ event.clipboardData?.setData('text/plain', toLatex(fragmentLatex(fragment)));
499
+ if (cut)
500
+ perform({ type: 'text', value: '' });
501
+ };
502
+ root.oncopy = (event) => copy(event);
503
+ root.oncut = (event) => copy(event, true);
504
+ root.onpaste = (event) => {
505
+ if (composing)
506
+ return;
507
+ const data = event.clipboardData, fragment = parseFragment(data?.getData(MATH_CLIPBOARD_TYPE) ?? ''), text = data?.getData('text/plain') ?? '';
508
+ if (!fragment && !text)
509
+ return;
510
+ event.preventDefault();
511
+ event.stopPropagation();
512
+ editing = true;
513
+ const ok = fragment ? session.paste(fragment) : session.execute({ type: 'text', value: text });
514
+ if (!ok)
515
+ notify('clipboard.multilineRejected');
516
+ };
517
+ const blur = (event) => {
518
+ if (!rendering &&
519
+ !composing &&
520
+ !root.contains(event.relatedTarget) &&
521
+ !menu.contains(event.relatedTarget)) {
522
+ editing = false;
523
+ render();
524
+ }
525
+ };
526
+ root.addEventListener('focusout', blur);
527
+ const rebuildToolbar = () => {
528
+ toolbar?.destroy();
529
+ const enabled = options.toolbar ?? session.getSnapshot().mode === 'block';
530
+ toolbar = enabled
531
+ ? mountMathToolbar(tools, session, {
532
+ kinds: Array.isArray(enabled) ? enabled : undefined,
533
+ onExecute: () => {
534
+ editing = true;
535
+ render();
536
+ },
537
+ })
538
+ : undefined;
539
+ };
540
+ const unsubscribe = session.subscribe((snapshot, changed) => {
541
+ render();
542
+ if (changed)
543
+ options.onChange?.(snapshot.state.document, snapshot.latex);
544
+ });
545
+ const reposition = () => {
546
+ if (!menu.hidden)
547
+ drawMenu();
548
+ };
549
+ window.addEventListener('resize', reposition);
550
+ window.addEventListener('scroll', reposition, true);
551
+ rebuildToolbar();
552
+ render();
553
+ return {
554
+ session,
555
+ focus() {
556
+ editing = true;
557
+ render();
558
+ },
559
+ update(next) {
560
+ options = { ...options, ...next };
561
+ session.configure({ mode: next.mode, locale: next.locale });
562
+ rebuildToolbar();
563
+ render();
564
+ },
565
+ destroy() {
566
+ if (destroyed)
567
+ return;
568
+ destroyed = true;
569
+ unsubscribe();
570
+ toolbar?.destroy();
571
+ root.removeEventListener('focusout', blur);
572
+ window.removeEventListener('resize', reposition);
573
+ window.removeEventListener('scroll', reposition, true);
574
+ menu.remove();
575
+ root.remove();
576
+ if (ownsSession)
577
+ session.destroy();
578
+ },
579
+ };
580
+ }
581
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type MathLocale } from './i18n.js';
2
+ import type { StructureKind } from './model.js';
3
+ /** Build display paths from message keys; callers pass already localized parent paths. */
4
+ export declare function createEditorLabels(locale: MathLocale): {
5
+ line: (index: number) => string;
6
+ slot: (parent: string, kind: StructureKind, index: number) => string;
7
+ grid: (parent: string, kind: "matrix" | "aligned" | "cases", index: number, columns: number) => string;
8
+ };
9
+ //# sourceMappingURL=editor-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-labels.d.ts","sourceRoot":"","sources":["../src/editor-labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkBhD,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU;kBAEnC,MAAM;mBAIL,MAAM,QAAQ,aAAa,SAAS,MAAM;mBAE1C,MAAM,QAAQ,QAAQ,GAAG,SAAS,GAAG,OAAO,SAAS,MAAM,WAAW,MAAM;EAO9F"}