
Fluxwing Component Expander
- 33 installs
- 16 repo stars
- Updated November 20, 2025
- jackspace/claudeskillz
Add interaction states - hover, focus, disabled, active, error - to existing uxscii .uxm components.
About
Expands existing uxscii components by adding interaction states. A developer or designer uses it to enhance .uxm components with hover, focus, disabled, active, and error states.
- Adds hover/focus/disabled/active/error states to components
- Overwrites user and library .uxm components in place
Fluxwing Component Expander by the numbers
- 33 all-time installs (skills.sh)
- Ranked #1,309 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/jackspace/claudeskillz --skill fluxwing-component-expanderAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 33 |
|---|---|
| repo stars | ★ 16 |
| Last updated | November 20, 2025 |
| Repository | jackspace/claudeskillz ↗ |
What it does
Add interaction states - hover, focus, disabled, active, error - to existing uxscii .uxm components.
Files
Fluxwing Component Expander
Expand existing uxscii components by adding interaction states.
Data Location Rules
READ from:
./fluxwing/components/- User-created components to expand./fluxwing/library/- User library components to expand{SKILL_ROOT}/docs/- Documentation for state definitions
WRITE to:
./fluxwing/components/- Updated components (overwrite existing)./fluxwing/library/- Updated library components (overwrite existing)
Your Task
Expand an existing uxscii component by adding interaction states.
Workflow
1. Locate Component
Ask for the component name if not provided:
- "Which component do you want to expand?"
- Search in
./fluxwing/components/and./fluxwing/library/ - Display current states if component found
2. Determine States to Add
Default behavior (no instructions): Add ALL standard states for component type
Smart defaults by type:
- button: hover, active, disabled
- input: focus, error, disabled
- checkbox/radio: checked, disabled
- select: open, disabled
- link: hover, visited, active
- card: hover, selected
- modal: open, closing
- alert: success, warning, error, info
- badge: active, inactive
- navigation: active, hover
- toggle: on, off, disabled
- slider: dragging, disabled
- tab: selected, hover
- list: selected, hover
- table: sorted, hover
User can override: "Only add hover and focus" or "Add error state only"
3. Read Existing Component Files
Read both files:
{component-name}.uxm- Current JSON metadata{component-name}.md- Current ASCII template
Extract:
- Current states (from behavior.states array)
- Component type (from type field)
- Visual properties (from ascii section)
- Variables (from ascii.variables array)
- Border style from default state (from behavior.states[0].properties.border)
4. Generate New States
For each new state to add:
A. Add state definition to .uxm file
Insert into the behavior.states array. Each state needs:
{
"name": "hover",
"properties": {
"border": "heavy",
"background": "primary-dark",
"textColor": "default"
},
"triggers": ["mouseenter"]
}State property patterns by state name:
- hover:
- border: "heavy"
- background: slightly darker than default
- triggers: ["mouseenter"]
- focus:
- border: "double"
- background: same as default
- textColor: "primary"
- triggers: ["focus"]
- active:
- border: "heavy"
- background: "filled"
- triggers: ["mousedown"]
- disabled:
- border: "dashed"
- opacity: 0.5
- cursor: "not-allowed"
- error:
- border: "heavy"
- borderColor: "red"
- textColor: "error"
- success:
- border: "heavy"
- borderColor: "green"
- textColor: "success"
- loading:
- opacity: 0.7
- cursor: "wait"
- checked (checkbox/radio):
- border: "heavy"
- background: "filled"
- textColor: "primary"
- selected:
- border: "heavy"
- background: "highlight"
- textColor: "primary"
- open (modal/select):
- visible: true
- triggers: ["click"]
- visited (link):
- textColor: "visited"
B. Generate ASCII for new state in .md file
Use appropriate box-drawing characters for each state:
- hover: Heavy border
┏━┓┃┗━┛ - focus: Double border
╔═╗║╚═╝ - active: Heavy filled
┏━┓┃┗━┛with darker interior - disabled: Dashed border
┌┄┄┐┆└┄┄┘ - error: Heavy border with indicator
┏━┓┃┗━┛ ⚠ - success: Heavy border with indicator
┏━┓┃┗━┛ ✓ - checked: Box with checkmark
[✓]or filled indicator - selected: Heavy border with highlight background
- loading: Spinner or progress indicator
Template for new state section in .md file:
## {State Name} State
\`\`\`
{ASCII art using appropriate border style}
\`\`\`5. Update Files
Write updated files:
- Overwrite
{component-name}.uxmwith expanded states array - Append new state sections to
{component-name}.md
Preserve:
- All existing metadata (name, description, author, created, tags, category)
- All existing variables
- All existing states
- All existing props
- Component ID and version
Update:
metadata.modifiedtimestamp (set to current ISO 8601 timestamp)behavior.statesarray (add new states to end).mdfile (append new state sections before Variables section if it exists, otherwise at end)
Important: When updating the .md file, insert new state sections AFTER existing state sections but BEFORE the Variables, Accessibility, and Usage sections.
5a. Validate Expanded Component
After updating the files, validate the expanded component to ensure quality:
uv run {SKILL_ROOT}/../uxscii-component-creator/scripts/quick_validate.py \\
./fluxwing/components/{component-name}.uxm \\
{SKILL_ROOT}/../uxscii-component-creator/schemas/uxm-component.schema.jsonValidation checks:
- ✓ JSON schema compliance
- ✓ All states have valid properties
- ✓ Variables match between .uxm and .md
- ✓ Accessibility requirements met
- ✓ No duplicate states
If validation fails: 1. Read the error messages 2. Fix the issues in the .uxm or .md files 3. Re-validate before confirming to user
Performance: ~100ms (very fast!)
6. Confirm Expansion
Show summary:
✓ Expanded: ./fluxwing/components/{component-name}
✓ Added states: hover, active, disabled
✓ Total states: 4 (default, hover, active, disabled)
Preview of hover state:
┏━━━━━━━━━━━━━━━━━━━━┓
┃ {{text}} ┃
┗━━━━━━━━━━━━━━━━━━━━┛Resources Available
- State patterns:
{SKILL_ROOT}/docs/06-ascii-patterns.md- Box-drawing characters - Component creation:
{SKILL_ROOT}/docs/03-component-creation.md- Component structure
Example Interaction
User: Expand submit-button with hover state
Skill: I found `submit-button` in ./fluxwing/components/
Current states: default
I'll add the hover state to make the button interactive.
[Reads submit-button.uxm and submit-button.md]
[Generates hover state]
[Updates both files]
✓ Expanded: ./fluxwing/components/submit-button
✓ Added states: hover
✓ Total states: 2 (default, hover)
Preview of hover state:
┏━━━━━━━━━━━━━━━━━━━━┓
┃ Submit Form ┃
┗━━━━━━━━━━━━━━━━━━━━┛
Next steps:
- Add more states (active, disabled)
- Use this button in a screen
- View all componentsExample with Custom States
User: Add focus and error states to email-input
Skill: I found `email-input` in ./fluxwing/components/
Current states: default
I'll add the requested states: focus, error
[Generates only focus and error states]
✓ Expanded: ./fluxwing/components/email-input
✓ Added states: focus, error
✓ Total states: 3 (default, focus, error)
Note: Standard input states also include 'disabled'.
Let me know if you want to add it!Quality Standards
Ensure expanded components include:
- ✓ Valid JSON schema compliance (no breaking changes)
- ✓ All new states have definitions in .uxm behavior.states array
- ✓ All new states have ASCII sections in .md
- ✓ State properties match component type conventions
- ✓ Consistent box-drawing character usage
- ✓ Updated modification timestamp
- ✓ Preserved existing data (no data loss)
- ✓ No duplicate states (check before adding)
Important Notes
- Always preserve existing states (never remove or modify existing ones)
- Detect duplicate states (skip if state already exists in behavior.states array)
- Validate component after expansion (ensure valid JSON)
- Use appropriate border styles per state (refer to patterns doc)
- Match visual style of existing default state (consistent dimensions and layout)
- Test keyboard navigation for new interactive states
- Insert .md sections in correct location (after states, before Variables section)
- Update only the modified timestamp (preserve created timestamp)
Error Handling
If component not found:
✗ Component '{component-name}' not found.
Searched in:
- ./fluxwing/components/
- ./fluxwing/library/
Available components:
[List first 10 components found]
Please check the component name and try again.If state already exists:
⚠ State 'hover' already exists in {component-name}.
Skipping duplicate state.
Current states: default, hover
Adding: active, disabledIf file write fails:
✗ Failed to update {component-name}.
Error: [specific error message]
The component files remain unchanged.
Please check file permissions and try again.You're helping users create fully interactive uxscii components!
{
"description": "Add interaction states like hover, focus, disabled, active, error to existing uxscii components. Use when working with .uxm files, when user wants to expand, enhance, or add states to .uxm components.",
"metadata": {
"version": "0.0.1",
"author": "Trabian",
"allowedTools": "Read, Write, Edit, Glob, Grep, Bash"
},
"content": "Expand existing uxscii components by adding interaction states.",
"name": "Fluxwing Component Expander",
"id": "fluxwing-component-expander",
"sections": {
"Quality Standards": "Ensure expanded components include:\r\n- ✓ Valid JSON schema compliance (no breaking changes)\r\n- ✓ All new states have definitions in .uxm behavior.states array\r\n- ✓ All new states have ASCII sections in .md\r\n- ✓ State properties match component type conventions\r\n- ✓ Consistent box-drawing character usage\r\n- ✓ Updated modification timestamp\r\n- ✓ Preserved existing data (no data loss)\r\n- ✓ No duplicate states (check before adding)",
"Your Task": "Expand an existing uxscii component by adding interaction states.",
"Workflow": "### 1. Locate Component\r\n\r\nAsk for the component name if not provided:\r\n- \"Which component do you want to expand?\"\r\n- Search in `./fluxwing/components/` and `./fluxwing/library/`\r\n- Display current states if component found\r\n\r\n### 2. Determine States to Add\r\n\r\n**Default behavior (no instructions)**: Add ALL standard states for component type\r\n\r\n**Smart defaults by type**:\r\n- **button**: hover, active, disabled\r\n- **input**: focus, error, disabled\r\n- **checkbox/radio**: checked, disabled\r\n- **select**: open, disabled\r\n- **link**: hover, visited, active\r\n- **card**: hover, selected\r\n- **modal**: open, closing\r\n- **alert**: success, warning, error, info\r\n- **badge**: active, inactive\r\n- **navigation**: active, hover\r\n- **toggle**: on, off, disabled\r\n- **slider**: dragging, disabled\r\n- **tab**: selected, hover\r\n- **list**: selected, hover\r\n- **table**: sorted, hover\r\n\r\n**User can override**: \"Only add hover and focus\" or \"Add error state only\"\r\n\r\n### 3. Read Existing Component Files\r\n\r\nRead both files:\r\n- `{component-name}.uxm` - Current JSON metadata\r\n- `{component-name}.md` - Current ASCII template\r\n\r\nExtract:\r\n- Current states (from behavior.states array)\r\n- Component type (from type field)\r\n- Visual properties (from ascii section)\r\n- Variables (from ascii.variables array)\r\n- Border style from default state (from behavior.states[0].properties.border)\r\n\r\n### 4. Generate New States\r\n\r\nFor each new state to add:\r\n\r\n**A. Add state definition to .uxm file**\r\n\r\nInsert into the `behavior.states` array. Each state needs:\r\n\r\n```json\r\n{\r\n \"name\": \"hover\",\r\n \"properties\": {\r\n \"border\": \"heavy\",\r\n \"background\": \"primary-dark\",\r\n \"textColor\": \"default\"\r\n },\r\n \"triggers\": [\"mouseenter\"]\r\n}\r\n```\r\n\r\n**State property patterns by state name**:\r\n\r\n- **hover**:\r\n - border: \"heavy\"\r\n - background: slightly darker than default\r\n - triggers: [\"mouseenter\"]\r\n\r\n- **focus**:\r\n - border: \"double\"\r\n - background: same as default\r\n - textColor: \"primary\"\r\n - triggers: [\"focus\"]\r\n\r\n- **active**:\r\n - border: \"heavy\"\r\n - background: \"filled\"\r\n - triggers: [\"mousedown\"]\r\n\r\n- **disabled**:\r\n - border: \"dashed\"\r\n - opacity: 0.5\r\n - cursor: \"not-allowed\"\r\n\r\n- **error**:\r\n - border: \"heavy\"\r\n - borderColor: \"red\"\r\n - textColor: \"error\"\r\n\r\n- **success**:\r\n - border: \"heavy\"\r\n - borderColor: \"green\"\r\n - textColor: \"success\"\r\n\r\n- **loading**:\r\n - opacity: 0.7\r\n - cursor: \"wait\"\r\n\r\n- **checked** (checkbox/radio):\r\n - border: \"heavy\"\r\n - background: \"filled\"\r\n - textColor: \"primary\"\r\n\r\n- **selected**:\r\n - border: \"heavy\"\r\n - background: \"highlight\"\r\n - textColor: \"primary\"\r\n\r\n- **open** (modal/select):\r\n - visible: true\r\n - triggers: [\"click\"]\r\n\r\n- **visited** (link):\r\n - textColor: \"visited\"\r\n\r\n**B. Generate ASCII for new state in .md file**\r\n\r\nUse appropriate box-drawing characters for each state:\r\n\r\n- **hover**: Heavy border `┏━┓┃┗━┛`\r\n- **focus**: Double border `╔═╗║╚═╝`\r\n- **active**: Heavy filled `┏━┓┃┗━┛` with darker interior\r\n- **disabled**: Dashed border `┌┄┄┐┆└┄┄┘`\r\n- **error**: Heavy border with indicator `┏━┓┃┗━┛ ⚠`\r\n- **success**: Heavy border with indicator `┏━┓┃┗━┛ ✓`\r\n- **checked**: Box with checkmark `[✓]` or filled indicator\r\n- **selected**: Heavy border with highlight background\r\n- **loading**: Spinner or progress indicator\r\n\r\n**Template for new state section in .md file**:\r\n\r\n```markdown",
"Important Notes": "- **Always preserve existing states** (never remove or modify existing ones)\r\n- **Detect duplicate states** (skip if state already exists in behavior.states array)\r\n- **Validate component after expansion** (ensure valid JSON)\r\n- **Use appropriate border styles per state** (refer to patterns doc)\r\n- **Match visual style of existing default state** (consistent dimensions and layout)\r\n- **Test keyboard navigation** for new interactive states\r\n- **Insert .md sections in correct location** (after states, before Variables section)\r\n- **Update only the modified timestamp** (preserve created timestamp)",
"{State Name} State": "\\`\\`\\`\r\n{ASCII art using appropriate border style}\r\n\\`\\`\\`\r\n```\r\n\r\n### 5. Update Files\r\n\r\n**Write updated files**:\r\n- Overwrite `{component-name}.uxm` with expanded states array\r\n- Append new state sections to `{component-name}.md`\r\n\r\n**Preserve**:\r\n- All existing metadata (name, description, author, created, tags, category)\r\n- All existing variables\r\n- All existing states\r\n- All existing props\r\n- Component ID and version\r\n\r\n**Update**:\r\n- `metadata.modified` timestamp (set to current ISO 8601 timestamp)\r\n- `behavior.states` array (add new states to end)\r\n- `.md` file (append new state sections before Variables section if it exists, otherwise at end)\r\n\r\n**Important**: When updating the .md file, insert new state sections AFTER existing state sections but BEFORE the Variables, Accessibility, and Usage sections.\r\n\r\n### 5a. Validate Expanded Component\r\n\r\nAfter updating the files, validate the expanded component to ensure quality:\r\n\r\n```bash\r\nuv run {SKILL_ROOT}/../uxscii-component-creator/scripts/quick_validate.py \\\\\r\n ./fluxwing/components/{component-name}.uxm \\\\\r\n {SKILL_ROOT}/../uxscii-component-creator/schemas/uxm-component.schema.json\r\n```\r\n\r\n**Validation checks:**\r\n- ✓ JSON schema compliance\r\n- ✓ All states have valid properties\r\n- ✓ Variables match between .uxm and .md\r\n- ✓ Accessibility requirements met\r\n- ✓ No duplicate states\r\n\r\n**If validation fails:**\r\n1. Read the error messages\r\n2. Fix the issues in the .uxm or .md files\r\n3. Re-validate before confirming to user\r\n\r\n**Performance**: ~100ms (very fast!)\r\n\r\n### 6. Confirm Expansion\r\n\r\nShow summary:\r\n```\r\n✓ Expanded: ./fluxwing/components/{component-name}\r\n✓ Added states: hover, active, disabled\r\n✓ Total states: 4 (default, hover, active, disabled)\r\n\r\nPreview of hover state:\r\n┏━━━━━━━━━━━━━━━━━━━━┓\r\n┃ {{text}} ┃\r\n┗━━━━━━━━━━━━━━━━━━━━┛\r\n```",
"Data Location Rules": "**READ from:**\r\n- `./fluxwing/components/` - User-created components to expand\r\n- `./fluxwing/library/` - User library components to expand\r\n- `{SKILL_ROOT}/docs/` - Documentation for state definitions\r\n\r\n**WRITE to:**\r\n- `./fluxwing/components/` - Updated components (overwrite existing)\r\n- `./fluxwing/library/` - Updated library components (overwrite existing)",
"Error Handling": "If component not found:\r\n```\r\n✗ Component '{component-name}' not found.\r\n\r\nSearched in:\r\n- ./fluxwing/components/\r\n- ./fluxwing/library/\r\n\r\nAvailable components:\r\n[List first 10 components found]\r\n\r\nPlease check the component name and try again.\r\n```\r\n\r\nIf state already exists:\r\n```\r\n⚠ State 'hover' already exists in {component-name}.\r\nSkipping duplicate state.\r\n\r\nCurrent states: default, hover\r\nAdding: active, disabled\r\n```\r\n\r\nIf file write fails:\r\n```\r\n✗ Failed to update {component-name}.\r\n\r\nError: [specific error message]\r\n\r\nThe component files remain unchanged.\r\nPlease check file permissions and try again.\r\n```\r\n\r\nYou're helping users create fully interactive uxscii components!",
"Resources Available": "- **State patterns**: `{SKILL_ROOT}/docs/06-ascii-patterns.md` - Box-drawing characters\r\n- **Component creation**: `{SKILL_ROOT}/docs/03-component-creation.md` - Component structure",
"Example with Custom States": "```\r\nUser: Add focus and error states to email-input\r\n\r\nSkill: I found `email-input` in ./fluxwing/components/\r\n\r\nCurrent states: default\r\n\r\nI'll add the requested states: focus, error\r\n\r\n[Generates only focus and error states]\r\n\r\n✓ Expanded: ./fluxwing/components/email-input\r\n✓ Added states: focus, error\r\n✓ Total states: 3 (default, focus, error)\r\n\r\nNote: Standard input states also include 'disabled'.\r\nLet me know if you want to add it!\r\n```",
"Example Interaction": "```\r\nUser: Expand submit-button with hover state\r\n\r\nSkill: I found `submit-button` in ./fluxwing/components/\r\n\r\nCurrent states: default\r\n\r\nI'll add the hover state to make the button interactive.\r\n\r\n[Reads submit-button.uxm and submit-button.md]\r\n[Generates hover state]\r\n[Updates both files]\r\n\r\n✓ Expanded: ./fluxwing/components/submit-button\r\n✓ Added states: hover\r\n✓ Total states: 2 (default, hover)\r\n\r\nPreview of hover state:\r\n┏━━━━━━━━━━━━━━━━━━━━┓\r\n┃ Submit Form ┃\r\n┗━━━━━━━━━━━━━━━━━━━━┛\r\n\r\nNext steps:\r\n- Add more states (active, disabled)\r\n- Use this button in a screen\r\n- View all components\r\n```"
}
}---
name: Fluxwing Component Expander
description: Add interaction states like hover, focus, disabled, active, error to existing uxscii components. Use when working with .uxm files, when user wants to expand, enhance, or add states to .uxm components.
version: 0.0.1
author: Trabian
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---
# Fluxwing Component Expander
Expand existing uxscii components by adding interaction states.
## Data Location Rules
**READ from:**
- `./fluxwing/components/` - User-created components to expand
- `./fluxwing/library/` - User library components to expand
- `{SKILL_ROOT}/docs/` - Documentation for state definitions
**WRITE to:**
- `./fluxwing/components/` - Updated components (overwrite existing)
- `./fluxwing/library/` - Updated library components (overwrite existing)
## Your Task
Expand an existing uxscii component by adding interaction states.
## Workflow
### 1. Locate Component
Ask for the component name if not provided:
- "Which component do you want to expand?"
- Search in `./fluxwing/components/` and `./fluxwing/library/`
- Display current states if component found
### 2. Determine States to Add
**Default behavior (no instructions)**: Add ALL standard states for component type
**Smart defaults by type**:
- **button**: hover, active, disabled
- **input**: focus, error, disabled
- **checkbox/radio**: checked, disabled
- **select**: open, disabled
- **link**: hover, visited, active
- **card**: hover, selected
- **modal**: open, closing
- **alert**: success, warning, error, info
- **badge**: active, inactive
- **navigation**: active, hover
- **toggle**: on, off, disabled
- **slider**: dragging, disabled
- **tab**: selected, hover
- **list**: selected, hover
- **table**: sorted, hover
**User can override**: "Only add hover and focus" or "Add error state only"
### 3. Read Existing Component Files
Read both files:
- `{component-name}.uxm` - Current JSON metadata
- `{component-name}.md` - Current ASCII template
Extract:
- Current states (from behavior.states array)
- Component type (from type field)
- Visual properties (from ascii section)
- Variables (from ascii.variables array)
- Border style from default state (from behavior.states[0].properties.border)
### 4. Generate New States
For each new state to add:
**A. Add state definition to .uxm file**
Insert into the `behavior.states` array. Each state needs:
```json
{
"name": "hover",
"properties": {
"border": "heavy",
"background": "primary-dark",
"textColor": "default"
},
"triggers": ["mouseenter"]
}
```
**State property patterns by state name**:
- **hover**:
- border: "heavy"
- background: slightly darker than default
- triggers: ["mouseenter"]
- **focus**:
- border: "double"
- background: same as default
- textColor: "primary"
- triggers: ["focus"]
- **active**:
- border: "heavy"
- background: "filled"
- triggers: ["mousedown"]
- **disabled**:
- border: "dashed"
- opacity: 0.5
- cursor: "not-allowed"
- **error**:
- border: "heavy"
- borderColor: "red"
- textColor: "error"
- **success**:
- border: "heavy"
- borderColor: "green"
- textColor: "success"
- **loading**:
- opacity: 0.7
- cursor: "wait"
- **checked** (checkbox/radio):
- border: "heavy"
- background: "filled"
- textColor: "primary"
- **selected**:
- border: "heavy"
- background: "highlight"
- textColor: "primary"
- **open** (modal/select):
- visible: true
- triggers: ["click"]
- **visited** (link):
- textColor: "visited"
**B. Generate ASCII for new state in .md file**
Use appropriate box-drawing characters for each state:
- **hover**: Heavy border `┏━┓┃┗━┛`
- **focus**: Double border `╔═╗║╚═╝`
- **active**: Heavy filled `┏━┓┃┗━┛` with darker interior
- **disabled**: Dashed border `┌┄┄┐┆└┄┄┘`
- **error**: Heavy border with indicator `┏━┓┃┗━┛ ⚠`
- **success**: Heavy border with indicator `┏━┓┃┗━┛ ✓`
- **checked**: Box with checkmark `[✓]` or filled indicator
- **selected**: Heavy border with highlight background
- **loading**: Spinner or progress indicator
**Template for new state section in .md file**:
```markdown
## {State Name} State
\`\`\`
{ASCII art using appropriate border style}
\`\`\`
```
### 5. Update Files
**Write updated files**:
- Overwrite `{component-name}.uxm` with expanded states array
- Append new state sections to `{component-name}.md`
**Preserve**:
- All existing metadata (name, description, author, created, tags, category)
- All existing variables
- All existing states
- All existing props
- Component ID and version
**Update**:
- `metadata.modified` timestamp (set to current ISO 8601 timestamp)
- `behavior.states` array (add new states to end)
- `.md` file (append new state sections before Variables section if it exists, otherwise at end)
**Important**: When updating the .md file, insert new state sections AFTER existing state sections but BEFORE the Variables, Accessibility, and Usage sections.
### 5a. Validate Expanded Component
After updating the files, validate the expanded component to ensure quality:
```bash
uv run {SKILL_ROOT}/../uxscii-component-creator/scripts/quick_validate.py \\
./fluxwing/components/{component-name}.uxm \\
{SKILL_ROOT}/../uxscii-component-creator/schemas/uxm-component.schema.json
```
**Validation checks:**
- ✓ JSON schema compliance
- ✓ All states have valid properties
- ✓ Variables match between .uxm and .md
- ✓ Accessibility requirements met
- ✓ No duplicate states
**If validation fails:**
1. Read the error messages
2. Fix the issues in the .uxm or .md files
3. Re-validate before confirming to user
**Performance**: ~100ms (very fast!)
### 6. Confirm Expansion
Show summary:
```
✓ Expanded: ./fluxwing/components/{component-name}
✓ Added states: hover, active, disabled
✓ Total states: 4 (default, hover, active, disabled)
Preview of hover state:
┏━━━━━━━━━━━━━━━━━━━━┓
┃ {{text}} ┃
┗━━━━━━━━━━━━━━━━━━━━┛
```
## Resources Available
- **State patterns**: `{SKILL_ROOT}/docs/06-ascii-patterns.md` - Box-drawing characters
- **Component creation**: `{SKILL_ROOT}/docs/03-component-creation.md` - Component structure
## Example Interaction
```
User: Expand submit-button with hover state
Skill: I found `submit-button` in ./fluxwing/components/
Current states: default
I'll add the hover state to make the button interactive.
[Reads submit-button.uxm and submit-button.md]
[Generates hover state]
[Updates both files]
✓ Expanded: ./fluxwing/components/submit-button
✓ Added states: hover
✓ Total states: 2 (default, hover)
Preview of hover state:
┏━━━━━━━━━━━━━━━━━━━━┓
┃ Submit Form ┃
┗━━━━━━━━━━━━━━━━━━━━┛
Next steps:
- Add more states (active, disabled)
- Use this button in a screen
- View all components
```
## Example with Custom States
```
User: Add focus and error states to email-input
Skill: I found `email-input` in ./fluxwing/components/
Current states: default
I'll add the requested states: focus, error
[Generates only focus and error states]
✓ Expanded: ./fluxwing/components/email-input
✓ Added states: focus, error
✓ Total states: 3 (default, focus, error)
Note: Standard input states also include 'disabled'.
Let me know if you want to add it!
```
## Quality Standards
Ensure expanded components include:
- ✓ Valid JSON schema compliance (no breaking changes)
- ✓ All new states have definitions in .uxm behavior.states array
- ✓ All new states have ASCII sections in .md
- ✓ State properties match component type conventions
- ✓ Consistent box-drawing character usage
- ✓ Updated modification timestamp
- ✓ Preserved existing data (no data loss)
- ✓ No duplicate states (check before adding)
## Important Notes
- **Always preserve existing states** (never remove or modify existing ones)
- **Detect duplicate states** (skip if state already exists in behavior.states array)
- **Validate component after expansion** (ensure valid JSON)
- **Use appropriate border styles per state** (refer to patterns doc)
- **Match visual style of existing default state** (consistent dimensions and layout)
- **Test keyboard navigation** for new interactive states
- **Insert .md sections in correct location** (after states, before Variables section)
- **Update only the modified timestamp** (preserve created timestamp)
## Error Handling
If component not found:
```
✗ Component '{component-name}' not found.
Searched in:
- ./fluxwing/components/
- ./fluxwing/library/
Available components:
[List first 10 components found]
Please check the component name and try again.
```
If state already exists:
```
⚠ State 'hover' already exists in {component-name}.
Skipping duplicate state.
Current states: default, hover
Adding: active, disabled
```
If file write fails:
```
✗ Failed to update {component-name}.
Error: [specific error message]
The component files remain unchanged.
Please check file permissions and try again.
```
You're helping users create fully interactive uxscii components!