Fresh transition keys for list items that leave and return.
The v1 public API is frozen for stable release. Its lifecycle contract passes shared renderer tests, isolated minimum-version fixtures, and registry-installed consumer verification.
| Import | API | Tested workspace version |
|---|---|---|
@vp-tw/likftc/react |
useLikftc() |
React 19.2.8 |
@vp-tw/likftc/preact |
useLikftc() |
Preact 10.29.8 |
@vp-tw/likftc/vue |
useLikftc() |
Vue 3.5.42 |
@vp-tw/likftc/svelte |
createLikftc() store |
Svelte 5.56.10 |
@vp-tw/likftc/solid |
createLikftc() primitive |
Solid 1.9.15 |
@vp-tw/likftc/angular |
createLikftc() signal |
Angular 22.1.4 |
@vp-tw/likftc/web |
createLikftc() controller |
Web platform and Lit 3.3.3 consumer |
@vp-tw/likftc/qwik |
useLikftc() |
Qwik 2.0.0-beta.42 |
@vp-tw/likftc/octane |
useLikftc() |
Octane 0.1.17 |
Qwik and Octane support are experimental and client-only. Likftc tested Qwik with @qwik.dev/core@2.0.0-beta.42 and Octane with octane@0.1.17 plus @octanejs/vite-plugin@0.1.17. Other versions are use-at-your-own-risk; please open an issue or PR if you verify one. Qwik's SVG JSX declaration incompatibility remains isolated in Qwik-specific type checks and the declaration build.
Install the package with the framework runtime you use. Framework adapters are subpath exports, and every framework runtime remains external.
pnpm add @vp-tw/likftc reactimport { useLikftc } from "@vp-tw/likftc/react";
const entries = useLikftc(items, { getId: (item) => item.id });Qwik uses the same package through its experimental subpath export:
pnpm add @vp-tw/likftc @qwik.dev/core@2.0.0-beta.42Octane uses the same package through its experimental subpath and requires its matching compiler integration:
pnpm add @vp-tw/likftc octane@0.1.17 @octanejs/vite-plugin@0.1.17Every entry contains the original item, its logical ID, and a transition key. Use the transition key where the renderer or animation library owns DOM identity.
Your animation layer retains an exiting row under the key it already had. If the same logical ID returns before that exit finishes, Likftc gives the entering row a fresh key so both DOM instances can exist without a FLIP collision.
The repository pins Node.js 24.18.0, pnpm 11.12.0, and Vite+ 0.3.0. Use Vite+ as the command surface so the pinned package manager is selected even when another global pnpm is on PATH.
vp install --frozen-lockfile
vp run verify:toolchain
vp check
vp run check:types
vp run check:frameworks
vp test run --coverage
vp test run --config vitest.browser.config.ts
vp run check:docs
vp run build
vp run check:packages
vp run check:compatibilityCI installs its pinned Chromium build. Locally, either install that browser with Playwright or use an existing Chrome installation:
PLAYWRIGHT_CHANNEL=chrome vp run test:browser:chromiumWorkspace compiler and build tasks run with a concurrency limit of one. Astro checks and builds are intentionally serial because they share Vite's dependency cache. Vite+ type-aware Oxlint is disabled for this pinned release because its tsgolint worker does not terminate reliably with the dual TypeScript layout; explicit TypeScript 7 and TypeScript 6 checks remain required.
Every publishable change needs a changeset. After a push to main, the release job waits for the full quality job, then creates or updates a draft release pull request. Merging that pull request runs the quality job again before publishing with npm provenance. Entering or leaving prerelease mode requires a separate review.
The branded Astro Starlight site lives in apps/docs. It includes keyboard-operable, CSR-only before-and-after demos and a reduced-motion mode that keeps manual frame stepping and identity diagnostics available.
See the compatibility matrix, quality gates, and risk register for the current evidence and release blockers.
MIT