Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/release-notes/v0.13.0.md

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions .github/workflows/live-site-parity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ jobs:
- name: Install dependencies
run: npm ci --prefer-offline --fetch-retries=3 --fetch-retry-mintimeout=1000 --fetch-retry-maxtimeout=5000 --fetch-timeout=30000

# dist/ is not tracked. The check compares the live runtime bytes with
# this build of the same commit (tests/workflow-build-order.mjs).
- name: Build distributions
run: npm run build

- name: Verify live-site parity
env:
KT_EXPECTED_BUILD: ${{ github.sha }}
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/release-mcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ jobs:
set -o pipefail
node scripts/retry-command.mjs npm run lint 2>&1 | tee -a release-mcp.log

# dist/ is not tracked; the feature contract below imports the build
# (tests/workflow-build-order.mjs). The build must leave tracked files
# unchanged, so the MCP tarball packed later is exactly the tagged source.
- name: Build distributions
run: |
set -o pipefail
node scripts/retry-command.mjs npm run build 2>&1 | tee -a release-mcp.log
git diff --exit-code --stat

- name: Verify the integration map and generated artefacts
run: |
set -euo pipefail
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/supply-chain.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ jobs:
mkdir -p artifacts
npm sbom --sbom-format=spdx > artifacts/kineto-sbom.spdx.json

# dist/ is not tracked; the package checks below read what this builds.
# tests/workflow-build-order.mjs keeps the build ahead of them.
- name: Build the package files
if: always()
run: npm run build

- name: Check package surface
if: always()
run: |
Expand Down
23 changes: 14 additions & 9 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion FEATURE_CONTRACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 공개 범위

- 라이브러리 버전: `0.12.3`
- 라이브러리 버전: `0.13.0`
- 기능 계약 버전: `1.8.0`
- 동작 계약 버전: `1.2.0`
- 공개 모듈: 정확히 **55개**
Expand Down
2 changes: 1 addition & 1 deletion OWNER_REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 현재 계약

