-
-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[accordion] New Accordion components and hooks #577
base: master
Are you sure you want to change the base?
Conversation
Netlify deploy preview |
36e29e3
to
881476c
Compare
84b0482
to
e16cad0
Compare
bb181bf
to
c735efb
Compare
b5f818e
to
6969cd2
Compare
6969cd2
to
91333ff
Compare
91333ff
to
85062eb
Compare
0bf173f
to
0d2b45f
Compare
18f8e1c
to
a53c395
Compare
a53c395
to
7ad7ce1
Compare
bb49414
to
ca7e9b4
Compare
customStyleHookMapping: { | ||
disabled: (isDisabled) => { | ||
if (isDisabled) { | ||
return { 'data-disabled': '' }; | ||
} | ||
return null; | ||
}, | ||
value: () => null, | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be placed outside the component. I don't think data-disabled
needs a custom style hook as this should work by default?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@atomiks Moved - by default disabled
becomes data-disabled="true"
instead of just data-disabled
which seems a bit better, maybe the getStyleHookProps
util could be updated to handle this universally?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm ok with just data-disabled
and whatever we choose, we should apply to all components. So getStyleHookProps
should handle it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2c8327e
Since we already don't render any data attr when the value is false
, I think we could change all data-attr='true'
to just data-attr
(e.g. data-readonly
, data-required
...)
When uncontrolled, use the `defaultValue` prop to set the initial state of the accordion: | ||
|
||
```tsx | ||
<Accordion.Root defaultValue={[0]}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if openPanels
wouldn't make more sense than value
(and now that I think of it, I'd rename Tabs's value
as well).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree the API for Tabs and Accordion should be as similar as possible, wonder what @vladmoroz and @colmtuite think?
The API would be openPanels
/defaultOpenPanels
? and onOpenPanelChange
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@michaldudak what would value
become on the item itself? E.g. here <Accordion.Item value="1">
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
value
on items still makes sense to me.
2c8327e
to
e1134df
Compare
Closes #25
Closes #627
Closes #702
Builds on top of:
RadioGroup
component #487Preview
👉 https://deploy-preview-577--base-ui.netlify.app/components/react-accordion
Summary
Accordion is built using Collapsible, some changes were made to
Collapsible
while working on this:useCollapsibleTrigger
(andCollapsible/AccordionTrigger
) now usesuseButton
Collapsible.Content
is now renamed toCollapsible.Panel
window.getComputedStyle
to an absolute minimum, merged the internal states into one[data-open]
on the panel, and[data-panel-open]
on the triggerAccordion features
orientation: 'vertical' | 'horizontal'
: sets a data attr and navigates focus between triggers with ArrowRight/Left instead of ArrowDown/UpCollapsible.Content
now exposes the--collapsible-content-width
var to support horizontal orientationdirection: 'ltr' | 'rtl'
: sets thedir
attr like other components and reverses ArrowRight & ArrowLeft whenorientation === 'horizontal'
openMultiple: boolean
: defaulttrue
, controls whether multiple sections can be open at the same time, not expected to change during the lifetime of the componentdisabled
can be set on theRoot
,Section
, orTrigger
hidden="until-found"
can be set on theRoot
or aPanel
Extra demos
hidden="until-found"
https://deploy-preview-577--base-ui.netlify.app/experiments/accordion-animations