Skip to content

chore: add a Claude.md file to help with contributions - #10343

Open
snowystinger wants to merge 3 commits into
mainfrom
add-claudemd
Open

chore: add a Claude.md file to help with contributions#10343
snowystinger wants to merge 3 commits into
mainfrom
add-claudemd

Conversation

@snowystinger

@snowystinger snowystinger commented Jul 20, 2026

Copy link
Copy Markdown
Member

Closes

I mostly had Claude write this file. I dictated that it specifically include the guidelines around writing tests and the repo organisation. The rest and the file's structure are Claude with a little of my editing. I opted for a progressive disclosure pattern and hopefully some ways for other AI to hook in and read the same file. This should make it easier to expand in the future. I also had Claude check me for rules that could be in conflict with each other.

The guidelines around testing are ones that I've found useful in my own work to try to get better test suites out of Claude. Hopefully this will improve contribution quality as well.

✅ Pull Request Checklist:

  • Included link to corresponding React Spectrum GitHub Issue.
  • Added/updated unit tests and storybook for this change (for new code or code which already has tests).
  • Filled out test instructions.
  • Updated documentation (if it already exists for this component).
  • Looked at the Accessibility Practices for this feature - Aria Practices

📝 Test Instructions:

🧢 Your Project:

@rspbot

rspbot commented Jul 20, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Jul 28, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown
## API Changes

react-aria-components

/react-aria-components:PreviewTrigger

 PreviewTrigger {
   children: ReactNode
-  closeDelay?: number = 200
+  closeDelay?: number = 500
   defaultOpen?: boolean
-  delay?: number = 600
+  delay?: number = 1500
   isDisabled?: boolean
   isOpen?: boolean
   onOpenChange?: (boolean) => void
 }

/react-aria-components:TableLoadMoreItem

 TableLoadMoreItem {
   children?: ReactNode
   className?: string = 'react-aria-TableLoadMoreItem'
-  direction?: 'start' | 'end' = 'end'
   isLoading?: boolean
   onLoadMore?: () => any
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
   scrollOffset?: number = 1
 }

/react-aria-components:TokenField

 TokenField <T extends TokenFieldValue = TokenFieldValue> {
   allowsNewlines?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<TokenFieldRenderProps>
   className?: ClassNameOrFunction<TokenFieldRenderProps> = 'react-aria-TokenField'
   defaultValue?: TokenFieldValue
   isDisabled?: boolean
   isReadOnly?: boolean
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (TokenFieldValue) => void
   onCopy?: ClipboardEventHandler<TokenFieldValue>
   onCut?: ClipboardEventHandler<TokenFieldValue>
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
-  onKeyUp?: (React.KeyboardEvent<HTMLDivElement>) => void
+  onKeyDown?: (KeyboardEvent) => void
+  onKeyUp?: (KeyboardEvent) => void
   onPaste?: ClipboardEventHandler<TokenFieldValue>
   onSubmit?: () => void
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TokenFieldRenderProps>
   role?: 'textbox' | 'searchbox' | 'combobox' = 'textbox'
   style?: StyleOrFunction<TokenFieldRenderProps>
   value?: TokenFieldValue
 }

/react-aria-components:TokenFieldValue

 TokenFieldValue <T = any> {
-  Direction: any
   caretPosition: Position
   constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
   delete: (Position, Intl.Segmenter, any, any) => this
   deleteLine: (Position, any, any) => this
   findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
   findLineBoundary: (Position, any) => Position | null
   findText: (Position, any, string | RegExp) => Position | null
   redo: () => this
   replaceRange: (Position, Position, string, any) => this
   replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
   segments: readonly Array<TokenFieldSegment<T>>
   slice: (Position, Position) => this
   toString: () => string
   undo: () => this
   withCaretPosition: (Position) => this
 }

/react-aria-components:Virtualizer

 Virtualizer <O> {
   children: ReactNode
   layout: LayoutClass<O> | ILayout<O>
   layoutOptions?: O
-  shouldObserveItemSize?: boolean
 }

/react-aria-components:GridListHeaderProps

-GridListHeaderProps {
-  children?: ReactNode
-  className?: string
-  id?: string
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  style?: CSSProperties
-}

/react-aria-components:PreviewTriggerProps

 PreviewTriggerProps {
   children: ReactNode
-  closeDelay?: number = 200
+  closeDelay?: number = 500
   defaultOpen?: boolean
-  delay?: number = 600
+  delay?: number = 1500
   isDisabled?: boolean
   isOpen?: boolean
   onOpenChange?: (boolean) => void
 }

