Files
sim/.claude/rules/sim-components.md
Emir Karabeg 2daf34386e fix(copilot): ui/ux (#2891)
* feat(claude): added rules

* fix(copilot): chat loading; refactor(copilot): components, utils, hooks

* fix(copilot): options selection strikethrough

* fix(copilot): options render inside thinking

* fix(copilot): checkpoints, user-input; improvement(code): colors

* fix(copilot): scrolling, tool-call truncation, thinking ui

* fix(copilot): tool call spacing and shimmer/actions on previous messages

* improvement(copilot): queue

* addressed comments
2026-01-19 23:23:21 -08:00

1000 B

paths
paths
apps/sim/**/*.tsx

Component Patterns

Structure Order

'use client' // Only if using hooks

// Imports (external → internal)
// Constants at module level
const CONFIG = { SPACING: 8 } as const

// Props interface
interface ComponentProps {
  requiredProp: string
  optionalProp?: boolean
}

export function Component({ requiredProp, optionalProp = false }: ComponentProps) {
  // a. Refs
  // b. External hooks (useParams, useRouter)
  // c. Store hooks
  // d. Custom hooks
  // e. Local state
  // f. useMemo
  // g. useCallback
  // h. useEffect
  // i. Return JSX
}

Rules

  1. 'use client' only when using React hooks
  2. Always define props interface
  3. Extract constants with as const
  4. Semantic HTML (aside, nav, article)
  5. Optional chain callbacks: onAction?.(id)

Component Extraction

Extract when: 50+ lines, used in 2+ files, or has own state/logic

Keep inline when: < 10 lines, single use, purely presentational