Skip to content

Latest commit

 

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Likftc

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.

Supported integrations

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

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 react
import { 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.42

Octane 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.17

Every 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.

Development

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:compatibility

CI 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:chromium

Workspace 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.

Releases

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.

Documentation

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.

License

MIT

Releases

Used by

Contributors

Languages