@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,2444 @@
1
+ {
2
+ "pattern": "combobox",
3
+ "source": "base-ui",
4
+ "commit": "19511bb171f3b360b006c94cf6d07e53cb446505",
5
+ "license": "MIT",
6
+ "scenarios": [
7
+ {
8
+ "id": "combobox.base-ui.keyboard-arrow-down-first-up-last",
9
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3742",
10
+ "upstreamTest": "keyboard interaction > focuses first item on ArrowDown and last item on ArrowUp",
11
+ "apg": "keyboard",
12
+ "config": {
13
+ "items": ["apple", "banana", "cherry"]
14
+ },
15
+ "steps": [
16
+ {
17
+ "event": "focus",
18
+ "target": "input"
19
+ },
20
+ {
21
+ "event": "key",
22
+ "target": "input",
23
+ "key": "ArrowDown"
24
+ },
25
+ {
26
+ "expect": {
27
+ "visible": ["popup", "option:0", "option:1", "option:2"],
28
+ "attrs": {
29
+ "input": {
30
+ "aria-activedescendant": "option:0",
31
+ "aria-expanded": "true"
32
+ }
33
+ }
34
+ }
35
+ },
36
+ {
37
+ "event": "key",
38
+ "target": "input",
39
+ "key": "Escape"
40
+ },
41
+ {
42
+ "expect": {
43
+ "visible": []
44
+ }
45
+ },
46
+ {
47
+ "event": "key",
48
+ "target": "input",
49
+ "key": "ArrowUp"
50
+ },
51
+ {
52
+ "expect": {
53
+ "visible": ["popup", "option:0", "option:1", "option:2"],
54
+ "attrs": {
55
+ "input": {
56
+ "aria-activedescendant": "option:2"
57
+ }
58
+ }
59
+ }
60
+ }
61
+ ],
62
+ "notes": "ArrowDown highlights the first option, ArrowUp the last; the input keeps DOM focus and uses aria-activedescendant."
63
+ },
64
+ {
65
+ "id": "combobox.base-ui.keyboard-open-navigate-enter",
66
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3784",
67
+ "upstreamTest": "keyboard interaction > opens, navigates with ArrowDown, and Enter selects",
68
+ "apg": "keyboard",
69
+ "config": {
70
+ "items": ["apple", "banana", "cherry"]
71
+ },
72
+ "steps": [
73
+ {
74
+ "event": "click",
75
+ "target": "input"
76
+ },
77
+ {
78
+ "expect": {
79
+ "visible": ["popup", "option:0", "option:1", "option:2"]
80
+ }
81
+ },
82
+ {
83
+ "event": "key",
84
+ "target": "input",
85
+ "key": "ArrowDown"
86
+ },
87
+ {
88
+ "expect": {
89
+ "attrs": {
90
+ "input": {
91
+ "aria-activedescendant": "option:0"
92
+ }
93
+ }
94
+ }
95
+ },
96
+ {
97
+ "event": "key",
98
+ "target": "input",
99
+ "key": "Enter"
100
+ },
101
+ {
102
+ "expect": {
103
+ "visible": [],
104
+ "value": "apple"
105
+ }
106
+ }
107
+ ],
108
+ "notes": "Keyboard selection writes the option label into the input and closes the popup."
109
+ },
110
+ {
111
+ "id": "combobox.base-ui.keyboard-enter-manual-indices-filter",
112
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3819",
113
+ "upstreamTest": "keyboard interaction > Enter selects with manual indices provided to items",
114
+ "apg": "keyboard",
115
+ "config": {
116
+ "items": ["apple", "banana", "cherry"]
117
+ },
118
+ "steps": [
119
+ {
120
+ "event": "click",
121
+ "target": "input"
122
+ },
123
+ {
124
+ "event": "type",
125
+ "target": "input",
126
+ "text": "c"
127
+ },
128
+ {
129
+ "expect": {
130
+ "visible": ["popup", "option:0"]
131
+ }
132
+ },
133
+ {
134
+ "event": "key",
135
+ "target": "input",
136
+ "key": "ArrowDown"
137
+ },
138
+ {
139
+ "event": "key",
140
+ "target": "input",
141
+ "key": "Enter"
142
+ },
143
+ {
144
+ "expect": {
145
+ "value": "cherry",
146
+ "visible": []
147
+ }
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "id": "combobox.base-ui.keyboard-list-click-keeps-input-focus",
153
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3857",
154
+ "upstreamTest": "keyboard interaction > clicking on \"listbox\" keeps the focus on the input",
155
+ "apg": "keyboard",
156
+ "config": {
157
+ "items": ["apple", "banana", "cherry"]
158
+ },
159
+ "steps": [
160
+ {
161
+ "event": "click",
162
+ "target": "input"
163
+ },
164
+ {
165
+ "expect": {
166
+ "visible": ["popup"]
167
+ }
168
+ },
169
+ {
170
+ "event": "click",
171
+ "target": "popup"
172
+ },
173
+ {
174
+ "expect": {
175
+ "focus": "input",
176
+ "visible": ["popup"]
177
+ }
178
+ },
179
+ {
180
+ "event": "key",
181
+ "target": "input",
182
+ "key": "ArrowDown"
183
+ },
184
+ {
185
+ "event": "key",
186
+ "target": "input",
187
+ "key": "Enter"
188
+ },
189
+ {
190
+ "expect": {
191
+ "value": "apple"
192
+ }
193
+ }
194
+ ]
195
+ },
196
+ {
197
+ "id": "combobox.base-ui.keyboard-escape-closes-no-commit",
198
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3898",
199
+ "upstreamTest": "keyboard interaction > Escape closes the popup without committing when nothing highlighted",
200
+ "apg": "keyboard",
201
+ "config": {
202
+ "items": ["a", "b"],
203
+ "defaultOpen": true
204
+ },
205
+ "steps": [
206
+ {
207
+ "event": "key",
208
+ "target": "input",
209
+ "key": "Escape"
210
+ },
211
+ {
212
+ "expect": {
213
+ "visible": [],
214
+ "value": ""
215
+ }
216
+ }
217
+ ],
218
+ "notes": "The popup starts open (defaultOpen); Escape leaves the input untouched."
219
+ },
220
+ {
221
+ "id": "combobox.base-ui.keyboard-escape-bubbles-inline",
222
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3923",
223
+ "upstreamTest": "keyboard interaction > bubbles Escape key when rendered inline without Positioner/Popup",
224
+ "apg": "extension",
225
+ "config": {
226
+ "inline": true,
227
+ "defaultOpen": true,
228
+ "items": ["a", "b"]
229
+ },
230
+ "steps": [
231
+ {
232
+ "event": "click",
233
+ "target": "input"
234
+ },
235
+ {
236
+ "expect": {
237
+ "visible": ["popup"]
238
+ }
239
+ },
240
+ {
241
+ "event": "key",
242
+ "target": "input",
243
+ "key": "Escape"
244
+ },
245
+ {
246
+ "expect": {
247
+ "events": {
248
+ "onOuterKeyDown": ["Escape"]
249
+ }
250
+ }
251
+ }
252
+ ],
253
+ "notes": "An inline list has no popup to close, so Escape must reach ancestor keydown handlers."
254
+ },
255
+ {
256
+ "id": "combobox.base-ui.keyboard-enter-inline-keeps-value",
257
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3957",
258
+ "upstreamTest": "keyboard interaction > keeps input value on Enter when inline and no item is highlighted",
259
+ "apg": "extension",
260
+ "config": {
261
+ "inline": true,
262
+ "items": ["Apple", "Banana"]
263
+ },
264
+ "steps": [
265
+ {
266
+ "event": "click",
267
+ "target": "input"
268
+ },
269
+ {
270
+ "event": "type",
271
+ "target": "input",
272
+ "text": "Ba"
273
+ },
274
+ {
275
+ "expect": {
276
+ "attrs": {
277
+ "input": {
278
+ "aria-activedescendant": null
279
+ }
280
+ },
281
+ "value": "Ba"
282
+ }
283
+ },
284
+ {
285
+ "event": "key",
286
+ "target": "input",
287
+ "key": "Enter"
288
+ },
289
+ {
290
+ "expect": {
291
+ "value": "Ba"
292
+ }
293
+ }
294
+ ],
295
+ "notes": "With no highlighted item Enter must not clear or commit the typed text."
296
+ },
297
+ {
298
+ "id": "combobox.base-ui.keyboard-escape-bubbles-empty-css-hidden",
299
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3984",
300
+ "upstreamTest": "keyboard interaction > bubbles Escape key when list is empty and popup hidden with CSS",
301
+ "apg": "extension",
302
+ "config": {
303
+ "items": [],
304
+ "popupHiddenByCss": true,
305
+ "defaultOpen": true
306
+ },
307
+ "steps": [
308
+ {
309
+ "event": "click",
310
+ "target": "input"
311
+ },
312
+ {
313
+ "event": "key",
314
+ "target": "input",
315
+ "key": "Escape"
316
+ },
317
+ {
318
+ "expect": {
319
+ "events": {
320
+ "onOuterKeyDown": ["Escape"]
321
+ }
322
+ }
323
+ }
324
+ ],
325
+ "notes": "A list that is empty and CSS-hidden is treated as closed; Escape propagates."
326
+ },
327
+ {
328
+ "id": "combobox.base-ui.keyboard-escape-not-bubbled-with-empty-part",
329
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4024",
330
+ "upstreamTest": "keyboard interaction > does not bubble Escape key when Empty component is present",
331
+ "apg": "extension",
332
+ "config": {
333
+ "items": [],
334
+ "hasEmptyPart": true,
335
+ "defaultOpen": true
336
+ },
337
+ "steps": [
338
+ {
339
+ "event": "click",
340
+ "target": "input"
341
+ },
342
+ {
343
+ "event": "key",
344
+ "target": "input",
345
+ "key": "Escape"
346
+ },
347
+ {
348
+ "expect": {
349
+ "events": {
350
+ "onOuterKeyDown": []
351
+ }
352
+ }
353
+ }
354
+ ],
355
+ "notes": "A rendered empty state keeps the popup logically open, so Escape is consumed."
356
+ },
357
+ {
358
+ "id": "combobox.base-ui.keyboard-tab-closes-popup",
359
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L964",
360
+ "upstreamTest": "interaction behavior > closes the popup when tabbing out",
361
+ "apg": "keyboard",
362
+ "config": {
363
+ "items": ["apple", "banana"]
364
+ },
365
+ "steps": [
366
+ {
367
+ "event": "click",
368
+ "target": "input"
369
+ },
370
+ {
371
+ "expect": {
372
+ "visible": ["popup"]
373
+ }
374
+ },
375
+ {
376
+ "event": "key",
377
+ "target": "input",
378
+ "key": "Tab"
379
+ },
380
+ {
381
+ "expect": {
382
+ "visible": [],
383
+ "focus": "next-button"
384
+ }
385
+ }
386
+ ],
387
+ "notes": "Tabbing away closes the popup and moves focus to the next focusable element."
388
+ },
389
+ {
390
+ "id": "combobox.base-ui.aria-input-closed",
391
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4067",
392
+ "upstreamTest": "aria attributes > sets all aria attributes on the input when closed",
393
+ "apg": "aria",
394
+ "config": {
395
+ "items": []
396
+ },
397
+ "steps": [
398
+ {
399
+ "expect": {
400
+ "attrs": {
401
+ "input": {
402
+ "role": "combobox",
403
+ "aria-expanded": "false",
404
+ "aria-autocomplete": "list",
405
+ "aria-haspopup": "listbox",
406
+ "aria-controls": null,
407
+ "aria-activedescendant": null
408
+ }
409
+ }
410
+ }
411
+ }
412
+ ],
413
+ "notes": "The editable input is the combobox; controls/activedescendant appear only while open."
414
+ },
415
+ {
416
+ "id": "combobox.base-ui.aria-input-open",
417
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4087",
418
+ "upstreamTest": "aria attributes > sets all aria attributes on the input when open",
419
+ "apg": "aria",
420
+ "config": {
421
+ "defaultOpen": true,
422
+ "items": []
423
+ },
424
+ "steps": [
425
+ {
426
+ "expect": {
427
+ "visible": ["popup"],
428
+ "attrs": {
429
+ "input": {
430
+ "role": "combobox",
431
+ "aria-expanded": "true",
432
+ "aria-autocomplete": "list",
433
+ "aria-haspopup": "listbox",
434
+ "aria-controls": "popup",
435
+ "aria-activedescendant": null
436
+ }
437
+ }
438
+ }
439
+ }
440
+ ],
441
+ "notes": "aria-controls points at the listbox popup; the highlight is still absent before navigation."
442
+ },
443
+ {
444
+ "id": "combobox.base-ui.aria-inline-open-expanded",
445
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4112",
446
+ "upstreamTest": "aria attributes > sets aria-expanded on the input when rendered inline and open",
447
+ "apg": "aria",
448
+ "config": {
449
+ "inline": true,
450
+ "open": true
451
+ },
452
+ "steps": [
453
+ {
454
+ "expect": {
455
+ "attrs": {
456
+ "input": {
457
+ "role": "combobox",
458
+ "aria-expanded": "true",
459
+ "aria-controls": "popup"
460
+ }
461
+ }
462
+ }
463
+ }
464
+ ]
465
+ },
466
+ {
467
+ "id": "combobox.base-ui.aria-inline-grid-popup-type",
468
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4128",
469
+ "upstreamTest": "aria attributes > sets the popup type on the input when rendered inline as a grid",
470
+ "apg": "aria",
471
+ "config": {
472
+ "inline": true,
473
+ "open": true,
474
+ "grid": true
475
+ },
476
+ "steps": [
477
+ {
478
+ "expect": {
479
+ "attrs": {
480
+ "input": {
481
+ "aria-expanded": "true",
482
+ "aria-haspopup": "grid",
483
+ "aria-controls": "popup"
484
+ },
485
+ "popup": {
486
+ "role": "grid"
487
+ }
488
+ }
489
+ }
490
+ }
491
+ ]
492
+ },
493
+ {
494
+ "id": "combobox.base-ui.aria-inline-without-open-expanded",
495
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4144",
496
+ "upstreamTest": "aria attributes > keeps the input expanded when rendered inline without the open prop",
497
+ "apg": "aria",
498
+ "config": {
499
+ "inline": true,
500
+ "items": ["apple", "banana"]
501
+ },
502
+ "steps": [
503
+ {
504
+ "expect": {
505
+ "attrs": {
506
+ "input": {
507
+ "aria-expanded": "true",
508
+ "aria-controls": "popup"
509
+ }
510
+ }
511
+ }
512
+ },
513
+ {
514
+ "event": "click",
515
+ "target": "input"
516
+ },
517
+ {
518
+ "expect": {
519
+ "attrs": {
520
+ "input": {
521
+ "aria-expanded": "true",
522
+ "aria-controls": "popup"
523
+ }
524
+ }
525
+ }
526
+ }
527
+ ],
528
+ "notes": "An inline list renders regardless of internal open state, so the input must not claim to be collapsed."
529
+ },
530
+ {
531
+ "id": "combobox.base-ui.aria-item-highlighted-attributes",
532
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4172",
533
+ "upstreamTest": "aria attributes > sets correct attributes on the item when highlighted",
534
+ "apg": "aria",
535
+ "config": {
536
+ "defaultOpen": true,
537
+ "items": ["a", "b"]
538
+ },
539
+ "steps": [
540
+ {
541
+ "event": "click",
542
+ "target": "input"
543
+ },
544
+ {
545
+ "expect": {
546
+ "attrs": {
547
+ "input": {
548
+ "aria-activedescendant": null
549
+ }
550
+ }
551
+ }
552
+ },
553
+ {
554
+ "event": "key",
555
+ "target": "input",
556
+ "key": "ArrowDown"
557
+ },
558
+ {
559
+ "expect": {
560
+ "attrs": {
561
+ "option:0": {
562
+ "aria-selected": "false"
563
+ },
564
+ "option:1": {
565
+ "aria-selected": "false"
566
+ },
567
+ "input": {
568
+ "aria-activedescendant": "option:0"
569
+ }
570
+ }
571
+ }
572
+ },
573
+ {
574
+ "event": "key",
575
+ "target": "input",
576
+ "key": "Enter"
577
+ },
578
+ {
579
+ "event": "click",
580
+ "target": "input"
581
+ },
582
+ {
583
+ "expect": {
584
+ "attrs": {
585
+ "option:0": {
586
+ "aria-selected": "true"
587
+ },
588
+ "option:1": {
589
+ "aria-selected": "false"
590
+ }
591
+ }
592
+ }
593
+ }
594
+ ],
595
+ "notes": "aria-selected tracks the committed value; aria-activedescendant tracks the highlight."
596
+ },
597
+ {
598
+ "id": "combobox.base-ui.select-only.trigger-controls-dialog",
599
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4215",
600
+ "upstreamTest": "aria attributes > sets aria-controls to the dialog popup on trigger",
601
+ "apg": "aria",
602
+ "config": {
603
+ "variant": "select-only",
604
+ "inputInPopup": true,
605
+ "defaultOpen": true
606
+ },
607
+ "steps": [
608
+ {
609
+ "expect": {
610
+ "visible": ["popup"],
611
+ "attrs": {
612
+ "trigger": {
613
+ "role": "combobox",
614
+ "aria-expanded": "true",
615
+ "aria-controls": "popup"
616
+ },
617
+ "popup": {
618
+ "role": "dialog"
619
+ }
620
+ }
621
+ }
622
+ },
623
+ {
624
+ "event": "click",
625
+ "target": "trigger"
626
+ },
627
+ {
628
+ "expect": {
629
+ "attrs": {
630
+ "trigger": {
631
+ "aria-expanded": "false",
632
+ "aria-controls": null
633
+ }
634
+ }
635
+ }
636
+ }
637
+ ],
638
+ "notes": "When the input lives inside the popup, the trigger is the combobox and controls the dialog."
639
+ },
640
+ {
641
+ "id": "combobox.base-ui.select-only.trigger-custom-popup-id",
642
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4247",
643
+ "upstreamTest": "aria attributes > points aria-controls at a custom popup id on the trigger",
644
+ "apg": "aria",
645
+ "config": {
646
+ "variant": "select-only",
647
+ "inputInPopup": true,
648
+ "defaultOpen": true,
649
+ "popupId": "custom-popup-id"
650
+ },
651
+ "steps": [
652
+ {
653
+ "expect": {
654
+ "attrs": {
655
+ "trigger": {
656
+ "aria-controls": "custom-popup-id"
657
+ },
658
+ "popup": {
659
+ "id": "custom-popup-id"
660
+ }
661
+ }
662
+ }
663
+ }
664
+ ],
665
+ "notes": "A caller-supplied popup id flows through to aria-controls."
666
+ },
667
+ {
668
+ "id": "combobox.base-ui.aria-popup-role-presentation",
669
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L39",
670
+ "upstreamTest": "sets role to presentation when input renders outside the popup",
671
+ "apg": "aria",
672
+ "config": {
673
+ "defaultOpen": true,
674
+ "items": ["Apple"]
675
+ },
676
+ "steps": [
677
+ {
678
+ "expect": {
679
+ "visible": ["popup"],
680
+ "attrs": {
681
+ "popup": {
682
+ "role": "presentation"
683
+ }
684
+ }
685
+ }
686
+ }
687
+ ],
688
+ "notes": "The plain popup wrapper is presentational; the listbox carries the semantics."
689
+ },
690
+ {
691
+ "id": "combobox.base-ui.select-only.popup-role-dialog",
692
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L57",
693
+ "upstreamTest": "sets role to dialog when input renders inside the popup",
694
+ "apg": "aria",
695
+ "config": {
696
+ "variant": "select-only",
697
+ "inputInPopup": true,
698
+ "defaultOpen": true,
699
+ "items": ["Apple"]
700
+ },
701
+ "steps": [
702
+ {
703
+ "expect": {
704
+ "visible": ["popup"],
705
+ "attrs": {
706
+ "popup": {
707
+ "role": "dialog"
708
+ }
709
+ }
710
+ }
711
+ }
712
+ ]
713
+ },
714
+ {
715
+ "id": "combobox.base-ui.aria-listbox-multiselectable",
716
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/list/ComboboxList.test.tsx#L17",
717
+ "upstreamTest": "sets role=listbox and aria-multiselectable in multiple mode",
718
+ "apg": "aria",
719
+ "config": {
720
+ "multiple": true,
721
+ "defaultOpen": true,
722
+ "items": ["a"]
723
+ },
724
+ "steps": [
725
+ {
726
+ "expect": {
727
+ "visible": ["popup"],
728
+ "attrs": {
729
+ "popup": {
730
+ "role": "listbox",
731
+ "aria-multiselectable": "true"
732
+ }
733
+ }
734
+ }
735
+ }
736
+ ]
737
+ },
738
+ {
739
+ "id": "combobox.base-ui.aria-listbox-readonly",
740
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/list/ComboboxList.test.tsx#L36",
741
+ "upstreamTest": "sets aria-readonly on the listbox when the root is readOnly",
742
+ "apg": "aria",
743
+ "config": {
744
+ "readOnly": true,
745
+ "defaultOpen": true,
746
+ "items": ["a"]
747
+ },
748
+ "steps": [
749
+ {
750
+ "expect": {
751
+ "visible": ["popup"],
752
+ "attrs": {
753
+ "popup": {
754
+ "role": "listbox",
755
+ "aria-readonly": "true"
756
+ }
757
+ }
758
+ }
759
+ }
760
+ ]
761
+ },
762
+ {
763
+ "id": "combobox.base-ui.aria-listbox-no-readonly-default",
764
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/list/ComboboxList.test.tsx#L77",
765
+ "upstreamTest": "does not set aria-readonly on the listbox by default",
766
+ "apg": "aria",
767
+ "config": {
768
+ "defaultOpen": true,
769
+ "items": ["a"]
770
+ },
771
+ "steps": [
772
+ {
773
+ "expect": {
774
+ "visible": ["popup"],
775
+ "attrs": {
776
+ "popup": {
777
+ "aria-readonly": null
778
+ }
779
+ }
780
+ }
781
+ }
782
+ ]
783
+ },
784
+ {
785
+ "id": "combobox.base-ui.keyboard-list-enter-selects-highlighted",
786
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/list/ComboboxList.test.tsx#L135",
787
+ "upstreamTest": "selects the highlighted item with Enter",
788
+ "apg": "keyboard",
789
+ "config": {
790
+ "defaultOpen": true,
791
+ "items": ["a"]
792
+ },
793
+ "steps": [
794
+ {
795
+ "event": "click",
796
+ "target": "input"
797
+ },
798
+ {
799
+ "event": "key",
800
+ "target": "input",
801
+ "key": "ArrowDown"
802
+ },
803
+ {
804
+ "expect": {
805
+ "attrs": {
806
+ "input": {
807
+ "aria-activedescendant": "option:0"
808
+ }
809
+ }
810
+ }
811
+ },
812
+ {
813
+ "event": "key",
814
+ "target": "input",
815
+ "key": "Enter"
816
+ },
817
+ {
818
+ "expect": {
819
+ "events": {
820
+ "onValueChange": ["a"]
821
+ }
822
+ }
823
+ }
824
+ ],
825
+ "notes": "The list handles Enter once an item is highlighted."
826
+ },
827
+ {
828
+ "id": "combobox.base-ui.keyboard-list-enter-ignored-when-readonly",
829
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/list/ComboboxList.test.tsx#L162",
830
+ "upstreamTest": "ignores Enter when interaction is disabled: readOnly",
831
+ "apg": "keyboard",
832
+ "config": {
833
+ "readOnly": true,
834
+ "defaultOpen": true,
835
+ "items": ["a"]
836
+ },
837
+ "steps": [
838
+ {
839
+ "event": "key",
840
+ "target": "input",
841
+ "key": "Enter"
842
+ },
843
+ {
844
+ "expect": {
845
+ "events": {
846
+ "onValueChange": []
847
+ }
848
+ }
849
+ }
850
+ ],
851
+ "notes": "readOnly and disabled both suppress the list's Enter handling."
852
+ },
853
+ {
854
+ "id": "combobox.base-ui.pointer-open-change-reason-item-press",
855
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1228",
856
+ "upstreamTest": "selection behavior > single > fires onOpenChange once with reason item-press on mouse click",
857
+ "apg": "pointer",
858
+ "config": {
859
+ "items": ["apple", "banana"]
860
+ },
861
+ "steps": [
862
+ {
863
+ "event": "click",
864
+ "target": "input"
865
+ },
866
+ {
867
+ "expect": {
868
+ "visible": ["popup"]
869
+ }
870
+ },
871
+ {
872
+ "event": "click",
873
+ "target": "option:0"
874
+ },
875
+ {
876
+ "expect": {
877
+ "visible": [],
878
+ "events": {
879
+ "onOpenChange": [false]
880
+ }
881
+ }
882
+ }
883
+ ],
884
+ "notes": "The change reason is item-press with the originating MouseEvent."
885
+ },
886
+ {
887
+ "id": "combobox.base-ui.keyboard-enter-open-change-reason",
888
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1268",
889
+ "upstreamTest": "selection behavior > single > fires onOpenChange once with reason item-press on Enter selection",
890
+ "apg": "keyboard",
891
+ "config": {
892
+ "items": ["apple", "banana"]
893
+ },
894
+ "steps": [
895
+ {
896
+ "event": "click",
897
+ "target": "input"
898
+ },
899
+ {
900
+ "expect": {
901
+ "visible": ["popup"]
902
+ }
903
+ },
904
+ {
905
+ "event": "key",
906
+ "target": "input",
907
+ "key": "ArrowDown"
908
+ },
909
+ {
910
+ "event": "key",
911
+ "target": "input",
912
+ "key": "Enter"
913
+ },
914
+ {
915
+ "expect": {
916
+ "visible": [],
917
+ "events": {
918
+ "onOpenChange": [false]
919
+ }
920
+ }
921
+ }
922
+ ],
923
+ "notes": "The same item-press reason is reported for keyboard selection."
924
+ },
925
+ {
926
+ "id": "combobox.base-ui.pointer-auto-close-uncontrolled",
927
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1309",
928
+ "upstreamTest": "selection behavior > single > should auto-close popup after selection when open state is uncontrolled",
929
+ "apg": "pointer",
930
+ "config": {
931
+ "items": ["apple", "banana", "cherry"]
932
+ },
933
+ "steps": [
934
+ {
935
+ "event": "click",
936
+ "target": "trigger"
937
+ },
938
+ {
939
+ "expect": {
940
+ "visible": ["popup"],
941
+ "attrs": {
942
+ "input": {
943
+ "aria-expanded": "true"
944
+ }
945
+ }
946
+ }
947
+ },
948
+ {
949
+ "event": "click",
950
+ "target": "option:0"
951
+ },
952
+ {
953
+ "expect": {
954
+ "visible": [],
955
+ "attrs": {
956
+ "input": {
957
+ "aria-expanded": "false"
958
+ }
959
+ }
960
+ }
961
+ }
962
+ ],
963
+ "notes": "An uncontrolled open state closes on selection."
964
+ },
965
+ {
966
+ "id": "combobox.base-ui.extension-no-auto-close-controlled",
967
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1365",
968
+ "upstreamTest": "selection behavior > single > should not auto-close popup when open state is controlled",
969
+ "apg": "extension",
970
+ "config": {
971
+ "items": ["apple", "banana", "cherry"],
972
+ "open": true
973
+ },
974
+ "steps": [
975
+ {
976
+ "event": "click",
977
+ "target": "option:0"
978
+ },
979
+ {
980
+ "expect": {
981
+ "visible": ["popup"]
982
+ }
983
+ }
984
+ ],
985
+ "notes": "A controlled open prop keeps the popup open after selection."
986
+ },
987
+ {
988
+ "id": "combobox.base-ui.aria-show-all-items-empty-query",
989
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1392",
990
+ "upstreamTest": "selection behavior > single > should show all items when query is empty with enhanced filter",
991
+ "apg": "aria",
992
+ "config": {
993
+ "items": ["apple", "banana", "cherry"],
994
+ "defaultOpen": true
995
+ },
996
+ "steps": [
997
+ {
998
+ "expect": {
999
+ "visible": ["popup", "option:0", "option:1", "option:2"]
1000
+ }
1001
+ }
1002
+ ],
1003
+ "notes": "The default enhanced filter shows every item for an empty query."
1004
+ },
1005
+ {
1006
+ "id": "combobox.base-ui.aria-query-matches-selection-shows-all",
1007
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1419",
1008
+ "upstreamTest": "selection behavior > single > should show all items when query matches current selection",
1009
+ "apg": "aria",
1010
+ "config": {
1011
+ "items": ["apple", "banana", "cherry"],
1012
+ "defaultValue": "apple"
1013
+ },
1014
+ "steps": [
1015
+ {
1016
+ "event": "click",
1017
+ "target": "trigger"
1018
+ },
1019
+ {
1020
+ "expect": {
1021
+ "visible": ["popup", "option:0", "option:1", "option:2"]
1022
+ }
1023
+ },
1024
+ {
1025
+ "event": "click",
1026
+ "target": "option:0"
1027
+ },
1028
+ {
1029
+ "expect": {
1030
+ "value": "apple",
1031
+ "visible": []
1032
+ }
1033
+ },
1034
+ {
1035
+ "event": "click",
1036
+ "target": "trigger"
1037
+ },
1038
+ {
1039
+ "expect": {
1040
+ "visible": ["popup", "option:0", "option:1", "option:2"]
1041
+ }
1042
+ }
1043
+ ],
1044
+ "notes": "Reopening with the selection as the query must not filter the list down to the selection only."
1045
+ },
1046
+ {
1047
+ "id": "combobox.base-ui.extension-reset-input-on-close-without-selection",
1048
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L1459",
1049
+ "upstreamTest": "selection behavior > single > should reset input value to selected value when popup closes without selection",
1050
+ "apg": "extension",
1051
+ "config": {
1052
+ "items": ["apple", "banana", "cherry"],
1053
+ "defaultValue": "apple"
1054
+ },
1055
+ "steps": [
1056
+ {
1057
+ "event": "click",
1058
+ "target": "trigger"
1059
+ },
1060
+ {
1061
+ "event": "click",
1062
+ "target": "option:0"
1063
+ },
1064
+ {
1065
+ "expect": {
1066
+ "value": "apple",
1067
+ "visible": []
1068
+ }
1069
+ },
1070
+ {
1071
+ "event": "click",
1072
+ "target": "trigger"
1073
+ },
1074
+ {
1075
+ "event": "type",
1076
+ "target": "input",
1077
+ "text": "xyz"
1078
+ },
1079
+ {
1080
+ "expect": {
1081
+ "value": "applexyz"
1082
+ }
1083
+ },
1084
+ {
1085
+ "event": "click",
1086
+ "target": "body"
1087
+ },
1088
+ {
1089
+ "expect": {
1090
+ "value": "apple",
1091
+ "events": {
1092
+ "onInputValueChange": ["apple"]
1093
+ }
1094
+ }
1095
+ }
1096
+ ],
1097
+ "notes": "Closing without committing reverts the input to the selected label; the reset reports reason 'none'."
1098
+ },
1099
+ {
1100
+ "id": "combobox.base-ui.multiple-selection-value-change",
1101
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L2830",
1102
+ "upstreamTest": "selection behavior > multiple > should handle multiple selection",
1103
+ "apg": "pointer",
1104
+ "config": {
1105
+ "multiple": true,
1106
+ "items": ["a", "b", "c"]
1107
+ },
1108
+ "steps": [
1109
+ {
1110
+ "event": "click",
1111
+ "target": "option:0"
1112
+ },
1113
+ {
1114
+ "expect": {
1115
+ "events": {
1116
+ "onValueChange": [["a"]]
1117
+ }
1118
+ }
1119
+ },
1120
+ {
1121
+ "event": "click",
1122
+ "target": "option:1"
1123
+ },
1124
+ {
1125
+ "expect": {
1126
+ "events": {
1127
+ "onValueChange": [["a"], ["a", "b"]]
1128
+ }
1129
+ }
1130
+ }
1131
+ ],
1132
+ "notes": "Each click toggles membership and reports the accumulated value array."
1133
+ },
1134
+ {
1135
+ "id": "combobox.base-ui.multiple-single-select-close-reopen-focused",
1136
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L7118",
1137
+ "upstreamTest": "prop multiple > \"single\" selects and closes, then reopens with selection focused",
1138
+ "apg": "pointer",
1139
+ "config": {
1140
+ "defaultOpen": true,
1141
+ "items": ["a", "b", "c"]
1142
+ },
1143
+ "steps": [
1144
+ {
1145
+ "event": "click",
1146
+ "target": "option:1"
1147
+ },
1148
+ {
1149
+ "expect": {
1150
+ "visible": [],
1151
+ "value": "b"
1152
+ }
1153
+ },
1154
+ {
1155
+ "event": "click",
1156
+ "target": "input"
1157
+ },
1158
+ {
1159
+ "expect": {
1160
+ "visible": ["popup"],
1161
+ "attrs": {
1162
+ "option:1": {
1163
+ "aria-selected": "true"
1164
+ }
1165
+ }
1166
+ }
1167
+ }
1168
+ ],
1169
+ "notes": "Reopening restores aria-selected on the committed option."
1170
+ },
1171
+ {
1172
+ "id": "combobox.base-ui.extension-single-canceled-keeps-open",
1173
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L7146",
1174
+ "upstreamTest": "prop multiple > \"single\" keeps the popup open when selection is canceled",
1175
+ "apg": "extension",
1176
+ "config": {
1177
+ "defaultOpen": true,
1178
+ "items": ["a", "b"],
1179
+ "cancelValueChange": true
1180
+ },
1181
+ "steps": [
1182
+ {
1183
+ "event": "click",
1184
+ "target": "option:1"
1185
+ },
1186
+ {
1187
+ "expect": {
1188
+ "visible": ["popup"],
1189
+ "events": {
1190
+ "onValueChange": ["b"]
1191
+ }
1192
+ }
1193
+ }
1194
+ ],
1195
+ "notes": "A canceled onValueChange leaves the value uncommitted and the popup open."
1196
+ },
1197
+ {
1198
+ "id": "combobox.base-ui.multiple-clears-input-after-select",
1199
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L7175",
1200
+ "upstreamTest": "prop multiple > \"multiple\" clears uncontrolled input after select when filtering",
1201
+ "apg": "keyboard",
1202
+ "config": {
1203
+ "multiple": true,
1204
+ "items": ["apple", "banana"]
1205
+ },
1206
+ "steps": [
1207
+ {
1208
+ "event": "type",
1209
+ "target": "input",
1210
+ "text": "app"
1211
+ },
1212
+ {
1213
+ "expect": {
1214
+ "visible": ["popup", "option:0"]
1215
+ }
1216
+ },
1217
+ {
1218
+ "event": "click",
1219
+ "target": "option:0"
1220
+ },
1221
+ {
1222
+ "expect": {
1223
+ "value": ""
1224
+ }
1225
+ }
1226
+ ],
1227
+ "notes": "In multiple mode the filter query is cleared after committing."
1228
+ },
1229
+ {
1230
+ "id": "combobox.base-ui.pointer-item-selects-and-closes",
1231
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L18",
1232
+ "upstreamTest": "selects item and closes in single mode",
1233
+ "apg": "pointer",
1234
+ "config": {
1235
+ "defaultOpen": true,
1236
+ "items": ["one", "two"]
1237
+ },
1238
+ "steps": [
1239
+ {
1240
+ "event": "click",
1241
+ "target": "option:1"
1242
+ },
1243
+ {
1244
+ "expect": {
1245
+ "value": "two",
1246
+ "visible": []
1247
+ }
1248
+ }
1249
+ ]
1250
+ },
1251
+ {
1252
+ "id": "combobox.base-ui.pointer-disabled-item-not-selected",
1253
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L136",
1254
+ "upstreamTest": "does not select disabled item",
1255
+ "apg": "pointer",
1256
+ "config": {
1257
+ "defaultOpen": true,
1258
+ "items": ["one", "two"],
1259
+ "disabledItems": [1]
1260
+ },
1261
+ "steps": [
1262
+ {
1263
+ "event": "click",
1264
+ "target": "option:1"
1265
+ },
1266
+ {
1267
+ "expect": {
1268
+ "value": "",
1269
+ "visible": ["popup"]
1270
+ }
1271
+ }
1272
+ ],
1273
+ "notes": "A disabled option is ignored by pointer selection."
1274
+ },
1275
+ {
1276
+ "id": "combobox.base-ui.keyboard-item-enter-selects-highlighted",
1277
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L192",
1278
+ "upstreamTest": "Enter selects highlighted item",
1279
+ "apg": "keyboard",
1280
+ "config": {
1281
+ "items": ["one", "two"]
1282
+ },
1283
+ "steps": [
1284
+ {
1285
+ "event": "click",
1286
+ "target": "input"
1287
+ },
1288
+ {
1289
+ "expect": {
1290
+ "visible": ["popup"]
1291
+ }
1292
+ },
1293
+ {
1294
+ "event": "key",
1295
+ "target": "input",
1296
+ "key": "ArrowDown"
1297
+ },
1298
+ {
1299
+ "event": "key",
1300
+ "target": "input",
1301
+ "key": "Enter"
1302
+ },
1303
+ {
1304
+ "expect": {
1305
+ "value": "one",
1306
+ "visible": []
1307
+ }
1308
+ }
1309
+ ]
1310
+ },
1311
+ {
1312
+ "id": "combobox.base-ui.pointer-item-multiple-toggles-stays-open",
1313
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L280",
1314
+ "upstreamTest": "multiple mode toggles selection and stays open",
1315
+ "apg": "pointer",
1316
+ "config": {
1317
+ "multiple": true,
1318
+ "items": ["a", "b"]
1319
+ },
1320
+ "steps": [
1321
+ {
1322
+ "event": "click",
1323
+ "target": "input"
1324
+ },
1325
+ {
1326
+ "expect": {
1327
+ "visible": ["popup"]
1328
+ }
1329
+ },
1330
+ {
1331
+ "event": "click",
1332
+ "target": "option:0"
1333
+ },
1334
+ {
1335
+ "expect": {
1336
+ "visible": ["popup"],
1337
+ "attrs": {
1338
+ "option:0": {
1339
+ "aria-selected": "true"
1340
+ }
1341
+ }
1342
+ }
1343
+ },
1344
+ {
1345
+ "event": "click",
1346
+ "target": "option:0"
1347
+ },
1348
+ {
1349
+ "expect": {
1350
+ "visible": ["popup"],
1351
+ "attrs": {
1352
+ "option:0": {
1353
+ "aria-selected": null
1354
+ }
1355
+ }
1356
+ }
1357
+ }
1358
+ ]
1359
+ },
1360
+ {
1361
+ "id": "combobox.base-ui.aria-item-selected-on-reopen",
1362
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L312",
1363
+ "upstreamTest": "reflects selected value with aria-selected when reopening",
1364
+ "apg": "aria",
1365
+ "config": {
1366
+ "defaultValue": "two",
1367
+ "items": ["one", "two"]
1368
+ },
1369
+ "steps": [
1370
+ {
1371
+ "event": "click",
1372
+ "target": "input"
1373
+ },
1374
+ {
1375
+ "expect": {
1376
+ "visible": ["popup"],
1377
+ "attrs": {
1378
+ "option:1": {
1379
+ "aria-selected": "true"
1380
+ }
1381
+ }
1382
+ }
1383
+ }
1384
+ ]
1385
+ },
1386
+ {
1387
+ "id": "combobox.base-ui.pointer-item-mousedown-prevented",
1388
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L251",
1389
+ "upstreamTest": "prevents default on mousedown so pointer selection does not steal input focus",
1390
+ "apg": "pointer",
1391
+ "config": {
1392
+ "defaultOpen": true,
1393
+ "items": ["one", "two"]
1394
+ },
1395
+ "steps": [
1396
+ {
1397
+ "event": "pointerdown",
1398
+ "target": "option:1"
1399
+ },
1400
+ {
1401
+ "expect": {
1402
+ "events": {
1403
+ "onMousedownDefaultPrevented": [true]
1404
+ }
1405
+ }
1406
+ }
1407
+ ],
1408
+ "notes": "Item mousedown is canceled so the input keeps focus during pointer selection."
1409
+ },
1410
+ {
1411
+ "id": "combobox.base-ui.aria-readonly-input",
1412
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5237",
1413
+ "upstreamTest": "prop readOnly > should render readOnly state on the input",
1414
+ "apg": "aria",
1415
+ "config": {
1416
+ "readOnly": true
1417
+ },
1418
+ "steps": [
1419
+ {
1420
+ "expect": {
1421
+ "attrs": {
1422
+ "input": {
1423
+ "aria-readonly": "true",
1424
+ "readonly": "true"
1425
+ }
1426
+ }
1427
+ }
1428
+ }
1429
+ ]
1430
+ },
1431
+ {
1432
+ "id": "combobox.base-ui.aria-readonly-autocomplete-none",
1433
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5250",
1434
+ "upstreamTest": "prop readOnly > should expose aria-autocomplete=\"none\" when readOnly",
1435
+ "apg": "aria",
1436
+ "config": {
1437
+ "readOnly": true
1438
+ },
1439
+ "steps": [
1440
+ {
1441
+ "expect": {
1442
+ "attrs": {
1443
+ "input": {
1444
+ "aria-autocomplete": "none"
1445
+ }
1446
+ }
1447
+ }
1448
+ }
1449
+ ]
1450
+ },
1451
+ {
1452
+ "id": "combobox.base-ui.select-only.readonly-opens-from-input-and-trigger",
1453
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5260",
1454
+ "upstreamTest": "prop readOnly > should open the popup from the input and the trigger when readOnly",
1455
+ "apg": "keyboard",
1456
+ "config": {
1457
+ "variant": "select-only",
1458
+ "inputInPopup": true,
1459
+ "readOnly": true,
1460
+ "items": ["a", "b"]
1461
+ },
1462
+ "steps": [
1463
+ {
1464
+ "event": "click",
1465
+ "target": "input"
1466
+ },
1467
+ {
1468
+ "expect": {
1469
+ "visible": ["popup"],
1470
+ "attrs": {
1471
+ "popup": {
1472
+ "aria-readonly": "true"
1473
+ }
1474
+ }
1475
+ }
1476
+ },
1477
+ {
1478
+ "event": "key",
1479
+ "target": "input",
1480
+ "key": "Escape"
1481
+ },
1482
+ {
1483
+ "expect": {
1484
+ "visible": []
1485
+ }
1486
+ },
1487
+ {
1488
+ "event": "click",
1489
+ "target": "trigger"
1490
+ },
1491
+ {
1492
+ "expect": {
1493
+ "visible": ["popup"]
1494
+ }
1495
+ }
1496
+ ],
1497
+ "notes": "readOnly still allows browsing the list."
1498
+ },
1499
+ {
1500
+ "id": "combobox.base-ui.keyboard-readonly-arrow-browses",
1501
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5290",
1502
+ "upstreamTest": "prop readOnly > should browse the items with the arrow keys when readOnly",
1503
+ "apg": "keyboard",
1504
+ "config": {
1505
+ "readOnly": true,
1506
+ "items": ["a", "b"]
1507
+ },
1508
+ "steps": [
1509
+ {
1510
+ "event": "click",
1511
+ "target": "input"
1512
+ },
1513
+ {
1514
+ "expect": {
1515
+ "visible": ["popup"]
1516
+ }
1517
+ },
1518
+ {
1519
+ "event": "key",
1520
+ "target": "input",
1521
+ "key": "ArrowDown"
1522
+ },
1523
+ {
1524
+ "expect": {
1525
+ "attrs": {
1526
+ "input": {
1527
+ "aria-activedescendant": "option:0"
1528
+ }
1529
+ }
1530
+ }
1531
+ },
1532
+ {
1533
+ "event": "key",
1534
+ "target": "input",
1535
+ "key": "ArrowDown"
1536
+ },
1537
+ {
1538
+ "expect": {
1539
+ "attrs": {
1540
+ "input": {
1541
+ "aria-activedescendant": "option:1"
1542
+ }
1543
+ }
1544
+ }
1545
+ }
1546
+ ]
1547
+ },
1548
+ {
1549
+ "id": "combobox.base-ui.extension-readonly-typing-no-change",
1550
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5322",
1551
+ "upstreamTest": "prop readOnly > should not change the input value when typing while readOnly",
1552
+ "apg": "extension",
1553
+ "config": {
1554
+ "readOnly": true,
1555
+ "items": ["a", "b"]
1556
+ },
1557
+ "steps": [
1558
+ {
1559
+ "event": "type",
1560
+ "target": "input",
1561
+ "text": "a"
1562
+ },
1563
+ {
1564
+ "expect": {
1565
+ "value": "",
1566
+ "events": {
1567
+ "onInputValueChange": []
1568
+ }
1569
+ }
1570
+ }
1571
+ ]
1572
+ },
1573
+ {
1574
+ "id": "combobox.base-ui.extension-readonly-no-value-change",
1575
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5368",
1576
+ "upstreamTest": "prop readOnly > should prevent value changes when readOnly with items",
1577
+ "apg": "extension",
1578
+ "config": {
1579
+ "readOnly": true,
1580
+ "defaultOpen": true,
1581
+ "items": ["a", "b"]
1582
+ },
1583
+ "steps": [
1584
+ {
1585
+ "event": "click",
1586
+ "target": "option:0"
1587
+ },
1588
+ {
1589
+ "expect": {
1590
+ "value": "",
1591
+ "events": {
1592
+ "onValueChange": []
1593
+ }
1594
+ }
1595
+ }
1596
+ ]
1597
+ },
1598
+ {
1599
+ "id": "combobox.base-ui.keyboard-readonly-enter-no-commit",
1600
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5468",
1601
+ "upstreamTest": "prop readOnly > should not commit a value with Enter on a highlighted item when readOnly",
1602
+ "apg": "keyboard",
1603
+ "config": {
1604
+ "readOnly": true,
1605
+ "items": ["a", "b"]
1606
+ },
1607
+ "steps": [
1608
+ {
1609
+ "event": "click",
1610
+ "target": "input"
1611
+ },
1612
+ {
1613
+ "expect": {
1614
+ "visible": ["popup"]
1615
+ }
1616
+ },
1617
+ {
1618
+ "event": "key",
1619
+ "target": "input",
1620
+ "key": "ArrowDown"
1621
+ },
1622
+ {
1623
+ "expect": {
1624
+ "attrs": {
1625
+ "input": {
1626
+ "aria-activedescendant": "option:0"
1627
+ }
1628
+ }
1629
+ }
1630
+ },
1631
+ {
1632
+ "event": "key",
1633
+ "target": "input",
1634
+ "key": "Enter"
1635
+ },
1636
+ {
1637
+ "expect": {
1638
+ "value": "",
1639
+ "events": {
1640
+ "onValueChange": []
1641
+ }
1642
+ }
1643
+ }
1644
+ ]
1645
+ },
1646
+ {
1647
+ "id": "combobox.base-ui.extension-disabled-render-and-no-open",
1648
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5105",
1649
+ "upstreamTest": "prop disabled > should render disabled state on all interactive components",
1650
+ "apg": "extension",
1651
+ "config": {
1652
+ "disabled": true,
1653
+ "items": ["a", "b"]
1654
+ },
1655
+ "steps": [
1656
+ {
1657
+ "expect": {
1658
+ "attrs": {
1659
+ "input": {
1660
+ "disabled": "true"
1661
+ },
1662
+ "trigger": {
1663
+ "disabled": "true"
1664
+ }
1665
+ }
1666
+ }
1667
+ },
1668
+ {
1669
+ "event": "click",
1670
+ "target": "trigger"
1671
+ },
1672
+ {
1673
+ "expect": {
1674
+ "visible": []
1675
+ }
1676
+ }
1677
+ ]
1678
+ },
1679
+ {
1680
+ "id": "combobox.base-ui.extension-disabled-no-keyboard",
1681
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5166",
1682
+ "upstreamTest": "prop disabled > should prevent keyboard interactions when disabled",
1683
+ "apg": "extension",
1684
+ "config": {
1685
+ "disabled": true,
1686
+ "items": ["a", "b"]
1687
+ },
1688
+ "steps": [
1689
+ {
1690
+ "event": "type",
1691
+ "target": "input",
1692
+ "text": "a"
1693
+ },
1694
+ {
1695
+ "expect": {
1696
+ "visible": []
1697
+ }
1698
+ }
1699
+ ]
1700
+ },
1701
+ {
1702
+ "id": "combobox.base-ui.select-only.aria-required-on-trigger",
1703
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L812",
1704
+ "upstreamTest": "aria attributes > sets aria-required attribute when required (input inside popup)",
1705
+ "apg": "aria",
1706
+ "config": {
1707
+ "variant": "select-only",
1708
+ "inputInPopup": true,
1709
+ "required": true
1710
+ },
1711
+ "steps": [
1712
+ {
1713
+ "expect": {
1714
+ "attrs": {
1715
+ "trigger": {
1716
+ "aria-required": "true"
1717
+ }
1718
+ }
1719
+ }
1720
+ }
1721
+ ]
1722
+ },
1723
+ {
1724
+ "id": "combobox.base-ui.aria-required-not-on-trigger-input-outside",
1725
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L823",
1726
+ "upstreamTest": "aria attributes > does not set aria-required attribute when the input is outside the popup",
1727
+ "apg": "aria",
1728
+ "config": {
1729
+ "required": true
1730
+ },
1731
+ "steps": [
1732
+ {
1733
+ "expect": {
1734
+ "attrs": {
1735
+ "trigger": {
1736
+ "aria-required": null
1737
+ }
1738
+ }
1739
+ }
1740
+ }
1741
+ ],
1742
+ "notes": "When the input is outside the popup the trigger is a plain button; the required state lives on the input."
1743
+ },
1744
+ {
1745
+ "id": "combobox.base-ui.extension-custom-filter-narrows",
1746
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L8232",
1747
+ "upstreamTest": "prop filter > uses custom filter to narrow results",
1748
+ "apg": "extension",
1749
+ "config": {
1750
+ "items": ["alpha", "beta", "alphabet", "alpine"],
1751
+ "filter": "startsWith"
1752
+ },
1753
+ "steps": [
1754
+ {
1755
+ "event": "type",
1756
+ "target": "input",
1757
+ "text": "alp"
1758
+ },
1759
+ {
1760
+ "expect": {
1761
+ "visible": ["popup", "option:0", "option:1", "option:2"],
1762
+ "value": "alp"
1763
+ }
1764
+ }
1765
+ ],
1766
+ "notes": "A startsWith filter keeps alpha, alphabet and alpine but drops beta."
1767
+ },
1768
+ {
1769
+ "id": "combobox.base-ui.pointer-open-on-input-click-default",
1770
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L8634",
1771
+ "upstreamTest": "prop openOnInputClick > opens on input click by default",
1772
+ "apg": "pointer",
1773
+ "config": {
1774
+ "items": ["a"]
1775
+ },
1776
+ "steps": [
1777
+ {
1778
+ "event": "click",
1779
+ "target": "input"
1780
+ },
1781
+ {
1782
+ "expect": {
1783
+ "visible": ["popup"]
1784
+ }
1785
+ },
1786
+ {
1787
+ "event": "click",
1788
+ "target": "input"
1789
+ },
1790
+ {
1791
+ "expect": {
1792
+ "visible": ["popup"]
1793
+ }
1794
+ }
1795
+ ],
1796
+ "notes": "Clicking the input again does not toggle the popup closed."
1797
+ },
1798
+ {
1799
+ "id": "combobox.base-ui.keyboard-open-on-typing-when-click-disabled",
1800
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L8659",
1801
+ "upstreamTest": "prop openOnInputClick > does not open on input click when false, but opens on typing",
1802
+ "apg": "keyboard",
1803
+ "config": {
1804
+ "openOnInputClick": false,
1805
+ "items": ["a"]
1806
+ },
1807
+ "steps": [
1808
+ {
1809
+ "event": "click",
1810
+ "target": "input"
1811
+ },
1812
+ {
1813
+ "expect": {
1814
+ "visible": []
1815
+ }
1816
+ },
1817
+ {
1818
+ "event": "type",
1819
+ "target": "input",
1820
+ "text": "a"
1821
+ },
1822
+ {
1823
+ "expect": {
1824
+ "visible": ["popup", "option:0"]
1825
+ }
1826
+ }
1827
+ ]
1828
+ },
1829
+ {
1830
+ "id": "combobox.base-ui.keyboard-autohighlight-first-match",
1831
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L9379",
1832
+ "upstreamTest": "prop autoHighlight > highlights the first matching item after typing (single mode)",
1833
+ "apg": "keyboard",
1834
+ "config": {
1835
+ "autoHighlight": true,
1836
+ "items": ["apple", "banana", "cherry"]
1837
+ },
1838
+ "steps": [
1839
+ {
1840
+ "event": "type",
1841
+ "target": "input",
1842
+ "text": "ch"
1843
+ },
1844
+ {
1845
+ "expect": {
1846
+ "visible": ["popup", "option:0"],
1847
+ "attrs": {
1848
+ "input": {
1849
+ "aria-activedescendant": "option:0"
1850
+ }
1851
+ }
1852
+ }
1853
+ }
1854
+ ],
1855
+ "notes": "Opening this scenario the query 'ch' filters to cherry, the first match."
1856
+ },
1857
+ {
1858
+ "id": "combobox.base-ui.keyboard-autohighlight-static-list-space",
1859
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L9436",
1860
+ "upstreamTest": "prop autoHighlight > highlights the first matching item for a static list without the items prop",
1861
+ "apg": "keyboard",
1862
+ "config": {
1863
+ "autoHighlight": true,
1864
+ "items": ["alpha", "alphabet", "beta"]
1865
+ },
1866
+ "steps": [
1867
+ {
1868
+ "event": "type",
1869
+ "target": "input",
1870
+ "text": "al"
1871
+ },
1872
+ {
1873
+ "expect": {
1874
+ "visible": ["popup", "option:0"],
1875
+ "attrs": {
1876
+ "input": {
1877
+ "aria-activedescendant": "option:0"
1878
+ }
1879
+ }
1880
+ }
1881
+ },
1882
+ {
1883
+ "event": "type",
1884
+ "target": "input",
1885
+ "text": " "
1886
+ },
1887
+ {
1888
+ "expect": {
1889
+ "attrs": {
1890
+ "input": {
1891
+ "aria-activedescendant": "option:0"
1892
+ }
1893
+ }
1894
+ }
1895
+ }
1896
+ ],
1897
+ "notes": "Typing a space keeps the first match highlighted instead of selecting it."
1898
+ },
1899
+ {
1900
+ "id": "combobox.base-ui.aria-initial-input-from-default-value",
1901
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5633",
1902
+ "upstreamTest": "initial input value derivation > derives input from defaultValue on first mount when unspecified",
1903
+ "apg": "aria",
1904
+ "config": {
1905
+ "items": ["apple", "banana", "cherry"],
1906
+ "defaultValue": "banana"
1907
+ },
1908
+ "steps": [
1909
+ {
1910
+ "expect": {
1911
+ "value": "banana"
1912
+ }
1913
+ }
1914
+ ]
1915
+ },
1916
+ {
1917
+ "id": "combobox.base-ui.extension-multiple-initial-input-empty",
1918
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5684",
1919
+ "upstreamTest": "initial input value derivation > multiple mode initial input remains empty",
1920
+ "apg": "extension",
1921
+ "config": {
1922
+ "multiple": true,
1923
+ "items": ["apple", "banana", "cherry"],
1924
+ "defaultValue": ["banana"]
1925
+ },
1926
+ "steps": [
1927
+ {
1928
+ "expect": {
1929
+ "value": ""
1930
+ }
1931
+ }
1932
+ ]
1933
+ },
1934
+ {
1935
+ "id": "combobox.base-ui.select-only.keyboard-composition-select-and-restore",
1936
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L595",
1937
+ "upstreamTest": "input inside popup composition > selects with the keyboard, restores focus, and resets the query on reopen",
1938
+ "apg": "keyboard",
1939
+ "config": {
1940
+ "variant": "select-only",
1941
+ "inputInPopup": true,
1942
+ "items": ["Apple", "Banana", "Cherry"]
1943
+ },
1944
+ "steps": [
1945
+ {
1946
+ "event": "click",
1947
+ "target": "trigger"
1948
+ },
1949
+ {
1950
+ "expect": {
1951
+ "visible": ["popup"],
1952
+ "focus": "input"
1953
+ }
1954
+ },
1955
+ {
1956
+ "event": "type",
1957
+ "target": "input",
1958
+ "text": "ban"
1959
+ },
1960
+ {
1961
+ "event": "key",
1962
+ "target": "input",
1963
+ "key": "ArrowDown"
1964
+ },
1965
+ {
1966
+ "event": "key",
1967
+ "target": "input",
1968
+ "key": "Enter"
1969
+ },
1970
+ {
1971
+ "expect": {
1972
+ "visible": [],
1973
+ "focus": "trigger",
1974
+ "value": "Banana"
1975
+ }
1976
+ },
1977
+ {
1978
+ "event": "click",
1979
+ "target": "trigger"
1980
+ },
1981
+ {
1982
+ "expect": {
1983
+ "value": "",
1984
+ "attrs": {
1985
+ "option:1": {
1986
+ "aria-selected": "true"
1987
+ },
1988
+ "input": {
1989
+ "aria-activedescendant": "option:1"
1990
+ }
1991
+ }
1992
+ }
1993
+ }
1994
+ ],
1995
+ "notes": "Select-only composition: the trigger shows the value, the popup input is cleared and the selection is restored and highlighted on reopen."
1996
+ },
1997
+ {
1998
+ "id": "combobox.base-ui.select-only.keyboard-escape-discards-query",
1999
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L642",
2000
+ "upstreamTest": "input inside popup composition > discards an uncommitted query on Escape and preserves the selection",
2001
+ "apg": "keyboard",
2002
+ "config": {
2003
+ "variant": "select-only",
2004
+ "inputInPopup": true,
2005
+ "items": ["Apple", "Banana", "Cherry"],
2006
+ "defaultValue": "Apple"
2007
+ },
2008
+ "steps": [
2009
+ {
2010
+ "event": "click",
2011
+ "target": "trigger"
2012
+ },
2013
+ {
2014
+ "event": "type",
2015
+ "target": "input",
2016
+ "text": "ban"
2017
+ },
2018
+ {
2019
+ "event": "key",
2020
+ "target": "input",
2021
+ "key": "Escape"
2022
+ },
2023
+ {
2024
+ "expect": {
2025
+ "visible": [],
2026
+ "focus": "trigger",
2027
+ "value": "Apple",
2028
+ "events": {
2029
+ "onValueChange": []
2030
+ }
2031
+ }
2032
+ }
2033
+ ],
2034
+ "notes": "Escape abandons the query and keeps the previously selected Apple."
2035
+ },
2036
+ {
2037
+ "id": "combobox.base-ui.select-only.pointer-trigger-close-returns-focus",
2038
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L557",
2039
+ "upstreamTest": "does not focus input when closing via trigger click (input inside popup)",
2040
+ "apg": "pointer",
2041
+ "config": {
2042
+ "variant": "select-only",
2043
+ "inputInPopup": true,
2044
+ "items": ["One", "Two", "Three"]
2045
+ },
2046
+ "steps": [
2047
+ {
2048
+ "event": "click",
2049
+ "target": "trigger"
2050
+ },
2051
+ {
2052
+ "expect": {
2053
+ "visible": ["popup"],
2054
+ "focus": "input"
2055
+ }
2056
+ },
2057
+ {
2058
+ "event": "click",
2059
+ "target": "trigger"
2060
+ },
2061
+ {
2062
+ "expect": {
2063
+ "focus": "trigger"
2064
+ }
2065
+ }
2066
+ ]
2067
+ },
2068
+ {
2069
+ "id": "combobox.base-ui.select-only.keyboard-trigger-typeahead",
2070
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L914",
2071
+ "upstreamTest": "typeahead > selects item when typing on focused trigger (input inside popup)",
2072
+ "apg": "keyboard",
2073
+ "config": {
2074
+ "variant": "select-only",
2075
+ "inputInPopup": true,
2076
+ "items": ["apple", "banana", "cherry"]
2077
+ },
2078
+ "steps": [
2079
+ {
2080
+ "event": "focus",
2081
+ "target": "trigger"
2082
+ },
2083
+ {
2084
+ "event": "key",
2085
+ "target": "trigger",
2086
+ "key": "a"
2087
+ },
2088
+ {
2089
+ "expect": {
2090
+ "value": "apple",
2091
+ "visible": []
2092
+ }
2093
+ }
2094
+ ],
2095
+ "notes": "Typeahead on a closed select-only trigger selects without opening the popup."
2096
+ },
2097
+ {
2098
+ "id": "combobox.base-ui.keyboard-escape-moves-focus-to-clear",
2099
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L450",
2100
+ "upstreamTest": "interaction behavior > should move focus to clear button when pressing Escape and popup is closed",
2101
+ "apg": "keyboard",
2102
+ "config": {
2103
+ "items": ["apple", "banana"],
2104
+ "defaultValue": "apple",
2105
+ "hasClear": true
2106
+ },
2107
+ "steps": [
2108
+ {
2109
+ "event": "focus",
2110
+ "target": "input"
2111
+ },
2112
+ {
2113
+ "event": "key",
2114
+ "target": "input",
2115
+ "key": "Escape"
2116
+ },
2117
+ {
2118
+ "expect": {
2119
+ "value": ""
2120
+ }
2121
+ }
2122
+ ],
2123
+ "notes": "On a closed combobox with a clear button, Escape clears the value instead of bubbling."
2124
+ },
2125
+ {
2126
+ "id": "combobox.base-ui.keyboard-backspace-removes-last-chip",
2127
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L902",
2128
+ "upstreamTest": "interaction behavior > removes the last rendered chip when pressing Backspace in an empty input",
2129
+ "apg": "keyboard",
2130
+ "config": {
2131
+ "multiple": true,
2132
+ "defaultValue": ["apple", "banana", "cherry"],
2133
+ "renderedChips": 2
2134
+ },
2135
+ "steps": [
2136
+ {
2137
+ "event": "click",
2138
+ "target": "input"
2139
+ },
2140
+ {
2141
+ "event": "key",
2142
+ "target": "input",
2143
+ "key": "Backspace"
2144
+ },
2145
+ {
2146
+ "expect": {
2147
+ "events": {
2148
+ "onValueChange": [["apple", "cherry"]]
2149
+ }
2150
+ }
2151
+ }
2152
+ ],
2153
+ "notes": "With only two chips rendered, the last selected value is removed."
2154
+ },
2155
+ {
2156
+ "id": "combobox.base-ui.extension-paste-opens-popup",
2157
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5026",
2158
+ "upstreamTest": "opens on paste input events",
2159
+ "apg": "extension",
2160
+ "config": {
2161
+ "items": ["apple", "banana"]
2162
+ },
2163
+ "steps": [
2164
+ {
2165
+ "event": "type",
2166
+ "target": "input",
2167
+ "text": "app",
2168
+ "inputEvent": "paste"
2169
+ },
2170
+ {
2171
+ "expect": {
2172
+ "visible": ["popup", "option:0"]
2173
+ }
2174
+ }
2175
+ ],
2176
+ "notes": "A paste input event is treated as typing and opens the popup."
2177
+ },
2178
+ {
2179
+ "id": "combobox.base-ui.extension-programmatic-input-does-not-open",
2180
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5002",
2181
+ "upstreamTest": "does not open on programmatic input events",
2182
+ "apg": "extension",
2183
+ "config": {
2184
+ "items": ["apple", "banana"]
2185
+ },
2186
+ "steps": [
2187
+ {
2188
+ "event": "type",
2189
+ "target": "input",
2190
+ "text": "app",
2191
+ "inputEvent": "programmatic"
2192
+ },
2193
+ {
2194
+ "expect": {
2195
+ "visible": []
2196
+ }
2197
+ }
2198
+ ]
2199
+ },
2200
+ {
2201
+ "id": "combobox.base-ui.extension-popup-initial-focus-false",
2202
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L100",
2203
+ "upstreamTest": "honors initialFocus={false}",
2204
+ "apg": "extension",
2205
+ "config": {
2206
+ "variant": "select-only",
2207
+ "inputInPopup": true,
2208
+ "initialFocus": false
2209
+ },
2210
+ "steps": [
2211
+ {
2212
+ "event": "focus",
2213
+ "target": "trigger"
2214
+ },
2215
+ {
2216
+ "event": "click",
2217
+ "target": "trigger"
2218
+ },
2219
+ {
2220
+ "expect": {
2221
+ "visible": ["popup"],
2222
+ "focus": "trigger"
2223
+ }
2224
+ }
2225
+ ],
2226
+ "notes": "initialFocus=false keeps focus on the trigger when the popup opens."
2227
+ },
2228
+ {
2229
+ "id": "combobox.base-ui.extension-popup-returns-final-focus",
2230
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L122",
2231
+ "upstreamTest": "returns focus to an explicitly provided element when the popup closes",
2232
+ "apg": "extension",
2233
+ "config": {
2234
+ "defaultOpen": true,
2235
+ "finalFocus": "final-focus-button",
2236
+ "items": ["a"]
2237
+ },
2238
+ "steps": [
2239
+ {
2240
+ "event": "key",
2241
+ "target": "input",
2242
+ "key": "Escape"
2243
+ },
2244
+ {
2245
+ "expect": {
2246
+ "focus": "final-focus-button"
2247
+ }
2248
+ }
2249
+ ],
2250
+ "notes": "Closing the popup restores focus to the element named by finalFocus."
2251
+ },
2252
+ {
2253
+ "id": "combobox.base-ui.select-only.popup-focus-on-touch",
2254
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L76",
2255
+ "upstreamTest": "focuses the popup instead of its input when opened by touch",
2256
+ "apg": "pointer",
2257
+ "config": {
2258
+ "variant": "select-only",
2259
+ "inputInPopup": true
2260
+ },
2261
+ "steps": [
2262
+ {
2263
+ "event": "pointerdown",
2264
+ "target": "trigger",
2265
+ "pointerType": "touch"
2266
+ },
2267
+ {
2268
+ "expect": {
2269
+ "visible": ["popup"],
2270
+ "focus": "popup"
2271
+ }
2272
+ }
2273
+ ],
2274
+ "notes": "Touch opening focuses the dialog so the on-screen keyboard does not appear immediately."
2275
+ },
2276
+ {
2277
+ "id": "combobox.base-ui.aria-trigger-tabindex-minus-one",
2278
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L23",
2279
+ "upstreamTest": "sets tabIndex to -1 when not used as the main anchor",
2280
+ "apg": "aria",
2281
+ "config": {
2282
+ "variant": "select-only",
2283
+ "inputInPopup": false,
2284
+ "items": ["a"]
2285
+ },
2286
+ "steps": [
2287
+ {
2288
+ "expect": {
2289
+ "attrs": {
2290
+ "trigger": {
2291
+ "tabindex": "-1"
2292
+ }
2293
+ }
2294
+ }
2295
+ }
2296
+ ],
2297
+ "notes": "With an input outside the popup the trigger is not a separate tab stop."
2298
+ },
2299
+ {
2300
+ "id": "combobox.base-ui.extension-trigger-disabled-aria",
2301
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L44",
2302
+ "upstreamTest": "prop disabled > should render aria-disabled attribute when disabled",
2303
+ "apg": "extension",
2304
+ "config": {
2305
+ "disabled": true,
2306
+ "inputInPopup": true
2307
+ },
2308
+ "steps": [
2309
+ {
2310
+ "expect": {
2311
+ "attrs": {
2312
+ "trigger": {
2313
+ "aria-disabled": "true"
2314
+ }
2315
+ }
2316
+ }
2317
+ }
2318
+ ]
2319
+ },
2320
+ {
2321
+ "id": "combobox.base-ui.extension-trigger-readonly",
2322
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L228",
2323
+ "upstreamTest": "prop readOnly > applies the data-readonly style hook only when readOnly",
2324
+ "apg": "extension",
2325
+ "config": {
2326
+ "readOnly": true,
2327
+ "inputInPopup": true
2328
+ },
2329
+ "steps": [
2330
+ {
2331
+ "expect": {
2332
+ "attrs": {
2333
+ "trigger": {
2334
+ "aria-readonly": "true"
2335
+ }
2336
+ }
2337
+ }
2338
+ }
2339
+ ]
2340
+ }
2341
+ ],
2342
+ "skipped": [
2343
+ {
2344
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4296",
2345
+ "upstreamTest": "should handle browser autofill / shows all items after autofill / autofill matches",
2346
+ "reason": "Browser autofill platform behaviour."
2347
+ },
2348
+ {
2349
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L4927",
2350
+ "upstreamTest": "touch scroll lock",
2351
+ "reason": "Touch scroll-lock platform behaviour."
2352
+ },
2353
+ {
2354
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L6657",
2355
+ "upstreamTest": "prop grid > arrow keys navigate across rows and columns / uneven rows / RTL grid navigation",
2356
+ "reason": "Grid layout geometry beyond the combobox pattern's listbox variant (the single grid role/aria test is ported)."
2357
+ },
2358
+ {
2359
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5502",
2360
+ "upstreamTest": "prop itemToStringLabel / itemToStringValue",
2361
+ "reason": "Value-to-label stringification internals."
2362
+ },
2363
+ {
2364
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5720",
2365
+ "upstreamTest": "input value synchronization edge cases (async items, frozen query, mirrored selection)",
2366
+ "reason": "Async item loading and controlled-sync internals; the observable derivations are ported elsewhere."
2367
+ },
2368
+ {
2369
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L182",
2370
+ "upstreamTest": "manual unmount lifecycle / server-side rendering",
2371
+ "reason": "Mount lifecycle and SSR internals."
2372
+ },
2373
+ {
2374
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L3629",
2375
+ "upstreamTest": "should create multiple hidden inputs for form submission / disabled / readOnly hidden inputs",
2376
+ "reason": "Form hidden-input internals."
2377
+ },
2378
+ {
2379
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5054",
2380
+ "upstreamTest": "prop id",
2381
+ "reason": "id propagation internals (the aria-controls target is ported)."
2382
+ },
2383
+ {
2384
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L8684",
2385
+ "upstreamTest": "scroll reset on input value change",
2386
+ "reason": "Scroll position internals."
2387
+ },
2388
+ {
2389
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L9036",
2390
+ "upstreamTest": "asynchronous autoHighlight candidates / controlled popup waits",
2391
+ "reason": "Async item-loading internals."
2392
+ },
2393
+ {
2394
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L465",
2395
+ "upstreamTest": "item link handling (anchor href / hash)",
2396
+ "reason": "DOM link navigation internals."
2397
+ },
2398
+ {
2399
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L90",
2400
+ "upstreamTest": "rendering as a different element (textarea)",
2401
+ "reason": "React polymorphic rendering of a textarea; not APG combobox behaviour."
2402
+ },
2403
+ {
2404
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L576",
2405
+ "upstreamTest": "preserves caret position when controlled and inserting in the middle / Home and End scroll",
2406
+ "reason": "Caret and scroll internals."
2407
+ },
2408
+ {
2409
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L609",
2410
+ "upstreamTest": "navigates an existing chip highlight when focus returns to the input",
2411
+ "reason": "Chip highlight internals for a multiple-selection extension."
2412
+ },
2413
+ {
2414
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/item/ComboboxItem.test.tsx#L429",
2415
+ "upstreamTest": "virtualized without explicit index / virtualized with explicit index",
2416
+ "reason": "Virtualization internals."
2417
+ },
2418
+ {
2419
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/trigger/ComboboxTrigger.test.tsx#L485",
2420
+ "upstreamTest": "drag selection / cancel-open",
2421
+ "reason": "Pointer-drag gesture internals."
2422
+ },
2423
+ {
2424
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/popup/ComboboxPopup.test.tsx#L143",
2425
+ "upstreamTest": "popup data attributes mapping",
2426
+ "reason": "Styling data attributes."
2427
+ },
2428
+ {
2429
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5211",
2430
+ "upstreamTest": "prop required > hidden input required state in multiple mode",
2431
+ "reason": "Form hidden-input internals; the APG-relevant aria-required on the select-only trigger is ported."
2432
+ },
2433
+ {
2434
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/input/ComboboxInput.test.tsx#L417",
2435
+ "upstreamTest": "interaction behavior > multiple selection with chips when readOnly / disabled",
2436
+ "reason": "Chips are a multiple-selection extension outside the four combobox parts."
2437
+ },
2438
+ {
2439
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/combobox/root/ComboboxRoot.test.tsx#L5104",
2440
+ "upstreamTest": "prop disabled > should set disabled attribute on hidden input",
2441
+ "reason": "Form hidden-input internals."
2442
+ }
2443
+ ]
2444
+ }