Skip to content

Commit 4c2d999

Browse files
authored
Merge pull request #238 from qualcomm/refactor/data-scope
refactor/data-scope
2 parents 776d67e + fa73b20 commit 4c2d999

511 files changed

Lines changed: 3895 additions & 3035 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ tsconfig.*.tsbuildinfo
100100
.react-router/
101101
**/*\wsl.*
102102
**/coverage
103+
packages/**/.vitest-attachments
103104

104105
###############################################################################
105106
# OS / editor / IDE files

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@
8181
"npm-check-updates": "^19.6.3",
8282
"npm-run-all2": "^8.0.4",
8383
"playwright": "1.56.1",
84-
"prettier": "^3.6.2",
85-
"prettier-plugin-tailwindcss": "^0.7.1",
84+
"prettier": "^3.8.3",
85+
"prettier-plugin-tailwindcss": "^0.7.2",
8686
"pretty-ms": "^9.3.0",
8787
"shx": "^0.4.0",
8888
"stylelint": "^16.23.1",
@@ -101,6 +101,7 @@
101101
"eslint": "catalog:",
102102
"lodash": "4.17.23",
103103
"playwright": "1.56.1",
104+
"prettier": "3.8.3",
104105
"typescript": "5.9.3"
105106
},
106107
"packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {type Anatomy, createAnatomy} from "@qualcomm-ui/utils/anatomy"
5+
6+
export const accordionParts = [
7+
"root",
8+
"item",
9+
"itemTrigger",
10+
"itemText",
11+
"itemSecondaryText",
12+
"itemIndicator",
13+
"itemContent",
14+
] as const
15+
16+
export const accordionAnatomy: Anatomy<
17+
"accordion",
18+
(typeof accordionParts)[number]
19+
> = createAnatomy("accordion").parts(...accordionParts)

packages/common/core/src/accordion/accordion.api.ts

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
import {getEventKey, isSafari} from "@qualcomm-ui/dom/query"
88
import {booleanAriaAttr, booleanDataAttr} from "@qualcomm-ui/utils/attributes"
9-
import type {Direction} from "@qualcomm-ui/utils/direction"
109
import type {Machine, PropNormalizer} from "@qualcomm-ui/utils/machine"
1110

11+
import {accordionAnatomy} from "./accordion.anatomy"
1212
import type {
1313
AccordionApi,
1414
AccordionItemApiProps,
@@ -24,6 +24,8 @@ import type {
2424
} from "./accordion.types"
2525
import {domIds} from "./internal"
2626

27+
const parts = accordionAnatomy.parts
28+
2729
export 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
},

packages/common/core/src/accordion/accordion.types.ts

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
55
// SPDX-License-Identifier: BSD-3-Clause-Clear
66

