Codync
免費、開源的 1:1 替代方案,取代 Grok Bot 與 Muse。從 iPhone、Mac 或 Linux 桌面將 Claude Code、Codex、Cursor 與 40+ 程式碼代理人作為持續機器人傳訊。群組聊天、主題串…
AI 翻譯
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Ani is a declarative animation library. You describe an animation once as an immutable tree, and a timeline plays it on any element, in plain TypeScript or with the React, Vue, Solid and Svelte bindings.
| Package | Purpose |
|---|---|
@freestylejs/ani-core | The engine: animation nodes, timelines, clock. |
@freestylejs/ani-react | React hooks. |
@freestylejs/ani-vue | Vue composables. |
@freestylejs/ani-solid | Solid primitives. |
@freestylejs/ani-svelte | Svelte actions and stores. |
@freestylejs/ani-codemod | Migrates ANI 1.x code to ANI 2. |
npm install @freestylejs/ani-core
import * as a from '@freestylejs/ani-core'
// 1. Describe the animation. Every duration is in seconds.
const reveal = a.parallel([
a.ani({ to: { opacity: 1 }, duration: 0.3 }),
a.ani({ to: { translateY: 0 }, duration: 0.4 }),
])
// 2. Create a timeline and bind it to an element.
const timeline = a.rafTimeline(reveal)
const card = document.createElement('div')
const unbind = timeline.bind(card)
// 3. Play it. The promise never rejects.
timeline.play({ from: { opacity: 0, translateY: 16 } }).then((result) => {
// result is 'ended', 'interrupted', 'skipped', 'reset' or 'disposed'
unbind()
timeline.dispose()
})
Animations honor prefers-reduced-motion by default: the timeline jumps to its end state. Pass { reducedMotion: 'ignore' } to rafTimeline for essential motion.
Visit ani to read the documentation.
ANI 2.0 removes the 1.x API and measures every delay in seconds. Run the codemod once on your 1.x code (commit before you do), read every warning it prints, then follow the migration guide.
npx @freestylejs/ani-codemod src
Please read contributing guide.
Licensed under the MIT License.