@cssints/apg-specs 0.0.0-stage → 0.5.1

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.
Files changed (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -2
  3. package/dist/apg/accordion.bridge.d.mts +35 -0
  4. package/dist/apg/accordion.bridge.mjs +326 -0
  5. package/dist/apg/accordion.model.json +8397 -0
  6. package/dist/apg/alert.bridge.d.mts +22 -0
  7. package/dist/apg/alert.bridge.mjs +86 -0
  8. package/dist/apg/alert.model.json +871 -0
  9. package/dist/apg/alertdialog.bridge.d.mts +21 -0
  10. package/dist/apg/alertdialog.bridge.mjs +221 -0
  11. package/dist/apg/alertdialog.model.json +5232 -0
  12. package/dist/apg/breadcrumb.bridge.d.mts +26 -0
  13. package/dist/apg/breadcrumb.bridge.mjs +120 -0
  14. package/dist/apg/breadcrumb.model.json +574 -0
  15. package/dist/apg/button.bridge.d.mts +35 -0
  16. package/dist/apg/button.bridge.mjs +208 -0
  17. package/dist/apg/button.model.json +5814 -0
  18. package/dist/apg/carousel.bridge.d.mts +44 -0
  19. package/dist/apg/carousel.bridge.mjs +262 -0
  20. package/dist/apg/carousel.model.json +8963 -0
  21. package/dist/apg/checkbox-group.bridge.d.mts +25 -0
  22. package/dist/apg/checkbox-group.bridge.mjs +276 -0
  23. package/dist/apg/checkbox-group.model.json +3863 -0
  24. package/dist/apg/checkbox.bridge.d.mts +34 -0
  25. package/dist/apg/checkbox.bridge.mjs +253 -0
  26. package/dist/apg/checkbox.model.json +3158 -0
  27. package/dist/apg/combobox-autocomplete.bridge.d.mts +14 -0
  28. package/dist/apg/combobox-autocomplete.bridge.mjs +326 -0
  29. package/dist/apg/combobox-autocomplete.model.json +11586 -0
  30. package/dist/apg/combobox-dialog.bridge.d.mts +17 -0
  31. package/dist/apg/combobox-dialog.bridge.mjs +250 -0
  32. package/dist/apg/combobox-dialog.model.json +8981 -0
  33. package/dist/apg/combobox-grid.bridge.d.mts +17 -0
  34. package/dist/apg/combobox-grid.bridge.mjs +227 -0
  35. package/dist/apg/combobox-grid.model.json +8554 -0
  36. package/dist/apg/combobox-select-only.bridge.d.mts +24 -0
  37. package/dist/apg/combobox-select-only.bridge.mjs +304 -0
  38. package/dist/apg/combobox-select-only.model.json +7846 -0
  39. package/dist/apg/combobox-tree.bridge.d.mts +17 -0
  40. package/dist/apg/combobox-tree.bridge.mjs +211 -0
  41. package/dist/apg/combobox-tree.model.json +9345 -0
  42. package/dist/apg/dialog-modal.bridge.d.mts +35 -0
  43. package/dist/apg/dialog-modal.bridge.mjs +186 -0
  44. package/dist/apg/dialog-modal.model.json +7580 -0
  45. package/dist/apg/disclosure.bridge.d.mts +25 -0
  46. package/dist/apg/disclosure.bridge.mjs +202 -0
  47. package/dist/apg/disclosure.model.json +4703 -0
  48. package/dist/apg/feed.bridge.d.mts +31 -0
  49. package/dist/apg/feed.bridge.mjs +246 -0
  50. package/dist/apg/feed.model.json +4523 -0
  51. package/dist/apg/grid-selection.bridge.d.mts +13 -0
  52. package/dist/apg/grid-selection.bridge.mjs +160 -0
  53. package/dist/apg/grid-selection.model.json +6974 -0
  54. package/dist/apg/grid-sort.bridge.d.mts +12 -0
  55. package/dist/apg/grid-sort.bridge.mjs +138 -0
  56. package/dist/apg/grid-sort.model.json +3799 -0
  57. package/dist/apg/grid.bridge.d.mts +54 -0
  58. package/dist/apg/grid.bridge.mjs +441 -0
  59. package/dist/apg/grid.model.json +3802 -0
  60. package/dist/apg/link.bridge.d.mts +24 -0
  61. package/dist/apg/link.bridge.mjs +126 -0
  62. package/dist/apg/link.model.json +694 -0
  63. package/dist/apg/listbox-multi.bridge.d.mts +10 -0
  64. package/dist/apg/listbox-multi.bridge.mjs +261 -0
  65. package/dist/apg/listbox-multi.model.json +10893 -0
  66. package/dist/apg/listbox-rearrangeable.bridge.d.mts +20 -0
  67. package/dist/apg/listbox-rearrangeable.bridge.mjs +237 -0
  68. package/dist/apg/listbox-rearrangeable.model.json +17592 -0
  69. package/dist/apg/listbox-shared.d.mts +58 -0
  70. package/dist/apg/listbox-shared.mjs +171 -0
  71. package/dist/apg/listbox-single.bridge.d.mts +10 -0
  72. package/dist/apg/listbox-single.bridge.mjs +196 -0
  73. package/dist/apg/listbox-single.model.json +8024 -0
  74. package/dist/apg/listbox-typeahead.bridge.d.mts +10 -0
  75. package/dist/apg/listbox-typeahead.bridge.mjs +153 -0
  76. package/dist/apg/listbox-typeahead.model.json +5615 -0
  77. package/dist/apg/menu-button.bridge.d.mts +29 -0
  78. package/dist/apg/menu-button.bridge.mjs +259 -0
  79. package/dist/apg/menu-button.model.json +5706 -0
  80. package/dist/apg/menu-checkable.bridge.d.mts +25 -0
  81. package/dist/apg/menu-checkable.bridge.mjs +226 -0
  82. package/dist/apg/menu-checkable.model.json +4277 -0
  83. package/dist/apg/menu-menubar.bridge.d.mts +27 -0
  84. package/dist/apg/menu-menubar.bridge.mjs +273 -0
  85. package/dist/apg/menu-menubar.model.json +9540 -0
  86. package/dist/apg/meter.bridge.d.mts +28 -0
  87. package/dist/apg/meter.bridge.mjs +159 -0
  88. package/dist/apg/meter.model.json +1185 -0
  89. package/dist/apg/player.bridge.d.mts +24 -0
  90. package/dist/apg/player.bridge.mjs +342 -0
  91. package/dist/apg/player.model.json +11013 -0
  92. package/dist/apg/radio.bridge.d.mts +35 -0
  93. package/dist/apg/radio.bridge.mjs +371 -0
  94. package/dist/apg/radio.model.json +5011 -0
  95. package/dist/apg/slider-multithumb.bridge.d.mts +34 -0
  96. package/dist/apg/slider-multithumb.bridge.mjs +365 -0
  97. package/dist/apg/slider-multithumb.model.json +5774 -0
  98. package/dist/apg/slider.bridge.d.mts +54 -0
  99. package/dist/apg/slider.bridge.mjs +359 -0
  100. package/dist/apg/slider.model.json +4881 -0
  101. package/dist/apg/spinbutton.bridge.d.mts +41 -0
  102. package/dist/apg/spinbutton.bridge.mjs +327 -0
  103. package/dist/apg/spinbutton.model.json +7571 -0
  104. package/dist/apg/switch.bridge.d.mts +30 -0
  105. package/dist/apg/switch.bridge.mjs +243 -0
  106. package/dist/apg/switch.model.json +3159 -0
  107. package/dist/apg/tabs.bridge.d.mts +41 -0
  108. package/dist/apg/tabs.bridge.mjs +294 -0
  109. package/dist/apg/tabs.model.json +7659 -0
  110. package/dist/apg/timeline.bridge.d.mts +36 -0
  111. package/dist/apg/timeline.bridge.mjs +265 -0
  112. package/dist/apg/timeline.model.json +6189 -0
  113. package/dist/apg/toolbar.bridge.d.mts +25 -0
  114. package/dist/apg/toolbar.bridge.mjs +307 -0
  115. package/dist/apg/toolbar.model.json +6616 -0
  116. package/dist/apg/tooltip.bridge.d.mts +36 -0
  117. package/dist/apg/tooltip.bridge.mjs +208 -0
  118. package/dist/apg/tooltip.model.json +8295 -0
  119. package/dist/apg/treegrid.bridge.d.mts +28 -0
  120. package/dist/apg/treegrid.bridge.mjs +311 -0
  121. package/dist/apg/treegrid.model.json +17358 -0
  122. package/dist/apg/treeview.bridge.d.mts +26 -0
  123. package/dist/apg/treeview.bridge.mjs +396 -0
  124. package/dist/apg/treeview.model.json +13745 -0
  125. package/dist/apg/windowsplitter.bridge.d.mts +36 -0
  126. package/dist/apg/windowsplitter.bridge.mjs +242 -0
  127. package/dist/apg/windowsplitter.model.json +6253 -0
  128. package/dist/canvas/camera.model.json +6568 -0
  129. package/dist/canvas/canvas.bridge.d.mts +190 -0
  130. package/dist/canvas/canvas.bridge.mjs +729 -0
  131. package/dist/canvas/pointer.model.json +17095 -0
  132. package/dist/scenario.d.mts +233 -0
  133. package/dist/scenario.mjs +313 -0
  134. package/package.json +57 -4
  135. package/scenarios/apg/README.md +221 -0
  136. package/scenarios/apg/accordion.base-ui.json +1005 -0
  137. package/scenarios/apg/accordion.react-aria.json +929 -0
  138. package/scenarios/apg/alert.base-ui.json +81 -0
  139. package/scenarios/apg/alert.react-aria.json +98 -0
  140. package/scenarios/apg/alertdialog.base-ui.json +331 -0
  141. package/scenarios/apg/alertdialog.react-aria.json +225 -0
  142. package/scenarios/apg/breadcrumb.react-aria.json +312 -0
  143. package/scenarios/apg/button.ariakit.json +136 -0
  144. package/scenarios/apg/button.base-ui.json +747 -0
  145. package/scenarios/apg/button.react-aria.json +443 -0
  146. package/scenarios/apg/carousel.apg.json +909 -0
  147. package/scenarios/apg/checkbox.ariakit.json +299 -0
  148. package/scenarios/apg/checkbox.base-ui.json +1126 -0
  149. package/scenarios/apg/checkbox.react-aria.json +518 -0
  150. package/scenarios/apg/combobox.ariakit.json +945 -0
  151. package/scenarios/apg/combobox.base-ui.json +2444 -0
  152. package/scenarios/apg/combobox.react-aria.json +845 -0
  153. package/scenarios/apg/dialog-modal.ariakit.json +1102 -0
  154. package/scenarios/apg/dialog-modal.base-ui.json +775 -0
  155. package/scenarios/apg/dialog-modal.react-aria.json +638 -0
  156. package/scenarios/apg/disclosure.apg.json +349 -0
  157. package/scenarios/apg/disclosure.ariakit.json +163 -0
  158. package/scenarios/apg/disclosure.base-ui.json +451 -0
  159. package/scenarios/apg/disclosure.react-aria.json +643 -0
  160. package/scenarios/apg/feed.apg.json +442 -0
  161. package/scenarios/apg/grid.ariakit.json +197 -0
  162. package/scenarios/apg/grid.base-ui.json +720 -0
  163. package/scenarios/apg/grid.react-aria.json +969 -0
  164. package/scenarios/apg/landmarks.ariakit.json +93 -0
  165. package/scenarios/apg/landmarks.react-aria.json +330 -0
  166. package/scenarios/apg/link.ariakit.json +83 -0
  167. package/scenarios/apg/link.base-ui.json +88 -0
  168. package/scenarios/apg/link.react-aria.json +186 -0
  169. package/scenarios/apg/listbox.ariakit.json +78 -0
  170. package/scenarios/apg/listbox.base-ui.json +163 -0
  171. package/scenarios/apg/listbox.react-aria.json +1118 -0
  172. package/scenarios/apg/menu-button.ariakit.json +924 -0
  173. package/scenarios/apg/menu-button.base-ui.json +1155 -0
  174. package/scenarios/apg/menu-button.react-aria.json +1080 -0
  175. package/scenarios/apg/menubar.ariakit.json +758 -0
  176. package/scenarios/apg/menubar.base-ui.json +673 -0
  177. package/scenarios/apg/meter.base-ui.json +243 -0
  178. package/scenarios/apg/meter.react-aria.json +201 -0
  179. package/scenarios/apg/radio.ariakit.json +459 -0
  180. package/scenarios/apg/radio.base-ui.json +581 -0
  181. package/scenarios/apg/radio.react-aria.json +576 -0
  182. package/scenarios/apg/slider-multithumb.base-ui.json +316 -0
  183. package/scenarios/apg/slider-multithumb.react-aria.json +363 -0
  184. package/scenarios/apg/slider.base-ui.json +544 -0
  185. package/scenarios/apg/slider.react-aria.json +456 -0
  186. package/scenarios/apg/spinbutton.base-ui.json +1688 -0
  187. package/scenarios/apg/spinbutton.react-aria.json +426 -0
  188. package/scenarios/apg/switch.base-ui.json +456 -0
  189. package/scenarios/apg/switch.react-aria.json +303 -0
  190. package/scenarios/apg/table.ariakit.json +65 -0
  191. package/scenarios/apg/table.react-aria.json +221 -0
  192. package/scenarios/apg/tabs.ariakit.json +329 -0
  193. package/scenarios/apg/tabs.base-ui.json +875 -0
  194. package/scenarios/apg/tabs.react-aria.json +644 -0
  195. package/scenarios/apg/toolbar.ariakit.json +595 -0
  196. package/scenarios/apg/toolbar.base-ui.json +1189 -0
  197. package/scenarios/apg/toolbar.react-aria.json +383 -0
  198. package/scenarios/apg/tooltip.ariakit.json +441 -0
  199. package/scenarios/apg/tooltip.base-ui.json +411 -0
  200. package/scenarios/apg/tooltip.react-aria.json +454 -0
  201. package/scenarios/apg/treegrid.apg.json +2558 -0
  202. package/scenarios/apg/treegrid.react-aria.json +5094 -0
  203. package/scenarios/apg/treeview.apg.json +928 -0
  204. package/scenarios/apg/windowsplitter.apg.json +557 -0
  205. package/scenarios/canvas/README.md +69 -0
  206. package/scenarios/canvas/camera.contract.json +237 -0
  207. package/scenarios/canvas/camera.excalidraw.json +57 -0
  208. package/scenarios/canvas/marquee.excalidraw.json +122 -0
  209. package/scenarios/canvas/pan.excalidraw.json +46 -0
  210. package/scenarios/canvas/pointer.contract.json +528 -0
  211. package/scenarios/parts.json +291 -0
  212. package/shared/aria.qnt +186 -0
  213. package/shared/details-group.qnt +50 -0
  214. package/shared/focusgroup.qnt +152 -0
  215. package/shared/invokers.qnt +81 -0
  216. package/shared/popover.qnt +71 -0
  217. package/specs/apg/STATIC.md +103 -0
  218. package/specs/apg/accordion.qnt +578 -0
  219. package/specs/apg/alert.qnt +131 -0
  220. package/specs/apg/alertdialog.qnt +455 -0
  221. package/specs/apg/breadcrumb.qnt +88 -0
  222. package/specs/apg/button.qnt +445 -0
  223. package/specs/apg/carousel.qnt +732 -0
  224. package/specs/apg/checkbox-group.qnt +388 -0
  225. package/specs/apg/checkbox.qnt +394 -0
  226. package/specs/apg/combobox-autocomplete.qnt +764 -0
  227. package/specs/apg/combobox-dialog.qnt +627 -0
  228. package/specs/apg/combobox-grid.qnt +632 -0
  229. package/specs/apg/combobox-select-only.qnt +626 -0
  230. package/specs/apg/combobox-tree.qnt +633 -0
  231. package/specs/apg/dialog-modal.qnt +499 -0
  232. package/specs/apg/disclosure.qnt +309 -0
  233. package/specs/apg/feed.qnt +485 -0
  234. package/specs/apg/grid-selection.qnt +512 -0
  235. package/specs/apg/grid-sort.qnt +330 -0
  236. package/specs/apg/grid.qnt +360 -0
  237. package/specs/apg/link.qnt +119 -0
  238. package/specs/apg/listbox-multi.qnt +799 -0
  239. package/specs/apg/listbox-rearrangeable.qnt +801 -0
  240. package/specs/apg/listbox-single.qnt +511 -0
  241. package/specs/apg/listbox-typeahead.qnt +396 -0
  242. package/specs/apg/menu-button.qnt +363 -0
  243. package/specs/apg/menu-checkable.qnt +304 -0
  244. package/specs/apg/menu-menubar.qnt +531 -0
  245. package/specs/apg/meter.qnt +129 -0
  246. package/specs/apg/player.qnt +1081 -0
  247. package/specs/apg/radio.qnt +394 -0
  248. package/specs/apg/slider-multithumb.qnt +441 -0
  249. package/specs/apg/slider.qnt +396 -0
  250. package/specs/apg/spinbutton.qnt +494 -0
  251. package/specs/apg/switch.qnt +389 -0
  252. package/specs/apg/tabs.qnt +412 -0
  253. package/specs/apg/timeline.qnt +612 -0
  254. package/specs/apg/toolbar.qnt +364 -0
  255. package/specs/apg/tooltip.qnt +553 -0
  256. package/specs/apg/treegrid.qnt +983 -0
  257. package/specs/apg/treeview.qnt +1004 -0
  258. package/specs/apg/windowsplitter.qnt +487 -0
  259. package/specs/canvas/camera.qnt +407 -0
  260. package/specs/canvas/pointer.qnt +841 -0
@@ -0,0 +1,225 @@
1
+ {
2
+ "pattern": "alertdialog",
3
+ "source": "react-aria",
4
+ "commit": "99e610236887da619ad9d54a1cd87983166c043d",
5
+ "license": "Apache-2.0",
6
+ "skipped": [
7
+ { "reason": "styling / theme wrappers and Spectrum visual variants" },
8
+ { "reason": "enter/exit animation timing" },
9
+ {
10
+ "reason": "React-API-only props that do not change observed behaviour (title/data-testid plumbing asserted purely structurally)"
11
+ }
12
+ ],
13
+ "scenarios": [
14
+ {
15
+ "id": "alertdialog.react-aria.primary-action-callback",
16
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L21",
17
+ "upstreamTest": "AlertDialog > renders alert dialog with onPrimaryAction",
18
+ "apg": "wai-aria",
19
+ "config": { "variant": "confirmation" },
20
+ "steps": [
21
+ { "expect": { "visible": ["dialog"], "focus": "dialog" } },
22
+ { "event": "click", "target": "confirm" },
23
+ { "expect": { "events": { "onPrimaryAction": [1] } } }
24
+ ]
25
+ },
26
+ {
27
+ "id": "alertdialog.react-aria.two-button-cancel-and-confirm",
28
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L45",
29
+ "upstreamTest": "AlertDialog > renders 2 button alert dialog with onPrimaryAction / onCancel",
30
+ "apg": "wai-aria",
31
+ "config": { "variant": "confirmation", "cancelLabel": "cancel" },
32
+ "steps": [
33
+ { "expect": { "visible": ["dialog"], "focus": "dialog" } },
34
+ { "event": "click", "target": "cancel" },
35
+ { "expect": { "events": { "onCancel": [1], "onPrimaryAction": [] } } },
36
+ { "event": "click", "target": "confirm" },
37
+ { "expect": { "events": { "onPrimaryAction": [1], "onCancel": [1] } } }
38
+ ]
39
+ },
40
+ {
41
+ "id": "alertdialog.react-aria.three-button-callbacks",
42
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L79",
43
+ "upstreamTest": "AlertDialog > renders a 3 button alert dialog with onPrimaryAction / onCancel",
44
+ "apg": "wai-aria",
45
+ "config": {
46
+ "variant": "confirmation",
47
+ "secondaryActionLabel": "secondary",
48
+ "cancelLabel": "cancel"
49
+ },
50
+ "steps": [
51
+ { "expect": { "focus": "dialog" } },
52
+ { "event": "click", "target": "secondary" },
53
+ {
54
+ "expect": { "events": { "onSecondaryAction": [1], "onCancel": [] } }
55
+ },
56
+ { "event": "click", "target": "confirm" },
57
+ { "expect": { "events": { "onPrimaryAction": [1], "onCancel": [] } } },
58
+ { "event": "click", "target": "cancel" },
59
+ { "expect": { "events": { "onCancel": [1], "onPrimaryAction": [1] } } }
60
+ ]
61
+ },
62
+ {
63
+ "id": "alertdialog.react-aria.disabled-confirm-not-fired",
64
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L122",
65
+ "upstreamTest": "AlertDialog > disable its confirm button",
66
+ "apg": "extension",
67
+ "config": { "variant": "confirmation", "isPrimaryActionDisabled": true },
68
+ "steps": [
69
+ { "expect": { "focus": "dialog" } },
70
+ { "event": "click", "target": "confirm" },
71
+ { "expect": { "events": { "onPrimaryAction": [] } } }
72
+ ]
73
+ },
74
+ {
75
+ "id": "alertdialog.react-aria.autofocus-confirm-button",
76
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L146",
77
+ "upstreamTest": "AlertDialog > autofocus its confirm button",
78
+ "apg": "focus",
79
+ "config": { "variant": "confirmation", "autoFocusButton": "primary" },
80
+ "steps": [{ "expect": { "focus": "confirm" } }]
81
+ },
82
+ {
83
+ "id": "alertdialog.react-aria.autofocus-cancel-button",
84
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L163",
85
+ "upstreamTest": "AlertDialog > autofocus its cancel button",
86
+ "apg": "focus",
87
+ "config": {
88
+ "variant": "confirmation",
89
+ "cancelLabel": "cancel",
90
+ "autoFocusButton": "cancel"
91
+ },
92
+ "steps": [{ "expect": { "focus": "cancel" } }]
93
+ },
94
+ {
95
+ "id": "alertdialog.react-aria.disabled-secondary-not-fired",
96
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L181",
97
+ "upstreamTest": "AlertDialog > disable its secondary button",
98
+ "apg": "extension",
99
+ "config": {
100
+ "variant": "confirmation",
101
+ "isSecondaryActionDisabled": true
102
+ },
103
+ "steps": [
104
+ { "expect": { "focus": "dialog" } },
105
+ { "event": "click", "target": "secondary" },
106
+ { "expect": { "events": { "onPrimaryAction": [] } } }
107
+ ]
108
+ },
109
+ {
110
+ "id": "alertdialog.react-aria.autofocus-secondary-button",
111
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L206",
112
+ "upstreamTest": "AlertDialog > autofocus its secondary button",
113
+ "apg": "focus",
114
+ "config": {
115
+ "variant": "confirmation",
116
+ "secondaryActionLabel": "secondary",
117
+ "autoFocusButton": "secondary"
118
+ },
119
+ "steps": [{ "expect": { "focus": "secondary" } }]
120
+ },
121
+ {
122
+ "id": "alertdialog.react-aria.aria-describedby-points-to-content",
123
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L250",
124
+ "upstreamTest": "AlertDialog > should have aria-describedby pointing to the content",
125
+ "apg": "wai-aria",
126
+ "config": { "variant": "confirmation" },
127
+ "steps": [
128
+ {
129
+ "expect": {
130
+ "attrs": {
131
+ "dialog": { "role": "alertdialog", "aria-describedby": "content" }
132
+ }
133
+ }
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "id": "alertdialog.react-aria.aria-describedby-custom",
139
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/dialog/AlertDialog.test.js#L267",
140
+ "upstreamTest": "AlertDialog > accepts custom aria-describedby",
141
+ "apg": "wai-aria",
142
+ "config": { "variant": "confirmation", "ariaDescribedby": "content-id" },
143
+ "steps": [
144
+ {
145
+ "expect": {
146
+ "attrs": { "dialog": { "aria-describedby": "content-id" } }
147
+ }
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "id": "alertdialog.react-aria.components-role-alertdialog",
153
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Dialog.test.js#L54",
154
+ "upstreamTest": "Dialog > works with modal",
155
+ "apg": "wai-aria",
156
+ "config": { "modal": true, "role": "alertdialog" },
157
+ "steps": [
158
+ { "event": "click", "target": "trigger" },
159
+ {
160
+ "expect": {
161
+ "visible": ["dialog"],
162
+ "attrs": {
163
+ "dialog": { "role": "alertdialog", "aria-labelledby": "title" }
164
+ }
165
+ }
166
+ },
167
+ { "event": "click", "target": "dismiss" },
168
+ { "expect": { "hidden": ["dialog"] } }
169
+ ]
170
+ },
171
+ {
172
+ "id": "alertdialog.react-aria.use-dialog-describedby-from-content",
173
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/dialog/useDialog.test.js#L73",
174
+ "upstreamTest": "useDialog > should set aria-describedby on alertdialog when content is rendered",
175
+ "apg": "wai-aria",
176
+ "config": { "role": "alertdialog", "showContent": true },
177
+ "steps": [
178
+ {
179
+ "expect": {
180
+ "attrs": {
181
+ "dialog": { "role": "alertdialog", "aria-describedby": "content" }
182
+ }
183
+ }
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "id": "alertdialog.react-aria.s2-auto-describedby",
189
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@react-spectrum/s2/test/AlertDialog.test.tsx#L37",
190
+ "upstreamTest": "AlertDialog > automatically links to the content with aria-describedby",
191
+ "apg": "wai-aria",
192
+ "config": { "title": "Test", "primaryActionLabel": "Test" },
193
+ "steps": [
194
+ { "event": "click", "target": "trigger" },
195
+ {
196
+ "expect": {
197
+ "visible": ["dialog"],
198
+ "attrs": {
199
+ "dialog": { "role": "alertdialog", "aria-describedby": "content" }
200
+ }
201
+ }
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ "id": "alertdialog.react-aria.s2-custom-describedby",
207
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@react-spectrum/s2/test/AlertDialog.test.tsx#L60",
208
+ "upstreamTest": "AlertDialog > accepts custom aria-describedby",
209
+ "apg": "wai-aria",
210
+ "config": {
211
+ "title": "Test",
212
+ "primaryActionLabel": "Test",
213
+ "ariaDescribedby": "content-id"
214
+ },
215
+ "steps": [
216
+ { "event": "click", "target": "trigger" },
217
+ {
218
+ "expect": {
219
+ "attrs": { "dialog": { "aria-describedby": "content-id" } }
220
+ }
221
+ }
222
+ ]
223
+ }
224
+ ]
225
+ }
@@ -0,0 +1,312 @@
1
+ {
2
+ "pattern": "breadcrumb",
3
+ "source": "react-aria",
4
+ "commit": "99e610236887da619ad9d54a1cd87983166c043d",
5
+ "license": "Apache-2.0",
6
+ "skipped": [
7
+ { "reason": "Breadcrumbs > should render with default class" },
8
+ { "reason": "Breadcrumbs > should render with custom class" },
9
+ { "reason": "Breadcrumbs > should support refs" },
10
+ { "reason": "Breadcrumbs > should support render props" },
11
+ { "reason": "BreadcrumbItem > Handles custom element type (href)" },
12
+ {
13
+ "reason": "@adobe Breadcrumbs > Handles UNSAFE_className / size S / size M"
14
+ },
15
+ { "reason": "@adobe Breadcrumbs > collapse width suites" },
16
+ { "reason": "@adobe Breadcrumbs > should support RouterProvider" }
17
+ ],
18
+ "scenarios": [
19
+ {
20
+ "id": "breadcrumb.react-aria.list-and-current-link",
21
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Breadcrumbs.test.js#L34",
22
+ "upstreamTest": "Breadcrumbs > should render with default class",
23
+ "apg": "aria",
24
+ "config": { "items": 3 },
25
+ "steps": [
26
+ {
27
+ "expect": {
28
+ "attrs": {
29
+ "breadcrumb": { "role": "list" },
30
+ "item:0": { "role": "listitem" },
31
+ "item:1": { "role": "listitem" },
32
+ "item:2": { "role": "listitem" },
33
+ "link:0": { "aria-current": null },
34
+ "link:2": { "aria-current": "page" }
35
+ }
36
+ }
37
+ }
38
+ ],
39
+ "notes": "Only the last (current) item carries aria-current=page; ancestors must not."
40
+ },
41
+ {
42
+ "id": "breadcrumb.react-aria.label-on-list-and-items",
43
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Breadcrumbs.test.js#L63",
44
+ "upstreamTest": "Breadcrumbs > should support DOM props",
45
+ "apg": "aria",
46
+ "config": { "items": 3, "aria-label": "test group" },
47
+ "steps": [
48
+ {
49
+ "expect": {
50
+ "attrs": {
51
+ "breadcrumb": { "aria-label": "test group" },
52
+ "item:0": { "aria-label": "test item" },
53
+ "item:2": { "aria-label": "test item" }
54
+ }
55
+ }
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "id": "breadcrumb.react-aria.dynamic-collection-order",
61
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Breadcrumbs.test.js#L106",
62
+ "upstreamTest": "Breadcrumbs > should support dynamic collections",
63
+ "apg": "aria",
64
+ "config": { "items": 3 },
65
+ "steps": [
66
+ {
67
+ "expect": {
68
+ "visible": ["breadcrumb", "item:0", "item:1", "item:2"]
69
+ }
70
+ }
71
+ ],
72
+ "notes": "Dynamic items render in data order; item text is checked by the upstream test."
73
+ },
74
+ {
75
+ "id": "breadcrumb.react-aria.nav-landmark-default-label",
76
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbs.test.js#L23",
77
+ "upstreamTest": "useBreadcrumbs > handles defaults",
78
+ "apg": "aria",
79
+ "config": {},
80
+ "steps": [
81
+ {
82
+ "expect": {
83
+ "attrs": { "nav": { "aria-label": "Breadcrumbs" } }
84
+ }
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "id": "breadcrumb.react-aria.nav-landmark-custom-label",
90
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbs.test.js#L28",
91
+ "upstreamTest": "useBreadcrumbs > handles custom aria label",
92
+ "apg": "aria",
93
+ "config": { "aria-label": "test-label" },
94
+ "steps": [
95
+ {
96
+ "expect": {
97
+ "attrs": { "nav": { "aria-label": "test-label" } }
98
+ }
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "id": "breadcrumb.react-aria.span-item-is-a-link",
104
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbItem.test.js#L23",
105
+ "upstreamTest": "useBreadcrumbItem > handles span elements",
106
+ "apg": "aria",
107
+ "config": { "elementType": "span" },
108
+ "steps": [
109
+ {
110
+ "expect": {
111
+ "attrs": { "item": { "role": "link", "aria-disabled": null } },
112
+ "focus": "item"
113
+ }
114
+ }
115
+ ],
116
+ "notes": "A non-native breadcrumb item takes role=link and is focusable (tabIndex 0)."
117
+ },
118
+ {
119
+ "id": "breadcrumb.react-aria.current-span-item",
120
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbItem.test.js#L31",
121
+ "upstreamTest": "useBreadcrumbItem > handles isCurrent",
122
+ "apg": "aria",
123
+ "config": { "elementType": "span", "isCurrent": true },
124
+ "steps": [
125
+ {
126
+ "expect": {
127
+ "attrs": { "item": { "role": "link", "aria-current": "page" } },
128
+ "focus": null
129
+ }
130
+ }
131
+ ],
132
+ "notes": "The current item keeps role=link but is removed from the tab order."
133
+ },
134
+ {
135
+ "id": "breadcrumb.react-aria.disabled-span-item",
136
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbItem.test.js#L38",
137
+ "upstreamTest": "useBreadcrumbItem > handles isDisabled",
138
+ "apg": "aria",
139
+ "config": { "elementType": "span", "isDisabled": true },
140
+ "steps": [
141
+ {
142
+ "expect": {
143
+ "attrs": { "item": { "role": "link", "aria-disabled": "true" } },
144
+ "focus": null
145
+ }
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "id": "breadcrumb.react-aria.descendant-href-item-keeps-no-role",
151
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria/test/breadcrumbs/useBreadcrumbItem.test.js#L45",
152
+ "upstreamTest": "useBreadcrumbItem > handles descendant link with href",
153
+ "apg": "aria",
154
+ "config": {},
155
+ "steps": [
156
+ {
157
+ "expect": {
158
+ "attrs": { "item": { "role": null, "aria-disabled": null } },
159
+ "focus": "item"
160
+ }
161
+ }
162
+ ],
163
+ "notes": "A wrapping <a href> is natively focusable, so no role=link is added."
164
+ },
165
+ {
166
+ "id": "breadcrumb.react-aria.dom-props-on-items",
167
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Breadcrumbs.test.js#L78",
168
+ "upstreamTest": "Breadcrumbs > should support custom render function",
169
+ "apg": "aria",
170
+ "config": { "items": 3 },
171
+ "steps": [
172
+ {
173
+ "expect": {
174
+ "attrs": {
175
+ "breadcrumb": { "data-custom": "bar" },
176
+ "item:0": { "data-custom": "true" }
177
+ }
178
+ }
179
+ }
180
+ ],
181
+ "notes": "Render-prop DOM passthrough for the list and items."
182
+ },
183
+ {
184
+ "id": "breadcrumb.react-aria.adobe-current-item-marked",
185
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L65",
186
+ "upstreamTest": "Breadcrumbs > Handles multiple items",
187
+ "apg": "aria",
188
+ "config": { "items": 3 },
189
+ "steps": [
190
+ {
191
+ "expect": {
192
+ "attrs": {
193
+ "item:0": { "aria-current": null },
194
+ "item:1": { "aria-current": null },
195
+ "item:2": { "aria-current": "page" }
196
+ },
197
+ "focus": "item:0"
198
+ }
199
+ }
200
+ ],
201
+ "notes": "Ancestor items are tabbable; the current item is tabIndex=-1 and aria-current=page."
202
+ },
203
+ {
204
+ "id": "breadcrumb.react-aria.adobe-single-current-item",
205
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L84",
206
+ "upstreamTest": "Breadcrumbs > Handles single item and showRoot",
207
+ "apg": "aria",
208
+ "config": { "items": 1, "showRoot": true },
209
+ "steps": [
210
+ {
211
+ "expect": {
212
+ "attrs": { "item:0": { "aria-current": "page" } },
213
+ "focus": null
214
+ }
215
+ }
216
+ ],
217
+ "notes": "A lone current item is not in the tab order."
218
+ },
219
+ {
220
+ "id": "breadcrumb.react-aria.adobe-disabled-trail",
221
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L190",
222
+ "upstreamTest": "Breadcrumbs > Handles isDisabled",
223
+ "apg": "aria",
224
+ "config": { "items": 2, "isDisabled": true },
225
+ "steps": [
226
+ {
227
+ "expect": {
228
+ "attrs": {
229
+ "item:0": { "aria-disabled": "true" },
230
+ "item:1": { "aria-disabled": "true" }
231
+ }
232
+ }
233
+ }
234
+ ]
235
+ },
236
+ {
237
+ "id": "breadcrumb.react-aria.adobe-nav-label",
238
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L373",
239
+ "upstreamTest": "Breadcrumbs > supports aria-label",
240
+ "apg": "aria",
241
+ "config": { "items": 1, "aria-label": "Test" },
242
+ "steps": [
243
+ {
244
+ "expect": {
245
+ "attrs": { "nav": { "aria-label": "Test" } }
246
+ }
247
+ }
248
+ ]
249
+ },
250
+ {
251
+ "id": "breadcrumb.react-aria.adobe-nav-labelledby",
252
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L383",
253
+ "upstreamTest": "Breadcrumbs > supports aria-labelledby",
254
+ "apg": "aria",
255
+ "config": { "items": 1, "aria-labelledby": "test" },
256
+ "steps": [
257
+ {
258
+ "expect": {
259
+ "attrs": { "nav": { "aria-labelledby": "test" } }
260
+ }
261
+ }
262
+ ]
263
+ },
264
+ {
265
+ "id": "breadcrumb.react-aria.adobe-nav-describedby",
266
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/Breadcrumbs.test.js#L396",
267
+ "upstreamTest": "Breadcrumbs > supports aria-describedby",
268
+ "apg": "aria",
269
+ "config": { "items": 1, "aria-describedby": "test" },
270
+ "steps": [
271
+ {
272
+ "expect": {
273
+ "attrs": { "nav": { "aria-describedby": "test" } }
274
+ }
275
+ }
276
+ ]
277
+ },
278
+ {
279
+ "id": "breadcrumb.react-aria.adobe-item-current",
280
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/BreadcrumbItem.test.js#L27",
281
+ "upstreamTest": "BreadcrumbItem > Handles current",
282
+ "apg": "aria",
283
+ "config": { "isCurrent": true },
284
+ "steps": [
285
+ {
286
+ "expect": {
287
+ "attrs": { "item": { "aria-current": "page" } },
288
+ "focus": null
289
+ }
290
+ }
291
+ ]
292
+ },
293
+ {
294
+ "id": "breadcrumb.react-aria.adobe-item-disabled-blocks-press",
295
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/breadcrumbs/BreadcrumbItem.test.js#L34",
296
+ "upstreamTest": "BreadcrumbItem > Handles disabled",
297
+ "apg": "aria",
298
+ "config": { "isDisabled": true },
299
+ "steps": [
300
+ {
301
+ "expect": {
302
+ "attrs": { "item": { "aria-disabled": "true" } },
303
+ "focus": null
304
+ }
305
+ },
306
+ { "event": "click", "target": "item" },
307
+ { "expect": { "events": { "onPress": [] } } }
308
+ ],
309
+ "notes": "A disabled breadcrumb item does not fire onPress."
310
+ }
311
+ ]
312
+ }
@@ -0,0 +1,136 @@
1
+ {
2
+ "pattern": "button",
3
+ "source": "ariakit",
4
+ "commit": "404c72257b879569feb08465da4ff9915fd873da",
5
+ "license": "MIT",
6
+ "skipped": [
7
+ {
8
+ "reason": "visual/screenshot tests (@visual, capturePage/captureInView)"
9
+ },
10
+ {
11
+ "reason": "geometry/layout assertions (getBox, getCapsOffset, badge/shortcut sizing)"
12
+ },
13
+ {
14
+ "reason": "colour-scheme sweeps and CSS/animation (glider transitions, focus outline, clip-path)"
15
+ },
16
+ { "reason": "React 19 ref-prop, ref-cleanup and hydration/SSR tests" },
17
+ {
18
+ "reason": "sandbox-browser runner tests (test-chrome*, test-browser*) beyond behaviour ports"
19
+ },
20
+ {
21
+ "reason": "ariakit-specific data-focus-visible styling hooks and ref-reported native types"
22
+ },
23
+ { "reason": "tooltip/menu-button sandboxes whose pattern is not button" },
24
+ {
25
+ "reason": "switches: ariakit has no switch implementation or switch test under the scoped sandbox/examples dirs"
26
+ }
27
+ ],
28
+ "scenarios": [
29
+ {
30
+ "id": "button.ariakit.toggle-button-pressed-on-click",
31
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/ariakit-ui-button/test.ts#L7",
32
+ "upstreamTest": "preserves the selected avatar color when its kind changes",
33
+ "apg": "aria",
34
+ "config": { "part": "button", "pressed": false, "toggle": true },
35
+ "steps": [
36
+ { "event": "prop", "set": {} },
37
+ { "expect": { "attrs": { "button": { "aria-pressed": "false" } } } },
38
+ { "event": "click", "target": "button" },
39
+ { "expect": { "attrs": { "button": { "aria-pressed": "true" } } } },
40
+ { "event": "click", "target": "button" },
41
+ { "expect": { "attrs": { "button": { "aria-pressed": "false" } } } }
42
+ ],
43
+ "notes": "Image colour assertions dropped; only the toggle-button aria-pressed cycle retained."
44
+ },
45
+ {
46
+ "id": "button.ariakit.native-button-types",
47
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/native-button-semantics/test.ts#L42",
48
+ "upstreamTest": "declares native button types before refs run",
49
+ "apg": "extension",
50
+ "config": {
51
+ "types": {
52
+ "default": "button",
53
+ "submit": "submit",
54
+ "reset": "reset",
55
+ "custom": "none"
56
+ }
57
+ },
58
+ "steps": [
59
+ { "event": "prop", "set": {} },
60
+ {
61
+ "expect": {
62
+ "attrs": {
63
+ "button:default": { "type": "button" },
64
+ "button:submit": { "type": "submit" },
65
+ "button:reset": { "type": "reset" },
66
+ "button:custom": { "type": null }
67
+ }
68
+ }
69
+ }
70
+ ],
71
+ "notes": "Ref-reported types, toolbar items and menu buttons omitted."
72
+ },
73
+ {
74
+ "id": "button.ariakit.custom-element-button-role-and-tabindex",
75
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/native-button-semantics/test.ts#L33",
76
+ "upstreamTest": "declares native button types before refs run",
77
+ "apg": "aria",
78
+ "config": { "render": "div" },
79
+ "steps": [
80
+ { "event": "prop", "set": {} },
81
+ {
82
+ "expect": {
83
+ "attrs": {
84
+ "button:custom": {
85
+ "role": "button",
86
+ "tabindex": "0",
87
+ "type": null
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ],
93
+ "notes": "Non-native element receives role=button and tabindex=0 and no native type attribute."
94
+ },
95
+ {
96
+ "id": "button.ariakit.custom-element-and-disabled-semantics",
97
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/native-button-semantics/test.ts#L50",
98
+ "upstreamTest": "preserves custom element semantics",
99
+ "apg": "states",
100
+ "config": {
101
+ "focusable": "custom-div",
102
+ "disabledLink": true,
103
+ "disabledButton": true
104
+ },
105
+ "steps": [
106
+ { "event": "prop", "set": {} },
107
+ {
108
+ "expect": {
109
+ "attrs": {
110
+ "button:focusable": { "tabindex": "0" },
111
+ "button:disabled-link": { "tabindex": "-1", "disabled": null },
112
+ "button:disabled": { "disabled": "" }
113
+ }
114
+ }
115
+ }
116
+ ],
117
+ "notes": "A disabled anchor uses tabindex=-1 and no disabled attribute; a disabled native button uses the disabled attribute."
118
+ },
119
+ {
120
+ "id": "button.ariakit.updates-custom-focusability",
121
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/native-button-semantics/test.ts#L57",
122
+ "upstreamTest": "updates custom focusability",
123
+ "apg": "extension",
124
+ "config": { "focusable": true },
125
+ "steps": [
126
+ { "event": "prop", "set": {} },
127
+ { "expect": { "attrs": { "text:focusable": { "tabindex": "0" } } } },
128
+ { "event": "click", "target": "button:toggle-focusable" },
129
+ { "expect": { "attrs": { "text:focusable": { "tabindex": null } } } },
130
+ { "event": "click", "target": "button:toggle-focusable" },
131
+ { "expect": { "attrs": { "text:focusable": { "tabindex": "0" } } } }
132
+ ],
133
+ "notes": "Toggling a non-button element's focusable prop adds/removes tabindex."
134
+ }
135
+ ]
136
+ }