ckeditor-math-chem-editor 1.0.2 → 1.0.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/Ckeditor.jsx +735 -736
package/src/Ckeditor.jsx CHANGED
@@ -24,9 +24,9 @@ import {
24
24
  import 'ckeditor5/ckeditor5.css';
25
25
  import 'mathlive';
26
26
  import './CustomMathEditor.css';
27
- import SpecialCharacterModal from './SpecialCharacterModal.jsx';
27
+ import SpecialCharacterModal from './SpecialCharacterModal';
28
28
 
29
- // Global map + handler ref for widget click to edit popup
29
+ // Global map + handler ref for widget click edit popup
30
30
  window.__ckMathWidgets = window.__ckMathWidgets || new Map();
31
31
  window.__ckMathWidgetClickHandler = null;
32
32
 
@@ -159,17 +159,17 @@ function bindWidgetClickTarget(editor, container) {
159
159
  container.addEventListener('click', onPointerDown, true);
160
160
  }
161
161
 
162
- /* ══════════════════════════════════════════════════════════
163
- Symbol groups — same as CustomMathEditor.jsx
164
- ══════════════════════════════════════════════════════════ */
162
+ /* ══════════════════════════════════════════════════════════
163
+ Symbol groups same as CustomMathEditor.jsx
164
+ ══════════════════════════════════════════════════════════ */
165
165
  const MATH_GROUPS = [
166
166
  {
167
- label: '√(□)', items: [
167
+ label: '()', items: [
168
168
  // 1. Root & Fraction Group (3 cols)
169
- { label: '√', insert: '\\sqrt{#0}', title: 'Square Root' },
170
- { label: '√□', insert: '\\sqrt{#0}', title: 'Root with Placeholder' },
171
- { label: 'ⁿ√', insert: '\\sqrt[#?]{#0}', title: 'Nth Root' },
172
- { label: 'â–¡/â–¡', insert: '\\frac{#0}{#?}', title: 'Fraction' },
169
+ { label: '', insert: '\\sqrt{#0}', title: 'Square Root' },
170
+ { label: '√□', insert: '\\sqrt{#0}', title: 'Root with Placeholder' },
171
+ { label: 'ⁿ√', insert: '\\sqrt[#?]{#0}', title: 'Nth Root' },
172
+ { label: '□/□', insert: '\\frac{#0}{#?}', title: 'Fraction' },
173
173
 
174
174
  { type: 'sep', cols: 2 },
175
175
  // 2. Brackets & Delimiters Group (2 cols)
@@ -180,43 +180,43 @@ const MATH_GROUPS = [
180
180
  { type: 'sep', cols: 2 },
181
181
  // 3. Basic Arithmetic Operators (3 cols)
182
182
  { label: '+', insert: '+' },
183
- { label: '−', insert: '-' },
184
- { label: '×', insert: '\\times' },
185
- { label: '÷', insert: '\\div' },
186
- { label: '±', insert: '\\pm' },
183
+ { label: '', insert: '-' },
184
+ { label: '×', insert: '\\times' },
185
+ { label: '÷', insert: '\\div' },
186
+ { label: '±', insert: '\\pm' },
187
187
 
188
188
  { type: 'sep', cols: 4 },
189
189
  // 4. Comparison & Relation Operators (4 cols)
190
- { label: '≥', insert: '\\geq' },
191
- { label: '≤', insert: '\\leq' },
192
- { label: '∩', insert: '\\cap' },
193
- { label: '∪', insert: '\\cup' },
194
- { label: '≠', insert: '\\neq' },
195
- { label: '∈', insert: '\\in' },
196
- { label: '≈', insert: '\\approx' },
197
- { label: '∞', insert: '\\infty' },
190
+ { label: '', insert: '\\geq' },
191
+ { label: '', insert: '\\leq' },
192
+ { label: '', insert: '\\cap' },
193
+ { label: '', insert: '\\cup' },
194
+ { label: '', insert: '\\neq' },
195
+ { label: '', insert: '\\in' },
196
+ { label: '', insert: '\\approx' },
197
+ { label: '', insert: '\\infty' },
198
198
 
199
199
  { type: 'sep', cols: 2 },
200
200
  // 5. Greek Letters (2 cols)
201
- { label: 'α', insert: '\\alpha' },
202
- { label: 'β', insert: '\\beta' },
203
- { label: 'Ï€', insert: '\\pi' },
201
+ { label: 'α', insert: '\\alpha' },
202
+ { label: 'β', insert: '\\beta' },
203
+ { label: 'π', insert: '\\pi' },
204
204
 
205
205
  { type: 'sep', cols: 1 },
206
206
  // 6. Undo / Redo (1 col)
207
- { label: '↶', action: 'UNDO', title: 'Undo' },
208
- { label: '↷', action: 'REDO', title: 'Redo' },
207
+ { label: '', action: 'UNDO', title: 'Undo' },
208
+ { label: '', action: 'REDO', title: 'Redo' },
209
209
 
210
210
  { type: 'sep', cols: 2 },
211
211
  // 7. Formatting Group (2 cols)
212
212
  { label: 'B', action: 'BOLD', cls: 'template', title: 'Bold' },
213
- { label: '〖Ω〗', title: 'Insert Special Character', action: 'SPECIAL_CHARS' },
214
- { label: '🅰️', action: 'TEXT_COLOR', title: 'Text Color' },
213
+ { label: '〖Ω〗', title: 'Insert Special Character', action: 'SPECIAL_CHARS' },
214
+ { label: '🅰️', action: 'TEXT_COLOR', title: 'Text Color' },
215
215
 
216
216
  { type: 'sep', cols: 1 },
217
217
  // 8. Text Style Group (1 col)
218
- { label: 'T₁', insert: '#0_{#?}', title: 'Subscript' },
219
- { label: 'T¹', insert: '#0^{#?}', title: 'Superscript' },
218
+ { label: 'T', insert: '#0_{#?}', title: 'Subscript' },
219
+ { label: 'T¹', insert: '#0^{#?}', title: 'Superscript' },
220
220
 
221
221
  { type: 'sep', cols: 1 },
222
222
  // 9. Font Controls (1 col)
@@ -225,56 +225,56 @@ const MATH_GROUPS = [
225
225
  ]
226
226
  },
227
227
  {
228
- label: '±×÷', items: [
229
- { label: '±', insert: '\\pm' }, { label: '∓', insert: '\\mp' },
230
- { label: '×', insert: '\\times' }, { label: '÷', insert: '\\div' },
231
- { label: '\\', insert: '\\backslash' }, { label: '﹨', insert: '﹨' },
232
- { label: '≠', insert: '\\neq' }, { label: '≤', insert: '\\leq' },
233
- { label: '≥', insert: '\\geq' }, { label: '≈', insert: '\\approx' },
234
- { label: '≅', insert: '\\cong' }, { label: '∝', insert: '\\propto' },
235
- { label: '≡', insert: '\\equiv' }, { label: 'sim', insert: '\\sim' },
236
- { label: '∞', insert: '\\infty' }, { label: '∑', insert: '\\sum' },
237
- { label: '∏', insert: '\\prod' },
238
- { label: '∫', insert: '\\int' }, { label: '∮', insert: '\\oint' },
239
- { label: '∂', insert: '\\partial' }, { label: '∇', insert: '\\nabla' },
240
- { label: '⊕', insert: '\\oplus' }, { label: '⊗', insert: '\\otimes' },
241
- { label: '⊙', insert: '\\odot' },
242
- { label: '∈', insert: '\\in' }, { label: '∉', insert: '\\notin' },
243
- { label: '⊂', insert: '\\subset' }, { label: '∪', insert: '\\cup' },
244
- { label: '∩', insert: '\\cap' }, { label: '∅', insert: '\\emptyset' },
245
- { label: '√', insert: '\\sqrt{#0}' }, { label: '∛', insert: '\\sqrt[3]{#0}' },
246
- { label: '□±□', insert: '#? \\pm #?' }, { label: '□≠□', insert: '#? \\neq #?' },
247
- { label: '□≈□', insert: '#? \\approx #?' },
228
+ label: '±×÷', items: [
229
+ { label: '±', insert: '\\pm' }, { label: '', insert: '\\mp' },
230
+ { label: '×', insert: '\\times' }, { label: '÷', insert: '\\div' },
231
+ { label: '\\', insert: '\\backslash' }, { label: '', insert: '' },
232
+ { label: '', insert: '\\neq' }, { label: '', insert: '\\leq' },
233
+ { label: '', insert: '\\geq' }, { label: '', insert: '\\approx' },
234
+ { label: '', insert: '\\cong' }, { label: '', insert: '\\propto' },
235
+ { label: '', insert: '\\equiv' }, { label: 'sim', insert: '\\sim' },
236
+ { label: '', insert: '\\infty' }, { label: '', insert: '\\sum' },
237
+ { label: '', insert: '\\prod' },
238
+ { label: '', insert: '\\int' }, { label: '', insert: '\\oint' },
239
+ { label: '', insert: '\\partial' }, { label: '', insert: '\\nabla' },
240
+ { label: '', insert: '\\oplus' }, { label: '', insert: '\\otimes' },
241
+ { label: '', insert: '\\odot' },
242
+ { label: '', insert: '\\in' }, { label: '', insert: '\\notin' },
243
+ { label: '', insert: '\\subset' }, { label: '', insert: '\\cup' },
244
+ { label: '', insert: '\\cap' }, { label: '', insert: '\\emptyset' },
245
+ { label: '', insert: '\\sqrt{#0}' }, { label: '', insert: '\\sqrt[3]{#0}' },
246
+ { label: '□±□', insert: '#? \\pm #?' }, { label: '□≠□', insert: '#? \\neq #?' },
247
+ { label: '□≈□', insert: '#? \\approx #?' },
248
248
  ]
249
249
  },
250
250
  {
251
- label: 'â–¡/â–¡', isTemplate: true, items: [
251
+ label: '□/□', isTemplate: true, items: [
252
252
  { label: 'a/b', insert: '\\frac{#0}{#?}', title: 'Fraction', icon: 'fraction-template-image' },
253
- { label: 'â–¡/â–¡', insert: '{#0}/{#?}', title: 'Bevelled Fraction', cls: 'green-template' },
253
+ { label: '□/□', insert: '{#0}/{#?}', title: 'Bevelled Fraction', cls: 'green-template' },
254
254
  { label: 'a/b', insert: '{\\scriptstyle \\frac{#0}{#?}}', title: 'Small Fraction', icon: 'fraction-template-image', cls: 'small-template' },
255
- { label: 'â–¡/â–¡', insert: '{\\scriptstyle {#0}/{#?}}', title: 'Small Bevelled Fraction', cls: 'green-template small-template' },
255
+ { label: '□/□', insert: '{\\scriptstyle {#0}/{#?}}', title: 'Small Bevelled Fraction', cls: 'green-template small-template' },
256
256
  { type: 'sep', cols: 4 },
257
- { label: '√x', insert: '\\sqrt{#0}', title: 'Square Root', icon: 'sqrt-template-image' },
258
- { label: 'ⁿ√x', insert: '\\sqrt[#?]{#0}', title: 'Nth Root', icon: 'nth-root-template-image' },
259
- { label: 'xⁿ', insert: '#0^{#?}', title: 'Superscript', icon: 'superscript-template-image' },
260
- { label: 'ˡ□', insert: '{}^{#?}#?', cls: 'template', directInsert: true, title: 'Left Superscript', icon: 'left-sup-template-image' },
257
+ { label: '√x', insert: '\\sqrt{#0}', title: 'Square Root', icon: 'sqrt-template-image' },
258
+ { label: 'ⁿ√x', insert: '\\sqrt[#?]{#0}', title: 'Nth Root', icon: 'nth-root-template-image' },
259
+ { label: 'x', insert: '#0^{#?}', title: 'Superscript', icon: 'superscript-template-image' },
260
+ { label: 'ˡ□', insert: '{}^{#?}#?', cls: 'template', directInsert: true, title: 'Left Superscript', icon: 'left-sup-template-image' },
261
261
 
262
- { label: 'â–¡^â–¡_â–¡', insert: '#?^{#?}_{#?}', cls: 'template', directInsert: true, title: 'Right Superscript and Subscript', icon: 'right-sup-sub-template-image' },
263
- { label: 'ˡₗ□', insert: '{}^{#?}_{#?}#?', cls: 'template', directInsert: true, title: 'Left Superscript and Subscript', icon: 'left-sup-sub-template-image' },
264
- { label: 'xâ‚™', insert: '#0_{#?}', title: 'Subscript', icon: 'subscript-template-image' },
265
- { label: 'â‚—â–¡', insert: '{}_{#?}#?', cls: 'template', directInsert: true, title: 'Left Subscript', icon: 'left-sub-template-image' },
262
+ { label: '□^□_', insert: '#?^{#?}_{#?}', cls: 'template', directInsert: true, title: 'Right Superscript and Subscript', icon: 'right-sup-sub-template-image' },
263
+ { label: 'ˡₗ□', insert: '{}^{#?}_{#?}#?', cls: 'template', directInsert: true, title: 'Left Superscript and Subscript', icon: 'left-sup-sub-template-image' },
264
+ { label: 'x', insert: '#0_{#?}', title: 'Subscript', icon: 'subscript-template-image' },
265
+ { label: 'ₗ□', insert: '{}_{#?}#?', cls: 'template', directInsert: true, title: 'Left Subscript', icon: 'left-sub-template-image' },
266
266
  { type: 'sep', cols: 3 },
267
- { label: 'â–¡\nâ–¡', insert: '\\overset{#?}{#?}', cls: 'template', directInsert: true, title: 'Overset', icon: 'overset-template-image' },
268
- { label: 'â–¡\nâ–¡\nâ–¡', insert: '\\overset{#?}{\\underset{#?}{#?}}', cls: 'template', directInsert: true, title: 'Over and Under', icon: 'over-under-template-image' },
269
- { label: 'â–¡\nâ–¡', insert: '\\underset{#?}{#?}', cls: 'template', directInsert: true, title: 'Underset', icon: 'underset-template-image' },
267
+ { label: '□\n', insert: '\\overset{#?}{#?}', cls: 'template', directInsert: true, title: 'Overset', icon: 'overset-template-image' },
268
+ { label: '□\n□\n', insert: '\\overset{#?}{\\underset{#?}{#?}}', cls: 'template', directInsert: true, title: 'Over and Under', icon: 'over-under-template-image' },
269
+ { label: '□\n', insert: '\\underset{#?}{#?}', cls: 'template', directInsert: true, title: 'Underset', icon: 'underset-template-image' },
270
270
  { type: 'sep', cols: 2 },
271
- { label: '□⏟□', insert: '\\underbrace{#?}_{#?}', cls: 'template', directInsert: true, title: 'Underbrace', icon: 'underbrace-template-image' },
272
- { label: '□⏞□', insert: '\\overbrace{#?}^{#?}', cls: 'template', directInsert: true, title: 'Overbrace', icon: 'overbrace-template-image' },
271
+ { label: '□⏟□', insert: '\\underbrace{#?}_{#?}', cls: 'template', directInsert: true, title: 'Underbrace', icon: 'underbrace-template-image' },
272
+ { label: '□⏞□', insert: '\\overbrace{#?}^{#?}', cls: 'template', directInsert: true, title: 'Overbrace', icon: 'overbrace-template-image' },
273
273
  { type: 'sep', cols: 4 },
274
- { label: 'â–¡\nâ–¯\nâ–¡', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\overset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}}', cls: 'template', directInsert: true, title: 'Operator With Upper and Lower Limits', icon: 'operator-limits-both-template-image' },
275
- { label: 'â–¯\nâ–¡', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}', cls: 'template', directInsert: true, title: 'Operator With Lower Limit', icon: 'operator-lower-limit-template-image' },
276
- { label: 'â–¯^â–¡_â–¡', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}^{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.26em;line-height:1.15}{#?}}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Superscript and Subscript', icon: 'operator-right-sup-sub-template-image' },
277
- { label: 'â–¯_â–¡', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Subscript', icon: 'operator-right-sub-template-image' },
274
+ { label: '□\n▯\n', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\overset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}}', cls: 'template', directInsert: true, title: 'Operator With Upper and Lower Limits', icon: 'operator-limits-both-template-image' },
275
+ { label: '▯\n', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}', cls: 'template', directInsert: true, title: 'Operator With Lower Limit', icon: 'operator-lower-limit-template-image' },
276
+ { label: '▯^□_', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}^{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.26em;line-height:1.15}{#?}}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Superscript and Subscript', icon: 'operator-right-sup-sub-template-image' },
277
+ { label: '_', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Subscript', icon: 'operator-right-sub-template-image' },
278
278
  { type: 'sep', cols: 3 },
279
279
  { label: 'hphantom', insert: '\\hphantom{0}', cls: 'template', directInsert: true, title: 'Horizontal Phantom Space', icon: 'hphantom-space-template-image' },
280
280
  { label: 'thin-space', insert: '\\,', cls: 'template', directInsert: true, title: 'Thin Space', icon: 'thin-space-template-image' },
@@ -289,11 +289,11 @@ const MATH_GROUPS = [
289
289
  { label: 'sin(x)', insert: '\\sin\\left(#0\\right)' },
290
290
  { label: 'cos(x)', insert: '\\cos\\left(#0\\right)' },
291
291
  { label: 'tan(x)', insert: '\\tan\\left(#0\\right)' },
292
- { label: 'sin⁻¹', insert: '\\sin^{-1}' }, { label: 'cos⁻¹', insert: '\\cos^{-1}' },
293
- { label: 'tan⁻¹', insert: '\\tan^{-1}' },
294
- { label: 'sin²x', insert: '\\sin^{2}\\left(#0\\right)' },
295
- { label: 'cos²x', insert: '\\cos^{2}\\left(#0\\right)' },
296
- { label: 'tan²x', insert: '\\tan^{2}\\left(#0\\right)' },
292
+ { label: 'sin⁻¹', insert: '\\sin^{-1}' }, { label: 'cos⁻¹', insert: '\\cos^{-1}' },
293
+ { label: 'tan⁻¹', insert: '\\tan^{-1}' },
294
+ { label: 'sin²x', insert: '\\sin^{2}\\left(#0\\right)' },
295
+ { label: 'cos²x', insert: '\\cos^{2}\\left(#0\\right)' },
296
+ { label: 'tan²x', insert: '\\tan^{2}\\left(#0\\right)' },
297
297
  { label: 'sinh', insert: '\\sinh' }, { label: 'cosh', insert: '\\cosh' },
298
298
  { label: 'tanh', insert: '\\tanh' },
299
299
  { label: 'log', insert: '\\log' }, { label: 'ln', insert: '\\ln' },
@@ -301,52 +301,52 @@ const MATH_GROUPS = [
301
301
  ]
302
302
  },
303
303
  {
304
- label: '→', items: [
305
- { label: '→', insert: '\\rightarrow' }, { label: '←', insert: '\\leftarrow' },
306
- { label: '↔', insert: '\\leftrightarrow' }, { label: '⇒', insert: '\\Rightarrow' },
307
- { label: '⇐', insert: '\\Leftarrow' }, { label: '⇔', insert: '\\Leftrightarrow' },
308
- { label: '↤', insert: '\\mapsfrom' }, { label: '↦', insert: '\\mapsto' },
304
+ label: '', items: [
305
+ { label: '', insert: '\\rightarrow' }, { label: '', insert: '\\leftarrow' },
306
+ { label: '', insert: '\\leftrightarrow' }, { label: '', insert: '\\Rightarrow' },
307
+ { label: '', insert: '\\Leftarrow' }, { label: '', insert: '\\Leftrightarrow' },
308
+ { label: '', insert: '\\mapsfrom' }, { label: '', insert: '\\mapsto' },
309
309
  { label: '|', action: 'ARROW_PICKER', title: 'More Arrows', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool' },
310
310
  { type: 'sep', cols: 3 },
311
- { label: 'â‹®', insert: '\\vdots', title: 'Vertical ellipsis' },
312
- { label: 'â‹°', insert: 'â‹°', title: 'Up-right diagonal ellipsis' },
313
- { label: '…', insert: '\\ldots', title: 'Horizontal ellipsis' },
314
- { label: '⋱', insert: '\\ddots', title: 'Down-right diagonal ellipsis' },
315
- { label: '⋯', insert: '\\cdots', title: 'Midline ellipsis' },
311
+ { label: '', insert: '\\vdots', title: 'Vertical ellipsis' },
312
+ { label: '', insert: '', title: 'Up-right diagonal ellipsis' },
313
+ { label: '', insert: '\\ldots', title: 'Horizontal ellipsis' },
314
+ { label: '', insert: '\\ddots', title: 'Down-right diagonal ellipsis' },
315
+ { label: '', insert: '\\cdots', title: 'Midline ellipsis' },
316
316
  { type: 'sep', cols: 3 },
317
317
  { label: '-', insert: '-', title: 'Short dash' },
318
- { label: '–', insert: '–', title: 'Dash' },
319
- { label: '—', insert: '—', title: 'Long dash' },
318
+ { label: '', insert: '', title: 'Dash' },
319
+ { label: '', insert: '', title: 'Long dash' },
320
320
 
321
321
  { type: 'sep', cols: 3 },
322
- { label: 'A→', insert: '\\xrightarrow{#0}', title: 'Arrow with label above', icon: 'arrow-label-right-above' },
323
- { label: 'A←', insert: '\\xleftarrow{#0}', title: 'Left arrow with label above', icon: 'arrow-label-left-above' },
324
- { label: '→A', insert: '\\xrightarrow[#?]{}', title: 'Arrow with label below', icon: 'arrow-label-right-below' },
325
- { label: '←A', insert: '\\xleftarrow[#?]{}', title: 'Left arrow with label below', icon: 'arrow-label-left-below' },
326
- { label: 'A→B', insert: '\\xrightarrow[#?]{#0}', title: 'Arrow with labels above and below', icon: 'arrow-label-right-above-below' },
327
- { label: 'A←B', insert: '\\xleftarrow[#?]{#0}', title: 'Left arrow with labels above and below', icon: 'arrow-label-left-above-below' },
322
+ { label: 'A', insert: '\\xrightarrow{#0}', title: 'Arrow with label above', icon: 'arrow-label-right-above' },
323
+ { label: 'A', insert: '\\xleftarrow{#0}', title: 'Left arrow with label above', icon: 'arrow-label-left-above' },
324
+ { label: 'A', insert: '\\xrightarrow[#?]{}', title: 'Arrow with label below', icon: 'arrow-label-right-below' },
325
+ { label: 'A', insert: '\\xleftarrow[#?]{}', title: 'Left arrow with label below', icon: 'arrow-label-left-below' },
326
+ { label: 'AB', insert: '\\xrightarrow[#?]{#0}', title: 'Arrow with labels above and below', icon: 'arrow-label-right-above-below' },
327
+ { label: 'AB', insert: '\\xleftarrow[#?]{#0}', title: 'Left arrow with labels above and below', icon: 'arrow-label-left-above-below' },
328
328
  { label: '|', action: 'ARROW_LABEL_PICKER', title: 'More Labelled Arrows', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool arrow-label-picker-tool' },
329
329
 
330
330
  { type: 'sep', cols: 2 },
331
- { label: 'x⇀', insert: '\\overrightharpoon{#0}', title: 'Vector accent', icon: 'accent-harpoon-right' },
332
- { label: 'x→', insert: '\\overrightarrow{#0}', title: 'Arrow accent', icon: 'accent-arrow-right' },
333
- { label: 'x↔', insert: '\\overleftrightarrow{#0}', title: 'Left-right arrow accent', icon: 'accent-arrow-both' },
334
- { label: 'x̄', insert: '\\overline{#0}', title: 'Bar accent', icon: 'accent-bar' },
331
+ { label: 'x', insert: '\\overrightharpoon{#0}', title: 'Vector accent', icon: 'accent-harpoon-right' },
332
+ { label: 'x', insert: '\\overrightarrow{#0}', title: 'Arrow accent', icon: 'accent-arrow-right' },
333
+ { label: 'x', insert: '\\overleftrightarrow{#0}', title: 'Left-right arrow accent', icon: 'accent-arrow-both' },
334
+ { label: 'x̄', insert: '\\overline{#0}', title: 'Bar accent', icon: 'accent-bar' },
335
335
  ]
336
336
  },
337
337
  {
338
- label: '∫ ∯', isTemplate: true, items: [
339
- { label: '∫', insert: '\\int' }, { label: '∬', insert: '\\iint' },
340
- { label: '∭', insert: '\\iiint' }, { label: '∮', insert: '\\oint' },
341
- { label: '∯', insert: '\\oiint' }, { label: '∰', insert: '\\oiiint' },
342
- { label: '∫dx', insert: '\\int #0 \\, d#?', icon: 'integral-with-differential' },
343
- { label: '∫ₐᵇ', insert: '\\int_{#?}^{#?} #0 \\, d#?', icon: 'integral-with-limits-differential' },
344
- { label: '∫∫dA', insert: '\\iint_{#?} #0 \\, dA', title: 'Double Integral with Area Element', icon: 'double-integral-area-template-image' },
345
- { label: '∮C', insert: '\\oint_{#?} #0 \\, d#?' },
346
- { label: '∫∫∫dV', insert: '\\iiint_{#?} #0 \\, dV' },
347
- { label: '∫_C', insert: '\\int_{C} #0 \\, d#?' },
348
- { label: '∮_C', insert: '\\oint_{C} #0 \\, d#?' },
349
- { label: '∫∫_D', insert: '\\iint_{D} #0 \\, dA' },
338
+ label: ' ', isTemplate: true, items: [
339
+ { label: '', insert: '\\int' }, { label: '', insert: '\\iint' },
340
+ { label: '', insert: '\\iiint' }, { label: '', insert: '\\oint' },
341
+ { label: '', insert: '\\oiint' }, { label: '', insert: '\\oiiint' },
342
+ { label: 'dx', insert: '\\int #0 \\, d#?', icon: 'integral-with-differential' },
343
+ { label: '∫ₐᵇ', insert: '\\int_{#?}^{#?} #0 \\, d#?', icon: 'integral-with-limits-differential' },
344
+ { label: '∫∫dA', insert: '\\iint_{#?} #0 \\, dA', title: 'Double Integral with Area Element', icon: 'double-integral-area-template-image' },
345
+ { label: 'C', insert: '\\oint_{#?} #0 \\, d#?' },
346
+ { label: '∫∫∫dV', insert: '\\iiint_{#?} #0 \\, dV' },
347
+ { label: '_C', insert: '\\int_{C} #0 \\, d#?' },
348
+ { label: '_C', insert: '\\oint_{C} #0 \\, d#?' },
349
+ { label: '∫∫_D', insert: '\\iint_{D} #0 \\, dA' },
350
350
  { label: 'F(b)-F(a)', insert: '\\left[#0\\right]_{#?}^{#?}', title: 'Evaluated Expression', icon: 'evaluated-expression-template-image' },
351
351
  { label: 'u-sub', insert: '\\int #0 \\, du' },
352
352
  ]
@@ -358,106 +358,106 @@ const MATH_GROUPS = [
358
358
  { label: 'df/dx', insert: '\\frac{df}{dx}' },
359
359
  { label: 'd/dt', insert: '\\frac{d}{dt}' },
360
360
  { label: 'dy/dt', insert: '\\frac{dy}{dt}' },
361
- { label: 'd²y/dx²', insert: '\\frac{d^{2}y}{dx^{2}}' },
362
- { label: 'd²y/dt²', insert: '\\frac{d^{2}y}{dt^{2}}' },
363
- { label: 'dⁿy/dxⁿ', insert: '\\frac{d^{#?}#0}{dx^{#?}}' },
364
- { label: '∂/∂x', insert: '\\frac{\\partial}{\\partial x}' },
365
- { label: '∂f/∂x', insert: '\\frac{\\partial #0}{\\partial x}' },
366
- { label: '∂²f/∂x²', insert: '\\frac{\\partial^{2} #0}{\\partial x^{2}}' },
367
- { label: '∂²f/∂y²', insert: '\\frac{\\partial^{2} #0}{\\partial y^{2}}' },
368
- { label: '∂²f/∂x∂y', insert: '\\frac{\\partial^{2} #0}{\\partial x \\partial y}' },
361
+ { label: 'd²y/dx²', insert: '\\frac{d^{2}y}{dx^{2}}' },
362
+ { label: 'd²y/dt²', insert: '\\frac{d^{2}y}{dt^{2}}' },
363
+ { label: 'dy/dx', insert: '\\frac{d^{#?}#0}{dx^{#?}}' },
364
+ { label: '∂/∂x', insert: '\\frac{\\partial}{\\partial x}' },
365
+ { label: 'f/∂x', insert: '\\frac{\\partial #0}{\\partial x}' },
366
+ { label: '∂²f/∂x²', insert: '\\frac{\\partial^{2} #0}{\\partial x^{2}}' },
367
+ { label: '∂²f/∂y²', insert: '\\frac{\\partial^{2} #0}{\\partial y^{2}}' },
368
+ { label: '∂²f/∂xy', insert: '\\frac{\\partial^{2} #0}{\\partial x \\partial y}' },
369
369
  { label: "f'(x)", insert: '#0^{\\prime}(#?)' },
370
370
  { label: "f''(x)", insert: '#0^{\\prime\\prime}(#?)' },
371
371
  { label: "f'''(x)", insert: '#0^{\\prime\\prime\\prime}(#?)' },
372
372
  { label: "y'", insert: 'y^{\\prime}' }, { label: "y''", insert: 'y^{\\prime\\prime}' },
373
- { label: 'ẋ', insert: '\\dot{#0}' }, { label: 'ẍ', insert: '\\ddot{#0}' },
374
- { label: '∇f', insert: '\\nabla #0' }, { label: '∇²f', insert: '\\nabla^{2} #0' },
373
+ { label: '', insert: '\\dot{#0}' }, { label: '', insert: '\\ddot{#0}' },
374
+ { label: 'f', insert: '\\nabla #0' }, { label: '∇²f', insert: '\\nabla^{2} #0' },
375
375
  ]
376
376
  },
377
377
  {
378
378
  label: 'log/ln', isTemplate: true, items: [
379
379
  { label: 'log', insert: '\\log' }, { label: 'ln', insert: '\\ln' },
380
- { label: 'log₁₀', insert: '\\log_{10}' }, { label: 'log₂', insert: '\\log_{2}' },
381
- { label: 'logₐ', insert: '\\log_{#?}' },
382
- { label: 'logₐ(x)', insert: '\\log_{#?}\\left(#0\\right)' },
383
- { label: 'log₁₀(x)', insert: '\\log_{10}\\left(#0\\right)' },
380
+ { label: 'log₁₀', insert: '\\log_{10}' }, { label: 'log', insert: '\\log_{2}' },
381
+ { label: 'log', insert: '\\log_{#?}' },
382
+ { label: 'log(x)', insert: '\\log_{#?}\\left(#0\\right)' },
383
+ { label: 'log₁₀(x)', insert: '\\log_{10}\\left(#0\\right)' },
384
384
  { label: 'ln(x)', insert: '\\ln\\left(#0\\right)' },
385
385
  { label: 'log|x|', insert: '\\log\\left|#0\\right|' },
386
- { label: 'eˣ', insert: 'e^{#0}', title: 'e to the Power', icon: 'exp-e-template-image' }, { label: 'eⁱˣ', insert: 'e^{i #0}' },
387
- { label: '10Ë£', insert: '10^{#0}' }, { label: '2Ë£', insert: '2^{#0}' },
388
- { label: 'aˣ', insert: '#?^{#0}', title: 'Base to the Power', icon: 'exp-generic-template-image' },
386
+ { label: '', insert: 'e^{#0}', title: 'e to the Power', icon: 'exp-e-template-image' }, { label: 'eⁱˣ', insert: 'e^{i #0}' },
387
+ { label: '10ˣ', insert: '10^{#0}' }, { label: '2ˣ', insert: '2^{#0}' },
388
+ { label: '', insert: '#?^{#0}', title: 'Base to the Power', icon: 'exp-generic-template-image' },
389
389
  { label: 'log(ab)', insert: '\\log\\left(#0 \\cdot #?\\right)' },
390
390
  { label: 'log(a/b)', insert: '\\log\\left(\\frac{#0}{#?}\\right)' },
391
- { label: 'log(aⁿ)', insert: '\\log\\left(#0^{#?}\\right)' },
391
+ { label: 'log(a)', insert: '\\log\\left(#0^{#?}\\right)' },
392
392
  ]
393
393
  },
394
394
  {
395
- label: 'Ï€,e', items: [
395
+ label: 'π,e', items: [
396
396
  { label: 'e', insert: 'e' }, { label: 'i', insert: 'i' },
397
- { label: 'Ï€', insert: '\\pi' },
398
- { label: 'ℝ', insert: '\\mathbb{R}' }, { label: 'ℤ', insert: '\\mathbb{Z}' },
399
- { label: 'ℕ', insert: '\\mathbb{N}' }, { label: 'ℚ', insert: '\\mathbb{Q}' },
400
- { label: 'ℂ', insert: '\\mathbb{C}' }, { label: '∅', insert: '\\emptyset' },
401
- { label: 'ℵ₀', insert: '\\aleph_0' },
402
- { label: 'ξ', insert: '\\xi' },
403
- { label: 'ρ', insert: '\\rho' }, { label: 'σ', insert: '\\sigma' },
404
- { label: 'Ï„', insert: '\\tau' }, { label: 'Ï…', insert: '\\upsilon' },
405
- { label: 'φ', insert: '\\varphi' }, { label: 'χ', insert: '\\chi' },
406
- { label: 'ψ', insert: '\\psi' }, { label: 'ω', insert: '\\omega' },
407
- { label: 'Γ', insert: '\\Gamma' }, { label: 'Δ', insert: '\\Delta' },
408
- { label: 'Θ', insert: '\\Theta' }, { label: 'Λ', insert: '\\Lambda' },
409
- { label: 'Ξ', insert: '\\Xi' }, { label: 'Σ', insert: '\\Sigma' },
410
- { label: 'Φ', insert: '\\Phi' }, { label: 'Ψ', insert: '\\Psi' },
411
- { label: 'Ω', insert: '\\Omega' },
412
- { label: 'θᵢ', insert: '\\theta_{#?}' }, { label: 'λₙ', insert: '\\lambda_{#?}' },
413
- { label: 'μₓ', insert: '\\mu_{#?}' }, { label: 'σ²', insert: '\\sigma^{2}' },
414
- { label: 'Δx', insert: '\\Delta #?' },
397
+ { label: 'π', insert: '\\pi' },
398
+ { label: '', insert: '\\mathbb{R}' }, { label: '', insert: '\\mathbb{Z}' },
399
+ { label: '', insert: '\\mathbb{N}' }, { label: '', insert: '\\mathbb{Q}' },
400
+ { label: '', insert: '\\mathbb{C}' }, { label: '', insert: '\\emptyset' },
401
+ { label: 'ℵ₀', insert: '\\aleph_0' },
402
+ { label: 'ξ', insert: '\\xi' },
403
+ { label: 'ρ', insert: '\\rho' }, { label: 'σ', insert: '\\sigma' },
404
+ { label: 'τ', insert: '\\tau' }, { label: 'υ', insert: '\\upsilon' },
405
+ { label: 'φ', insert: '\\varphi' }, { label: 'χ', insert: '\\chi' },
406
+ { label: 'ψ', insert: '\\psi' }, { label: 'ω', insert: '\\omega' },
407
+ { label: 'Γ', insert: '\\Gamma' }, { label: 'Δ', insert: '\\Delta' },
408
+ { label: 'Θ', insert: '\\Theta' }, { label: 'Λ', insert: '\\Lambda' },
409
+ { label: 'Ξ', insert: '\\Xi' }, { label: 'Σ', insert: '\\Sigma' },
410
+ { label: 'Φ', insert: '\\Phi' }, { label: 'Ψ', insert: '\\Psi' },
411
+ { label: 'Ω', insert: '\\Omega' },
412
+ { label: 'θᵢ', insert: '\\theta_{#?}' }, { label: 'λₙ', insert: '\\lambda_{#?}' },
413
+ { label: 'μₓ', insert: '\\mu_{#?}' }, { label: 'σ²', insert: '\\sigma^{2}' },
414
+ { label: 'Δx', insert: '\\Delta #?' },
415
415
  ]
416
416
  },
417
417
  {
418
- label: '∈∪∩', items: [
419
- { label: 'Ω', title: 'Insert Special Character', action: 'SPECIAL_CHARS' },
420
- { label: '⊆', insert: '\\subseteq' }, { label: '⊇', insert: '\\supseteq' },
421
- { label: '﹨', insert: '﹨' }, { label: '∩', insert: '\\cap' },
422
- { label: '∪', insert: '\\cup' }, { label: '∅', insert: '\\emptyset' },
423
- { label: '□⊂□', insert: '#? \\subset #?' }, { label: '□⊆□', insert: '#? \\subseteq #?' },
424
- { label: '□∈□', insert: '#? \\in #?' }, { label: '□∉□', insert: '#? \\notin #?' },
425
- { label: '□∪□', insert: '#? \\cup #?' }, { label: '□∩□', insert: '#? \\cap #?' },
418
+ label: '∈∪∩', items: [
419
+ { label: 'Ω', title: 'Insert Special Character', action: 'SPECIAL_CHARS' },
420
+ { label: '', insert: '\\subseteq' }, { label: '', insert: '\\supseteq' },
421
+ { label: '', insert: '' }, { label: '', insert: '\\cap' },
422
+ { label: '', insert: '\\cup' }, { label: '', insert: '\\emptyset' },
423
+ { label: '□⊂□', insert: '#? \\subset #?' }, { label: '□⊆□', insert: '#? \\subseteq #?' },
424
+ { label: '□∈□', insert: '#? \\in #?' }, { label: '□∉□', insert: '#? \\notin #?' },
425
+ { label: '□∪□', insert: '#? \\cup #?' }, { label: '□∩□', insert: '#? \\cap #?' },
426
426
  ]
427
427
  },
428
428
  {
429
- label: '∀∃', items: [
430
- { label: '∀', insert: '\\forall' }, { label: '∃', insert: '\\exists' },
431
- { label: '¬', insert: '\\neg' }, { label: '∧', insert: '\\land' },
432
- { label: '∨', insert: '\\lor' },
433
- { label: '□⇒□', insert: '#? \\Rightarrow #?' }, { label: '□⇔□', insert: '#? \\Leftrightarrow #?' },
434
- { label: '□∧□', insert: '#? \\land #?' }, { label: '□∨□', insert: '#? \\lor #?' },
435
- { label: '¬□', insert: '\\neg #?' },
429
+ label: '∀∃', items: [
430
+ { label: '', insert: '\\forall' }, { label: '', insert: '\\exists' },
431
+ { label: '¬', insert: '\\neg' }, { label: '', insert: '\\land' },
432
+ { label: '', insert: '\\lor' },
433
+ { label: '□⇒□', insert: '#? \\Rightarrow #?' }, { label: '□⇔□', insert: '#? \\Leftrightarrow #?' },
434
+ { label: '□∧□', insert: '#? \\land #?' }, { label: '□∨□', insert: '#? \\lor #?' },
435
+ { label: '¬□', insert: '\\neg #?' },
436
436
  ]
437
437
  },
438
438
  {
439
439
  label: (
440
440
  <>
441
- ⎡□ □⎤
441
+ ⎡□ □⎤
442
442
  </>
443
443
  ),
444
444
  isMatrix: true,
445
445
  items: [
446
- { label: 'â–¡', insert: 'matrix', cls: 'template' },
446
+ { label: '', insert: 'matrix', cls: 'template' },
447
447
  { label: '[]', insert: 'bmatrix', cls: 'template' },
448
448
  { label: '||', insert: 'vmatrix', cls: 'template' },
449
449
  { label: '()', insert: 'pmatrix', cls: 'template' },
450
450
  { type: 'sep', cols: 2 },
451
- { label: 'â–¡ \\ â–¡ \\ â–¡', insert: '\\begin{matrix} #? \\\\ #? \\\\ #? \\end{matrix}', cls: 'template', directInsert: true },
452
- { label: 'â–¡ â–¡ â–¡', insert: '\\begin{matrix} #? & #? & #? \\end{matrix}', cls: 'template', directInsert: true },
453
- { label: 'â–¡ \\ â–¡', insert: '\\begin{bmatrix} #? \\\\ #? \\end{bmatrix}', cls: 'template', directInsert: true },
454
- { label: 'â–¡ & â–¡', insert: '\\begin{bmatrix} #? & #? \\end{bmatrix}', cls: 'template', directInsert: true },
451
+ { label: ' \\ \\ ', insert: '\\begin{matrix} #? \\\\ #? \\\\ #? \\end{matrix}', cls: 'template', directInsert: true },
452
+ { label: ' ', insert: '\\begin{matrix} #? & #? & #? \\end{matrix}', cls: 'template', directInsert: true },
453
+ { label: ' \\ ', insert: '\\begin{bmatrix} #? \\\\ #? \\end{bmatrix}', cls: 'template', directInsert: true },
454
+ { label: ' & ', insert: '\\begin{bmatrix} #? & #? \\end{bmatrix}', cls: 'template', directInsert: true },
455
455
 
456
456
  { type: 'sep', cols: 2 },
457
- { label: 'â–¡ \\ â–¡', insert: '\\begin{pmatrix} #? \\\\ #? \\end{pmatrix}', cls: 'template', directInsert: true },
458
- { label: 'â–¡ & â–¡', insert: '\\begin{pmatrix} #? & #? \\end{pmatrix}', cls: 'template', directInsert: true },
459
- // { label: 'â–¡ \\ â–¡ \\ â–¡', insert: '\\begin{bmatrix} #? \\\\ #? \\\\ #? \\end{bmatrix}', cls: 'template', directInsert: true },
460
- // { label: 'â–¡ \\ â–¡ \\ â–¡', insert: '\\begin{pmatrix} #? \\\\ #? \\\\ #? \\end{pmatrix}', cls: 'template', directInsert: true },
457
+ { label: ' \\ ', insert: '\\begin{pmatrix} #? \\\\ #? \\end{pmatrix}', cls: 'template', directInsert: true },
458
+ { label: ' & ', insert: '\\begin{pmatrix} #? & #? \\end{pmatrix}', cls: 'template', directInsert: true },
459
+ // { label: ' \\ \\ ', insert: '\\begin{bmatrix} #? \\\\ #? \\\\ #? \\end{bmatrix}', cls: 'template', directInsert: true },
460
+ // { label: ' \\ \\ ', insert: '\\begin{pmatrix} #? \\\\ #? \\\\ #? \\end{pmatrix}', cls: 'template', directInsert: true },
461
461
 
462
462
 
463
463
  { type: 'sep', cols: 2 },
@@ -466,10 +466,10 @@ const MATH_GROUPS = [
466
466
  { label: 'cases-2x2', insert: '\\begin{cases} #? & #? \\\\ #? & #? \\end{cases}', cls: 'template', directInsert: true, icon: 'cases-two-by-two-template-image', title: 'Cases 2x2' },
467
467
  { label: 'aligned', insert: '\\begin{aligned} #? &= #? \\\\ #? &= #? \\end{aligned}', cls: 'template', directInsert: true, icon: 'aligned-equals-template-image', title: 'Aligned Equations' },
468
468
  { type: 'sep', cols: 2 },
469
- { label: 'â‹®', insert: '\\vdots', title: 'Vertical ellipsis', icon: 'vertical-ellipsis-template-image', directInsert: true },
470
- { label: '⋯', insert: '\\cdots', title: 'Midline ellipsis', icon: 'midline-ellipsis-template-image', directInsert: true },
471
- { label: 'â‹°', insert: 'â‹°', title: 'Up-right diagonal ellipsis', icon: 'upright-ellipsis-template-image', directInsert: true },
472
- { label: '⋱', insert: '\\ddots', title: 'Down-right diagonal ellipsis', icon: 'downright-ellipsis-template-image', directInsert: true },
469
+ { label: '', insert: '\\vdots', title: 'Vertical ellipsis', icon: 'vertical-ellipsis-template-image', directInsert: true },
470
+ { label: '', insert: '\\cdots', title: 'Midline ellipsis', icon: 'midline-ellipsis-template-image', directInsert: true },
471
+ { label: '', insert: '', title: 'Up-right diagonal ellipsis', icon: 'upright-ellipsis-template-image', directInsert: true },
472
+ { label: '', insert: '\\ddots', title: 'Down-right diagonal ellipsis', icon: 'downright-ellipsis-template-image', directInsert: true },
473
473
  { type: 'sep', cols: 2 },
474
474
  {label: 'sum-array',insert: '\\frac{\\begin{array}{r}#?\\\\+\\,#?\\end{array}}{\\quad#?}',cls: 'template',directInsert: true,icon: 'sum-array-template-image',title: 'Column Addition'}, { label: 'diff-array', insert: '\\frac{\\begin{array}{r}#?\\\\-\\,#?\\end{array}}{\\quad#?}', directInsert: true, icon: 'difference-array-template-image', title: 'Column Subtraction' },
475
475
  { label: 'stack-line', insert: '\\frac{\\begin{array}{c}#?\\\\#?\\end{array}}{#?}', cls: 'template', directInsert: true, icon: 'stack-line-template-image', title: 'Stacked Line Layout' },
@@ -485,62 +485,62 @@ const MATH_GROUPS = [
485
485
  const RELATION_MORE_PICKERS = {
486
486
  operatorExtras: [
487
487
  { label: '\\', insert: '\\backslash', title: 'Slash', icon: 'slash-operator-template-image' },
488
- { label: '﹨', insert: '﹨', title: 'Reverse Solidus' },
489
- { label: '∓', insert: '\\mp', title: 'Minus or Plus', icon: 'minus-plus-operator-template-image' },
488
+ { label: '', insert: '', title: 'Reverse Solidus' },
489
+ { label: '', insert: '\\mp', title: 'Minus or Plus', icon: 'minus-plus-operator-template-image' },
490
490
  ],
491
491
  primeExtras: [
492
- { label: '‴', insert: "'''", cls: 'prime-symbol-tool' },
493
- { label: '⁗', insert: "''''", cls: 'prime-symbol-tool' },
494
- { label: '‵', insert: '‵', cls: 'prime-symbol-tool', title: 'Reversed Prime' },
492
+ { label: '', insert: "'''", cls: 'prime-symbol-tool' },
493
+ { label: '', insert: "''''", cls: 'prime-symbol-tool' },
494
+ { label: '', insert: '', cls: 'prime-symbol-tool', title: 'Reversed Prime' },
495
495
  ],
496
496
  notEqualExtras: [
497
- { label: '≠', insert: '\\neq', title: 'Not Equal', icon: 'not-equal-template-image' },
498
- { label: '≉', insert: '\\not\\approx', title: 'Not Approximately Equal', icon: 'not-approx-equal-template-image' },
499
- { label: '≁', insert: '\\nsim', title: 'Not Similar', icon: 'not-similar-template-image' },
500
- { label: '≢', insert: '\\not\\equiv', title: 'Not Identical', icon: 'not-identical-template-image' },
497
+ { label: '', insert: '\\neq', title: 'Not Equal', icon: 'not-equal-template-image' },
498
+ { label: '', insert: '\\not\\approx', title: 'Not Approximately Equal', icon: 'not-approx-equal-template-image' },
499
+ { label: '', insert: '\\nsim', title: 'Not Similar', icon: 'not-similar-template-image' },
500
+ { label: '', insert: '\\not\\equiv', title: 'Not Identical', icon: 'not-identical-template-image' },
501
501
  ],
502
502
  comparisonExtras: [
503
- { label: '≫', insert: '\\gg', title: 'Much Greater Than', icon: 'much-greater-than-template-image' },
504
- { label: '≪', insert: '\\ll', title: 'Much Less Than', icon: 'much-less-than-template-image' },
505
- { label: '⪇', insert: '\\lneqq', title: 'Less Than But Not Equal' },
506
- { label: '≻', insert: '\\succ', title: 'Succeeds', icon: 'succeeds-template-image' },
507
- { label: '⪈', insert: '\\gneqq', title: 'Greater Than But Not Equal', icon: 'greater-than-not-equal-template-image' },
508
- { label: '∝', insert: '\\propto', title: 'Proportional To', icon: 'proportional-to-template-image' },
509
- { label: '⊲', insert: '\\lhd', title: 'Normal Subgroup', icon: 'normal-subgroup-template-image' },
510
- { label: '≺', insert: '\\prec', title: 'Precedes', icon: 'precedes-template-image' },
511
- { label: 'â–·', insert: '\\rhd', title: 'Contains Normal Subgroup', icon: 'contains-normal-subgroup-template-image' },
503
+ { label: '', insert: '\\gg', title: 'Much Greater Than', icon: 'much-greater-than-template-image' },
504
+ { label: '', insert: '\\ll', title: 'Much Less Than', icon: 'much-less-than-template-image' },
505
+ { label: '', insert: '\\lneqq', title: 'Less Than But Not Equal' },
506
+ { label: '', insert: '\\succ', title: 'Succeeds', icon: 'succeeds-template-image' },
507
+ { label: '', insert: '\\gneqq', title: 'Greater Than But Not Equal', icon: 'greater-than-not-equal-template-image' },
508
+ { label: '', insert: '\\propto', title: 'Proportional To', icon: 'proportional-to-template-image' },
509
+ { label: '', insert: '\\lhd', title: 'Normal Subgroup', icon: 'normal-subgroup-template-image' },
510
+ { label: '', insert: '\\prec', title: 'Precedes', icon: 'precedes-template-image' },
511
+ { label: '', insert: '\\rhd', title: 'Contains Normal Subgroup', icon: 'contains-normal-subgroup-template-image' },
512
512
  ],
513
513
  setExtras: [
514
- { label: '∉', insert: '\\notin', title: 'Not Element Of', icon: 'not-element-of-template-image' },
515
- { label: '∌', insert: '\\not\\ni', title: 'Not Contains Member', icon: 'not-contains-member-template-image' },
516
- { label: '⊆', insert: '\\subseteq', title: 'Subset Equal', icon: 'subset-equal-template-image' },
517
- { label: '⊇', insert: '\\supseteq', title: 'Superset Equal', icon: 'superset-equal-template-image' },
518
- { label: '⊏', insert: '\\sqsubset', title: 'Square Subset', icon: 'square-subset-template-image' },
519
- { label: '⊐', insert: '\\sqsupset', title: 'Square Superset', icon: 'square-superset-template-image' },
520
- { label: '⊑', insert: '\\sqsubseteq', title: 'Square Subset Equal', icon: 'square-subset-equal-template-image' },
521
- { label: '⊒', insert: '\\sqsupseteq', title: 'Square Superset Equal', icon: 'square-superset-equal-template-image' },
522
- { label: '⊓', insert: '\\sqcap', title: 'Square Cap', icon: 'square-cap-template-image' },
523
- { label: '⊔', insert: '\\sqcup', title: 'Square Cup', icon: 'square-cup-template-image' },
514
+ { label: '', insert: '\\notin', title: 'Not Element Of', icon: 'not-element-of-template-image' },
515
+ { label: '', insert: '\\not\\ni', title: 'Not Contains Member', icon: 'not-contains-member-template-image' },
516
+ { label: '', insert: '\\subseteq', title: 'Subset Equal', icon: 'subset-equal-template-image' },
517
+ { label: '', insert: '\\supseteq', title: 'Superset Equal', icon: 'superset-equal-template-image' },
518
+ { label: '', insert: '\\sqsubset', title: 'Square Subset', icon: 'square-subset-template-image' },
519
+ { label: '', insert: '\\sqsupset', title: 'Square Superset', icon: 'square-superset-template-image' },
520
+ { label: '', insert: '\\sqsubseteq', title: 'Square Subset Equal', icon: 'square-subset-equal-template-image' },
521
+ { label: '', insert: '\\sqsupseteq', title: 'Square Superset Equal', icon: 'square-superset-equal-template-image' },
522
+ { label: '', insert: '\\sqcap', title: 'Square Cap', icon: 'square-cap-template-image' },
523
+ { label: '', insert: '\\sqcup', title: 'Square Cup', icon: 'square-cup-template-image' },
524
524
  ],
525
525
  logicExtras: [
526
- { label: '∴', insert: '\\therefore', title: 'Therefore', icon: 'therefore-template-image' },
527
- { label: '∵', insert: '\\because', title: 'Because', icon: 'because-template-image' },
526
+ { label: '', insert: '\\therefore', title: 'Therefore', icon: 'therefore-template-image' },
527
+ { label: '', insert: '\\because', title: 'Because', icon: 'because-template-image' },
528
528
  ],
529
529
  geometryExtras: [
530
- { label: '∦', insert: '\\nparallel', title: 'Not Parallel', icon: 'not-parallel-template-image' },
531
- { label: '∡', insert: '\\measuredangle', title: 'Measured Angle', icon: 'measured-angle-template-image' },
532
- { label: '∢', insert: '\\sphericalangle', title: 'Spherical Angle', icon: 'spherical-angle-template-image' },
533
- { label: 'â‹„', insert: '\\diamond', title: 'Diamond', icon: 'diamond-template-image' },
530
+ { label: '', insert: '\\nparallel', title: 'Not Parallel', icon: 'not-parallel-template-image' },
531
+ { label: '', insert: '\\measuredangle', title: 'Measured Angle', icon: 'measured-angle-template-image' },
532
+ { label: '', insert: '\\sphericalangle', title: 'Spherical Angle', icon: 'spherical-angle-template-image' },
533
+ { label: '', insert: '\\diamond', title: 'Diamond', icon: 'diamond-template-image' },
534
534
  ],
535
535
  shapeExtras: [
536
- { label: 'â–­', insert: 'â–­', title: 'Rectangle', icon: 'rectangle-template-image' },
537
- { label: 'â–±', insert: '\\parallelogram', title: 'Parallelogram', icon: 'parallelogram-template-image' },
536
+ { label: '', insert: '', title: 'Rectangle', icon: 'rectangle-template-image' },
537
+ { label: '', insert: '\\parallelogram', title: 'Parallelogram', icon: 'parallelogram-template-image' },
538
538
  ],
539
539
  circledExtras: [
540
- { label: '⊖', insert: '\\ominus', title: 'Circled Minus', icon: 'circled-minus-template-image' },
541
- { label: '⊛', insert: '\\circledast', title: 'Circled Asterisk', icon: 'circled-asterisk-template-image' },
542
- { label: '⊘', insert: '⨸', title: 'Circled Divide', icon: 'circled-divide-template-image' },
543
- { label: '•', insert: '^{\\bullet}', title: 'Raised Bullet', icon: 'raised-bullet-template-image' },
540
+ { label: '', insert: '\\ominus', title: 'Circled Minus', icon: 'circled-minus-template-image' },
541
+ { label: '', insert: '\\circledast', title: 'Circled Asterisk', icon: 'circled-asterisk-template-image' },
542
+ { label: '', insert: '', title: 'Circled Divide', icon: 'circled-divide-template-image' },
543
+ { label: '', insert: '^{\\bullet}', title: 'Raised Bullet', icon: 'raised-bullet-template-image' },
544
544
  ],
545
545
  };
546
546
 
@@ -557,125 +557,125 @@ const RELATIONS_TAB_ITEMS = [
557
557
  { label: 'cancel', insert: '\\cancel{#0}', title: 'Negate / Cross Out', icon: 'negate-template-image' },
558
558
  { type: 'sep', cols: 1 },
559
559
  { label: '+', insert: '+' },
560
- { label: '·', insert: '\\cdot' },
561
- { label: '−', insert: '-' },
560
+ { label: '·', insert: '\\cdot' },
561
+ { label: '', insert: '-' },
562
562
  { label: '/', insert: '/' },
563
- { label: '×', insert: '\\times' },
564
- { label: '±', insert: '\\pm' },
565
- { label: '÷', insert: '\\div' },
563
+ { label: '×', insert: '\\times' },
564
+ { label: '±', insert: '\\pm' },
565
+ { label: '÷', insert: '\\div' },
566
566
  { label: '*', insert: '\\ast' },
567
- { label: '∘', insert: '∘' },
567
+ { label: '', insert: '' },
568
568
  makeRelationMorePicker('operatorExtras', 'More Operators'),
569
569
 
570
570
  { type: 'sep', cols: 5 },
571
- { label: 'Ï€', insert: '\\pi' },
572
- { label: '∞', insert: '\\infty' },
573
- { label: '∂', insert: '\\partial' },
574
- { label: 'Δ', insert: '\\Delta' },
575
- { label: '°', insert: '\\degree' },
576
- { label: '′', insert: "'", cls: 'prime-symbol-tool' },
577
- { label: '∅', insert: '\\emptyset' },
578
- { label: '∇', insert: '\\nabla' },
579
- { label: '″', insert: "''", cls: 'prime-symbol-tool' },
571
+ { label: 'π', insert: '\\pi' },
572
+ { label: '', insert: '\\infty' },
573
+ { label: '', insert: '\\partial' },
574
+ { label: 'Δ', insert: '\\Delta' },
575
+ { label: '°', insert: '\\degree' },
576
+ { label: '', insert: "'", cls: 'prime-symbol-tool' },
577
+ { label: '', insert: '\\emptyset' },
578
+ { label: '', insert: '\\nabla' },
579
+ { label: '', insert: "''", cls: 'prime-symbol-tool' },
580
580
  makeRelationMorePicker('primeExtras', 'More Prime Symbols'),
581
581
 
582
582
 
583
583
  { type: 'sep', cols: 3 },
584
584
  { label: '=', insert: '=' },
585
- { label: '≡', insert: '\\equiv' },
585
+ { label: '', insert: '\\equiv' },
586
586
  { label: '~', insert: '\\sim' },
587
- { label: '≈', insert: '\\approx' },
588
- { label: '≃', insert: '\\simeq' },
589
- { label: '≅', insert: '\\cong' },
587
+ { label: '', insert: '\\approx' },
588
+ { label: '', insert: '\\simeq' },
589
+ { label: '', insert: '\\cong' },
590
590
  makeRelationMorePicker('notEqualExtras', 'More Not Equal Relations'),
591
591
 
592
592
  { type: 'sep', cols: 3 },
593
593
  { label: '>', insert: '>' },
594
594
  { label: '<', insert: '<' },
595
- { label: '≥', insert: '\\geq' },
596
- { label: '≤', insert: '\\leq' },
597
- { label: '⩾', insert: '\\geqslant', title: 'Greater Than or Slanted Equal To' },
598
- { label: '⩽', insert: '\\leqslant', title: 'Less Than or Slanted Equal To' },
595
+ { label: '', insert: '\\geq' },
596
+ { label: '', insert: '\\leq' },
597
+ { label: '', insert: '\\geqslant', title: 'Greater Than or Slanted Equal To' },
598
+ { label: '', insert: '\\leqslant', title: 'Less Than or Slanted Equal To' },
599
599
  makeRelationMorePicker('comparisonExtras', 'More Comparison Symbols'),
600
600
 
601
601
  { type: 'sep', cols: 3 },
602
- { label: '∈', insert: '\\in' },
603
- { label: '∋', insert: '\\ni' },
604
- { label: '∪', insert: '\\cup' },
605
- { label: '∩', insert: '\\cap' },
606
- { label: '⊂', insert: '\\subset' },
607
- { label: '⊃', insert: '\\supset' },
602
+ { label: '', insert: '\\in' },
603
+ { label: '', insert: '\\ni' },
604
+ { label: '', insert: '\\cup' },
605
+ { label: '', insert: '\\cap' },
606
+ { label: '', insert: '\\subset' },
607
+ { label: '', insert: '\\supset' },
608
608
  makeRelationMorePicker('setExtras', 'More Set Symbols'),
609
609
 
610
610
  { type: 'sep', cols: 3 },
611
- { label: '∧', insert: '\\land' },
612
- { label: '∨', insert: '\\lor' },
613
- { label: '¬', insert: '\\neg' },
614
- { label: '∀', insert: '\\forall' },
615
- { label: '∃', insert: '\\exists' },
616
- { label: '∄', insert: '\\nexists' },
611
+ { label: '', insert: '\\land' },
612
+ { label: '', insert: '\\lor' },
613
+ { label: '¬', insert: '\\neg' },
614
+ { label: '', insert: '\\forall' },
615
+ { label: '', insert: '\\exists' },
616
+ { label: '', insert: '\\nexists' },
617
617
  makeRelationMorePicker('logicExtras', 'More Logic Symbols'),
618
618
 
619
619
  { type: 'sep', cols: 2 },
620
- { label: '∠', insert: '\\angle' },
621
- { label: '∥', insert: '\\parallel' },
622
- { label: '⊥', insert: '\\perp' },
620
+ { label: '', insert: '\\angle' },
621
+ { label: '', insert: '\\parallel' },
622
+ { label: '', insert: '\\perp' },
623
623
  makeRelationMorePicker('geometryExtras', 'More Geometry Symbols'),
624
624
 
625
625
  { type: 'sep', cols: 3 },
626
- { label: 'â–¡', insert: '\\square' },
627
- { label: 'â–³', insert: '\\triangle' },
628
- { label: 'â—‹', insert: '\\bigcirc' },
626
+ { label: '', insert: '\\square' },
627
+ { label: '', insert: '\\triangle' },
628
+ { label: '', insert: '\\bigcirc' },
629
629
  makeRelationMorePicker('shapeExtras', 'More Shape Symbols'),
630
630
  { type: 'sep', cols: 3 },
631
- { label: '⊕', insert: '\\oplus' },
632
- { label: '⊗', insert: '\\otimes' },
633
- { label: '⊙', insert: '\\odot' },
631
+ { label: '', insert: '\\oplus' },
632
+ { label: '', insert: '\\otimes' },
633
+ { label: '', insert: '\\odot' },
634
634
  makeRelationMorePicker('circledExtras', 'More Circled Operators'),
635
635
  ];
636
636
 
637
637
  const ARROW_PICKER_ITEMS = [
638
- { label: '↗', insert: '\\nearrow', title: 'North East Arrow' },
639
- { label: '↘', insert: '\\searrow', title: 'South East Arrow' },
640
- { label: '↖', insert: '\\nwarrow', title: 'North West Arrow' },
641
- { label: '↙', insert: '\\swarrow', title: 'South West Arrow' },
642
- { label: '⤡', insert: '⤡', title: 'North East and South West Arrow' },
643
- { label: '⤢', insert: '⤢', title: 'North West and South East Arrow' },
644
- { label: '↩', insert: '\\hookleftarrow', title: 'Hook Left Arrow' },
645
- { label: '↪', insert: '\\hookrightarrow', title: 'Hook Right Arrow' },
646
- { label: '↼', insert: '\\leftharpoonup', title: 'Left Harpoon Up' },
647
- { label: '⇀', insert: '\\rightharpoonup', title: 'Right Harpoon Up' },
648
- { label: '↑', insert: '\\uparrow', title: 'Up Arrow' },
649
- { label: '↓', insert: '\\downarrow', title: 'Down Arrow' },
650
- { label: '⇑', insert: '\\Uparrow', title: 'Double Up Arrow' },
651
- { label: '⇓', insert: '\\Downarrow', title: 'Double Down Arrow' },
652
- { label: '⥪', insert: '⥪', title: 'Leftwards Arrow with Hook' },
653
- { label: '⥭', insert: '⥭', title: 'Rightwards Arrow with Hook' },
654
- { label: '⇋', insert: '\\leftrightharpoons', title: 'Reverse Equilibrium Harpoons' },
655
- { label: '⇌', insert: '\\rightleftharpoons', title: 'Equilibrium Harpoons' },
656
- { label: '↽', insert: '\\leftharpoondown', title: 'Left Harpoon Down' },
657
- { label: '⇁', insert: '\\rightharpoondown', title: 'Right Harpoon Down' },
658
- { label: '⇆', insert: '⇆', title: 'Leftwards Arrow over Rightwards Arrow' },
659
- { label: '⇄', insert: '\\rightleftarrows', title: 'Rightwards Arrow over Leftwards Arrow' },
660
- { label: '⇅', insert: '⇅', title: 'Upwards Arrow Left of Downwards Arrow' },
661
- { label: '⇵', insert: '⇵', title: 'Downwards Arrow Left of Upwards Arrow' },
662
- { label: '⥮', insert: '⥮', title: 'Upwards Harpoon with Barb Left beside Downwards Harpoon with Barb Right' },
663
- { label: '⥯', insert: '⥯', title: 'Downwards Harpoon with Barb Left beside Upwards Harpoon with Barb Right' },
638
+ { label: '', insert: '\\nearrow', title: 'North East Arrow' },
639
+ { label: '', insert: '\\searrow', title: 'South East Arrow' },
640
+ { label: '', insert: '\\nwarrow', title: 'North West Arrow' },
641
+ { label: '', insert: '\\swarrow', title: 'South West Arrow' },
642
+ { label: '', insert: '', title: 'North East and South West Arrow' },
643
+ { label: '', insert: '', title: 'North West and South East Arrow' },
644
+ { label: '', insert: '\\hookleftarrow', title: 'Hook Left Arrow' },
645
+ { label: '', insert: '\\hookrightarrow', title: 'Hook Right Arrow' },
646
+ { label: '', insert: '\\leftharpoonup', title: 'Left Harpoon Up' },
647
+ { label: '', insert: '\\rightharpoonup', title: 'Right Harpoon Up' },
648
+ { label: '', insert: '\\uparrow', title: 'Up Arrow' },
649
+ { label: '', insert: '\\downarrow', title: 'Down Arrow' },
650
+ { label: '', insert: '\\Uparrow', title: 'Double Up Arrow' },
651
+ { label: '', insert: '\\Downarrow', title: 'Double Down Arrow' },
652
+ { label: '', insert: '', title: 'Leftwards Arrow with Hook' },
653
+ { label: '', insert: '', title: 'Rightwards Arrow with Hook' },
654
+ { label: '', insert: '\\leftrightharpoons', title: 'Reverse Equilibrium Harpoons' },
655
+ { label: '', insert: '\\rightleftharpoons', title: 'Equilibrium Harpoons' },
656
+ { label: '', insert: '\\leftharpoondown', title: 'Left Harpoon Down' },
657
+ { label: '', insert: '\\rightharpoondown', title: 'Right Harpoon Down' },
658
+ { label: '', insert: '', title: 'Leftwards Arrow over Rightwards Arrow' },
659
+ { label: '', insert: '\\rightleftarrows', title: 'Rightwards Arrow over Leftwards Arrow' },
660
+ { label: '', insert: '', title: 'Upwards Arrow Left of Downwards Arrow' },
661
+ { label: '', insert: '', title: 'Downwards Arrow Left of Upwards Arrow' },
662
+ { label: '', insert: '', title: 'Upwards Harpoon with Barb Left beside Downwards Harpoon with Barb Right' },
663
+ { label: '', insert: '', title: 'Downwards Harpoon with Barb Left beside Upwards Harpoon with Barb Right' },
664
664
  {
665
- label: '⇄',
665
+ label: '',
666
666
  insert: '\\rightleftarrows',
667
667
  title: 'Rightwards Arrow over Short Leftwards Arrow',
668
668
  preview: 'rightleft-short-left'
669
669
  },
670
670
  {
671
- label: '→\n←',
671
+ label: '→\n',
672
672
  insert: '\\overset{\\to}{\\longleftarrow}',
673
673
  title: 'Short Rightwards Arrow over Leftwards Arrow',
674
674
  preview: 'right-short-over-left-long'
675
675
  },
676
- { label: '↕', insert: '\\updownarrow', title: 'Up Down Arrow' },
677
- { label: '⇕', insert: '\\Updownarrow', title: 'Double Up Down Arrow' },
678
- { label: '↵', insert: '↵', title: 'Downwards Arrow with Corner Leftwards' },
676
+ { label: '', insert: '\\updownarrow', title: 'Up Down Arrow' },
677
+ { label: '', insert: '\\Updownarrow', title: 'Double Up Down Arrow' },
678
+ { label: '', insert: '', title: 'Downwards Arrow with Corner Leftwards' },
679
679
  ];
680
680
 
681
681
  const ARROW_LABEL_PICKER_ITEMS = [
@@ -787,43 +787,43 @@ const ARROW_LABEL_PICKER_ITEMS = [
787
787
  ];
788
788
 
789
789
  const GREEK_ITALIC_UPPERCASE_ITEMS = [
790
- { label: 'Α', insert: '\\mathit{Α}', title: 'Italic Alpha' },
791
- { label: 'Î’', insert: '\\mathit{Î’}', title: 'Italic Beta' },
792
- { label: 'Γ', insert: '\\varGamma', title: 'Italic Gamma' },
793
- { label: 'Δ', insert: '\\varDelta', title: 'Italic Delta' },
794
- { label: 'Ε', insert: '\\mathit{Ε}', title: 'Italic Epsilon' },
795
- { label: 'Ζ', insert: '\\mathit{Ζ}', title: 'Italic Zeta' },
796
- { label: 'Η', insert: '\\mathit{Η}', title: 'Italic Eta' },
797
- { label: 'Θ', insert: '\\varTheta', title: 'Italic Theta' },
798
- { label: 'Ι', insert: '\\mathit{Ι}', title: 'Italic Iota' },
799
- { label: 'Κ', insert: '\\mathit{Κ}', title: 'Italic Kappa' },
800
- { label: 'Λ', insert: '\\varLambda', title: 'Italic Lambda' },
801
- { label: 'Μ', insert: '\\mathit{Μ}', title: 'Italic Mu' },
802
- { label: 'Ν', insert: '\\mathit{Ν}', title: 'Italic Nu' },
803
- { label: 'Ξ', insert: '\\varXi', title: 'Italic Xi' },
804
- { label: 'Ο', insert: '\\mathit{Ο}', title: 'Italic Omicron' },
805
- { label: 'Π', insert: '\\varPi', title: 'Italic Pi' },
806
- { label: 'Ρ', insert: '\\mathit{Ρ}', title: 'Italic Rho' },
807
- { label: 'Σ', insert: '\\varSigma', title: 'Italic Sigma' },
808
- { label: 'Τ', insert: '\\mathit{Τ}', title: 'Italic Tau' },
809
- { label: 'Î¥', insert: '\\varUpsilon', title: 'Italic Upsilon' },
810
- { label: 'Φ', insert: '\\varPhi', title: 'Italic Phi' },
811
- { label: 'Χ', insert: '\\mathit{Χ}', title: 'Italic Chi' },
812
- { label: 'Ψ', insert: '\\varPsi', title: 'Italic Psi' },
813
- { label: 'Ω', insert: '\\varOmega', title: 'Italic Omega' },
790
+ { label: 'Α', insert: '\\mathit{Α}', title: 'Italic Alpha' },
791
+ { label: 'Β', insert: '\\mathit{Β}', title: 'Italic Beta' },
792
+ { label: 'Γ', insert: '\\varGamma', title: 'Italic Gamma' },
793
+ { label: 'Δ', insert: '\\varDelta', title: 'Italic Delta' },
794
+ { label: 'Ε', insert: '\\mathit{Ε}', title: 'Italic Epsilon' },
795
+ { label: 'Ζ', insert: '\\mathit{Ζ}', title: 'Italic Zeta' },
796
+ { label: 'Η', insert: '\\mathit{Η}', title: 'Italic Eta' },
797
+ { label: 'Θ', insert: '\\varTheta', title: 'Italic Theta' },
798
+ { label: 'Ι', insert: '\\mathit{Ι}', title: 'Italic Iota' },
799
+ { label: 'Κ', insert: '\\mathit{Κ}', title: 'Italic Kappa' },
800
+ { label: 'Λ', insert: '\\varLambda', title: 'Italic Lambda' },
801
+ { label: 'Μ', insert: '\\mathit{Μ}', title: 'Italic Mu' },
802
+ { label: 'Ν', insert: '\\mathit{Ν}', title: 'Italic Nu' },
803
+ { label: 'Ξ', insert: '\\varXi', title: 'Italic Xi' },
804
+ { label: 'Ο', insert: '\\mathit{Ο}', title: 'Italic Omicron' },
805
+ { label: 'Π', insert: '\\varPi', title: 'Italic Pi' },
806
+ { label: 'Ρ', insert: '\\mathit{Ρ}', title: 'Italic Rho' },
807
+ { label: 'Σ', insert: '\\varSigma', title: 'Italic Sigma' },
808
+ { label: 'Τ', insert: '\\mathit{Τ}', title: 'Italic Tau' },
809
+ { label: 'Υ', insert: '\\varUpsilon', title: 'Italic Upsilon' },
810
+ { label: 'Φ', insert: '\\varPhi', title: 'Italic Phi' },
811
+ { label: 'Χ', insert: '\\mathit{Χ}', title: 'Italic Chi' },
812
+ { label: 'Ψ', insert: '\\varPsi', title: 'Italic Psi' },
813
+ { label: 'Ω', insert: '\\varOmega', title: 'Italic Omega' },
814
814
  ];
815
815
 
816
816
  const BLACKBOARD_BOLD_LETTERS = [
817
- ['𝔸', 'A'], ['𝔹', 'B'], ['ℂ', 'C'], ['𝔻', 'D'], ['𝔼', 'E'], ['𝔽', 'F'],
818
- ['𝔾', 'G'], ['ℍ', 'H'], ['𝕀', 'I'], ['𝕁', 'J'], ['𝕂', 'K'], ['𝕃', 'L'],
819
- ['𝕄', 'M'], ['ℕ', 'N'], ['𝕆', 'O'], ['ℙ', 'P'], ['ℚ', 'Q'], ['ℝ', 'R'],
820
- ['𝕊', 'S'], ['𝕋', 'T'], ['𝕌', 'U'], ['𝕍', 'V'], ['𝕎', 'W'], ['𝕏', 'X'],
821
- ['𝕐', 'Y'], ['ℤ', 'Z'],
822
- ['𝕒', 'a'], ['𝕓', 'b'], ['𝕔', 'c'], ['𝕕', 'd'], ['𝕖', 'e'], ['𝕗', 'f'],
823
- ['𝕘', 'g'], ['𝕙', 'h'], ['𝕚', 'i'], ['𝕛', 'j'], ['𝕜', 'k'], ['𝕝', 'l'],
824
- ['𝕞', 'm'], ['𝕟', 'n'], ['𝕠', 'o'], ['𝕡', 'p'], ['𝕢', 'q'], ['𝕣', 'r'],
825
- ['𝕤', 's'], ['𝕥', 't'], ['𝕦', 'u'], ['𝕧', 'v'], ['𝕨', 'w'], ['𝕩', 'x'],
826
- ['𝕪', 'y'], ['𝕫', 'z'],
817
+ ['𝔸', 'A'], ['𝔹', 'B'], ['', 'C'], ['𝔻', 'D'], ['𝔼', 'E'], ['𝔽', 'F'],
818
+ ['𝔾', 'G'], ['', 'H'], ['𝕀', 'I'], ['𝕁', 'J'], ['𝕂', 'K'], ['𝕃', 'L'],
819
+ ['𝕄', 'M'], ['', 'N'], ['𝕆', 'O'], ['', 'P'], ['', 'Q'], ['', 'R'],
820
+ ['𝕊', 'S'], ['𝕋', 'T'], ['𝕌', 'U'], ['𝕍', 'V'], ['𝕎', 'W'], ['𝕏', 'X'],
821
+ ['𝕐', 'Y'], ['', 'Z'],
822
+ ['𝕒', 'a'], ['𝕓', 'b'], ['𝕔', 'c'], ['𝕕', 'd'], ['𝕖', 'e'], ['𝕗', 'f'],
823
+ ['𝕘', 'g'], ['𝕙', 'h'], ['𝕚', 'i'], ['𝕛', 'j'], ['𝕜', 'k'], ['𝕝', 'l'],
824
+ ['𝕞', 'm'], ['𝕟', 'n'], ['𝕠', 'o'], ['𝕡', 'p'], ['𝕢', 'q'], ['𝕣', 'r'],
825
+ ['𝕤', 's'], ['𝕥', 't'], ['𝕦', 'u'], ['𝕧', 'v'], ['𝕨', 'w'], ['𝕩', 'x'],
826
+ ['𝕪', 'y'], ['𝕫', 'z'],
827
827
  ];
828
828
 
829
829
  const BLACKBOARD_BOLD_PICKER_ITEMS = BLACKBOARD_BOLD_LETTERS.map(([label, letter]) => ({
@@ -833,122 +833,122 @@ const BLACKBOARD_BOLD_PICKER_ITEMS = BLACKBOARD_BOLD_LETTERS.map(([label, letter
833
833
  }));
834
834
 
835
835
  const FRAKTUR_SCRIPT_PICKER_ITEMS = [
836
- ['𝔄', '\\mathfrak{A}', 'Fraktur A'],
837
- ['𝔅', '\\mathfrak{B}', 'Fraktur B'],
838
- ['â„­', '\\mathfrak{C}', 'Fraktur C'],
839
- ['𝔇', '\\mathfrak{D}', 'Fraktur D'],
840
- ['𝔈', '\\mathfrak{E}', 'Fraktur E'],
841
- ['𝔉', '\\mathfrak{F}', 'Fraktur F'],
842
- ['𝔊', '\\mathfrak{G}', 'Fraktur G'],
843
- ['ℌ', '\\mathfrak{H}', 'Fraktur H'],
844
- ['â„‘', '\\mathfrak{I}', 'Fraktur I'],
845
- ['𝔍', '\\mathfrak{J}', 'Fraktur J'],
846
- ['𝔎', '\\mathfrak{K}', 'Fraktur K'],
847
- ['𝔏', '\\mathfrak{L}', 'Fraktur L'],
848
- ['𝔐', '\\mathfrak{M}', 'Fraktur M'],
849
- ['𝔑', '\\mathfrak{N}', 'Fraktur N'],
850
- ['𝔒', '\\mathfrak{O}', 'Fraktur O'],
851
- ['𝔓', '\\mathfrak{P}', 'Fraktur P'],
852
- ['𝔔', '\\mathfrak{Q}', 'Fraktur Q'],
853
- ['ℜ', '\\mathfrak{R}', 'Fraktur R'],
854
- ['𝔖', '\\mathfrak{S}', 'Fraktur S'],
855
- ['𝔗', '\\mathfrak{T}', 'Fraktur T'],
856
- ['𝔘', '\\mathfrak{U}', 'Fraktur U'],
857
- ['𝔙', '\\mathfrak{V}', 'Fraktur V'],
858
- ['𝔚', '\\mathfrak{W}', 'Fraktur W'],
859
- ['𝔛', '\\mathfrak{X}', 'Fraktur X'],
860
- ['𝔜', '\\mathfrak{Y}', 'Fraktur Y'],
861
- ['ℨ', '\\mathfrak{Z}', 'Fraktur Z'],
862
- ['𝔞', '\\mathfrak{a}', 'Fraktur a'],
863
- ['𝔟', '\\mathfrak{b}', 'Fraktur b'],
864
- ['𝔠', '\\mathfrak{c}', 'Fraktur c'],
865
- ['𝔡', '\\mathfrak{d}', 'Fraktur d'],
866
- ['𝔢', '\\mathfrak{e}', 'Fraktur e'],
867
- ['𝔣', '\\mathfrak{f}', 'Fraktur f'],
868
- ['𝔤', '\\mathfrak{g}', 'Fraktur g'],
869
- ['𝔥', '\\mathfrak{h}', 'Fraktur h'],
870
- ['𝔦', '\\mathfrak{i}', 'Fraktur i'],
871
- ['𝔧', '\\mathfrak{j}', 'Fraktur j'],
872
- ['𝔨', '\\mathfrak{k}', 'Fraktur k'],
873
- ['𝔩', '\\mathfrak{l}', 'Fraktur l'],
874
- ['𝔪', '\\mathfrak{m}', 'Fraktur m'],
875
- ['𝔫', '\\mathfrak{n}', 'Fraktur n'],
876
- ['𝔬', '\\mathfrak{o}', 'Fraktur o'],
877
- ['𝔭', '\\mathfrak{p}', 'Fraktur p'],
878
- ['𝔮', '\\mathfrak{q}', 'Fraktur q'],
879
- ['𝔯', '\\mathfrak{r}', 'Fraktur r'],
880
- ['𝔰', '\\mathfrak{s}', 'Fraktur s'],
881
- ['𝔱', '\\mathfrak{t}', 'Fraktur t'],
882
- ['𝔲', '\\mathfrak{u}', 'Fraktur u'],
883
- ['𝔳', '\\mathfrak{v}', 'Fraktur v'],
884
- ['𝔴', '\\mathfrak{w}', 'Fraktur w'],
885
- ['𝔵', '\\mathfrak{x}', 'Fraktur x'],
886
- ['𝔶', '\\mathfrak{y}', 'Fraktur y'],
887
- ['𝔷', '\\mathfrak{z}', 'Fraktur z'],
888
- ['𝒜', '\\mathscr{A}', 'Script A'],
889
- ['ℬ', '\\mathscr{B}', 'Script B'],
890
- ['𝒞', '\\mathscr{C}', 'Script C'],
891
- ['𝒟', '\\mathscr{D}', 'Script D'],
892
- ['â„°', '\\mathscr{E}', 'Script E'],
893
- ['ℱ', '\\mathscr{F}', 'Script F'],
894
- ['𝒢', '\\mathscr{G}', 'Script G'],
895
- ['â„‹', '\\mathscr{H}', 'Script H'],
896
- ['ℐ', '\\mathscr{I}', 'Script I'],
897
- ['𝒥', '\\mathscr{J}', 'Script J'],
898
- ['𝒦', '\\mathscr{K}', 'Script K'],
899
- ['â„’', '\\mathscr{L}', 'Script L'],
900
- ['ℳ', '\\mathscr{M}', 'Script M'],
901
- ['𝒩', '\\mathscr{N}', 'Script N'],
902
- ['𝒪', '\\mathscr{O}', 'Script O'],
903
- ['𝒫', '\\mathscr{P}', 'Script P'],
904
- ['𝒬', '\\mathscr{Q}', 'Script Q'],
905
- ['â„›', '\\mathscr{R}', 'Script R'],
906
- ['𝒮', '\\mathscr{S}', 'Script S'],
907
- ['𝒯', '\\mathscr{T}', 'Script T'],
908
- ['𝒰', '\\mathscr{U}', 'Script U'],
909
- ['𝒱', '\\mathscr{V}', 'Script V'],
910
- ['𝒲', '\\mathscr{W}', 'Script W'],
911
- ['𝒳', '\\mathscr{X}', 'Script X'],
912
- ['𝒴', '\\mathscr{Y}', 'Script Y'],
913
- ['𝒵', '\\mathscr{Z}', 'Script Z'],
914
- ['𝒶', '\\mathscr{a}', 'Script a'],
915
- ['𝒷', '\\mathscr{b}', 'Script b'],
916
- ['𝒸', '\\mathscr{c}', 'Script c'],
917
- ['𝒹', '\\mathscr{d}', 'Script d'],
918
- ['ℯ', '\\mathscr{e}', 'Script e'],
919
- ['𝒻', '\\mathscr{f}', 'Script f'],
920
- ['ℊ', '\\mathscr{g}', 'Script g'],
921
- ['𝒽', '\\mathscr{h}', 'Script h'],
922
- ['𝒾', '\\mathscr{i}', 'Script i'],
923
- ['𝒿', '\\mathscr{j}', 'Script j'],
924
- ['𝓀', '\\mathscr{k}', 'Script k'],
925
- ['𝓁', '\\mathscr{l}', 'Script l'],
926
- ['𝓂', '\\mathscr{m}', 'Script m'],
927
- ['𝓃', '\\mathscr{n}', 'Script n'],
928
- ['â„´', '\\mathscr{o}', 'Script o'],
929
- ['𝓅', '\\mathscr{p}', 'Script p'],
930
- ['𝓆', '\\mathscr{q}', 'Script q'],
931
- ['𝓇', '\\mathscr{r}', 'Script r'],
932
- ['𝓈', '\\mathscr{s}', 'Script s'],
933
- ['𝓉', '\\mathscr{t}', 'Script t'],
934
- ['𝓊', '\\mathscr{u}', 'Script u'],
935
- ['𝓋', '\\mathscr{v}', 'Script v'],
936
- ['𝓌', '\\mathscr{w}', 'Script w'],
937
- ['𝓍', '\\mathscr{x}', 'Script x'],
938
- ['𝓎', '\\mathscr{y}', 'Script y'],
939
- ['𝓏', '\\mathscr{z}', 'Script z'],
836
+ ['𝔄', '\\mathfrak{A}', 'Fraktur A'],
837
+ ['𝔅', '\\mathfrak{B}', 'Fraktur B'],
838
+ ['', '\\mathfrak{C}', 'Fraktur C'],
839
+ ['𝔇', '\\mathfrak{D}', 'Fraktur D'],
840
+ ['𝔈', '\\mathfrak{E}', 'Fraktur E'],
841
+ ['𝔉', '\\mathfrak{F}', 'Fraktur F'],
842
+ ['𝔊', '\\mathfrak{G}', 'Fraktur G'],
843
+ ['', '\\mathfrak{H}', 'Fraktur H'],
844
+ ['', '\\mathfrak{I}', 'Fraktur I'],
845
+ ['𝔍', '\\mathfrak{J}', 'Fraktur J'],
846
+ ['𝔎', '\\mathfrak{K}', 'Fraktur K'],
847
+ ['𝔏', '\\mathfrak{L}', 'Fraktur L'],
848
+ ['𝔐', '\\mathfrak{M}', 'Fraktur M'],
849
+ ['𝔑', '\\mathfrak{N}', 'Fraktur N'],
850
+ ['𝔒', '\\mathfrak{O}', 'Fraktur O'],
851
+ ['𝔓', '\\mathfrak{P}', 'Fraktur P'],
852
+ ['𝔔', '\\mathfrak{Q}', 'Fraktur Q'],
853
+ ['', '\\mathfrak{R}', 'Fraktur R'],
854
+ ['𝔖', '\\mathfrak{S}', 'Fraktur S'],
855
+ ['𝔗', '\\mathfrak{T}', 'Fraktur T'],
856
+ ['𝔘', '\\mathfrak{U}', 'Fraktur U'],
857
+ ['𝔙', '\\mathfrak{V}', 'Fraktur V'],
858
+ ['𝔚', '\\mathfrak{W}', 'Fraktur W'],
859
+ ['𝔛', '\\mathfrak{X}', 'Fraktur X'],
860
+ ['𝔜', '\\mathfrak{Y}', 'Fraktur Y'],
861
+ ['', '\\mathfrak{Z}', 'Fraktur Z'],
862
+ ['𝔞', '\\mathfrak{a}', 'Fraktur a'],
863
+ ['𝔟', '\\mathfrak{b}', 'Fraktur b'],
864
+ ['𝔠', '\\mathfrak{c}', 'Fraktur c'],
865
+ ['𝔡', '\\mathfrak{d}', 'Fraktur d'],
866
+ ['𝔢', '\\mathfrak{e}', 'Fraktur e'],
867
+ ['𝔣', '\\mathfrak{f}', 'Fraktur f'],
868
+ ['𝔤', '\\mathfrak{g}', 'Fraktur g'],
869
+ ['𝔥', '\\mathfrak{h}', 'Fraktur h'],
870
+ ['𝔦', '\\mathfrak{i}', 'Fraktur i'],
871
+ ['𝔧', '\\mathfrak{j}', 'Fraktur j'],
872
+ ['𝔨', '\\mathfrak{k}', 'Fraktur k'],
873
+ ['𝔩', '\\mathfrak{l}', 'Fraktur l'],
874
+ ['𝔪', '\\mathfrak{m}', 'Fraktur m'],
875
+ ['𝔫', '\\mathfrak{n}', 'Fraktur n'],
876
+ ['𝔬', '\\mathfrak{o}', 'Fraktur o'],
877
+ ['𝔭', '\\mathfrak{p}', 'Fraktur p'],
878
+ ['𝔮', '\\mathfrak{q}', 'Fraktur q'],
879
+ ['𝔯', '\\mathfrak{r}', 'Fraktur r'],
880
+ ['𝔰', '\\mathfrak{s}', 'Fraktur s'],
881
+ ['𝔱', '\\mathfrak{t}', 'Fraktur t'],
882
+ ['𝔲', '\\mathfrak{u}', 'Fraktur u'],
883
+ ['𝔳', '\\mathfrak{v}', 'Fraktur v'],
884
+ ['𝔴', '\\mathfrak{w}', 'Fraktur w'],
885
+ ['𝔵', '\\mathfrak{x}', 'Fraktur x'],
886
+ ['𝔶', '\\mathfrak{y}', 'Fraktur y'],
887
+ ['𝔷', '\\mathfrak{z}', 'Fraktur z'],
888
+ ['𝒜', '\\mathscr{A}', 'Script A'],
889
+ ['', '\\mathscr{B}', 'Script B'],
890
+ ['𝒞', '\\mathscr{C}', 'Script C'],
891
+ ['𝒟', '\\mathscr{D}', 'Script D'],
892
+ ['', '\\mathscr{E}', 'Script E'],
893
+ ['', '\\mathscr{F}', 'Script F'],
894
+ ['𝒢', '\\mathscr{G}', 'Script G'],
895
+ ['', '\\mathscr{H}', 'Script H'],
896
+ ['', '\\mathscr{I}', 'Script I'],
897
+ ['𝒥', '\\mathscr{J}', 'Script J'],
898
+ ['𝒦', '\\mathscr{K}', 'Script K'],
899
+ ['', '\\mathscr{L}', 'Script L'],
900
+ ['', '\\mathscr{M}', 'Script M'],
901
+ ['𝒩', '\\mathscr{N}', 'Script N'],
902
+ ['𝒪', '\\mathscr{O}', 'Script O'],
903
+ ['𝒫', '\\mathscr{P}', 'Script P'],
904
+ ['𝒬', '\\mathscr{Q}', 'Script Q'],
905
+ ['', '\\mathscr{R}', 'Script R'],
906
+ ['𝒮', '\\mathscr{S}', 'Script S'],
907
+ ['𝒯', '\\mathscr{T}', 'Script T'],
908
+ ['𝒰', '\\mathscr{U}', 'Script U'],
909
+ ['𝒱', '\\mathscr{V}', 'Script V'],
910
+ ['𝒲', '\\mathscr{W}', 'Script W'],
911
+ ['𝒳', '\\mathscr{X}', 'Script X'],
912
+ ['𝒴', '\\mathscr{Y}', 'Script Y'],
913
+ ['𝒵', '\\mathscr{Z}', 'Script Z'],
914
+ ['𝒶', '\\mathscr{a}', 'Script a'],
915
+ ['𝒷', '\\mathscr{b}', 'Script b'],
916
+ ['𝒸', '\\mathscr{c}', 'Script c'],
917
+ ['𝒹', '\\mathscr{d}', 'Script d'],
918
+ ['', '\\mathscr{e}', 'Script e'],
919
+ ['𝒻', '\\mathscr{f}', 'Script f'],
920
+ ['', '\\mathscr{g}', 'Script g'],
921
+ ['𝒽', '\\mathscr{h}', 'Script h'],
922
+ ['𝒾', '\\mathscr{i}', 'Script i'],
923
+ ['𝒿', '\\mathscr{j}', 'Script j'],
924
+ ['𝓀', '\\mathscr{k}', 'Script k'],
925
+ ['𝓁', '\\mathscr{l}', 'Script l'],
926
+ ['𝓂', '\\mathscr{m}', 'Script m'],
927
+ ['𝓃', '\\mathscr{n}', 'Script n'],
928
+ ['', '\\mathscr{o}', 'Script o'],
929
+ ['𝓅', '\\mathscr{p}', 'Script p'],
930
+ ['𝓆', '\\mathscr{q}', 'Script q'],
931
+ ['𝓇', '\\mathscr{r}', 'Script r'],
932
+ ['𝓈', '\\mathscr{s}', 'Script s'],
933
+ ['𝓉', '\\mathscr{t}', 'Script t'],
934
+ ['𝓊', '\\mathscr{u}', 'Script u'],
935
+ ['𝓋', '\\mathscr{v}', 'Script v'],
936
+ ['𝓌', '\\mathscr{w}', 'Script w'],
937
+ ['𝓍', '\\mathscr{x}', 'Script x'],
938
+ ['𝓎', '\\mathscr{y}', 'Script y'],
939
+ ['𝓏', '\\mathscr{z}', 'Script z'],
940
940
  ].map(([label, insert, title]) => ({ label, insert, title }));
941
941
 
942
942
  const HEBREW_SYMBOL_PICKER_ITEMS = [
943
- { label: 'ℵ', insert: '\\aleph', title: 'Aleph' },
944
- { label: 'â„’', insert: '\\mathscr{L}', title: 'Script L' },
945
- { label: '℘', insert: '\\wp', title: 'Weierstrass p' },
946
- { label: '𝒵', insert: '\\mathscr{Z}', title: 'Script Z' },
947
- { label: 'ℱ', insert: '\\mathscr{F}', title: 'Script F' },
943
+ { label: '', insert: '\\aleph', title: 'Aleph' },
944
+ { label: '', insert: '\\mathscr{L}', title: 'Script L' },
945
+ { label: '', insert: '\\wp', title: 'Weierstrass p' },
946
+ { label: '𝒵', insert: '\\mathscr{Z}', title: 'Script Z' },
947
+ { label: '', insert: '\\mathscr{F}', title: 'Script F' },
948
948
  ];
949
949
 
950
- const ARABIC_INDIC_DIGITS = ['Ù ', 'Ù¡', 'Ù¢', 'Ù£', 'Ù¤', 'Ù¥', 'Ù¦', 'Ù§', 'Ù¨', 'Ù©'];
951
- const EASTERN_ARABIC_INDIC_DIGITS = ['Û°', 'Û±', 'Û²', 'Û³', 'Û´', 'Ûµ', 'Û¶', 'Û·', 'Û¸', 'Û¹'];
950
+ const ARABIC_INDIC_DIGITS = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
951
+ const EASTERN_ARABIC_INDIC_DIGITS = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
952
952
 
953
953
  function convertDigitsToNumeralSystem(value, numeralMode) {
954
954
  if (!value || numeralMode === 'western') return value;
@@ -1193,59 +1193,59 @@ const ORDERED_MATH_GROUPS = [
1193
1193
  label: <RootFractionTabIcon />,
1194
1194
  items: [
1195
1195
  // GROUP 1 - Fractions & Roots (cols: 2)
1196
- { label: 'â–¡/â–¡', insert: '\\frac{#0}{#?}', title: 'Fraction', cls: 'green-template', icon: 'stacked-fraction' },
1197
- { label: 'â–¡/â–¡', insert: '{#0}/{#?}', title: 'Bevelled Fraction', cls: 'green-template' },
1198
- { label: '√□', insert: '\\sqrt{#0}', title: 'Square Root', cls: 'green-template', icon: 'square-root-template' },
1199
- { label: '□√□', insert: '\\sqrt[#?]{#0}', title: 'Root', cls: 'green-template', icon: 'nth-root-template' },
1196
+ { label: '□/□', insert: '\\frac{#0}{#?}', title: 'Fraction', cls: 'green-template', icon: 'stacked-fraction' },
1197
+ { label: '□/□', insert: '{#0}/{#?}', title: 'Bevelled Fraction', cls: 'green-template' },
1198
+ { label: '√□', insert: '\\sqrt{#0}', title: 'Square Root', cls: 'green-template', icon: 'square-root-template' },
1199
+ { label: '□√□', insert: '\\sqrt[#?]{#0}', title: 'Root', cls: 'green-template', icon: 'nth-root-template' },
1200
1200
  { type: 'sep', cols: 2 },
1201
1201
  // GROUP 2a - Brackets (cols: 2)
1202
- { label: 'â–¡^â–¡', insert: '#0^{#?}', title: 'Superscript', cls: 'green-template', icon: 'superscript-template' },
1203
- { label: 'â–¡_â–¡', insert: '#0_{#?}', title: 'Subscript', cls: 'green-template', icon: 'subscript-template' },
1202
+ { label: '□^□', insert: '#0^{#?}', title: 'Superscript', cls: 'green-template', icon: 'superscript-template' },
1203
+ { label: '_', insert: '#0_{#?}', title: 'Subscript', cls: 'green-template', icon: 'subscript-template' },
1204
1204
 
1205
1205
  { type: 'sep', cols: 1 },
1206
1206
  // GROUP 2b - Super/Subscript (cols: 1)
1207
- { label: '(â–¡)', insert: '\\left(#0\\right)', title: 'Parentheses', cls: 'green-template' },
1208
- { label: '|â–¡|', insert: '\\left|#0\\right|', title: 'Absolute Value', cls: 'green-template' },
1209
- { label: '[â–¡]', insert: '\\left[#0\\right]', title: 'Square Brackets', cls: 'green-template' },
1210
- { label: '{â–¡}', insert: '\\left\\{#0\\right\\}', title: 'Curly Braces', cls: 'green-template' },
1207
+ { label: '()', insert: '\\left(#0\\right)', title: 'Parentheses', cls: 'green-template' },
1208
+ { label: '|□|', insert: '\\left|#0\\right|', title: 'Absolute Value', cls: 'green-template' },
1209
+ { label: '[]', insert: '\\left[#0\\right]', title: 'Square Brackets', cls: 'green-template' },
1210
+ { label: '{}', insert: '\\left\\{#0\\right\\}', title: 'Curly Braces', cls: 'green-template' },
1211
1211
  { type: 'sep', cols: 3 },
1212
1212
  // GROUP 3 - Operators (cols: 3)
1213
1213
  { label: '+', insert: '+' },
1214
- { label: '−', insert: '-' },
1215
- { label: '×', insert: '\\times' },
1216
- { label: '÷', insert: '\\div' },
1214
+ { label: '', insert: '-' },
1215
+ { label: '×', insert: '\\times' },
1216
+ { label: '÷', insert: '\\div' },
1217
1217
  { label: '/', insert: '/' },
1218
- { label: '±', insert: '\\pm' },
1218
+ { label: '±', insert: '\\pm' },
1219
1219
  { type: 'sep', cols: 3 },
1220
1220
  // GROUP 4 - Relations (cols: 4)
1221
- { label: '≥', insert: '\\geq' },
1222
- { label: '≤', insert: '\\leq' },
1223
- { label: '∩', insert: '\\cap' },
1224
- { label: '∪', insert: '\\cup' },
1221
+ { label: '', insert: '\\geq' },
1222
+ { label: '', insert: '\\leq' },
1223
+ { label: '', insert: '\\cap' },
1224
+ { label: '', insert: '\\cup' },
1225
1225
  { label: '=', insert: '=' },
1226
- { label: '≠', insert: '\\neq' },
1227
- { label: '⊂', insert: '\\subset' },
1228
- { label: '∈', insert: '\\in' },
1226
+ { label: '', insert: '\\neq' },
1227
+ { label: '', insert: '\\subset' },
1228
+ { label: '', insert: '\\in' },
1229
1229
  { type: 'sep', cols: 4 },
1230
1230
  // GROUP 5 - Symbols (cols: 2)
1231
- { label: '∅', insert: '\\emptyset' },
1232
- { label: '∞', insert: '\\infty' },
1233
- { label: 'Ï€', insert: '\\pi' },
1234
- { label: 'â„•', insert: '\\mathbb{N}' },
1231
+ { label: '', insert: '\\emptyset' },
1232
+ { label: '', insert: '\\infty' },
1233
+ { label: 'π', insert: '\\pi' },
1234
+ { label: '', insert: '\\mathbb{N}' },
1235
1235
  { type: 'sep', cols: 2 },
1236
1236
  // GROUP 6 - Clipboard (cols: 3)
1237
- { label: '✂', action: 'CUT', title: 'Cut Formula', cls: 'soft-tool' },
1238
- { label: '⧉', action: 'COPY', title: 'Copy Formula', cls: 'soft-tool' },
1239
- { label: '⎘', action: 'PASTE', title: 'Paste Formula', cls: 'soft-tool' },
1240
- { label: '↶', action: 'UNDO', title: 'Undo', cls: 'soft-tool' },
1241
- { label: '↷', action: 'REDO', title: 'Redo', cls: 'soft-tool' },
1242
- { label: '⌫', action: 'CLEAR', title: 'Clear Formula', cls: 'soft-tool' },
1237
+ { label: '', action: 'CUT', title: 'Cut Formula', cls: 'soft-tool' },
1238
+ { label: '', action: 'COPY', title: 'Copy Formula', cls: 'soft-tool' },
1239
+ { label: '', action: 'PASTE', title: 'Paste Formula', cls: 'soft-tool' },
1240
+ { label: '', action: 'UNDO', title: 'Undo', cls: 'soft-tool' },
1241
+ { label: '', action: 'REDO', title: 'Redo', cls: 'soft-tool' },
1242
+ { label: '', action: 'CLEAR', title: 'Clear Formula', cls: 'soft-tool' },
1243
1243
  { type: 'sep', cols: 3 },
1244
1244
  // GROUP 7 - Formatting (cols: 3)
1245
1245
  { label: 'B', action: 'BOLD', cls: 'template format-tool', title: 'Bold' },
1246
1246
  { label: '1b', action: 'ITALIC', cls: 'format-tool', title: 'Italic' },
1247
1247
  { label: 'BI', action: 'BOLD_ITALIC', cls: 'format-tool', title: 'Bold Italic' },
1248
- { label: 'Ω', action: 'SPECIAL_CHARS', cls: 'format-tool omega-tool', title: 'Greek Letters' },
1248
+ { label: 'Ω', action: 'SPECIAL_CHARS', cls: 'format-tool omega-tool', title: 'Greek Letters' },
1249
1249
  { label: 'T', action: 'TEXT', cls: 'format-tool text-tool', title: 'Regular Text' },
1250
1250
  { label: 'A', action: 'TEXT_COLOR', cls: 'format-tool color-tool', title: 'Text Color' },
1251
1251
  { type: 'sep', cols: 1 },
@@ -1259,7 +1259,7 @@ const ORDERED_MATH_GROUPS = [
1259
1259
  id: 'relations',
1260
1260
  ...MATH_GROUPS[1],
1261
1261
  items: RELATIONS_TAB_ITEMS,
1262
- label: <TabIcon top="∈∞" compact />,
1262
+ label: <TabIcon top="∈∞" compact />,
1263
1263
  },
1264
1264
  {
1265
1265
  id: 'arrows',
@@ -1268,61 +1268,61 @@ const ORDERED_MATH_GROUPS = [
1268
1268
  },
1269
1269
  {
1270
1270
  id: 'greek',
1271
- label: <TabIcon top="α Ω" compact />,
1271
+ label: <TabIcon top="α Ω" compact />,
1272
1272
  items: [
1273
- { category: 'Lowercase Greek Letters', label: 'α', insert: '\\alpha' },
1274
- { category: 'Lowercase Greek Letters', label: 'β', insert: '\\beta' },
1275
- { category: 'Lowercase Greek Letters', label: 'γ', insert: '\\gamma' },
1276
- { category: 'Lowercase Greek Letters', label: 'δ', insert: '\\delta' },
1277
- { category: 'Lowercase Greek Letters', label: 'ε', insert: '\\epsilon' },
1278
- { category: 'Lowercase Greek Letters', label: 'ζ', insert: '\\zeta' },
1279
- { category: 'Lowercase Greek Letters', label: 'η', insert: '\\eta' },
1280
- { category: 'Lowercase Greek Letters', label: 'θ', insert: '\\theta' },
1281
- { category: 'Lowercase Greek Letters', label: 'Ï‘', insert: '\\vartheta' },
1282
- { category: 'Lowercase Greek Letters', label: 'ι', insert: '\\iota' },
1283
- { category: 'Lowercase Greek Letters', label: 'κ', insert: '\\kappa' },
1284
- { category: 'Lowercase Greek Letters', label: 'λ', insert: '\\lambda' },
1285
- { category: 'Lowercase Greek Letters', label: 'μ', insert: '\\mu' },
1286
- { category: 'Lowercase Greek Letters', label: 'ν', insert: '\\nu' },
1287
- { category: 'Lowercase Greek Letters', label: 'ξ', insert: '\\xi' },
1288
- { category: 'Lowercase Greek Letters', label: 'ο', insert: 'ο' },
1289
- { category: 'Lowercase Greek Letters', label: 'Ï€', insert: '\\pi' },
1290
- { category: 'Lowercase Greek Letters', label: 'Ï–', insert: '\\varpi' },
1291
- { category: 'Lowercase Greek Letters', label: 'ρ', insert: '\\rho' },
1292
- { category: 'Lowercase Greek Letters', label: 'Ï‚', insert: '\\varsigma' },
1293
- { category: 'Lowercase Greek Letters', label: 'σ', insert: '\\sigma' },
1294
- { category: 'Lowercase Greek Letters', label: 'Ï„', insert: '\\tau' },
1295
- { category: 'Lowercase Greek Letters', label: 'Ï…', insert: '\\upsilon' },
1296
- { category: 'Lowercase Greek Letters', label: 'φ', insert: '\\phi' },
1297
- { category: 'Lowercase Greek Letters', label: 'Ï•', insert: '\\varphi' },
1298
- { category: 'Lowercase Greek Letters', label: 'χ', insert: '\\chi' },
1299
- { category: 'Lowercase Greek Letters', label: 'ψ', insert: '\\psi' },
1300
- { category: 'Lowercase Greek Letters', label: 'ω', insert: '\\omega' },
1273
+ { category: 'Lowercase Greek Letters', label: 'α', insert: '\\alpha' },
1274
+ { category: 'Lowercase Greek Letters', label: 'β', insert: '\\beta' },
1275
+ { category: 'Lowercase Greek Letters', label: 'γ', insert: '\\gamma' },
1276
+ { category: 'Lowercase Greek Letters', label: 'δ', insert: '\\delta' },
1277
+ { category: 'Lowercase Greek Letters', label: 'ε', insert: '\\epsilon' },
1278
+ { category: 'Lowercase Greek Letters', label: 'ζ', insert: '\\zeta' },
1279
+ { category: 'Lowercase Greek Letters', label: 'η', insert: '\\eta' },
1280
+ { category: 'Lowercase Greek Letters', label: 'θ', insert: '\\theta' },
1281
+ { category: 'Lowercase Greek Letters', label: 'ϑ', insert: '\\vartheta' },
1282
+ { category: 'Lowercase Greek Letters', label: 'ι', insert: '\\iota' },
1283
+ { category: 'Lowercase Greek Letters', label: 'κ', insert: '\\kappa' },
1284
+ { category: 'Lowercase Greek Letters', label: 'λ', insert: '\\lambda' },
1285
+ { category: 'Lowercase Greek Letters', label: 'μ', insert: '\\mu' },
1286
+ { category: 'Lowercase Greek Letters', label: 'ν', insert: '\\nu' },
1287
+ { category: 'Lowercase Greek Letters', label: 'ξ', insert: '\\xi' },
1288
+ { category: 'Lowercase Greek Letters', label: 'ο', insert: 'ο' },
1289
+ { category: 'Lowercase Greek Letters', label: 'π', insert: '\\pi' },
1290
+ { category: 'Lowercase Greek Letters', label: 'ϖ', insert: '\\varpi' },
1291
+ { category: 'Lowercase Greek Letters', label: 'ρ', insert: '\\rho' },
1292
+ { category: 'Lowercase Greek Letters', label: 'ς', insert: '\\varsigma' },
1293
+ { category: 'Lowercase Greek Letters', label: 'σ', insert: '\\sigma' },
1294
+ { category: 'Lowercase Greek Letters', label: 'τ', insert: '\\tau' },
1295
+ { category: 'Lowercase Greek Letters', label: 'υ', insert: '\\upsilon' },
1296
+ { category: 'Lowercase Greek Letters', label: 'φ', insert: '\\phi' },
1297
+ { category: 'Lowercase Greek Letters', label: 'ϕ', insert: '\\varphi' },
1298
+ { category: 'Lowercase Greek Letters', label: 'χ', insert: '\\chi' },
1299
+ { category: 'Lowercase Greek Letters', label: 'ψ', insert: '\\psi' },
1300
+ { category: 'Lowercase Greek Letters', label: 'ω', insert: '\\omega' },
1301
1301
  { category: 'Lowercase Greek Letters', label: '|', action: 'GREEK_ITALIC_PICKER', title: 'Italic Uppercase Greek', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool greek-italic-picker-tool' },
1302
1302
 
1303
- { category: 'Uppercase Greek Letters', label: 'â„•', insert: '\\mathbb{N}' },
1304
- { category: 'Uppercase Greek Letters', label: 'ℤ', insert: '\\mathbb{Z}' },
1305
- { category: 'Uppercase Greek Letters', label: 'ℚ', insert: '\\mathbb{Q}' },
1306
- { category: 'Uppercase Greek Letters', label: 'â„‚', insert: '\\mathbb{C}' },
1307
- { category: 'Uppercase Greek Letters', label: 'ℝ', insert: '\\mathbb{R}' },
1308
- { category: 'Uppercase Greek Letters', label: 'â„™', insert: '\\mathbb{P}' },
1303
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{N}' },
1304
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{Z}' },
1305
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{Q}' },
1306
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{C}' },
1307
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{R}' },
1308
+ { category: 'Uppercase Greek Letters', label: '', insert: '\\mathbb{P}' },
1309
1309
  { category: 'Uppercase Greek Letters', label: '|', action: 'BLACKBOARD_BOLD_PICKER', title: 'More Blackboard Bold Letters', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool blackboard-bold-picker-tool' },
1310
1310
 
1311
- { category: 'Fraktur / Gothic Symbols', label: '𝔄', insert: '\\mathfrak{A}' },
1312
- { category: 'Fraktur / Gothic Symbols', label: '𝒜', insert: '\\mathscr{A}' },
1313
- { category: 'Fraktur / Gothic Symbols', label: '𝔅', insert: '\\mathfrak{B}' },
1314
- { category: 'Fraktur / Gothic Symbols', label: 'ℬ', insert: '\\mathscr{B}' },
1315
- { category: 'Fraktur / Gothic Symbols', label: 'â„­', insert: '\\mathfrak{C}' },
1316
- { category: 'Fraktur / Gothic Symbols', label: '𝒞', insert: '\\mathscr{C}' },
1311
+ { category: 'Fraktur / Gothic Symbols', label: '𝔄', insert: '\\mathfrak{A}' },
1312
+ { category: 'Fraktur / Gothic Symbols', label: '𝒜', insert: '\\mathscr{A}' },
1313
+ { category: 'Fraktur / Gothic Symbols', label: '𝔅', insert: '\\mathfrak{B}' },
1314
+ { category: 'Fraktur / Gothic Symbols', label: '', insert: '\\mathscr{B}' },
1315
+ { category: 'Fraktur / Gothic Symbols', label: '', insert: '\\mathfrak{C}' },
1316
+ { category: 'Fraktur / Gothic Symbols', label: '𝒞', insert: '\\mathscr{C}' },
1317
1317
  { category: 'Fraktur / Gothic Symbols', label: '|', action: 'FRAKTUR_SCRIPT_PICKER', title: 'More Fraktur and Script Letters', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool fraktur-script-picker-tool' },
1318
1318
 
1319
- { category: 'Hebrew Mathematical Symbols', label: 'â„‘', insert: '\\Im' },
1320
- { category: 'Hebrew Mathematical Symbols', label: 'ℜ', insert: '\\Re' },
1321
- { category: 'Hebrew Mathematical Symbols', label: '𝓁', insert: '\\ell' },
1319
+ { category: 'Hebrew Mathematical Symbols', label: '', insert: '\\Im' },
1320
+ { category: 'Hebrew Mathematical Symbols', label: '', insert: '\\Re' },
1321
+ { category: 'Hebrew Mathematical Symbols', label: '𝓁', insert: '\\ell' },
1322
1322
  { category: 'Hebrew Mathematical Symbols', label: '|', action: 'HEBREW_SYMBOL_PICKER', title: 'More Hebrew Mathematical Symbols', icon: 'vertical-line-picker-template-image', cls: 'arrow-picker-tool hebrew-symbol-picker-tool' },
1323
1323
 
1324
- { category: 'Arabic-Indic Numeral Systems', label: '٤٦', action: 'ARABIC_INDIC_NUMERALS', title: 'Arabic-Indic Numerals', icon: 'arabic-indic-numerals-template-image', cls: 'numeral-mode-tool' },
1325
- { category: 'Arabic-Indic Numeral Systems', label: 'Û´Û¶', action: 'EASTERN_ARABIC_INDIC_NUMERALS', title: 'Eastern Arabic-Indic Numerals (Persian/Urdu)', icon: 'eastern-arabic-indic-numerals-template-image', cls: 'numeral-mode-tool' },
1324
+ { category: 'Arabic-Indic Numeral Systems', label: '٤٦', action: 'ARABIC_INDIC_NUMERALS', title: 'Arabic-Indic Numerals', icon: 'arabic-indic-numerals-template-image', cls: 'numeral-mode-tool' },
1325
+ { category: 'Arabic-Indic Numeral Systems', label: '۴۶', action: 'EASTERN_ARABIC_INDIC_NUMERALS', title: 'Eastern Arabic-Indic Numerals (Persian/Urdu)', icon: 'eastern-arabic-indic-numerals-template-image', cls: 'numeral-mode-tool' },
1326
1326
 
1327
1327
  { category: 'Blackboard Bold / Number Sets', label: 'H', insert: 'H' },
1328
1328
  { category: 'Blackboard Bold / Number Sets', label: 'C', insert: 'C' },
@@ -1347,51 +1347,51 @@ const ORDERED_MATH_GROUPS = [
1347
1347
  id: 'brackets',
1348
1348
  label: <BracketsTabIcon />,
1349
1349
  items: [
1350
- { label: '(â–¡)', insert: '\\left(#0\\right)' },
1351
- { label: '[â–¡]', insert: '\\left[#0\\right]' },
1352
- { label: '|â–¡|', insert: '\\left|#0\\right|' },
1353
- { label: '‖□‖', insert: '\\left\\| #0 \\right\\|' },
1354
- { label: '⟨□⟩', insert: '\\left\\langle #0 \\right\\rangle' },
1355
- { label: '{â–¡}', insert: '\\left\\{#0\\right\\}' },
1356
- { label: '⌊□⌋', insert: '\\left\\lfloor #0 \\right\\rfloor' },
1357
- { label: '⌈□⌉', insert: '\\left\\lceil #0 \\right\\rceil' },
1358
- { label: '⟨□|□⟩', insert: '\\left\\langle #0 \\middle| #? \\right\\rangle' },
1350
+ { label: '()', insert: '\\left(#0\\right)' },
1351
+ { label: '[]', insert: '\\left[#0\\right]' },
1352
+ { label: '|□|', insert: '\\left|#0\\right|' },
1353
+ { label: '‖□‖', insert: '\\left\\| #0 \\right\\|' },
1354
+ { label: '⟨□⟩', insert: '\\left\\langle #0 \\right\\rangle' },
1355
+ { label: '{}', insert: '\\left\\{#0\\right\\}' },
1356
+ { label: '⌊□⌋', insert: '\\left\\lfloor #0 \\right\\rfloor' },
1357
+ { label: '⌈□⌉', insert: '\\left\\lceil #0 \\right\\rceil' },
1358
+ { label: '⟨□|□⟩', insert: '\\left\\langle #0 \\middle| #? \\right\\rangle' },
1359
1359
  { type: 'sep', cols: 2 },
1360
1360
  { label: 'overbrace', insert: '\\overbrace{#0}', cls: 'template', directInsert: true, title: 'Overbrace', icon: 'overbrace-arc-template-image' },
1361
1361
  { label: 'underbrace', insert: '\\underbrace{#0}', cls: 'template', directInsert: true, title: 'Underbrace', icon: 'underbrace-arc-template-image' },
1362
1362
  { label: 'overparen', insert: '\\overparen{#0}', cls: 'template', directInsert: true, title: 'Overparen', icon: 'overparen-template-image' },
1363
1363
  { label: 'underparen', insert: '\\underparen{#0}', cls: 'template', directInsert: true, title: 'Underparen', icon: 'underparen-template-image' },
1364
1364
  { type: 'sep', cols: 2 },
1365
- { label: '⃗\n▯', insert: '\\vec{#0}', cls: 'template', directInsert: true, title: 'Vector Accent', icon: 'vec-accent-template-image' },
1366
- { label: '→\n▯', insert: '\\overrightarrow{#?}', cls: 'template', directInsert: true, title: 'Right Arrow Accent', icon: 'overrightarrow-accent-template-image' },
1367
- { label: '↔\n▯', insert: '\\overleftrightarrow{#?}', cls: 'template', directInsert: true, title: 'Left-Right Arrow Accent', icon: 'overleftrightarrow-accent-template-image' },
1368
- { label: '¯\n▯', insert: '\\overline{#?}', cls: 'template', directInsert: true, title: 'Overline Accent', icon: 'overline-accent-template-image' },
1369
- { label: '^\nâ–¯', insert: '\\hat{#?}', cls: 'template', directInsert: true, title: 'Hat Accent', icon: 'hat-accent-template-image' },
1370
- { label: '~\nâ–¯', insert: '\\tilde{#?}', cls: 'template', directInsert: true, title: 'Tilde Accent', icon: 'tilde-accent-template-image' },
1371
- { label: '¨\n▯', insert: '\\ddot{#?}', cls: 'template', directInsert: true, title: 'Double Dot Accent', icon: 'ddot-accent-template-image' },
1372
- { label: 'Ë™\nâ–¯', insert: '\\dot{#?}', cls: 'template', directInsert: true, title: 'Dot Accent', icon: 'dot-accent-template-image' },
1365
+ { label: '⃗\n', insert: '\\vec{#0}', cls: 'template', directInsert: true, title: 'Vector Accent', icon: 'vec-accent-template-image' },
1366
+ { label: '→\n', insert: '\\overrightarrow{#?}', cls: 'template', directInsert: true, title: 'Right Arrow Accent', icon: 'overrightarrow-accent-template-image' },
1367
+ { label: '↔\n', insert: '\\overleftrightarrow{#?}', cls: 'template', directInsert: true, title: 'Left-Right Arrow Accent', icon: 'overleftrightarrow-accent-template-image' },
1368
+ { label: '¯\n', insert: '\\overline{#?}', cls: 'template', directInsert: true, title: 'Overline Accent', icon: 'overline-accent-template-image' },
1369
+ { label: '^\n', insert: '\\hat{#?}', cls: 'template', directInsert: true, title: 'Hat Accent', icon: 'hat-accent-template-image' },
1370
+ { label: '~\n', insert: '\\tilde{#?}', cls: 'template', directInsert: true, title: 'Tilde Accent', icon: 'tilde-accent-template-image' },
1371
+ { label: '¨\n', insert: '\\ddot{#?}', cls: 'template', directInsert: true, title: 'Double Dot Accent', icon: 'ddot-accent-template-image' },
1372
+ { label: '˙\n', insert: '\\dot{#?}', cls: 'template', directInsert: true, title: 'Dot Accent', icon: 'dot-accent-template-image' },
1373
1373
  { type: 'sep', cols: 2 },
1374
- { label: '¯\n▯', insert: '\\overline{#?}', cls: 'template', directInsert: true, title: 'Overline', icon: 'overline-frame-template-image' },
1375
- { label: '_\nâ–¯', insert: '\\underline{#?}', cls: 'template', directInsert: true, title: 'Underline', icon: 'underline-frame-template-image' },
1376
- { label: '|\nâ–¯', insert: '\\left|#?\\right.', cls: 'template', directInsert: true, title: 'Left Bar', icon: 'left-bar-template-image' },
1377
- { label: 'â–¯\n|', insert: '\\left.#?\\right|', cls: 'template', directInsert: true, title: 'Right Bar', icon: 'right-bar-template-image' },
1378
- { label: 'â–¡\nâ–¯', insert: '\\boxed{#?}', cls: 'template', directInsert: true, title: 'Boxed', icon: 'boxed-square-template-image' },
1379
- { label: '(\nâ–¯\n)', insert: '\\enclose{circle}{#?}', cls: 'template', directInsert: true, title: 'Rounded Enclosure', icon: 'paren-frame-template-image' },
1380
- { label: '¯\n▯|', insert: '\\overline{\\left.#?\\right|}', cls: 'template', directInsert: true, title: 'Overline with Right Bar', icon: 'overline-right-bar-template-image' },
1381
- { label: 'â–¢\nâ–¯', insert: '\\enclose{roundedbox}{#?}', cls: 'template', directInsert: true, title: 'Rounded Boxed', icon: 'boxed-rounded-template-image' },
1374
+ { label: '¯\n', insert: '\\overline{#?}', cls: 'template', directInsert: true, title: 'Overline', icon: 'overline-frame-template-image' },
1375
+ { label: '_\n', insert: '\\underline{#?}', cls: 'template', directInsert: true, title: 'Underline', icon: 'underline-frame-template-image' },
1376
+ { label: '|\n', insert: '\\left|#?\\right.', cls: 'template', directInsert: true, title: 'Left Bar', icon: 'left-bar-template-image' },
1377
+ { label: '▯\n|', insert: '\\left.#?\\right|', cls: 'template', directInsert: true, title: 'Right Bar', icon: 'right-bar-template-image' },
1378
+ { label: '□\n', insert: '\\boxed{#?}', cls: 'template', directInsert: true, title: 'Boxed', icon: 'boxed-square-template-image' },
1379
+ { label: '(\n▯\n)', insert: '\\enclose{circle}{#?}', cls: 'template', directInsert: true, title: 'Rounded Enclosure', icon: 'paren-frame-template-image' },
1380
+ { label: '¯\n▯|', insert: '\\overline{\\left.#?\\right|}', cls: 'template', directInsert: true, title: 'Overline with Right Bar', icon: 'overline-right-bar-template-image' },
1381
+ { label: '▢\n', insert: '\\enclose{roundedbox}{#?}', cls: 'template', directInsert: true, title: 'Rounded Boxed', icon: 'boxed-rounded-template-image' },
1382
1382
  { type: 'sep', cols: 2 },
1383
- { label: '╱\n▯', insert: '\\cancel{#?}', cls: 'template', directInsert: true, title: 'Cancel', icon: 'cancel-diagonal-template-image' },
1384
- { label: '╲\n▯', insert: '\\bcancel{#?}', cls: 'template', directInsert: true, title: 'Backward Cancel', icon: 'bcancel-template-image' },
1385
- { label: '─\n▯', insert: '\\enclose{horizontalstrike}{#?}', cls: 'template', directInsert: true, title: 'Strikeout Text', icon: 'sout-template-image' },
1386
- { label: '╳\n▯', insert: '\\xcancel{#?}', cls: 'template', directInsert: true, title: 'Cross Cancel', icon: 'xcancel-template-image' },
1387
- { label: '│\n▯', insert: '\\enclose{verticalstrike}{#?}', cls: 'template', directInsert: true, title: 'Vertical Strike', icon: 'vertical-strike-template-image' },
1388
- { label: ')\n¯', insert: '\\overline{\\left)#?\\right.}', cls: 'template', directInsert: true, title: 'Overline with Curved Left Boundary', icon: 'overline-left-curve-template-image' },
1389
- { label: '┼\n▯', insert: '\\enclose{verticalstrike horizontalstrike}{#?}', cls: 'template', directInsert: true, title: 'Vertical and Horizontal Strike', icon: 'crosshair-strike-template-image' },
1383
+ { label: '╱\n', insert: '\\cancel{#?}', cls: 'template', directInsert: true, title: 'Cancel', icon: 'cancel-diagonal-template-image' },
1384
+ { label: '╲\n', insert: '\\bcancel{#?}', cls: 'template', directInsert: true, title: 'Backward Cancel', icon: 'bcancel-template-image' },
1385
+ { label: '─\n', insert: '\\enclose{horizontalstrike}{#?}', cls: 'template', directInsert: true, title: 'Strikeout Text', icon: 'sout-template-image' },
1386
+ { label: '╳\n', insert: '\\xcancel{#?}', cls: 'template', directInsert: true, title: 'Cross Cancel', icon: 'xcancel-template-image' },
1387
+ { label: '│\n', insert: '\\enclose{verticalstrike}{#?}', cls: 'template', directInsert: true, title: 'Vertical Strike', icon: 'vertical-strike-template-image' },
1388
+ { label: ')\n¯', insert: '\\overline{\\left)#?\\right.}', cls: 'template', directInsert: true, title: 'Overline with Curved Left Boundary', icon: 'overline-left-curve-template-image' },
1389
+ { label: '┼\n', insert: '\\enclose{verticalstrike horizontalstrike}{#?}', cls: 'template', directInsert: true, title: 'Vertical and Horizontal Strike', icon: 'crosshair-strike-template-image' },
1390
1390
  ],
1391
1391
  },
1392
1392
  {
1393
1393
  id: 'sets',
1394
- label: <TabIcon top="Σ ∪" compact />,
1394
+ label: <TabIcon top="Σ " compact />,
1395
1395
  items: [
1396
1396
  { label: 'sum-limits-both', insert: '\\sum\\limits_{#?}^{#?}', cls: 'template', directInsert: true, title: 'Summation With Upper and Lower Limits', icon: 'sum-limits-both-template-image' },
1397
1397
  { label: 'sum-limits-lower', insert: '\\sum\\limits_{#?}', cls: 'template', directInsert: true, title: 'Summation With Lower Limit', icon: 'sum-limits-lower-template-image' },
@@ -1401,17 +1401,17 @@ const ORDERED_MATH_GROUPS = [
1401
1401
  { label: 'prod-limits-lower', insert: '\\prod\\limits_{#?}', cls: 'template', directInsert: true, title: 'Product With Lower Limit', icon: 'prod-limits-lower-template-image' },
1402
1402
  { label: 'prod-right-both', insert: '\\prod\\nolimits^{#?}_{#?}', cls: 'template', directInsert: true, title: 'Product With Right Superscript and Subscript', icon: 'prod-right-both-template-image' },
1403
1403
  { label: 'prod-right-lower', insert: '\\prod\\nolimits_{#?}', cls: 'template', directInsert: true, title: 'Product With Right Subscript', icon: 'prod-right-lower-template-image' },
1404
- { label: 'â–¡\nâ–¯\nâ–¡', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\overset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}}', cls: 'template', directInsert: true, title: 'Operator With Upper and Lower Limits', icon: 'operator-limits-both-template-image' },
1405
- { label: 'â–¯\nâ–¡', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}', cls: 'template', directInsert: true, title: 'Operator With Lower Limit', icon: 'operator-lower-limit-template-image' },
1406
- { label: 'â–¯^â–¡_â–¡', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}^{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.26em;line-height:1.15}{#?}}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Superscript and Subscript', icon: 'operator-right-sup-sub-template-image' },
1407
- { label: 'â–¯_â–¡', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Subscript', icon: 'operator-right-sub-template-image' },
1408
- { label: 'â‹‚', insert: '\\bigcap' },
1409
- { label: '⋃', insert: '\\bigcup' },
1410
- { label: '∏', insert: '\\prod' },
1411
- { label: '∐', insert: '\\coprod' },
1412
- { label: '⨅', insert: '\\sqcap' },
1413
- { label: '⨆', insert: '\\sqcup' },
1414
- { label: '∑', insert: '\\sum' },
1404
+ { label: '□\n▯\n', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\overset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}}', cls: 'template', directInsert: true, title: 'Operator With Upper and Lower Limits', icon: 'operator-limits-both-template-image' },
1405
+ { label: '▯\n', insert: '\\displaystyle{\\underset{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.34em;line-height:1.15}{#?}}{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}}}', cls: 'template', directInsert: true, title: 'Operator With Lower Limit', icon: 'operator-lower-limit-template-image' },
1406
+ { label: '▯^□_', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}^{\\htmlStyle{font-size:1.1em;display:inline-block;padding-bottom:0.26em;line-height:1.15}{#?}}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Superscript and Subscript', icon: 'operator-right-sup-sub-template-image' },
1407
+ { label: '_', insert: '\\displaystyle{\\htmlStyle{font-size:1.45em;line-height:1.1}{#0}_{\\htmlStyle{font-size:1.1em;display:inline-block;padding-top:0.26em;line-height:1.15}{#?}}}', cls: 'template', directInsert: true, title: 'Operator With Right Subscript', icon: 'operator-right-sub-template-image' },
1408
+ { label: '', insert: '\\bigcap' },
1409
+ { label: '', insert: '\\bigcup' },
1410
+ { label: '', insert: '\\prod' },
1411
+ { label: '', insert: '\\coprod' },
1412
+ { label: '', insert: '\\sqcap' },
1413
+ { label: '', insert: '\\sqcup' },
1414
+ { label: '', insert: '\\sum' },
1415
1415
  ],
1416
1416
  },
1417
1417
  {
@@ -1421,41 +1421,41 @@ const ORDERED_MATH_GROUPS = [
1421
1421
  items: [
1422
1422
  { label: 'integral-both', insert: '\\int_{#?}^{#?}', cls: 'template', directInsert: true, title: 'Definite Integral', icon: 'integral-both-template-image' },
1423
1423
  { label: 'integral-lower', insert: '\\int_{#?}', cls: 'template', directInsert: true, title: 'Integral With Subscript', icon: 'integral-lower-template-image' },
1424
- { label: '∫□d□', insert: '\\int_{#?}^{#?} #? \\, d#?', directInsert: true, title: 'Integral', icon: 'integral-box-differential-template-image' },
1424
+ { label: '∫□d', insert: '\\int_{#?}^{#?} #? \\, d#?', directInsert: true, title: 'Integral', icon: 'integral-box-differential-template-image' },
1425
1425
  { label: '', insert: '\\int_{#?} #? \\, d#?', cls: 'template', directInsert: true, title: 'Integral', icon: 'integral-template-image' },
1426
1426
  { type: 'sep', cols: 4 },
1427
1427
  {label: 'd', insert: 'd', cls: 'template', directInsert: true, title: 'Differential'},
1428
- {label: '∂', insert: '∂', cls: 'template', directInsert: true, title: 'Partial Differential'},
1428
+ {label: '', insert: '', cls: 'template', directInsert: true, title: 'Partial Differential'},
1429
1429
  { label: 'first-derivative', insert: '\\frac{d#?}{d#?}', cls: 'template', directInsert: true, title: 'First Derivative', icon: 'first-derivative-template-image' },
1430
1430
  { label: 'partial-derivative', insert: '\\frac{\\partial#?}{\\partial#?}', cls: 'template', directInsert: true, title: 'Partial Derivative', icon: 'partial-derivative-template-image' },
1431
1431
  { label: 'limit-infinity', insert: '\\lim_{#?\\to\\infty}', cls: 'template', directInsert: true, title: 'Limit to Infinity', icon: 'limit-infinity-template-image' },
1432
1432
  { label: 'limit-generic', insert: '\\lim_{#?}', cls: 'template', directInsert: true, title: 'Limit', icon: 'limit-generic-template-image' },
1433
1433
  { type: 'sep', cols: 2 },
1434
- { label: '∇×\n▯', insert: '\\nabla \\times #?', cls: 'template', directInsert: true, title: 'Curl' },
1435
- { label: '∇·\n▯', insert: '\\nabla \\cdot #?', cls: 'template', directInsert: true, title: 'Divergence' },
1436
- { label: '∇\n▯', insert: '\\nabla #?', cls: 'template', directInsert: true, title: 'Gradient' },
1437
- { label: 'Δ\n▯', insert: '\\Delta #?', cls: 'template', directInsert: true, title: 'Delta Expression' },
1434
+ { label: '∇×\n', insert: '\\nabla \\times #?', cls: 'template', directInsert: true, title: 'Curl' },
1435
+ { label: '∇·\n', insert: '\\nabla \\cdot #?', cls: 'template', directInsert: true, title: 'Divergence' },
1436
+ { label: '∇\n', insert: '\\nabla #?', cls: 'template', directInsert: true, title: 'Gradient' },
1437
+ { label: 'Δ\n', insert: '\\Delta #?', cls: 'template', directInsert: true, title: 'Delta Expression' },
1438
1438
  { type: 'sep', cols: 3 },
1439
- { label: '∫', insert: '\\int' },
1440
- { label: '∮', insert: '\\oint' },
1441
- { label: '∬', insert: '\\iint' },
1442
- { label: '∯', insert: '\\oiint' },
1443
- { label: '∭', insert: '\\iiint' },
1444
- { label: '∰', insert: '\\oiiint' },
1439
+ { label: '', insert: '\\int' },
1440
+ { label: '', insert: '\\oint' },
1441
+ { label: '', insert: '\\iint' },
1442
+ { label: '', insert: '\\oiint' },
1443
+ { label: '', insert: '\\iiint' },
1444
+ { label: '', insert: '\\oiiint' },
1445
1445
  { type: 'sep', cols: 2 },
1446
- { label: 'log(â–¡)', insert: '\\log\\left(#0\\right)' },
1447
- { label: 'log₍□₎(□)', insert: '\\log_{#?}\\left(#?\\right)', cls: 'template', directInsert: true, title: 'Logarithm With Base', icon: 'log-base-template-image' },
1446
+ { label: 'log()', insert: '\\log\\left(#0\\right)' },
1447
+ { label: 'log₍□₎()', insert: '\\log_{#?}\\left(#?\\right)', cls: 'template', directInsert: true, title: 'Logarithm With Base', icon: 'log-base-template-image' },
1448
1448
  { type: 'sep', cols: 4 },
1449
- { label: 'sin(â–¡)', insert: '\\sin\\left(#0\\right)' },
1450
- { label: 'cos(â–¡)', insert: '\\cos\\left(#0\\right)' },
1451
- { label: 'tan(â–¡)', insert: '\\tan\\left(#0\\right)' },
1452
- { label: 'ln(â–¡)', insert: '\\ln\\left(#0\\right)' },
1453
- { label: 'sin⁻¹(□)', insert: '\\sin^{-1}\\left(#0\\right)' },
1454
- { label: 'csc(â–¡)', insert: '\\csc\\left(#0\\right)' },
1455
- { label: 'cos⁻¹(□)', insert: '\\cos^{-1}\\left(#0\\right)' },
1456
- { label: 'sec(â–¡)', insert: '\\sec\\left(#0\\right)' },
1457
- { label: 'tan⁻¹(□)', insert: '\\tan^{-1}\\left(#0\\right)' },
1458
- { label: 'cot(â–¡)', insert: '\\cot\\left(#0\\right)' },
1449
+ { label: 'sin()', insert: '\\sin\\left(#0\\right)' },
1450
+ { label: 'cos()', insert: '\\cos\\left(#0\\right)' },
1451
+ { label: 'tan()', insert: '\\tan\\left(#0\\right)' },
1452
+ { label: 'ln()', insert: '\\ln\\left(#0\\right)' },
1453
+ { label: 'sin⁻¹()', insert: '\\sin^{-1}\\left(#0\\right)' },
1454
+ { label: 'csc()', insert: '\\csc\\left(#0\\right)' },
1455
+ { label: 'cos⁻¹()', insert: '\\cos^{-1}\\left(#0\\right)' },
1456
+ { label: 'sec()', insert: '\\sec\\left(#0\\right)' },
1457
+ { label: 'tan⁻¹()', insert: '\\tan^{-1}\\left(#0\\right)' },
1458
+ { label: 'cot()', insert: '\\cot\\left(#0\\right)' },
1459
1459
  ],
1460
1460
  },
1461
1461
  {
@@ -1481,7 +1481,7 @@ const CHEM_GROUPS = [
1481
1481
  items: ['Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca'].map(el => ({ label: el, insert: el, cls: 'chem-element' }))
1482
1482
  },
1483
1483
  {
1484
- label: 'Fe-Zn →⇌', isChem: true, items: [
1484
+ label: 'Fe-Zn →⇌', isChem: true, items: [
1485
1485
  ...['Fe', 'Cu', 'Zn', 'Mn'].map(el => ({ label: el, insert: el, cls: 'chem-element' })),
1486
1486
  { type: 'sep', cols: 2 },
1487
1487
  ...['Cr', 'Ni', 'Co', 'Ag'].map(el => ({ label: el, insert: el, cls: 'chem-element' })),
@@ -1492,25 +1492,25 @@ const CHEM_GROUPS = [
1492
1492
  { type: 'sep', cols: 2 },
1493
1493
  { label: 'Xe', insert: 'Xe', cls: 'chem-element' },
1494
1494
  { type: 'sep', cols: 5 },
1495
- { label: '→', insert: '->', cls: 'chem-arrow' }, { label: '⇌', insert: '<=>', cls: 'chem-arrow' },
1496
- { label: '←', insert: '<-', cls: 'chem-arrow' }, { label: '⇄', insert: '<->', cls: 'chem-arrow' }, { label: '↑', insert: '^', cls: 'chem-arrow' },
1495
+ { label: '', insert: '->', cls: 'chem-arrow' }, { label: '', insert: '<=>', cls: 'chem-arrow' },
1496
+ { label: '', insert: '<-', cls: 'chem-arrow' }, { label: '', insert: '<->', cls: 'chem-arrow' }, { label: '', insert: '^', cls: 'chem-arrow' },
1497
1497
  { type: 'sep', cols: 4 },
1498
- { label: '↓', insert: 'v', cls: 'chem-arrow' }, { label: '+', insert: ' + ', cls: 'chem-arrow' },
1499
- { label: '→(Δ)', insert: '->[\\Delta]', cls: 'chem-arrow' }, { label: '→(aq)', insert: '->[aq]', cls: 'chem-arrow' },
1498
+ { label: '', insert: 'v', cls: 'chem-arrow' }, { label: '+', insert: ' + ', cls: 'chem-arrow' },
1499
+ { label: '(Δ)', insert: '->[\\Delta]', cls: 'chem-arrow' }, { label: '(aq)', insert: '->[aq]', cls: 'chem-arrow' },
1500
1500
  ]
1501
1501
  },
1502
1502
  {
1503
- label: '(s)(l) ⁺/⁻', isChem: true, items: [
1503
+ label: '(s)(l) ⁺/⁻', isChem: true, items: [
1504
1504
  { label: '(s)', insert: '(s)', cls: 'chem-state' }, { label: '(l)', insert: '(l)', cls: 'chem-state' },
1505
1505
  { label: '(g)', insert: '(g)', cls: 'chem-state' }, { label: '(aq)', insert: '(aq)', cls: 'chem-state' },
1506
1506
  { type: 'sep', cols: 2 },
1507
1507
  { label: '(conc)', insert: '(conc)', cls: 'chem-state' },
1508
1508
  { label: '(dil)', insert: '(dil)', cls: 'chem-state' }, { label: '(ppt)', insert: '(ppt)', cls: 'chem-state' },
1509
1509
  { type: 'sep', cols: 2 },
1510
- { label: '✚', insert: '^{+}', cls: 'chem-element' }, { label: '━', insert: '^{-}', cls: 'chem-element' },
1511
- { label: '²⁺', insert: '^{2+}', cls: 'chem-element' }, { label: '²⁻', insert: '^{2-}', cls: 'chem-element' },
1510
+ { label: '', insert: '^{+}', cls: 'chem-element' }, { label: '', insert: '^{-}', cls: 'chem-element' },
1511
+ { label: '²⁺', insert: '^{2+}', cls: 'chem-element' }, { label: '²⁻', insert: '^{2-}', cls: 'chem-element' },
1512
1512
  { type: 'sep', cols: 2 },
1513
- { label: '³⁺', insert: '^{3+}', cls: 'chem-element' }, { label: '³⁻', insert: '^{3-}', cls: 'chem-element' },
1513
+ { label: '³⁺', insert: '^{3+}', cls: 'chem-element' }, { label: '³⁻', insert: '^{3-}', cls: 'chem-element' },
1514
1514
  { label: '2', insert: '2', cls: 'chem-element' }, { label: '3', insert: '3', cls: 'chem-element' },
1515
1515
  { type: 'sep', cols: 2 },
1516
1516
  { label: '4', insert: '4', cls: 'chem-element' }, { label: '5', insert: '5', cls: 'chem-element' },
@@ -1521,17 +1521,17 @@ const CHEM_GROUPS = [
1521
1521
  ]
1522
1522
  },
1523
1523
  {
1524
- label: 'Hâ‚‚O', isChem: true, items: [
1525
- { label: 'Hâ‚‚O', insert: 'H2O', cls: 'chem-element' }, { label: 'COâ‚‚', insert: 'CO2', cls: 'chem-element' },
1526
- { label: 'NH₃', insert: 'NH3', cls: 'chem-element' }, { label: 'H₂SO₄', insert: 'H2SO4', cls: 'chem-element' },
1524
+ label: 'HO', isChem: true, items: [
1525
+ { label: 'HO', insert: 'H2O', cls: 'chem-element' }, { label: 'CO', insert: 'CO2', cls: 'chem-element' },
1526
+ { label: 'NH', insert: 'NH3', cls: 'chem-element' }, { label: 'HSO', insert: 'H2SO4', cls: 'chem-element' },
1527
1527
  { label: 'HCl', insert: 'HCl', cls: 'chem-element' }, { label: 'NaOH', insert: 'NaOH', cls: 'chem-element' },
1528
- { label: 'NaCl', insert: 'NaCl', cls: 'chem-element' }, { label: 'CaCO₃', insert: 'CaCO3', cls: 'chem-element' },
1529
- { label: 'HNO₃', insert: 'HNO3', cls: 'chem-element' }, { label: 'H₃PO₄', insert: 'H3PO4', cls: 'chem-element' },
1530
- { label: 'CH₃COOH', insert: 'CH3COOH', cls: 'chem-element' }, { label: 'C₆H₁₂O₆', insert: 'C6H12O6', cls: 'chem-element' },
1531
- { label: 'CHâ‚„', insert: 'CH4', cls: 'chem-element' }, { label: 'Câ‚‚Hâ‚…OH', insert: 'C2H5OH', cls: 'chem-element' },
1532
- { label: 'CO₃²⁻', insert: 'CO3^{2-}', cls: 'chem-element' }, { label: 'SO₄²⁻', insert: 'SO4^{2-}', cls: 'chem-element' },
1533
- { label: 'NO₃⁻', insert: 'NO3^-', cls: 'chem-element' }, { label: 'PO₄³⁻', insert: 'PO4^{3-}', cls: 'chem-element' },
1534
- { label: 'NH₄⁺', insert: 'NH4^+', cls: 'chem-element' }, { label: 'OH⁻', insert: 'OH^-', cls: 'chem-element' },
1528
+ { label: 'NaCl', insert: 'NaCl', cls: 'chem-element' }, { label: 'CaCO', insert: 'CaCO3', cls: 'chem-element' },
1529
+ { label: 'HNO', insert: 'HNO3', cls: 'chem-element' }, { label: 'HPO', insert: 'H3PO4', cls: 'chem-element' },
1530
+ { label: 'CHCOOH', insert: 'CH3COOH', cls: 'chem-element' }, { label: 'CH₁₂O', insert: 'C6H12O6', cls: 'chem-element' },
1531
+ { label: 'CH', insert: 'CH4', cls: 'chem-element' }, { label: 'CHOH', insert: 'C2H5OH', cls: 'chem-element' },
1532
+ { label: 'CO₃²⁻', insert: 'CO3^{2-}', cls: 'chem-element' }, { label: 'SO₄²⁻', insert: 'SO4^{2-}', cls: 'chem-element' },
1533
+ { label: 'NO₃⁻', insert: 'NO3^-', cls: 'chem-element' }, { label: 'PO₄³⁻', insert: 'PO4^{3-}', cls: 'chem-element' },
1534
+ { label: 'NH₄⁺', insert: 'NH4^+', cls: 'chem-element' }, { label: 'OH', insert: 'OH^-', cls: 'chem-element' },
1535
1535
  ]
1536
1536
  },
1537
1537
  ];
@@ -1718,10 +1718,10 @@ function ArrowTemplateIcon({ arrow, above = '', below = '' }) {
1718
1718
  );
1719
1719
  }
1720
1720
 
1721
- /* ══════════════════════════════════════════════════════════
1721
+ /* ══════════════════════════════════════════════════════════
1722
1722
  CKEditor inline widget plugin for MathLive rendering
1723
1723
  Uses createRawElement so CKEditor won't touch the DOM inside
1724
- ══════════════════════════════════════════════════════════ */
1724
+ ══════════════════════════════════════════════════════════ */
1725
1725
  class MathInlinePlugin extends Plugin {
1726
1726
  static get pluginName() {
1727
1727
  return 'MathInlinePlugin';
@@ -1734,7 +1734,7 @@ class MathInlinePlugin extends Plugin {
1734
1734
  init() {
1735
1735
  const editor = this.editor;
1736
1736
 
1737
- // 1) Register model element — isObject: true treats it as one atomic block
1737
+ // 1) Register model element isObject: true treats it as one atomic block
1738
1738
  editor.model.schema.register('mathInline', {
1739
1739
  isInline: true,
1740
1740
  isObject: true,
@@ -1749,7 +1749,7 @@ class MathInlinePlugin extends Plugin {
1749
1749
  }
1750
1750
  });
1751
1751
 
1752
- // 2) Editing downcast — what the user SEES in the editor
1752
+ // 2) Editing downcast what the user SEES in the editor
1753
1753
  // createRawElement lets us manage the DOM ourselves (MathLive web component)
1754
1754
  editor.conversion.for('editingDowncast').elementToElement({
1755
1755
  model: 'mathInline',
@@ -1846,7 +1846,7 @@ class MathInlinePlugin extends Plugin {
1846
1846
  );
1847
1847
  }, { priority: 'high' });
1848
1848
 
1849
- // 3) Data downcast — what getData() returns (HTML output)
1849
+ // 3) Data downcast what getData() returns (HTML output)
1850
1850
  editor.conversion.for('dataDowncast').elementToElement({
1851
1851
  model: 'mathInline',
1852
1852
  view: (modelElement, { writer }) => {
@@ -1864,7 +1864,7 @@ class MathInlinePlugin extends Plugin {
1864
1864
  },
1865
1865
  });
1866
1866
 
1867
- // 4) Upcast — recognize HTML from getData() and convert back to model
1867
+ // 4) Upcast recognize HTML from getData() and convert back to model
1868
1868
  editor.conversion.for('upcast').elementToElement({
1869
1869
  view: {
1870
1870
  name: 'span',
@@ -1883,10 +1883,10 @@ class MathInlinePlugin extends Plugin {
1883
1883
  }
1884
1884
  }
1885
1885
 
1886
- /* ══════════════════════════════════════════════════════════
1887
- Toolbar buttons plugin — Math + Chem
1888
- ══════════════════════════════════════════════════════════ */
1889
- /* SVG icons for toolbar — matches the MathType / ChemType icons */
1886
+ /* ══════════════════════════════════════════════════════════
1887
+ Toolbar buttons plugin Math + Chem
1888
+ ══════════════════════════════════════════════════════════ */
1889
+ /* SVG icons for toolbar matches the MathType / ChemType icons */
1890
1890
  const MATH_ICON_SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20"><path d="M4 12h3l3 6l5-12h5" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';
1891
1891
 
1892
1892
  const CHEM_ICON_SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20"><rect x="3" y="3" width="18" height="18" rx="3" fill="none" stroke="currentColor" stroke-width="2"/><text x="12" y="16" text-anchor="middle" font-size="12" font-weight="bold" fill="currentColor" font-family="system-ui, sans-serif">C</text><text x="6" y="8" font-size="4" font-weight="bold" fill="currentColor" font-family="system-ui, sans-serif">6</text></svg>';
@@ -2308,51 +2308,51 @@ const TOOLBAR_ICON_IMAGES = {
2308
2308
  'sum-limits-both-template-image': makeToolbarIconImage(`
2309
2309
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 90" fill="none">
2310
2310
  <rect x="24" y="2" width="12" height="20" stroke="#6aa56a" stroke-width="2"/>
2311
- <text x="30" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2311
+ <text x="30" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2312
2312
  <rect x="24" y="72" width="12" height="20" stroke="#6aa56a" stroke-width="2"/>
2313
2313
  </svg>
2314
2314
  `),
2315
2315
  'sum-right-both-template-image': makeToolbarIconImage(`
2316
2316
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 72" fill="none">
2317
- <text x="20" y="52" font-size="54" fill="#000">∑</text>
2317
+ <text x="20" y="52" font-size="54" fill="#000">∑</text>
2318
2318
  <rect x="50" y="6" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2319
2319
  <rect x="50" y="46" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2320
2320
  </svg>
2321
2321
  `),
2322
2322
  'sum-limits-lower-template-image': makeToolbarIconImage(`
2323
2323
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 90" fill="none">
2324
- <text x="30" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2324
+ <text x="30" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2325
2325
  <rect x="24" y="72" width="12" height="20" stroke="#6aa56a" stroke-width="2"/>
2326
2326
  </svg>
2327
2327
  `),
2328
2328
  'sum-right-lower-template-image': makeToolbarIconImage(`
2329
2329
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 90" fill="none">
2330
- <text x="26" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2330
+ <text x="26" y="58" font-size="64" text-anchor="middle" fill="#000">∑</text>
2331
2331
  <rect x="50" y="58" width="12" height="20" stroke="#6aa56a" stroke-width="2"/>
2332
2332
  </svg>
2333
2333
  `),
2334
2334
  'prod-limits-both-template-image': makeToolbarIconImage(`
2335
2335
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 96" fill="none">
2336
2336
  <rect x="27" y="2" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2337
- <text x="12" y="62" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2337
+ <text x="12" y="62" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2338
2338
  <rect x="27" y="74" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2339
2339
  </svg>
2340
2340
  `),
2341
2341
  'prod-limits-lower-template-image': makeToolbarIconImage(`
2342
2342
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 96" fill="none">
2343
- <text x="12" y="62" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2343
+ <text x="12" y="62" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2344
2344
  <rect x="27" y="74" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2345
2345
  </svg>
2346
2346
  `),
2347
2347
  'prod-right-lower-template-image': makeToolbarIconImage(`
2348
2348
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" fill="none">
2349
- <text x="12" y="54" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2349
+ <text x="12" y="54" font-size="58" font-family="Times New Roman" fill="#000">∏</text>
2350
2350
  <rect x="52" y="44" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2351
2351
  </svg>
2352
2352
  `),
2353
2353
  'prod-right-both-template-image': makeToolbarIconImage(`
2354
2354
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" fill="none">
2355
- <text x="10" y="54" font-size="58" fill="#000">∏</text>
2355
+ <text x="10" y="54" font-size="58" fill="#000">∏</text>
2356
2356
  <rect x="52" y="6" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2357
2357
  <rect x="52" y="44" width="10" height="18" stroke="#6aa56a" stroke-width="2"/>
2358
2358
  </svg>
@@ -2386,7 +2386,7 @@ const TOOLBAR_ICON_IMAGES = {
2386
2386
  `),
2387
2387
  'definite-integral-template-image': makeToolbarIconImage(`
2388
2388
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
2389
- <text x="0.95" y="14.05" font-size="14.2" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2389
+ <text x="0.95" y="14.05" font-size="14.2" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2390
2390
  <rect x="5.1" y="1.2" width="2.55" height="2.55" rx="0.42" fill="none" stroke="#4a5559" stroke-width="1.15"/>
2391
2391
  <rect x="2.1" y="13.15" width="2.55" height="2.55" rx="0.42" fill="none" stroke="#4a5559" stroke-width="1.15"/>
2392
2392
  <rect x="8.45" y="6.15" width="3.8" height="3.8" rx="0.58" fill="none" stroke="#4a5559" stroke-width="1.2"/>
@@ -2394,7 +2394,7 @@ const TOOLBAR_ICON_IMAGES = {
2394
2394
  `),
2395
2395
  'integral-with-differential-template-image': makeToolbarIconImage(`
2396
2396
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
2397
- <text x="0.95" y="13.85" font-size="14.6" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2397
+ <text x="0.95" y="13.85" font-size="14.6" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2398
2398
  <rect x="6.55" y="6.15" width="3.05" height="3.05" rx="0.48" fill="none" stroke="#4a5559" stroke-width="1.15"/>
2399
2399
  <text x="10.55" y="8.95" font-size="4.95" font-family="Arial, Helvetica, sans-serif" font-weight="700" fill="#37474f">d</text>
2400
2400
  <rect x="13.15" y="6.15" width="3.05" height="3.05" rx="0.48" fill="none" stroke="#4a5559" stroke-width="1.15"/>
@@ -2411,7 +2411,7 @@ const TOOLBAR_ICON_IMAGES = {
2411
2411
  `),
2412
2412
  'integral-with-differential': makeToolbarIconImage(`
2413
2413
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
2414
- <text x="0.95" y="13.85" font-size="14.6" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2414
+ <text x="0.95" y="13.85" font-size="14.6" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#37474f">∫</text>
2415
2415
  <rect x="6.55" y="6.15" width="3.05" height="3.05" rx="0.48" fill="none" stroke="#4a5559" stroke-width="1.15"/>
2416
2416
  <text x="10.55" y="8.95" font-size="4.95" font-family="Arial, Helvetica, sans-serif" font-weight="700" fill="#37474f">d</text>
2417
2417
  <rect x="13.15" y="6.15" width="3.05" height="3.05" rx="0.48" fill="none" stroke="#4a5559" stroke-width="1.15"/>
@@ -2419,7 +2419,7 @@ const TOOLBAR_ICON_IMAGES = {
2419
2419
  `),
2420
2420
  'integral-with-limits-differential': makeToolbarIconImage(`
2421
2421
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 60">
2422
- <text x="10" y="42" font-size="42" font-family="Times New Roman, serif" fill="#000">∫</text>
2422
+ <text x="10" y="42" font-size="42" font-family="Times New Roman, serif" fill="#000">∫</text>
2423
2423
  <rect x="34" y="2" width="8" height="18" fill="none" stroke="#2e8b57" stroke-width="2"/>
2424
2424
  <rect x="18" y="40" width="8" height="18" fill="none" stroke="#2e8b57" stroke-width="2"/>
2425
2425
  <rect x="48" y="22" width="12" height="22" fill="none" stroke="#2e8b57" stroke-width="2"/>
@@ -2429,14 +2429,14 @@ const TOOLBAR_ICON_IMAGES = {
2429
2429
  `),
2430
2430
  'integral-both-template-image': makeToolbarIconImage(`
2431
2431
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 70">
2432
- <text x="8" y="48" font-size="46" font-family="Times New Roman">∫</text>
2432
+ <text x="8" y="48" font-size="46" font-family="Times New Roman">∫</text>
2433
2433
  <rect x="34" y="4" width="8" height="18" fill="none" stroke="#2e8b57" stroke-width="2"/>
2434
2434
  <rect x="18" y="46" width="8" height="18" fill="none" stroke="#2e8b57" stroke-width="2"/>
2435
2435
  </svg>
2436
2436
  `),
2437
2437
  'integral-lower-template-image': makeToolbarIconImage(`
2438
2438
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 60">
2439
- <text x="8" y="42" font-size="44" font-family="Times New Roman">∫</text>
2439
+ <text x="8" y="42" font-size="44" font-family="Times New Roman">∫</text>
2440
2440
  <rect x="20" y="40" width="8" height="18" fill="none" stroke="#2e8b57" stroke-width="2"/>
2441
2441
  </svg>
2442
2442
  `),
@@ -2451,10 +2451,10 @@ const TOOLBAR_ICON_IMAGES = {
2451
2451
  `),
2452
2452
  'partial-derivative-template-image': makeToolbarIconImage(`
2453
2453
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 50">
2454
- <text x="4" y="18" font-size="18">∂</text>
2454
+ <text x="4" y="18" font-size="18">∂</text>
2455
2455
  <rect x="20" y="4" width="8" height="16" fill="none" stroke="#2e8b57" stroke-width="2"/>
2456
2456
  <line x1="2" y1="25" x2="34" y2="25" stroke="#000" stroke-width="2"/>
2457
- <text x="4" y="44" font-size="18">∂</text>
2457
+ <text x="4" y="44" font-size="18">∂</text>
2458
2458
  <rect x="20" y="30" width="8" height="16" fill="none" stroke="#2e8b57" stroke-width="2"/>
2459
2459
  </svg>
2460
2460
  `),
@@ -2462,7 +2462,7 @@ const TOOLBAR_ICON_IMAGES = {
2462
2462
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 70 40">
2463
2463
  <text x="18" y="15" font-size="18">lim</text>
2464
2464
  <rect x="4" y="22" width="8" height="14" fill="none" stroke="#2e8b57" stroke-width="2"/>
2465
- <text x="16" y="33" font-size="16">→∞</text>
2465
+ <text x="16" y="33" font-size="16">→∞</text>
2466
2466
  </svg>
2467
2467
  `),
2468
2468
  'limit-generic-template-image': makeToolbarIconImage(`
@@ -2545,7 +2545,7 @@ const TOOLBAR_ICON_IMAGES = {
2545
2545
  `),
2546
2546
  'double-integral-area-template-image': makeToolbarIconImage(`
2547
2547
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
2548
- <text x="0.7" y="13.55" font-size="11.1" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#263238">∫∫</text>
2548
+ <text x="0.7" y="13.55" font-size="11.1" font-family="Cambria Math, STIX Two Math, Times New Roman, serif" font-weight="700" fill="#263238">∫∫</text>
2549
2549
  <rect x="10.85" y="2.05" width="3.45" height="3.45" rx="0.55" fill="none" stroke="#465257" stroke-width="1.2"/>
2550
2550
  <rect x="8.05" y="12.05" width="3.1" height="3.1" rx="0.5" fill="none" stroke="#465257" stroke-width="1.2"/>
2551
2551
  <text x="10.95" y="9.75" font-size="5.45" font-family="Arial, Helvetica, sans-serif" font-weight="700" fill="#263238">dA</text>
@@ -2573,7 +2573,7 @@ const TOOLBAR_ICON_IMAGES = {
2573
2573
  `),
2574
2574
  'rtl-input-template-image': makeToolbarIconImage(`
2575
2575
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
2576
- <text x="10.9" y="8.6" text-anchor="middle" fill="#2f3b43" font-size="6.9" font-weight="700" font-family="Tahoma, Arial, sans-serif">س</text>
2576
+ <text x="10.9" y="8.6" text-anchor="middle" fill="#2f3b43" font-size="6.9" font-weight="700" font-family="Tahoma, Arial, sans-serif">س</text>
2577
2577
  <rect x="11.85" y="3.1" width="3.2" height="3.2" rx="0.45" fill="none" stroke="#2c8a43" stroke-width="1.1"/>
2578
2578
  <path d="M13.9 13.1H4.55M6.2 11.45L4.55 13.1L6.2 14.75" fill="none" stroke="#2c8a43" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
2579
2579
  </svg>
@@ -2631,97 +2631,97 @@ const TOOLBAR_ICON_IMAGES = {
2631
2631
  `),
2632
2632
  'less-than-not-equal-template-image': makeToolbarIconImage(`
2633
2633
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2634
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor" font-family="Cambria Math, STIX Two Math, Times New Roman">≨</text>
2634
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor" font-family="Cambria Math, STIX Two Math, Times New Roman">≨</text>
2635
2635
  </svg>
2636
2636
  `),
2637
2637
  'much-greater-than-template-image': makeToolbarIconImage(`
2638
2638
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2639
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≫</text>
2639
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≫</text>
2640
2640
  </svg>
2641
2641
  `),
2642
2642
  'succeeds-template-image': makeToolbarIconImage(`
2643
2643
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2644
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≻</text>
2644
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≻</text>
2645
2645
  </svg>
2646
2646
  `),
2647
2647
  'greater-than-not-equal-template-image': makeToolbarIconImage(`
2648
2648
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2649
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor" font-family="Cambria Math, STIX Two Math, Times New Roman">≩</text>
2649
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor" font-family="Cambria Math, STIX Two Math, Times New Roman">≩</text>
2650
2650
  </svg>
2651
2651
  `),
2652
2652
  'proportional-to-template-image': makeToolbarIconImage(`
2653
2653
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2654
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∝</text>
2654
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∝</text>
2655
2655
  </svg>
2656
2656
  `),
2657
2657
  'normal-subgroup-template-image': makeToolbarIconImage(`
2658
2658
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2659
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊲</text>
2659
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊲</text>
2660
2660
  </svg>
2661
2661
  `),
2662
2662
  'much-less-than-template-image': makeToolbarIconImage(`
2663
2663
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2664
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≪</text>
2664
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≪</text>
2665
2665
  </svg>
2666
2666
  `),
2667
2667
  'precedes-template-image': makeToolbarIconImage(`
2668
2668
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2669
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≺</text>
2669
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">≺</text>
2670
2670
  </svg>
2671
2671
  `),
2672
2672
  'contains-normal-subgroup-template-image': makeToolbarIconImage(`
2673
2673
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2674
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">â–·</text>
2674
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">▷</text>
2675
2675
  </svg>
2676
2676
  `),
2677
2677
  'not-element-of-template-image': makeToolbarIconImage(`
2678
2678
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2679
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∉</text>
2679
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∉</text>
2680
2680
  </svg>
2681
2681
  `),
2682
2682
  'not-contains-member-template-image': makeToolbarIconImage(`
2683
2683
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2684
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∌</text>
2684
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">∌</text>
2685
2685
  </svg>
2686
2686
  `),
2687
2687
  'subset-equal-template-image': makeToolbarIconImage(`
2688
2688
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2689
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊆</text>
2689
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊆</text>
2690
2690
  </svg>
2691
2691
  `),
2692
2692
  'superset-equal-template-image': makeToolbarIconImage(`
2693
2693
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2694
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊇</text>
2694
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊇</text>
2695
2695
  </svg>
2696
2696
  `),
2697
2697
  'square-subset-template-image': makeToolbarIconImage(`
2698
2698
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2699
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊏</text>
2699
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊏</text>
2700
2700
  </svg>
2701
2701
  `),
2702
2702
  'square-superset-template-image': makeToolbarIconImage(`
2703
2703
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2704
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊐</text>
2704
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊐</text>
2705
2705
  </svg>
2706
2706
  `),
2707
2707
  'square-subset-equal-template-image': makeToolbarIconImage(`
2708
2708
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2709
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊑</text>
2709
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊑</text>
2710
2710
  </svg>
2711
2711
  `),
2712
2712
  'square-superset-equal-template-image': makeToolbarIconImage(`
2713
2713
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2714
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊒</text>
2714
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊒</text>
2715
2715
  </svg>
2716
2716
  `),
2717
2717
  'square-cap-template-image': makeToolbarIconImage(`
2718
2718
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2719
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊓</text>
2719
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊓</text>
2720
2720
  </svg>
2721
2721
  `),
2722
2722
  'square-cup-template-image': makeToolbarIconImage(`
2723
2723
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2724
- <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊔</text>
2724
+ <text x="12" y="17" text-anchor="middle" font-size="20" fill="currentColor">⊔</text>
2725
2725
  </svg>
2726
2726
  `),
2727
2727
  'therefore-template-image': makeToolbarIconImage(`
@@ -2755,7 +2755,7 @@ const TOOLBAR_ICON_IMAGES = {
2755
2755
  fill="currentColor"
2756
2756
  font-family="Cambria Math, STIX Two Math, Times New Roman"
2757
2757
  >
2758
- ∡
2758
+
2759
2759
  </text>
2760
2760
  </svg>
2761
2761
  `),
@@ -2769,7 +2769,7 @@ const TOOLBAR_ICON_IMAGES = {
2769
2769
  fill="currentColor"
2770
2770
  font-family="Cambria Math, STIX Two Math, Times New Roman"
2771
2771
  >
2772
- ∢
2772
+
2773
2773
  </text>
2774
2774
  </svg>
2775
2775
  `),
@@ -2933,7 +2933,7 @@ const TOOLBAR_ICON_IMAGES = {
2933
2933
  'product-array-template-image': makeToolbarIconImage(`
2934
2934
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 88" fill="none">
2935
2935
  <rect x="34" y="6" width="10" height="16" stroke="#008000" stroke-width="1.5"/>
2936
- <text x="14" y="46" font-size="18" text-anchor="middle" fill="#000">×</text>
2936
+ <text x="14" y="46" font-size="18" text-anchor="middle" fill="#000">×</text>
2937
2937
  <rect x="34" y="38" width="10" height="16" stroke="#008000" stroke-width="1.5"/>
2938
2938
  <line x1="4" y1="66" x2="46" y2="66" stroke="#000" stroke-width="1.5"/>
2939
2939
  <rect x="34" y="74" width="10" height="16" stroke="#008000" stroke-width="1.5"/>
@@ -3130,12 +3130,12 @@ const TOOLBAR_ICON_IMAGES = {
3130
3130
  `),
3131
3131
  'arabic-indic-numerals-template-image': makeToolbarIconImage(`
3132
3132
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48">
3133
- <text x="4" y="36" font-family="Amiri, Noto Naskh Arabic, serif" font-size="38" fill="#000">٤٦</text>
3133
+ <text x="4" y="36" font-family="Amiri, Noto Naskh Arabic, serif" font-size="38" fill="#000">٤٦</text>
3134
3134
  </svg>
3135
3135
  `),
3136
3136
  'eastern-arabic-indic-numerals-template-image': makeToolbarIconImage(`
3137
3137
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48">
3138
- <text x="4" y="36" font-size="36" font-family="sans-serif" fill="#000">Û´Û¶</text>
3138
+ <text x="4" y="36" font-size="36" font-family="sans-serif" fill="#000">۴۶</text>
3139
3139
  </svg>
3140
3140
  `),
3141
3141
  };
@@ -3144,7 +3144,7 @@ function renderToolbarItemLabel(item, context = {}) {
3144
3144
  if (item.cls?.includes('arrow-picker-tool')) {
3145
3145
  return (
3146
3146
  <span className="cme-toolbar-chevron-indicator" aria-hidden="true">
3147
- ⏵
3147
+
3148
3148
  </span>
3149
3149
  );
3150
3150
  }
@@ -3627,9 +3627,9 @@ function renderToolbarItemLabel(item, context = {}) {
3627
3627
  const labelLength = String(item.label || '').length;
3628
3628
 
3629
3629
  if (isChemMode) {
3630
- const isChemScriptLabel = /^(?:[⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿⁱ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓᵢⱼₙ])+$/u.test(String(item.label || ''));
3630
+ const isChemScriptLabel = /^(?:[⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿⁱ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓᵢⱼₙ])+$/u.test(String(item.label || ''));
3631
3631
  classNames.push('cme-toolbar-glyph--chem');
3632
- const isChemChargeLabel = /^(?:[+-]|[²³][⁺⁻])$/u.test(String(item.label || ''));
3632
+ const isChemChargeLabel = /^(?:[+-]|[²³][⁺⁻])$/u.test(String(item.label || ''));
3633
3633
  if (itemClassName.includes('chem-element')) {
3634
3634
  classNames.push('cme-toolbar-glyph--chem-element');
3635
3635
  }
@@ -3688,152 +3688,152 @@ function renderToolbarItemLabel(item, context = {}) {
3688
3688
 
3689
3689
  function ArrowGlyphIcon({ type, size = 24 }) {
3690
3690
  const icons = {
3691
- '↗': (
3691
+ '': (
3692
3692
  <>
3693
3693
  <path d="M5 19L19 5" />
3694
3694
  <path d="M12 5H19V12" />
3695
3695
  </>
3696
3696
  ),
3697
- '↘': (
3697
+ '': (
3698
3698
  <>
3699
3699
  <path d="M5 5L19 19" />
3700
3700
  <path d="M12 19H19V12" />
3701
3701
  </>
3702
3702
  ),
3703
- '↖': (
3703
+ '': (
3704
3704
  <>
3705
3705
  <path d="M19 19L5 5" />
3706
3706
  <path d="M12 5H5V12" />
3707
3707
  </>
3708
3708
  ),
3709
- '↙': (
3709
+ '': (
3710
3710
  <>
3711
3711
  <path d="M19 5L5 19" />
3712
3712
  <path d="M12 19H5V12" />
3713
3713
  </>
3714
3714
  ),
3715
- '←': (
3715
+ '': (
3716
3716
  <>
3717
3717
  <path d="M20 12H6" />
3718
3718
  <path d="M11 7L6 12L11 17" />
3719
3719
  </>
3720
3720
  ),
3721
- '→': (
3721
+ '': (
3722
3722
  <>
3723
3723
  <path d="M4 12H18" />
3724
3724
  <path d="M13 7L18 12L13 17" />
3725
3725
  </>
3726
3726
  ),
3727
- '↑': (
3727
+ '': (
3728
3728
  <>
3729
3729
  <path d="M12 20V6" />
3730
3730
  <path d="M7 11L12 6L17 11" />
3731
3731
  </>
3732
3732
  ),
3733
- '↓': (
3733
+ '': (
3734
3734
  <>
3735
3735
  <path d="M12 4V18" />
3736
3736
  <path d="M7 13L12 18L17 13" />
3737
3737
  </>
3738
3738
  ),
3739
- '↔': (
3739
+ '': (
3740
3740
  <>
3741
3741
  <path d="M4 12H20" />
3742
3742
  <path d="M9 7L4 12L9 17" />
3743
3743
  <path d="M15 7L20 12L15 17" />
3744
3744
  </>
3745
3745
  ),
3746
- '↕': (
3746
+ '': (
3747
3747
  <>
3748
3748
  <path d="M12 4V20" />
3749
3749
  <path d="M7 9L12 4L17 9" />
3750
3750
  <path d="M7 15L12 20L17 15" />
3751
3751
  </>
3752
3752
  ),
3753
- '⇐': (
3753
+ '': (
3754
3754
  <>
3755
3755
  <path d="M20 10H6M20 14H6" />
3756
3756
  <path d="M11 6L6 12L11 18" />
3757
3757
  </>
3758
3758
  ),
3759
- '⇒': (
3759
+ '': (
3760
3760
  <>
3761
3761
  <path d="M4 10H18M4 14H18" />
3762
3762
  <path d="M13 6L18 12L13 18" />
3763
3763
  </>
3764
3764
  ),
3765
- '⇑': (
3765
+ '': (
3766
3766
  <>
3767
3767
  <path d="M10 20V6M14 20V6" />
3768
3768
  <path d="M6 11L12 5L18 11" />
3769
3769
  </>
3770
3770
  ),
3771
- '⇓': (
3771
+ '': (
3772
3772
  <>
3773
3773
  <path d="M10 4V18M14 4V18" />
3774
3774
  <path d="M6 13L12 19L18 13" />
3775
3775
  </>
3776
3776
  ),
3777
- '⇔': (
3777
+ '': (
3778
3778
  <>
3779
3779
  <path d="M4 10H20M4 14H20" />
3780
3780
  <path d="M9 6L4 12L9 18" />
3781
3781
  <path d="M15 6L20 12L15 18" />
3782
3782
  </>
3783
3783
  ),
3784
- '⇕': (
3784
+ '': (
3785
3785
  <>
3786
3786
  <path d="M10 4V20M14 4V20" />
3787
3787
  <path d="M6 9L12 3L18 9" />
3788
3788
  <path d="M6 15L12 21L18 15" />
3789
3789
  </>
3790
3790
  ),
3791
- '⟵': (
3791
+ '': (
3792
3792
  <>
3793
3793
  <path d="M21 12H5.5" />
3794
3794
  <path d="M10.8 7L5.5 12L10.8 17" />
3795
3795
  </>
3796
3796
  ),
3797
- '⟶': (
3797
+ '': (
3798
3798
  <>
3799
3799
  <path d="M3 12H18.5" />
3800
3800
  <path d="M13.2 7L18.5 12L13.2 17" />
3801
3801
  </>
3802
3802
  ),
3803
- '⟷': (
3803
+ '': (
3804
3804
  <>
3805
3805
  <path d="M3 12H21" />
3806
3806
  <path d="M8 7L3 12L8 17" />
3807
3807
  <path d="M16 7L21 12L16 17" />
3808
3808
  </>
3809
3809
  ),
3810
- '⟸': (
3810
+ '': (
3811
3811
  <>
3812
3812
  <path d="M21 10H5.5M21 14H5.5" />
3813
3813
  <path d="M10.8 6L5.5 12L10.8 18" />
3814
3814
  </>
3815
3815
  ),
3816
- '⟹': (
3816
+ '': (
3817
3817
  <>
3818
3818
  <path d="M3 10H18.5M3 14H18.5" />
3819
3819
  <path d="M13.2 6L18.5 12L13.2 18" />
3820
3820
  </>
3821
3821
  ),
3822
- '⟺': (
3822
+ '': (
3823
3823
  <>
3824
3824
  <path d="M3 10H21M3 14H21" />
3825
3825
  <path d="M8 6L3 12L8 18" />
3826
3826
  <path d="M16 6L21 12L16 18" />
3827
3827
  </>
3828
3828
  ),
3829
- '↤': (
3829
+ '': (
3830
3830
  <>
3831
3831
  <path d="M20 12H8" />
3832
3832
  <path d="M8 7L3 12L8 17" />
3833
3833
  <path d="M20 6V18" />
3834
3834
  </>
3835
3835
  ),
3836
- '↦': (
3836
+ '': (
3837
3837
  <>
3838
3838
  <path d="M4 12H16" />
3839
3839
  <path d="M16 7L21 12L16 17" />
@@ -4327,9 +4327,9 @@ function makeToolbarPlugin(onOpenPopup) {
4327
4327
  };
4328
4328
  }
4329
4329
 
4330
- /* ══════════════════════════════════════════════════════════
4331
- MathChemPopup — same as CustomMathEditor popup
4332
- ══════════════════════════════════════════════════════════ */
4330
+ /* ══════════════════════════════════════════════════════════
4331
+ MathChemPopup same as CustomMathEditor popup
4332
+ ══════════════════════════════════════════════════════════ */
4333
4333
  function MatrixHoverGrid({ matrixType, x, y, onSelect, onMouseEnter, onMouseLeave }) {
4334
4334
  const [hoverGrid, setHoverGrid] = useState({ r: 2, c: 2 });
4335
4335
  const labelMap = {
@@ -4369,7 +4369,7 @@ function MatrixHoverGrid({ matrixType, x, y, onSelect, onMouseEnter, onMouseLeav
4369
4369
  >
4370
4370
  <div className="cme-matrix-hover-title-wrap">
4371
4371
  <div className="cme-matrix-hover-title">{labelMap[matrixType] || 'Matrix'}</div>
4372
- <div className="cme-matrix-hover-subtitle">{hoverGrid.r} × {hoverGrid.c}</div>
4372
+ <div className="cme-matrix-hover-subtitle">{hoverGrid.r} × {hoverGrid.c}</div>
4373
4373
  </div>
4374
4374
  <div className="cme-matrix-hover-grid">
4375
4375
  {Array.from({ length: 6 }).map((_, rIndex) => (
@@ -4430,9 +4430,9 @@ function MatrixHoverGrid({ matrixType, x, y, onSelect, onMouseEnter, onMouseLeav
4430
4430
  );
4431
4431
  }
4432
4432
 
4433
- /* ══════════════════════════════════════════════════════════
4434
- MathChemPopup — same as CustomMathEditor popup
4435
- ══════════════════════════════════════════════════════════ */
4433
+ /* ══════════════════════════════════════════════════════════
4434
+ MathChemPopup same as CustomMathEditor popup
4435
+ ══════════════════════════════════════════════════════════ */
4436
4436
  function MathChemPopup({ mode, onInsert, onClose, initialLatex, initialDirection = 'ltr', isEditing }) {
4437
4437
  const popupMfRef = useRef(null);
4438
4438
  const popupRef = useRef(null);
@@ -4937,7 +4937,7 @@ function MathChemPopup({ mode, onInsert, onClose, initialLatex, initialDirection
4937
4937
 
4938
4938
 
4939
4939
 
4940
- /* ── Auto-scroll caret into view ── */
4940
+ /* ── Auto-scroll caret into view ── */
4941
4941
  useEffect(() => {
4942
4942
  const popupMf = popupMfRef.current;
4943
4943
  if (!popupMf) return;
@@ -6020,7 +6020,7 @@ function MathChemPopup({ mode, onInsert, onClose, initialLatex, initialDirection
6020
6020
  setShowColorPicker(null);
6021
6021
  }}
6022
6022
  >
6023
- ×
6023
+ ×
6024
6024
  </button>
6025
6025
  </div>
6026
6026
 
@@ -6036,11 +6036,11 @@ function MathChemPopup({ mode, onInsert, onClose, initialLatex, initialDirection
6036
6036
  );
6037
6037
  }
6038
6038
 
6039
- /* ══════════════════════════════════════════════════════════
6040
- LaTeX → Unicode plain-text converter
6039
+ /* ══════════════════════════════════════════════════════════
6040
+ LaTeX Unicode plain-text converter
6041
6041
  Converts LaTeX notation to readable Unicode so CKEditor
6042
6042
  treats each character individually (backspace works per-char)
6043
- ══════════════════════════════════════════════════════════ */
6043
+ ══════════════════════════════════════════════════════════ */
6044
6044
  function latexToPlainText(latex) {
6045
6045
  let text = latex;
6046
6046
 
@@ -6051,35 +6051,35 @@ function latexToPlainText(latex) {
6051
6051
  // Sort replacements longest-first to avoid partial matches
6052
6052
  const replacements = [
6053
6053
  // Greek lowercase
6054
- ['\\varepsilon', 'ε'], ['\\varphi', 'φ'],
6055
- ['\\alpha', 'α'], ['\\beta', 'β'], ['\\gamma', 'γ'], ['\\delta', 'δ'],
6056
- ['\\epsilon', 'ε'], ['\\zeta', 'ζ'], ['\\eta', 'η'], ['\\theta', 'θ'],
6057
- ['\\iota', 'ι'], ['\\kappa', 'κ'], ['\\lambda', 'λ'], ['\\mu', 'μ'],
6058
- ['\\nu', 'ν'], ['\\xi', 'ξ'], ['\\pi', 'π'], ['\\rho', 'ρ'],
6059
- ['\\sigma', 'σ'], ['\\tau', 'τ'], ['\\upsilon', 'υ'], ['\\phi', 'φ'],
6060
- ['\\chi', 'χ'], ['\\psi', 'ψ'], ['\\omega', 'ω'],
6054
+ ['\\varepsilon', 'ε'], ['\\varphi', 'φ'],
6055
+ ['\\alpha', 'α'], ['\\beta', 'β'], ['\\gamma', 'γ'], ['\\delta', 'δ'],
6056
+ ['\\epsilon', 'ε'], ['\\zeta', 'ζ'], ['\\eta', 'η'], ['\\theta', 'θ'],
6057
+ ['\\iota', 'ι'], ['\\kappa', 'κ'], ['\\lambda', 'λ'], ['\\mu', 'μ'],
6058
+ ['\\nu', 'ν'], ['\\xi', 'ξ'], ['\\pi', 'π'], ['\\rho', 'ρ'],
6059
+ ['\\sigma', 'σ'], ['\\tau', 'τ'], ['\\upsilon', 'υ'], ['\\phi', 'φ'],
6060
+ ['\\chi', 'χ'], ['\\psi', 'ψ'], ['\\omega', 'ω'],
6061
6061
  // Greek uppercase
6062
- ['\\Gamma', 'Γ'], ['\\Delta', 'Δ'], ['\\Theta', 'Θ'], ['\\Lambda', 'Λ'],
6063
- ['\\Xi', 'Ξ'], ['\\Pi', 'Π'], ['\\Sigma', 'Σ'], ['\\Upsilon', 'Υ'],
6064
- ['\\Phi', 'Φ'], ['\\Psi', 'Ψ'], ['\\Omega', 'Ω'],
6062
+ ['\\Gamma', 'Γ'], ['\\Delta', 'Δ'], ['\\Theta', 'Θ'], ['\\Lambda', 'Λ'],
6063
+ ['\\Xi', 'Ξ'], ['\\Pi', 'Π'], ['\\Sigma', 'Σ'], ['\\Upsilon', 'Υ'],
6064
+ ['\\Phi', 'Φ'], ['\\Psi', 'Ψ'], ['\\Omega', 'Ω'],
6065
6065
  // Operators
6066
- ['\\pm', '±'], ['\\mp', '∓'], ['\\times', '×'], ['\\div', '÷'],
6066
+ ['\\pm', '±'], ['\\mp', ''], ['\\times', '×'], ['\\div', '÷'],
6067
6067
  ['\\backslash', '\\'],
6068
- ['\\cdot', '·'], ['\\neq', '≠'], ['\\leq', '≤'], ['\\geq', '≥'],
6069
- ['\\approx', '≈'], ['\\equiv', '≡'], ['\\infty', '∞'],
6070
- ['\\sum', '∑'], ['\\prod', '∏'], ['\\int', '∫'], ['\\oint', '∮'],
6071
- ['\\iint', '∬'], ['\\iiint', '∭'], ['\\oiint', '∯'],
6072
- ['\\partial', '∂'], ['\\nabla', '∇'],
6073
- ['\\in', '∈'], ['\\notin', '∉'],
6074
- ['\\subset', '⊂'], ['\\subseteq', '⊆'], ['\\supset', '⊃'], ['\\supseteq', '⊇'],
6075
- ['\\cup', '∪'], ['\\cap', '∩'], ['\\emptyset', '∅'], ['\\setminus', '﹨'],
6076
- ['\\forall', '∀'], ['\\exists', '∃'], ['\\neg', '¬'],
6077
- ['\\land', '∧'], ['\\lor', '∨'],
6068
+ ['\\cdot', '·'], ['\\neq', ''], ['\\leq', ''], ['\\geq', ''],
6069
+ ['\\approx', ''], ['\\equiv', ''], ['\\infty', ''],
6070
+ ['\\sum', ''], ['\\prod', ''], ['\\int', ''], ['\\oint', ''],
6071
+ ['\\iint', ''], ['\\iiint', ''], ['\\oiint', ''],
6072
+ ['\\partial', ''], ['\\nabla', ''],
6073
+ ['\\in', ''], ['\\notin', ''],
6074
+ ['\\subset', ''], ['\\subseteq', ''], ['\\supset', ''], ['\\supseteq', ''],
6075
+ ['\\cup', ''], ['\\cap', ''], ['\\emptyset', ''], ['\\setminus', ''],
6076
+ ['\\forall', ''], ['\\exists', ''], ['\\neg', '¬'],
6077
+ ['\\land', ''], ['\\lor', ''],
6078
6078
  // Arrows
6079
- ['\\leftrightarrow', '↔'], ['\\Leftrightarrow', '⇔'],
6080
- ['\\rightarrow', '→'], ['\\leftarrow', '←'],
6081
- ['\\Rightarrow', '⇒'], ['\\Leftarrow', '⇐'],
6082
- ['\\uparrow', '↑'], ['\\downarrow', '↓'],
6079
+ ['\\leftrightarrow', ''], ['\\Leftrightarrow', ''],
6080
+ ['\\rightarrow', ''], ['\\leftarrow', ''],
6081
+ ['\\Rightarrow', ''], ['\\Leftarrow', ''],
6082
+ ['\\uparrow', ''], ['\\downarrow', ''],
6083
6083
  // Trig / log
6084
6084
  ['\\sin', 'sin'], ['\\cos', 'cos'], ['\\tan', 'tan'],
6085
6085
  ['\\cot', 'cot'], ['\\sec', 'sec'], ['\\csc', 'csc'],
@@ -6088,7 +6088,7 @@ function latexToPlainText(latex) {
6088
6088
  ...BLACKBOARD_BOLD_PICKER_ITEMS.map(({ insert, label }) => [insert, label]),
6089
6089
  ...FRAKTUR_SCRIPT_PICKER_ITEMS.map(({ insert, label }) => [insert, label]),
6090
6090
  ...HEBREW_SYMBOL_PICKER_ITEMS.map(({ insert, label }) => [insert, label]),
6091
- ['\\wp', '℘'],
6091
+ ['\\wp', ''],
6092
6092
  // Delimiters
6093
6093
  ['\\left(', '('], ['\\right)', ')'],
6094
6094
  ['\\left[', '['], ['\\right]', ']'],
@@ -6097,7 +6097,7 @@ function latexToPlainText(latex) {
6097
6097
  // Spacing
6098
6098
  ['\\,', ' '], ['\\;', ' '], ['\\quad', ' '], ['\\qquad', ' '],
6099
6099
  // Misc
6100
- ['\\prime', '′'], ['\\vdots', '⋮'], ['\\cdots', '⋯'], ['\\ddots', '⋱'], ['\\ldots', '…'],
6100
+ ['\\prime', ''], ['\\vdots', ''], ['\\cdots', ''], ['\\ddots', ''], ['\\ldots', ''],
6101
6101
  ];
6102
6102
 
6103
6103
  for (const [cmd, char] of replacements) {
@@ -6105,45 +6105,45 @@ function latexToPlainText(latex) {
6105
6105
  text = text.replace(new RegExp(escaped, 'g'), char);
6106
6106
  }
6107
6107
 
6108
- // \frac{a}{b} → a/b
6108
+ // \frac{a}{b} a/b
6109
6109
  text = text.replace(/\\frac\{([^}]*)\}\{([^}]*)\}/g, '$1/$2');
6110
6110
 
6111
- // \sqrt[n]{x} → ⁿ√(x) and \sqrt{x} → √(x)
6112
- text = text.replace(/\\sqrt\[([^\]]*)\]\{([^}]*)\}/g, '$1√($2)');
6113
- text = text.replace(/\\sqrt\{([^}]*)\}/g, '√($1)');
6111
+ // \sqrt[n]{x} ⁿ√(x) and \sqrt{x} (x)
6112
+ text = text.replace(/\\sqrt\[([^\]]*)\]\{([^}]*)\}/g, '$1($2)');
6113
+ text = text.replace(/\\sqrt\{([^}]*)\}/g, '($1)');
6114
6114
 
6115
- // \vec{x} → x⃗ \hat{x} → x̂ \bar{x} → x̄ \dot{x} → ẋ \ddot{x} → ẍ
6115
+ // \vec{x} x \hat{x} x̂ \bar{x} x̄ \dot{x} \ddot{x}
6116
6116
  text = text.replace(/\\vec\{([^}]*)\}/g, '$1\u20D7');
6117
6117
  text = text.replace(/\\hat\{([^}]*)\}/g, '$1\u0302');
6118
6118
  text = text.replace(/\\bar\{([^}]*)\}/g, '$1\u0304');
6119
6119
  text = text.replace(/\\ddot\{([^}]*)\}/g, '$1\u0308');
6120
6120
  text = text.replace(/\\dot\{([^}]*)\}/g, '$1\u0307');
6121
6121
 
6122
- // \text{...} → content
6122
+ // \text{...} content
6123
6123
  text = text.replace(/\\text\{([^}]*)\}/g, '$1');
6124
6124
 
6125
- // \begin{pmatrix}...\end{pmatrix} → [a, b; c, d]
6125
+ // \begin{pmatrix}...\end{pmatrix} [a, b; c, d]
6126
6126
  text = text.replace(/\\begin\{pmatrix\}([\s\S]*?)\\end\{pmatrix\}/g, (_, c) =>
6127
6127
  '[' + c.replace(/\\\\/g, '; ').replace(/&/g, ', ').trim() + ']'
6128
6128
  );
6129
6129
 
6130
6130
  // Superscripts ^{content}
6131
- const supMap = { '0': '⁰', '1': '¹', '2': '²', '3': '³', '4': '⁴', '5': '⁵', '6': '⁶', '7': '⁷', '8': '⁸', '9': '⁹', '+': '⁺', '-': '⁻', '=': '⁼', '(': '⁽', ')': '⁾', 'n': 'ⁿ', 'i': 'ⁱ' };
6131
+ const supMap = { '0': '', '1': '¹', '2': '²', '3': '³', '4': '', '5': '', '6': '', '7': '', '8': '', '9': '', '+': '', '-': '', '=': '', '(': '', ')': '', 'n': '', 'i': '' };
6132
6132
  text = text.replace(/\^\{([^}]*)\}/g, (_, content) =>
6133
6133
  content.split('').map(c => supMap[c] || c).join('')
6134
6134
  );
6135
6135
  text = text.replace(/\^([a-zA-Z0-9])/g, (_, c) => supMap[c] || c);
6136
6136
 
6137
6137
  // Subscripts _{content}
6138
- const subMap = { '0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉', '+': '₊', '-': '₋', '=': '₌', '(': '₍', ')': '₎', 'a': 'ₐ', 'e': 'ₑ', 'o': 'ₒ', 'x': 'ₓ', 'i': 'ᵢ', 'j': 'ⱼ', 'n': 'ₙ' };
6138
+ const subMap = { '0': '', '1': '', '2': '', '3': '', '4': '', '5': '', '6': '', '7': '', '8': '', '9': '', '+': '', '-': '', '=': '', '(': '', ')': '', 'a': '', 'e': '', 'o': '', 'x': '', 'i': '', 'j': '', 'n': '' };
6139
6139
  text = text.replace(/_\{([^}]*)\}/g, (_, content) =>
6140
6140
  content.split('').map(c => subMap[c] || c).join('')
6141
6141
  );
6142
6142
  text = text.replace(/_([a-zA-Z0-9])/g, (_, c) => subMap[c] || c);
6143
6143
 
6144
6144
  // Chem arrows
6145
- text = text.replace(/->/g, '→');
6146
- text = text.replace(/<=>/g, '⇌');
6145
+ text = text.replace(/->/g, '');
6146
+ text = text.replace(/<=>/g, '');
6147
6147
 
6148
6148
  // Clean up remaining LaTeX
6149
6149
  text = text.replace(/\\[a-zA-Z]+/g, ''); // remove unknown commands
@@ -6154,9 +6154,9 @@ function latexToPlainText(latex) {
6154
6154
  return text.trim();
6155
6155
  }
6156
6156
 
6157
- /* ══════════════════════════════════════════════════════════
6157
+ /* ══════════════════════════════════════════════════════════
6158
6158
  Main CkEditor component
6159
- ══════════════════════════════════════════════════════════ */
6159
+ ══════════════════════════════════════════════════════════ */
6160
6160
  function CkEditor({ value, onChange, className = '' }) {
6161
6161
  const editorRef = useRef(null);
6162
6162
  const popupOpenRef = useRef(false);
@@ -6210,7 +6210,7 @@ function CkEditor({ value, onChange, className = '' }) {
6210
6210
  : null;
6211
6211
 
6212
6212
  if (targetModel) {
6213
- // ── EDIT MODE: replace widget so the math-field re-renders with new latex ──
6213
+ // ── EDIT MODE: replace widget so the math-field re-renders with new latex ──
6214
6214
  editor.model.change((writer) => {
6215
6215
  const mathElement = writer.createElement('mathInline', mathAttributes);
6216
6216
  const position = writer.createPositionBefore(targetModel);
@@ -6390,4 +6390,3 @@ function CkEditor({ value, onChange, className = '' }) {
6390
6390
 
6391
6391
  export default CkEditor;
6392
6392
 
6393
-