feat: add AttachmentGrid component - #10561
Conversation
|
Build successful! 🎉 |
|
Build successful! 🎉 |
| ...focusRing() | ||
| }); | ||
|
|
||
| const gridGap = css('gap: 6px;'); |
There was a problem hiding this comment.
I can swap this out for 8px, Figma had 6, wasn't sure.
There was a problem hiding this comment.
you can use custom values in a style macro like so
gap: '[6px]'
or if it needs to respond to font size or scaling, you can make use of size() or space()
https://react-spectrum.adobe.com/style-macro#space
There was a problem hiding this comment.
is it really a static 6px at all sizes? Feels like the scale should change the gap size
| ) | ||
| }; | ||
|
|
||
| export const WithAttachmentGrid: Story = { |
There was a problem hiding this comment.
Thought this would be a useful story, can remove.
| export const Overflow: Story = { | ||
| name: 'Overflow (vertical scroll fade)', | ||
| render: args => ( | ||
| <div style={{width: 320, resize: 'horizontal', overflow: 'hidden'}}> |
There was a problem hiding this comment.
maybe this needs padding
|
Build successful! 🎉 |
## API Changes
@react-spectrum/ai/@react-spectrum/ai:ExecutionTraceItem ExecutionTraceItem {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
- children: string
+ children: ReactNode
detail?: ReactNode
detailMaxHeight?: number = 120
icon?: ReactNode
id?: string
styles?: StyleString
}/@react-spectrum/ai:ResponseStatusTitle ResponseStatusTitle {
- children: string
+ children: React.ReactNode
id?: string
level?: number = 3
pixelLoader?: Array<Cell> | Array<Array<Cell>>
styles?: StyleString/@react-spectrum/ai:ExecutionTraceItemProps ExecutionTraceItemProps {
aria-describedby?: string
aria-details?: string
aria-label?: string
aria-labelledby?: string
- children: string
+ children: ReactNode
detail?: ReactNode
detailMaxHeight?: number = 120
icon?: ReactNode
id?: string
styles?: StyleString
}/@react-spectrum/ai:ResponseStatusTitleProps ResponseStatusTitleProps {
- children: string
+ children: React.ReactNode
id?: string
level?: number = 3
pixelLoader?: Array<Cell> | Array<Array<Cell>>
styles?: StyleString/@react-spectrum/ai:AttachmentGrid+AttachmentGrid <T> {
+ aria-describedby?: string
+ aria-details?: string
+ aria-label?: string
+ aria-labelledby?: string
+ children?: ReactNode | (T) => ReactNode
+ dependencies?: ReadonlyArray<any>
+ id?: string
+ items?: Iterable<T>
+ styles?: StyleString
+}/@react-spectrum/ai:AttachmentGridItem+AttachmentGridItem {
+ aria-describedby?: string
+ aria-details?: string
+ aria-label?: string
+ aria-labelledby?: string
+ children: ReactNode | (AttachmentRenderProps) => ReactNode
+ id?: Key
+ isInvalid?: boolean
+ size?: 'XS' | 'S' | 'M' | 'L' | 'XL'
+ styles?: StyleString
+ textValue?: string
+ uploadProgress?: number
+}/@react-spectrum/ai:AttachmentGridProps+AttachmentGridProps <T> {
+ aria-describedby?: string
+ aria-details?: string
+ aria-label?: string
+ aria-labelledby?: string
+ children?: ReactNode | (T) => ReactNode
+ dependencies?: ReadonlyArray<any>
+ id?: string
+ items?: Iterable<T>
+ styles?: StyleString
+}/@react-spectrum/ai:AttachmentGridItemProps+AttachmentGridItemProps {
+ aria-describedby?: string
+ aria-details?: string
+ aria-label?: string
+ aria-labelledby?: string
+ children: ReactNode | (AttachmentRenderProps) => ReactNode
+ id?: Key
+ isInvalid?: boolean
+ size?: 'XS' | 'S' | 'M' | 'L' | 'XL'
+ styles?: StyleString
+ textValue?: string
+ uploadProgress?: number
+} |
Agent Skills ChangesModified (9)
InstallReact Spectrum S2: React Aria: |
| ...focusRing() | ||
| }); | ||
|
|
||
| const gridGap = css('gap: 6px;'); |
There was a problem hiding this comment.
is it really a static 6px at all sizes? Feels like the scale should change the gap size
| let domRef = useDOMRef(ref); | ||
|
|
||
| return ( | ||
| <ListBox |
There was a problem hiding this comment.
should the container have a focus ring? Or are the items focusable its hard to tell
| const hasContent = ':has([data-slot=content])'; | ||
|
|
||
| const gridStyles = style({ | ||
| display: 'grid', |
There was a problem hiding this comment.
Can there be a mix of cards that are thumbnails and cards that have the description?
| const gridStyles = style({ | ||
| display: 'grid', | ||
| gridTemplateColumns: { | ||
| default: 'repeat(auto-fill, minmax(64px, 1fr))', |
There was a problem hiding this comment.
If the container is wide and there aren't enough thumbs to fill it in the first row, i think they'll end up spaced apart
I think you just want
default: 'repeat(auto-fill, minmax(64px, auto))'
though that only matters if the attachments can be varying sizes, if they can't, then you could just do
default: 'repeat(auto-fill, 64px)'
| size?: 'XS' | 'S' | 'M' | 'L' | 'XL'; | ||
| /** Whether the attachment has an error. */ | ||
| isInvalid?: boolean; | ||
| uploadProgress?: number; |
| aria-label={ariaLabel} | ||
| aria-labelledby={ariaLabelledby} | ||
| aria-describedby={ariaDescribedby} |
There was a problem hiding this comment.
these and id are all just getting passed straight through, we can use filterDOMProps with labeling set to true
then we can just spread the result of that
Closes
✅ Pull Request Checklist:
📝 Test Instructions:
🧢 Your Project:
Adobe