Files
ComfyUI_frontend/src/components/CLAUDE.md
Alexander Brown 471ccca1dd Style: Design System use across more components (#6705)
## Summary

Only remaining use is in `buttonTypes.ts` which @viva-jinyi is going to
be working on to consolidate our different buttons soon.

## Changes

- **What**: Replace light/dark colors with theme aware design system
tokens.

## Review Focus

Double check the chosen colors for the components

## Screenshots

| Before | After |
| ------ | ----- |
| <img width="607" height="432" alt="image"
src="https://github.com/user-attachments/assets/6c0ee6d6-819f-40b1-b775-f8b25dd18104"
/> | <img width="646" height="488" alt="image"
src="https://github.com/user-attachments/assets/9c8532de-8ac6-4b48-9021-3fd0b3e0bc63"
/> |

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6705-Style-WIP-Design-System-use-across-more-components-2ab6d73d365081619115fc5f87a46341)
by [Unito](https://www.unito.io)

---------

Co-authored-by: github-actions <github-actions@github.com>
2025-11-17 12:27:10 -08:00

1.4 KiB

Component Guidelines

Vue 3 Composition API

  • Use setup() function
  • Destructure props (Vue 3.5 style)
  • Use ref/reactive for state
  • Implement computed() for derived state
  • Use provide/inject for dependency injection

Component Communication

  • Prefer emit/@event-name for state changes
  • Use defineExpose only for imperative operations (form.validate(), modal.open())
  • Events promote loose coupling

UI Framework

  • Deprecated PrimeVue component replacements:
    • Dropdown → Select
    • OverlayPanel → Popover
    • Calendar → DatePicker
    • InputSwitch → ToggleSwitch
    • Sidebar → Drawer
    • Chips → AutoComplete with multiple enabled
    • TabMenu → Tabs without panels
    • Steps → Stepper without panels
    • InlineMessage → Message

Styling

  • Use Tailwind CSS only (no custom CSS)
  • Use the correct tokens from style.css in the design system package
  • For common operations, try to use existing VueUse composables that automatically handle effect scope
    • Example: Use useElementHover instead of manually managing mouseover/mouseout event listeners
    • Example: Use useIntersectionObserver for visibility detection instead of custom scroll handlers

Best Practices

  • Extract complex conditionals to computed
  • Implement cleanup for async operations
  • Use vue-i18n for ALL UI strings
  • Use lifecycle hooks: onMounted, onUpdated
  • Use Teleport/Suspense when needed
  • Proper props and emits definitions