テーマカスタマイズガイド

DayFlow カレンダーの見た目は、--df-color-* という名前空間付き CSS カスタムプロパティで管理されています。すべてのトークンは @layer df-theme の内側で定義されているため、ホストアプリケーションは !important を使わずに上書きできます。Tailwind を使っていない環境でも同様です。

DayFlow の共有基盤 CSS は、トークン、コンポーネント基礎スタイル、そして df-fill-primarydf-focus-ring などの df-* セマンティック補助クラスの単一ソースです。

目次

カレンダータイプのカスタムカラー

基本設定

1 つの calendarId ごとにライト/ダークの配色を定義できます。

const calendar = useCalendarApp({
  calendars: [
    {
      id: 'personal',
      name: '個人',
      colors: {
        lineColor: '#0891b2',
        eventColor: '#cffafe',
        eventSelectedColor: '#a5f3fc',
        textColor: '#164e63',
      },
      darkColors: {
        lineColor: '#22d3ee',
        eventColor: '#164e63',
        eventSelectedColor: '#083344',
        textColor: '#cffafe',
      },
    },
  ],
});

各色の役割

  • lineColor:イベントカード左側のアクセントやボーダー
  • eventColor:イベント本体の背景
  • eventSelectedColor:選択されたイベントの背景
  • textColor:タイトルや時刻テキスト

ブランドカラーを当てはめる

const brandPalette = {
  lineColor: '#6366f1',
  eventColor: '#e0e7ff',
  eventSelectedColor: '#c7d2fe',
  textColor: '#312e81',
};

const brandDarkPalette = {
  lineColor: '#a5b4fc',
  eventColor: '#312e81',
  eventSelectedColor: '#1e1b4b',
  textColor: '#e0e7ff',
};

ヘルパーで色生成

interface ColorSet {
  lineColor: string;
  eventColor: string;
  eventSelectedColor: string;
  textColor: string;
}

export const buildLightColors = (base: string): ColorSet => ({
  lineColor: base,
  eventColor: lighten(base, 0.88),
  eventSelectedColor: lighten(base, 0.8),
  textColor: darken(base, 0.45),
});

export const buildDarkColors = (base: string): ColorSet => ({
  lineColor: lighten(base, 0.25),
  eventColor: darken(base, 0.55),
  eventSelectedColor: darken(base, 0.65),
  textColor: lighten(base, 0.8),
});

CSS 変数リファレンス

DayFlow のすべてのテーマトークンは --df-color- プレフィックスを持ち、ホストアプリの変数との衝突を防ぎます。

変数用途
--df-color-backgroundカレンダーの背景
--df-color-foreground主テキスト色
--df-color-hoverホバー時の背景
--df-color-borderボーダーと区切り線
--df-color-cardカード・パネルの背景
--df-color-card-foregroundカード内テキスト色
--df-color-muted控えめな背景エリア
--df-color-muted-foreground補助テキスト色
--df-color-primary主アクセント(ボタン、選択状態など)
--df-color-primary-foregroundプライマリ背景上のテキスト
--df-color-secondaryセカンダリアクセント
--df-color-secondary-foregroundセカンダリ背景上のテキスト
--df-color-destructive削除など破壊的アクション
--df-color-destructive-foregroundデストラクティブ背景上のテキスト

セマンティック補助クラス

CSS 変数に加えて、DayFlow はテーマ連動の df-* セマンティック補助クラスも公開しています。slot 内の独自 UI やプラグインコンポーネントを、内蔵 UI と同じ見た目に揃えたいときに便利です。

クラス名意味
df-fill-primaryプライマリ塗りつぶし面 + 自動前景文字色
df-fill-secondaryセカンダリ塗りつぶし面 + 自動前景文字色
df-fill-destructive破壊的アクション面 + 自動前景文字色
df-tint-primary控えめなプライマリ選択ティント
df-hover-primaryプライマリ系ホバー状態
df-hover-primary-solid塗りつぶしプライマリボタン用ホバー状態
df-text-primaryプライマリ文字色
df-border-primaryプライマリ border 色
df-ring-primaryプライマリ ring トークン
df-focus-ring:focus 時にプライマリ border と ring を適用

テーマ調整では、これらの df-* クラスまたは --df-color-* を優先し、bg-primarytext-primaryhover:bg-primary/90 などの旧来の内部 Tailwind セマンティック名には依存しないでください。

上書き方法

方法 1 — コンテナへの直接指定(全環境対応)

.df-calendar-container に変数を直接設定します。この規則はどの @layer にも属さないため、ライブラリのデフォルト値に対して常に優先されます。

実際には、.df-calendar-container.df-portal を一緒に対象にすることが多くなります。

  • .df-calendar-container はカレンダー本体のルートコンテナです
  • .df-portal は DayFlow が document.body 配下に portal 描画する浮動 UI のルートクラスで、ダイアログ、ドロップダウン、一部の picker パネルなどに使われます

