@cssints/apg-specs 0.0.0-stage → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -2
  3. package/dist/apg/accordion.bridge.d.mts +35 -0
  4. package/dist/apg/accordion.bridge.mjs +326 -0
  5. package/dist/apg/accordion.model.json +8397 -0
  6. package/dist/apg/alert.bridge.d.mts +22 -0
  7. package/dist/apg/alert.bridge.mjs +86 -0
  8. package/dist/apg/alert.model.json +871 -0
  9. package/dist/apg/alertdialog.bridge.d.mts +21 -0
  10. package/dist/apg/alertdialog.bridge.mjs +221 -0
  11. package/dist/apg/alertdialog.model.json +5232 -0
  12. package/dist/apg/breadcrumb.bridge.d.mts +26 -0
  13. package/dist/apg/breadcrumb.bridge.mjs +120 -0
  14. package/dist/apg/breadcrumb.model.json +574 -0
  15. package/dist/apg/button.bridge.d.mts +35 -0
  16. package/dist/apg/button.bridge.mjs +208 -0
  17. package/dist/apg/button.model.json +5814 -0
  18. package/dist/apg/carousel.bridge.d.mts +44 -0
  19. package/dist/apg/carousel.bridge.mjs +262 -0
  20. package/dist/apg/carousel.model.json +8963 -0
  21. package/dist/apg/checkbox-group.bridge.d.mts +25 -0
  22. package/dist/apg/checkbox-group.bridge.mjs +276 -0
  23. package/dist/apg/checkbox-group.model.json +3863 -0
  24. package/dist/apg/checkbox.bridge.d.mts +34 -0
  25. package/dist/apg/checkbox.bridge.mjs +253 -0
  26. package/dist/apg/checkbox.model.json +3158 -0
  27. package/dist/apg/combobox-autocomplete.bridge.d.mts +14 -0
  28. package/dist/apg/combobox-autocomplete.bridge.mjs +326 -0
  29. package/dist/apg/combobox-autocomplete.model.json +11586 -0
  30. package/dist/apg/combobox-dialog.bridge.d.mts +17 -0
  31. package/dist/apg/combobox-dialog.bridge.mjs +250 -0
  32. package/dist/apg/combobox-dialog.model.json +8981 -0
  33. package/dist/apg/combobox-grid.bridge.d.mts +17 -0
  34. package/dist/apg/combobox-grid.bridge.mjs +227 -0
  35. package/dist/apg/combobox-grid.model.json +8554 -0
  36. package/dist/apg/combobox-select-only.bridge.d.mts +24 -0
  37. package/dist/apg/combobox-select-only.bridge.mjs +304 -0
  38. package/dist/apg/combobox-select-only.model.json +7846 -0
  39. package/dist/apg/combobox-tree.bridge.d.mts +17 -0
  40. package/dist/apg/combobox-tree.bridge.mjs +211 -0
  41. package/dist/apg/combobox-tree.model.json +9345 -0
  42. package/dist/apg/dialog-modal.bridge.d.mts +35 -0
  43. package/dist/apg/dialog-modal.bridge.mjs +186 -0
  44. package/dist/apg/dialog-modal.model.json +7580 -0
  45. package/dist/apg/disclosure.bridge.d.mts +25 -0
  46. package/dist/apg/disclosure.bridge.mjs +202 -0
  47. package/dist/apg/disclosure.model.json +4703 -0
  48. package/dist/apg/feed.bridge.d.mts +31 -0
  49. package/dist/apg/feed.bridge.mjs +246 -0
  50. package/dist/apg/feed.model.json +4523 -0
  51. package/dist/apg/grid-selection.bridge.d.mts +13 -0
  52. package/dist/apg/grid-selection.bridge.mjs +160 -0
  53. package/dist/apg/grid-selection.model.json +6974 -0
  54. package/dist/apg/grid-sort.bridge.d.mts +12 -0
  55. package/dist/apg/grid-sort.bridge.mjs +138 -0
  56. package/dist/apg/grid-sort.model.json +3799 -0
  57. package/dist/apg/grid.bridge.d.mts +54 -0
  58. package/dist/apg/grid.bridge.mjs +441 -0
  59. package/dist/apg/grid.model.json +3802 -0
  60. package/dist/apg/link.bridge.d.mts +24 -0
  61. package/dist/apg/link.bridge.mjs +126 -0
  62. package/dist/apg/link.model.json +694 -0
  63. package/dist/apg/listbox-multi.bridge.d.mts +10 -0
  64. package/dist/apg/listbox-multi.bridge.mjs +261 -0
  65. package/dist/apg/listbox-multi.model.json +10893 -0
  66. package/dist/apg/listbox-rearrangeable.bridge.d.mts +20 -0
  67. package/dist/apg/listbox-rearrangeable.bridge.mjs +237 -0
  68. package/dist/apg/listbox-rearrangeable.model.json +17592 -0
  69. package/dist/apg/listbox-shared.d.mts +58 -0
  70. package/dist/apg/listbox-shared.mjs +171 -0
  71. package/dist/apg/listbox-single.bridge.d.mts +10 -0
  72. package/dist/apg/listbox-single.bridge.mjs +196 -0
  73. package/dist/apg/listbox-single.model.json +8024 -0
  74. package/dist/apg/listbox-typeahead.bridge.d.mts +10 -0
  75. package/dist/apg/listbox-typeahead.bridge.mjs +153 -0
  76. package/dist/apg/listbox-typeahead.model.json +5615 -0
  77. package/dist/apg/menu-button.bridge.d.mts +29 -0
  78. package/dist/apg/menu-button.bridge.mjs +259 -0
  79. package/dist/apg/menu-button.model.json +5706 -0
  80. package/dist/apg/menu-checkable.bridge.d.mts +25 -0
  81. package/dist/apg/menu-checkable.bridge.mjs +226 -0
  82. package/dist/apg/menu-checkable.model.json +4277 -0
  83. package/dist/apg/menu-menubar.bridge.d.mts +27 -0
  84. package/dist/apg/menu-menubar.bridge.mjs +273 -0
  85. package/dist/apg/menu-menubar.model.json +9540 -0
  86. package/dist/apg/meter.bridge.d.mts +28 -0
  87. package/dist/apg/meter.bridge.mjs +159 -0
  88. package/dist/apg/meter.model.json +1185 -0
  89. package/dist/apg/player.bridge.d.mts +24 -0
  90. package/dist/apg/player.bridge.mjs +342 -0
  91. package/dist/apg/player.model.json +11013 -0
  92. package/dist/apg/radio.bridge.d.mts +35 -0
  93. package/dist/apg/radio.bridge.mjs +371 -0
  94. package/dist/apg/radio.model.json +5011 -0
  95. package/dist/apg/slider-multithumb.bridge.d.mts +34 -0
  96. package/dist/apg/slider-multithumb.bridge.mjs +365 -0
  97. package/dist/apg/slider-multithumb.model.json +5774 -0
  98. package/dist/apg/slider.bridge.d.mts +54 -0
  99. package/dist/apg/slider.bridge.mjs +359 -0
  100. package/dist/apg/slider.model.json +4881 -0
  101. package/dist/apg/spinbutton.bridge.d.mts +41 -0
  102. package/dist/apg/spinbutton.bridge.mjs +327 -0
  103. package/dist/apg/spinbutton.model.json +7571 -0
  104. package/dist/apg/switch.bridge.d.mts +30 -0
  105. package/dist/apg/switch.bridge.mjs +243 -0
  106. package/dist/apg/switch.model.json +3159 -0
  107. package/dist/apg/tabs.bridge.d.mts +41 -0
  108. package/dist/apg/tabs.bridge.mjs +294 -0
  109. package/dist/apg/tabs.model.json +7659 -0
  110. package/dist/apg/timeline.bridge.d.mts +36 -0
  111. package/dist/apg/timeline.bridge.mjs +265 -0
  112. package/dist/apg/timeline.model.json +6189 -0
  113. package/dist/apg/toolbar.bridge.d.mts +25 -0
  114. package/dist/apg/toolbar.bridge.mjs +307 -0
  115. package/dist/apg/toolbar.model.json +6616 -0
  116. package/dist/apg/tooltip.bridge.d.mts +36 -0
  117. package/dist/apg/tooltip.bridge.mjs +208 -0
  118. package/dist/apg/tooltip.model.json +8295 -0
  119. package/dist/apg/treegrid.bridge.d.mts +28 -0
  120. package/dist/apg/treegrid.bridge.mjs +311 -0
  121. package/dist/apg/treegrid.model.json +17358 -0
  122. package/dist/apg/treeview.bridge.d.mts +26 -0
  123. package/dist/apg/treeview.bridge.mjs +396 -0
  124. package/dist/apg/treeview.model.json +13745 -0
  125. package/dist/apg/windowsplitter.bridge.d.mts +36 -0
  126. package/dist/apg/windowsplitter.bridge.mjs +242 -0
  127. package/dist/apg/windowsplitter.model.json +6253 -0
  128. package/dist/canvas/camera.model.json +6568 -0
  129. package/dist/canvas/canvas.bridge.d.mts +190 -0
  130. package/dist/canvas/canvas.bridge.mjs +729 -0
  131. package/dist/canvas/pointer.model.json +17095 -0
  132. package/dist/scenario.d.mts +233 -0
  133. package/dist/scenario.mjs +313 -0
  134. package/package.json +57 -4
  135. package/scenarios/apg/README.md +221 -0
  136. package/scenarios/apg/accordion.base-ui.json +1005 -0
  137. package/scenarios/apg/accordion.react-aria.json +929 -0
  138. package/scenarios/apg/alert.base-ui.json +81 -0
  139. package/scenarios/apg/alert.react-aria.json +98 -0
  140. package/scenarios/apg/alertdialog.base-ui.json +331 -0
  141. package/scenarios/apg/alertdialog.react-aria.json +225 -0
  142. package/scenarios/apg/breadcrumb.react-aria.json +312 -0
  143. package/scenarios/apg/button.ariakit.json +136 -0
  144. package/scenarios/apg/button.base-ui.json +747 -0
  145. package/scenarios/apg/button.react-aria.json +443 -0
  146. package/scenarios/apg/carousel.apg.json +909 -0
  147. package/scenarios/apg/checkbox.ariakit.json +299 -0
  148. package/scenarios/apg/checkbox.base-ui.json +1126 -0
  149. package/scenarios/apg/checkbox.react-aria.json +518 -0
  150. package/scenarios/apg/combobox.ariakit.json +945 -0
  151. package/scenarios/apg/combobox.base-ui.json +2444 -0
  152. package/scenarios/apg/combobox.react-aria.json +845 -0
  153. package/scenarios/apg/dialog-modal.ariakit.json +1102 -0
  154. package/scenarios/apg/dialog-modal.base-ui.json +775 -0
  155. package/scenarios/apg/dialog-modal.react-aria.json +638 -0
  156. package/scenarios/apg/disclosure.apg.json +349 -0
  157. package/scenarios/apg/disclosure.ariakit.json +163 -0
  158. package/scenarios/apg/disclosure.base-ui.json +451 -0
  159. package/scenarios/apg/disclosure.react-aria.json +643 -0
  160. package/scenarios/apg/feed.apg.json +442 -0
  161. package/scenarios/apg/grid.ariakit.json +197 -0
  162. package/scenarios/apg/grid.base-ui.json +720 -0
  163. package/scenarios/apg/grid.react-aria.json +969 -0
  164. package/scenarios/apg/landmarks.ariakit.json +93 -0
  165. package/scenarios/apg/landmarks.react-aria.json +330 -0
  166. package/scenarios/apg/link.ariakit.json +83 -0
  167. package/scenarios/apg/link.base-ui.json +88 -0
  168. package/scenarios/apg/link.react-aria.json +186 -0
  169. package/scenarios/apg/listbox.ariakit.json +78 -0
  170. package/scenarios/apg/listbox.base-ui.json +163 -0
  171. package/scenarios/apg/listbox.react-aria.json +1118 -0
  172. package/scenarios/apg/menu-button.ariakit.json +924 -0
  173. package/scenarios/apg/menu-button.base-ui.json +1155 -0
  174. package/scenarios/apg/menu-button.react-aria.json +1080 -0
  175. package/scenarios/apg/menubar.ariakit.json +758 -0
  176. package/scenarios/apg/menubar.base-ui.json +673 -0
  177. package/scenarios/apg/meter.base-ui.json +243 -0
  178. package/scenarios/apg/meter.react-aria.json +201 -0
  179. package/scenarios/apg/radio.ariakit.json +459 -0
  180. package/scenarios/apg/radio.base-ui.json +581 -0
  181. package/scenarios/apg/radio.react-aria.json +576 -0
  182. package/scenarios/apg/slider-multithumb.base-ui.json +316 -0
  183. package/scenarios/apg/slider-multithumb.react-aria.json +363 -0
  184. package/scenarios/apg/slider.base-ui.json +544 -0
  185. package/scenarios/apg/slider.react-aria.json +456 -0
  186. package/scenarios/apg/spinbutton.base-ui.json +1688 -0
  187. package/scenarios/apg/spinbutton.react-aria.json +426 -0
  188. package/scenarios/apg/switch.base-ui.json +456 -0
  189. package/scenarios/apg/switch.react-aria.json +303 -0
  190. package/scenarios/apg/table.ariakit.json +65 -0
  191. package/scenarios/apg/table.react-aria.json +221 -0
  192. package/scenarios/apg/tabs.ariakit.json +329 -0
  193. package/scenarios/apg/tabs.base-ui.json +875 -0
  194. package/scenarios/apg/tabs.react-aria.json +644 -0
  195. package/scenarios/apg/toolbar.ariakit.json +595 -0
  196. package/scenarios/apg/toolbar.base-ui.json +1189 -0
  197. package/scenarios/apg/toolbar.react-aria.json +383 -0
  198. package/scenarios/apg/tooltip.ariakit.json +441 -0
  199. package/scenarios/apg/tooltip.base-ui.json +411 -0
  200. package/scenarios/apg/tooltip.react-aria.json +454 -0
  201. package/scenarios/apg/treegrid.apg.json +2558 -0
  202. package/scenarios/apg/treegrid.react-aria.json +5094 -0
  203. package/scenarios/apg/treeview.apg.json +928 -0
  204. package/scenarios/apg/windowsplitter.apg.json +557 -0
  205. package/scenarios/canvas/README.md +69 -0
  206. package/scenarios/canvas/camera.contract.json +237 -0
  207. package/scenarios/canvas/camera.excalidraw.json +57 -0
  208. package/scenarios/canvas/marquee.excalidraw.json +122 -0
  209. package/scenarios/canvas/pan.excalidraw.json +46 -0
  210. package/scenarios/canvas/pointer.contract.json +528 -0
  211. package/scenarios/parts.json +291 -0
  212. package/shared/aria.qnt +186 -0
  213. package/shared/details-group.qnt +50 -0
  214. package/shared/focusgroup.qnt +152 -0
  215. package/shared/invokers.qnt +81 -0
  216. package/shared/popover.qnt +71 -0
  217. package/specs/apg/STATIC.md +103 -0
  218. package/specs/apg/accordion.qnt +578 -0
  219. package/specs/apg/alert.qnt +131 -0
  220. package/specs/apg/alertdialog.qnt +455 -0
  221. package/specs/apg/breadcrumb.qnt +88 -0
  222. package/specs/apg/button.qnt +445 -0
  223. package/specs/apg/carousel.qnt +732 -0
  224. package/specs/apg/checkbox-group.qnt +388 -0
  225. package/specs/apg/checkbox.qnt +394 -0
  226. package/specs/apg/combobox-autocomplete.qnt +764 -0
  227. package/specs/apg/combobox-dialog.qnt +627 -0
  228. package/specs/apg/combobox-grid.qnt +632 -0
  229. package/specs/apg/combobox-select-only.qnt +626 -0
  230. package/specs/apg/combobox-tree.qnt +633 -0
  231. package/specs/apg/dialog-modal.qnt +499 -0
  232. package/specs/apg/disclosure.qnt +309 -0
  233. package/specs/apg/feed.qnt +485 -0
  234. package/specs/apg/grid-selection.qnt +512 -0
  235. package/specs/apg/grid-sort.qnt +330 -0
  236. package/specs/apg/grid.qnt +360 -0
  237. package/specs/apg/link.qnt +119 -0
  238. package/specs/apg/listbox-multi.qnt +799 -0
  239. package/specs/apg/listbox-rearrangeable.qnt +801 -0
  240. package/specs/apg/listbox-single.qnt +511 -0
  241. package/specs/apg/listbox-typeahead.qnt +396 -0
  242. package/specs/apg/menu-button.qnt +363 -0
  243. package/specs/apg/menu-checkable.qnt +304 -0
  244. package/specs/apg/menu-menubar.qnt +531 -0
  245. package/specs/apg/meter.qnt +129 -0
  246. package/specs/apg/player.qnt +1081 -0
  247. package/specs/apg/radio.qnt +394 -0
  248. package/specs/apg/slider-multithumb.qnt +441 -0
  249. package/specs/apg/slider.qnt +396 -0
  250. package/specs/apg/spinbutton.qnt +494 -0
  251. package/specs/apg/switch.qnt +389 -0
  252. package/specs/apg/tabs.qnt +412 -0
  253. package/specs/apg/timeline.qnt +612 -0
  254. package/specs/apg/toolbar.qnt +364 -0
  255. package/specs/apg/tooltip.qnt +553 -0
  256. package/specs/apg/treegrid.qnt +983 -0
  257. package/specs/apg/treeview.qnt +1004 -0
  258. package/specs/apg/windowsplitter.qnt +487 -0
  259. package/specs/canvas/camera.qnt +407 -0
  260. package/specs/canvas/pointer.qnt +841 -0