7+
import type {AnatomyPart, AnatomyPartName} from "@qualcomm-ui/utils/anatomy"
78
import type {
89
BooleanAriaAttr,
910
BooleanDataAttr,
@@ -18,6 +19,8 @@ import type {
1819
MachineSchema,
1920
} from "@qualcomm-ui/utils/machine"
2021

22+
import type {accordionAnatomy} from "./accordion.anatomy"
23+
2124
export interface AccordionApiProps extends DirectionProperty {
2225
/**
2326
* Whether sections can be collapsed (in non-multiple mode).
@@ -135,34 +138,31 @@ export interface AccordionSchema extends MachineSchema {
135138
props: RequiredBy<AccordionApiProps, "dir">
136139
}
137140

138-
interface CommonBindings extends DirectionProperty {
139-
"data-scope": "accordion"
140-
}
141+
type PartName = AnatomyPartName<typeof accordionAnatomy>
142+
interface Part<P extends PartName> extends AnatomyPart<"accordion", P> {}
141143

142-
export interface AccordionRootBindings extends CommonBindings {
143-
"data-part": "root"
144+
export interface AccordionRootBindings extends Part<"root">, DirectionProperty {
144145
id: string
145146
}
146147

147-
export interface AccordionItemCommonBindings extends CommonBindings {
148+
export interface AccordionItemCommonBindings {
148149
"data-disabled": BooleanDataAttr
149150
"data-focus": BooleanDataAttr
150151
"data-state": "open" | "closed"
151152
}
152153

153-
export interface AccordionItemBindings extends AccordionItemCommonBindings {
154-
"data-part": "item"
154+
export interface AccordionItemBindings
155+
extends Part<"item">, AccordionItemCommonBindings {
155156
disabled?: boolean
156157
id: string
157158
}
158159

159160
export interface AccordionItemTriggerBindings
160-
extends AccordionItemCommonBindings {
161+
extends Part<"itemTrigger">, AccordionItemCommonBindings {
161162
"aria-controls": string
162163
"aria-disabled": BooleanAriaAttr
163164
"aria-expanded": BooleanAriaAttr
164165
"data-ownedby": string
165-
"data-part": "trigger"
166166
disabled?: boolean
167167
id: string
168168
onBlur: JSX.FocusEventHandler<HTMLButtonElement>
@@ -172,27 +172,22 @@ export interface AccordionItemTriggerBindings
172172
type: "button"
173173
}
174174

175-
export interface AccordionItemTextBindings extends AccordionItemCommonBindings {
176-
"data-part": "item-text"
177-
}
175+
export interface AccordionItemTextBindings
176+
extends Part<"itemText">, AccordionItemCommonBindings {}
178177

179178
export interface AccordionItemSecondaryTextBindings
180-
extends AccordionItemCommonBindings {
181-
"data-part": "item-secondary-text"
182-
}
179+
extends Part<"itemSecondaryText">, AccordionItemCommonBindings {}
183180

184181
export interface AccordionItemIndicatorBindings
185-
extends AccordionItemCommonBindings {
182+
extends Part<"itemIndicator">, AccordionItemCommonBindings {
186183
"aria-hidden": true
187-
"data-part": "item-indicator"
188184
}
189185

190186
export interface AccordionItemContentBindings
191-
extends AccordionItemCommonBindings {
187+
extends Part<"itemContent">, AccordionItemCommonBindings {
192188
"aria-hidden": BooleanAriaAttr
193189
"aria-labelledby": string
194190
"data-expanded": BooleanDataAttr
195-
"data-part": "item-content"
196191
id: string
197192
role: "region"
198193
}

packages/common/core/src/accordion/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from "./accordion.anatomy"
12
export * from "./accordion.api"
23
export * from "./accordion.machine"
34
export * from "./accordion.props"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {type Anatomy, createAnatomy} from "@qualcomm-ui/utils/anatomy"
5+
6+
export const actionGroupParts = ["root"] as const
7+
8+
export const actionGroupAnatomy: Anatomy<
9+
"actionGroup",
10+
(typeof actionGroupParts)[number]
11+
> = createAnatomy("actionGroup").parts(...actionGroupParts)
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
22
// SPDX-License-Identifier: BSD-3-Clause-Clear
33

4+
import type {AnatomyPart} from "@qualcomm-ui/utils/anatomy"
5+
6+
import {actionGroupAnatomy} from "./action-group.anatomy"
7+
48
/**
59
* @deprecated
610
*/
7-
export interface ActionGroupRootBindings {
8-
"data-part": "root"
9-
"data-scope": "action-group"
10-
}
11+
export interface ActionGroupRootBindings extends AnatomyPart<
12+
"actionGroup",
13+
"root"
14+
> {}
1115

1216
/**
1317
* @deprecated
1418
*/
1519
export function getActionGroupRootBindings(): ActionGroupRootBindings {
16-
return {
17-
"data-part": "root",
18-
"data-scope": "action-group",
19-
}
20+
return actionGroupAnatomy.parts.root
2021
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from "./action-group"
2+
export * from "./action-group.anatomy"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {type Anatomy, createAnatomy} from "@qualcomm-ui/utils/anatomy"
5+
6+
export const avatarParts = ["root", "image", "content", "status"] as const
7+
8+
export const avatarAnatomy: Anatomy<"avatar", (typeof avatarParts)[number]> =
9+
createAnatomy("avatar").parts(...avatarParts)

0 commit comments

Comments
 (0)