Skip to content

v0.2.0 — no Tailwind requirement, package-owned theming vocabulary, mark geometry

Choose a tag to compare

@verveguy verveguy released this 19 Aug 12:56
· 767 commits to main since this release
8e948a8

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-text token 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.0

Three things to check:

  1. Remove any @source directive pointing at this package — it now generates nothing.
  2. If you assert byte-identical markdown round-trips, regenerate fixtures containing tables: | - | becomes | --- | once, then stays stable.
  3. If you implement, construct, or mock AnnotationEditorHandle (a test double, an alternative host, a wrapper), add a getMarkRects implementation or you'll hit TS2741: Property 'getMarkRects' is missing.

Theming needs no immediate change; migrate to --liminis-editor-* at your convenience.