@@ -11,7 +11,8 @@ export interface AccordionProps {
1111
1212const accordionItemCSS = css `
1313 cursor : pointer;
14- padding : var (--accordion-padding-top ) var (--accordion-padding-side );
14+ height : 40px ;
15+ padding : 0 var (--accordion-padding-side );
1516 display : block;
1617 width : 100% ;
1718 display : flex;
@@ -25,15 +26,9 @@ const accordionItemCSS = css`
2526 text-align : start;
2627 color : var (--ac-global-text-color-900 );
2728 border-bottom : 1px solid var (--ac-global-border-color-dark );
28- /* remove outline - TODO might need to give a visual cue that this area is in focus */
29- outline : none;
30- background-color : var (--ac-global-background-color-light );
31- transition : background-color 0.2s ease-in-out;
29+ transition : background-color ease-in-out 0.2s ;
3230 & : hover {
33- background-color : var (--ac-global-background-color-light-hover );
34- }
35- .ac-accordion-item__title {
36- font-size : var (--accordion-font-size );
31+ background-color : var (--ac-global-background-color-light );
3732 }
3833` ;
3934
@@ -48,12 +43,16 @@ export function Accordion({ children }: AccordionProps) {
4843 role = "region"
4944 css = { css `
5045 --accordion-animation-duration : ${ theme . animation . global . duration } ms;
51-
5246 & .ac-accordion--default {
5347 --accordion-padding-top : var (--ac-global-dimension-static-size-100 );
5448 --accordion-padding-side : var (--ac-global-dimension-static-size-200 );
5549 --accordion-font-size : ${ theme . typography . sizes . medium . fontSize } px;
5650 }
51+ .ac-accordion-item : not (: last-of-type ) {
52+ .ac-accordion-itemContent {
53+ border-bottom : 1px solid var (--ac-global-border-color-dark );
54+ }
55+ }
5756 ` }
5857 >
5958 { children }
@@ -77,6 +76,10 @@ export interface AccordionItemProps {
7776 * Callback function for when the collapsed state changes
7877 */
7978 onChange ?: ( isOpen : boolean ) => void ;
79+ /**
80+ * An extra element to show on the right hand side
81+ */
82+ extra ?: ReactNode ;
8083}
8184
8285export function AccordionItem ( props : AccordionItemProps ) {
@@ -87,6 +90,7 @@ export function AccordionItem(props: AccordionItemProps) {
8790 defaultIsOpen = true ,
8891 onChange,
8992 children,
93+ extra,
9094 } = props ;
9195 const [ isOpen , setIsOpen ] = useState ( defaultIsOpen ) ;
9296 const contentId = `${ id } -content` ,
@@ -137,23 +141,32 @@ export function AccordionItem(props: AccordionItemProps) {
137141 aria-expanded = { isOpen }
138142 >
139143 { titleEl }
140- < Icon
141- svg = { < ArrowIosDownwardOutline /> }
142- className = "ac-accordion-itemIndicator"
144+ < div
143145 css = { css `
144- transition : transform ease var (--accordion-animation-duration );
145- transform : rotate (0deg );
146+ display : flex;
147+ flex-direction : row;
148+ align-items : center;
149+ gap : var (--ac-global-dimension-static-size-100 );
146150 ` }
147- aria-hidden = { true }
148- />
151+ >
152+ { extra }
153+ < Icon
154+ svg = { < ArrowIosDownwardOutline /> }
155+ className = "ac-accordion-itemIndicator"
156+ css = { css `
157+ transition : transform ease var (--accordion-animation-duration );
158+ transform : rotate (0deg );
159+ ` }
160+ aria-hidden = { true }
161+ />
162+ </ div >
149163 </ button >
150164 </ Heading >
151165 < div
152166 className = "ac-accordion-itemContent"
153167 id = { contentId }
154168 role = "region"
155169 css = { css `
156- border-bottom : 1px solid var (--ac-global-border-color-dark );
157170 display : ${ isOpen ? 'block' : 'none' } ;
158171 ` }
159172 aria-labelledby = { headerId }
0 commit comments