Skip to main content

theme-management

Add, update, validate and verify theme files using built-in package.json commands and utilities.

ソース情報

リポジトリ
input-output-hk/daedalus
ソースの最終更新活動
2026年9月23日 17:21
検出された SKILL.md の言語
英語
スター
1,247
フォーク
299

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
theme-management
description
Add, update, validate and verify theme files using built-in package.json commands and utilities.
user-invocable
true
# Theme Management Skill > **Purpose**: Add, update, validate and verify theme files using built-in package.json commands and utilities. > > **Target Users**: Frontend developers managing Daedalus theme CSS variables and styling system. > > **Related Components**: > - `source/renderer/app/themes/` — Theme definitions and utilities > - `source/renderer/app/themes/daedalus/` — Theme output files (cardano.ts, light-blue.ts, etc.) > - `source/renderer/app/themes/utils/` — Theme creation and validation scripts > - `gulpfile.js` — Build tasks for themes --- ## Overview Daedalus uses a CSS custom properties (CSS variables) theme system built with TypeScript. All themes are generated from a centralized `createTheme` object and validated against existing theme files to ensure consistency across the application. ### Key Theme Files | Path | Purpose | |------|---------| | `source/renderer/app/themes/daedalus/index.ts` | Theme output definitions (CARDANO_THEME_OUTPUT, LIGHT_BLUE_THEME_OUTPUT, etc.) | | `source/renderer/app/themes/daedalus/cardano.ts` | Dark theme (primary Cardano theme) | | `source/renderer/app/themes/daedalus/light-blue.ts` | Light theme variant | | `source/renderer/app/themes/daedalus/dark-cardano.ts` | Dark variant of Cardano theme | | `source/renderer/app/themes/utils/constants.ts` | `createTheme` object and theme creation parameters | | `source/renderer/app/themes/utils/checkCreateTheme.ts` | Validation logic for theme consistency | --- ## Core Commands All commands use Gulp build system and TypeScript compilation before execution. ### 1. Validate Theme Creation (`themes:check:createTheme`) **Purpose**: Validate that the `createTheme` object contains all CSS custom properties defined in existing theme files. **Command**: ```bash yarn themes:check:createTheme ``` **What It Does**: - Builds themes via `gulp build:themes` - Compiles and runs `source/renderer/app/themes/scripts/check.ts` - Compares `createTheme` object against all existing theme outputs - Logs missing definitions in each theme with color-coded output - **Exit Code**: 0 if valid, 1 if missing definitions found **Output Example**: ``` createTheme.js is missing the following definitions that exist in the cardano.ts theme: { "--theme-wallet-address-copy-tooltip-background-color": "#2cbb69", "--theme-wallet-address-copy-tooltip-text-color": "#fafafa" } ``` **When to Use**: - After adding new CSS variables to an existing theme - Before committing theme changes to verify consistency - When implementing new UI components that need theme variables **Note**: This command does NOT modify files; it only reports differences. --- ### 2. Update Theme Files (`themes:update`) **Purpose**: Update theme files based on changes in the `createTheme` object, then auto-format with Prettier. **Command**: ```bash yarn themes:update ``` **What It Does**: - Builds themes via `gulp build:themes` - Runs `source/renderer/app/themes/utils/updateThemesCLI.ts` (interactive CLI) - Presents available updates to existing theme files - Applies selected updates to theme files - Auto-formats all updated files with Prettier (`--loglevel warn`) - Modifies files in: `source/renderer/app/themes/daedalus/*.ts` **Interactive CLI Usage**: 1. Command prompts you to select which theme(s) to update 2. Displays summary of changes to be applied 3. Confirms before writing changes to disk **Output Example**: ``` Updating cardano.ts... ✓ Added 3 new CSS variables ✓ Updated 2 existing variables ✓ Formatted with Prettier ``` **When to Use**: - After adding new CSS variables to `createTheme` object - When propagating color/style changes across all themes - Part of the standard workflow when defining new theme variables **Result**: Updated TypeScript theme files with auto-formatting applied. --- ### 3. Copy Theme Properties (`themes:copy`) **Purpose**: Interactive CLI tool to quickly duplicate CSS properties between all theme files. **Command**: ```bash yarn themes:copy ``` **What It Does**: - Runs `source/renderer/app/themes/utils/copyTheme.ts` (interactive CLI) - Launches CLI interface to select source and target CSS variables - Copies property value from one theme to all other theme files - Auto-formats updated files with Prettier **Interactive CLI Steps**: 1. **Select Property**: Prompts for CSS variable name (e.g., `--theme-button-primary-color`) 2. **Select Source Theme**: Choose which theme to copy value FROM 3. **Select Target Themes**: Choose which theme(s) to copy value TO 4. **Confirm**: Review changes before applying **Usage Example**: ``` ? Which CSS variable do you want to copy? > --theme-button-primary-background ? Copy from which theme? > cardano.ts ? Copy to which themes? (select multiple with Space) > [x] light-blue.ts > [ ] dark-cardano.ts > [x] light-cardano.ts ✓ Applied to 2 themes ✓ Running Prettier... ``` **When to Use**: - When adding a new theme and need to copy color values from existing theme - After creating new CSS variables and need to propagate to multiple themes - When updating a color value that should be consistent across themes - Quick reference for comparing CSS variable values across themes **Result**: All selected theme files updated with copied property; auto-formatted. --- ### 4. Build Themes (`gulp build:themes`) **Purpose**: Internal build step that compiles theme TypeScript files for use by check/update/copy commands. **Command**: ```bash gulp build:themes ``` **What It Does**: - Cleans `dist/` directory - Runs Webpack to compile theme files - Outputs to `dist/` **When It Runs**: Automatically executed before `themes:check:createTheme`, `themes:update`, and `themes:copy`. **Note**: You typically don't need to run this directly; it's a dependency of other theme commands. --- ## Workflow Examples ### Example 1: Adding a New Theme Variable **Scenario**: You need to add a new CSS variable `--theme-mithril-card-background` for the Mithril feature. **Steps**: 1. **Add to `createTheme` object**: ```typescript // source/renderer/app/themes/utils/constants.ts export const CREATE_CARDANO_THEME_PARAMS = { // ... existing vars 'mithril-card-background': { light: '#ffffff', dark: '#0f1822', }, }; ``` 2. **Validate**: ```bash yarn themes:check:createTheme ``` - If valid output: ✓ Proceed to step 3 - If missing definitions: Add missing variables to `createTheme` 3. **Update theme files**: ```bash yarn themes:update ``` - Select themes to update (usually all) - Confirm changes - Prettier auto-formats output 4. **Verify**: ```bash yarn prettier:check yarn compile ``` ### Example 2: Copying a Property to a New Theme **Scenario**: You created a new theme variant and need to copy all color values from the Cardano theme. **Steps**: 1. Create new theme file: `source/renderer/app/themes/daedalus/my-theme.ts` 2. Export output constant in `source/renderer/app/themes/daedalus/index.ts`: ```typescript export const MY_THEME_OUTPUT = { /* ... */ }; export const EXISTING_THEME_OUTPUTS = [ // ... existing ['my-theme.ts', MY_THEME_OUTPUT], ]; ``` 3. **Copy properties iteratively**: ```bash yarn themes:copy ``` - Select property from cardano.ts - Apply to my-theme.ts - Repeat for each variable needed 4. **Or update in batch** (if `createTheme` supports new theme): ```bash yarn themes:update ``` - Select my-theme.ts - Apply all updates at once ### Example 3: Verifying Theme Consistency Before Commit **Scenario**: You've made changes to theme files and want to ensure everything is consistent. **Steps**: ```bash # 1. Check createTheme validity yarn themes:check:createTheme # 2. Run full code quality checks yarn compile # TypeScript check yarn prettier:check # Formatting check yarn lint # ESLint check ``` --- ## Theme File Structure ### Theme Output Object Format Each theme file exports a TypeScript object mapping CSS variable names to color values: ```typescript // source/renderer/app/themes/daedalus/cardano.ts export const CARDANO_THEME_OUTPUT = { '--theme-about-window-background-color': 'rgba(15, 24, 34, 0.96)', '--theme-button-primary-background': '#2cbb69', '--theme-button-primary-text-color': '#ffffff', // ... 200+ more CSS variables }; ``` ### Theme Parameters Format The `createTheme` object uses parameter format: ```typescript // source/renderer/app/themes/utils/constants.ts export const CREATE_CARDANO_THEME_PARAMS = { 'property-name': { light: '#color-for-light-theme', dark: '#color-for-dark-theme', }, // ... }; ``` --- ## Validation and Quality Checks ### Pre-Commit Checklist Before committing theme changes: ```bash # 1. Validate theme creation object yarn themes:check:createTheme # 2. Verify TypeScript compilation yarn compile # 3. Check code formatting yarn prettier:check # 4. Run full checks yarn lint ``` ### Automated Checks (CI/CD) Theme changes are validated in CI via: - `yarn check:all` — Runs all quality checks including theme validation - Theme files must have consistent formatting - No missing CSS variables between `createTheme` and existing themes --- ## Common Patterns ### Adding a Feature's Theme Variables 1. Create variables in `createTheme` with both light and dark values 2. Run `yarn themes:check:createTheme` to validate 3. Run `yarn themes:update` to sync to all theme files 4. Verify with `yarn prettier:check && yarn compile` 5. Use variables in SCSS: `color: var(--theme-feature-color);` ### Creating a New Theme Variant 1. Create new theme file in `source/renderer/app/themes/daedalus/` 2. Add export to `source/renderer/app/themes/daedalus/index.ts` 3. Add to `EXISTING_THEME_OUTPUTS` array 4. Run `yarn themes:copy` or `yarn themes:update` to populate 5. Register in theme selection UI ### Updating Color Values Across All Themes 1. Modify `createTheme` parameters in `constants.ts` 2. Run `yarn themes:update` and select all themes 3. Review changes in generated `.ts` files 4. Commit diff alongside any component changes --- ## Tips & Best Practices ### Do's ✓ - Run `themes:check:createTheme` after any theme-related changes - Use `themes:copy` for one-off variable propagation - Use `themes:update` for bulk changes affecting multiple files - Always run `prettier:check` after theme updates (auto-run by update command) - Keep CSS variable names consistent (kebab-case, semantic prefix) ### Don'ts ✗ - Don't manually edit theme `.ts` files if template exists (use tools instead) - Don't commit unformatted theme files (Prettier is required) - Don't add CSS variables only to one theme (use createTheme for all) - Don't skip validation before committing (run `themes:check:createTheme`) ### Color Value Guidelines - Use hex format for consistency: `#2cbb69` - Use rgba for transparency: `rgba(255, 255, 255, 0.8)` - Follow naming pattern: `--theme-[feature]-[element]-[property]` - Example: `--theme-wallet-address-copy-tooltip-background-color` - Light theme variants should use lighter/brighter colors - Dark theme variants should use darker/lower-contrast colors --- ## Troubleshooting ### "Missing definitions" Error **Problem**: `yarn themes:check:createTheme` reports missing definitions **Solution**: 1. Add missing variables to `CREATE_*_THEME_PARAMS` in `constants.ts` 2. Ensure both `light` and `dark` values are provided 3. Run `yarn themes:check:createTheme` again to verify ### Prettier Formatting Issues **Problem**: Theme files aren't formatted after update **Solution**: - Prettier is auto-run by `themes:update` command - If formatting is missing, run: `yarn prettier --loglevel warn --write source/renderer/app/themes/daedalus/*.ts` ### TypeScript Compilation Errors **Problem**: `yarn compile` fails after theme changes **Solution**: 1. Verify all new variables are exported in `daedalus/index.ts` 2. Check `createTheme` object matches theme file structure 3. Run `yarn themes:update` to auto-sync files ### CLI Tool Not Responding **Problem**: `themes:copy` or `themes:update` hangs **Solution**: - Ensure `gulp build:themes` completed successfully - Check `dist/` directory exists after build - Try clearing cache: `yarn clear:cache && yarn themes:update` --- ## Related Documentation - **Theme Architecture**: [System Architecture - Theme System](../../system/architecture.md) - **Component Development**: [Storybook Workflow](../../workflows/storybook.md) - **Best Practices**: [BESTPRACTICES.md](../../../BESTPRACTICES.md) - **Theme Tutorial Series**: [Theme Tutorial Videos](https://www.youtube.com/playlist?list=PLhYa9Lr0WjdXN69m4B2pVyuP9UlAT1Xw_) --- ## Video Tutorials The Daedalus project includes comprehensive video tutorials on theme management: - **Part 1**: Creating a new theme using `createTheme` utility - **Part 2**: Using the `themes:update` script
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る