/react-aria-components:SelectProps

-SelectProps <M extends SelectionMode = 'single', T = {
-  
-}> {
+SelectProps <M extends SelectionMode = 'single', T> {
   allowsEmptyCollection?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-labelledby?: string
   autoComplete?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<SelectRenderProps>
   className?: ClassNameOrFunction<SelectRenderProps> = 'react-aria-Select'
   defaultOpen?: boolean
   defaultValue?: ValueType<SelectionMode>
   disabledKeys?: Iterable<Key>
   excludeFromTabOrder?: boolean
   form?: string
   id?: string
   isDisabled?: boolean
   isInvalid?: boolean
   isOpen?: boolean
   isRequired?: boolean
   name?: string
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (ChangeValueType<SelectionMode>) => void
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
   onKeyDown?: (KeyboardEvent) => void
   onKeyUp?: (KeyboardEvent) => void
   onOpenChange?: (boolean) => void
   placeholder?: string = 'Select an item' (localized)
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, SelectRenderProps>
   selectionMode?: SelectionMode = 'single'
   shouldCloseOnSelect?: boolean
   slot?: string | null
   style?: StyleOrFunction<SelectRenderProps>
   validate?: (ValidationType<SelectionMode>) => ValidationError | boolean | null | undefined
   validationBehavior?: 'native' | 'aria' = 'native'
   value?: ValueType<SelectionMode>
 }

/react-aria-components:TableLoadMoreItemProps

 TableLoadMoreItemProps {
   children?: ReactNode
   className?: string = 'react-aria-TableLoadMoreItem'
-  direction?: 'start' | 'end' = 'end'
   isLoading?: boolean
   onLoadMore?: () => any
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
   scrollOffset?: number = 1
 }

/react-aria-components:TokenFieldProps

 TokenFieldProps <T extends TokenFieldValue = TokenFieldValue> {
   allowsNewlines?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<TokenFieldRenderProps>
   className?: ClassNameOrFunction<TokenFieldRenderProps> = 'react-aria-TokenField'
   defaultValue?: TokenFieldValue
   isDisabled?: boolean
   isReadOnly?: boolean
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (TokenFieldValue) => void
   onCopy?: ClipboardEventHandler<TokenFieldValue>
   onCut?: ClipboardEventHandler<TokenFieldValue>
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
-  onKeyUp?: (React.KeyboardEvent<HTMLDivElement>) => void
+  onKeyDown?: (KeyboardEvent) => void
+  onKeyUp?: (KeyboardEvent) => void
   onPaste?: ClipboardEventHandler<TokenFieldValue>
   onSubmit?: () => void
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TokenFieldRenderProps>
   role?: 'textbox' | 'searchbox' | 'combobox' = 'textbox'
   style?: StyleOrFunction<TokenFieldRenderProps>
   value?: TokenFieldValue
 }

/react-aria-components:VirtualizerProps

 VirtualizerProps <O> {
   children: ReactNode
   layout: LayoutClass<O> | ILayout<O>
   layoutOptions?: O
-  shouldObserveItemSize?: boolean
 }

@react-aria/calendar

/@react-aria/calendar:useCalendarMonthPicker

-useCalendarMonthPicker {
-  props: CalendarMonthPickerProps
-  state: CalendarState<CalendarSelectionMode> | RangeCalendarState
-  returnVal: undefined
-}

/@react-aria/calendar:useCalendarYearPicker

-useCalendarYearPicker {
-  props: CalendarYearPickerProps
-  state: CalendarState<CalendarSelectionMode> | RangeCalendarState
-  returnVal: undefined
-}

/@react-aria/calendar:CalendarMonthPickerAria

-CalendarMonthPickerAria {
-  aria-label: string
-  items: Array<CalendarMonthPickerItem>
-  onChange: (Key | null) => void
-  value: Key
-}

/@react-aria/calendar:CalendarMonthPickerItem

-CalendarMonthPickerItem {
-  date: CalendarDate
-  formatted: string
-  id: number
-}

/@react-aria/calendar:CalendarMonthPickerProps

-CalendarMonthPickerProps {
-  format?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow'
-}

/@react-aria/calendar:CalendarYearPickerAria

-CalendarYearPickerAria {
-  aria-label: string
-  items: Array<CalendarYearPickerItem>
-  onChange: (Key | null) => void
-  value: Key
-}

/@react-aria/calendar:CalendarYearPickerItem

-CalendarYearPickerItem {
-  date: CalendarDate
-  formatted: string
-  id: number
-}

/@react-aria/calendar:CalendarYearPickerProps

-CalendarYearPickerProps {
-  format?: CalendarYearPickerFormatOptions
-  visibleYears?: number = 20
-}

@react-aria/utils

/@react-aria/utils:LoadMoreSentinelProps

 LoadMoreSentinelProps {
   collection: Collection<any>
-  direction?: 'start' | 'end' = 'end'
   onLoadMore?: () => any
   scrollOffset?: number = 1
 }

@react-aria/virtualizer

/@react-aria/virtualizer:VirtualizerItem

 VirtualizerItem {
   children: ReactNode
   className?: string
   layoutInfo: LayoutInfo
   parent?: LayoutInfo | null
-  shouldObserveItemSize?: boolean
   style?: CSSProperties
   virtualizer: IVirtualizer
 }

/@react-aria/virtualizer:VirtualizerItemOptions

 VirtualizerItemOptions {
   layoutInfo: LayoutInfo | null
   ref: RefObject<HTMLElement | null>
-  shouldObserveItemSize?: boolean
   virtualizer: IVirtualizer
 }

@react-spectrum/ai

/@react-spectrum/ai:Attachment

 Attachment {
+  allowsArrowNavigation?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   children: ReactNode | (AttachmentRenderProps) => ReactNode
   density?: 'compact' | 'regular' | 'spacious' = 'regular'
   download?: boolean | string
+  focusMode?: 'child' | 'row'
   href?: Href
   hrefLang?: string
   id?: Key
   isDisabled?: boolean
-  isInvalid?: boolean
   onAction?: () => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
   ping?: string
   referrerPolicy?: HTMLAttributeReferrerPolicy
   rel?: string
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TagRenderProps>
   routerOptions?: RouterOptions
   size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   styles?: StyleString
   target?: HTMLAttributeAnchorTarget
   textValue?: string
   uploadProgress?: number
   value?: T
   variant?: 'primary' | 'secondary' | 'tertiary' | 'quiet' = 'primary'
 }

/@react-spectrum/ai:MessageFeedback

 MessageFeedback {
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   defaultValue?: MessageFeedbackValue
   id?: string
   isDisabled?: boolean
   onChange?: (MessageFeedbackValue) => void
-  size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
   styles?: StylesPropWithHeight
   thumbDownLabel?: string
   thumbUpLabel?: string
 }

/@react-spectrum/ai:PromptFieldValue

-PromptFieldValue {
-  Direction: any
-  caretPosition: Position
-  constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
-  delete: (Position, Intl.Segmenter, any, any) => this
-  deleteLine: (Position, any, any) => this
-  endCoalescing: () => void
-  findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
-  findLineBoundary: (Position, any) => Position | null
-  findText: (Position, any, string | RegExp) => Position | null
-  redo: () => this
-  replaceRange: (Position, Position, string, any) => this
-  replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
-  segments: readonly Array<TokenFieldSegment<T>>
-  slice: (Position, Position) => this
-  toString: () => string
-  tokenize: (string) => Array<TokenFieldSegment>
-  undo: () => this
-  withCaretPosition: (Position) => this
-}

/@react-spectrum/ai:PromptField

 PromptField {
   acceptedAttachmentTypes?: Array<string>
-  attachments?: Array<PromptFieldAttachment>
-  brandColor?: string
   children: React.ReactNode
-  defaultAttachments?: Array<PromptFieldAttachment>
-  defaultValue?: TokenFieldValue
   isGenerating?: boolean
   onAddAttachments?: (Array<PromptFieldAttachment>) => void
-  onAttachmentsChange?: (Array<PromptFieldAttachment>) => void
-  onChange?: (TokenFieldValue) => void
   onRemoveAttachments?: (Array<PromptFieldAttachment>) => void
   onStop?: () => void
   onSubmit?: (TokenFieldValue, Array<PromptFieldAttachment>) => void
   styles?: StyleString
-  value?: TokenFieldValue
   variant?: 'balanced' | 'prominent' | 'subtle'
 }

/@react-spectrum/ai:PromptTokenField

 PromptTokenField {
   children?: (TokenSegment) => React.ReactElement
   completionTrigger?: RegExp
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
   pixelLoader?: Array<Cell> | Array<Array<Cell>>
   placeholder?: string
   renderCompletions?: (string) => Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
 }

/@react-spectrum/ai:CommandMenuItem

-CommandMenuItem {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTextMenuItem

-InsertTextMenuItem {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTokenMenuItem

 InsertTokenMenuItem {
+  UNSAFE_className?: UnsafeClassName
+  UNSAFE_style?: CSSProperties
   aria-label?: string
   children: ReactNode
+  download?: boolean | string
+  href?: Href
+  hrefLang?: string
   id?: Key
   isDisabled?: boolean
   onAction?: () => void
   onBlur?: (FocusEvent<Target>) => void
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
   onHoverChange?: (boolean) => void
   onHoverEnd?: (HoverEvent) => void
   onHoverStart?: (HoverEvent) => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressStart?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
+  ping?: string
+  referrerPolicy?: HTMLAttributeReferrerPolicy
+  rel?: string
+  routerOptions?: RouterOptions
   shouldCloseOnSelect?: boolean
   styles?: StylesProp
+  target?: HTMLAttributeAnchorTarget
   textValue?: string
   value?: T
 }

/@react-spectrum/ai:PromptFieldVoiceButton

-PromptFieldVoiceButton {
-  isDisabled?: boolean
-  lang?: string
-  onError?: (VoiceInputErrorCode) => void
-}

/@react-spectrum/ai:ExecutionTrace

-ExecutionTrace {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  id?: string
-  styles?: StyleString
-}

/@react-spectrum/ai:ExecutionTraceItem

-ExecutionTraceItem {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  detail?: ReactNode
-  icon?: ReactNode
-  id?: string
-  isAlwaysOpen?: boolean
-  styles?: StyleString
-}

/@react-spectrum/ai:ResponseStatus

 ResponseStatus {
   children: ReactNode
   defaultExpanded?: boolean
+  density?: 'compact' | 'regular' | 'spacious' = 'regular'
   id?: Key
   isDisabled?: boolean
   isExpanded?: boolean
+  isLoading?: boolean
   onExpandedChange?: (boolean) => void
+  size?: 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
-  status?: 'loading' | 'failed' | 'success' = 'loading'
   styles?: StyleString
 }

/@react-spectrum/ai:Thread

 Thread <T extends {}> {
   aria-label?: string
   aria-labelledby?: string
   children?: ReactNode | (T) => ReactNode
   items?: Iterable<T>
-  scrollEndThreshold?: number = 100
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadItem

 ThreadItem {
   allowsArrowNavigation?: boolean
   children?: ChildrenOrFunction<GridListItemRenderProps>
   focusMode?: 'child' | 'row'
-  id?: Key
   isStreaming?: boolean
   shouldAnnounceOnMount?: boolean
   styles?: StyleString
   textValue?: string

/@react-spectrum/ai:ThreadLoadMoreItem

-ThreadLoadMoreItem {
-  children?: ReactNode
-  className?: string = 'react-aria-GridListLoadMoreItem'
-  isLoading?: boolean
-  onLoadMore?: () => any
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  scrollOffset?: number = 1
-  style?: CSSProperties
-}

/@react-spectrum/ai:PromptFocusContext

-PromptFocusContext {
-  UNTYPED
-}

/@react-spectrum/ai:TokenFieldValue

 TokenFieldValue <T = any> {
-  Direction: any
   caretPosition: Position
   constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
   delete: (Position, Intl.Segmenter, any, any) => this
   deleteLine: (Position, any, any) => this
   findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
   findLineBoundary: (Position, any) => Position | null
   findText: (Position, any, string | RegExp) => Position | null
   redo: () => this
   replaceRange: (Position, Position, string, any) => this
   replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
   segments: readonly Array<TokenFieldSegment<T>>
   slice: (Position, Position) => this
   toString: () => string
   undo: () => this
   withCaretPosition: (Position) => this
 }

/@react-spectrum/ai:PixelLoader

-PixelLoader {
-  className?: string
-  color?: string = 'currentColor'
-  icon?: Array<Cell> | Array<Array<Cell>>
-  isPlaying?: boolean
-  size?: number
-}

/@react-spectrum/ai:AttachmentProps

 AttachmentProps {
+  allowsArrowNavigation?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   children: ReactNode | (AttachmentRenderProps) => ReactNode
   density?: 'compact' | 'regular' | 'spacious' = 'regular'
   download?: boolean | string
+  focusMode?: 'child' | 'row'
   href?: Href
   hrefLang?: string
   id?: Key
   isDisabled?: boolean
-  isInvalid?: boolean
   onAction?: () => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
   ping?: string
   referrerPolicy?: HTMLAttributeReferrerPolicy
   rel?: string
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TagRenderProps>
   routerOptions?: RouterOptions
   size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   styles?: StyleString
   target?: HTMLAttributeAnchorTarget
   textValue?: string
   uploadProgress?: number
   value?: T
   variant?: 'primary' | 'secondary' | 'tertiary' | 'quiet' = 'primary'
 }

/@react-spectrum/ai:PromptFieldProps

 PromptFieldProps {
   acceptedAttachmentTypes?: Array<string>
-  attachments?: Array<PromptFieldAttachment>
-  brandColor?: string
   children: React.ReactNode
-  defaultAttachments?: Array<PromptFieldAttachment>
-  defaultValue?: TokenFieldValue
   isGenerating?: boolean
   onAddAttachments?: (Array<PromptFieldAttachment>) => void
-  onAttachmentsChange?: (Array<PromptFieldAttachment>) => void
-  onChange?: (TokenFieldValue) => void
   onRemoveAttachments?: (Array<PromptFieldAttachment>) => void
   onStop?: () => void
   onSubmit?: (TokenFieldValue, Array<PromptFieldAttachment>) => void
   styles?: StyleString
-  value?: TokenFieldValue
   variant?: 'balanced' | 'prominent' | 'subtle'
 }

/@react-spectrum/ai:PromptTokenFieldProps

 PromptTokenFieldProps {
   children?: (TokenSegment) => React.ReactElement
   completionTrigger?: RegExp
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
   pixelLoader?: Array<Cell> | Array<Array<Cell>>
   placeholder?: string
   renderCompletions?: (string) => Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
 }

/@react-spectrum/ai:PromptTokenFieldPopoverProps

 PromptTokenFieldPopoverProps {
   UNSAFE_className?: UnsafeClassName
   UNSAFE_style?: CSSProperties
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   arrowRef?: RefObject<Element | null>
   boundaryElement?: Element = document.body
   children?: ChildrenOrFunction<PopoverRenderProps>
   containerPadding?: number = 12
   crossOffset?: number = 0
   defaultOpen?: boolean
   filterAnchor?: Position | null
   getTargetRect?: (Element) => DOMRect | null | undefined = target.getBoundingClientRect()
   hideArrow?: boolean = false
   isEntering?: boolean
   isExiting?: boolean
   isFocused?: boolean
   isNonModal?: boolean
   isOpen?: boolean
   items?: Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
   maxHeight?: number
   offset?: number = 8
   onBlurWithin?: (FocusEvent) => void
   onFocusWithin?: (FocusEvent) => void
   onFocusWithinChange?: (boolean) => void
   onOpenChange?: (boolean) => void
   placement?: Placement = 'bottom'
   scrollRef?: RefObject<Element | null> = overlayRef
   shouldFlip?: boolean = true
+  shouldSkipAnimation?: boolean
   size?: 'S' | 'M' | 'L'
   slot?: string | null
   styles?: StyleString
   trigger?: string
 }

/@react-spectrum/ai:PromptFieldVoiceButtonProps

-PromptFieldVoiceButtonProps {
-  isDisabled?: boolean
-  lang?: string
-  onError?: (VoiceInputErrorCode) => void
-}

/@react-spectrum/ai:InsertTokenMenuItemProps

-InsertTokenMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTextMenuItemProps

-InsertTextMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:CommandMenuItemProps

-CommandMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:MessageFeedbackProps

 MessageFeedbackProps {
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   defaultValue?: MessageFeedbackValue
   id?: string
   isDisabled?: boolean
   onChange?: (MessageFeedbackValue) => void
-  size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
   styles?: StylesPropWithHeight
   thumbDownLabel?: string
   thumbUpLabel?: string
 }

/@react-spectrum/ai:ExecutionTraceProps

-ExecutionTraceProps {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  id?: string
-  styles?: StyleString
-}

/@react-spectrum/ai:ExecutionTraceItemProps

-ExecutionTraceItemProps {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  detail?: ReactNode
-  icon?: ReactNode
-  id?: string
-  isAlwaysOpen?: boolean
-  styles?: StyleString
-}

/@react-spectrum/ai:ResponseStatusProps

 ResponseStatusProps {
   children: ReactNode
   defaultExpanded?: boolean
+  density?: 'compact' | 'regular' | 'spacious' = 'regular'
   id?: Key
   isDisabled?: boolean
   isExpanded?: boolean
+  isLoading?: boolean
   onExpandedChange?: (boolean) => void
+  size?: 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
-  status?: 'loading' | 'failed' | 'success' = 'loading'
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadProps

 ThreadProps <T extends {}> {
   aria-label?: string
   aria-labelledby?: string
   children?: ReactNode | (T) => ReactNode
   items?: Iterable<T>
-  scrollEndThreshold?: number = 100
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadItemProps

 ThreadItemProps {
   allowsArrowNavigation?: boolean
   children?: ChildrenOrFunction<GridListItemRenderProps>
   focusMode?: 'child' | 'row'
-  id?: Key
   isStreaming?: boolean
   shouldAnnounceOnMount?: boolean
   styles?: StyleString
   textValue?: string

/@react-spectrum/ai:ThreadLoadMoreItemProps

-ThreadLoadMoreItemProps {
-  children?: ReactNode
-  className?: string = 'react-aria-GridListLoadMoreItem'
-  isLoading?: boolean
-  onLoadMore?: () => any
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  scrollOffset?: number = 1
-  style?: CSSProperties
-}

/@react-spectrum/ai:PixelLoaderProps

-PixelLoaderProps {
-  className?: string
-  color?: string = 'currentColor'
-  icon?: Array<Cell> | Array<Array<Cell>>
-  isPlaying?: boolean
-  size?: number
-}

@react-spectrum/s2

/@react-spectrum/s2:SideNav

-SideNav <T> {
-  UNSAFE_className?: UnsafeClassName
-  UNSAFE_style?: CSSProperties
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  autoFocus?: boolean | FocusStrategy
-  children?: ReactNode | (T) => ReactNode
-  defaultExpandedKeys?: Iterable<Key>
-  dependencies?: ReadonlyArray<any>
-  disabledKeys?: Iterable<Key>
-  expandedKeys?: Iterable<Key>
-  id?: string
-  items?: Iterable<T>
-  onExpandedChange?: (Set<Key>) => any
-  selectedRoute?: string | null
-  slot?: string | null
-  styles?: StylesPropWithHeight
-}

/@react-spectrum/s2:SideNavItem

-SideNavItem {
-  aria-label?: string
-  children: ReactNode
-  download?: boolean | string
-  hasChildItems?: boolean
-  href?: Href
-  hrefLang?: string
-  id?: Key
-  isDisabled?: boolean
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  ping?: string
-  referrerPolicy?: HTMLAttributeReferrerPolicy
-  rel?: string
-  routerOptions?: RouterOptions
-  target?: HTMLAttributeAnchorTarget
-  textValue: string
-}

/@react-spectrum/s2:SideNavItemContent

-SideNavItemContent {
-  children: ReactNode
-}

/@react-spectrum/s2:SideNavItemLink

-SideNavItemLink {
-  children?: ReactNode
-}

/@react-spectrum/s2:SideNavSection

-SideNavSection <T extends {}> {
-  aria-label?: string
-  children?: ReactNode | (T) => ReactElement
-  dependencies?: ReadonlyArray<any>
-  id?: Key
-  items?: Iterable<T>
-}

/@react-spectrum/s2:SideNavHeader

-SideNavHeader {
-  children?: ReactNode
-  id?: string
-}

/@react-spectrum/s2:PopoverProps

 PopoverProps {
   UNSAFE_className?: UnsafeClassName
   UNSAFE_style?: CSSProperties
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   arrowRef?: RefObject<Element | null>
   boundaryElement?: Element = document.body
   children?: ChildrenOrFunction<PopoverRenderProps>
   containerPadding?: number = 12
   crossOffset?: number = 0
   defaultOpen?: boolean
   getTargetRect?: (Element) => DOMRect | null | undefined = target.getBoundingClientRect()
   hideArrow?: boolean = false
   isEntering?: boolean
   isExiting?: boolean
   isNonModal?: boolean
   isOpen?: boolean
   maxHeight?: number
   offset?: number = 8
   onBlurWithin?: (FocusEvent) => void
   onFocusWithin?: (FocusEvent) => void
   onFocusWithinChange?: (boolean) => void
   onOpenChange?: (boolean) => void
   placement?: Placement = 'bottom'
   scrollRef?: RefObject<Element | null> = overlayRef
   shouldFlip?: boolean = true
+  shouldSkipAnimation?: boolean
   size?: 'S' | 'M' | 'L'
   slot?: string | null
   styles?: StyleString
   trigger?: string
 }

/@react-spectrum/s2:SideNavProps

-SideNavProps <T> {
-  UNSAFE_className?: UnsafeClassName
-  UNSAFE_style?: CSSProperties
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  autoFocus?: boolean | FocusStrategy
-  children?: ReactNode | (T) => ReactNode
-  defaultExpandedKeys?: Iterable<Key>
-  dependencies?: ReadonlyArray<any>
-  disabledKeys?: Iterable<Key>
-  expandedKeys?: Iterable<Key>
-  id?: string
-  items?: Iterable<T>
-  onExpandedChange?: (Set<Key>) => any
-  selectedRoute?: string | null
-  slot?: string | null
-  styles?: StylesPropWithHeight
-}

/@react-spectrum/s2:SideNavItemProps

-SideNavItemProps {
-  aria-label?: string
-  children: ReactNode
-  download?: boolean | string
-  hasChildItems?: boolean
-  href?: Href
-  hrefLang?: string
-  id?: Key
-  isDisabled?: boolean
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  ping?: string
-  referrerPolicy?: HTMLAttributeReferrerPolicy
-  rel?: string
-  routerOptions?: RouterOptions
-  target?: HTMLAttributeAnchorTarget
-  textValue: string
-}

/@react-spectrum/s2:SideNavItemContentProps

-SideNavItemContentProps {
-  children: ReactNode
-}

/@react-spectrum/s2:SideNavItemLinkProps

-SideNavItemLinkProps {
-  children?: ReactNode
-}

/@react-spectrum/s2:SideNavSectionProps

-SideNavSectionProps <T> {
-  aria-label?: string
-  children?: ReactNode | (T) => ReactElement
-  dependencies?: ReadonlyArray<any>
-  id?: Key
-  items?: Iterable<T>
-}

/@react-spectrum/s2:SideNavHeaderProps

-SideNavHeaderProps {
-  children?: ReactNode
-  id?: string
-}

@react-stately/virtualizer

/@react-stately/virtualizer:InvalidationContext

 InvalidationContext <O = any> {
   contentChanged?: boolean
-  heightChanged?: boolean
   itemSizeChanged?: boolean
   layoutOptions?: O
   layoutOptionsChanged?: boolean
   offsetChanged?: boolean
   sizeChanged?: boolean
-  widthChanged?: boolean
 }

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown

Agent Skills Changes

Removed (97)
  • react-aria/skills/react-aria/references/components/Breadcrumbs/useBreadcrumbs.md
  • react-aria/skills/react-aria/references/components/Button/useButton.md
  • react-aria/skills/react-aria/references/components/Calendar/useCalendar.md
  • react-aria/skills/react-aria/references/components/Checkbox/useCheckbox.md
  • react-aria/skills/react-aria/references/components/CheckboxGroup/useCheckboxGroup.md
  • react-aria/skills/react-aria/references/components/ColorArea/useColorArea.md
  • react-aria/skills/react-aria/references/components/ColorField/useColorField.md
  • react-aria/skills/react-aria/references/components/ColorSlider/useColorSlider.md
  • react-aria/skills/react-aria/references/components/ColorSwatch/useColorSwatch.md
  • react-aria/skills/react-aria/references/components/ColorWheel/useColorWheel.md
  • react-aria/skills/react-aria/references/components/ComboBox/useComboBox.md
  • react-aria/skills/react-aria/references/components/DateField/useDateField.md
  • react-aria/skills/react-aria/references/components/DatePicker/useDatePicker.md
  • react-aria/skills/react-aria/references/components/DateRangePicker/useDateRangePicker.md
  • react-aria/skills/react-aria/references/components/Disclosure/useDisclosure.md
  • react-aria/skills/react-aria/references/components/GridList/useGridList.md
  • react-aria/skills/react-aria/references/components/Link/useLink.md
  • react-aria/skills/react-aria/references/components/ListBox/useListBox.md
  • react-aria/skills/react-aria/references/components/Menu/useMenu.md
  • react-aria/skills/react-aria/references/components/Meter/useMeter.md
  • react-aria/skills/react-aria/references/components/Modal/useModalOverlay.md
  • react-aria/skills/react-aria/references/components/NumberField/useNumberField.md
  • react-aria/skills/react-aria/references/components/Popover/usePopover.md
  • react-aria/skills/react-aria/references/components/ProgressBar/useProgressBar.md
  • react-aria/skills/react-aria/references/components/RadioGroup/useRadioGroup.md
  • react-aria/skills/react-aria/references/components/RangeCalendar/useRangeCalendar.md
  • react-aria/skills/react-aria/references/components/SearchField/useSearchField.md
  • react-aria/skills/react-aria/references/components/Select/useSelect.md
  • react-aria/skills/react-aria/references/components/Separator/useSeparator.md
  • react-aria/skills/react-aria/references/components/Slider/useSlider.md
  • react-aria/skills/react-aria/references/components/Switch/useSwitch.md
  • react-aria/skills/react-aria/references/components/Table/useTable.md
  • react-aria/skills/react-aria/references/components/Tabs/useTabList.md
  • react-aria/skills/react-aria/references/components/TagGroup/useTagGroup.md
  • react-aria/skills/react-aria/references/components/TextField/useTextField.md
  • react-aria/skills/react-aria/references/components/TimeField/useTimeField.md
  • react-aria/skills/react-aria/references/components/Toast/useToast.md
  • react-aria/skills/react-aria/references/components/ToggleButton/useToggleButton.md
  • react-aria/skills/react-aria/references/components/ToggleButtonGroup/useToggleButtonGroup.md
  • react-aria/skills/react-aria/references/components/Toolbar/useToolbar.md
  • react-aria/skills/react-aria/references/components/Tooltip/useTooltipTrigger.md
  • react-aria/skills/react-aria/references/guides/hooks.md
  • react-aria/skills/react-aria/references/interactions/useDraggableCollection.md
  • react-aria/skills/react-aria/references/interactions/useDroppableCollection.md
  • react-aria/skills/react-aria/references/utilities/useAsyncList.md
  • react-aria/skills/react-aria/references/utilities/useListData.md
  • react-aria/skills/react-aria/references/utilities/useListFormatter.md
  • react-aria/skills/react-aria/references/utilities/useTreeData.md
  • s2/skills/react-spectrum-s2/references/components/SideNav.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Breadcrumbs/useBreadcrumbs.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Button/useButton.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Calendar/useCalendar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Checkbox/useCheckbox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/CheckboxGroup/useCheckboxGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorArea/useColorArea.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorField/useColorField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorSlider/useColorSlider.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorSwatch/useColorSwatch.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorWheel/useColorWheel.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ComboBox/useComboBox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DateField/useDateField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DatePicker/useDatePicker.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DateRangePicker/useDateRangePicker.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Disclosure/useDisclosure.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/GridList/useGridList.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Link/useLink.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ListBox/useListBox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Menu/useMenu.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Meter/useMeter.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Modal/useModalOverlay.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/NumberField/useNumberField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Popover/usePopover.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ProgressBar/useProgressBar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/RadioGroup/useRadioGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/RangeCalendar/useRangeCalendar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/SearchField/useSearchField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Select/useSelect.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Separator/useSeparator.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Slider/useSlider.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Switch/useSwitch.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Table/useTable.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Tabs/useTabList.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TagGroup/useTagGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TextField/useTextField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TimeField/useTimeField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Toast/useToast.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ToggleButton/useToggleButton.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ToggleButtonGroup/useToggleButtonGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Toolbar/useToolbar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Tooltip/useTooltipTrigger.md
  • s2/skills/react-spectrum-s2/references/react-aria/guides/hooks.md
  • s2/skills/react-spectrum-s2/references/react-aria/interactions/useDraggableCollection.md
  • s2/skills/react-spectrum-s2/references/react-aria/interactions/useDroppableCollection.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useAsyncList.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useListData.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useListFormatter.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useTreeData.md
Modified (57)
Install

React Spectrum S2:

npx skills add https://d1pzu54gtk2aed.cloudfront.net/pr/1f2908319fea4a85aa6a16cced1291bf81ccaf9d/

React Aria:

npx skills add https://d5iwopk28bdhl.cloudfront.net/pr/1f2908319fea4a85aa6a16cced1291bf81ccaf9d/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants