@cssints/apg-specs 0.0.0-stage → 0.5.2

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,758 @@
1
+ {
2
+ "pattern": "menubar",
3
+ "source": "ariakit",
4
+ "commit": "404c72257b879569feb08465da4ff9915fd873da",
5
+ "license": "MIT",
6
+ "scenarios": [
7
+ {
8
+ "id": "menubar.ariakit.click-opens-menu-and-focuses-menu",
9
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L4",
10
+ "upstreamTest": "show/hide on click",
11
+ "apg": "keyboard",
12
+ "config": {
13
+ "orientation": "horizontal",
14
+ "items": ["File", "Edit", "View"]
15
+ },
16
+ "steps": [
17
+ { "expect": { "hidden": ["menu:0"] } },
18
+ { "event": "click", "target": "menuitem:0" },
19
+ {
20
+ "expect": {
21
+ "visible": ["menu:0"],
22
+ "focus": "menu:0",
23
+ "attrs": { "menuitem:0": { "aria-expanded": "true" } }
24
+ }
25
+ },
26
+ { "event": "click", "target": "menuitem:0/0" },
27
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
28
+ ],
29
+ "notes": "The popup itself receives focus on pointer open (ariakit keeps focus on the menu container, not the first item)."
30
+ },
31
+ {
32
+ "id": "menubar.ariakit.click-trigger-twice-closes",
33
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L13",
34
+ "upstreamTest": "show/hide on click (second toggle)",
35
+ "apg": "keyboard",
36
+ "config": {
37
+ "orientation": "horizontal",
38
+ "items": ["File", "Edit", "View"]
39
+ },
40
+ "steps": [
41
+ { "event": "click", "target": "menuitem:0" },
42
+ { "event": "click", "target": "menuitem:0" },
43
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
44
+ ]
45
+ },
46
+ {
47
+ "id": "menubar.ariakit.enter-opens-and-activates-item",
48
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L19",
49
+ "upstreamTest": "show/hide on enter",
50
+ "apg": "keyboard",
51
+ "config": {
52
+ "orientation": "horizontal",
53
+ "items": ["File", "Edit", "View"]
54
+ },
55
+ "steps": [
56
+ { "event": "focus", "target": "menuitem:0" },
57
+ { "event": "key", "key": "Enter", "target": "menuitem:0" },
58
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0/0" } },
59
+ { "event": "key", "key": "Enter", "target": "menuitem:0/0" },
60
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
61
+ ]
62
+ },
63
+ {
64
+ "id": "menubar.ariakit.shift-tab-to-trigger-then-enter-closes",
65
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L27",
66
+ "upstreamTest": "show/hide on enter (shift-tab back to trigger)",
67
+ "apg": "keyboard",
68
+ "config": {
69
+ "orientation": "horizontal",
70
+ "items": ["File", "Edit", "View"]
71
+ },
72
+ "steps": [
73
+ { "event": "key", "key": "Enter", "target": "menuitem:0" },
74
+ { "event": "key", "key": "Shift+Tab", "target": "menu:0" },
75
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0" } },
76
+ { "event": "key", "key": "Enter", "target": "menuitem:0" },
77
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
78
+ ]
79
+ },
80
+ {
81
+ "id": "menubar.ariakit.space-opens-menu",
82
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L36",
83
+ "upstreamTest": "show/hide on space",
84
+ "apg": "keyboard",
85
+ "config": {
86
+ "orientation": "horizontal",
87
+ "items": ["File", "Edit", "View"]
88
+ },
89
+ "steps": [
90
+ { "event": "focus", "target": "menuitem:0" },
91
+ { "event": "key", "key": "Space", "target": "menuitem:0" },
92
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0/0" } },
93
+ { "event": "key", "key": "Space", "target": "menuitem:0/0" },
94
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
95
+ ]
96
+ },
97
+ {
98
+ "id": "menubar.ariakit.arrow-down-opens-first-item",
99
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L53",
100
+ "upstreamTest": "show/hide on key down (ArrowDown opens)",
101
+ "apg": "keyboard",
102
+ "config": {
103
+ "orientation": "horizontal",
104
+ "items": ["File", "Edit", "View"]
105
+ },
106
+ "steps": [
107
+ { "event": "focus", "target": "menuitem:0" },
108
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0" },
109
+ {
110
+ "expect": {
111
+ "visible": ["menu:0"],
112
+ "focus": "menuitem:0/0",
113
+ "attrs": { "menuitem:0": { "aria-expanded": "true" } }
114
+ }
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ "id": "menubar.ariakit.arrow-right-moves-to-next-menubar-item-and-opens",
120
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L58",
121
+ "upstreamTest": "show/hide on key down (ArrowRight across the bar)",
122
+ "apg": "keyboard",
123
+ "config": {
124
+ "orientation": "horizontal",
125
+ "items": ["File", "Edit", "View"]
126
+ },
127
+ "steps": [
128
+ { "event": "focus", "target": "menuitem:0" },
129
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0" },
130
+ { "event": "key", "key": "ArrowRight", "target": "menu:0" },
131
+ {
132
+ "expect": {
133
+ "hidden": ["menu:0"],
134
+ "visible": ["menu:1"],
135
+ "focus": "menuitem:1"
136
+ }
137
+ }
138
+ ]
139
+ },
140
+ {
141
+ "id": "menubar.ariakit.arrow-up-within-open-menu-moves-to-last-item",
142
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L63",
143
+ "upstreamTest": "show/hide on key down (ArrowUp wraps to last item)",
144
+ "apg": "keyboard",
145
+ "config": {
146
+ "orientation": "horizontal",
147
+ "items": ["File", "Edit", "View"]
148
+ },
149
+ "steps": [
150
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:1" },
151
+ { "event": "key", "key": "ArrowUp", "target": "menu:1" },
152
+ { "expect": { "focus": "menuitem:1/2" } }
153
+ ]
154
+ },
155
+ {
156
+ "id": "menubar.ariakit.typeahead-in-menubar-finds-item",
157
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L69",
158
+ "upstreamTest": "show/hide on key down (typeahead finds Find, submenu not opened)",
159
+ "apg": "keyboard",
160
+ "config": {
161
+ "orientation": "horizontal",
162
+ "items": ["File", "Edit", "View"]
163
+ },
164
+ "steps": [
165
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:1" },
166
+ { "event": "type", "text": "f", "target": "menu:1" },
167
+ { "expect": { "focus": "menuitem:1/2", "hidden": ["submenu:1"] } }
168
+ ],
169
+ "notes": "The matching item is a submenu trigger; typing selects it without opening the submenu."
170
+ },
171
+ {
172
+ "id": "menubar.ariakit.arrow-right-opens-submenu-arrow-left-returns",
173
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L72",
174
+ "upstreamTest": "show/hide on key down (open and close a submenu)",
175
+ "apg": "keyboard",
176
+ "config": {
177
+ "orientation": "horizontal",
178
+ "items": ["File", "Edit", "View"]
179
+ },
180
+ "steps": [
181
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:1" },
182
+ { "event": "type", "text": "f", "target": "menu:1" },
183
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:1/2" },
184
+ { "expect": { "visible": ["submenu:1"], "focus": "menuitem:1/2/0" } },
185
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:1/2/0" },
186
+ { "expect": { "hidden": ["submenu:1"], "focus": "menuitem:1/2" } }
187
+ ]
188
+ },
189
+ {
190
+ "id": "menubar.ariakit.typeahead-from-trigger-continues-in-menu",
191
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L91",
192
+ "upstreamTest": "typeahead from menu button continues after focus moves to menu",
193
+ "apg": "keyboard",
194
+ "config": {
195
+ "orientation": "horizontal",
196
+ "items": ["File", "Edit", "View"]
197
+ },
198
+ "steps": [
199
+ { "event": "key", "key": "Enter", "target": "menuitem:0" },
200
+ { "event": "key", "key": "Shift+Tab", "target": "menu:0" },
201
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0" } },
202
+ { "event": "type", "text": "s", "target": "menuitem:0" },
203
+ { "expect": { "focus": "menuitem:0/3" } },
204
+ { "event": "type", "text": "h", "target": "menuitem:0" },
205
+ { "expect": { "focus": "menuitem:0/4" } }
206
+ ],
207
+ "notes": "Focus is on the menubar item, but keystrokes are forwarded into the open menu's typeahead."
208
+ },
209
+ {
210
+ "id": "menubar.ariakit.hover-without-click-does-not-open",
211
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L106",
212
+ "upstreamTest": "show/hide on hover (hover alone does not open)",
213
+ "apg": "mouse",
214
+ "config": {
215
+ "orientation": "horizontal",
216
+ "items": ["File", "Edit", "View"]
217
+ },
218
+ "steps": [
219
+ { "event": "hover", "target": "menuitem:0" },
220
+ { "expect": { "hidden": ["menu:0"] } }
221
+ ]
222
+ },
223
+ {
224
+ "id": "menubar.ariakit.hover-switches-open-menu",
225
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L109",
226
+ "upstreamTest": "show/hide on hover (hovering another item opens its menu)",
227
+ "apg": "mouse",
228
+ "config": {
229
+ "orientation": "horizontal",
230
+ "items": ["File", "Edit", "View"]
231
+ },
232
+ "steps": [
233
+ { "event": "click", "target": "menuitem:0" },
234
+ { "expect": { "visible": ["menu:0"] } },
235
+ { "event": "hover", "target": "menuitem:2" },
236
+ {
237
+ "expect": {
238
+ "hidden": ["menu:0"],
239
+ "visible": ["menu:2"],
240
+ "focus": "menuitem:2"
241
+ }
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "id": "menubar.ariakit.escape-closes-submenu-then-menu-and-restores-focus",
247
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L124",
248
+ "upstreamTest": "hide on escape",
249
+ "apg": "keyboard",
250
+ "config": {
251
+ "orientation": "horizontal",
252
+ "items": ["File", "Edit", "View"]
253
+ },
254
+ "steps": [
255
+ { "event": "key", "key": "Enter", "target": "menuitem:0" },
256
+ { "event": "type", "text": "sh", "target": "menu:0" },
257
+ { "event": "key", "key": "Space", "target": "menuitem:0/4" },
258
+ { "expect": { "visible": ["submenu:1"], "focus": "menuitem:0/4/0" } },
259
+ { "event": "key", "key": "Escape", "target": "menuitem:0/4/0" },
260
+ {
261
+ "expect": { "hidden": ["submenu:1", "menu:0"], "focus": "menuitem:0" }
262
+ }
263
+ ]
264
+ },
265
+ {
266
+ "id": "menubar.ariakit.escape-then-arrow-right-moves-without-opening",
267
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L136",
268
+ "upstreamTest": "hide on escape (arrow right after escape only moves focus)",
269
+ "apg": "keyboard",
270
+ "config": {
271
+ "orientation": "horizontal",
272
+ "items": ["File", "Edit", "View"]
273
+ },
274
+ "steps": [
275
+ { "event": "key", "key": "Escape", "target": "menu:0" },
276
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0" },
277
+ { "expect": { "focus": "menuitem:1", "hidden": ["menu:0", "menu:1"] } }
278
+ ]
279
+ },
280
+ {
281
+ "id": "menubar.ariakit.arrow-right-traverses-from-menu-container",
282
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L188",
283
+ "upstreamTest": "ArrowRight traverses the menubar from menu",
284
+ "apg": "keyboard",
285
+ "config": {
286
+ "orientation": "horizontal",
287
+ "items": ["File", "Edit", "View"]
288
+ },
289
+ "steps": [
290
+ { "event": "click", "target": "menuitem:0" },
291
+ { "expect": { "focus": "menu:0" } },
292
+ { "event": "key", "key": "ArrowRight", "target": "menu:0" },
293
+ {
294
+ "expect": {
295
+ "focus": "menuitem:1",
296
+ "hidden": ["menu:0"],
297
+ "visible": ["menu:1"]
298
+ }
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "id": "menubar.ariakit.arrow-left-traverses-from-menu-container",
304
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L188",
305
+ "upstreamTest": "ArrowLeft traverses the menubar from menu",
306
+ "apg": "keyboard",
307
+ "config": {
308
+ "orientation": "horizontal",
309
+ "items": ["File", "Edit", "View"]
310
+ },
311
+ "steps": [
312
+ { "event": "click", "target": "menuitem:1" },
313
+ { "event": "key", "key": "ArrowLeft", "target": "menu:1" },
314
+ {
315
+ "expect": {
316
+ "focus": "menuitem:0",
317
+ "hidden": ["menu:1"],
318
+ "visible": ["menu:0"]
319
+ }
320
+ }
321
+ ]
322
+ },
323
+ {
324
+ "id": "menubar.ariakit.arrow-right-traverses-from-focused-item",
325
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L188",
326
+ "upstreamTest": "ArrowRight traverses the menubar from item",
327
+ "apg": "keyboard",
328
+ "config": {
329
+ "orientation": "horizontal",
330
+ "items": ["File", "Edit", "View"]
331
+ },
332
+ "steps": [
333
+ { "event": "click", "target": "menuitem:0" },
334
+ { "event": "key", "key": "ArrowDown", "target": "menu:0" },
335
+ { "expect": { "focus": "menuitem:0/0" } },
336
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0/0" },
337
+ {
338
+ "expect": {
339
+ "focus": "menuitem:1",
340
+ "visible": ["menu:1"],
341
+ "hidden": ["menu:0"]
342
+ }
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ "id": "menubar.ariakit.arrow-keys-keep-focus-on-input-in-vertical-menubar",
348
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L211",
349
+ "upstreamTest": "ArrowUp keeps focus on Rename in a vertical menubar",
350
+ "apg": "extension",
351
+ "config": {
352
+ "orientation": "vertical",
353
+ "items": ["Tools", "Format", "Insert"]
354
+ },
355
+ "steps": [
356
+ { "event": "click", "target": "menuitem:0" },
357
+ { "event": "click", "target": "menuitem:0/0" },
358
+ { "expect": { "focus": "menuitem:0/0", "visible": ["menu:0"] } },
359
+ { "event": "key", "key": "ArrowUp", "target": "menuitem:0/0" },
360
+ { "expect": { "focus": "menuitem:0/0", "visible": ["menu:0"] } }
361
+ ],
362
+ "notes": "The focused item is a text input; the menubar must not steal arrow keys while a textbox has focus."
363
+ },
364
+ {
365
+ "id": "menubar.ariakit.arrow-down-keeps-focus-on-input-in-vertical-menubar",
366
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L211",
367
+ "upstreamTest": "ArrowDown keeps focus on Rename in a vertical menubar",
368
+ "apg": "extension",
369
+ "config": {
370
+ "orientation": "vertical",
371
+ "items": ["Tools", "Format", "Insert"]
372
+ },
373
+ "steps": [
374
+ { "event": "click", "target": "menuitem:0" },
375
+ { "event": "click", "target": "menuitem:0/0" },
376
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/0" },
377
+ { "expect": { "focus": "menuitem:0/0", "visible": ["menu:0"] } }
378
+ ]
379
+ },
380
+ {
381
+ "id": "menubar.ariakit.arrow-down-keeps-focus-on-control-in-vertical-menubar",
382
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L226",
383
+ "upstreamTest": "ArrowDown keeps focus on Help in a vertical menubar",
384
+ "apg": "extension",
385
+ "config": {
386
+ "orientation": "vertical",
387
+ "items": ["Tools", "Format", "Insert"]
388
+ },
389
+ "steps": [
390
+ { "event": "click", "target": "menuitem:0" },
391
+ { "event": "click", "target": "menuitem:0/1" },
392
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/1" },
393
+ { "expect": { "focus": "menuitem:0/1", "visible": ["menu:0"] } }
394
+ ],
395
+ "notes": "The focused item wraps a link/button; activating arrow keys would navigate the page, so they are left alone."
396
+ },
397
+ {
398
+ "id": "menubar.ariakit.vertical-arrow-down-follows-rtl-order",
399
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L242",
400
+ "upstreamTest": "ArrowDown follows vertical RTL menubar order from the menu container",
401
+ "apg": "keyboard",
402
+ "config": {
403
+ "orientation": "vertical",
404
+ "direction": "rtl",
405
+ "items": ["Document", "History", "Zoom"]
406
+ },
407
+ "steps": [
408
+ { "event": "click", "target": "menuitem:0" },
409
+ { "expect": { "focus": "menu:0" } },
410
+ { "event": "key", "key": "ArrowDown", "target": "menu:0" },
411
+ {
412
+ "expect": {
413
+ "focus": "menuitem:1",
414
+ "visible": ["menu:1"],
415
+ "hidden": ["menu:0"],
416
+ "attrs": { "menuitem:1": { "aria-expanded": "true" } }
417
+ }
418
+ }
419
+ ]
420
+ },
421
+ {
422
+ "id": "menubar.ariakit.vertical-arrow-up-follows-rtl-order",
423
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L242",
424
+ "upstreamTest": "ArrowUp follows vertical RTL menubar order from the menu container",
425
+ "apg": "keyboard",
426
+ "config": {
427
+ "orientation": "vertical",
428
+ "direction": "rtl",
429
+ "items": ["Document", "History", "Zoom"]
430
+ },
431
+ "steps": [
432
+ { "event": "click", "target": "menuitem:0" },
433
+ { "event": "key", "key": "ArrowUp", "target": "menu:0" },
434
+ { "expect": { "focus": "menuitem:2", "visible": ["menu:2"] } }
435
+ ]
436
+ },
437
+ {
438
+ "id": "menubar.ariakit.vertical-arrow-right-opens-menu",
439
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test.ts#L5",
440
+ "upstreamTest": "arrow keys open and close the menus of a vertical menubar (ArrowRight opens)",
441
+ "apg": "keyboard",
442
+ "config": { "orientation": "vertical", "items": ["File", "Edit"] },
443
+ "steps": [
444
+ { "event": "focus", "target": "menuitem:0" },
445
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0" },
446
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0/0" } },
447
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/0" },
448
+ { "expect": { "focus": "menuitem:0/1" } },
449
+ { "event": "key", "key": "ArrowUp", "target": "menuitem:0/1" },
450
+ { "expect": { "focus": "menuitem:0/0" } },
451
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:0/0" },
452
+ {
453
+ "expect": {
454
+ "hidden": ["menu:0"],
455
+ "focus": "menuitem:0",
456
+ "attrs": { "menuitem:0": { "aria-expanded": "false" } }
457
+ }
458
+ }
459
+ ]
460
+ },
461
+ {
462
+ "id": "menubar.ariakit.vertical-arrow-down-moves-between-items-without-opening",
463
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test.ts#L23",
464
+ "upstreamTest": "arrow keys open and close the menus of a vertical menubar (ArrowDown between items)",
465
+ "apg": "keyboard",
466
+ "config": { "orientation": "vertical", "items": ["File", "Edit"] },
467
+ "steps": [
468
+ { "event": "focus", "target": "menuitem:0" },
469
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0" },
470
+ {
471
+ "expect": {
472
+ "focus": "menuitem:1",
473
+ "hidden": ["menu:1"],
474
+ "attrs": { "menuitem:1": { "aria-expanded": "false" } }
475
+ }
476
+ },
477
+ { "event": "key", "key": "ArrowUp", "target": "menuitem:1" },
478
+ { "expect": { "focus": "menuitem:0", "hidden": ["menu:0"] } }
479
+ ]
480
+ },
481
+ {
482
+ "id": "menubar.ariakit.submenu-follows-parent-menu",
483
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test.ts#L35",
484
+ "upstreamTest": "submenus keep following their parent menu",
485
+ "apg": "keyboard",
486
+ "config": { "orientation": "vertical", "items": ["File", "Edit"] },
487
+ "steps": [
488
+ { "event": "focus", "target": "menuitem:0" },
489
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0" },
490
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/0" },
491
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/1" },
492
+ { "expect": { "focus": "menuitem:0/2" } },
493
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0/2" },
494
+ { "expect": { "visible": ["submenu:1"], "focus": "menuitem:0/2/0" } },
495
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:0/2/0" },
496
+ {
497
+ "expect": {
498
+ "hidden": ["submenu:1"],
499
+ "visible": ["menu:0"],
500
+ "focus": "menuitem:0/2"
501
+ }
502
+ },
503
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:0/2" },
504
+ { "expect": { "hidden": ["menu:0"], "focus": "menuitem:0" } }
505
+ ]
506
+ },
507
+ {
508
+ "id": "menubar.ariakit.rtl-explicit-placement-wins",
509
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test.ts#L59",
510
+ "upstreamTest": "an explicit placement wins in a right-to-left menubar",
511
+ "apg": "extension",
512
+ "config": {
513
+ "orientation": "horizontal",
514
+ "direction": "rtl",
515
+ "items": ["File", "Insert", "Format"]
516
+ },
517
+ "steps": [
518
+ { "event": "focus", "target": "menuitem:1" },
519
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:1" },
520
+ { "expect": { "visible": ["menu:1"], "focus": "menuitem:1/0" } },
521
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:1/0" },
522
+ { "expect": { "hidden": ["menu:1"], "focus": "menuitem:1" } },
523
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:1" },
524
+ { "expect": { "focus": "menuitem:2", "hidden": ["menu:2"] } }
525
+ ],
526
+ "notes": "An explicit submenu placement configured by the consumer overrides the RTL mirroring of the menubar."
527
+ },
528
+ {
529
+ "id": "menubar.ariakit.reopen-submenu-and-shift-tab-back-to-parent",
530
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test-browser.ts#L5",
531
+ "upstreamTest": "re-open submenu and shift-tab back to the parent menu",
532
+ "apg": "keyboard",
533
+ "config": { "orientation": "horizontal", "items": ["File", "Edit"] },
534
+ "steps": [
535
+ { "event": "click", "target": "menuitem:0" },
536
+ { "event": "hover", "target": "menuitem:0/2" },
537
+ { "event": "hover", "target": "menuitem:0/2/0" },
538
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:0/2/0" },
539
+ { "expect": { "hidden": ["submenu:1"] } },
540
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0/2" },
541
+ { "expect": { "focus": "menuitem:0/2/1" } },
542
+ { "event": "key", "key": "Shift+Tab", "target": "menuitem:0/2/1" },
543
+ {
544
+ "expect": {
545
+ "visible": ["menu:0", "submenu:1"],
546
+ "focus": "menuitem:0/2"
547
+ }
548
+ },
549
+ { "event": "key", "key": "ArrowDown", "target": "menuitem:0/2" },
550
+ { "expect": { "hidden": ["submenu:1"], "focus": "menuitem:0/3" } }
551
+ ]
552
+ },
553
+ {
554
+ "id": "menubar.ariakit.role-and-orientation-attributes",
555
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-composite-orientation/test-chrome.ts#L4",
556
+ "upstreamTest": "renders role and orientation attributes for composite menubars",
557
+ "apg": "aria",
558
+ "config": { "orientation": "horizontal", "items": ["File", "Edit"] },
559
+ "steps": [
560
+ {
561
+ "expect": {
562
+ "attrs": {
563
+ "menubar": { "role": "menubar", "aria-orientation": "horizontal" }
564
+ }
565
+ }
566
+ }
567
+ ]
568
+ },
569
+ {
570
+ "id": "menubar.ariakit.vertical-menubar-aria-orientation",
571
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-composite-orientation/test-chrome.ts#L13",
572
+ "upstreamTest": "renders role and orientation attributes for composite menubars (vertical)",
573
+ "apg": "aria",
574
+ "config": { "orientation": "vertical", "items": ["File", "Edit"] },
575
+ "steps": [
576
+ {
577
+ "expect": {
578
+ "attrs": {
579
+ "menubar": { "role": "menubar", "aria-orientation": "vertical" }
580
+ }
581
+ }
582
+ }
583
+ ]
584
+ },
585
+ {
586
+ "id": "menubar.ariakit.menubar-omits-aria-orientation-when-not-specified",
587
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-composite-orientation/test-chrome.ts#L19",
588
+ "upstreamTest": "renders role and orientation attributes for composite menubars (both)",
589
+ "apg": "aria",
590
+ "config": { "orientation": "both", "items": ["File", "Edit"] },
591
+ "steps": [
592
+ {
593
+ "expect": {
594
+ "attrs": {
595
+ "menubar": { "role": "menubar", "aria-orientation": null }
596
+ }
597
+ }
598
+ }
599
+ ],
600
+ "notes": "When both orientations are allowed the menubar has no aria-orientation."
601
+ },
602
+ {
603
+ "id": "menubar.ariakit.non-composite-menubar-has-no-role",
604
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-composite-orientation/test-chrome.ts#L24",
605
+ "upstreamTest": "omits menubar role and orientation when composite is false",
606
+ "apg": "extension",
607
+ "config": {
608
+ "orientation": "horizontal",
609
+ "composite": false,
610
+ "items": ["File", "Edit"]
611
+ },
612
+ "steps": [
613
+ {
614
+ "expect": {
615
+ "attrs": { "menubar": { "role": null, "aria-orientation": null } }
616
+ }
617
+ }
618
+ ],
619
+ "notes": "A non-composite menubar is a plain container; items are still reachable but the bar itself carries no menubar role."
620
+ },
621
+ {
622
+ "id": "menubar.ariakit.navigation-hover-shows-menu-without-moving-focus",
623
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-navigation/test-browser.ts#L16",
624
+ "upstreamTest": "show menus by hovering over items without moving focus",
625
+ "apg": "extension",
626
+ "config": {
627
+ "orientation": "horizontal",
628
+ "variant": "navigation",
629
+ "items": ["File", "Edit"]
630
+ },
631
+ "steps": [
632
+ { "event": "hover", "target": "menuitem:0" },
633
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0" } },
634
+ { "event": "hover", "target": "menuitem:2" },
635
+ {
636
+ "expect": {
637
+ "visible": ["menu:2"],
638
+ "hidden": ["menu:0"],
639
+ "focus": "menuitem:0"
640
+ }
641
+ }
642
+ ]
643
+ },
644
+ {
645
+ "id": "menubar.ariakit.navigation-focus-opens-menu",
646
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-navigation/test-browser.ts#L69",
647
+ "upstreamTest": "show menus by focusing on items",
648
+ "apg": "extension",
649
+ "config": {
650
+ "orientation": "horizontal",
651
+ "variant": "navigation",
652
+ "items": ["File", "Edit"]
653
+ },
654
+ "steps": [
655
+ { "event": "focus", "target": "menuitem:0" },
656
+ { "expect": { "visible": ["menu:0"], "focus": "menuitem:0" } }
657
+ ]
658
+ },
659
+ {
660
+ "id": "menubar.ariakit.navigation-tab-moves-between-items-and-opens",
661
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-navigation/test-browser.ts#L85",
662
+ "upstreamTest": "show menus by tabbing through items",
663
+ "apg": "extension",
664
+ "config": {
665
+ "orientation": "horizontal",
666
+ "variant": "navigation",
667
+ "items": ["File", "Edit"]
668
+ },
669
+ "steps": [
670
+ { "event": "focus", "target": "menuitem:0" },
671
+ { "event": "key", "key": "Tab", "target": "menuitem:0" },
672
+ {
673
+ "expect": {
674
+ "focus": "menuitem:1",
675
+ "visible": ["menu:1"],
676
+ "hidden": ["menu:0"]
677
+ }
678
+ }
679
+ ]
680
+ },
681
+ {
682
+ "id": "menubar.ariakit.navigation-arrow-between-items-after-hovering-subitems",
683
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-navigation/test-browser.ts#L136",
684
+ "upstreamTest": "moving between menus with arrow keys after hovering over subitems",
685
+ "apg": "extension",
686
+ "config": {
687
+ "orientation": "horizontal",
688
+ "variant": "navigation",
689
+ "items": ["File", "Edit"]
690
+ },
691
+ "steps": [
692
+ { "event": "hover", "target": "menuitem:0" },
693
+ { "event": "hover", "target": "menuitem:0/0" },
694
+ { "event": "focus", "target": "menuitem:0" },
695
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0" },
696
+ {
697
+ "expect": {
698
+ "focus": "menuitem:1",
699
+ "visible": ["menu:1"],
700
+ "hidden": ["menu:0"]
701
+ }
702
+ }
703
+ ]
704
+ },
705
+ {
706
+ "id": "menubar.ariakit.navigation-menu-item-click-follows-link",
707
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-navigation/test-browser.ts#L148",
708
+ "upstreamTest": "click on menuitem links",
709
+ "apg": "extension",
710
+ "config": {
711
+ "orientation": "horizontal",
712
+ "variant": "navigation",
713
+ "items": ["File", "Edit"]
714
+ },
715
+ "steps": [
716
+ { "event": "hover", "target": "menuitem:0" },
717
+ { "event": "click", "target": "menuitem:0/0" },
718
+ { "expect": { "hidden": ["menu:0"] } }
719
+ ],
720
+ "notes": "Menu items rendered as links navigate; the link target itself is out of scope."
721
+ },
722
+ {
723
+ "id": "menubar.ariakit.aria-expanded-reflects-open-menu",
724
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test.ts#L20",
725
+ "upstreamTest": "arrow keys open and close the menus of a vertical menubar (aria-expanded)",
726
+ "apg": "aria",
727
+ "config": { "orientation": "vertical", "items": ["File", "Edit"] },
728
+ "steps": [
729
+ { "event": "focus", "target": "menuitem:0" },
730
+ {
731
+ "expect": { "attrs": { "menuitem:0": { "aria-expanded": "false" } } }
732
+ },
733
+ { "event": "key", "key": "ArrowRight", "target": "menuitem:0" },
734
+ {
735
+ "expect": { "attrs": { "menuitem:0": { "aria-expanded": "true" } } }
736
+ },
737
+ { "event": "key", "key": "ArrowLeft", "target": "menuitem:0/0" },
738
+ {
739
+ "expect": { "attrs": { "menuitem:0": { "aria-expanded": "false" } } }
740
+ }
741
+ ]
742
+ }
743
+ ],
744
+ "skipped": [
745
+ {
746
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/test.ts#L147",
747
+ "reason": "Caret position inside text inputs is an input-editing concern, not menubar semantics; ariakit #7409."
748
+ },
749
+ {
750
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-7410/test-chrome.ts",
751
+ "reason": "Positioning: menus opening beside a vertical menubar item is popover placement, out of scope."
752
+ },
753
+ {
754
+ "upstream": "https://github.com/ariakit/ariakit/blob/404c72257b879569feb08465da4ff9915fd873da/app/src/sandbox/menubar-interactions/style.css",
755
+ "reason": "Styling and animation are out of scope."
756
+ }
757
+ ]
758
+ }