- 라이브러리 버전: `0.12.3`
- 라이브러리 버전: `0.13.0`
- 요구사항 계약 버전: `3.3.0`
- 고정 요구사항: **50개**
- 변경 정책: 소유자의 명시적 승인 없이 요구사항을 제거하거나 의미를 바꿀 수 없습니다.
Expand Down
2 changes: 1 addition & 1 deletion ai/cursor/kineto.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ globs: ["**/*.tsx", "**/*.jsx", "**/*.vue", "**/*.html", "**/*.astro", "**/*.sve
alwaysApply: false
---

# Kineto rules for coding agents (v0.12.3)
# Kineto rules for coding agents (v0.13.0)

Kineto (`@dong-gri/kineto`) is a vanilla-first motion/effects library: 55 modules activated by `data-kt-*` attributes or `Kineto.create()`, with React/Vue/jQuery adapters. Use these rules whenever you generate UI with any component library (shadcn/ui, Bootstrap, MUI, Mantine, Chakra, Ant Design, daisyUI, Nuxt UI, PrimeVue, Vuetify) or from a Figma frame.

Expand Down
2 changes: 1 addition & 1 deletion ai/kineto.rules.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Kineto rules for coding agents (v0.12.3)
# Kineto rules for coding agents (v0.13.0)

Kineto (`@dong-gri/kineto`) is a vanilla-first motion/effects library: 55 modules activated by `data-kt-*` attributes or `Kineto.create()`, with React/Vue/jQuery adapters. Use these rules whenever you generate UI with any component library (shadcn/ui, Bootstrap, MUI, Mantine, Chakra, Ant Design, daisyUI, Nuxt UI, PrimeVue, Vuetify) or from a Figma frame.

Expand Down
6 changes: 3 additions & 3 deletions demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

<div data-kt-cursor="dot" data-kt-global="true" data-kt-dot-size="7" data-kt-follower-size="44" data-kt-speed="0.16" data-kt-color="var(--accent)" data-kt-border-width="1.5" data-kt-border-color="var(--accent)" data-kt-hover-effect="dot" data-kt-hover-dot-size="26"></div>
<header class="site-header">
<button class="brand" type="button" id="brand-home" aria-label="맨 위로 이동" data-demo-i18n-aria-label="맨 위로 이동"><svg class="brand-mark" viewBox="0 0 32 32" aria-hidden="true"><defs><linearGradient id="kt-grad-h" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ff5b1c"/><stop offset="1" stop-color="#ffd166"/></linearGradient></defs><rect width="32" height="32" rx="9" fill="url(#kt-grad-h)"/><path d="M8 22 C 12.5 22, 13.5 10, 24 10" fill="none" stroke="#fff" stroke-width="3.3" stroke-linecap="round"/><circle cx="24" cy="10" r="3.4" fill="#fff"/><circle cx="8" cy="22" r="2.3" fill="#fff" opacity="0.55"/><circle cx="4.7" cy="23.4" r="1.5" fill="#fff" opacity="0.3"/></svg>Kineto <span data-kt-version>0.12.3</span></button>
<button class="brand" type="button" id="brand-home" aria-label="맨 위로 이동" data-demo-i18n-aria-label="맨 위로 이동"><svg class="brand-mark" viewBox="0 0 32 32" aria-hidden="true"><defs><linearGradient id="kt-grad-h" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ff5b1c"/><stop offset="1" stop-color="#ffd166"/></linearGradient></defs><rect width="32" height="32" rx="9" fill="url(#kt-grad-h)"/><path d="M8 22 C 12.5 22, 13.5 10, 24 10" fill="none" stroke="#fff" stroke-width="3.3" stroke-linecap="round"/><circle cx="24" cy="10" r="3.4" fill="#fff"/><circle cx="8" cy="22" r="2.3" fill="#fff" opacity="0.55"/><circle cx="4.7" cy="23.4" r="1.5" fill="#fff" opacity="0.3"/></svg>Kineto <span data-kt-version>0.13.0</span></button>
<div class="header-actions"><button class="btn icon-btn" id="sitemap-btn" type="button" aria-label="사이트맵" aria-haspopup="dialog" data-demo-i18n-aria-label="사이트맵"><i class="ph-bold ph-squares-four" aria-hidden="true"></i></button><button class="theme-switch" id="theme" role="switch" aria-checked="false" aria-label="테마 전환" data-demo-i18n-aria-label="테마 전환"><i class="ph-fill ph-sun ts-sun" aria-hidden="true"></i><i class="ph-fill ph-moon ts-moon" aria-hidden="true"></i><span class="ts-knob" aria-hidden="true"></span></button><select class="btn" id="lang" aria-label="언어 선택" data-demo-i18n-aria-label="언어 선택"><option value="ko">한국어</option><option value="en">English</option><option value="ja">日本語</option><option value="zh-CN">简体中文</option><option value="zh-TW">繁體中文</option><option value="ru">Русский</option><option value="it">Italiano</option></select></div>
<div class="top-progress" data-kt-progress></div>
</header>
Expand Down Expand Up @@ -396,7 +396,7 @@ <h3>Horizontal scroll section</h3><p>화면 중앙을 고정하고 세로 스크
<article data-demo-home="magnetic" data-demo-module="magnetic" class="card"><h3>Magnetic button</h3><p>자석 반응과 클릭 리플을 한 버튼에 함께 적용합니다.</p><div class="demo-stage magnetic-zone"><button class="magnetic-button" data-kt-magnetic data-kt-strength="0.45" data-kt-radius="120" data-kt-ripple data-kt-color="rgba(255,255,255,.5)">Pull me</button></div></article>
<article data-demo-module="magnetic" class="card"><h3>Dock — 아이콘 확대</h3><p>가까운 아이콘이 커지고 나머지는 자리를 내주며 밀려납니다.</p><div class="demo-stage dock-stage"><div class="kt-dock" data-kt-magnetic="dock" data-kt-max-scale="1.9" data-kt-range="130" data-kt-lift="14"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div></div></article>
<article data-demo-home="gesture" class="card"><h3>Hover / Press 제스처</h3><p>호버·누름·키보드 입력에 스프링으로 반응합니다.</p><div class="demo-stage demo-css-85778c4c"><button class="btn primary demo-css-9162a245" data-kt-gesture data-kt-hover-scale="1.14" data-kt-tap-scale="0.94" data-kt-origin="center">Hover & Press</button></div></article>
<article data-demo-module="gesture" class="card"><h3>Pull to refresh</h3><p>맨 위에서 아래로 당기면 저항이 걸리고, 놓으면 새로고침합니다.</p><div class="demo-stage u-p0"><div class="pull-list demo-scrollbox demo-list" data-kt-gesture="pull" data-kt-preset="pull" data-kt-threshold="64"><div>새 메시지 3건</div><div>배포 성공 — v0.12.3</div><div>디자인 리뷰 오후 3시</div><div>아이콘 세트 교체</div><div>접근성 체크리스트</div><div>릴리스 노트 초안</div><div>QA 회귀 테스트</div><div>모션 가이드</div></div></div></article>
<article data-demo-module="gesture" class="card"><h3>Pull to refresh</h3><p>맨 위에서 아래로 당기면 저항이 걸리고, 놓으면 새로고침합니다.</p><div class="demo-stage u-p0"><div class="pull-list demo-scrollbox demo-list" data-kt-gesture="pull" data-kt-preset="pull" data-kt-threshold="64"><div>새 메시지 3건</div><div>배포 성공 — v0.13.0</div><div>디자인 리뷰 오후 3시</div><div>아이콘 세트 교체</div><div>접근성 체크리스트</div><div>릴리스 노트 초안</div><div>QA 회귀 테스트</div><div>모션 가이드</div></div></div></article>
<article data-demo-home="drag" class="card"><h3>Drag (드래그)</h3><p>관성·경계·스냅백·방향키 이동을 지원합니다.</p><div class="demo-stage demo-css-f502fa86"><div data-kt-drag data-kt-bounds="parent" data-kt-inertia="true" tabindex="0" class="demo-css-b24675b4">DRAG</div></div></article>
<article data-demo-home="mouseParallax" class="card"><h3>Mouse Parallax</h3><p>포인터 위치에 따라 요소를 X·Y축으로 이동합니다.</p><div class="demo-stage tall" data-kt-mouse-parallax data-kt-max-x="22" data-kt-max-y="16"><div class="big-text" data-kt-mouse-speed="1">MOVE</div></div></article>
<article class="card"><h3>Compass</h3><p>바늘이 포인터를 향하도록 회전합니다.</p><div class="demo-stage tall"><div class="demo-css-755b1a34"><span class="demo-css-aefd82d2">N</span><span class="demo-css-7ce83176">S</span><span class="demo-css-16f5d51c">W</span><span class="demo-css-b66dec2c">E</span><div data-kt-mouse-parallax="compass" data-kt-rotate-offset="0" data-kt-smoothing="0.12" data-kt-global="true" class="demo-css-d65b26d6"><svg viewBox="0 0 96 96" class="u-fill"><polygon points="48,10 54,48 48,58 42,48" fill="var(--accent)"/><polygon points="48,86 54,48 48,38 42,48" fill="var(--muted)" opacity=".45"/><circle cx="48" cy="48" r="4.5" fill="var(--text)"/></svg></div></div></div></article>
Expand Down Expand Up @@ -473,7 +473,7 @@ <h3>Horizontal scroll section</h3><p>화면 중앙을 고정하고 세로 스크
<p class="footer-tagline">HTML 속성과 JavaScript API로 사용하는 웹 모션 라이브러리입니다.<br><span data-kt-module-count>55</span>개 모듈에서 필요한 기능만 골라 사용할 수 있습니다.</p>
</div>
<nav class="footer-col footer-links" aria-label="푸터 탐색"><p class="footer-label">Explore</p><div><a href="https://github.com/catgarret/kineto" target="_blank" rel="noopener">GitHub <span aria-hidden="true">↗</span></a><a href="#module-index">Module Index</a><a href="#counter">Demos</a></div></nav>
<div class="footer-col footer-build"><p class="footer-label">Project</p><a class="footer-author" href="https://dongri.me" target="_blank" rel="noopener"><span>Made by</span><strong>dongri.me</strong></a><dl class="footer-stats"><div><dt>Version</dt><dd data-kt-version>0.12.3</dd></div><div><dt>Modules</dt><dd data-kt-module-count>55</dd></div><div class="footer-stat-build"><dt>Build</dt><dd data-kt-build>dev</dd></div></dl></div>
<div class="footer-col footer-build"><p class="footer-label">Project</p><a class="footer-author" href="https://dongri.me" target="_blank" rel="noopener"><span>Made by</span><strong>dongri.me</strong></a><dl class="footer-stats"><div><dt>Version</dt><dd data-kt-version>0.13.0</dd></div><div><dt>Modules</dt><dd data-kt-module-count>55</dd></div><div class="footer-stat-build"><dt>Build</dt><dd data-kt-build>dev</dd></div></dl></div>
</div>
<div class="footer-fine"><span class="footer-fine-copy">&copy; 2026 Kineto · MIT License<br><small>AI 바이브코딩으로 만들었습니다</small></span></div>
</div></footer>
Expand Down
2 changes: 1 addition & 1 deletion demo/variant-catalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/* global window */
window.KINETO_VARIANT_CATALOG = Object.freeze({
"schemaVersion": "1.0.0",
"libraryVersion": "0.12.3",
"libraryVersion": "0.13.0",
"moduleCount": 38,
"variantCount": 228,
"capabilities": {
Expand Down
9 changes: 7 additions & 2 deletions docs/AI-HANDOFF.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ distinct positions, gesture-tail ownership and final-position assertions.
## Current state

- Package: `@dong-gri/kineto`
- Current source version: `0.12.3`
- Current source version: `0.13.0`
- Latest published npm version at the time of this handoff: `0.12.2` (tag `v0.12.2`, GitHub Release and demo deployed; verify with `npm view @dong-gri/kineto version`)
— the entry-point work in `[Unreleased]` is planned as the minor `0.13.0`
- Public surface: 55 modules and 31 Core APIs
Expand Down Expand Up @@ -262,7 +262,12 @@ or a tag; release approval remains separate.
keep loading logic out of `src/core.js` so `/core` and `/all` do not pay for it.
Adapters import `@dong-gri/kineto/all`, not the deprecated default.
- **`dist/` is build output and is not committed** (2026-09-27). Build before
running tests locally; CI, Pages, Release and the backup sync all build.
running tests locally. Every workflow job that reads `dist/` runs
`npm run build` first — CI, Pages, Release, the MCP release, the weekly
supply-chain audit and live-site parity check (the last three were missed at
first and failed their next run), and the backup sync in the backup site's own
repository. `tests/workflow-build-order.mjs` checks the order of every job on
every PR: a new job or step that reads `dist/` must come after the build.
- **Visual effects can wait for the viewport**: with
`Kineto.config({ defer: true })` (the demo turns it on for touch devices)
a module that declares `defer: true` is created only near the screen
Expand Down
4 changes: 2 additions & 2 deletions docs/CONTEXT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Kineto v0.12.3 — 개발·유지보수 컨텍스트
# Kineto v0.13.0 — 개발·유지보수 컨텍스트

## 프로젝트 목적

Expand All @@ -8,7 +8,7 @@ Kineto는 `dongri.me`의 픽셀 모자이크 실험에서 시작한 인터랙션

## 현재 기준

- 버전: `0.12.3`
- 버전: `0.13.0`
- 공개 모듈: 55개
- Core API: 31개
- 소유자 고정 요구사항: 52개
Expand Down
Loading
Loading