@@ -0,0 +1,544 @@
1
+ {
2
+ "pattern": "slider",
3
+ "source": "base-ui",
4
+ "commit": "19511bb171f3b360b006c94cf6d07e53cb446505",
5
+ "license": "MIT",
6
+ "skipped": [],
7
+ "scenarios": [
8
+ {
9
+ "id": "slider.base-ui.aria-attributes",
10
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L172",
11
+ "upstreamTest": "SliderRoot > ARIA attributes > has the correct aria attributes",
12
+ "apg": "aria",
13
+ "config": { "thumbs": 1, "value": 30, "labelledBy": "labelId" },
14
+ "steps": [
15
+ {
16
+ "expect": {
17
+ "attrs": {
18
+ "thumb:0": {
19
+ "role": "slider",
20
+ "aria-valuenow": "30",
21
+ "aria-orientation": "horizontal",
22
+ "aria-labelledby": "labelId",
23
+ "step": "1"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ ],
29
+ "notes": "base-ui renders a hidden input[type=range] as the slider control; role/tag is implementation, the ARIA value/orientation/step contract is what is ported."
30
+ },
31
+ {
32
+ "id": "slider.base-ui.aria-valuenow-updates-on-input-and-arrow",
33
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L198",
34
+ "upstreamTest": "SliderRoot > ARIA attributes > should update aria-valuenow",
35
+ "apg": "aria",
36
+ "config": { "thumbs": 1, "value": 50 },
37
+ "steps": [
38
+ { "event": "focus", "target": "thumb:0" },
39
+ { "event": "type", "target": "thumb:0", "value": 51 },
40
+ { "expect": { "attrs": { "thumb:0": { "aria-valuenow": "51" } } } },
41
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
42
+ { "expect": { "attrs": { "thumb:0": { "aria-valuenow": "52" } } } }
43
+ ]
44
+ },
45
+ {
46
+ "id": "slider.base-ui.aria-valuetext-from-getAriaValueText",
47
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/thumb/SliderThumb.test.tsx#L74",
48
+ "upstreamTest": "SliderThumb > ARIA attributes > prefers getAriaValueText over a direct aria-valuetext prop",
49
+ "apg": "aria",
50
+ "config": { "thumbs": 1, "value": 50, "valueText": "50 percent" },
51
+ "steps": [
52
+ {
53
+ "expect": {
54
+ "attrs": { "thumb:0": { "aria-valuetext": "50 percent" } }
55
+ }
56
+ }
57
+ ],
58
+ "notes": "The formatted text is supplied by the caller; the port asserts only that aria-valuetext reflects the derived text."
59
+ },
60
+ {
61
+ "id": "slider.base-ui.aria-orientation-vertical",
62
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L489",
63
+ "upstreamTest": "SliderRoot > prop: orientation > sets the aria-orientation attribute",
64
+ "apg": "aria",
65
+ "config": { "thumbs": 1, "orientation": "vertical" },
66
+ "steps": [
67
+ {
68
+ "expect": {
69
+ "attrs": { "thumb:0": { "aria-orientation": "vertical" } }
70
+ }
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "id": "slider.base-ui.arrow-right-increments-arrow-left-decrements",
76
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2467",
77
+ "upstreamTest": "SliderRoot > keyboard interactions > ltr horizontal > key: ArrowRight increments the value",
78
+ "apg": "keyboard",
79
+ "config": {
80
+ "thumbs": 1,
81
+ "value": 20,
82
+ "orientation": "horizontal",
83
+ "dir": "ltr"
84
+ },
85
+ "steps": [
86
+ { "event": "focus", "target": "thumb:0" },
87
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
88
+ {
89
+ "expect": {
90
+ "value": 21,
91
+ "attrs": { "thumb:0": { "aria-valuenow": "21" } }
92
+ }
93
+ },
94
+ { "event": "key", "target": "thumb:0", "key": "ArrowLeft" },
95
+ {
96
+ "expect": {
97
+ "value": 20,
98
+ "attrs": { "thumb:0": { "aria-valuenow": "20" } }
99
+ }
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ "id": "slider.base-ui.arrow-up-increments-arrow-down-decrements",
105
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2467",
106
+ "upstreamTest": "SliderRoot > keyboard interactions > ltr horizontal > key: ArrowUp increments the value / ArrowDown decrements the value",
107
+ "apg": "keyboard",
108
+ "config": {
109
+ "thumbs": 1,
110
+ "value": 20,
111
+ "orientation": "horizontal",
112
+ "dir": "ltr"
113
+ },
114
+ "steps": [
115
+ { "event": "focus", "target": "thumb:0" },
116
+ { "event": "key", "target": "thumb:0", "key": "ArrowUp" },
117
+ { "expect": { "value": 21 } },
118
+ { "event": "key", "target": "thumb:0", "key": "ArrowDown" },
119
+ { "expect": { "value": 20 } }
120
+ ]
121
+ },
122
+ {
123
+ "id": "slider.base-ui.rtl-horizontal-arrows-reverse",
124
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2471",
125
+ "upstreamTest": "SliderRoot > keyboard interactions > rtl horizontal > key: ArrowLeft increments the value",
126
+ "apg": "keyboard",
127
+ "config": {
128
+ "thumbs": 1,
129
+ "value": 20,
130
+ "orientation": "horizontal",
131
+ "dir": "rtl"
132
+ },
133
+ "steps": [
134
+ { "event": "focus", "target": "thumb:0" },
135
+ { "event": "key", "target": "thumb:0", "key": "ArrowLeft" },
136
+ {
137
+ "expect": {
138
+ "value": 21,
139
+ "attrs": { "thumb:0": { "aria-valuenow": "21" } }
140
+ }
141
+ },
142
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
143
+ { "expect": { "value": 20 } }
144
+ ],
145
+ "notes": "APG slider does not itself specify RTL arrow reversal; RTL is modelled as the horizontal mirror rule."
146
+ },
147
+ {
148
+ "id": "slider.base-ui.vertical-arrow-up-increments",
149
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2469",
150
+ "upstreamTest": "SliderRoot > keyboard interactions > ltr vertical > key: ArrowUp increments the value",
151
+ "apg": "keyboard",
152
+ "config": {
153
+ "thumbs": 1,
154
+ "value": 20,
155
+ "orientation": "vertical",
156
+ "dir": "ltr"
157
+ },
158
+ "steps": [
159
+ { "event": "focus", "target": "thumb:0" },
160
+ { "event": "key", "target": "thumb:0", "key": "ArrowUp" },
161
+ { "expect": { "value": 21 } },
162
+ { "event": "key", "target": "thumb:0", "key": "ArrowDown" },
163
+ { "expect": { "value": 20 } }
164
+ ]
165
+ },
166
+ {
167
+ "id": "slider.base-ui.keyboard-rounds-fractional-value-to-step",
168
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2617",
169
+ "upstreamTest": "SliderRoot > keyboard interactions > key: ArrowRight rounds fractional values to the configured step",
170
+ "apg": "keyboard",
171
+ "config": { "thumbs": 1, "value": 0.2, "min": 0, "max": 1, "step": 0.1 },
172
+ "steps": [
173
+ { "event": "focus", "target": "thumb:0" },
174
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
175
+ {
176
+ "expect": {
177
+ "value": 0.3,
178
+ "attrs": { "thumb:0": { "aria-valuenow": "0.3" } }
179
+ }
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "id": "slider.base-ui.keyboard-corrects-invalid-value-to-step-grid",
185
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L3039",
186
+ "upstreamTest": "SliderRoot > keyboard interactions > keypresses should correct invalid values",
187
+ "apg": "keyboard",
188
+ "config": {
189
+ "thumbs": 1,
190
+ "value": 5.4698,
191
+ "min": 0,
192
+ "max": 10,
193
+ "step": 1
194
+ },
195
+ "steps": [
196
+ { "expect": { "attrs": { "thumb:0": { "aria-valuenow": "5.4698" } } } },
197
+ { "event": "focus", "target": "thumb:0" },
198
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
199
+ {
200
+ "expect": {
201
+ "value": 6,
202
+ "attrs": { "thumb:0": { "aria-valuenow": "6" } }
203
+ }
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "id": "slider.base-ui.shift-arrow-right-uses-large-step",
209
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2652",
210
+ "upstreamTest": "SliderRoot > keyboard interactions > key: ArrowRight increments the value by largeStep when Shift is pressed",
211
+ "apg": "keyboard",
212
+ "config": { "thumbs": 1, "value": 20, "largeStep": 10 },
213
+ "steps": [
214
+ { "event": "focus", "target": "thumb:0" },
215
+ {
216
+ "event": "key",
217
+ "target": "thumb:0",
218
+ "key": "ArrowRight",
219
+ "modifiers": ["Shift"]
220
+ },
221
+ {
222
+ "expect": {
223
+ "value": 30,
224
+ "attrs": { "thumb:0": { "aria-valuenow": "30" } }
225
+ }
226
+ }
227
+ ]
228
+ },
229
+ {
230
+ "id": "slider.base-ui.shift-arrow-right-clamps-at-max",
231
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2685",
232
+ "upstreamTest": "SliderRoot > keyboard interactions > key: ArrowRight stops at max when incrementing while Shift is pressed",
233
+ "apg": "keyboard",
234
+ "config": { "thumbs": 1, "value": 20, "largeStep": 10, "max": 21 },
235
+ "steps": [
236
+ { "event": "focus", "target": "thumb:0" },
237
+ {
238
+ "event": "key",
239
+ "target": "thumb:0",
240
+ "key": "ArrowRight",
241
+ "modifiers": ["Shift"]
242
+ },
243
+ {
244
+ "expect": {
245
+ "value": 21,
246
+ "attrs": { "thumb:0": { "aria-valuenow": "21" } }
247
+ }
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "id": "slider.base-ui.page-up-page-down-use-large-step",
253
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2866",
254
+ "upstreamTest": "SliderRoot > keyboard interactions > key: PageUp increments the value by largeStep / PageDown decrements",
255
+ "apg": "keyboard",
256
+ "config": { "thumbs": 1, "value": 20, "largeStep": 5 },
257
+ "steps": [
258
+ { "event": "focus", "target": "thumb:0" },
259
+ { "event": "key", "target": "thumb:0", "key": "PageUp" },
260
+ { "expect": { "value": 25 } },
261
+ { "event": "key", "target": "thumb:0", "key": "PageDown" },
262
+ { "expect": { "value": 20 } }
263
+ ]
264
+ },
265
+ {
266
+ "id": "slider.base-ui.page-up-clamps-at-max",
267
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2933",
268
+ "upstreamTest": "SliderRoot > keyboard interactions > key: PageUp does not exceed max",
269
+ "apg": "keyboard",
270
+ "config": { "thumbs": 1, "value": 20, "largeStep": 5, "max": 21 },
271
+ "steps": [
272
+ { "event": "focus", "target": "thumb:0" },
273
+ { "event": "key", "target": "thumb:0", "key": "PageUp" },
274
+ { "expect": { "value": 21 } }
275
+ ]
276
+ },
277
+ {
278
+ "id": "slider.base-ui.home-and-end-jump-to-extremes",
279
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2720",
280
+ "upstreamTest": "SliderRoot > keyboard interactions > key: End sets value to max / key: Home sets value to min",
281
+ "apg": "keyboard",
282
+ "config": { "thumbs": 1, "value": 20, "min": 17, "max": 77 },
283
+ "steps": [
284
+ { "event": "focus", "target": "thumb:0" },
285
+ { "event": "key", "target": "thumb:0", "key": "Home" },
286
+ { "expect": { "value": 17 } },
287
+ { "event": "key", "target": "thumb:0", "key": "End" },
288
+ { "expect": { "value": 77 } }
289
+ ]
290
+ },
291
+ {
292
+ "id": "slider.base-ui.arrow-right-at-max-stays",
293
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L690",
294
+ "upstreamTest": "SliderRoot > prop: max > should not go more than the max",
295
+ "apg": "keyboard",
296
+ "config": { "thumbs": 1, "value": 100, "step": 100, "max": 200 },
297
+ "steps": [
298
+ { "event": "focus", "target": "thumb:0" },
299
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
300
+ { "expect": { "value": 200 } },
301
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
302
+ { "expect": { "value": 200 } }
303
+ ]
304
+ },
305
+ {
306
+ "id": "slider.base-ui.arrow-left-at-min-stays",
307
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L765",
308
+ "upstreamTest": "SliderRoot > prop: min > should not go less than the min",
309
+ "apg": "keyboard",
310
+ "config": { "thumbs": 1, "value": 1, "step": 1, "min": 0 },
311
+ "steps": [
312
+ { "event": "focus", "target": "thumb:0" },
313
+ { "event": "key", "target": "thumb:0", "key": "ArrowLeft" },
314
+ { "expect": { "value": 0 } },
315
+ { "event": "key", "target": "thumb:0", "key": "ArrowLeft" },
316
+ { "expect": { "value": 0 } }
317
+ ]
318
+ },
319
+ {
320
+ "id": "slider.base-ui.input-clamps-to-min-and-max",
321
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/thumb/SliderThumb.test.tsx#L411",
322
+ "upstreamTest": "SliderThumb > change > does not change the value beyond min and max",
323
+ "apg": "aria",
324
+ "config": { "thumbs": 1, "value": 50, "min": 40, "max": 60 },
325
+ "steps": [
326
+ { "event": "type", "target": "thumb:0", "value": 30 },
327
+ { "expect": { "value": 40, "events": { "onValueChange": [[40]] } } },
328
+ { "event": "type", "target": "thumb:0", "value": 30 },
329
+ { "expect": { "value": 40 } },
330
+ { "event": "type", "target": "thumb:0", "value": 70 },
331
+ {
332
+ "expect": { "value": 60, "events": { "onValueChange": [[40], [60]] } }
333
+ },
334
+ { "event": "type", "target": "thumb:0", "value": 70 },
335
+ { "expect": { "value": 60 } }
336
+ ]
337
+ },
338
+ {
339
+ "id": "slider.base-ui.pointer-track-press-sets-value-and-focus",
340
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L1465",
341
+ "upstreamTest": "SliderRoot > events > should call handlers (track press)",
342
+ "apg": "pointer",
343
+ "config": { "thumbs": 1, "value": 0 },
344
+ "steps": [
345
+ { "event": "pointerdown", "target": "track", "position": 0.1 },
346
+ { "event": "pointerup", "target": "track", "position": 0.1 },
347
+ {
348
+ "expect": {
349
+ "value": 10,
350
+ "focus": "thumb:0",
351
+ "events": {
352
+ "onValueChange": [
353
+ [10, { "activeThumbIndex": 0, "reason": "trackPress" }]
354
+ ],
355
+ "onValueCommitted": [[10, { "reason": "trackPress" }]]
356
+ }
357
+ }
358
+ }
359
+ ],
360
+ "notes": "position is a fraction of the track's length; base-ui width was 100px so 0.1 maps to value 10."
361
+ },
362
+ {
363
+ "id": "slider.base-ui.pointer-track-drag-clamps-to-bounds",
364
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L703",
365
+ "upstreamTest": "SliderRoot > prop: max > should reach right edge value",
366
+ "apg": "pointer",
367
+ "config": { "thumbs": 1, "value": 90, "min": 6, "max": 108, "step": 10 },
368
+ "steps": [
369
+ { "event": "pointerdown", "target": "track", "position": 0.2 },
370
+ { "event": "pointermove", "target": "track", "position": 1.0 },
371
+ { "expect": { "value": 106 } },
372
+ { "event": "pointermove", "target": "track", "position": 2.0 },
373
+ { "expect": { "value": 106 } },
374
+ { "event": "pointermove", "target": "track", "position": 0.5 },
375
+ { "expect": { "value": 56 } },
376
+ { "event": "pointermove", "target": "track", "position": -1.0 },
377
+ { "expect": { "value": 6 } }
378
+ ]
379
+ },
380
+ {
381
+ "id": "slider.base-ui.pointer-down-on-thumb-does-not-change-value",
382
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L1938",
383
+ "upstreamTest": "SliderRoot > prop: onValueChange > is not called when clicking on the thumb",
384
+ "apg": "pointer",
385
+ "config": { "thumbs": 1, "value": 50 },
386
+ "steps": [
387
+ { "event": "pointerdown", "target": "thumb:0", "position": 0.51 },
388
+ { "expect": { "value": 50, "events": { "onValueChange": [] } } }
389
+ ]
390
+ },
391
+ {
392
+ "id": "slider.base-ui.right-click-on-track-does-not-change-value",
393
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L1955",
394
+ "upstreamTest": "SliderRoot > prop: onValueChange > should not react to right clicks",
395
+ "apg": "pointer",
396
+ "config": { "thumbs": 1, "value": 50 },
397
+ "steps": [
398
+ {
399
+ "event": "pointerdown",
400
+ "target": "track",
401
+ "position": 0.41,
402
+ "button": 2
403
+ },
404
+ { "expect": { "value": 50, "events": { "onValueChange": [] } } }
405
+ ]
406
+ },
407
+ {
408
+ "id": "slider.base-ui.pointer-drag-snaps-to-step",
409
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L573",
410
+ "upstreamTest": "SliderRoot > prop: step > should round value to step precision",
411
+ "apg": "pointer",
412
+ "config": { "thumbs": 1, "value": 0.2, "min": 0, "max": 1, "step": 0.1 },
413
+ "steps": [
414
+ { "event": "pointerdown", "target": "track", "position": 0.2 },
415
+ { "event": "pointermove", "target": "track", "position": 0.8 },
416
+ {
417
+ "expect": {
418
+ "value": 0.8,
419
+ "attrs": { "thumb:0": { "aria-valuenow": "0.8" } }
420
+ }
421
+ },
422
+ { "event": "pointermove", "target": "track", "position": 0.4 },
423
+ {
424
+ "expect": {
425
+ "value": 0.4,
426
+ "attrs": { "thumb:0": { "aria-valuenow": "0.4" } }
427
+ }
428
+ }
429
+ ]
430
+ },
431
+ {
432
+ "id": "slider.base-ui.rtl-pointer-drag-mirrors-value",
433
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L224",
434
+ "upstreamTest": "SliderRoot > rtl > should handle RTL",
435
+ "apg": "pointer",
436
+ "config": {
437
+ "thumbs": 1,
438
+ "value": 30,
439
+ "dir": "rtl",
440
+ "min": 0,
441
+ "max": 100
442
+ },
443
+ "steps": [
444
+ { "event": "pointerdown", "target": "track", "position": 0.2 },
445
+ { "event": "pointermove", "target": "track", "position": 0.22 },
446
+ {
447
+ "expect": {
448
+ "value": 78,
449
+ "events": {
450
+ "onValueChange": [[80], [78]]
451
+ }
452
+ }
453
+ }
454
+ ],
455
+ "notes": "Upstream drives this with touch events and asserts the mirrored values 80 then 78; ported as pointer with the same track fractions."
456
+ },
457
+ {
458
+ "id": "slider.base-ui.callback-reason-for-input-change",
459
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L1971",
460
+ "upstreamTest": "SliderRoot > prop: onValueChange > provides the change reason for input events",
461
+ "apg": "extension",
462
+ "config": { "thumbs": 1, "value": 30 },
463
+ "steps": [
464
+ { "event": "type", "target": "thumb:0", "value": 35 },
465
+ {
466
+ "expect": {
467
+ "events": {
468
+ "onValueChange": [
469
+ [35, { "reason": "inputChange", "activeThumbIndex": 0 }]
470
+ ]
471
+ }
472
+ }
473
+ }
474
+ ]
475
+ },
476
+ {
477
+ "id": "slider.base-ui.callback-reason-for-keyboard-change",
478
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L1987",
479
+ "upstreamTest": "SliderRoot > prop: onValueChange > provides the change reason for keyboard interactions",
480
+ "apg": "extension",
481
+ "config": { "thumbs": 1, "value": 40 },
482
+ "steps": [
483
+ { "event": "focus", "target": "thumb:0" },
484
+ { "event": "key", "target": "thumb:0", "key": "ArrowRight" },
485
+ {
486
+ "expect": {
487
+ "events": { "onValueChange": [[41, { "reason": "keyboard" }]] }
488
+ }
489
+ }
490
+ ]
491
+ },
492
+ {
493
+ "id": "slider.base-ui.value-change-only-when-value-changes",
494
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L2231",
495
+ "upstreamTest": "SliderRoot > prop: onValueChange > should fire only when the value changes",
496
+ "apg": "extension",
497
+ "config": { "thumbs": 1, "value": 20 },
498
+ "steps": [
499
+ { "event": "pointerdown", "target": "track", "position": 0.21 },
500
+ { "event": "pointermove", "target": "track", "position": 0.22 },
501
+ { "event": "pointermove", "target": "track", "position": 0.22 },
502
+ {
503
+ "expect": { "value": 22, "events": { "onValueChange": [[21], [22]] } }
504
+ }
505
+ ]
506
+ },
507
+ {
508
+ "id": "slider.base-ui.disabled-single-thumb-ignores-track-press",
509
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/root/SliderRoot.test.tsx#L427",
510
+ "upstreamTest": "SliderRoot > prop: disabled > does not change a single disabled thumb when pressing the track",
511
+ "apg": "extension",
512
+ "config": { "thumbs": 1, "value": 20, "disabled": true },
513
+ "steps": [
514
+ { "event": "pointerdown", "target": "track", "position": 0.8 },
515
+ { "event": "pointerup", "target": "track", "position": 0.8 },
516
+ { "expect": { "value": 20, "events": { "onValueChange": [] } } }
517
+ ]
518
+ },
519
+ {
520
+ "id": "slider.base-ui.thumb-in-tab-sequence",
521
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/thumb/SliderThumb.test.tsx#L469",
522
+ "upstreamTest": "SliderThumb > prop: tabIndex > does not apply tabIndex to the thumb element by default",
523
+ "apg": "keyboard",
524
+ "config": { "thumbs": 1, "value": 50 },
525
+ "steps": [{ "expect": { "attrs": { "thumb:0": { "tabindex": "0" } } } }]
526
+ },
527
+ {
528
+ "id": "slider.base-ui.thumb-removed-from-tab-sequence",
529
+ "upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/slider/thumb/SliderThumb.test.tsx#L483",
530
+ "upstreamTest": "SliderThumb > prop: tabIndex > can be removed from the tab sequence",
531
+ "apg": "keyboard",
532
+ "config": { "thumbs": 1, "value": 50, "thumbTabIndex": -1 },
533
+ "steps": [
534
+ { "event": "key", "target": "body", "key": "Tab" },
535
+ {
536
+ "expect": {
537
+ "focus": null,
538
+ "attrs": { "thumb:0": { "tabindex": "-1" } }
539
+ }
540
+ }
541
+ ]
542
+ }
543
+ ]
544
+ }