aria-ease 6.10.0 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/{bin/buildContracts-S22V7AGV.js → dist/buildContracts-FT6KWUJN.js} +3 -3
- package/dist/{chunk-XERMSYEH.js → chunk-FZ7GMIJB.js} +0 -21
- package/{bin/chunk-NI3MQCAS.js → dist/chunk-GJGUY643.js} +2 -2
- package/{bin → dist}/cli.cjs +30 -67
- package/{bin → dist}/cli.js +4 -4
- package/dist/{configLoader-DWHOHXHL.js → configLoader-Q7N5XV4P.js} +2 -2
- package/{bin/configLoader-UJZHQBYS.js → dist/configLoader-REHK3S3Q.js} +1 -1
- package/{bin/contractTestRunnerPlaywright-QDXSK3FE.js → dist/contractTestRunnerPlaywright-DIXP5DQ3.js} +5 -20
- package/dist/{contractTestRunnerPlaywright-WNWQYSXZ.js → contractTestRunnerPlaywright-EWAWQVHT.js} +5 -20
- package/dist/index.cjs +164 -122
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +155 -71
- package/dist/src/{Types.d-yGC2bBaB.d.ts → Types.d-DYfYR3Vc.d.cts} +1 -1
- package/dist/src/{Types.d-yGC2bBaB.d.cts → Types.d-DYfYR3Vc.d.ts} +1 -1
- package/dist/src/accordion/index.d.cts +1 -1
- package/dist/src/accordion/index.d.ts +1 -1
- package/dist/src/block/index.d.cts +1 -1
- package/dist/src/block/index.d.ts +1 -1
- package/dist/src/checkbox/index.d.cts +1 -1
- package/dist/src/checkbox/index.d.ts +1 -1
- package/dist/src/combobox/index.d.cts +1 -1
- package/dist/src/combobox/index.d.ts +1 -1
- package/dist/src/menu/index.d.cts +1 -1
- package/dist/src/menu/index.d.ts +1 -1
- package/dist/src/radio/index.d.cts +1 -1
- package/dist/src/radio/index.d.ts +1 -1
- package/dist/src/tabs/index.d.cts +1 -1
- package/dist/src/tabs/index.d.ts +1 -1
- package/dist/src/toggle/index.d.cts +1 -1
- package/dist/src/toggle/index.d.ts +1 -1
- package/dist/src/utils/test/{chunk-XERMSYEH.js → chunk-FZ7GMIJB.js} +1 -21
- package/dist/src/utils/test/{configLoader-SHJSRG2A.js → configLoader-NA7IBCS3.js} +2 -2
- package/dist/src/utils/test/{contractTestRunnerPlaywright-Z2AHXSNM.js → contractTestRunnerPlaywright-CIZOXYRW.js} +5 -19
- package/dist/src/utils/test/dsl/index.cjs +139 -60
- package/dist/src/utils/test/dsl/index.d.cts +3 -0
- package/dist/src/utils/test/dsl/index.d.ts +3 -0
- package/dist/src/utils/test/dsl/index.js +139 -60
- package/dist/src/utils/test/index.cjs +19 -55
- package/dist/src/utils/test/index.js +16 -10
- package/{bin/test-O3J4ZPQR.js → dist/test-HBPCSYH5.js} +16 -11
- package/package.json +5 -7
- package/bin/AccordionComponentStrategy-4ZEIQ2V6.js +0 -42
- package/bin/ComboboxComponentStrategy-OGRVZXAF.js +0 -64
- package/bin/MenuComponentStrategy-JAMTCSNF.js +0 -81
- package/bin/TabsComponentStrategy-3SQURPMX.js +0 -29
- package/bin/chunk-I2KLQ2HA.js +0 -22
- package/bin/chunk-PK5L2SAF.js +0 -17
- package/bin/chunk-XERMSYEH.js +0 -363
- package/dist/src/utils/test/aria-contracts/accordion/accordion.contract.json +0 -290
- package/dist/src/utils/test/aria-contracts/combobox/combobox.listbox.contract.json +0 -463
- package/dist/src/utils/test/aria-contracts/menu/menu.contract.json +0 -562
- package/dist/src/utils/test/aria-contracts/tabs/tabs.contract.json +0 -361
- /package/{bin → dist}/audit-RM6TCZ5C.js +0 -0
- /package/{bin → dist}/badgeHelper-JOWO6RQG.js +0 -0
- /package/{bin → dist}/chunk-JJEPLK7L.js +0 -0
- /package/{bin → dist}/cli.d.cts +0 -0
- /package/{bin → dist}/cli.d.ts +0 -0
- /package/{bin → dist}/formatters-32KQIIYS.js +0 -0
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"meta": {
|
|
3
|
-
"id": "aria-ease.tabs",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"created": "28-02-2026",
|
|
6
|
-
"lastUpdated": "19-03-2026",
|
|
7
|
-
"description": "ARIA tabs interaction contract. Validates the ARIA and interaction contract for a custom tabs component following the ARIA Authoring Practices Guide pattern.",
|
|
8
|
-
"source": {
|
|
9
|
-
"apg": "https://www.w3.org/WAI/ARIA/apg/patterns/tabs/",
|
|
10
|
-
"wcag": ["2.2 AA"]
|
|
11
|
-
},
|
|
12
|
-
"W3CName": "Tabs"
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
"selectors": {
|
|
16
|
-
"tablist": "[role=tablist]",
|
|
17
|
-
"tab": "[role=tab]",
|
|
18
|
-
"panel": "[role=tabpanel]",
|
|
19
|
-
"focusable": "[role=tab]",
|
|
20
|
-
"relative": "[role=tab]"
|
|
21
|
-
},
|
|
22
|
-
|
|
23
|
-
"observables": {
|
|
24
|
-
"observable": "focus | visible | attribute | role",
|
|
25
|
-
"target": "tab | relative | panel | tablist",
|
|
26
|
-
"relative": "first | last | next | previous"
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
"relationships": [
|
|
30
|
-
{
|
|
31
|
-
"type": "aria-reference",
|
|
32
|
-
"from": "tab",
|
|
33
|
-
"attribute": "aria-controls",
|
|
34
|
-
"to": "panel"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"type": "aria-reference",
|
|
38
|
-
"from": "panel",
|
|
39
|
-
"attribute": "aria-labelledby",
|
|
40
|
-
"to": "tab"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"type": "contains",
|
|
44
|
-
"parent": "tablist",
|
|
45
|
-
"child": "tab"
|
|
46
|
-
}
|
|
47
|
-
],
|
|
48
|
-
|
|
49
|
-
"static": [
|
|
50
|
-
{
|
|
51
|
-
"assertions": [
|
|
52
|
-
{
|
|
53
|
-
"target": "tablist",
|
|
54
|
-
"assertion": "toHaveAttribute",
|
|
55
|
-
"attribute": "aria-label | aria-labelledby",
|
|
56
|
-
"failureMessage": "Tab list doesn't conform to the ARIA Tab pattern as specified in APG 1.2. Tablist should have 'aria-label' or 'aria-labelledby' attribute to provide an accessible label for assistive technology."
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"target": "tab",
|
|
60
|
-
"assertion": "toHaveAttribute",
|
|
61
|
-
"attribute": "aria-selected",
|
|
62
|
-
"expectedValue": "true | false",
|
|
63
|
-
"failureMessage": "Tab element doesn't conform to the ARIA Tab pattern as specified in APG 1.2. Tab element should have 'aria-selected=true | false' attribute. This helps assistive technology to keep track of the active state of the tab panel that the tab controls."
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"target": "tab",
|
|
67
|
-
"assertion": "toHaveAttribute",
|
|
68
|
-
"attribute": "aria-controls",
|
|
69
|
-
"failureMessage": "Tab element doesn't conform to the ARIA Tab pattern as specified in APG 1.2. Tab element should have 'aria-controls' attribute that points to the id of the tab panel it controls. This helps assistive technology to associate the tab with its corresponding tab panel."
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"target": "panel",
|
|
73
|
-
"assertion": "toHaveAttribute",
|
|
74
|
-
"attribute": "aria-labelledby",
|
|
75
|
-
"failureMessage": "Tab panel doesn't conform to the ARIA Tab pattern as specified in APG 1.2. Each tab panel should have 'aria-labelledby' attribute that points to the id of the tab that controls it. This helps assistive technology associate the tab panel with its corresponding tab."
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"target": "tab",
|
|
79
|
-
"assertion": "toHaveAttribute",
|
|
80
|
-
"attribute": "tabindex",
|
|
81
|
-
"expectedValue": "0 | -1",
|
|
82
|
-
"failureMessage": "Tab element doesn't conform to the ARIA Tab pattern. Tab should have 'tabindex' to enable roving tabindex keyboard navigation. Active tab should have tabindex='0', inactive tabs should have tabindex='-1'."
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"target": "tablist",
|
|
86
|
-
"assertion": "toHaveAttribute",
|
|
87
|
-
"attribute": "aria-orientation",
|
|
88
|
-
"expectedValue": "horizontal | vertical",
|
|
89
|
-
"failureMessage": "Tab list doesn't conform to the ARIA Tab pattern as specified in APG 1.2. Tab list should have 'aria-orientation' attribute set to 'horizontal' or 'vertical'."
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
],
|
|
94
|
-
|
|
95
|
-
"dynamic": [
|
|
96
|
-
{
|
|
97
|
-
"description": "Only one tab panel is visible at a time.",
|
|
98
|
-
"action": [],
|
|
99
|
-
"assertions": [
|
|
100
|
-
{
|
|
101
|
-
"target": "panel",
|
|
102
|
-
"assertion": "toBeVisible",
|
|
103
|
-
"failureMessage": "At least one tab panel should be visible initially."
|
|
104
|
-
}
|
|
105
|
-
]
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"description": "Right Arrow moves focus to next tab and activates it (automatic activation) in horizontally oriented tabs.",
|
|
109
|
-
"isVertical": false,
|
|
110
|
-
"action": [
|
|
111
|
-
{ "type": "focus", "target": "focusable" },
|
|
112
|
-
{ "type": "keypress", "target": "focusable", "key": "ArrowRight" }
|
|
113
|
-
],
|
|
114
|
-
"assertions": [
|
|
115
|
-
{
|
|
116
|
-
"target": "relative",
|
|
117
|
-
"assertion": "toHaveFocus",
|
|
118
|
-
"expectedValue": "second",
|
|
119
|
-
"failureMessage": "Focus should move to the second tab after pressing Right Arrow."
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
"target": "relative",
|
|
123
|
-
"assertion": "toHaveAttribute",
|
|
124
|
-
"attribute": "aria-selected",
|
|
125
|
-
"expectedValue": "true",
|
|
126
|
-
"relativeTarget": "second",
|
|
127
|
-
"failureMessage": "Second tab should be activated (aria-selected=true) after Right Arrow press."
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"target": "relative",
|
|
131
|
-
"assertion": "toHaveAttribute",
|
|
132
|
-
"attribute": "tabindex",
|
|
133
|
-
"expectedValue": "0",
|
|
134
|
-
"relativeTarget": "second",
|
|
135
|
-
"failureMessage": "Second tab should have tabindex='0' after activation."
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"target": "relative",
|
|
139
|
-
"assertion": "toHaveAttribute",
|
|
140
|
-
"attribute": "aria-selected",
|
|
141
|
-
"expectedValue": "false",
|
|
142
|
-
"relativeTarget": "first",
|
|
143
|
-
"failureMessage": "Previous tab should have aria-selected=false after moving to another tab."
|
|
144
|
-
}
|
|
145
|
-
]
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"description": "Left Arrow moves focus to previous tab and activates it (wraps to last) in horizontally oriented tabs.",
|
|
149
|
-
"isVertical": false,
|
|
150
|
-
"action": [
|
|
151
|
-
{ "type": "focus", "target": "focusable" },
|
|
152
|
-
{ "type": "keypress", "target": "focusable", "key": "ArrowLeft" }
|
|
153
|
-
],
|
|
154
|
-
"assertions": [
|
|
155
|
-
{
|
|
156
|
-
"target": "relative",
|
|
157
|
-
"assertion": "toHaveFocus",
|
|
158
|
-
"expectedValue": "last",
|
|
159
|
-
"failureMessage": "Focus should wrap to last tab after pressing Left Arrow on first tab in horizontally oriented tabs."
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"target": "relative",
|
|
163
|
-
"assertion": "toHaveAttribute",
|
|
164
|
-
"attribute": "aria-selected",
|
|
165
|
-
"expectedValue": "true",
|
|
166
|
-
"relativeTarget": "last",
|
|
167
|
-
"failureMessage": "Last tab should be activated (aria-selected=true) after Left Arrow press."
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
"target": "relative",
|
|
171
|
-
"assertion": "toHaveAttribute",
|
|
172
|
-
"attribute": "tabindex",
|
|
173
|
-
"expectedValue": "0",
|
|
174
|
-
"relativeTarget": "last",
|
|
175
|
-
"failureMessage": "Last tab should have tabindex='0' after activation."
|
|
176
|
-
}
|
|
177
|
-
]
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"description": "Down Arrow moves focus to next tab and activates it in vertically oriented tabs.",
|
|
181
|
-
"isVertical": true,
|
|
182
|
-
"action": [
|
|
183
|
-
{ "type": "focus", "target": "focusable" },
|
|
184
|
-
{ "type": "keypress", "target": "focusable", "key": "ArrowDown" }
|
|
185
|
-
],
|
|
186
|
-
"assertions": [
|
|
187
|
-
{
|
|
188
|
-
"target": "relative",
|
|
189
|
-
"assertion": "toHaveFocus",
|
|
190
|
-
"expectedValue": "second",
|
|
191
|
-
"failureMessage": "Focus should move to second tab after pressing Down Arrow in vertically oriented tabs."
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
"target": "relative",
|
|
195
|
-
"assertion": "toHaveAttribute",
|
|
196
|
-
"attribute": "aria-selected",
|
|
197
|
-
"expectedValue": "true",
|
|
198
|
-
"relativeTarget": "second",
|
|
199
|
-
"failureMessage": "Second tab should be activated after Down Arrow press."
|
|
200
|
-
}
|
|
201
|
-
]
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
"description": "Up Arrow moves focus to previous tab and activates it (wraps to last) in vertically oriented tabs.",
|
|
205
|
-
"isVertical": true,
|
|
206
|
-
"action": [
|
|
207
|
-
{ "type": "focus", "target": "focusable" },
|
|
208
|
-
{ "type": "keypress", "target": "focusable", "key": "ArrowUp" }
|
|
209
|
-
],
|
|
210
|
-
"assertions": [
|
|
211
|
-
{
|
|
212
|
-
"target": "relative",
|
|
213
|
-
"assertion": "toHaveFocus",
|
|
214
|
-
"expectedValue": "last",
|
|
215
|
-
"failureMessage": "Focus should wrap to last tab after pressing Up Arrow on first tab in vertically oriented tabs."
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
"target": "relative",
|
|
219
|
-
"assertion": "toHaveAttribute",
|
|
220
|
-
"attribute": "aria-selected",
|
|
221
|
-
"expectedValue": "true",
|
|
222
|
-
"relativeTarget": "last",
|
|
223
|
-
"failureMessage": "Last tab should be activated after Up Arrow press."
|
|
224
|
-
}
|
|
225
|
-
]
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
"description": "Home moves focus to first tab and activates it.",
|
|
229
|
-
"level": "optional",
|
|
230
|
-
"action": [
|
|
231
|
-
{ "type": "keypress", "target": "focusable", "key": "ArrowRight" },
|
|
232
|
-
{ "type": "keypress", "target": "focusable", "key": "Home" }
|
|
233
|
-
],
|
|
234
|
-
"assertions": [
|
|
235
|
-
{
|
|
236
|
-
"target": "relative",
|
|
237
|
-
"assertion": "toHaveFocus",
|
|
238
|
-
"expectedValue": "first",
|
|
239
|
-
"failureMessage": "Focus should move to first tab after pressing Home."
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
"target": "relative",
|
|
243
|
-
"assertion": "toHaveAttribute",
|
|
244
|
-
"attribute": "aria-selected",
|
|
245
|
-
"expectedValue": "true",
|
|
246
|
-
"relativeTarget": "first",
|
|
247
|
-
"failureMessage": "First tab should be activated after Home press."
|
|
248
|
-
}
|
|
249
|
-
]
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
"description": "End moves focus to last tab and activates it.",
|
|
253
|
-
"level": "optional",
|
|
254
|
-
"action": [
|
|
255
|
-
{ "type": "keypress", "target": "focusable", "key": "End" }
|
|
256
|
-
],
|
|
257
|
-
"assertions": [
|
|
258
|
-
{
|
|
259
|
-
"target": "relative",
|
|
260
|
-
"assertion": "toHaveFocus",
|
|
261
|
-
"expectedValue": "last",
|
|
262
|
-
"failureMessage": "Focus should move to last tab after pressing End."
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
"target": "relative",
|
|
266
|
-
"assertion": "toHaveAttribute",
|
|
267
|
-
"attribute": "aria-selected",
|
|
268
|
-
"expectedValue": "true",
|
|
269
|
-
"relativeTarget": "last",
|
|
270
|
-
"failureMessage": "Last tab should be activated after End press."
|
|
271
|
-
}
|
|
272
|
-
]
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
"description": "Clicking a tab activates it and displays its panel.",
|
|
276
|
-
"action": [
|
|
277
|
-
{ "type": "click", "target": "relative", "relativeTarget": "second" }
|
|
278
|
-
],
|
|
279
|
-
"assertions": [
|
|
280
|
-
{
|
|
281
|
-
"target": "relative",
|
|
282
|
-
"assertion": "toHaveAttribute",
|
|
283
|
-
"attribute": "aria-selected",
|
|
284
|
-
"expectedValue": "true",
|
|
285
|
-
"relativeTarget": "second",
|
|
286
|
-
"failureMessage": "Clicked tab should have aria-selected=true."
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
"target": "relative",
|
|
290
|
-
"assertion": "toHaveAttribute",
|
|
291
|
-
"attribute": "tabindex",
|
|
292
|
-
"expectedValue": "0",
|
|
293
|
-
"relativeTarget": "second",
|
|
294
|
-
"failureMessage": "Clicked tab should have tabindex='0'."
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
"target": "relative",
|
|
298
|
-
"assertion": "toHaveAttribute",
|
|
299
|
-
"attribute": "aria-selected",
|
|
300
|
-
"expectedValue": "false",
|
|
301
|
-
"relativeTarget": "first",
|
|
302
|
-
"failureMessage": "Previous tab should have aria-selected=false after clicking another tab."
|
|
303
|
-
}
|
|
304
|
-
]
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
"description": "Pressing Enter on tab element activates its associated tab panel.",
|
|
308
|
-
"action": [
|
|
309
|
-
{ "type": "keypress", "target": "tab", "key": "Enter" }
|
|
310
|
-
],
|
|
311
|
-
"assertions": [
|
|
312
|
-
{
|
|
313
|
-
"target": "panel",
|
|
314
|
-
"assertion": "toBeVisible",
|
|
315
|
-
"failureMessage": "Panel should be visible after pressing Enter on trigger."
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
"target": "tab",
|
|
319
|
-
"assertion": "toHaveAttribute",
|
|
320
|
-
"attribute": "aria-selected",
|
|
321
|
-
"expectedValue": "true",
|
|
322
|
-
"failureMessage": "Tab element's should have aria-selected=true after pressing Enter."
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
"target": "tab",
|
|
326
|
-
"assertion": "toHaveAttribute",
|
|
327
|
-
"attribute": "tabindex",
|
|
328
|
-
"expectedValue": "0",
|
|
329
|
-
"failureMessage": "Tab element's should have tabindex='0' after pressing Enter."
|
|
330
|
-
}
|
|
331
|
-
]
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
"description": "Pressing Space on tab element activates its associated tab panel.",
|
|
335
|
-
"action": [
|
|
336
|
-
{ "type": "keypress", "target": "tab", "key": "Space" }
|
|
337
|
-
],
|
|
338
|
-
"assertions": [
|
|
339
|
-
{
|
|
340
|
-
"target": "panel",
|
|
341
|
-
"assertion": "toBeVisible",
|
|
342
|
-
"failureMessage": "Panel should be visible after pressing Space on trigger."
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
"target": "tab",
|
|
346
|
-
"assertion": "toHaveAttribute",
|
|
347
|
-
"attribute": "aria-selected",
|
|
348
|
-
"expectedValue": "true",
|
|
349
|
-
"failureMessage": "Tab element's should have aria-selected=true after pressing Space."
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
"target": "tab",
|
|
353
|
-
"assertion": "toHaveAttribute",
|
|
354
|
-
"attribute": "tabindex",
|
|
355
|
-
"expectedValue": "0",
|
|
356
|
-
"failureMessage": "Tab element's should have tabindex='0' after pressing Enter."
|
|
357
|
-
}
|
|
358
|
-
]
|
|
359
|
-
}
|
|
360
|
-
]
|
|
361
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{bin → dist}/cli.d.cts
RENAMED
|
File without changes
|
/package/{bin → dist}/cli.d.ts
RENAMED
|
File without changes
|
|
File without changes
|