.df-calendar-container だけを上書きすると、本体は新しいテーマになっても portal ベースの浮動 UI はデフォルトのトークンを使い続けることがあります。

/* styles/globals.css */
.df-calendar-container,
.df-portal {
  --df-color-primary: #6366f1;
  --df-color-background: #f9fafb;
  --df-color-border: #e0e7ff;
}

/* ダークモード — 祖先要素に .dark クラスがあるとき */
.dark .df-calendar-container,
.dark .df-portal {
  --df-color-primary: #a5b4fc;
  --df-color-background: #1e1e2e;
  --df-color-border: #312e81;
}

ほとんどのプロジェクトにはこの方法を推奨します。変数はカレンダー内部にのみ影響し、外部には漏れません。

Tailwind v4 との連携

Tailwind v4 はすべて CSS で設定します。tailwind.config.js は不要です。DayFlow が配布する CSS には共有基盤スタイルが含まれているため、テーマトークンと df-* セマンティッククラスはインポート直後から利用できます。

CSS ファイルの選択

DayFlow は 2 種類の CSS バンドルを提供します。

ファイル内容使用場面
styles.cssTailwind preflight(CSS リセット)を含む完全バンドルTailwind を使わない場合
styles.components.cssコンポーネントスタイルのみ、CSS リセットなしすでに Tailwind を使用している場合

最小構成

/* app.css — Tailwind プロジェクト向け */
@import '@dayflow/core/dist/styles.components.css';
@import 'tailwindcss';

Tailwind を使用していない場合は、完全バンドルをインポートしてください。

/* app.css — Tailwind を使わないプロジェクト向け */
@import '@dayflow/core/dist/styles.css';

ダークモード

DayFlow は祖先要素(<html> を含む)の .dark クラスを参照します。JavaScript で切り替えてください。

document.documentElement.classList.toggle('dark', isDark);

クラスなしでもシステム設定のダークモードが自動的に適用されます。

Tailwind v4 で theme.mode を使う場合

DayFlow が配布する CSS には、theme.mode に必要な .dark variant がすでに含まれています。Tailwind v4 プロジェクトでは、@dayflow/core/dist/styles.components.css を読み込むだけで、DayFlow 自身は <html> 上の .dark クラス切り替えに追従します。

アプリ側で自分の Tailwind dark: ユーティリティも同じクラス切り替えに合わせたい場合だけ、CSS エントリーファイルに次を追加してください:

@import '@dayflow/core/dist/styles.components.css';
@import 'tailwindcss';

/* 任意: アプリ側の Tailwind dark: ユーティリティにも必要な場合のみ */
@variant dark (.dark &);

この設定がなくても DayFlow は theme.mode で正しく切り替わります。影響を受けるのは、アプリ側で書いた Tailwind dark: ユーティリティが Tailwind 既定のメディアクエリ挙動のままになる点だけです。

実践ガイド

通常は次の優先順位でテーマを調整するのがおすすめです。

  1. .df-calendar-container.df-portal、または自前のラッパーで --df-color-* を上書きする
  2. カスタム slot / プラグイン UI で df-fill-primarydf-focus-ring などの df-* 補助クラスを再利用する
  3. テーマではなくレイアウトを変えたい場合だけ、低レベルの utility を直接上書きする

Tailwind ユーティリティでラップする

function ThemedCalendar({ calendar }) {
  return (
    <div className='rounded-2xl shadow-xl ring-1 ring-gray-200 dark:ring-gray-700'>
      <DayFlowCalendar calendar={calendar} />
    </div>
  );
}

カスタムテーマの組み立て

export const oceanTheme = {
  mode: 'auto' as const,
  calendars: [
    {
      id: 'deep-ocean',
      name: 'Deep Ocean',
      colors: {
        lineColor: '#0284c7',
        eventColor: '#e0f2fe',
        eventSelectedColor: '#bae6fd',
        textColor: '#0f172a',
      },
      darkColors: {
        lineColor: '#38bdf8',
        eventColor: '#0f172a',
        eventSelectedColor: '#020617',
        textColor: '#e0f2fe',
      },
    },
  ],
};

const calendar = useCalendarApp({ theme: oceanTheme });

CSS 変数の上書きと組み合わせると、見た目を完全に統一できます。

/* Ocean テーマ CSS トークン */
.df-calendar-container {
  --df-color-primary: #0369a1;
  --df-color-background: #f0f9ff;
  --df-color-border: #bae6fd;
}

.dark .df-calendar-container {
  --df-color-primary: #7dd3fc;
  --df-color-background: #0c1220;
  --df-color-border: #0c4a6e;
}

リソース

ツール

ライブラリ

Tailwind リソース

関連ドキュメント

On this page