@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,303 @@
1
+ {
2
+ "pattern": "switch",
3
+ "source": "react-aria",
4
+ "commit": "99e610236887da619ad9d54a1cd87983166c043d",
5
+ "license": "Apache-2.0",
6
+ "skipped": [
7
+ {
8
+ "reason": "class-name / data-* style-hook rendering (default class, custom class, className functions)"
9
+ },
10
+ { "reason": "custom render-function plumbing and context slots" },
11
+ {
12
+ "reason": "React refs, inputRef, callback refs and context inputRef merging"
13
+ },
14
+ {
15
+ "reason": "form submission, form reset, required validation and aria-describedby description wiring"
16
+ },
17
+ {
18
+ "reason": "S1 (react-spectrum) theme/provider wrappers, isEmphasized styling and form reset"
19
+ },
20
+ {
21
+ "reason": "aria-labelledby / aria-describedby passthrough prop assertions that only forward a literal prop"
22
+ },
23
+ { "reason": "SwitchField-only description update tests" }
24
+ ],
25
+ "scenarios": [
26
+ {
27
+ "id": "switch.react-aria.hover-state-and-callbacks",
28
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L121",
29
+ "upstreamTest": "Switch > should support hover",
30
+ "apg": "extension",
31
+ "config": { "part": "switch" },
32
+ "steps": [
33
+ { "event": "prop", "set": {} },
34
+ { "expect": { "attrs": { "label": { "data-hovered": null } } } },
35
+ { "event": "hover", "target": "switch" },
36
+ {
37
+ "expect": {
38
+ "attrs": { "label": { "data-hovered": "true" } },
39
+ "events": { "onHoverStart": [1], "onHoverChange": [1] }
40
+ }
41
+ },
42
+ { "event": "unhover", "target": "switch" },
43
+ {
44
+ "expect": {
45
+ "attrs": { "label": { "data-hovered": null } },
46
+ "events": { "onHoverEnd": [1], "onHoverChange": [2] }
47
+ }
48
+ }
49
+ ],
50
+ "notes": "Hover state lives on the wrapping label element."
51
+ },
52
+ {
53
+ "id": "switch.react-aria.focus-visible-on-tab",
54
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L152",
55
+ "upstreamTest": "Switch > should support focus ring",
56
+ "apg": "extension",
57
+ "config": { "part": "switch" },
58
+ "steps": [
59
+ { "event": "prop", "set": {} },
60
+ { "expect": { "attrs": { "label": { "data-focus-visible": null } } } },
61
+ { "event": "key", "key": "Tab" },
62
+ {
63
+ "expect": {
64
+ "focus": "switch",
65
+ "attrs": { "label": { "data-focus-visible": "true" } }
66
+ }
67
+ },
68
+ { "event": "key", "key": "Tab" },
69
+ { "expect": { "attrs": { "label": { "data-focus-visible": null } } } }
70
+ ],
71
+ "notes": "Keyboard focus marks the label data-focus-visible."
72
+ },
73
+ {
74
+ "id": "switch.react-aria.focus-events",
75
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L172",
76
+ "upstreamTest": "Switch > should support focus events",
77
+ "apg": "focus",
78
+ "config": { "part": "switch" },
79
+ "steps": [
80
+ { "event": "key", "key": "Tab" },
81
+ {
82
+ "expect": {
83
+ "focus": "switch",
84
+ "events": { "onFocus": [1], "onFocusChange": [true] }
85
+ }
86
+ },
87
+ { "event": "key", "key": "Tab" },
88
+ {
89
+ "expect": {
90
+ "focus": "button:steal",
91
+ "events": { "onBlur": [1], "onFocusChange": [false] }
92
+ }
93
+ }
94
+ ],
95
+ "notes": "onFocusChange mirrors focus/blur transitions."
96
+ },
97
+ {
98
+ "id": "switch.react-aria.press-state-pointer",
99
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L204",
100
+ "upstreamTest": "Switch > should support press state",
101
+ "apg": "extension",
102
+ "config": { "part": "switch" },
103
+ "steps": [
104
+ { "event": "pointerdown", "target": "label" },
105
+ { "expect": { "attrs": { "label": { "data-pressed": "true" } } } },
106
+ { "event": "pointerup", "target": "label" },
107
+ {
108
+ "expect": {
109
+ "attrs": { "label": { "data-pressed": null } },
110
+ "events": { "onPress": [1], "onClick": [1], "onClickCapture": [1] }
111
+ }
112
+ }
113
+ ],
114
+ "notes": "Press feedback sits on the label while the toggle fires on release."
115
+ },
116
+ {
117
+ "id": "switch.react-aria.press-state-keyboard-space",
118
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L235",
119
+ "upstreamTest": "Switch > should support press state with keyboard",
120
+ "apg": "keyboard",
121
+ "config": { "part": "switch" },
122
+ "steps": [
123
+ { "event": "key", "key": "Tab" },
124
+ { "expect": { "focus": "switch" } },
125
+ { "event": "key", "key": " ", "phase": "down", "target": "switch" },
126
+ { "expect": { "attrs": { "label": { "data-pressed": "true" } } } },
127
+ { "event": "key", "key": " ", "phase": "up", "target": "switch" },
128
+ {
129
+ "expect": {
130
+ "attrs": { "label": { "data-pressed": null } },
131
+ "events": { "onPress": [1], "onClick": [1] }
132
+ }
133
+ }
134
+ ],
135
+ "notes": "Space held down keeps data-pressed until keyup."
136
+ },
137
+ {
138
+ "id": "switch.react-aria.disabled-state",
139
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L264",
140
+ "upstreamTest": "Switch > should support disabled state",
141
+ "apg": "states",
142
+ "config": { "part": "switch", "isDisabled": true },
143
+ "steps": [
144
+ { "event": "prop", "set": {} },
145
+ {
146
+ "expect": {
147
+ "attrs": {
148
+ "switch": { "disabled": "" },
149
+ "label": { "data-disabled": "true" }
150
+ }
151
+ }
152
+ }
153
+ ],
154
+ "notes": "Disabled switch is natively disabled and marks the label data-disabled."
155
+ },
156
+ {
157
+ "id": "switch.react-aria.selected-state-onchange",
158
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L279",
159
+ "upstreamTest": "Switch > should support selected state",
160
+ "apg": "states",
161
+ "config": { "part": "switch", "checked": false },
162
+ "steps": [
163
+ { "event": "prop", "set": {} },
164
+ {
165
+ "expect": {
166
+ "attrs": {
167
+ "switch": { "checked": "false" },
168
+ "label": { "data-selected": null }
169
+ }
170
+ }
171
+ },
172
+ { "event": "click", "target": "switch" },
173
+ {
174
+ "expect": {
175
+ "attrs": {
176
+ "switch": { "checked": "true" },
177
+ "label": { "data-selected": "true" }
178
+ },
179
+ "events": { "onChange": [true] }
180
+ }
181
+ },
182
+ { "event": "click", "target": "switch" },
183
+ {
184
+ "expect": {
185
+ "attrs": {
186
+ "switch": { "checked": "false" },
187
+ "label": { "data-selected": null }
188
+ },
189
+ "events": { "onChange": [false] }
190
+ }
191
+ }
192
+ ],
193
+ "notes": "Checked state is the native input's checked property; onChange reports the new value."
194
+ },
195
+ {
196
+ "id": "switch.react-aria.read-only-state",
197
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Switch.test.js#L311",
198
+ "upstreamTest": "Switch > should support read only state",
199
+ "apg": "states",
200
+ "config": { "part": "switch", "isReadOnly": true },
201
+ "steps": [
202
+ { "event": "prop", "set": {} },
203
+ {
204
+ "expect": {
205
+ "attrs": {
206
+ "switch": { "aria-readonly": "true" },
207
+ "label": { "data-readonly": "" }
208
+ }
209
+ }
210
+ }
211
+ ],
212
+ "notes": "Read-only switch exposes aria-readonly and data-readonly."
213
+ },
214
+ {
215
+ "id": "switch.react-aria.s1-switch-unchecked-click",
216
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/switch/Switch.test.js#L30",
217
+ "upstreamTest": "Switch > Switch default unchecked can be checked",
218
+ "apg": "states",
219
+ "config": { "part": "switch", "nativelyWrapped": true },
220
+ "steps": [
221
+ { "event": "prop", "set": {} },
222
+ {
223
+ "expect": {
224
+ "attrs": { "switch": { "value": "on", "checked": "false" } }
225
+ }
226
+ },
227
+ { "event": "click", "target": "switch" },
228
+ {
229
+ "expect": {
230
+ "attrs": { "switch": { "checked": "true" } },
231
+ "events": { "onChange": [true] }
232
+ }
233
+ },
234
+ { "event": "click", "target": "switch" },
235
+ {
236
+ "expect": {
237
+ "attrs": { "switch": { "checked": "false" } },
238
+ "events": { "onChange": [false] }
239
+ }
240
+ }
241
+ ],
242
+ "notes": "S1 switch is a labelled checkbox input with role switch; default value is 'on'."
243
+ },
244
+ {
245
+ "id": "switch.react-aria.s1-switch-disabled",
246
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/switch/Switch.test.js#L98",
247
+ "upstreamTest": "Switch > Switch can be disabled",
248
+ "apg": "states",
249
+ "config": { "part": "switch", "isDisabled": true },
250
+ "steps": [
251
+ { "event": "click", "target": "switch" },
252
+ {
253
+ "expect": {
254
+ "attrs": { "switch": { "checked": "false" } },
255
+ "events": { "onChange": [0] }
256
+ }
257
+ }
258
+ ],
259
+ "notes": "Disabled switch ignores clicks and fires no onChange."
260
+ },
261
+ {
262
+ "id": "switch.react-aria.s1-switch-read-only",
263
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/switch/Switch.test.js#L174",
264
+ "upstreamTest": "Switch > Switch supports readOnly",
265
+ "apg": "states",
266
+ "config": { "part": "switch", "isReadOnly": true, "isSelected": true },
267
+ "steps": [
268
+ { "event": "click", "target": "switch" },
269
+ {
270
+ "expect": {
271
+ "attrs": { "switch": { "checked": "true" } },
272
+ "events": { "onChange": [0] }
273
+ }
274
+ }
275
+ ],
276
+ "notes": "Read-only keeps the current checked state and fires no onChange."
277
+ },
278
+ {
279
+ "id": "switch.react-aria.s1-switch-aria-label",
280
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/switch/Switch.test.js#L113",
281
+ "upstreamTest": "Switch > Switch can have a non-visible label",
282
+ "apg": "aria",
283
+ "config": { "part": "switch", "aria-label": "not visible" },
284
+ "steps": [
285
+ { "event": "prop", "set": {} },
286
+ { "expect": { "attrs": { "switch": { "aria-label": "not visible" } } } }
287
+ ],
288
+ "notes": "Accessible name can come from aria-label with no visible label."
289
+ },
290
+ {
291
+ "id": "switch.react-aria.s1-switch-exclude-from-tab-order",
292
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/switch/Switch.test.js#L164",
293
+ "upstreamTest": "Switch > Switch supports excludeFromTabOrder",
294
+ "apg": "keyboard",
295
+ "config": { "part": "switch", "excludeFromTabOrder": true },
296
+ "steps": [
297
+ { "event": "prop", "set": {} },
298
+ { "expect": { "attrs": { "switch": { "tabIndex": "-1" } } } }
299
+ ],
300
+ "notes": "excludeFromTabOrder sets tabIndex=-1."
301
+ }
302
+ ]
303
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "pattern": "table",
3
+ "source": "ariakit",
4
+ "commit": "404c72257b879569feb08465da4ff9915fd873da",
5
+ "license": "MIT",
6
+ "skipped": [
7
+ {
8
+ "reason": "ariakit-ui-table > test-chrome selection / row-click suites (grid ticket)"
9
+ },
10
+ {
11
+ "reason": "names declarative and composed tables with native captions (firstElementChild styling assertion)"
12
+ }
13
+ ],
14
+ "scenarios": [
15
+ {
16
+ "id": "table.ariakit.native-table-named-by-caption",
17
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/ariakit-ui-table/test.ts#L5",
18
+ "upstreamTest": "names declarative and composed tables with native captions",
19
+ "apg": "aria",
20
+ "config": { "caption": "Component inventory", "rows": 2 },
21
+ "steps": [
22
+ {
23
+ "expect": {
24
+ "visible": ["table", "caption", "rowgroup", "row:0", "row:1"]
25
+ }
26
+ }
27
+ ],
28
+ "notes": "A native table takes its accessible name from the visible caption; both declarative and composed tables expose it."
29
+ },
30
+ {
31
+ "id": "table.ariakit.caption-is-optional",
32
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/ariakit-ui-table/test.ts#L16",
33
+ "upstreamTest": "supports optional caption parts before declarative and appended rows",
34
+ "apg": "aria",
35
+ "config": { "caption": null, "rows": 2 },
36
+ "steps": [
37
+ {
38
+ "expect": {
39
+ "visible": ["table", "rowgroup", "row:0", "row:1"]
40
+ }
41
+ }
42
+ ],
43
+ "notes": "When the caption is hidden the caption element is not rendered and the table keeps its rows and cells (Button, Covered, Tabs, Expanded)."
44
+ },
45
+ {
46
+ "id": "table.ariakit.explicit-caption-element",
47
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/ariakit-ui-table/test.ts#L16",
48
+ "upstreamTest": "supports optional caption parts before declarative and appended rows (Caption element format)",
49
+ "apg": "aria",
50
+ "config": {
51
+ "caption": "Component inventory",
52
+ "captionAsElement": true,
53
+ "rows": 2
54
+ },
55
+ "steps": [
56
+ {
57
+ "expect": {
58
+ "visible": ["table", "caption", "rowgroup", "row:0", "row:1"]
59
+ }
60
+ }
61
+ ],
62
+ "notes": "A caption supplied as an element is rendered as the table's caption just like the text and props forms."
63
+ }
64
+ ]
65
+ }
@@ -0,0 +1,221 @@
1
+ {
2
+ "pattern": "table",
3
+ "source": "react-aria",
4
+ "commit": "99e610236887da619ad9d54a1cd87983166c043d",
5
+ "license": "Apache-2.0",
6
+ "skipped": [
7
+ { "reason": "Table > should render with default classes" },
8
+ { "reason": "Table > should render with custom classes" },
9
+ { "reason": "Table > should support DOM props" },
10
+ { "reason": "Table > should support custom render function" },
11
+ { "reason": "Table > custom cell renderer and index rows" },
12
+ { "reason": "Table > should support column hover when sorting is allowed" },
13
+ { "reason": "Table > supports removing rows" },
14
+ {
15
+ "reason": "Table > does not hang restoring focus when no focusable row remains"
16
+ },
17
+ {
18
+ "reason": "Table > should support virtualizer (scroll re-window and End keyboard)"
19
+ },
20
+ {
21
+ "reason": "Table > colSpan > should focus to the same colIndex when moving focus up or down"
22
+ },
23
+ {
24
+ "reason": "Table > keyboard navigation, selection checkboxes, row actions (grid ticket)"
25
+ },
26
+ { "reason": "useTable > calls onAction" },
27
+ { "reason": "useTable > sets the passed id" }
28
+ ],
29
+ "scenarios": [
30
+ {
31
+ "id": "table.react-aria.structural-roles",
32
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L549",
33
+ "upstreamTest": "Table > should render with custom classes (role structure)",
34
+ "apg": "aria",
35
+ "config": { "columns": 3, "rows": 2, "rowHeaderColumn": 0 },
36
+ "steps": [
37
+ {
38
+ "expect": {
39
+ "attrs": {
40
+ "table": { "role": "grid" },
41
+ "rowgroup:0": { "role": "rowgroup" },
42
+ "rowgroup:1": { "role": "rowgroup" },
43
+ "columnheader:0": { "role": "columnheader" },
44
+ "rowheader:0": { "role": "rowheader" },
45
+ "gridcell:0": { "role": "gridcell" }
46
+ }
47
+ }
48
+ }
49
+ ],
50
+ "notes": "Header cells are columnheaders, the first column is rowheaders, the rest are gridcells."
51
+ },
52
+ {
53
+ "id": "table.react-aria.grid-accessible-name",
54
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L558",
55
+ "upstreamTest": "Table > should render with custom classes (aria-label on the grid)",
56
+ "apg": "aria",
57
+ "config": { "aria-label": "Files" },
58
+ "steps": [
59
+ {
60
+ "expect": {
61
+ "attrs": { "table": { "aria-label": "Files" } }
62
+ }
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "id": "table.react-aria.sort-descriptor",
68
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L1105",
69
+ "upstreamTest": "Table > should support sorting",
70
+ "apg": "states",
71
+ "config": {
72
+ "sortColumn": "name",
73
+ "sortDirection": "ascending",
74
+ "sortable": true
75
+ },
76
+ "steps": [
77
+ {
78
+ "expect": {
79
+ "attrs": {
80
+ "columnheader:0": { "aria-sort": "ascending" },
81
+ "columnheader:1": { "aria-sort": "none" }
82
+ }
83
+ }
84
+ }
85
+ ],
86
+ "notes": "Only sortable columns expose aria-sort; the unsorted ones report none."
87
+ },
88
+ {
89
+ "id": "table.react-aria.selection-replace-aria-selected",
90
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L736",
91
+ "upstreamTest": "Table > should not render checkboxes for selection with selectionBehavior=replace",
92
+ "apg": "states",
93
+ "config": { "selectionMode": "multiple", "selectionBehavior": "replace" },
94
+ "steps": [
95
+ { "event": "click", "target": "row:1" },
96
+ { "expect": { "attrs": { "row:1": { "aria-selected": "true" } } } }
97
+ ],
98
+ "notes": "With replace behavior there are no checkboxes; selection is reported on the row."
99
+ },
100
+ {
101
+ "id": "table.react-aria.static-counts-and-indices",
102
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/table/TableTests.js#L274",
103
+ "upstreamTest": "TableView > renders a static table (row/column counts and indices)",
104
+ "apg": "states",
105
+ "config": { "columns": 3, "rows": 2, "rowHeaderColumn": 0 },
106
+ "steps": [
107
+ {
108
+ "expect": {
109
+ "attrs": {
110
+ "table": {
111
+ "role": "grid",
112
+ "aria-rowcount": "3",
113
+ "aria-colcount": "3"
114
+ },
115
+ "rowgroup:0": { "role": "rowgroup" },
116
+ "rowgroup:1": { "role": "rowgroup" },
117
+ "row:0": { "aria-rowindex": "1" },
118
+ "columnheader:0": { "aria-colindex": "1", "aria-sort": null },
119
+ "columnheader:1": { "aria-colindex": "2" },
120
+ "columnheader:2": { "aria-colindex": "3" },
121
+ "rowheader:0": { "aria-colindex": "1" },
122
+ "gridcell:0": { "aria-colindex": "2" }
123
+ }
124
+ }
125
+ }
126
+ ],
127
+ "notes": "The header counts as row 1; a static table with no sort descriptor has no aria-sort on any column."
128
+ },
129
+ {
130
+ "id": "table.react-aria.static-selection-structure",
131
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/@adobe/react-spectrum/test/table/TableTests.js#L333",
132
+ "upstreamTest": "TableView > renders a static table with selection",
133
+ "apg": "states",
134
+ "config": { "columns": 3, "rows": 2, "selectionMode": "multiple" },
135
+ "steps": [
136
+ {
137
+ "expect": {
138
+ "attrs": {
139
+ "table": {
140
+ "role": "grid",
141
+ "aria-multiselectable": "true",
142
+ "aria-rowcount": "3",
143
+ "aria-colcount": "4"
144
+ },
145
+ "row:0": { "aria-selected": null },
146
+ "row:1": { "aria-selected": "false" },
147
+ "rowheader:0": { "aria-colindex": "2" }
148
+ }
149
+ }
150
+ }
151
+ ],
152
+ "notes": "A selection column adds one column, shifting the row header to column 2; unselected rows report aria-selected=false."
153
+ },
154
+ {
155
+ "id": "table.react-aria.virtualizer-row-index",
156
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L1503",
157
+ "upstreamTest": "Table > should support virtualizer (aria-rowindex on every row)",
158
+ "apg": "states",
159
+ "config": { "virtualized": true, "items": 50 },
160
+ "steps": [
161
+ {
162
+ "expect": {
163
+ "attrs": {
164
+ "row:0": { "aria-rowindex": "1" },
165
+ "row:1": { "aria-rowindex": "2" }
166
+ }
167
+ }
168
+ }
169
+ ],
170
+ "notes": "Every visible row, header included, exposes its position via aria-rowindex."
171
+ },
172
+ {
173
+ "id": "table.react-aria.colspan-colindex",
174
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L1596",
175
+ "upstreamTest": "Table > colSpan > should render table with colSpans",
176
+ "apg": "states",
177
+ "config": { "columns": 4, "colspans": true, "colspanRow": 1 },
178
+ "steps": [
179
+ {
180
+ "expect": {
181
+ "attrs": {
182
+ "colspan-cell": { "colspan": "2", "aria-colindex": null },
183
+ "colindex-cell": { "aria-colindex": "4" }
184
+ }
185
+ }
186
+ }
187
+ ],
188
+ "notes": "A spanned cell omits aria-colindex; the next cell reports the advanced index."
189
+ },
190
+ {
191
+ "id": "table.react-aria.empty-state-rowgroup",
192
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.test.js#L1127",
193
+ "upstreamTest": "Table > should support empty state",
194
+ "apg": "states",
195
+ "config": { "empty": true },
196
+ "steps": [
197
+ {
198
+ "expect": {
199
+ "attrs": { "rowgroup:1": { "data-empty": "true" } }
200
+ }
201
+ }
202
+ ],
203
+ "notes": "The empty body keeps its rowgroup and renders the fallback content in a rowheader."
204
+ },
205
+ {
206
+ "id": "table.react-aria.ssr-row-order",
207
+ "upstream": "https://github.com/adobe/react-spectrum/blob/99e610236887da619ad9d54a1cd87983166c043d/packages/react-aria-components/test/Table.ssr.test.js#L20",
208
+ "upstreamTest": "Table SSR > should render without errors",
209
+ "apg": "aria",
210
+ "config": { "items": 4, "insertedAfter": 2 },
211
+ "steps": [
212
+ {
213
+ "expect": {
214
+ "visible": ["table", "row:0", "row:1", "row:2", "row:3", "row:4"]
215
+ }
216
+ }
217
+ ],
218
+ "notes": "Server-rendered and hydrated rows keep order with the late-inserted row before the final one."
219
+ }
220
+ ]
221
+ }