Repository navigation
v0.2.0 — no Tailwind requirement, package-owned theming vocabulary, mark geometry
Two breaking changes and one addition, held together deliberately so consumers absorb one breaking upgrade instead of three.
Breaking: the Tailwind requirement is gone
Previously a host had to run Tailwind v4 and add an @source directive pointing into node_modules — a documented footgun whose failure mode was silent, unstyled chrome. The handful of utility classes the package emitted now ship as semantic classes in styles.css (.editor-container, .editor-loading, .editor-error-banner, .editor-app-root).
Hosts no longer need Tailwind installed, configured, or scanning this package at all. If you added an @source for @liminis/editor, it now generates nothing and can be removed. See ADR-086. (#49)
Breaking: theming tokens renamed to --liminis-editor-*
All 59 CSS custom properties are now under one package-owned prefix, replacing four inconsistent ones (--slashmd-* 30, --vscode-* 24, --color-* 4, --checkbox-* 1). See ADR-087. (#51)
Nothing loses its theme on upgrade. Every property resolves through a fallback chain — --liminis-editor-x, then that property's specific previous name, then its existing default — so a host still supplying old-prefix overrides keeps working untouched. Both known consumers do exactly that today and are unaffected.
The old names are deprecated and will be removed in a future major. README.md's "Migrating from the old names" section has the full mapping.
Added: getMarkRects() — breaking if you implement AnnotationEditorHandle
AnnotationEditorHandle gains getMarkRects(annotationIds?), returning Map<string, DOMRect[]> — the on-screen geometry of existing annotation marks, so a host can align UI to annotated text.
Previously the only public rect was the one-shot AnnotationCreateEvent.rect at creation time, and marks carry no id in the DOM, so there was no way for a host to attribute a rectangle to an annotation. DOMRect[] because one annotation can span several sibling mark nodes. (#73)
This is a required interface member, so it's breaking for anything that implements, constructs, or mocks AnnotationEditorHandle — a test double, an alternative host, a wrapper — which will fail to compile (TS2741: Property 'getMarkRects' is missing). It is not breaking for code that only calls methods on a handle instance the package itself supplies, e.g. via annotationEditorHandleRef — that continues to work unchanged. The fix is one line: add a getMarkRects implementation to any hand-built object satisfying AnnotationEditorHandle.
Also in this release
- Table delimiters no longer minimise to
| - |on round-trip; conventional| --- |is preserved and padded forms normalise to it once (#60) - The theming contract is documented, generated from source, and CI-enforced — the token reference cannot drift from the code (#50)
- The toolbar link input referenced a
--vscode-texttoken that never existed (#52) - Every workflow runs Node 24; Node 20 reached end of life on 24 March 2026
engines.node: ">=22"is now declared- Every CI job caps its runtime, so a hung job fails in minutes rather than six hours
Upgrading
pnpm add @liminis/editor@^0.2.0Three things to check:
- Remove any
@sourcedirective pointing at this package — it now generates nothing. - If you assert byte-identical markdown round-trips, regenerate fixtures containing tables:
| - |becomes| --- |once, then stays stable. - If you implement, construct, or mock
AnnotationEditorHandle(a test double, an alternative host, a wrapper), add agetMarkRectsimplementation or you'll hitTS2741: Property 'getMarkRects' is missing.
Theming needs no immediate change; migrate to --liminis-editor-* at your convenience.