メインコンテンツまでスキップ

デザイントークン

デザイントークンは、アプリケーションのすべてのビジュアル値を運ぶセマンティック変数です。コンポーネントはそれらを参照し、テーマはそれらをオーバーライドし、何もハードコードされません。

トークンのコントラクト

すべてのトークンは --st- プレフィックス付きの CSS カスタムプロパティで、すべてのトークン名は @neotavern/theme-sdk のバージョン管理されたコントラクトの一部です。ホストはライトモードとダークモードのデフォルト値を同梱するため、テーマが何も定義しなくてもすべてのトークンは常に解決されます。

正規のトークングループは次のとおりです:

  • テキスト色color-text-primarycolor-text-secondarycolor-text-mutedcolor-text-inversecolor-text-link
  • サーフェスcolor-surface-primarycolor-surface-secondarycolor-surface-tertiarycolor-surface-overlaycolor-surface-canvascolor-surface-elevated
  • アクセントとステータスcolor-accentcolor-accent-hovercolor-accent-textcolor-accent-softcolor-accent-soft-textcolor-bordercolor-border-strongcolor-successcolor-warningcolor-dangercolor-info
  • チャットメッセージのマークダウンcolor-message-quotecolor-message-emphasiscolor-message-codecolor-message-code-bg
  • タイポグラフィfont-uifont-monofont-size-2xs から font-size-2xl まで、line-height-bodyfont-weight-normal から font-weight-bold まで。
  • 間隔space-2xs から space-3xl まで。
  • 角丸と境界線radius-controlradius-cardradius-overlayradius-panelradius-roundradius-insetborder-width
  • 浮揚(エレベーション)shadow-cardshadow-softshadow-focusshadow-overlay
  • レイヤー(z-index)layer-baselayer-raisedlayer-panellayer-plugin-overlaylayer-plugin-chromelayer-dropdownlayer-modallayer-notification
  • モーションmotion-duration-fastmotion-duration-normalmotion-duration-slowmotion-easing-standardeffect-glass-blur
  • コントロールサイズcontrol-heightcontrol-height-largecontrol-height-smcontrol-height-xscontrol-height-2xscontrol-hit-minswitch-widthswitch-heightswitch-thumb-sizemenu-min-widthdialog-max-widthdialog-max-heighttextarea-min-heightspinner-size
  • パネルとコンテンツのサイズsize-panel-max-heightsize-content-max-heightsize-chat-column-max
  • ビューポートの制限overlay-width-limitoverlay-height-limitdialog-sheet-height
  • スクロールバーscrollbar-widthscrollbar-radiusscrollbar-track-bgscrollbar-thumb-bgscrollbar-thumb-hover-bgscrollbar-fade-durationscrollbar-fade-easingscrollbar-hide-delay
  • アプリシェルのサイズshell-rail-widthshell-panel-widthshell-panel-min-widthshell-panel-max-width
  • チャットキャンバスchat-wallpaper-imagechat-wallpaper-positionchat-wallpaper-sizechat-wallpaper-overlaychat-wallpaper-blurcustom-wallpaper-overlay-alpha
  • チャットのタイポグラフィ指標chat-markdown-column-widthchat-message-blockchat-message-inline
  • ユーザー調整可能なノブcustom-glass-blurcustom-ui-opacity

トークンのオーバーライド

テーマは名前の任意のサブセットをオーバーライドします。値は検証されます: 安全な非空の CSS 値でなければならず、{}; などの構造は拒否されます。

{
"tokens": {
"dark": {
"color-accent": "#e38a62",
"shadow-card": "0 1px 2px rgba(0, 0, 0, 0.35)"
}
}
}

ユーザーがチャット背景を選ぶと、アプリケーションはワークスペースルートに壁紙画像用のスコープ付きカスタムプロパティを設定します。位置、サイズ、オーバーレイ、ぼかしはテーマのトークンのままです。

解決ルール

トークンはこの順序で解決され、後者が勝ちます:

  1. アクティブモードの組み込みデフォルト。
  2. 親テーマチェーン。ルートが先。
  3. テーマ自体。

ダークモードは、ダークのオーバーライドがない場合、テーマのライトトークンにフォールバックするため、ライトのみのテーマでもダークモードで動作します。@neotavern/theme-sdkresolveTokensbuildThemeVariables 関数がこれを実装し、ホストは結果を document.documentElement の CSS 変数として書き込みます。

コンポーネントがハードコードしてはならないもの

スタイルコントラクトは組み込み UI のどこでもハードコード値を禁止し、テーマが依存してはならないものにも同じルールが適用されます:

  • 数値の font-weight、px 単位の font-size、生の px 単位の border-radius
  • 数値の z-indexlayer-* トークンを使用してください。
  • 40px44px52px32px36px などのコントロールサイズ。
  • アクセシビリティ設定レイヤーを除くテーマ CSS の !important
  • レイアウトルール: 座標、グリッドとフレックススキーム、ブレークポイント、領域の順序はトークンコントラクトの一部ではありません。ブレークポイントはレジストリ(VIEWPORT_BREAKPOINTSCONTAINER_BREAKPOINTS)から来て、シェル領域の移動は v1 の範囲外です。

カードリストのグリッドスキームなどのコンテンツジオメトリは明示的な例外です: トークンコントラクトでカバーされません。テーマが再スタイリングに必要なものはすべて、トークン、フック、宣言型シェルレイアウトを通じて利用できます。生成されたテーマ SDK リファレンス は正確な TokenName 一覧を文書化しています。