Installation
色・スペーシング・タイポグラフィなどのデザイン値を、どの環境でも同じように使えるトークンパッケージ。
Install
@7onic-ui/tokens
# npm
npm install @7onic-ui/tokens
# yarn
yarn add @7onic-ui/tokens
# pnpm
pnpm add @7onic-ui/tokensImport
CSS
CSS変数のみ@import '@7onic-ui/tokens/css/all.css';個別インポート
@import '@7onic-ui/tokens/css/variables.css';
@import '@7onic-ui/tokens/css/themes/light.css';
@import '@7onic-ui/tokens/css/themes/dark.css';<html class="dark"> を追加すると、セマンティックカラーが自動的にダークテーマに切り替わります。
Tailwind v4
設定ファイル不要@import "tailwindcss";
@import '@7onic-ui/tokens/tailwind/v4.css';個別インポート
@import "tailwindcss";
@import '@7onic-ui/tokens/css/variables.css';
@import '@7onic-ui/tokens/css/themes/light.css';
@import '@7onic-ui/tokens/css/themes/dark.css';
@import '@7onic-ui/tokens/tailwind/v4-theme.css';v4-theme.css がないとbg-primary や duration-fast 等のクラスが使えません。
Tailwind v3
CSS + プリセット@tailwind base;
@tailwind components;
@tailwind utilities;
@import '@7onic-ui/tokens/css/all.css';個別インポート
@tailwind base;
@tailwind components;
@tailwind utilities;
@import '@7onic-ui/tokens/css/variables.css';
@import '@7onic-ui/tokens/css/themes/light.css';
@import '@7onic-ui/tokens/css/themes/dark.css';module.exports = {
presets: [
require('@7onic-ui/tokens/tailwind/v3-preset')
],
}プリセットはtheme.extend を使用するため、既存のTailwindクラスはそのまま維持されます。 ※ v3でもセマンティックカラーの opacity modifier(bg-primary/50 等)に対応しています。RGB チャンネル変数を使用してアルファ値を適用します。
JavaScript / TypeScript
静的値import { colors, spacing, typography } from '@7onic-ui/tokens'ESM(.mjs)と CJS(.js)の両方に対応。TypeScript型定義も同梱されています。
Usage Reference
使用可能なトークンと形式を確認してください。
Colors
--color-primarybg-primarycolors.primary[600]--color-secondarybg-secondarycolors.secondary[600]--color-successbg-successcolors.green[600]--color-warningbg-warningcolors.yellow[500]--color-errorbg-errorcolors.red[600]--color-background-mutedbg-background-mutedCSS only ※--color-texttext-foregroundCSS only ※--color-text-mutedtext-text-mutedCSS only ※--color-primary-texttext-primary-foregroundCSS only ※--color-borderborder-borderCSS only ※| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --color-primary | bg-primary | colors.primary[600] |
| --color-secondary | bg-secondary | colors.secondary[600] |
| --color-success | bg-success | colors.green[600] |
| --color-warning | bg-warning | colors.yellow[500] |
| --color-error | bg-error | colors.red[600] |
| --color-background-muted | bg-background-muted | CSS only ※ |
| --color-text | text-foreground | CSS only ※ |
| --color-text-muted | text-text-muted | CSS only ※ |
| --color-primary-text | text-primary-foreground | CSS only ※ |
| --color-border | border-border | CSS only ※ |
Typography
--font-size-2xs (11px)text-2xsfontSize["2xs"]--font-size-xs (12px)text-xsfontSize.xs--font-size-sm (13px)text-smfontSize.sm--font-size-md (14px)text-mdfontSize.md--font-size-base (16px)text-basefontSize.base--font-size-lg (18px)text-lgfontSize.lg--font-size-xl (20px)text-xlfontSize.xl--font-size-2xl (24px)text-2xlfontSize["2xl"]| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --font-size-2xs (11px) | text-2xs | fontSize["2xs"] |
| --font-size-xs (12px) | text-xs | fontSize.xs |
| --font-size-sm (13px) | text-sm | fontSize.sm |
| --font-size-md (14px) | text-md | fontSize.md |
| --font-size-base (16px) | text-base | fontSize.base |
| --font-size-lg (18px) | text-lg | fontSize.lg |
| --font-size-xl (20px) | text-xl | fontSize.xl |
| --font-size-2xl (24px) | text-2xl | fontSize["2xl"] |
Spacing
--spacing-1 (4px)p-1 m-1 gap-1spacing[1]--spacing-2 (8px)p-2 m-2 gap-2spacing[2]--spacing-4 (16px)p-4 m-4 gap-4spacing[4]--spacing-6 (24px)p-6 m-6 gap-6spacing[6]--spacing-8 (32px)p-8 m-8 gap-8spacing[8]| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --spacing-1 (4px) | p-1 m-1 gap-1 | spacing[1] |
| --spacing-2 (8px) | p-2 m-2 gap-2 | spacing[2] |
| --spacing-4 (16px) | p-4 m-4 gap-4 | spacing[4] |
| --spacing-6 (24px) | p-6 m-6 gap-6 | spacing[6] |
| --spacing-8 (32px) | p-8 m-8 gap-8 | spacing[8] |
Duration
--duration-fast (100ms)duration-fastduration.fast--duration-micro (150ms)duration-microduration.micro--duration-normal (200ms)duration-normalduration.normal--duration-slow (300ms)duration-slowduration.slow--duration-slower (400ms)duration-slowerduration.slower| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --duration-fast (100ms) | duration-fast | duration.fast |
| --duration-micro (150ms) | duration-micro | duration.micro |
| --duration-normal (200ms) | duration-normal | duration.normal |
| --duration-slow (300ms) | duration-slow | duration.slow |
| --duration-slower (400ms) | duration-slower | duration.slower |
Radius / Shadow / Z-Index
--radius-{sm|md|lg|...}rounded-{sm|md|lg|...}borderRadius.*--shadow-{xs|sm|md|lg|xl}shadow-{xs|sm|md|lg|xl}shadow.*--z-index-{modal|tooltip|...}z-{modal|tooltip|...}zIndex.*| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --radius-{sm|md|lg|...} | rounded-{sm|md|lg|...} | borderRadius.* |
| --shadow-{xs|sm|md|lg|xl} | shadow-{xs|sm|md|lg|xl} | shadow.* |
| --z-index-{modal|tooltip|...} | z-{modal|tooltip|...} | zIndex.* |
Custom Utilities
--icon-size-{xs|sm|md|lg|xl}icon-{xs|sm|md|lg|xl}iconSize.*--scale-{50|75|pressed}scale-{50|75|pressed}scale.*--opacity-{0~100}opacity-{0~100}opacity.*--easing-{ease|ease-in|...}ease-{in|out|in-out}easing.*--color-focus-ringfocus-ringCSS only ※@keyframes {name}animate-{name}CSS only ※| CSS Variable | Tailwind | JS / TS |
|---|---|---|
| --icon-size-{xs|sm|md|lg|xl} | icon-{xs|sm|md|lg|xl} | iconSize.* |
| --scale-{50|75|pressed} | scale-{50|75|pressed} | scale.* |
| --opacity-{0~100} | opacity-{0~100} | opacity.* |
| --easing-{ease|ease-in|...} | ease-{in|out|in-out} | easing.* |
| --color-focus-ring | focus-ring | CSS only ※ |
| @keyframes {name} | animate-{name} | CSS only ※ |
--spacing-4等)は固定値。セマンティック(--color-primary等)はlight/darkテーマで切り替わります。Package Contents
用途に応じて必要なファイルをインポートします。すべてnpx sync-tokensで自動生成されます。
@7onic-ui/tokens9配布ファイル + CLI + ソース
css/all.css推奨css/variables.csscss/themes/light.csscss/themes/dark.csstailwind/v4.css推奨tailwind/v3-preset.jstailwind/v4-theme.cssjs/index.jsCJSjs/index.mjsESMtypes/index.d.tsTypeScript 型json/tokens.jsonフラット JSONcli/sync.jsnpx sync-tokensllms.txtAI Integrationfigma-tokens.jsonSSOT唯一の編集対象ファイル
figma-tokens.json を編集 → npx sync-tokens で9ファイルすべてが自動再生成されます。
Token Sync
Figmaでデザインを更新 → CLIひとつで全ファイルに反映
Figma
デザイン編集
JSON
エクスポート
CLI
sync-tokens
Output
9ファイル
Figma
デザインを編集
JSON
トークンをエクスポート
CLI
npx sync-tokens を実行
Output
9ファイルを自動生成
$ npx sync-tokens
CLI Options
| Option | Description |
|---|---|
| --dry-run | 実際のファイル書き込みなしで変更内容をプレビュー |
| --force | 破壊的変更の確認プロンプトをスキップ |
| --input <path> | figma-tokens.json のパス(デフォルト: ./figma-tokens.json) |
| --output <dir> | 出力ディレクトリ(デフォルト: ./) |
Generated Files
CSS
variables.css
light.css
dark.css
Tailwind
v3-preset.js
v4-theme.css
JavaScript
index.js
index.mjs
Types + JSON
index.d.ts
tokens.json
Breaking Change Detection
既存のvariables.css がある場合、sync-tokens は自動的に変更を検出し、差分を表示します。
Diff表示 — 追加・変更・削除・リネームを色分けで視覚化
確認プロンプト — 破壊的変更(削除・リネーム)がある場合、実行前に確認を要求
後方互換エイリアス — リネーム検出時に css/deprecated.css を自動生成。既存の参照が壊れません。
--dry-run で事前に差分だけ確認、--force で確認プロンプトをスキップできます。
Tokens Studio セットアップ
FigmaコミュニティからTokens Studioプラグインをインストール
リポジトリの figma-tokens.json をプラグインにインポート
GitHub同期を設定するとデザインとコードのトークンを自動同期(オプション)