@barocss/math-editor 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ADAPTERS.md +25 -14
- package/API-JAVASCRIPT.md +1 -1
- package/API-REACT.md +5 -1
- package/API-SESSION.md +168 -6
- package/API-SOLID.md +1 -1
- package/API-SVELTE.md +1 -1
- package/API-VUE.md +1 -1
- package/API-WEB-COMPONENT.md +1 -1
- package/CHANGELOG.md +45 -0
- package/EMBEDDING.md +4 -0
- package/IMPLEMENTATION.md +27 -2
- package/JSON-MODEL.md +1 -0
- package/LATEX-GUIDE.md +8 -1
- package/LATEX-SCOPE.md +2 -2
- package/LICENSE +1 -3
- package/README.md +145 -37
- package/ROADMAP.md +93 -11
- package/STYLING.md +157 -0
- package/SUPPORT.md +24 -12
- package/VALIDATION.md +113 -4
- package/dist/core.d.ts +5 -1
- package/dist/core.js +5 -1
- package/dist/document-codec.d.ts +0 -1
- package/dist/document-codec.js +0 -1
- package/dist/dom/caret-geometry.d.ts +3 -0
- package/dist/dom/caret-geometry.js +41 -0
- package/dist/dom/elements.d.ts +1 -2
- package/dist/dom/elements.js +2 -3
- package/dist/dom/latex-panel.d.ts +10 -0
- package/dist/dom/latex-panel.js +59 -0
- package/dist/dom/matrix-selection.d.ts +11 -0
- package/dist/dom/matrix-selection.js +30 -0
- package/dist/dom/menu-position.d.ts +14 -2
- package/dist/dom/menu-position.js +84 -15
- package/dist/dom/presentation-controls.d.ts +4 -0
- package/dist/dom/presentation-controls.js +56 -0
- package/dist/dom/quick-panel.d.ts +12 -0
- package/dist/dom/quick-panel.js +102 -0
- package/dist/dom/selection.d.ts +29 -0
- package/dist/dom/selection.js +53 -0
- package/dist/dom/symbol-panel.d.ts +9 -0
- package/dist/dom/symbol-panel.js +146 -0
- package/dist/dom/theme.d.ts +6 -0
- package/dist/dom/theme.js +68 -0
- package/dist/dom/toolbar-catalog.d.ts +10 -0
- package/dist/dom/toolbar-catalog.js +35 -0
- package/dist/dom/toolbar.d.ts +13 -2
- package/dist/dom/toolbar.js +295 -28
- package/dist/dom.d.ts +7 -1
- package/dist/dom.js +510 -128
- package/dist/editor-labels.d.ts +0 -1
- package/dist/editor-labels.js +0 -1
- package/dist/enter-policy.d.ts +0 -1
- package/dist/enter-policy.js +0 -1
- package/dist/fences.d.ts +0 -1
- package/dist/fences.js +0 -1
- package/dist/i18n.d.ts +0 -1
- package/dist/i18n.js +0 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +4 -1
- package/dist/latex-insertion.d.ts +12 -0
- package/dist/latex-insertion.js +26 -0
- package/dist/latex-paste-panel.d.ts +3 -0
- package/dist/latex-paste-panel.js +18 -0
- package/dist/latex.d.ts +0 -1
- package/dist/latex.js +0 -1
- package/dist/lines.d.ts +0 -1
- package/dist/lines.js +0 -1
- package/dist/locales/en.js +27 -1
- package/dist/locales/en.json +27 -1
- package/dist/locales/ko.js +27 -1
- package/dist/locales/ko.json +27 -1
- package/dist/math-editor-toolbar.d.ts +4 -2
- package/dist/math-editor-toolbar.js +3 -4
- package/dist/math-editor.d.ts +5 -2
- package/dist/math-editor.js +285 -46
- package/dist/matrix-range.d.ts +40 -0
- package/dist/matrix-range.js +242 -0
- package/dist/matrix.d.ts +0 -1
- package/dist/matrix.js +0 -1
- package/dist/model.d.ts +0 -1
- package/dist/model.js +0 -1
- package/dist/outputs.d.ts +0 -1
- package/dist/outputs.js +0 -1
- package/dist/preferences.d.ts +24 -0
- package/dist/preferences.js +66 -0
- package/dist/presentation-controls.d.ts +10 -0
- package/dist/presentation-controls.js +10 -0
- package/dist/presentation.d.ts +13 -0
- package/dist/presentation.js +86 -0
- package/dist/quick-panel.d.ts +2 -0
- package/dist/quick-panel.js +17 -0
- package/dist/range.d.ts +2 -1
- package/dist/range.js +11 -1
- package/dist/react.d.ts +0 -1
- package/dist/react.js +0 -1
- package/dist/session.d.ts +31 -2
- package/dist/session.js +108 -7
- package/dist/solid.d.ts +0 -1
- package/dist/solid.js +0 -1
- package/dist/suggestions.d.ts +4 -1
- package/dist/suggestions.js +100 -12
- package/dist/svelte.d.ts +0 -1
- package/dist/svelte.js +0 -1
- package/dist/symbol-browser.d.ts +0 -1
- package/dist/symbol-browser.js +0 -1
- package/dist/symbols.d.ts +0 -1
- package/dist/symbols.js +0 -1
- package/dist/templates.d.ts +0 -1
- package/dist/templates.js +0 -1
- package/dist/tokens.d.ts +0 -1
- package/dist/tokens.js +0 -1
- package/dist/vertical-navigation.d.ts +15 -0
- package/dist/vertical-navigation.js +145 -0
- package/dist/vue.d.ts +0 -1
- package/dist/vue.js +0 -1
- package/dist/web-component.d.ts +0 -1
- package/dist/web-component.js +0 -1
- package/package.json +1 -1
- package/src/style.css +254 -129
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js.map +0 -1
- package/dist/document-codec.d.ts.map +0 -1
- package/dist/document-codec.js.map +0 -1
- package/dist/dom/elements.d.ts.map +0 -1
- package/dist/dom/elements.js.map +0 -1
- package/dist/dom/menu-position.d.ts.map +0 -1
- package/dist/dom/menu-position.js.map +0 -1
- package/dist/dom/toolbar.d.ts.map +0 -1
- package/dist/dom/toolbar.js.map +0 -1
- package/dist/dom.d.ts.map +0 -1
- package/dist/dom.js.map +0 -1
- package/dist/editor-labels.d.ts.map +0 -1
- package/dist/editor-labels.js.map +0 -1
- package/dist/enter-policy.d.ts.map +0 -1
- package/dist/enter-policy.js.map +0 -1
- package/dist/fences.d.ts.map +0 -1
- package/dist/fences.js.map +0 -1
- package/dist/i18n.d.ts.map +0 -1
- package/dist/i18n.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/latex.d.ts.map +0 -1
- package/dist/latex.js.map +0 -1
- package/dist/lines.d.ts.map +0 -1
- package/dist/lines.js.map +0 -1
- package/dist/math-editor-toolbar.d.ts.map +0 -1
- package/dist/math-editor-toolbar.js.map +0 -1
- package/dist/math-editor.d.ts.map +0 -1
- package/dist/math-editor.js.map +0 -1
- package/dist/matrix.d.ts.map +0 -1
- package/dist/matrix.js.map +0 -1
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js.map +0 -1
- package/dist/outputs.d.ts.map +0 -1
- package/dist/outputs.js.map +0 -1
- package/dist/range.d.ts.map +0 -1
- package/dist/range.js.map +0 -1
- package/dist/react.d.ts.map +0 -1
- package/dist/react.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/solid.d.ts.map +0 -1
- package/dist/solid.js.map +0 -1
- package/dist/suggestions.d.ts.map +0 -1
- package/dist/suggestions.js.map +0 -1
- package/dist/svelte.d.ts.map +0 -1
- package/dist/svelte.js.map +0 -1
- package/dist/symbol-browser.d.ts.map +0 -1
- package/dist/symbol-browser.js.map +0 -1
- package/dist/symbols.d.ts.map +0 -1
- package/dist/symbols.js.map +0 -1
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js.map +0 -1
- package/dist/tokens.d.ts.map +0 -1
- package/dist/tokens.js.map +0 -1
- package/dist/vue.d.ts.map +0 -1
- package/dist/vue.js.map +0 -1
- package/dist/web-component.d.ts.map +0 -1
- package/dist/web-component.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,34 +1,72 @@
|
|
|
1
1
|
# @barocss/math-editor
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
An embeddable math editor for writing LaTeX-compatible formulas. Edit expressions in place, select existing math, and wrap it in fractions, roots, powers or delimiters. The package includes a framework-independent model, a rich React editor, and a native DOM editor with framework adapters.
|
|
4
4
|
|
|
5
|
+
**Release:** core **0.4.0**, with nine host editor plugins at **0.1.0**. This editor does not calculate, solve equations or parse arbitrary LaTeX.
|
|
5
6
|
|
|
6
|
-
##
|
|
7
|
+
## Editing additions in 0.4.0
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
The native renderer now edits one lexical token at a time, matching the main React field's role colors. New utilities provide **Paste as LaTeX** (Alt+Shift+V), **Recent & favorites** for symbols/templates, and contextual **bracket, fraction-size and limit-placement settings**. These utilities are included in 0.4.0. See [editing utilities and API](API-SESSION.md#editing-utilities--workspace).
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Packages
|
|
11
12
|
|
|
13
|
+
Choose the core package for a standalone math field. Choose one additional host package to embed that field in an existing editor. The host packages share the same math model, parser, suggestions and toolbar. Each requires the core and its own host SDK as peer dependencies.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
| Package | Purpose | Formula placement | Release status |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `@barocss/math-editor` | Math model, LaTeX import/export, editor, toolbar and framework adapters | Standalone, inline or multiline | 0.4.0; MIT |
|
|
18
|
+
| `@barocss/math-editor-tiptap` | Tiptap node extension | Inline and block | 0.1.0; MIT |
|
|
19
|
+
| `@barocss/math-editor-prosemirror` | ProseMirror schema, commands and node views | Inline and block | 0.1.0; MIT |
|
|
20
|
+
| `@barocss/math-editor-lexical` | Lexical math node and registration | Inline and block | 0.1.0; MIT |
|
|
21
|
+
| `@barocss/math-editor-editorjs` | Editor.js math Tool | Block | 0.1.0; MIT |
|
|
22
|
+
| `@barocss/math-editor-tinymce` | TinyMCE plugin with in-place or panel editing | Inline and block | 0.1.0; MIT |
|
|
23
|
+
| `@barocss/math-editor-ckeditor` | CKEditor 5 model objects and widgets | Inline and block | 0.1.0; MIT |
|
|
24
|
+
| `@barocss/math-editor-quill` | Quill math embeds and registration | Inline and block | 0.1.0; MIT |
|
|
25
|
+
| `@barocss/math-editor-slate` | Slate void elements and React rendering | Inline and block | 0.1.0; MIT |
|
|
26
|
+
| `@barocss/math-editor-gutenberg` | WordPress Gutenberg math block | Block | 0.1.0; MIT |
|
|
27
|
+
| `@barocss/math-editor-integrations` | Shared implementation used to build the nine host packages | Internal development | Private; not an install target |
|
|
14
28
|
|
|
15
|
-
|
|
29
|
+
The host plugins require `@barocss/math-editor@^0.4.0`. The core and all nine host packages use the MIT license, with copyright attributed to barocss.com. Each package includes its own LICENSE file. Host SDKs retain their own licenses.
|
|
16
30
|
|
|
17
|
-
|
|
31
|
+
Each host package exports its adapter, `/shared` helpers and `/style.css`. Load the core stylesheet as well. Gutenberg also exports `/data` for its stored-data codec. Install only the host package you use; there is no public all-host bundle. Formula placement, keyboard entry, history and clipboard behavior depend on the host.
|
|
18
32
|
|
|
19
|
-
|
|
33
|
+
Host guides: [Tiptap](https://math-editor.barocss.com/docs/integrations/tiptap.html) · [ProseMirror](https://math-editor.barocss.com/docs/integrations/prosemirror.html) · [Lexical](https://math-editor.barocss.com/docs/integrations/lexical.html) · [Editor.js](https://math-editor.barocss.com/docs/integrations/editorjs.html) · [TinyMCE](https://math-editor.barocss.com/docs/integrations/tinymce.html) · [CKEditor 5](https://math-editor.barocss.com/docs/integrations/ckeditor.html) · [Quill](https://math-editor.barocss.com/docs/integrations/quill.html) · [Slate](https://math-editor.barocss.com/docs/integrations/slate.html) · [WordPress Gutenberg](https://math-editor.barocss.com/docs/integrations/gutenberg.html).
|
|
34
|
+
|
|
35
|
+
The [unified host sample](https://math-editor.barocss.com/integrations/) includes all nine editors. During development, guides are served under `http://localhost:5184/docs/integrations/`, and the host sample runs on port 5185. Website deployment is separate from npm publication.
|
|
36
|
+
|
|
37
|
+
## Framework adapters in the core package
|
|
38
|
+
|
|
39
|
+
These are subpath exports of `@barocss/math-editor`, not separate npm packages.
|
|
40
|
+
|
|
41
|
+
| Environment | Import | Guide |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| Model and sessions without a UI | `@barocss/math-editor/core` | [Session API](https://math-editor.barocss.com/docs/api-session.html) |
|
|
44
|
+
| Pure JavaScript | `@barocss/math-editor/dom` | [JavaScript](https://math-editor.barocss.com/docs/api-javascript.html) |
|
|
45
|
+
| React | `@barocss/math-editor` for the rich UI; `/react` for the native DOM surface | [React](https://math-editor.barocss.com/docs/api-react.html) |
|
|
46
|
+
| Web Component | `@barocss/math-editor/web-component` | [Web Component](https://math-editor.barocss.com/docs/api-web-component.html) |
|
|
47
|
+
| Vue 3 | `@barocss/math-editor/vue` | [Vue](https://math-editor.barocss.com/docs/api-vue.html) |
|
|
48
|
+
| Svelte | `@barocss/math-editor/svelte` | [Svelte](https://math-editor.barocss.com/docs/api-svelte.html) |
|
|
49
|
+
| Solid | `@barocss/math-editor/solid` | [Solid](https://math-editor.barocss.com/docs/api-solid.html) |
|
|
50
|
+
|
|
51
|
+
Each guide covers installation, document replacement, saving and lifecycle cleanup. See the [framework samples](https://math-editor.barocss.com/adapters.html) to try each environment, and the [JSON model specification](https://math-editor.barocss.com/docs/json-model.html) for the storage contract.
|
|
52
|
+
|
|
53
|
+
See [framework adapters and inline/custom toolbar integration](https://math-editor.barocss.com/docs/adapters.html), [custom locales](https://math-editor.barocss.com/docs/localization.html), and [progress / roadmap](https://math-editor.barocss.com/docs/roadmap.html). The new native renderer has explicit parity gaps; existing React consumers keep their current UI.
|
|
54
|
+
|
|
55
|
+
**Included in 0.4.0:** the native toolbar now includes searchable All symbols, templates, matrix presets and active-grid controls. Native ranges show exact partial-text highlights, and a drag can start in the active input and continue across structures. See [renderer parity](https://math-editor.barocss.com/docs/adapters.html#current-renderer-parity) for the remaining limits.
|
|
56
|
+
|
|
57
|
+
For editor-only, external toolbar, LaTeX, preview, inline and popup compositions, see [Embedding](https://math-editor.barocss.com/docs/embedding.html) and the [layout examples](https://math-editor.barocss.com/layouts.html).
|
|
20
58
|
|
|
21
59
|
## Quick start
|
|
22
60
|
|
|
23
|
-
Install version 0.
|
|
61
|
+
Install version 0.4.0 from npm:
|
|
24
62
|
|
|
25
63
|
```sh
|
|
26
|
-
npm install @barocss/math-editor@0.
|
|
64
|
+
npm install @barocss/math-editor@0.4.0
|
|
27
65
|
# For the rich React UI:
|
|
28
66
|
npm install react react-dom
|
|
29
67
|
```
|
|
30
68
|
|
|
31
|
-
Import `@barocss/math-editor/style.css` once. Framework-free consumers use `/core` and `/dom`; each framework adapter has its own subpath. See [ADAPTERS.md](
|
|
69
|
+
Import `@barocss/math-editor/style.css` once. Framework-free consumers use `/core` and `/dom`; each framework adapter has its own subpath. See [ADAPTERS.md](https://math-editor.barocss.com/docs/adapters.html).
|
|
32
70
|
|
|
33
71
|
To develop the package and demo from this monorepo:
|
|
34
72
|
|
|
@@ -67,10 +105,11 @@ function Formula({ documentId, saved, save }: {
|
|
|
67
105
|
| `defaultValue?: MathDocument` | Read on mount. Change the React `key` to open another document. This is not a controlled `value` prop. |
|
|
68
106
|
| `locale?: MathLocale` | Defaults to `ko`. Changes UI text without resetting the document or undo history. |
|
|
69
107
|
| `autoFocus?: boolean` | Start in the initial editable token. Defaults to `false`. |
|
|
70
|
-
| `enterBehavior?: 'newline'
|
|
108
|
+
| `enterBehavior?: 'newline' \| 'commit'` | `commit` calls `onCommit` on Enter after suggestions/selection handling; Shift+Enter retains normal row behavior. |
|
|
71
109
|
| `onCommit?()` / `onCancel?()` | Host draft apply/cancel callbacks. Escape dismisses suggestions first; composition reserves its own keys. |
|
|
72
110
|
| `showPopovers?: boolean` | Defaults to `true`. Set `false` while keeping the editor mounted in an inactive host tab; its undo history is preserved. |
|
|
73
|
-
| `toolbar?: boolean` | Show
|
|
111
|
+
| `toolbar?: boolean \| readonly StructureKind[]` | Show or filter rich React structure buttons; defaults to `true`. |
|
|
112
|
+
| `toolbarMaxItems?: number` | Initially visible structure buttons; defaults to eight. |
|
|
74
113
|
| `toolbarEnd?: ReactNode` | Host actions such as reset/save appended to the toolbar. |
|
|
75
114
|
| `showTokenLegend?: boolean` | Show lexical color guidance; defaults to `true`. |
|
|
76
115
|
| `showLineNumbers?: boolean` | Defaults to `true`. Displays UI-only line numbers when there are two or more top-level rows. Never included in the model, clipboard or LaTeX. |
|
|
@@ -84,19 +123,21 @@ Matching literal characters appear before editable structures and templates. For
|
|
|
84
123
|
|
|
85
124
|
## Editing flows
|
|
86
125
|
|
|
87
|
-
Use **All symbols** to browse
|
|
126
|
+
Use **All symbols** to browse the complete symbol catalog without knowing a name in advance. Search by glyph, English/Korean name, alias or LaTeX command, then click to insert at the last caret or replace the model selection. Escape closes the browser. Search-field clipboard actions do not affect the formula. The workspace native toolbar exposes this browser through More tools.
|
|
88
127
|
|
|
89
|
-
- Type `x/`, then Enter
|
|
90
|
-
- Type `matrix`, `identity`, `aligned` or `cases`, then choose a suggestion. Korean aliases work in both UI languages.
|
|
128
|
+
- Type `x/`, choose Fraction, then Enter to enter its denominator. The literal `÷` candidate comes first. `/`, `^` and `_` remain opt-in suggestions, not immediate structural conversions.
|
|
129
|
+
- Type `matrix`, `identity`, `aligned` or `cases`, then choose a suggestion. Korean aliases work in both UI languages. In the 0.4.0 release, type `rows x columns` without spaces, such as `2x1`, `1x2`, `3x7` or `4x4`. Each dimension can be 1–20. Suggestions offer an empty matrix and a zero matrix; square sizes also offer an identity matrix. Uppercase `X` and `×` also work. Enter accepts a suggestion; Space or Escape keeps the typed expression.
|
|
91
130
|
- Type `30degree`, `30도` or `30각도`, then Enter to insert `30°` on the current line. `angle` inserts the separate symbol `∠`.
|
|
92
|
-
- Search `reals`, `integers`, `setminus`, `parallel`, or their Korean names. [The complete catalog](
|
|
131
|
+
- Search `reals`, `integers`, `setminus`, `parallel`, or their Korean names. [The complete catalog](https://math-editor.barocss.com/docs/support.html) lists every symbol and alias.
|
|
93
132
|
- Use the template selector for zero matrices, column vectors, the quadratic formula and the Pythagorean theorem. Every part remains editable. Template insertion replaces a model selection if one is active; otherwise it inserts at the caret.
|
|
94
|
-
- Click
|
|
133
|
+
- Click text to edit it. Rich React activates one lexical token; the native renderer activates a whole logical text run. Only that active text mounts an `input`. Blur switches to preview. Escape closes suggestions first, then returns to preview.
|
|
95
134
|
- Drag to select math. The selection tools and main toolbar wrap it in a fraction, root, power, subscript, parentheses, brackets or absolute value. Fractions focus the denominator; powers/subscripts focus their new slot; roots/delimiters place the caret after the structure.
|
|
96
135
|
- Complex power bases receive parentheses. Existing structured delimiters are preserved. This is a conservative display rule, not symbolic algebra.
|
|
97
136
|
|
|
98
137
|
Variables, numeric literals and symbols use distinct colors. Classification is lexical: a letter named `c` or `e` is not automatically a declared constant. The model does not resolve names or binding scopes.
|
|
99
138
|
|
|
139
|
+
Native passive text preserves these lexical colors; its whole active run still uses one role color. Precise selection highlights do not change that input granularity.
|
|
140
|
+
|
|
100
141
|
## Keyboard reference
|
|
101
142
|
|
|
102
143
|
| Context | Key | Action |
|
|
@@ -104,6 +145,7 @@ Variables, numeric literals and symbols use distinct colors. Classification is l
|
|
|
104
145
|
| Suggestions | Up / Down, Enter | Choose and apply; IME composition reserves these keys for the input method |
|
|
105
146
|
| Any active slot | Tab / Shift+Tab | Traverse tokens and structural slots |
|
|
106
147
|
| Token boundary | Left / Right | Move into a neighboring token or slot |
|
|
148
|
+
| Fraction, scripts, indexed root or operator slots | Up / Down | Move to a related slot at the nearest rendered horizontal caret position |
|
|
107
149
|
| Top-level row | Enter | Split the row, unless applying a suggestion |
|
|
108
150
|
| Start of a later top-level row | Backspace | Join the previous row |
|
|
109
151
|
| Grid | Up / Down | Move to the same column in the adjacent row |
|
|
@@ -115,19 +157,27 @@ Variables, numeric literals and symbols use distinct colors. Classification is l
|
|
|
115
157
|
| Just after a fraction/root/delimiter | Backspace | Unwrap, preserving contents |
|
|
116
158
|
| Outer grid edge | Backspace / Delete | Delete empty grid; select filled grid first, press again to delete |
|
|
117
159
|
| Preview surface | Cmd/Ctrl+A | Select the whole math document |
|
|
118
|
-
| Active input | Cmd/Ctrl+A | Select the current
|
|
160
|
+
| Active input | Cmd/Ctrl+A | Select the current input text: a React token or native logical run |
|
|
161
|
+
| Editor | Shift+Left / Right | Extend or shrink the model range across text and balanced structures |
|
|
162
|
+
| Editor | Shift+Up / Down | Extend the model range across top-level lines using logical offsets |
|
|
119
163
|
| Preview surface | Enter / F2 | Enter editing |
|
|
120
164
|
| Model selection | Cmd/Ctrl+C / X / V | Copy / cut / replace with clipboard contents |
|
|
121
165
|
| Model selection | Backspace / Delete | Delete selection |
|
|
122
166
|
| Editor | Cmd/Ctrl+Z / Cmd/Ctrl+Shift+Z | Undo / redo |
|
|
123
167
|
|
|
168
|
+
Vertical arrows use the nearest inner structure before an enclosing grid, then fall back to another equation line. Paired scripts can move along their shared column; a base moves up to its superscript and down to its subscript. Suggestions retain arrow-key priority. Composition, literal text and noncollapsed text selections do not trigger structural movement. React and native surfaces share this behavior.
|
|
169
|
+
|
|
170
|
+
The framework-free `moveVertical(state, direction, geometry?)` helper is exported from `/core`. Without rendered geometry, it selects the first text run in the target slot and clamps the current offset. At a lexical token boundary, rendered geometry distinguishes the previous token's end from the next token's start. Each move uses the current caret's horizontal position; a preferred column is not retained across repeated moves through shorter rows. Shift+arrow selection remains a separate operation.
|
|
171
|
+
|
|
124
172
|
## Selection and clipboard boundaries
|
|
125
173
|
|
|
126
|
-
A range within one row preserves partial text and balanced structures. Selecting across a numerator and denominator expands to their common fraction;
|
|
174
|
+
A range within one row preserves partial text and balanced structures. Selecting across a numerator and denominator expands to their common fraction; cross-cell pointer selection now creates a matrix rectangle in the workspace. A structural `MathRange` still expands to the common matrix; rectangular editing uses the separate `MathMatrixRange` contract. Multiple document lines can be copied, replaced or deleted, but cannot be wrapped into a single structure.
|
|
175
|
+
|
|
176
|
+
Workspace native highlights now show the exact selected text endpoints. A drag inside the active input uses native text selection until it leaves the input; it can then continue as a model range across structures. These refinements are included in 0.4.0 and retain the same clipboard and balanced-structure rules.
|
|
127
177
|
|
|
128
178
|
Internal copies include `application/x-barocss-math+json` and plain-text LaTeX. Paste validates the custom payload and generates fresh IDs. Plain external text is inserted literally; newlines become top-level rows. Multiple-line paste into a nested slot is rejected without changing the document. If a destination strips custom clipboard formats, pasting back provides text rather than reconstructed math.
|
|
129
179
|
|
|
130
|
-
The demo's
|
|
180
|
+
The demo's LaTeX Copy action exports source text; its separate sized PNG download/copy controls render the website preview. The library exports mathematical data and LaTeX, with no reusable SVG/PNG image-export API yet. Version 0.2.0 includes explicit bounded LaTeX import; see [the import contract](https://math-editor.barocss.com/docs/latex-scope.html). Ordinary clipboard text is still inserted literally.
|
|
131
181
|
|
|
132
182
|
## Model and package boundaries
|
|
133
183
|
|
|
@@ -158,12 +208,12 @@ pnpm --filter @barocss/math-demo test:e2e
|
|
|
158
208
|
|
|
159
209
|
The demo consumes package exports from `dist`; rebuild the package before browser tests. Browser tests use Playwright Chromium and start port 5184 if needed. Actual OS Korean IME tests remain deferred at the user's request.
|
|
160
210
|
|
|
161
|
-
- [Symbol / English / Korean name table](
|
|
162
|
-
- [LaTeX editing guide and upcoming notation](
|
|
163
|
-
- [Supported formulas, templates and full symbol catalog](
|
|
164
|
-
- [Implementation guide](
|
|
165
|
-
- [Validation evidence and limitations](
|
|
166
|
-
- [Roadmap and acceptance criteria](
|
|
211
|
+
- [Symbol / English / Korean name table](https://math-editor.barocss.com/docs/symbols.html)
|
|
212
|
+
- [LaTeX editing guide and upcoming notation](https://math-editor.barocss.com/docs/latex-guide.html)
|
|
213
|
+
- [Supported formulas, templates and full symbol catalog](https://math-editor.barocss.com/docs/support.html)
|
|
214
|
+
- [Implementation guide](https://math-editor.barocss.com/docs/implementation.html)
|
|
215
|
+
- [Validation evidence and limitations](https://math-editor.barocss.com/docs/validation.html)
|
|
216
|
+
- [Roadmap and acceptance criteria](https://math-editor.barocss.com/docs/roadmap.html)
|
|
167
217
|
|
|
168
218
|
|
|
169
219
|
## LaTeX loading (0.2.0)
|
|
@@ -180,12 +230,12 @@ if (result.ok) {
|
|
|
180
230
|
}
|
|
181
231
|
```
|
|
182
232
|
|
|
183
|
-
The shared contract is **editable structure ↔ exported LaTeX ↔ imported structure**, within the [documented limits](
|
|
233
|
+
The shared contract is **editable structure ↔ exported LaTeX ↔ imported structure**, within the [documented limits](https://math-editor.barocss.com/docs/latex-scope.html). It covers the current structure and symbol catalog, not arbitrary KaTeX input. Failed imports never modify a session. Framework adapters do not implement their own parsers. Use source editing as a fallback in hosts.
|
|
184
234
|
|
|
185
235
|
|
|
186
|
-
During an existing edit, use `session.importLatex(source)` rather than resetting `defaultValue`: this preserves Undo/Redo and enforces inline policy. The rich React editor exposes `MathEditorHandle.importLatex` through `apiRef`; see [React import](
|
|
236
|
+
During an existing edit, use `session.importLatex(source)` rather than resetting `defaultValue`: this preserves Undo/Redo and enforces inline policy. The rich React editor exposes `MathEditorHandle.importLatex` through `apiRef`; see [React import](https://math-editor.barocss.com/docs/api-react.html) and [shared session import](https://math-editor.barocss.com/docs/api-session.html). Both paths use the same parser and fail without a partial update.
|
|
187
237
|
|
|
188
|
-
Workspace presentation refinements include aligned script bases, lining numerals and background-only token focus. See [implementation notes](
|
|
238
|
+
Workspace presentation refinements include aligned script bases, lining numerals and background-only token focus. See [implementation notes](https://math-editor.barocss.com/docs/implementation.html#editing-typography-and-focus-2026-09-08-workspace), [supported notation](https://math-editor.barocss.com/docs/support.html) and the [remaining LaTeX priorities](https://math-editor.barocss.com/docs/roadmap.html#remaining-latex-priorities-workspace-review-2026-09-08). These changes are included in 0.2.0.
|
|
189
239
|
|
|
190
240
|
Workspace norm support: one editable body, shared double-bar fences, `norm`/`노름`/`||` suggestions, range wrapping and LaTeX import/export. The parser accepts short `\lVert…\rVert` and scalable double-bar aliases; export uses `\left\Vert…\right\Vert`. Available in 0.2.0.
|
|
191
241
|
|
|
@@ -195,7 +245,9 @@ Workspace: `\overbrace`/`\underbrace` support includes LaTeX parsing/export, loc
|
|
|
195
245
|
|
|
196
246
|
## Compact and filtered toolbars (workspace)
|
|
197
247
|
|
|
198
|
-
Toolbars initially show up to eight structure buttons. More tools / Fewer tools toggles the
|
|
248
|
+
Toolbars initially show up to eight structure buttons. More tools / Fewer tools toggles the expanded section without changing the formula or history. In the workspace native toolbar, More tools also reveals All symbols search, templates, 2×2/3×3/4×4 matrix and identity presets, and symbol shortcuts. More remains available even when all selected structures already fit. Undo and Redo stay visible; rich React also retains `toolbarEnd`. The layout wraps on narrow screens.
|
|
249
|
+
|
|
250
|
+
The workspace native grid toolbar follows the active caret. Matrices expose row/column insertion and deletion plus delimiter selection; aligned/cases expose row operations. Text or model selections disable row/column and delimiter mutations. The workspace adds Select cells, Select all cells and Transpose matrix in both renderers. These additions are included in 0.4.0.
|
|
199
251
|
|
|
200
252
|
```tsx
|
|
201
253
|
<MathEditor toolbar={['fraction', 'root', 'superscript', 'matrix']}
|
|
@@ -203,7 +255,8 @@ Toolbars initially show up to eight structure buttons. More tools / Fewer tools
|
|
|
203
255
|
```
|
|
204
256
|
|
|
205
257
|
```js
|
|
206
|
-
mountMathEditor(host,
|
|
258
|
+
mountMathEditor(host, {
|
|
259
|
+
session,
|
|
207
260
|
toolbar: ['fraction', 'root', 'norm'],
|
|
208
261
|
toolbarMaxItems: 2,
|
|
209
262
|
});
|
|
@@ -213,7 +266,7 @@ mountMathToolbar(toolbarHost, session, {
|
|
|
213
266
|
});
|
|
214
267
|
```
|
|
215
268
|
|
|
216
|
-
`toolbar: false` hides the toolbar. A structure array filters
|
|
269
|
+
`toolbar: false` hides the toolbar. A structure array filters structure buttons; the workspace native toolbar also filters templates by their structure kinds and limits grid presets/context controls to allowed kinds. Symbol search remains available. Rich React's auxiliary controls retain their existing behavior. Toolbar filtering does not restrict suggestions, parsing or the model. `toolbarMaxItems` (independent toolbar: `maxItems`) is a nonnegative count; zero initially hides all structure buttons behind More. A sufficiently large count shows all selected structure buttons initially. Expanded state is not saved in the math document. The rich React `toolbar` array and compact behavior are available in 0.2.0; the native discovery/context additions are included in 0.4.0.
|
|
217
270
|
|
|
218
271
|
Workspace: added `\tilde`, `\bar`, `\dot`, `\ddot`, `\widehat` and `\widetilde` with exact-command parsing/export, localized suggestions, one-slot wrapping and fixed/stretchy accent rendering. Available in 0.2.0.
|
|
219
272
|
|
|
@@ -227,18 +280,73 @@ Set `--me-font-size` on the host (for example `18px`) to keep React token previe
|
|
|
227
280
|
|
|
228
281
|
### Explicit fraction sizes (workspace)
|
|
229
282
|
|
|
230
|
-
Import or type the suggestions `dfrac`, `tfrac`, `dbinom`, and `tbinom` for display/text fraction and binomial presets. The editor preserves their size on export. See [LaTeX guide](
|
|
283
|
+
Import or type the suggestions `dfrac`, `tfrac`, `dbinom`, and `tbinom` for display/text fraction and binomial presets. The editor preserves their size on export. See [LaTeX guide](https://math-editor.barocss.com/docs/latex-guide.html); available in 0.2.0.
|
|
231
284
|
|
|
232
285
|
### Math alphabet support (workspace)
|
|
233
286
|
|
|
234
|
-
`\mathbf`, `\mathcal` and multi-letter `\mathbb` now support import, suggestions, range wrapping, editing and export. See [alphabet scope and examples](
|
|
287
|
+
`\mathbf`, `\mathcal` and multi-letter `\mathbb` now support import, suggestions, range wrapping, editing and export. See [alphabet scope and examples](https://math-editor.barocss.com/docs/latex-guide.html#mathematical-alphabets--020). Available in 0.2.0.
|
|
235
288
|
|
|
236
289
|
### Labeled arrows (workspace)
|
|
237
290
|
|
|
238
|
-
`\xrightarrow[below]{above}` and `\xleftarrow[below]{above}` support parsing, suggestions, editable math labels and export. See [label syntax and slot order](
|
|
291
|
+
`\xrightarrow[below]{above}` and `\xleftarrow[below]{above}` support parsing, suggestions, editable math labels and export. See [label syntax and slot order](https://math-editor.barocss.com/docs/latex-guide.html#labeled-arrows--020). Available in 0.2.0.
|
|
239
292
|
|
|
240
293
|
## Keyboard ranges and brace discovery (0.2.1)
|
|
241
294
|
|
|
242
|
-
Shift+Left/Right extends or shrinks the same model range used by dragging. Structures are crossed as balanced units; copied and deleted ranges use existing model normalization. Shift+Up/Down extends to an adjacent top-level document line, using a logical text offset rather than pixel-based column matching;
|
|
295
|
+
Shift+Left/Right extends or shrinks the same model range used by dragging. Structures are crossed as balanced units; copied and deleted ranges use existing model normalization. Shift+Up/Down extends to an adjacent top-level document line, using a logical text offset rather than pixel-based column matching; when a matrix-cell selection is active, Shift+arrows instead moves its rectangular focus corner. Copy, cut, wrapping, deletion and Undo use the existing range behavior. IME composition and modifier shortcuts retain their existing handling.
|
|
296
|
+
|
|
297
|
+
After a model selection, plain Left/Up restores the caret at its document-ordered
|
|
298
|
+
start; Right/Down restores it at the end. The same rule applies to reverse drags
|
|
299
|
+
and Shift+arrow selections, without consuming another character or changing the
|
|
300
|
+
formula. Alt+Up/Down browses the wrapping suggestions while retaining the range;
|
|
301
|
+
Enter applies a candidate. Ordinary input suggestions still use Up/Down.
|
|
243
302
|
|
|
244
303
|
Typing `{` offers both paired braces and cases. Paired braces remain the first candidate; choose Cases explicitly to insert its editable grid.
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
### Sharing a native toolbar between editors (workspace)
|
|
307
|
+
|
|
308
|
+
`mountMathToolbar(host, sessionOrNull, options)` now returns
|
|
309
|
+
`{ setSession, setDisabled, destroy }`. Call `setSession(activeEditor.session)` when an editor
|
|
310
|
+
becomes active and `setSession(null)` when editing ends. Detaching disables editing
|
|
311
|
+
actions and unsubscribes from the previous session. `options.locale` supplies labels
|
|
312
|
+
before the first session is attached; active sessions supply their own locale.
|
|
313
|
+
`setDisabled(true)` keeps the session attached while disabling mutations and closing
|
|
314
|
+
symbol search; restore it with `false` after composition. An internally mounted
|
|
315
|
+
native toolbar coordinates this automatically. Independent toolbar hosts own focus,
|
|
316
|
+
draft lifecycle and composition handling. `onExecute` runs after a successful command
|
|
317
|
+
so the host can return focus to the math editor; browsing tools does not commit the
|
|
318
|
+
draft. See the [session toolbar API](https://math-editor.barocss.com/docs/api-session.html#independent-toolbar-and-outputs).
|
|
319
|
+
The Tiptap/ProseMirror integration coordinates these through its `toolbarHost` option.
|
|
320
|
+
|
|
321
|
+
These native UI additions use the existing model and LaTeX grammar. English/Korean
|
|
322
|
+
remain the complete bundled locale packs, and actual OS IME testing remains deferred.
|
|
323
|
+
|
|
324
|
+
## Matrix cell editing — workspace
|
|
325
|
+
|
|
326
|
+
Drag across matrix cells or Shift+click another cell to select a rectangle. For
|
|
327
|
+
keyboard selection, choose **Select cells**, then extend with Shift+arrows;
|
|
328
|
+
**Select all cells** selects the whole matrix. Copy and cut include nested formulas.
|
|
329
|
+
Delete clears selected contents while keeping the grid; typing replaces the
|
|
330
|
+
rectangle with text in its upper-left cell. Enter or Escape returns to editing.
|
|
331
|
+
|
|
332
|
+
Paste a copied rectangle into a matching selection, or start at one cell and let
|
|
333
|
+
the matrix grow within 20 × 20. A single copied cell fills a larger selection.
|
|
334
|
+
Rectangular tab-separated spreadsheet text is also accepted inside matrices;
|
|
335
|
+
ragged or mismatched shapes fail without partial writes. Copied cells pasted
|
|
336
|
+
outside a matrix become a new matrix. The plain-text clipboard fallback is LaTeX.
|
|
337
|
+
|
|
338
|
+
**Transpose matrix** exchanges all rows and columns, preserving the delimiter,
|
|
339
|
+
nested content and caret. Paste, cut, clear and transpose each take one Undo.
|
|
340
|
+
These operations are available in both renderers and the framework-free
|
|
341
|
+
[session API](https://math-editor.barocss.com/docs/api-session.html#matrix-cell-selections).
|
|
342
|
+
|
|
343
|
+
## Style customization
|
|
344
|
+
|
|
345
|
+
Use inherited CSS variables for colors, slot backgrounds, typography, toolbar density and menu appearance. Scoped themes also follow portaled suggestions in both renderers. See [Styling & themes](https://math-editor.barocss.com/docs/styling.html) for the public variables, dark/monochrome examples, shared toolbars and iframe/plugin sizing.
|
|
346
|
+
|
|
347
|
+
## License
|
|
348
|
+
|
|
349
|
+
MIT License. Copyright (c) 2026 barocss.com.
|
|
350
|
+
|
|
351
|
+
The npm package includes the full license in `LICENSE`. Bundled KaTeX fonts retain
|
|
352
|
+
their separate copyright and MIT notice in `src/fonts/LICENSE-KaTeX.txt`.
|
package/ROADMAP.md
CHANGED
|
@@ -2,6 +2,71 @@
|
|
|
2
2
|
|
|
3
3
|
This roadmap describes priorities, not release promises. The current package is an independent editing prototype. Production integration requires the reliability work below even if additional notation is implemented first.
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## Editing utilities — workspace, 2026-09-09
|
|
8
|
+
|
|
9
|
+
Included in 0.4.0:
|
|
10
|
+
|
|
11
|
+
- Native lexical-token input now matches rich React colors and offsets. Token-boundary navigation/deletion preserves surrounding text; composition retains the input until commit.
|
|
12
|
+
- Explicit LaTeX insertion at the caret or range, exposed as `pasteLatex`, More tools → Paste as LaTeX, and Alt+Shift+V. Parsing/placement failures preserve the document. Ordinary paste stays literal.
|
|
13
|
+
- Recent symbols/templates and favorites, with a shareable validated preference store. Preferences are separate from formula history; persistence belongs to the host.
|
|
14
|
+
- Contextual fence, fraction/binomial size, and operator-bound placement controls. Existing contents, IDs and caret are preserved with one-step Undo.
|
|
15
|
+
|
|
16
|
+
See [API and usage](API-SESSION.md#editing-utilities--workspace). No new LaTeX grammar or automatic algebraic transformation is added. Persistent vertical columns, broader browsers, performance budgets and accessibility remain open.
|
|
17
|
+
|
|
18
|
+
## Scoped style customization — workspace, 2026-09-09
|
|
19
|
+
|
|
20
|
+
Implemented: inherited CSS variables for UI/token colors, slot backgrounds,
|
|
21
|
+
controls, toolbar density and floating menus. Both renderers retain per-editor
|
|
22
|
+
palette values on suggestion/selection portals and follow live ancestor theme
|
|
23
|
+
switches. Shared plugin panels/actions use the same palette; persisted host
|
|
24
|
+
formula sizing remains document data. The site includes default/dark/monochrome,
|
|
25
|
+
base-size and compact-spacing controls. See [Styling & themes](STYLING.md).
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Selection-to-caret keyboard behavior — workspace, 2026-09-09
|
|
29
|
+
|
|
30
|
+
Both renderers now restore the caret when a plain arrow follows a Shift+arrow or
|
|
31
|
+
pointer model selection. Left/Up uses the ordered start; Right/Down uses the end.
|
|
32
|
+
Typing continues at that position without replacing the former range. Wrapping
|
|
33
|
+
suggestions remain selectable with Alt+Up/Down or the pointer. The operation does
|
|
34
|
+
not change the formula or create Undo entries.
|
|
35
|
+
|
|
36
|
+
## Matrix rectangles and transpose — workspace, 2026-09-09
|
|
37
|
+
|
|
38
|
+
Both editing surfaces now distinguish cross-cell rectangles from text selection
|
|
39
|
+
inside a cell. Drag between cells or Shift+click to select a rectangle. Select
|
|
40
|
+
cells starts keyboard selection; Shift+arrows changes the focus corner. Copy/cut
|
|
41
|
+
preserves nested formula trees; paste accepts matching rectangles or grows from
|
|
42
|
+
a single cell within 20 × 20. One copied cell can fill a rectangle. Ragged TSV,
|
|
43
|
+
invalid clipboard data, mismatched shapes and oversized results are rejected
|
|
44
|
+
without changing the formula. Delete clears cells; Enter/Escape resumes editing.
|
|
45
|
+
|
|
46
|
+
Transpose matrix moves the entire matrix, preserving cell IDs, nested caret,
|
|
47
|
+
delimiters and one-step Undo. No numerical evaluation or new LaTeX grammar is
|
|
48
|
+
introduced. See [the API contract](API-SESSION.md#matrix-cell-selections) for payloads
|
|
49
|
+
and paste rules. Real OS clipboard and touch selection remain separate checks.
|
|
50
|
+
|
|
51
|
+
## Native toolbar and selection parity — workspace, 2026-09-09
|
|
52
|
+
|
|
53
|
+
Included in 0.4.0: More tools exposes searchable All symbols,
|
|
54
|
+
templates, matrix/identity presets and symbol shortcuts. The active grid toolbar
|
|
55
|
+
offers matrix row/column operations and delimiter changes, with row operations for
|
|
56
|
+
aligned/cases. External toolbar handles now expose `setDisabled` alongside
|
|
57
|
+
`setSession` and `destroy` for composition and draft lifecycle coordination.
|
|
58
|
+
|
|
59
|
+
Native selection highlights now preserve partial text endpoints. A drag can begin
|
|
60
|
+
inside the active input and continue across structures as a model range. Shift+arrow
|
|
61
|
+
model ranges are already implemented; vertical range extension uses logical line
|
|
62
|
+
offsets. The new work does not add LaTeX syntax.
|
|
63
|
+
|
|
64
|
+
Remaining work includes persistent vertical preferred
|
|
65
|
+
columns, and wider browser/accessibility coverage. English/Korean remain the complete
|
|
66
|
+
bundled locale packs; additional complete packs remain open. Native OS IME validation
|
|
67
|
+
is still deferred at the user's request. See [renderer parity](ADAPTERS.md#current-renderer-parity)
|
|
68
|
+
and [validation](VALIDATION.md) for the current boundary and evidence.
|
|
69
|
+
|
|
5
70
|
## Remaining LaTeX priorities: workspace review, 2026-09-08
|
|
6
71
|
|
|
7
72
|
These are proposals, not accepted import syntax. Complete each feature through the model, parser, exporter, suggestions and both editing surfaces before calling it supported.
|
|
@@ -53,7 +118,7 @@ Norms are implemented in the workspace. Triple and contour integrals are impleme
|
|
|
53
118
|
| Host Enter/commit/cancel contract and modal suggestions | Implemented | Product selection/undo integration and real IME/browser matrix |
|
|
54
119
|
| Layout lab: inline, next-block flow, popup draft/cancel/apply | Implemented | Integrate the actual Note node view first |
|
|
55
120
|
| Note/Word/Site/Slide persistence adapters | Note workspace popup trial implemented | Validate other browsers and real host caret/undo workflows; Word/Site/Slide adapters and OMML conversion remain open |
|
|
56
|
-
|
|
|
121
|
+
| Reusable library SVG/PNG output | Not implemented | Dedicated renderer/export contract, fonts and scaling; the website already provides sized PNG download/copy from its preview |
|
|
57
122
|
|
|
58
123
|
See [Embedding](EMBEDDING.md) for existing Note/Word model boundaries. Note has a popup integration trial. The user confirmed that Note inline editing is resolved. This release focuses on math-editor; product-specific validation is tracked separately.
|
|
59
124
|
|
|
@@ -62,15 +127,15 @@ See [Embedding](EMBEDDING.md) for existing Note/Word model boundaries. Note has
|
|
|
62
127
|
| Work | Status | Remaining gate |
|
|
63
128
|
|---|---|---|
|
|
64
129
|
| Framework-free session / public commands | Implemented | Host-wide undo integration, performance and document validation |
|
|
65
|
-
| Native DOM surface / pure JS entry | Integration preview |
|
|
130
|
+
| Native DOM surface / pure JS entry | Integration preview | Native discovery/context tools and precise pointer ranges implemented in workspace; token-level input/color is implemented; wider composition coverage remains |
|
|
66
131
|
| Web Component / Vue / Svelte / Solid / React native wrappers | Implemented | Wider framework-version matrix and SSR/hydration strategy |
|
|
67
|
-
| Optional and separately mounted toolbar | Implemented in native surface |
|
|
132
|
+
| Optional and separately mounted toolbar | Implemented in native surface | Symbol browser, templates/presets and grid context controls added in workspace; broader context grouping and user customization remain |
|
|
68
133
|
| Inline single-top-level-line policy | Implemented in native surface | Real product prose integration, baseline/keyboard exit UX |
|
|
69
134
|
| External locale dictionary / aliases / fallback / direction | Implemented | Complete extra language packs and RTL audit |
|
|
70
135
|
| ESM subpath distribution / optional framework peers | Implemented | Release approval, registry publication, bundle budgets |
|
|
71
136
|
| Rich React renderer remains available | Preserved | Move main export only after measured parity |
|
|
72
137
|
|
|
73
|
-
Next integration work:
|
|
138
|
+
Next integration work: verify the new active-input parity across more browsers, extend browser/accessibility coverage, and measure load/typing cost in host products. The native symbol panel, precise range highlights, active-input cross-structure drag and Shift+arrow model selection are implemented in the workspace. Note inline editing is already resolved. Do not add new notation to both renderers independently before shared behavior is stable. See [adapter parity and API](ADAPTERS.md).
|
|
74
139
|
|
|
75
140
|
## Delivered baseline
|
|
76
141
|
|
|
@@ -86,8 +151,8 @@ Next integration work: finish the native symbol panel and precise range highligh
|
|
|
86
151
|
| Work | Acceptance criteria |
|
|
87
152
|
|---|---|
|
|
88
153
|
| Real input-method matrix | macOS and Windows Korean composition, cancellation, blur and locale change preserve text and commit once; currently deferred by user request |
|
|
89
|
-
| Keyboard model ranges | Shift+arrows extend/collapse across
|
|
90
|
-
| Structural navigation |
|
|
154
|
+
| Keyboard model ranges — implemented | Shift+arrows extend/collapse across text and structures; typing replaces selection; wider browser/IME coverage and pixel-column vertical extension remain |
|
|
155
|
+
| Structural navigation — implemented in workspace | Shared React/native Up/Down movement for fractions, scripts, indexed roots and operator slots; nearest rendered horizontal caret, inner-structure precedence and matrix columns covered by model tests. Persistent preferred-column state and wider browser coverage remain open |
|
|
91
156
|
| Saved-document validation | Shape/duplicate-ID validation is implemented; version migration and host recovery remain |
|
|
92
157
|
| Host session adapter | Enter/exit and save work in one target product; a single coherent undo path across host and formula |
|
|
93
158
|
| Browser/accessibility coverage | Safari, Firefox and Windows Chromium; screen-reader names and suggestion announcements; touch selection and narrow layouts |
|
|
@@ -114,8 +179,8 @@ See the [LaTeX editing guide](LATEX-GUIDE.md) for supported examples and the nex
|
|
|
114
179
|
| Feature | Acceptance criteria |
|
|
115
180
|
|---|---|
|
|
116
181
|
| Subset LaTeX import — implemented in workspace | Extend the documented grammar incrementally; preserve unsupported input without changing the existing formula |
|
|
117
|
-
| Rectangular cell selection |
|
|
118
|
-
| Matrix transformations |
|
|
182
|
+
| Rectangular cell selection — implemented in workspace | Cross-cell drag, Shift+click, keyboard expansion, shape-checked copy/paste, clear and one-step Undo; external clipboard/touch validation remains |
|
|
183
|
+
| Matrix transformations — implemented in workspace | Delimiter changes and full-matrix transpose preserve cell contents, nested caret and Undo; selected-submatrix transforms and numeric computation are not included |
|
|
119
184
|
| Drag matrix size picker | Accessible keyboard equivalent, touch behavior, 1–20 bounds and one-step insertion |
|
|
120
185
|
| Multi-alignment and multiline wrapping | Explicit grouping semantics; do not flatten lines or move relation signs unexpectedly |
|
|
121
186
|
| External clipboard compatibility | Verify custom-format survival and LaTeX fallback across target browsers and applications |
|
|
@@ -164,7 +229,7 @@ the npm version and deployed runtime artifact are unchanged.
|
|
|
164
229
|
- [x] Vector, hat and overline accents with editable bodies and selection wrapping.
|
|
165
230
|
- [x] Additional delimiters, mixed/invisible ends and overset/underset annotations.
|
|
166
231
|
- [x] Over/under brace annotations with editable annotation/body slots.
|
|
167
|
-
- [x] Explicit side-placement import/export (`\nolimits`)
|
|
232
|
+
- [x] Explicit side-placement import/export (`\nolimits`) and contextual toolbar placement controls.
|
|
168
233
|
|
|
169
234
|
- [x] Workspace: `limit` condition/body model, LaTeX import/export, localized suggestions and React/native editing.
|
|
170
235
|
- [x] Semantic function color for named/custom operators and the limit glyph.
|
|
@@ -188,10 +253,27 @@ Seven rich React/KaTeX comparisons are complete; production fixes are pending. P
|
|
|
188
253
|
|
|
189
254
|
Spacing follow-up implemented: shared grid fence shapes, tighter grid/fraction/script/accent layouts, bounded nested fraction sizes, and a smaller boundary focus target. Chromium import/edit checks pass; the measured first-boundary expansion fell from 20px to 8px. Full recursive math-style sizing, additional browser/accessibility checks and eliminating all cursor-induced movement remain open.
|
|
190
255
|
|
|
191
|
-
Workspace toolbar overflow is implemented: configurable structure-button limits and More/Fewer controls, rich React/native filtering, and always-visible history actions.
|
|
256
|
+
Workspace toolbar overflow is implemented: configurable structure-button limits and More/Fewer controls, rich React/native filtering, and always-visible history actions. Native symbol/template discovery and grid context controls are also implemented as described above. Broader context-sensitive grouping and user-persisted toolbar customization remain future work.
|
|
192
257
|
|
|
193
258
|
Locale regression: misplaced alphabet/arrow messages moved inside `messages`; pack-shape/build validation and en/ko browser coverage added.
|
|
194
259
|
|
|
195
260
|
### 0.2.1
|
|
196
261
|
|
|
197
|
-
Keyboard model selection with Shift+arrows and `{` cases discovery are implemented. The dedicated demo adds sized PNG download/copy and fit preview; image generation remains site-only. Pixel-column vertical selection and
|
|
262
|
+
Keyboard model selection with Shift+arrows and `{` cases discovery are implemented. The dedicated demo adds sized PNG download/copy and fit preview; image generation remains site-only. Pixel-column vertical selection remains future work. Matrix cell rectangles and transpose are implemented in the workspace; aligned/cases retain structural ranges.
|
|
263
|
+
|
|
264
|
+
## Tiptap / ProseMirror integration preview (2026-09-08)
|
|
265
|
+
|
|
266
|
+
A separate private development package, `packages/math-editor-integrations`, now
|
|
267
|
+
provides Tiptap 3 and ProseMirror 1 math nodes using the existing DOM editor. It
|
|
268
|
+
supports direct editing in the text flow, optional panel editing, JSON/LaTeX storage,
|
|
269
|
+
HTML clipboard round trips, Apply/Cancel, and host Undo. The sample runs from
|
|
270
|
+
`apps/math-integrations` at port 5185.
|
|
271
|
+
|
|
272
|
+
As of 2026-09-09, the integration preview covers nine hosts in one sample page.
|
|
273
|
+
Site staging includes `/integrations/` and rendered integration documentation.
|
|
274
|
+
The shared source package stays private; nine host-specific npm packages have
|
|
275
|
+
separate Changesets and artifact preparation. The release set is core `0.4.0` and plugins `0.1.0`. The
|
|
276
|
+
core and all nine plugins now use MIT, with a LICENSE file in each package.
|
|
277
|
+
Plugin publication remains pending. See the [integration roadmap](../math-editor-integrations/ROADMAP.md),
|
|
278
|
+
[validation record](../math-editor-integrations/VALIDATION.md), and
|
|
279
|
+
[release guide](../math-editor-integrations/docs/RELEASING.md).
|