@cdx-ui/components 0.2.2 → 0.2.4

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 (373) hide show
  1. package/AGENTS.md +24 -0
  2. package/README.md +6 -2
  3. package/coverage.svg +1 -1
  4. package/docs/components/accordion/content.md +538 -0
  5. package/docs/components/alert/content.md +203 -0
  6. package/docs/components/alert-dialog/content.md +319 -0
  7. package/docs/components/avatar/content.md +368 -0
  8. package/docs/components/avatar/design.md +202 -0
  9. package/docs/components/badge/content.md +235 -0
  10. package/docs/components/bottom-sheet/content.md +351 -0
  11. package/docs/components/bottom-sheet/design.md +249 -0
  12. package/docs/components/breadcrumbs/content.md +169 -0
  13. package/docs/components/button/content.md +398 -0
  14. package/docs/components/button/design.md +258 -0
  15. package/docs/components/calendar/content.md +137 -0
  16. package/docs/components/card/content.md +283 -0
  17. package/docs/components/carousel/content.md +416 -0
  18. package/docs/components/checkbox/content.md +236 -0
  19. package/docs/components/checkbox/design.md +214 -0
  20. package/docs/components/chip/content.md +439 -0
  21. package/docs/components/chip/design.md +418 -0
  22. package/docs/components/color-area/content.md +86 -0
  23. package/docs/components/color-field/content.md +134 -0
  24. package/docs/components/color-picker/content.md +208 -0
  25. package/docs/components/color-slider/content.md +120 -0
  26. package/docs/components/color-swatch/content.md +64 -0
  27. package/docs/components/color-swatch-picker/content.md +126 -0
  28. package/docs/components/content.md +97 -0
  29. package/docs/components/currency-input/content.md +205 -0
  30. package/docs/components/data-grid/content.md +522 -0
  31. package/docs/components/date-field/content.md +147 -0
  32. package/docs/components/date-picker/content.md +360 -0
  33. package/docs/components/date-range-picker/content.md +301 -0
  34. package/docs/components/date-time-field/content.md +157 -0
  35. package/docs/components/date-time-list/content.md +105 -0
  36. package/docs/components/date-time-picker/content.md +272 -0
  37. package/docs/components/dialog/content.md +436 -0
  38. package/docs/components/dialog/design.md +192 -0
  39. package/docs/components/divider/content.md +112 -0
  40. package/docs/components/drawer/content.md +436 -0
  41. package/docs/components/field/content.md +277 -0
  42. package/docs/components/form/content.md +62 -0
  43. package/docs/components/full-screen-dialog/content.md +881 -0
  44. package/docs/components/heading/content.md +55 -0
  45. package/docs/components/icon/content.md +190 -0
  46. package/docs/components/icon-button/content.md +200 -0
  47. package/docs/components/icon-button/design.md +165 -0
  48. package/docs/components/image/content.md +104 -0
  49. package/docs/components/input/content.md +281 -0
  50. package/docs/components/input/design.md +389 -0
  51. package/docs/components/insurance-disclosure/content.md +103 -0
  52. package/docs/components/link/content.md +180 -0
  53. package/docs/components/link/design.md +160 -0
  54. package/docs/components/list-item/content.md +695 -0
  55. package/docs/components/menu/content.md +1247 -0
  56. package/docs/components/month-calendar/content.md +84 -0
  57. package/docs/components/month-picker/content.md +273 -0
  58. package/docs/components/otp-input/content.md +327 -0
  59. package/docs/components/progress-bar/content.md +87 -0
  60. package/docs/components/progress-circle/content.md +176 -0
  61. package/docs/components/progress-segmented/content.md +119 -0
  62. package/docs/components/quick-action-button/content.md +154 -0
  63. package/docs/components/quick-action-button/design.md +170 -0
  64. package/docs/components/radio/content.md +224 -0
  65. package/docs/components/range-calendar/content.md +123 -0
  66. package/docs/components/reorderable-list/content.md +309 -0
  67. package/docs/components/scoped-theme/content.md +47 -0
  68. package/docs/components/scroll-shadow/content.md +686 -0
  69. package/docs/components/select/content.md +400 -0
  70. package/docs/components/select/design.md +301 -0
  71. package/docs/components/skeleton/content.md +103 -0
  72. package/docs/components/slider/content.md +423 -0
  73. package/docs/components/stack/content.md +161 -0
  74. package/docs/components/switch/content.md +150 -0
  75. package/docs/components/switch/design.md +208 -0
  76. package/docs/components/table/content.md +548 -0
  77. package/docs/components/table-pagination/content.md +177 -0
  78. package/docs/components/tabs/content.md +292 -0
  79. package/docs/components/text/content.md +142 -0
  80. package/docs/components/textarea/content.md +222 -0
  81. package/docs/components/tile/content.md +703 -0
  82. package/docs/components/toast/content.md +456 -0
  83. package/docs/components/toggle-button/content.md +505 -0
  84. package/docs/components/tooltip/content.md +350 -0
  85. package/docs/components/virtualized-list/content.md +250 -0
  86. package/docs/foundations/content.md +9 -0
  87. package/docs/foundations/expressions/icons/content.md +19 -0
  88. package/docs/foundations/styles/tokens/all-tokens/content.md +192 -0
  89. package/docs/foundations/styles/tokens/what-are-tokens/content.md +33 -0
  90. package/docs/foundations/styles/tokens/what-are-tokens/design.md +33 -0
  91. package/docs/getting-started/content.md +4 -0
  92. package/docs/getting-started/designers/content.md +13 -0
  93. package/docs/getting-started/designers/design.md +13 -0
  94. package/docs/getting-started/developers/accessibility/content.md +31 -0
  95. package/docs/getting-started/developers/content.md +612 -0
  96. package/docs/getting-started/developers/styling/content.md +193 -0
  97. package/docs/llms.txt +193 -0
  98. package/docs/patterns/account-management/content.md +75 -0
  99. package/docs/patterns/authentication/content.md +52 -0
  100. package/docs/patterns/content.md +10 -0
  101. package/docs/patterns/dashboard/content.md +39 -0
  102. package/docs/patterns/empty-states/content.md +31 -0
  103. package/docs/patterns/forms/content.md +109 -0
  104. package/docs/patterns/onboarding/content.md +69 -0
  105. package/docs/patterns/payments/content.md +35 -0
  106. package/docs/patterns/settings/content.md +72 -0
  107. package/docs/resources/content.md +9 -0
  108. package/docs/resources/figma-libraries/content.md +42 -0
  109. package/docs/resources/release-notes/0.0.1-beta.118/content.md +27 -0
  110. package/docs/resources/release-notes/0.0.1-beta.122/content.md +21 -0
  111. package/docs/resources/release-notes/0.0.1-beta.124/content.md +16 -0
  112. package/docs/resources/release-notes/0.0.1-beta.126/content.md +10 -0
  113. package/docs/resources/release-notes/0.0.1-beta.127/content.md +14 -0
  114. package/docs/resources/release-notes/0.0.1-beta.128/content.md +9 -0
  115. package/docs/resources/release-notes/0.0.1-beta.129/content.md +18 -0
  116. package/docs/resources/release-notes/0.0.1-beta.130/content.md +18 -0
  117. package/docs/resources/release-notes/0.0.1-beta.133/content.md +7 -0
  118. package/docs/resources/release-notes/0.0.1-beta.134/content.md +17 -0
  119. package/docs/resources/release-notes/0.0.1-beta.136/content.md +7 -0
  120. package/docs/resources/release-notes/0.0.1-beta.137/content.md +10 -0
  121. package/docs/resources/release-notes/0.0.1-beta.138/content.md +7 -0
  122. package/docs/resources/release-notes/0.0.1-beta.139/content.md +13 -0
  123. package/docs/resources/release-notes/0.0.1-beta.140/content.md +26 -0
  124. package/docs/resources/release-notes/0.0.1-beta.141/content.md +63 -0
  125. package/docs/resources/release-notes/0.0.1-beta.142/content.md +7 -0
  126. package/docs/resources/release-notes/0.0.1-beta.143/content.md +12 -0
  127. package/docs/resources/release-notes/0.0.1-beta.144/content.md +7 -0
  128. package/docs/resources/release-notes/0.0.1-beta.145/content.md +7 -0
  129. package/docs/resources/release-notes/0.0.1-beta.147/content.md +10 -0
  130. package/docs/resources/release-notes/0.0.1-beta.149/content.md +10 -0
  131. package/docs/resources/release-notes/0.0.1-beta.150/content.md +13 -0
  132. package/docs/resources/release-notes/0.0.1-beta.152/content.md +7 -0
  133. package/docs/resources/release-notes/0.0.1-beta.154/content.md +15 -0
  134. package/docs/resources/release-notes/0.0.1-beta.156/content.md +7 -0
  135. package/docs/resources/release-notes/0.0.1-beta.158/content.md +9 -0
  136. package/docs/resources/release-notes/0.0.1-beta.159/content.md +11 -0
  137. package/docs/resources/release-notes/0.0.1-beta.160/content.md +7 -0
  138. package/docs/resources/release-notes/0.0.1-beta.161/content.md +7 -0
  139. package/docs/resources/release-notes/0.0.1-beta.163/content.md +7 -0
  140. package/docs/resources/release-notes/0.0.1-beta.164/content.md +9 -0
  141. package/docs/resources/release-notes/0.0.1-beta.166/content.md +17 -0
  142. package/docs/resources/release-notes/0.0.1-beta.167/content.md +7 -0
  143. package/docs/resources/release-notes/0.0.1-beta.168/content.md +7 -0
  144. package/docs/resources/release-notes/0.0.1-beta.169/content.md +7 -0
  145. package/docs/resources/release-notes/0.0.1-beta.171/content.md +16 -0
  146. package/docs/resources/release-notes/0.0.1-beta.172/content.md +24 -0
  147. package/docs/resources/release-notes/0.0.1-beta.173/content.md +15 -0
  148. package/docs/resources/release-notes/0.0.1-beta.174/content.md +7 -0
  149. package/docs/resources/release-notes/0.0.1-beta.176/content.md +32 -0
  150. package/docs/resources/release-notes/0.0.1-beta.179/content.md +11 -0
  151. package/docs/resources/release-notes/0.0.1-beta.182/content.md +13 -0
  152. package/docs/resources/release-notes/0.0.1-beta.185/content.md +7 -0
  153. package/docs/resources/release-notes/0.0.1-beta.187/content.md +27 -0
  154. package/docs/resources/release-notes/0.1.1/content.md +23 -0
  155. package/docs/resources/release-notes/0.1.2/content.md +7 -0
  156. package/docs/resources/release-notes/0.1.4/content.md +19 -0
  157. package/docs/resources/release-notes/0.1.5/content.md +7 -0
  158. package/docs/resources/release-notes/0.1.6/content.md +7 -0
  159. package/docs/resources/release-notes/0.2.0/content.md +31 -0
  160. package/docs/resources/release-notes/0.2.1/content.md +17 -0
  161. package/docs/resources/release-notes/0.2.2/content.md +11 -0
  162. package/docs/resources/release-notes/0.2.3/content.md +15 -0
  163. package/docs/resources/release-notes/content.md +64 -0
  164. package/lib/commonjs/components/Checkbox/index.js.map +1 -1
  165. package/lib/commonjs/components/DateTimeList/index.js +11 -26
  166. package/lib/commonjs/components/DateTimeList/index.js.map +1 -1
  167. package/lib/commonjs/components/DateTimeList/styles.js +2 -12
  168. package/lib/commonjs/components/DateTimeList/styles.js.map +1 -1
  169. package/lib/commonjs/components/Heading/index.js.map +1 -1
  170. package/lib/commonjs/components/Icon/index.js.map +1 -1
  171. package/lib/commonjs/components/ListItem/index.js +170 -9
  172. package/lib/commonjs/components/ListItem/index.js.map +1 -1
  173. package/lib/commonjs/components/ListItem/styles.js +38 -2
  174. package/lib/commonjs/components/ListItem/styles.js.map +1 -1
  175. package/lib/commonjs/components/Menu/index.js +11 -5
  176. package/lib/commonjs/components/Menu/index.js.map +1 -1
  177. package/lib/commonjs/components/RangeCalendar/index.js.map +1 -1
  178. package/lib/commonjs/components/ReorderableList/ReorderableListShared.js +91 -0
  179. package/lib/commonjs/components/ReorderableList/ReorderableListShared.js.map +1 -0
  180. package/lib/commonjs/components/ReorderableList/index.js +135 -0
  181. package/lib/commonjs/components/ReorderableList/index.js.map +1 -0
  182. package/lib/commonjs/components/ReorderableList/index.web.js +233 -0
  183. package/lib/commonjs/components/ReorderableList/index.web.js.map +1 -0
  184. package/lib/commonjs/components/ReorderableList/labels.js +47 -0
  185. package/lib/commonjs/components/ReorderableList/labels.js.map +1 -0
  186. package/lib/commonjs/components/ReorderableList/reorderItems.js +16 -0
  187. package/lib/commonjs/components/ReorderableList/reorderItems.js.map +1 -0
  188. package/lib/commonjs/components/ReorderableList/rowContext.js +42 -0
  189. package/lib/commonjs/components/ReorderableList/rowContext.js.map +1 -0
  190. package/lib/commonjs/components/ReorderableList/types.js +6 -0
  191. package/lib/commonjs/components/ReorderableList/types.js.map +1 -0
  192. package/lib/commonjs/components/ReorderableList/useReorder.js +131 -0
  193. package/lib/commonjs/components/ReorderableList/useReorder.js.map +1 -0
  194. package/lib/commonjs/components/ReorderableList/webDnd.js +64 -0
  195. package/lib/commonjs/components/ReorderableList/webDnd.js.map +1 -0
  196. package/lib/commonjs/components/ScopedTheme/index.js.map +1 -1
  197. package/lib/commonjs/components/ScrollShadow/gradient.js +29 -0
  198. package/lib/commonjs/components/ScrollShadow/gradient.js.map +1 -0
  199. package/lib/commonjs/components/ScrollShadow/index.js +171 -44
  200. package/lib/commonjs/components/ScrollShadow/index.js.map +1 -1
  201. package/lib/commonjs/components/ScrollShadow/styles.js +58 -14
  202. package/lib/commonjs/components/ScrollShadow/styles.js.map +1 -1
  203. package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js +63 -0
  204. package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
  205. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +48 -8
  206. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -1
  207. package/lib/commonjs/components/Skeleton/index.js.map +1 -1
  208. package/lib/commonjs/components/TablePagination/index.js.map +1 -1
  209. package/lib/commonjs/components/Tabs/index.js +16 -23
  210. package/lib/commonjs/components/Tabs/index.js.map +1 -1
  211. package/lib/commonjs/components/Tabs/styles.js +1 -10
  212. package/lib/commonjs/components/Tabs/styles.js.map +1 -1
  213. package/lib/commonjs/components/Text/index.js.map +1 -1
  214. package/lib/commonjs/components/Tile/styles.js +1 -1
  215. package/lib/commonjs/components/Tile/styles.js.map +1 -1
  216. package/lib/commonjs/components/index.js.map +1 -1
  217. package/lib/commonjs/figma/ListItem.SectionHeader.figma.js +20 -5
  218. package/lib/commonjs/figma/ListItem.SectionHeader.figma.js.map +1 -1
  219. package/lib/commonjs/reorderable-list.js +17 -0
  220. package/lib/commonjs/reorderable-list.js.map +1 -0
  221. package/lib/module/components/Checkbox/index.js.map +1 -1
  222. package/lib/module/components/DateTimeList/index.js +12 -27
  223. package/lib/module/components/DateTimeList/index.js.map +1 -1
  224. package/lib/module/components/DateTimeList/styles.js +1 -11
  225. package/lib/module/components/DateTimeList/styles.js.map +1 -1
  226. package/lib/module/components/Heading/index.js.map +1 -1
  227. package/lib/module/components/Icon/index.js.map +1 -1
  228. package/lib/module/components/ListItem/index.js +163 -14
  229. package/lib/module/components/ListItem/index.js.map +1 -1
  230. package/lib/module/components/ListItem/styles.js +37 -1
  231. package/lib/module/components/ListItem/styles.js.map +1 -1
  232. package/lib/module/components/Menu/index.js +11 -5
  233. package/lib/module/components/Menu/index.js.map +1 -1
  234. package/lib/module/components/RangeCalendar/index.js.map +1 -1
  235. package/lib/module/components/ReorderableList/ReorderableListShared.js +86 -0
  236. package/lib/module/components/ReorderableList/ReorderableListShared.js.map +1 -0
  237. package/lib/module/components/ReorderableList/index.js +130 -0
  238. package/lib/module/components/ReorderableList/index.js.map +1 -0
  239. package/lib/module/components/ReorderableList/index.web.js +229 -0
  240. package/lib/module/components/ReorderableList/index.web.js.map +1 -0
  241. package/lib/module/components/ReorderableList/labels.js +41 -0
  242. package/lib/module/components/ReorderableList/labels.js.map +1 -0
  243. package/lib/module/components/ReorderableList/reorderItems.js +12 -0
  244. package/lib/module/components/ReorderableList/reorderItems.js.map +1 -0
  245. package/lib/module/components/ReorderableList/rowContext.js +38 -0
  246. package/lib/module/components/ReorderableList/rowContext.js.map +1 -0
  247. package/lib/module/components/ReorderableList/types.js +4 -0
  248. package/lib/module/components/ReorderableList/types.js.map +1 -0
  249. package/lib/module/components/ReorderableList/useReorder.js +123 -0
  250. package/lib/module/components/ReorderableList/useReorder.js.map +1 -0
  251. package/lib/module/components/ReorderableList/webDnd.js +59 -0
  252. package/lib/module/components/ReorderableList/webDnd.js.map +1 -0
  253. package/lib/module/components/ScopedTheme/index.js.map +1 -1
  254. package/lib/module/components/ScrollShadow/gradient.js +24 -0
  255. package/lib/module/components/ScrollShadow/gradient.js.map +1 -0
  256. package/lib/module/components/ScrollShadow/index.js +170 -48
  257. package/lib/module/components/ScrollShadow/index.js.map +1 -1
  258. package/lib/module/components/ScrollShadow/styles.js +57 -13
  259. package/lib/module/components/ScrollShadow/styles.js.map +1 -1
  260. package/lib/module/components/ScrollShadow/useComposedScrollHandler.js +57 -0
  261. package/lib/module/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
  262. package/lib/module/components/ScrollShadow/useScrollShadow.js +46 -8
  263. package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -1
  264. package/lib/module/components/Skeleton/index.js.map +1 -1
  265. package/lib/module/components/TablePagination/index.js.map +1 -1
  266. package/lib/module/components/Tabs/index.js +17 -24
  267. package/lib/module/components/Tabs/index.js.map +1 -1
  268. package/lib/module/components/Tabs/styles.js +0 -9
  269. package/lib/module/components/Tabs/styles.js.map +1 -1
  270. package/lib/module/components/Text/index.js.map +1 -1
  271. package/lib/module/components/Tile/styles.js +1 -1
  272. package/lib/module/components/Tile/styles.js.map +1 -1
  273. package/lib/module/components/index.js.map +1 -1
  274. package/lib/module/figma/ListItem.SectionHeader.figma.js +20 -5
  275. package/lib/module/figma/ListItem.SectionHeader.figma.js.map +1 -1
  276. package/lib/module/reorderable-list.js +4 -0
  277. package/lib/module/reorderable-list.js.map +1 -0
  278. package/lib/typescript/components/Checkbox/index.d.ts +22 -0
  279. package/lib/typescript/components/Checkbox/index.d.ts.map +1 -1
  280. package/lib/typescript/components/DateTimeList/index.d.ts.map +1 -1
  281. package/lib/typescript/components/DateTimeList/styles.d.ts +1 -4
  282. package/lib/typescript/components/DateTimeList/styles.d.ts.map +1 -1
  283. package/lib/typescript/components/Heading/index.d.ts +20 -2
  284. package/lib/typescript/components/Heading/index.d.ts.map +1 -1
  285. package/lib/typescript/components/Icon/index.d.ts +2 -0
  286. package/lib/typescript/components/Icon/index.d.ts.map +1 -1
  287. package/lib/typescript/components/ListItem/index.d.ts +28 -5
  288. package/lib/typescript/components/ListItem/index.d.ts.map +1 -1
  289. package/lib/typescript/components/ListItem/styles.d.ts +6 -1
  290. package/lib/typescript/components/ListItem/styles.d.ts.map +1 -1
  291. package/lib/typescript/components/Menu/index.d.ts +116 -4
  292. package/lib/typescript/components/Menu/index.d.ts.map +1 -1
  293. package/lib/typescript/components/RangeCalendar/index.d.ts +2 -0
  294. package/lib/typescript/components/RangeCalendar/index.d.ts.map +1 -1
  295. package/lib/typescript/components/ReorderableList/ReorderableListShared.d.ts +31 -0
  296. package/lib/typescript/components/ReorderableList/ReorderableListShared.d.ts.map +1 -0
  297. package/lib/typescript/components/ReorderableList/index.d.ts +8 -0
  298. package/lib/typescript/components/ReorderableList/index.d.ts.map +1 -0
  299. package/lib/typescript/components/ReorderableList/index.web.d.ts +8 -0
  300. package/lib/typescript/components/ReorderableList/index.web.d.ts.map +1 -0
  301. package/lib/typescript/components/ReorderableList/labels.d.ts +16 -0
  302. package/lib/typescript/components/ReorderableList/labels.d.ts.map +1 -0
  303. package/lib/typescript/components/ReorderableList/reorderItems.d.ts +3 -0
  304. package/lib/typescript/components/ReorderableList/reorderItems.d.ts.map +1 -0
  305. package/lib/typescript/components/ReorderableList/rowContext.d.ts +57 -0
  306. package/lib/typescript/components/ReorderableList/rowContext.d.ts.map +1 -0
  307. package/lib/typescript/components/ReorderableList/types.d.ts +75 -0
  308. package/lib/typescript/components/ReorderableList/types.d.ts.map +1 -0
  309. package/lib/typescript/components/ReorderableList/useReorder.d.ts +31 -0
  310. package/lib/typescript/components/ReorderableList/useReorder.d.ts.map +1 -0
  311. package/lib/typescript/components/ReorderableList/webDnd.d.ts +27 -0
  312. package/lib/typescript/components/ReorderableList/webDnd.d.ts.map +1 -0
  313. package/lib/typescript/components/ScopedTheme/index.d.ts +6 -1
  314. package/lib/typescript/components/ScopedTheme/index.d.ts.map +1 -1
  315. package/lib/typescript/components/ScrollShadow/gradient.d.ts +7 -0
  316. package/lib/typescript/components/ScrollShadow/gradient.d.ts.map +1 -0
  317. package/lib/typescript/components/ScrollShadow/index.d.ts +57 -15
  318. package/lib/typescript/components/ScrollShadow/index.d.ts.map +1 -1
  319. package/lib/typescript/components/ScrollShadow/styles.d.ts +8 -2
  320. package/lib/typescript/components/ScrollShadow/styles.d.ts.map +1 -1
  321. package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts +13 -0
  322. package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts.map +1 -0
  323. package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts +15 -2
  324. package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -1
  325. package/lib/typescript/components/Skeleton/index.d.ts +3 -0
  326. package/lib/typescript/components/Skeleton/index.d.ts.map +1 -1
  327. package/lib/typescript/components/TablePagination/index.d.ts +54 -0
  328. package/lib/typescript/components/TablePagination/index.d.ts.map +1 -1
  329. package/lib/typescript/components/Tabs/index.d.ts.map +1 -1
  330. package/lib/typescript/components/Tabs/styles.d.ts +0 -7
  331. package/lib/typescript/components/Tabs/styles.d.ts.map +1 -1
  332. package/lib/typescript/components/Text/index.d.ts +12 -2
  333. package/lib/typescript/components/Text/index.d.ts.map +1 -1
  334. package/lib/typescript/components/Tile/styles.d.ts.map +1 -1
  335. package/lib/typescript/components/ToggleButton/styles.d.ts +1 -1
  336. package/lib/typescript/components/index.d.ts +1 -0
  337. package/lib/typescript/components/index.d.ts.map +1 -1
  338. package/lib/typescript/figma/ListItem.SectionHeader.figma.d.ts.map +1 -1
  339. package/lib/typescript/reorderable-list.d.ts +2 -0
  340. package/lib/typescript/reorderable-list.d.ts.map +1 -0
  341. package/package.json +37 -8
  342. package/src/components/Checkbox/index.tsx +22 -0
  343. package/src/components/DateTimeList/index.tsx +13 -26
  344. package/src/components/DateTimeList/styles.ts +1 -10
  345. package/src/components/Heading/index.tsx +10 -1
  346. package/src/components/Icon/index.tsx +2 -0
  347. package/src/components/ListItem/index.tsx +232 -15
  348. package/src/components/ListItem/styles.ts +41 -0
  349. package/src/components/Menu/index.tsx +128 -12
  350. package/src/components/RangeCalendar/index.tsx +2 -0
  351. package/src/components/ReorderableList/ReorderableListShared.tsx +113 -0
  352. package/src/components/ReorderableList/index.tsx +162 -0
  353. package/src/components/ReorderableList/index.web.tsx +254 -0
  354. package/src/components/ReorderableList/labels.ts +52 -0
  355. package/src/components/ReorderableList/reorderItems.ts +16 -0
  356. package/src/components/ReorderableList/rowContext.tsx +72 -0
  357. package/src/components/ReorderableList/types.ts +80 -0
  358. package/src/components/ReorderableList/useReorder.ts +159 -0
  359. package/src/components/ReorderableList/webDnd.ts +60 -0
  360. package/src/components/ScopedTheme/index.tsx +6 -1
  361. package/src/components/ScrollShadow/gradient.ts +48 -0
  362. package/src/components/ScrollShadow/index.tsx +300 -69
  363. package/src/components/ScrollShadow/styles.ts +45 -28
  364. package/src/components/ScrollShadow/useComposedScrollHandler.ts +58 -0
  365. package/src/components/ScrollShadow/useScrollShadow.ts +72 -10
  366. package/src/components/Skeleton/index.tsx +3 -0
  367. package/src/components/TablePagination/index.tsx +54 -0
  368. package/src/components/Tabs/index.tsx +25 -35
  369. package/src/components/Tabs/styles.ts +0 -9
  370. package/src/components/Text/index.tsx +6 -1
  371. package/src/components/Tile/styles.ts +4 -1
  372. package/src/components/index.ts +5 -0
  373. package/src/reorderable-list.ts +1 -0
