66
77import { getEventKey , isSafari } from "@qualcomm-ui/dom/query"
88import { booleanAriaAttr , booleanDataAttr } from "@qualcomm-ui/utils/attributes"
9- import type { Direction } from "@qualcomm-ui/utils/direction"
109import type { Machine , PropNormalizer } from "@qualcomm-ui/utils/machine"
1110
11+ import { accordionAnatomy } from "./accordion.anatomy"
1212import type {
1313 AccordionApi ,
1414 AccordionItemApiProps ,
@@ -24,6 +24,8 @@ import type {
2424} from "./accordion.types"
2525import { domIds } from "./internal"
2626
27+ const parts = accordionAnatomy . parts
28+
2729export function createAccordionApi (
2830 machine : Machine < AccordionSchema > ,
2931 normalize : PropNormalizer ,
@@ -34,11 +36,6 @@ export function createAccordionApi(
3436 const value = context . get ( "value" )
3537 const multiple = prop ( "multiple" )
3638
37- const commonProps : { "data-scope" : "accordion" ; dir : Direction | undefined } = {
38- "data-scope" : "accordion" ,
39- dir : prop ( "dir" ) ,
40- }
41-
4239 function setValue ( value : string [ ] ) {
4340 send ( {
4441 type : "VALUE.SET" ,
@@ -70,10 +67,9 @@ export function createAccordionApi(
7067 const state = getAccordionItemState ( itemProps )
7168 scope . ids . collection ( "item" ) . register ( state . value , id , onDestroy )
7269 return normalize . element ( {
73- ...commonProps ,
70+ ...parts . item ,
7471 "data-disabled" : booleanDataAttr ( state . disabled ) ,
7572 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
76- "data-part" : "item" ,
7773 "data-state" : state . open ? "open" : "closed" ,
7874 disabled : state . disabled ,
7975 id,
@@ -89,13 +85,12 @@ export function createAccordionApi(
8985 scope . ids . collection ( "content" ) . register ( state . value , id , onDestroy )
9086
9187 return normalize . element ( {
92- ...commonProps ,
88+ ...parts . itemContent ,
9389 "aria-hidden" : booleanAriaAttr ( ! state . open , null ) ,
9490 "aria-labelledby" : domIds . trigger ( scope , state . value ) ! ,
9591 "data-disabled" : booleanDataAttr ( state . disabled ) ,
9692 "data-expanded" : booleanDataAttr ( state . open ) ,
9793 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
98- "data-part" : "item-content" ,
9994 "data-state" : state . open ? "open" : "closed" ,
10095 id,
10196 role : "region" ,
@@ -107,11 +102,10 @@ export function createAccordionApi(
107102 ) : AccordionItemIndicatorBindings {
108103 const state = getAccordionItemState ( itemContext )
109104 return normalize . element ( {
110- ...commonProps ,
105+ ...parts . itemIndicator ,
111106 "aria-hidden" : true ,
112107 "data-disabled" : booleanDataAttr ( state . disabled ) ,
113108 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
114- "data-part" : "item-indicator" ,
115109 "data-state" : state . open ? "open" : "closed" ,
116110 } )
117111 } ,
@@ -122,10 +116,9 @@ export function createAccordionApi(
122116 const state = getAccordionItemState ( itemContext )
123117
124118 return normalize . element ( {
125- ...commonProps ,
119+ ...parts . itemSecondaryText ,
126120 "data-disabled" : booleanDataAttr ( state . disabled ) ,
127121 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
128- "data-part" : "item-secondary-text" ,
129122 "data-state" : state . open ? "open" : "closed" ,
130123 } )
131124 } ,
@@ -135,10 +128,9 @@ export function createAccordionApi(
135128 getAccordionItemTextBindings ( itemContext ) : AccordionItemTextBindings {
136129 const state = getAccordionItemState ( itemContext )
137130 return normalize . element ( {
138- ...commonProps ,
131+ ...parts . itemText ,
139132 "data-disabled" : booleanDataAttr ( state . disabled ) ,
140133 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
141- "data-part" : "item-text" ,
142134 "data-state" : state . open ? "open" : "closed" ,
143135 } )
144136 } ,
@@ -151,14 +143,13 @@ export function createAccordionApi(
151143 const state = getAccordionItemState ( itemProps )
152144 scope . ids . collection ( "trigger" ) . register ( state . value , id , onDestroy )
153145 return normalize . element ( {
154- ...commonProps ,
146+ ...parts . itemTrigger ,
155147 "aria-controls" : domIds . content ( scope , state . value ) ! ,
156148 "aria-disabled" : booleanAriaAttr ( state . disabled ) ,
157149 "aria-expanded" : booleanAriaAttr ( state . open ) ,
158150 "data-disabled" : booleanDataAttr ( state . disabled ) ,
159151 "data-focus" : booleanDataAttr ( focusedValue === state . value ) ,
160152 "data-ownedby" : domIds . root ( scope ) ,
161- "data-part" : "trigger" ,
162153 "data-state" : state . open ? "open" : "closed" ,
163154 disabled : state . disabled ,
164155 id,
@@ -237,8 +228,8 @@ export function createAccordionApi(
237228 getRootBindings ( { id, onDestroy} ) : AccordionRootBindings {
238229 scope . ids . register ( "root" , id , onDestroy )
239230 return normalize . element ( {
240- ...commonProps ,
241- "data-part" : "root" ,
231+ ...parts . root ,
232+ dir : prop ( "dir" ) ,
242233 id,
243234 } )
244235 } ,
0 commit comments