@@ -0,0 +1,505 @@
1
+ # Toggle Button (https://design.candescent.com/docs/components/toggle-button)
2
+
3
+ Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-togglebutton--default)
4
+
5
+ A compound component with sub-components for label, icon, and grouping. Use a toggle button when the pressed state should persist — not a [Switch](https://design.candescent.com/docs/components/switch/content.md) (a settings on/off control) and not a [Tile](https://design.candescent.com/docs/components/tile/content.md) (a pick-from-a-list card).
6
+
7
+ ```tsx
8
+ import { ToggleButton } from '@cdx-ui/components';
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ A standalone toggle. Selection is controlled here with `isSelected` and `onSelectedChange`.
14
+
15
+ ```tsx
16
+ import { useState } from 'react';
17
+ import { ToggleButton } from '@cdx-ui/components';
18
+ import { Star } from '@cdx-ui/icons';
19
+
20
+ export default function ToggleButtonBasicDemo() {
21
+ const [favorite, setFavorite] = useState(false);
22
+
23
+ return (
24
+ <ToggleButton value="favorite-payee" isSelected={favorite} onSelectedChange={setFavorite}>
25
+ <ToggleButton.Icon as={Star} position="leading" />
26
+ <ToggleButton.Label>Favorite payee</ToggleButton.Label>
27
+ </ToggleButton>
28
+ );
29
+ }
30
+ ```
31
+
32
+ ## Variants
33
+
34
+ ```tsx
35
+ import { ToggleButton, VStack } from '@cdx-ui/components';
36
+ import { BarChart, PieChart, ShowChart } from '@cdx-ui/icons';
37
+
38
+ export default function ToggleButtonVariantsDemo() {
39
+ return (
40
+ <VStack space="lg">
41
+ {(['default', 'outline', 'ghost'] as const).map((variant) => (
42
+ <ToggleButton.Group
43
+ key={variant}
44
+ type="single"
45
+ defaultValue="bar"
46
+ aria-label={`Spending chart type, ${variant} variant`}
47
+ >
48
+ <ToggleButton value="bar" variant={variant} accessibilityLabel="Bar chart">
49
+ <ToggleButton.Icon as={BarChart} />
50
+ </ToggleButton>
51
+ <ToggleButton value="line" variant={variant} accessibilityLabel="Line chart">
52
+ <ToggleButton.Icon as={ShowChart} />
53
+ </ToggleButton>
54
+ <ToggleButton value="pie" variant={variant} accessibilityLabel="Pie chart">
55
+ <ToggleButton.Icon as={PieChart} />
56
+ </ToggleButton>
57
+ </ToggleButton.Group>
58
+ ))}
59
+ </VStack>
60
+ );
61
+ }
62
+ ```
63
+
64
+ ## Sizes
65
+
66
+ ```tsx
67
+ import { HStack, ToggleButton } from '@cdx-ui/components';
68
+ import { Star } from '@cdx-ui/icons';
69
+
70
+ const SIZES = [
71
+ { size: 'small', label: 'Small' },
72
+ { size: 'default', label: 'Default' },
73
+ { size: 'large', label: 'Large' },
74
+ ] as const;
75
+
76
+ export default function ToggleButtonSizesDemo() {
77
+ return (
78
+ <HStack space="lg">
79
+ {SIZES.map(({ size, label }) => (
80
+ <ToggleButton
81
+ key={size}
82
+ value={size}
83
+ defaultSelected={size === 'default'}
84
+ size={size}
85
+ className="self-center"
86
+ >
87
+ <ToggleButton.Icon as={Star} position="leading" />
88
+ <ToggleButton.Label>{label}</ToggleButton.Label>
89
+ </ToggleButton>
90
+ ))}
91
+ </HStack>
92
+ );
93
+ }
94
+ ```
95
+
96
+ ## Shapes
97
+
98
+ `shape="circle"` is a pill; `shape="rounded"` uses the default corner radius.
99
+
100
+ ```tsx
101
+ import { HStack, ToggleButton, VStack } from '@cdx-ui/components';
102
+ import { BarChart, ShowChart, Star } from '@cdx-ui/icons';
103
+
104
+ export default function ToggleButtonShapesDemo() {
105
+ return (
106
+ <VStack space="2xl">
107
+ <HStack space="md">
108
+ <ToggleButton value="circle" defaultSelected shape="circle">
109
+ <ToggleButton.Icon as={Star} position="leading" />
110
+ <ToggleButton.Label>Circle</ToggleButton.Label>
111
+ </ToggleButton>
112
+ <ToggleButton value="rounded" shape="rounded">
113
+ <ToggleButton.Icon as={Star} position="leading" />
114
+ <ToggleButton.Label>Rounded</ToggleButton.Label>
115
+ </ToggleButton>
116
+ </HStack>
117
+ <ToggleButton.Group type="single" defaultValue="bar" aria-label="Spending chart type">
118
+ <ToggleButton value="bar" shape="circle" accessibilityLabel="Bar chart">
119
+ <ToggleButton.Icon as={BarChart} />
120
+ </ToggleButton>
121
+ <ToggleButton value="line" shape="rounded" accessibilityLabel="Line chart">
122
+ <ToggleButton.Icon as={ShowChart} />
123
+ </ToggleButton>
124
+ </ToggleButton.Group>
125
+ </VStack>
126
+ );
127
+ }
128
+ ```
129
+
130
+ ## Icon only
131
+
132
+ A toggle whose only child is `ToggleButton.Icon` renders square, so `shape="circle"` is a true circle. Icon-only toggles need an `accessibilityLabel` because there is no visible text.
133
+
134
+ ```tsx
135
+ import { useState } from 'react';
136
+ import { ToggleButton } from '@cdx-ui/components';
137
+ import { Notifications } from '@cdx-ui/icons';
138
+
139
+ export default function ToggleButtonIconOnlyDemo() {
140
+ const [selected, setSelected] = useState(false);
141
+
142
+ return (
143
+ <ToggleButton
144
+ value="balance-alerts"
145
+ isSelected={selected}
146
+ onSelectedChange={setSelected}
147
+ accessibilityLabel="Low balance alerts"
148
+ variant="outline"
149
+ >
150
+ <ToggleButton.Icon as={Notifications} />
151
+ </ToggleButton>
152
+ );
153
+ }
154
+ ```
155
+
156
+ ## Icon and label
157
+
158
+ Use `ToggleButton.Icon` with `position="leading"` or `position="trailing"` next to `ToggleButton.Label`. The toggle's size sets the gap between them. While the toggle is selected, the icon uses its filled variant.
159
+
160
+ ```tsx
161
+ import { useState } from 'react';
162
+ import { ToggleButton } from '@cdx-ui/components';
163
+ import { Bookmark } from '@cdx-ui/icons';
164
+
165
+ export default function ToggleButtonIconAndLabelDemo() {
166
+ const [selected, setSelected] = useState(true);
167
+
168
+ return (
169
+ <ToggleButton
170
+ value="watchlist"
171
+ isSelected={selected}
172
+ onSelectedChange={setSelected}
173
+ variant="outline"
174
+ >
175
+ <ToggleButton.Icon as={Bookmark} position="leading" />
176
+ <ToggleButton.Label>Watchlist</ToggleButton.Label>
177
+ </ToggleButton>
178
+ );
179
+ }
180
+ ```
181
+
182
+ ## Single selection
183
+
184
+ `ToggleButton.Group` with `type="single"` behaves like a radio group: one selected item at a time, such as an activity period. Pressing the already-selected item does not clear it. The group's `value` is the selected button's `value`.
185
+
186
+ ```tsx
187
+ import { useState } from 'react';
188
+ import { ToggleButton } from '@cdx-ui/components';
189
+
190
+ const PERIODS = [
191
+ { value: '1m', label: '1M', accessibilityLabel: '1 month' },
192
+ { value: '3m', label: '3M', accessibilityLabel: '3 months' },
193
+ { value: '6m', label: '6M', accessibilityLabel: '6 months' },
194
+ { value: '1y', label: '1Y', accessibilityLabel: '1 year' },
195
+ ];
196
+
197
+ export default function ToggleButtonSingleDemo() {
198
+ const [period, setPeriod] = useState('3m');
199
+
200
+ return (
201
+ <ToggleButton.Group
202
+ type="single"
203
+ value={period}
204
+ onValueChange={setPeriod}
205
+ aria-label="Activity period"
206
+ >
207
+ {PERIODS.map(({ value, label, accessibilityLabel }) => (
208
+ <ToggleButton key={value} value={value} accessibilityLabel={accessibilityLabel}>
209
+ <ToggleButton.Label>{label}</ToggleButton.Label>
210
+ </ToggleButton>
211
+ ))}
212
+ </ToggleButton.Group>
213
+ );
214
+ }
215
+ ```
216
+
217
+ ## Multiple selection
218
+
219
+ `type="multiple"` lets several buttons stay pressed, such as independent text formats in a secure message. The group's `value` is an array of selected button `value`s.
220
+
221
+ ```tsx
222
+ import { useState } from 'react';
223
+ import { ToggleButton } from '@cdx-ui/components';
224
+ import { FormatBold, FormatItalic, FormatUnderlined } from '@cdx-ui/icons';
225
+
226
+ export default function ToggleButtonMultipleDemo() {
227
+ const [value, setValue] = useState<string[]>(['bold', 'underline']);
228
+
229
+ return (
230
+ <ToggleButton.Group
231
+ type="multiple"
232
+ value={value}
233
+ onValueChange={setValue}
234
+ aria-label="Message formatting"
235
+ >
236
+ <ToggleButton value="bold" accessibilityLabel="Bold">
237
+ <ToggleButton.Icon as={FormatBold} />
238
+ </ToggleButton>
239
+ <ToggleButton value="italic" accessibilityLabel="Italic">
240
+ <ToggleButton.Icon as={FormatItalic} />
241
+ </ToggleButton>
242
+ <ToggleButton value="underline" accessibilityLabel="Underline">
243
+ <ToggleButton.Icon as={FormatUnderlined} />
244
+ </ToggleButton>
245
+ </ToggleButton.Group>
246
+ );
247
+ }
248
+ ```
249
+
250
+ ## Attached
251
+
252
+ Groups are a single segmented control by default (`isAttached`). Set `isAttached={false}` to render separate buttons with a gap.
253
+
254
+ ```tsx
255
+ import { Text, ToggleButton, VStack } from '@cdx-ui/components';
256
+
257
+ function FrequencyGroup({ isAttached }: { isAttached: boolean }) {
258
+ return (
259
+ <ToggleButton.Group
260
+ type="single"
261
+ defaultValue="once"
262
+ isAttached={isAttached}
263
+ aria-label="Transfer frequency"
264
+ >
265
+ <ToggleButton value="once">
266
+ <ToggleButton.Label>One time</ToggleButton.Label>
267
+ </ToggleButton>
268
+ <ToggleButton value="weekly">
269
+ <ToggleButton.Label>Weekly</ToggleButton.Label>
270
+ </ToggleButton>
271
+ <ToggleButton value="monthly">
272
+ <ToggleButton.Label>Monthly</ToggleButton.Label>
273
+ </ToggleButton>
274
+ </ToggleButton.Group>
275
+ );
276
+ }
277
+
278
+ export default function ToggleButtonAttachedDemo() {
279
+ return (
280
+ <VStack space="lg">
281
+ <VStack space="sm">
282
+ <Text size="sm" color="secondary">
283
+ Attached (default)
284
+ </Text>
285
+ <FrequencyGroup isAttached />
286
+ </VStack>
287
+ <VStack space="sm">
288
+ <Text size="sm" color="secondary">
289
+ Detached
290
+ </Text>
291
+ <FrequencyGroup isAttached={false} />
292
+ </VStack>
293
+ </VStack>
294
+ );
295
+ }
296
+ ```
297
+
298
+ ## Controlled
299
+
300
+ Drive selection from parent state with `isSelected` and `onSelectedChange` when the toggle affects other UI, such as masking an account balance. Keep the label constant; the selected state already tells assistive technology whether it is on.
301
+
302
+ ```tsx
303
+ import { useState } from 'react';
304
+ import { CurrencyInput, Heading, Text, ToggleButton, VStack } from '@cdx-ui/components';
305
+ import { VisibilityOff } from '@cdx-ui/icons';
306
+
307
+ export default function ToggleButtonControlledDemo() {
308
+ const [hideBalance, setHideBalance] = useState(false);
309
+
310
+ return (
311
+ <VStack space="md" className="items-center">
312
+ <VStack space="xs" className="items-center">
313
+ <Text size="sm" color="secondary">
314
+ Everyday Checking ••4821
315
+ </Text>
316
+ {hideBalance ? (
317
+ <Heading size="lg" accessibilityLabel="Balance hidden" className="py-0.5">
318
+ $•,•••.••
319
+ </Heading>
320
+ ) : (
321
+ <CurrencyInput
322
+ accessibilityLabel="Everyday Checking balance"
323
+ isReadOnly
324
+ size="small"
325
+ value={4218.53}
326
+ />
327
+ )}
328
+ </VStack>
329
+ <ToggleButton
330
+ value="hide-balance"
331
+ isSelected={hideBalance}
332
+ onSelectedChange={setHideBalance}
333
+ variant="outline"
334
+ size="small"
335
+ className="self-center"
336
+ >
337
+ <ToggleButton.Icon as={VisibilityOff} position="leading" />
338
+ <ToggleButton.Label>Hide balance</ToggleButton.Label>
339
+ </ToggleButton>
340
+ </VStack>
341
+ );
342
+ }
343
+ ```
344
+
345
+ ## Vertical
346
+
347
+ Set `orientation="vertical"` to stack the group and map arrow keys to up/down.
348
+
349
+ ```tsx
350
+ import { ToggleButton } from '@cdx-ui/components';
351
+
352
+ export default function ToggleButtonVerticalDemo() {
353
+ return (
354
+ <ToggleButton.Group
355
+ type="single"
356
+ orientation="vertical"
357
+ defaultValue="statement"
358
+ aria-label="Payment amount"
359
+ >
360
+ <ToggleButton value="minimum" shape="rounded">
361
+ <ToggleButton.Label>Minimum due · $35.00</ToggleButton.Label>
362
+ </ToggleButton>
363
+ <ToggleButton value="statement" shape="rounded">
364
+ <ToggleButton.Label>Statement balance · $1,284.62</ToggleButton.Label>
365
+ </ToggleButton>
366
+ <ToggleButton value="current" shape="rounded">
367
+ <ToggleButton.Label>Current balance · $1,402.19</ToggleButton.Label>
368
+ </ToggleButton>
369
+ </ToggleButton.Group>
370
+ );
371
+ }
372
+ ```
373
+
374
+ ## Disabled
375
+
376
+ Set `isDisabled` on `ToggleButton.Group` to disable every item, or on a single `ToggleButton`.
377
+
378
+ ```tsx
379
+ import { ToggleButton, VStack } from '@cdx-ui/components';
380
+
381
+ export default function ToggleButtonDisabledDemo() {
382
+ return (
383
+ <VStack space="lg">
384
+ <ToggleButton.Group type="single" value="monthly" aria-label="Transfer frequency" isDisabled>
385
+ <ToggleButton value="once">
386
+ <ToggleButton.Label>One time</ToggleButton.Label>
387
+ </ToggleButton>
388
+ <ToggleButton value="weekly">
389
+ <ToggleButton.Label>Weekly</ToggleButton.Label>
390
+ </ToggleButton>
391
+ <ToggleButton value="monthly">
392
+ <ToggleButton.Label>Monthly</ToggleButton.Label>
393
+ </ToggleButton>
394
+ </ToggleButton.Group>
395
+ <ToggleButton.Group type="single" defaultValue="3m" aria-label="Activity period">
396
+ <ToggleButton value="1m" accessibilityLabel="1 month">
397
+ <ToggleButton.Label>1M</ToggleButton.Label>
398
+ </ToggleButton>
399
+ <ToggleButton value="3m" accessibilityLabel="3 months">
400
+ <ToggleButton.Label>3M</ToggleButton.Label>
401
+ </ToggleButton>
402
+ <ToggleButton value="1y" isDisabled accessibilityLabel="1 year">
403
+ <ToggleButton.Label>1Y</ToggleButton.Label>
404
+ </ToggleButton>
405
+ </ToggleButton.Group>
406
+ </VStack>
407
+ );
408
+ }
409
+ ```
410
+
411
+ ## API
412
+
413
+ ### ToggleButton
414
+
415
+ Pressable root that toggles a persisted selected state. Requires a unique `value`. Inside a `ToggleButton.Group`, selection is owned by the group (`value` / `defaultValue` match each button's `value`); standalone usage supports `isSelected` / `defaultSelected` / `onSelectedChange`.
416
+
417
+ | Prop | Type | Default | Description |
418
+ | --- | --- | --- | --- |
419
+ | `className?` | `string` | — | — |
420
+ | `children?` | `React.ReactNode` | — | Either children or a render prop that receives a boolean reflecting whether the component is currently pressed. |
421
+ | `variant?` | `'default' \| 'outline' \| 'ghost'` | `'default'` | Visual style. `default` is a muted filled surface; `outline` adds a border; `ghost` is transparent. |
422
+ | `shape?` | `'circle' \| 'rounded'` | `'circle'` | Corner geometry — mirrors `Avatar.shape`. |
423
+ | `size?` | `'default' \| 'small' \| 'large'` | `'default'` | Height and padding scale. |
424
+ | `asChild?` | `boolean` | — | Render the consumer's child in place of the default `Pressable` host. |
425
+ | `value` | `string` | — | Identifies this button within a `ToggleButtonGroup`. Must be unique within the group. Standalone buttons still require a value. |
426
+ | `isSelected?` | `boolean` | — | Controlled selected state (standalone only; ignored inside `ToggleButtonGroup`). |
427
+ | `defaultSelected?` | `boolean` | `false` | Uncontrolled initial selected state (standalone only). |
428
+ | `onSelectedChange?` | `((isSelected: boolean) => void)` | — | Called when standalone selected state changes. |
429
+ | `isDisabled?` | `boolean` | `false` | — |
430
+
431
+ Inherits all [`PressableProps`](https://reactnative.dev/docs/pressable#props) (including `onPress`).
432
+
433
+ ## Sub-components
434
+
435
+ ### ToggleButton.Label
436
+
437
+ Text label inside the toggle. Inherits size from the parent and selected/hover/press color from toggle state.
438
+
439
+ | Prop | Type | Default | Description |
440
+ | --- | --- | --- | --- |
441
+ | `className?` | `string` | — | — |
442
+ | `children?` | `React.ReactNode` | — | — |
443
+ | `asChild?` | `boolean` | — | Render the consumer's child in place of the default `Text` host. |
444
+
445
+ Inherits all [`TextProps`](https://reactnative.dev/docs/text#props).
446
+
447
+ ### ToggleButton.Icon
448
+
449
+ Renders a Forge icon. Inherits size and selected/hover/press color from the parent. While the toggle is selected, the icon uses its filled variant; pass `filled` to override. Icon-only usage must pass `accessibilityLabel` on `ToggleButton`.
450
+
451
+ | Prop | Type | Default | Description |
452
+ | --- | --- | --- | --- |
453
+ | `className?` | `string` | — | Utility classes for size (`size-*`) and placement, merged after the defaults. |
454
+ | `filled?` | `boolean` | — | Render the filled icon variant. Defaults to the toggle's selected state. Icons without filled path data stay outlined. |
455
+ | `size?` | `string \| number` | — | Width and height of the icon, in pixels or any SVG length. The bare icon renders at 24 when omitted. |
456
+ | `data-testid?` | `string` | — | Test identifier forwarded to the rendered SVG. |
457
+ | `as?` | `ForgeIcon` | — | Forge icon component to render. |
458
+ | `asChild?` | `boolean` | — | Render a custom element instead of the default icon. |
459
+ | `position?` | `'leading' \| 'trailing'` | — | Leading or trailing placement relative to the label. |
460
+
461
+ Inherits all `ForgeIconProps` (react-native-svg `SvgProps` plus `filled` and `size`).
462
+
463
+ ### ToggleButton.Group
464
+
465
+ Selection state container and layout. `type="single"` uses radio semantics (group `value` is the selected button's `value`); `type="multiple"` uses pressed-button semantics (group `value` is an array of selected `value`s). `isAttached` defaults to `true` (segmented).
466
+
467
+ | Prop | Type | Default | Description |
468
+ | --- | --- | --- | --- |
469
+ | `className?` | `string` | — | — |
470
+ | `children?` | `(React.ReactNode & (React.ReactElement<unknown, string \| React.JSXElementConstructor<any>> \| React.ReactElement<unknown, string \| React.JSXElementConstructor<any>>[]))` | — | — |
471
+ | `orientation?` | `'horizontal' \| 'vertical'` | — | — |
472
+ | `isAttached?` | `boolean` | — | — |
473
+ | `type?` | `'single' \| 'multiple'` | — | — |
474
+ | `value?` | `string \| string[]` | — | — |
475
+ | `defaultValue?` | `string \| string[]` | — | — |
476
+ | `onValueChange?` | `((value: string) => void) \| ((value: string[]) => void)` | — | — |
477
+ | `asChild?` | `boolean` | — | — |
478
+ | `isDisabled?` | `boolean` | — | — |
479
+
480
+ Inherits all [`ViewProps`](https://reactnative.dev/docs/view#props). `ToggleButton.Group` is a discriminated union on `type`.
481
+
482
+ | `type` | `value` shape | Item role |
483
+ | ------------------ | ------------- | ---------------------------- |
484
+ | `single` (default) | `string` | `radio` in a `radiogroup` |
485
+ | `multiple` | `string[]` | `button` with `aria-pressed` |
486
+
487
+ ## Anatomy
488
+
489
+ | `data-slot` | Element |
490
+ | --------------------- | --------------- |
491
+ | `toggle-button` | Root pressable |
492
+ | `toggle-button-label` | Text label |
493
+ | `toggle-button-icon` | Icon |
494
+ | `toggle-button-group` | Selection group |
495
+
496
+ ## Accessibility
497
+
498
+ | Attribute | Behavior |
499
+ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
500
+ | **Standalone role** | `button` with `aria-pressed` reflecting selected state. |
501
+ | **Group `type="single"`** | Group is `radiogroup`; each item is `radio` with `aria-checked`. |
502
+ | **Group `type="multiple"`** | Group is `group`; each item is `button` with `aria-pressed`. |
503
+ | **`aria-label`** | Required on the group when there is no visible group label. Required on icon-only buttons. |
504
+ | **Keyboard** | Standalone: Space/Enter toggles. Grouped (web): the group is a single tab stop; arrow keys (following `orientation`) and Home/End move focus, skipping disabled items. With `type="single"`, moving focus also selects the item. Space/Enter toggles the focused item. |
505
+ | **Disabled** | `isDisabled` on an item or the group sets `aria-disabled` and blocks press. |