@kushagradhawan/kookie-ui 0.1.29 → 0.1.30

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 (522) hide show
  1. package/components.css +4083 -2224
  2. package/dist/cjs/components/_internal/base-button.d.ts +36 -0
  3. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/base-button.js +1 -1
  5. package/dist/cjs/components/_internal/base-button.js.map +3 -3
  6. package/dist/cjs/components/_internal/base-button.props.d.ts +61 -0
  7. package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  9. package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
  10. package/dist/cjs/components/_internal/base-checkbox.props.d.ts +6 -1
  11. package/dist/cjs/components/_internal/base-checkbox.props.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
  13. package/dist/cjs/components/_internal/base-checkbox.props.js.map +3 -3
  14. package/dist/cjs/components/_internal/base-menu.props.d.ts +8 -0
  15. package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
  16. package/dist/cjs/components/_internal/base-menu.props.js +1 -1
  17. package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
  18. package/dist/cjs/components/_internal/base-radio.props.d.ts +6 -1
  19. package/dist/cjs/components/_internal/base-radio.props.d.ts.map +1 -1
  20. package/dist/cjs/components/_internal/base-radio.props.js +1 -1
  21. package/dist/cjs/components/_internal/base-radio.props.js.map +3 -3
  22. package/dist/cjs/components/accordion.d.ts.map +1 -1
  23. package/dist/cjs/components/accordion.js +1 -1
  24. package/dist/cjs/components/accordion.js.map +3 -3
  25. package/dist/cjs/components/accordion.props.d.ts +9 -0
  26. package/dist/cjs/components/accordion.props.d.ts.map +1 -1
  27. package/dist/cjs/components/accordion.props.js +1 -1
  28. package/dist/cjs/components/accordion.props.js.map +2 -2
  29. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  30. package/dist/cjs/components/alert-dialog.js +1 -1
  31. package/dist/cjs/components/alert-dialog.js.map +3 -3
  32. package/dist/cjs/components/alert-dialog.props.d.ts +69 -2
  33. package/dist/cjs/components/alert-dialog.props.d.ts.map +1 -1
  34. package/dist/cjs/components/alert-dialog.props.js +1 -1
  35. package/dist/cjs/components/alert-dialog.props.js.map +3 -3
  36. package/dist/cjs/components/avatar.d.ts.map +1 -1
  37. package/dist/cjs/components/avatar.js +1 -1
  38. package/dist/cjs/components/avatar.js.map +3 -3
  39. package/dist/cjs/components/avatar.props.d.ts +9 -1
  40. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  41. package/dist/cjs/components/avatar.props.js +1 -1
  42. package/dist/cjs/components/avatar.props.js.map +3 -3
  43. package/dist/cjs/components/badge.d.ts +8 -1
  44. package/dist/cjs/components/badge.d.ts.map +1 -1
  45. package/dist/cjs/components/badge.js +1 -1
  46. package/dist/cjs/components/badge.js.map +3 -3
  47. package/dist/cjs/components/badge.props.d.ts +14 -6
  48. package/dist/cjs/components/badge.props.d.ts.map +1 -1
  49. package/dist/cjs/components/badge.props.js +1 -1
  50. package/dist/cjs/components/badge.props.js.map +3 -3
  51. package/dist/cjs/components/blockquote.props.d.ts +1 -1
  52. package/dist/cjs/components/button.d.ts +53 -1
  53. package/dist/cjs/components/button.d.ts.map +1 -1
  54. package/dist/cjs/components/button.js +1 -1
  55. package/dist/cjs/components/button.js.map +3 -3
  56. package/dist/cjs/components/button.props.d.ts +17 -0
  57. package/dist/cjs/components/button.props.d.ts.map +1 -1
  58. package/dist/cjs/components/button.props.js.map +2 -2
  59. package/dist/cjs/components/callout.d.ts +4 -0
  60. package/dist/cjs/components/callout.d.ts.map +1 -1
  61. package/dist/cjs/components/callout.js +1 -1
  62. package/dist/cjs/components/callout.js.map +3 -3
  63. package/dist/cjs/components/callout.props.d.ts +9 -1
  64. package/dist/cjs/components/callout.props.d.ts.map +1 -1
  65. package/dist/cjs/components/callout.props.js +1 -1
  66. package/dist/cjs/components/callout.props.js.map +3 -3
  67. package/dist/cjs/components/card.d.ts.map +1 -1
  68. package/dist/cjs/components/card.js +1 -1
  69. package/dist/cjs/components/card.js.map +3 -3
  70. package/dist/cjs/components/card.props.d.ts +5 -0
  71. package/dist/cjs/components/card.props.d.ts.map +1 -1
  72. package/dist/cjs/components/card.props.js +1 -1
  73. package/dist/cjs/components/card.props.js.map +3 -3
  74. package/dist/cjs/components/checkbox-cards.d.ts.map +1 -1
  75. package/dist/cjs/components/checkbox-cards.js +1 -1
  76. package/dist/cjs/components/checkbox-cards.js.map +3 -3
  77. package/dist/cjs/components/checkbox-cards.props.d.ts +2 -2
  78. package/dist/cjs/components/checkbox-cards.props.js +1 -1
  79. package/dist/cjs/components/checkbox-cards.props.js.map +2 -2
  80. package/dist/cjs/components/checkbox-group.props.d.ts +6 -1
  81. package/dist/cjs/components/checkbox-group.props.d.ts.map +1 -1
  82. package/dist/cjs/components/checkbox.d.ts.map +1 -1
  83. package/dist/cjs/components/checkbox.js +1 -1
  84. package/dist/cjs/components/checkbox.js.map +3 -3
  85. package/dist/cjs/components/code.js.map +1 -1
  86. package/dist/cjs/components/code.props.d.ts +1 -1
  87. package/dist/cjs/components/context-menu.d.ts +1 -1
  88. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  89. package/dist/cjs/components/context-menu.js +1 -1
  90. package/dist/cjs/components/context-menu.js.map +3 -3
  91. package/dist/cjs/components/dialog.d.ts.map +1 -1
  92. package/dist/cjs/components/dialog.js +1 -1
  93. package/dist/cjs/components/dialog.js.map +3 -3
  94. package/dist/cjs/components/dialog.props.d.ts +5 -0
  95. package/dist/cjs/components/dialog.props.d.ts.map +1 -1
  96. package/dist/cjs/components/dialog.props.js +1 -1
  97. package/dist/cjs/components/dialog.props.js.map +3 -3
  98. package/dist/cjs/components/dropdown-menu.d.ts +1 -1
  99. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  100. package/dist/cjs/components/dropdown-menu.js +1 -1
  101. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  102. package/dist/cjs/components/heading.props.d.ts +1 -1
  103. package/dist/cjs/components/icon-button.d.ts +79 -1
  104. package/dist/cjs/components/icon-button.d.ts.map +1 -1
  105. package/dist/cjs/components/icon-button.js +4 -1
  106. package/dist/cjs/components/icon-button.js.map +3 -3
  107. package/dist/cjs/components/image.d.ts +131 -12
  108. package/dist/cjs/components/image.d.ts.map +1 -1
  109. package/dist/cjs/components/image.js +1 -1
  110. package/dist/cjs/components/image.js.map +3 -3
  111. package/dist/cjs/components/image.props.d.ts +136 -21
  112. package/dist/cjs/components/image.props.d.ts.map +1 -1
  113. package/dist/cjs/components/image.props.js +1 -1
  114. package/dist/cjs/components/image.props.js.map +3 -3
  115. package/dist/cjs/components/link.props.d.ts +1 -1
  116. package/dist/cjs/components/progress.props.d.ts +2 -2
  117. package/dist/cjs/components/progress.props.js +1 -1
  118. package/dist/cjs/components/progress.props.js.map +2 -2
  119. package/dist/cjs/components/radio-cards.d.ts.map +1 -1
  120. package/dist/cjs/components/radio-cards.js +1 -1
  121. package/dist/cjs/components/radio-cards.js.map +3 -3
  122. package/dist/cjs/components/radio-cards.props.d.ts +2 -2
  123. package/dist/cjs/components/radio-cards.props.js +1 -1
  124. package/dist/cjs/components/radio-cards.props.js.map +2 -2
  125. package/dist/cjs/components/radio.d.ts.map +1 -1
  126. package/dist/cjs/components/radio.js +1 -1
  127. package/dist/cjs/components/radio.js.map +3 -3
  128. package/dist/cjs/components/segmented-control.props.d.ts +3 -3
  129. package/dist/cjs/components/segmented-control.props.js +1 -1
  130. package/dist/cjs/components/segmented-control.props.js.map +2 -2
  131. package/dist/cjs/components/select.d.ts.map +1 -1
  132. package/dist/cjs/components/select.js +1 -1
  133. package/dist/cjs/components/select.js.map +3 -3
  134. package/dist/cjs/components/select.props.d.ts +12 -0
  135. package/dist/cjs/components/select.props.d.ts.map +1 -1
  136. package/dist/cjs/components/select.props.js +1 -1
  137. package/dist/cjs/components/select.props.js.map +2 -2
  138. package/dist/cjs/components/sidebar.d.ts +5 -0
  139. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  140. package/dist/cjs/components/sidebar.js +1 -1
  141. package/dist/cjs/components/sidebar.js.map +3 -3
  142. package/dist/cjs/components/slider.d.ts +5 -0
  143. package/dist/cjs/components/slider.d.ts.map +1 -1
  144. package/dist/cjs/components/slider.js +1 -1
  145. package/dist/cjs/components/slider.js.map +3 -3
  146. package/dist/cjs/components/slider.props.d.ts +10 -2
  147. package/dist/cjs/components/slider.props.d.ts.map +1 -1
  148. package/dist/cjs/components/slider.props.js +1 -1
  149. package/dist/cjs/components/slider.props.js.map +2 -2
  150. package/dist/cjs/components/switch.d.ts.map +1 -1
  151. package/dist/cjs/components/switch.js +1 -1
  152. package/dist/cjs/components/switch.js.map +3 -3
  153. package/dist/cjs/components/switch.props.d.ts +17 -4
  154. package/dist/cjs/components/switch.props.d.ts.map +1 -1
  155. package/dist/cjs/components/switch.props.js +1 -1
  156. package/dist/cjs/components/switch.props.js.map +3 -3
  157. package/dist/cjs/components/tab-nav.d.ts.map +1 -1
  158. package/dist/cjs/components/tab-nav.js +1 -1
  159. package/dist/cjs/components/tab-nav.js.map +3 -3
  160. package/dist/cjs/components/tabs.d.ts.map +1 -1
  161. package/dist/cjs/components/tabs.js +1 -1
  162. package/dist/cjs/components/tabs.js.map +2 -2
  163. package/dist/cjs/components/text-area.d.ts.map +1 -1
  164. package/dist/cjs/components/text-area.js +1 -1
  165. package/dist/cjs/components/text-area.js.map +3 -3
  166. package/dist/cjs/components/text-area.props.d.ts +29 -0
  167. package/dist/cjs/components/text-area.props.d.ts.map +1 -1
  168. package/dist/cjs/components/text-area.props.js +1 -1
  169. package/dist/cjs/components/text-area.props.js.map +3 -3
  170. package/dist/cjs/components/text-field.d.ts.map +1 -1
  171. package/dist/cjs/components/text-field.js +4 -4
  172. package/dist/cjs/components/text-field.js.map +3 -3
  173. package/dist/cjs/components/text-field.props.d.ts +29 -0
  174. package/dist/cjs/components/text-field.props.d.ts.map +1 -1
  175. package/dist/cjs/components/text-field.props.js +1 -1
  176. package/dist/cjs/components/text-field.props.js.map +3 -3
  177. package/dist/cjs/components/text.props.d.ts +1 -1
  178. package/dist/cjs/components/theme.d.ts +3 -0
  179. package/dist/cjs/components/theme.d.ts.map +1 -1
  180. package/dist/cjs/components/theme.js +1 -1
  181. package/dist/cjs/components/theme.js.map +3 -3
  182. package/dist/cjs/components/theme.props.d.ts +14 -0
  183. package/dist/cjs/components/theme.props.d.ts.map +1 -1
  184. package/dist/cjs/components/theme.props.js +1 -1
  185. package/dist/cjs/components/theme.props.js.map +3 -3
  186. package/dist/cjs/components/toggle-button.d.ts +52 -0
  187. package/dist/cjs/components/toggle-button.d.ts.map +1 -1
  188. package/dist/cjs/components/toggle-button.js +1 -1
  189. package/dist/cjs/components/toggle-button.js.map +3 -3
  190. package/dist/cjs/components/toggle-icon-button.d.ts +84 -2
  191. package/dist/cjs/components/toggle-icon-button.d.ts.map +1 -1
  192. package/dist/cjs/components/toggle-icon-button.js +1 -1
  193. package/dist/cjs/components/toggle-icon-button.js.map +3 -3
  194. package/dist/cjs/hooks/index.d.ts +2 -0
  195. package/dist/cjs/hooks/index.d.ts.map +1 -0
  196. package/dist/cjs/hooks/index.js +2 -0
  197. package/dist/cjs/hooks/index.js.map +7 -0
  198. package/dist/cjs/hooks/use-live-announcer.d.ts +6 -0
  199. package/dist/cjs/hooks/use-live-announcer.d.ts.map +1 -0
  200. package/dist/cjs/hooks/use-live-announcer.js +10 -0
  201. package/dist/cjs/hooks/use-live-announcer.js.map +7 -0
  202. package/dist/cjs/index.d.ts +1 -0
  203. package/dist/cjs/index.d.ts.map +1 -1
  204. package/dist/cjs/index.js +1 -1
  205. package/dist/cjs/index.js.map +2 -2
  206. package/dist/cjs/props/weight.prop.d.ts +1 -1
  207. package/dist/cjs/props/weight.prop.js +1 -1
  208. package/dist/cjs/props/weight.prop.js.map +2 -2
  209. package/dist/esm/components/_internal/base-button.d.ts +36 -0
  210. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  211. package/dist/esm/components/_internal/base-button.js +1 -1
  212. package/dist/esm/components/_internal/base-button.js.map +3 -3
  213. package/dist/esm/components/_internal/base-button.props.d.ts +61 -0
  214. package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
  215. package/dist/esm/components/_internal/base-button.props.js +1 -1
  216. package/dist/esm/components/_internal/base-button.props.js.map +3 -3
  217. package/dist/esm/components/_internal/base-checkbox.props.d.ts +6 -1
  218. package/dist/esm/components/_internal/base-checkbox.props.d.ts.map +1 -1
  219. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  220. package/dist/esm/components/_internal/base-checkbox.props.js.map +3 -3
  221. package/dist/esm/components/_internal/base-menu.props.d.ts +8 -0
  222. package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
  223. package/dist/esm/components/_internal/base-menu.props.js +1 -1
  224. package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
  225. package/dist/esm/components/_internal/base-radio.props.d.ts +6 -1
  226. package/dist/esm/components/_internal/base-radio.props.d.ts.map +1 -1
  227. package/dist/esm/components/_internal/base-radio.props.js +1 -1
  228. package/dist/esm/components/_internal/base-radio.props.js.map +3 -3
  229. package/dist/esm/components/accordion.d.ts.map +1 -1
  230. package/dist/esm/components/accordion.js +1 -1
  231. package/dist/esm/components/accordion.js.map +3 -3
  232. package/dist/esm/components/accordion.props.d.ts +9 -0
  233. package/dist/esm/components/accordion.props.d.ts.map +1 -1
  234. package/dist/esm/components/accordion.props.js +1 -1
  235. package/dist/esm/components/accordion.props.js.map +2 -2
  236. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  237. package/dist/esm/components/alert-dialog.js +1 -1
  238. package/dist/esm/components/alert-dialog.js.map +3 -3
  239. package/dist/esm/components/alert-dialog.props.d.ts +69 -2
  240. package/dist/esm/components/alert-dialog.props.d.ts.map +1 -1
  241. package/dist/esm/components/alert-dialog.props.js +1 -1
  242. package/dist/esm/components/alert-dialog.props.js.map +3 -3
  243. package/dist/esm/components/avatar.d.ts.map +1 -1
  244. package/dist/esm/components/avatar.js +1 -1
  245. package/dist/esm/components/avatar.js.map +3 -3
  246. package/dist/esm/components/avatar.props.d.ts +9 -1
  247. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  248. package/dist/esm/components/avatar.props.js +1 -1
  249. package/dist/esm/components/avatar.props.js.map +3 -3
  250. package/dist/esm/components/badge.d.ts +8 -1
  251. package/dist/esm/components/badge.d.ts.map +1 -1
  252. package/dist/esm/components/badge.js +1 -1
  253. package/dist/esm/components/badge.js.map +3 -3
  254. package/dist/esm/components/badge.props.d.ts +14 -6
  255. package/dist/esm/components/badge.props.d.ts.map +1 -1
  256. package/dist/esm/components/badge.props.js +1 -1
  257. package/dist/esm/components/badge.props.js.map +3 -3
  258. package/dist/esm/components/blockquote.props.d.ts +1 -1
  259. package/dist/esm/components/button.d.ts +53 -1
  260. package/dist/esm/components/button.d.ts.map +1 -1
  261. package/dist/esm/components/button.js +1 -1
  262. package/dist/esm/components/button.js.map +3 -3
  263. package/dist/esm/components/button.props.d.ts +17 -0
  264. package/dist/esm/components/button.props.d.ts.map +1 -1
  265. package/dist/esm/components/button.props.js.map +2 -2
  266. package/dist/esm/components/callout.d.ts +4 -0
  267. package/dist/esm/components/callout.d.ts.map +1 -1
  268. package/dist/esm/components/callout.js +1 -1
  269. package/dist/esm/components/callout.js.map +3 -3
  270. package/dist/esm/components/callout.props.d.ts +9 -1
  271. package/dist/esm/components/callout.props.d.ts.map +1 -1
  272. package/dist/esm/components/callout.props.js +1 -1
  273. package/dist/esm/components/callout.props.js.map +3 -3
  274. package/dist/esm/components/card.d.ts.map +1 -1
  275. package/dist/esm/components/card.js +1 -1
  276. package/dist/esm/components/card.js.map +3 -3
  277. package/dist/esm/components/card.props.d.ts +5 -0
  278. package/dist/esm/components/card.props.d.ts.map +1 -1
  279. package/dist/esm/components/card.props.js +1 -1
  280. package/dist/esm/components/card.props.js.map +3 -3
  281. package/dist/esm/components/checkbox-cards.d.ts.map +1 -1
  282. package/dist/esm/components/checkbox-cards.js +1 -1
  283. package/dist/esm/components/checkbox-cards.js.map +3 -3
  284. package/dist/esm/components/checkbox-cards.props.d.ts +2 -2
  285. package/dist/esm/components/checkbox-cards.props.js +1 -1
  286. package/dist/esm/components/checkbox-cards.props.js.map +2 -2
  287. package/dist/esm/components/checkbox-group.props.d.ts +6 -1
  288. package/dist/esm/components/checkbox-group.props.d.ts.map +1 -1
  289. package/dist/esm/components/checkbox.d.ts.map +1 -1
  290. package/dist/esm/components/checkbox.js +1 -1
  291. package/dist/esm/components/checkbox.js.map +3 -3
  292. package/dist/esm/components/code.js.map +1 -1
  293. package/dist/esm/components/code.props.d.ts +1 -1
  294. package/dist/esm/components/context-menu.d.ts +1 -1
  295. package/dist/esm/components/context-menu.d.ts.map +1 -1
  296. package/dist/esm/components/context-menu.js +1 -1
  297. package/dist/esm/components/context-menu.js.map +3 -3
  298. package/dist/esm/components/dialog.d.ts.map +1 -1
  299. package/dist/esm/components/dialog.js +1 -1
  300. package/dist/esm/components/dialog.js.map +3 -3
  301. package/dist/esm/components/dialog.props.d.ts +5 -0
  302. package/dist/esm/components/dialog.props.d.ts.map +1 -1
  303. package/dist/esm/components/dialog.props.js +1 -1
  304. package/dist/esm/components/dialog.props.js.map +3 -3
  305. package/dist/esm/components/dropdown-menu.d.ts +1 -1
  306. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  307. package/dist/esm/components/dropdown-menu.js +1 -1
  308. package/dist/esm/components/dropdown-menu.js.map +3 -3
  309. package/dist/esm/components/heading.props.d.ts +1 -1
  310. package/dist/esm/components/icon-button.d.ts +79 -1
  311. package/dist/esm/components/icon-button.d.ts.map +1 -1
  312. package/dist/esm/components/icon-button.js +4 -1
  313. package/dist/esm/components/icon-button.js.map +3 -3
  314. package/dist/esm/components/image.d.ts +131 -12
  315. package/dist/esm/components/image.d.ts.map +1 -1
  316. package/dist/esm/components/image.js +1 -1
  317. package/dist/esm/components/image.js.map +3 -3
  318. package/dist/esm/components/image.props.d.ts +136 -21
  319. package/dist/esm/components/image.props.d.ts.map +1 -1
  320. package/dist/esm/components/image.props.js +1 -1
  321. package/dist/esm/components/image.props.js.map +3 -3
  322. package/dist/esm/components/link.props.d.ts +1 -1
  323. package/dist/esm/components/progress.props.d.ts +2 -2
  324. package/dist/esm/components/progress.props.js +1 -1
  325. package/dist/esm/components/progress.props.js.map +2 -2
  326. package/dist/esm/components/radio-cards.d.ts.map +1 -1
  327. package/dist/esm/components/radio-cards.js +1 -1
  328. package/dist/esm/components/radio-cards.js.map +3 -3
  329. package/dist/esm/components/radio-cards.props.d.ts +2 -2
  330. package/dist/esm/components/radio-cards.props.js +1 -1
  331. package/dist/esm/components/radio-cards.props.js.map +2 -2
  332. package/dist/esm/components/radio.d.ts.map +1 -1
  333. package/dist/esm/components/radio.js +1 -1
  334. package/dist/esm/components/radio.js.map +3 -3
  335. package/dist/esm/components/segmented-control.props.d.ts +3 -3
  336. package/dist/esm/components/segmented-control.props.js +1 -1
  337. package/dist/esm/components/segmented-control.props.js.map +2 -2
  338. package/dist/esm/components/select.d.ts.map +1 -1
  339. package/dist/esm/components/select.js +1 -1
  340. package/dist/esm/components/select.js.map +3 -3
  341. package/dist/esm/components/select.props.d.ts +12 -0
  342. package/dist/esm/components/select.props.d.ts.map +1 -1
  343. package/dist/esm/components/select.props.js +1 -1
  344. package/dist/esm/components/select.props.js.map +2 -2
  345. package/dist/esm/components/sidebar.d.ts +5 -0
  346. package/dist/esm/components/sidebar.d.ts.map +1 -1
  347. package/dist/esm/components/sidebar.js +1 -1
  348. package/dist/esm/components/sidebar.js.map +3 -3
  349. package/dist/esm/components/slider.d.ts +5 -0
  350. package/dist/esm/components/slider.d.ts.map +1 -1
  351. package/dist/esm/components/slider.js +1 -1
  352. package/dist/esm/components/slider.js.map +3 -3
  353. package/dist/esm/components/slider.props.d.ts +10 -2
  354. package/dist/esm/components/slider.props.d.ts.map +1 -1
  355. package/dist/esm/components/slider.props.js +1 -1
  356. package/dist/esm/components/slider.props.js.map +2 -2
  357. package/dist/esm/components/switch.d.ts.map +1 -1
  358. package/dist/esm/components/switch.js +1 -1
  359. package/dist/esm/components/switch.js.map +3 -3
  360. package/dist/esm/components/switch.props.d.ts +17 -4
  361. package/dist/esm/components/switch.props.d.ts.map +1 -1
  362. package/dist/esm/components/switch.props.js +1 -1
  363. package/dist/esm/components/switch.props.js.map +3 -3
  364. package/dist/esm/components/tab-nav.d.ts.map +1 -1
  365. package/dist/esm/components/tab-nav.js +1 -1
  366. package/dist/esm/components/tab-nav.js.map +3 -3
  367. package/dist/esm/components/tabs.d.ts.map +1 -1
  368. package/dist/esm/components/tabs.js +1 -1
  369. package/dist/esm/components/tabs.js.map +2 -2
  370. package/dist/esm/components/text-area.d.ts.map +1 -1
  371. package/dist/esm/components/text-area.js +1 -1
  372. package/dist/esm/components/text-area.js.map +3 -3
  373. package/dist/esm/components/text-area.props.d.ts +29 -0
  374. package/dist/esm/components/text-area.props.d.ts.map +1 -1
  375. package/dist/esm/components/text-area.props.js +1 -1
  376. package/dist/esm/components/text-area.props.js.map +3 -3
  377. package/dist/esm/components/text-field.d.ts.map +1 -1
  378. package/dist/esm/components/text-field.js +4 -4
  379. package/dist/esm/components/text-field.js.map +3 -3
  380. package/dist/esm/components/text-field.props.d.ts +29 -0
  381. package/dist/esm/components/text-field.props.d.ts.map +1 -1
  382. package/dist/esm/components/text-field.props.js +1 -1
  383. package/dist/esm/components/text-field.props.js.map +3 -3
  384. package/dist/esm/components/text.props.d.ts +1 -1
  385. package/dist/esm/components/theme.d.ts +3 -0
  386. package/dist/esm/components/theme.d.ts.map +1 -1
  387. package/dist/esm/components/theme.js +1 -1
  388. package/dist/esm/components/theme.js.map +3 -3
  389. package/dist/esm/components/theme.props.d.ts +14 -0
  390. package/dist/esm/components/theme.props.d.ts.map +1 -1
  391. package/dist/esm/components/theme.props.js +1 -1
  392. package/dist/esm/components/theme.props.js.map +3 -3
  393. package/dist/esm/components/toggle-button.d.ts +52 -0
  394. package/dist/esm/components/toggle-button.d.ts.map +1 -1
  395. package/dist/esm/components/toggle-button.js +1 -1
  396. package/dist/esm/components/toggle-button.js.map +3 -3
  397. package/dist/esm/components/toggle-icon-button.d.ts +84 -2
  398. package/dist/esm/components/toggle-icon-button.d.ts.map +1 -1
  399. package/dist/esm/components/toggle-icon-button.js +1 -1
  400. package/dist/esm/components/toggle-icon-button.js.map +3 -3
  401. package/dist/esm/hooks/index.d.ts +2 -0
  402. package/dist/esm/hooks/index.d.ts.map +1 -0
  403. package/dist/esm/hooks/index.js +2 -0
  404. package/dist/esm/hooks/index.js.map +7 -0
  405. package/dist/esm/hooks/use-live-announcer.d.ts +6 -0
  406. package/dist/esm/hooks/use-live-announcer.d.ts.map +1 -0
  407. package/dist/esm/hooks/use-live-announcer.js +10 -0
  408. package/dist/esm/hooks/use-live-announcer.js.map +7 -0
  409. package/dist/esm/index.d.ts +1 -0
  410. package/dist/esm/index.d.ts.map +1 -1
  411. package/dist/esm/index.js +1 -1
  412. package/dist/esm/index.js.map +2 -2
  413. package/dist/esm/props/weight.prop.d.ts +1 -1
  414. package/dist/esm/props/weight.prop.js +1 -1
  415. package/dist/esm/props/weight.prop.js.map +2 -2
  416. package/layout/components.css +1 -0
  417. package/layout.css +1 -0
  418. package/package.json +2 -1
  419. package/src/components/_internal/base-button.css +483 -284
  420. package/src/components/_internal/base-button.props.ts +87 -0
  421. package/src/components/_internal/base-button.tsx +127 -10
  422. package/src/components/_internal/base-card.css +866 -83
  423. package/src/components/_internal/base-checkbox.css +252 -52
  424. package/src/components/_internal/base-checkbox.props.ts +4 -1
  425. package/src/components/_internal/base-dialog.css +39 -8
  426. package/src/components/_internal/base-menu.css +55 -32
  427. package/src/components/_internal/base-menu.props.ts +10 -0
  428. package/src/components/_internal/base-radio.css +222 -52
  429. package/src/components/_internal/base-radio.props.ts +4 -1
  430. package/src/components/_internal/base-tab-list.css +16 -0
  431. package/src/components/accordion.css +465 -62
  432. package/src/components/accordion.props.tsx +6 -0
  433. package/src/components/accordion.tsx +54 -7
  434. package/src/components/alert-dialog.props.tsx +22 -2
  435. package/src/components/alert-dialog.tsx +94 -3
  436. package/src/components/avatar.css +294 -152
  437. package/src/components/avatar.props.tsx +7 -1
  438. package/src/components/avatar.tsx +12 -2
  439. package/src/components/badge.css +160 -138
  440. package/src/components/badge.props.tsx +10 -3
  441. package/src/components/badge.tsx +71 -9
  442. package/src/components/button.css +88 -0
  443. package/src/components/button.props.tsx +17 -0
  444. package/src/components/button.tsx +107 -5
  445. package/src/components/callout.css +122 -35
  446. package/src/components/callout.props.tsx +7 -1
  447. package/src/components/callout.tsx +32 -9
  448. package/src/components/card.css +0 -597
  449. package/src/components/card.props.tsx +3 -0
  450. package/src/components/card.tsx +4 -2
  451. package/src/components/checkbox-cards.css +27 -104
  452. package/src/components/checkbox-cards.props.tsx +2 -2
  453. package/src/components/checkbox-cards.tsx +21 -3
  454. package/src/components/checkbox.tsx +2 -0
  455. package/src/components/code.css +1 -1
  456. package/src/components/code.tsx +1 -1
  457. package/src/components/container.css +1 -0
  458. package/src/components/context-menu.tsx +54 -12
  459. package/src/components/dialog.props.tsx +3 -0
  460. package/src/components/dialog.tsx +93 -3
  461. package/src/components/dropdown-menu.tsx +49 -12
  462. package/src/components/icon-button.css +73 -4
  463. package/src/components/icon-button.tsx +125 -19
  464. package/src/components/image.css +160 -91
  465. package/src/components/image.props.ts +152 -15
  466. package/src/components/image.tsx +290 -247
  467. package/src/components/kbd.css +23 -44
  468. package/src/components/progress.css +130 -149
  469. package/src/components/progress.props.tsx +2 -2
  470. package/src/components/radio-cards.css +23 -113
  471. package/src/components/radio-cards.props.tsx +2 -2
  472. package/src/components/radio-cards.tsx +45 -18
  473. package/src/components/radio.tsx +4 -3
  474. package/src/components/scroll-area.css +1 -1
  475. package/src/components/segmented-control.css +83 -64
  476. package/src/components/segmented-control.props.tsx +3 -3
  477. package/src/components/select.css +502 -224
  478. package/src/components/select.props.tsx +8 -0
  479. package/src/components/select.tsx +45 -2
  480. package/src/components/sidebar.css +17 -6
  481. package/src/components/sidebar.tsx +61 -5
  482. package/src/components/slider.css +228 -88
  483. package/src/components/slider.props.tsx +6 -2
  484. package/src/components/slider.tsx +201 -24
  485. package/src/components/spinner.css +12 -0
  486. package/src/components/switch.css +135 -216
  487. package/src/components/switch.props.tsx +16 -4
  488. package/src/components/switch.tsx +5 -3
  489. package/src/components/tab-nav.tsx +6 -3
  490. package/src/components/tabs.tsx +2 -0
  491. package/src/components/text-area.css +222 -140
  492. package/src/components/text-area.props.tsx +18 -1
  493. package/src/components/text-area.tsx +58 -7
  494. package/src/components/text-field.css +214 -131
  495. package/src/components/text-field.props.tsx +17 -0
  496. package/src/components/text-field.tsx +79 -28
  497. package/src/components/theme.props.tsx +12 -0
  498. package/src/components/theme.tsx +31 -1
  499. package/src/components/toggle-button.tsx +102 -3
  500. package/src/components/toggle-icon-button.tsx +150 -7
  501. package/src/components/tooltip.css +3 -3
  502. package/src/hooks/index.ts +1 -0
  503. package/src/hooks/use-live-announcer.ts +52 -0
  504. package/src/index.ts +1 -0
  505. package/src/props/weight.prop.ts +1 -1
  506. package/src/styles/fonts.css +27 -13
  507. package/src/styles/index.css +1 -1
  508. package/src/styles/tokens/base.css +2 -0
  509. package/src/styles/tokens/blur.css +32 -0
  510. package/src/styles/tokens/color.css +9 -9
  511. package/src/styles/tokens/constants.css +88 -140
  512. package/src/styles/tokens/index.css +2 -0
  513. package/src/styles/tokens/opacity.css +32 -0
  514. package/src/styles/tokens/radius.css +6 -10
  515. package/src/styles/tokens/shadow.css +25 -25
  516. package/src/styles/tokens/transition.css +49 -13
  517. package/src/styles/tokens/typography.css +7 -3
  518. package/src/styles/utilities/font-weight.css +16 -0
  519. package/styles.css +10689 -8708
  520. package/tokens/base.css +127 -49
  521. package/tokens.css +158 -114
  522. package/utilities.css +72 -0
@@ -1,21 +1,45 @@
1
1
  .rt-SliderRoot {
2
- --slider-thumb-size: calc(var(--slider-track-size) + var(--space-1));
2
+ --slider-thumb-width: var(--space-3);
3
+ --slider-thumb-height: var(--space-2);
3
4
 
4
5
  position: relative;
5
6
  display: flex;
6
7
  align-items: center;
7
8
  flex-grow: 1;
8
9
 
9
- border-radius: max(
10
- calc(var(--radius-factor) * var(--slider-track-size) / var(--slider-track-radius-factor)),
11
- calc(var(--radius-factor) * var(--radius-thumb))
12
- );
10
+ border-radius: var(--slider-radius);
13
11
 
14
12
  /* ensures no selection */
15
13
  user-select: none;
16
14
  /* disable browser handling of all panning and zooming gestures on touch devices */
17
15
  touch-action: none;
18
16
 
17
+ /*
18
+ * Theme-level translucent override
19
+ * Applies backdrop filter for elevated visual effects
20
+ */
21
+ :where([data-panel-background='translucent'], [data-material='translucent']) & {
22
+ backdrop-filter: var(--backdrop-filter-components);
23
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
24
+ }
25
+
26
+ /* Prevent backdrop-filter stacking with parent elements */
27
+ isolation: isolate;
28
+
29
+ /*
30
+ * Component-level material overrides
31
+ * These ensure proper rendering based on material setting
32
+ */
33
+ &:where([data-panel-background='solid'], [data-material='solid']) {
34
+ backdrop-filter: none;
35
+ --backdrop-filter-components: none;
36
+ }
37
+
38
+ &:where([data-panel-background='translucent'], [data-material='translucent']) {
39
+ backdrop-filter: var(--backdrop-filter-components);
40
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
41
+ }
42
+
19
43
  &:where([data-orientation='horizontal']) {
20
44
  width: stretch;
21
45
  height: var(--slider-track-size);
@@ -57,8 +81,8 @@
57
81
 
58
82
  .rt-SliderThumb {
59
83
  display: block;
60
- width: var(--slider-thumb-size);
61
- height: var(--slider-thumb-size);
84
+ width: var(--slider-thumb-width);
85
+ height: var(--slider-thumb-height);
62
86
 
63
87
  /* Safari */
64
88
  outline: 0;
@@ -67,8 +91,8 @@
67
91
  content: '';
68
92
  position: absolute;
69
93
  z-index: -1;
70
- width: calc(var(--slider-thumb-size) * var(--slider-thumb-hit-area-multiplier));
71
- height: calc(var(--slider-thumb-size) * var(--slider-thumb-hit-area-multiplier));
94
+ width: calc(var(--slider-thumb-width) * var(--slider-thumb-hit-area-multiplier));
95
+ height: calc(var(--slider-thumb-height) * var(--slider-thumb-hit-area-multiplier));
72
96
  top: var(--position-center);
73
97
  left: var(--position-center);
74
98
  transform: translate(-50%, -50%);
@@ -80,13 +104,13 @@
80
104
  position: absolute;
81
105
  inset: calc(var(--slider-thumb-inset-factor) * var(--slider-track-size) * -1);
82
106
  background-color: white;
83
- border-radius: max(var(--radius-1), var(--radius-thumb));
84
- box-shadow: var(--slider-thumb-box-shadow);
85
- cursor: var(--cursor-slider-thumb);
107
+ border-radius: var(--slider-thumb-radius);
108
+ box-shadow: var(--shadow-2);
109
+ cursor: pointer;
86
110
  }
87
111
 
88
112
  &:where(:focus-visible)::after {
89
- box-shadow: var(--slider-thumb-box-shadow), 0 0 0 var(--slider-focus-ring-inner) var(--accent-3), 0 0 0 var(--slider-focus-ring-outer) var(--focus-8);
113
+ box-shadow: var(--shadow-3), 0 0 0 var(--slider-focus-ring-inner) var(--accent-3), 0 0 0 var(--slider-focus-ring-outer) var(--focus-8);
90
114
  }
91
115
 
92
116
  &:where(:active) {
@@ -103,13 +127,32 @@
103
127
  @breakpoints {
104
128
  .rt-SliderRoot {
105
129
  &:where(.rt-r-size-1) {
106
- --slider-track-size: calc(var(--space-2) * var(--size-multiplier-small));
130
+ --slider-track-size: var(--progress-slider-height-1);
131
+ --slider-radius: var(--progress-slider-radius-1);
132
+ --slider-thumb-width: var(--space-3);
133
+ --slider-thumb-height: var(--space-2);
134
+ --slider-thumb-radius: calc(var(--radius-1) * 0.75);
107
135
  }
108
136
  &:where(.rt-r-size-2) {
109
- --slider-track-size: var(--space-2);
137
+ --slider-track-size: var(--progress-slider-height-2);
138
+ --slider-radius: var(--progress-slider-radius-2);
139
+ --slider-thumb-width: var(--space-4);
140
+ --slider-thumb-height: calc(var(--space-2) + var(--space-1));
141
+ --slider-thumb-radius: calc(var(--radius-2) * 0.75);
110
142
  }
111
143
  &:where(.rt-r-size-3) {
112
- --slider-track-size: calc(var(--space-2) * var(--size-multiplier-large));
144
+ --slider-track-size: var(--progress-slider-height-3);
145
+ --slider-radius: var(--progress-slider-radius-3);
146
+ --slider-thumb-width: var(--space-4);
147
+ --slider-thumb-height: var(--space-3);
148
+ --slider-thumb-radius: calc(var(--radius-3) * 0.75);
149
+ }
150
+ &:where(.rt-r-size-4) {
151
+ --slider-track-size: var(--progress-slider-height-4);
152
+ --slider-radius: var(--progress-slider-radius-4);
153
+ --slider-thumb-width: calc(var(--space-4) + var(--space-1));
154
+ --slider-thumb-height: calc(var(--space-3) + var(--space-1));
155
+ --slider-thumb-radius: calc(var(--radius-4) * 0.75);
113
156
  }
114
157
  }
115
158
  }
@@ -124,103 +167,115 @@
124
167
 
125
168
  .rt-SliderRoot:where(.rt-variant-surface) {
126
169
  & :where(.rt-SliderTrack) {
127
- background-color: var(--gray-a3);
128
- box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a5);
170
+ background-color: var(--gray-2);
171
+ box-shadow: inset 0 0 0 1px var(--gray-6);
172
+
173
+ /* Theme-level translucent override */
174
+ :where([data-panel-background='translucent'], [data-material='translucent']) & {
175
+ background-color: color-mix(in srgb, var(--gray-a2), var(--gray-2) 60%);
176
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
177
+ }
178
+
179
+ /* Component-level overrides */
180
+ &:where([data-panel-background='solid'], [data-material='solid']) {
181
+ background-color: var(--gray-2);
182
+ box-shadow: inset 0 0 0 1px var(--gray-6);
183
+ }
184
+
185
+ &:where([data-panel-background='translucent'], [data-material='translucent']) {
186
+ background-color: color-mix(in srgb, var(--gray-a2), var(--gray-2) 60%);
187
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
188
+ }
129
189
 
130
190
  &:where([data-disabled]) {
131
- box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a4);
191
+ box-shadow: inset 0 0 0 1px var(--gray-5);
132
192
  }
133
193
  }
134
194
 
135
195
  & :where(.rt-SliderRange) {
136
- background-color: var(--accent-track);
137
- background-image: var(--slider-range-high-contrast-background-image);
138
- box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a5);
196
+ background-color: var(--accent-9);
139
197
  }
140
198
 
141
- & :where(.rt-SliderThumb) {
142
- --slider-thumb-box-shadow: 0 0 0 1px var(--black-a4);
143
-
144
- &:where([data-disabled])::after {
145
- background-color: var(--gray-1);
146
- box-shadow: 0 0 0 1px var(--gray-6);
199
+ &:where(.rt-high-contrast) {
200
+ & :where(.rt-SliderRange) {
201
+ background-color: var(--accent-12);
147
202
  }
148
203
  }
204
+
205
+
149
206
  }
150
207
 
151
- /* classic */
208
+ /* soft */
152
209
 
153
- .rt-SliderRoot:where(.rt-variant-classic) {
210
+ .rt-SliderRoot:where(.rt-variant-soft) {
154
211
  & :where(.rt-SliderTrack) {
155
- background-color: var(--gray-a3);
156
- position: relative;
157
-
158
- &::before {
159
- content: '';
160
- inset: 0;
161
- position: absolute;
162
- border-radius: inherit;
163
- box-shadow: var(--classic-inset-shadow-dark);
212
+ background-color: var(--gray-3);
213
+
214
+ /* Theme-level translucent override */
215
+ :where([data-panel-background='translucent'], [data-material='translucent']) & {
216
+ background-color: color-mix(in srgb, var(--gray-a3), var(--gray-3) 60%);
164
217
  }
165
- &:where([data-disabled])::before {
166
- opacity: var(--opacity-disabled);
218
+
219
+ /* Component-level overrides */
220
+ &:where([data-panel-background='solid'], [data-material='solid']) {
221
+ background-color: var(--gray-3);
222
+ }
223
+
224
+ &:where([data-panel-background='translucent'], [data-material='translucent']) {
225
+ background-color: color-mix(in srgb, var(--gray-a3), var(--gray-3) 60%);
167
226
  }
168
227
  }
169
228
 
170
229
  & :where(.rt-SliderRange) {
171
- background-color: var(--accent-track);
172
- background-image: var(--slider-range-high-contrast-background-image);
173
- box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--accent-a4), inset 0 0 0 var(--border-width-standard) var(--black-a1),
174
- inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
230
+ background-color: var(--accent-9);
231
+ }
175
232
 
176
- &:where(.rt-high-contrast) {
177
- box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--black-a2), inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
233
+ &:where(.rt-high-contrast) {
234
+ & :where(.rt-SliderRange) {
235
+ background-color: var(--accent-12);
178
236
  }
179
237
  }
180
238
 
181
239
  & :where(.rt-SliderThumb) {
182
- /* prettier-ignore */
183
- --slider-thumb-box-shadow:
184
- 0 0 0 1px var(--black-a3),
185
- 0 1px 3px var(--black-a1),
186
- 0 2px 4px -1px var(--black-a1);
187
-
188
- &:where([data-disabled])::after {
189
- background-color: var(--gray-1);
190
- box-shadow: 0 0 0 1px var(--gray-6);
191
- }
240
+ --slider-thumb-box-shadow: var(--shadow-3);
192
241
  }
193
242
  }
194
243
 
195
- /* soft */
244
+ /* outline */
196
245
 
197
- .rt-SliderRoot:where(.rt-variant-soft) {
246
+ .rt-SliderRoot:where(.rt-variant-outline) {
198
247
  & :where(.rt-SliderTrack) {
199
- background-color: var(--gray-a4);
200
- /* Blend with white to increase contrast in dark mode */
201
- background-image: linear-gradient(var(--white-a1), var(--white-a1));
248
+ /* Base state: no background, just border */
249
+ box-shadow: inset 0 0 0 1px var(--gray-6);
202
250
 
203
- &:where([data-disabled]) {
204
- background-color: var(--gray-a4);
205
- background-image: none;
251
+ /* Theme-level translucent override */
252
+ :where([data-panel-background='translucent'], [data-material='translucent']) & {
253
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
254
+ }
255
+
256
+ /* Component-level overrides */
257
+ &:where([data-panel-background='solid'], [data-material='solid']) {
258
+ box-shadow: inset 0 0 0 1px var(--gray-6);
259
+ }
260
+
261
+ &:where([data-panel-background='translucent'], [data-material='translucent']) {
262
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
206
263
  }
207
264
  }
208
265
 
209
266
  & :where(.rt-SliderRange) {
210
- background-image: linear-gradient(var(--accent-a5), var(--accent-a5)),
211
- var(--slider-range-high-contrast-background-image);
212
- background-color: var(--accent-6);
267
+ background-color: var(--accent-9);
213
268
  }
214
269
 
215
- & :where(.rt-SliderThumb) {
216
- --slider-thumb-box-shadow: 0 0 0 1px var(--black-a3), 0 0 0 1px var(--gray-a2), 0 0 0 1px var(--accent-a2),
217
- 0 1px 2px var(--gray-a4), 0 1px 3px -0.5px var(--gray-a3);
218
-
219
- &:where([data-disabled])::after {
220
- background-color: var(--gray-1);
221
- box-shadow: 0 0 0 1px var(--gray-5);
270
+ &:where(.rt-high-contrast) {
271
+ & :where(.rt-SliderRange) {
272
+ background-color: var(--accent-12);
222
273
  }
223
274
  }
275
+
276
+ & :where(.rt-SliderThumb) {
277
+ --slider-thumb-box-shadow: var(--shadow-3);
278
+ }
224
279
  }
225
280
 
226
281
  /* all high-contrast */
@@ -236,28 +291,113 @@
236
291
  --slider-range-high-contrast-background-image: none;
237
292
  }
238
293
 
239
- :where(.radix-themes) {
240
- --slider-disabled-blend-mode: multiply;
241
- }
242
- :is(.dark, .dark-theme),
243
- :is(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
244
- --slider-disabled-blend-mode: screen;
245
- }
294
+
246
295
 
247
296
  /* all disabled Sliders */
248
297
 
249
298
  [data-disabled] {
250
299
  .rt-SliderRoot:where(&) {
251
300
  cursor: var(--cursor-disabled);
252
- mix-blend-mode: var(--slider-disabled-blend-mode);
301
+ }
302
+ .rt-SliderTrack:where(&) {
303
+ background-color: var(--gray-a3) !important;
304
+ box-shadow: none !important;
253
305
  }
254
306
  .rt-SliderRange:where(&) {
255
- background-color: transparent;
256
- background-image: none;
257
- box-shadow: none;
307
+ background-color: var(--accent-a3) !important;
258
308
  }
259
- .rt-SliderThumb:where(&),
260
- .rt-SliderThumb:where(&)::after {
309
+ .rt-SliderThumb:where(&) {
261
310
  cursor: var(--cursor-disabled);
262
311
  }
312
+ .rt-SliderThumb:where(&)::after {
313
+ background-color: var(--gray-3) !important;
314
+ box-shadow: none !important;
315
+ }
316
+ }
317
+
318
+ /***************************************************************************************************
319
+ * *
320
+ * TICKS *
321
+ * *
322
+ ***************************************************************************************************/
323
+
324
+ .rt-SliderContainer {
325
+ position: relative;
326
+ }
327
+
328
+ .rt-SliderTicks {
329
+ position: absolute;
330
+ top: 100%;
331
+ left: 0;
332
+ right: 0;
333
+ margin-top: var(--space-2);
334
+ pointer-events: auto;
335
+ height: 44px;
336
+ }
337
+
338
+ .rt-SliderTick {
339
+ position: absolute;
340
+ top: 0;
341
+ display: flex;
342
+ flex-direction: column;
343
+ align-items: center;
344
+ gap: var(--space-1);
345
+ background: none;
346
+ border: none;
347
+ padding: var(--space-2);
348
+ cursor: pointer;
349
+ min-height: 44px;
350
+ min-width: 44px;
351
+ border-radius: var(--radius-2);
352
+ transition: background-color var(--transition-standard);
353
+ z-index: 1;
354
+ pointer-events: auto;
355
+ }
356
+
357
+ .rt-SliderTick:where(:hover) {
358
+ :where(.rt-SliderTickMark) {
359
+ background-color: var(--gray-12) !important;
360
+ }
361
+
362
+ :where(.rt-SliderTickLabel) {
363
+ color: var(--gray-12) !important;
364
+ font-weight: var(--font-weight-medium);
365
+ }
366
+ }
367
+
368
+ .rt-SliderTick:where(:active) {
369
+ :where(.rt-SliderTickMark) {
370
+ background-color: var(--gray-12) !important;
371
+ }
372
+
373
+ :where(.rt-SliderTickLabel) {
374
+ color: var(--gray-12) !important;
375
+ font-weight: var(--font-weight-medium);
376
+ }
377
+ }
378
+
379
+ .rt-SliderTick:where(:focus-visible) {
380
+ outline: 2px solid var(--focus-8);
381
+ outline-offset: 2px;
382
+ }
383
+
384
+ .rt-SliderTickMark {
385
+ width: 1px;
386
+ height: var(--space-2);
387
+ background-color: var(--gray-6);
388
+ border-radius: 1px;
389
+ transition: background-color var(--transition-standard);
390
+ }
391
+
392
+ .rt-SliderTickLabel {
393
+ font-size: var(--font-size-0);
394
+ line-height: var(--line-height-0);
395
+ color: var(--gray-11);
396
+ font-weight: var(--font-weight-regular);
397
+ white-space: nowrap;
398
+ overflow: hidden;
399
+ text-overflow: ellipsis;
400
+ max-width: 60px;
401
+ text-align: center;
402
+ transition: color var(--transition-standard), font-weight var(--transition-standard);
263
403
  }
@@ -4,18 +4,22 @@ import { radiusPropDef } from '../props/radius.prop.js';
4
4
 
5
5
  import type { PropDef } from '../props/prop-def.js';
6
6
 
7
- const sizes = ['1', '2', '3'] as const;
8
- const variants = ['classic', 'surface', 'soft'] as const;
7
+ const sizes = ['1', '2', '3', '4'] as const;
8
+ const variants = ['surface', 'soft', 'outline'] as const;
9
9
 
10
10
  const sliderPropDefs = {
11
11
  size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
12
12
  variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
13
+ showTickLabels: { type: 'boolean', className: 'rt-show-tick-labels' },
14
+ snapToTicks: { type: 'boolean', className: 'rt-snap-to-ticks' },
13
15
  ...colorPropDef,
14
16
  ...highContrastPropDef,
15
17
  ...radiusPropDef,
16
18
  } satisfies {
17
19
  size: PropDef<(typeof sizes)[number]>;
18
20
  variant: PropDef<(typeof variants)[number]>;
21
+ showTickLabels: PropDef<boolean>;
22
+ snapToTicks: PropDef<boolean>;
19
23
  };
20
24
 
21
25
  export { sliderPropDefs };
@@ -18,36 +18,213 @@ interface SliderProps
18
18
  'asChild' | 'color' | 'children' | 'defaultChecked'
19
19
  >,
20
20
  MarginProps,
21
- SliderOwnProps {}
21
+ SliderOwnProps {
22
+ ticks?: Array<{ value: number; label?: string }>;
23
+ unit?: string;
24
+ }
22
25
  const Slider = React.forwardRef<SliderElement, SliderProps>((props, forwardedRef) => {
23
26
  const { className, color, radius, tabIndex, ...sliderProps } = extractProps(
24
27
  props,
25
28
  sliderPropDefs,
26
- marginPropDefs
29
+ marginPropDefs,
27
30
  );
31
+ const { ticks, showTickLabels, snapToTicks, unit } = props;
32
+
33
+ const min = sliderProps.min ?? 0;
34
+ const max = sliderProps.max ?? 100;
35
+
36
+ // Current value for accessibility
37
+ const currentValue = sliderProps.value ?? sliderProps.defaultValue ?? [min];
38
+ const isRange = Array.isArray(currentValue) && currentValue.length > 1;
39
+
40
+ // For snapping to ticks, we need to handle this differently
41
+ // Radix slider doesn't support arbitrary step values, so we'll handle snapping in the onValueChange
42
+ const step = sliderProps.step;
43
+
44
+ // Optimized snap-to-ticks with memoized sorted ticks
45
+ const sortedTicks = React.useMemo(
46
+ () => (ticks ? [...ticks].sort((a, b) => a.value - b.value) : []),
47
+ [ticks],
48
+ );
49
+
50
+ // Function to snap value to nearest tick (optimized)
51
+ const snapToNearestTick = React.useCallback(
52
+ (value: number): number => {
53
+ if (!snapToTicks || !sortedTicks.length) return value;
54
+
55
+ // Binary search for closest tick
56
+ let left = 0;
57
+ let right = sortedTicks.length - 1;
58
+
59
+ if (value <= sortedTicks[left].value) return sortedTicks[left].value;
60
+ if (value >= sortedTicks[right].value) return sortedTicks[right].value;
61
+
62
+ while (left <= right) {
63
+ const mid = Math.floor((left + right) / 2);
64
+ if (sortedTicks[mid].value === value) return value;
65
+
66
+ if (sortedTicks[mid].value < value) {
67
+ left = mid + 1;
68
+ } else {
69
+ right = mid - 1;
70
+ }
71
+ }
72
+
73
+ // Find closest between left and right
74
+ const leftDistance = Math.abs(value - sortedTicks[right].value);
75
+ const rightDistance = Math.abs(value - sortedTicks[left].value);
76
+
77
+ return leftDistance <= rightDistance ? sortedTicks[right].value : sortedTicks[left].value;
78
+ },
79
+ [snapToTicks, sortedTicks],
80
+ );
81
+
82
+ // Format value text for accessibility
83
+ const formatValueText = React.useCallback(
84
+ (values: number[]): string => {
85
+ const formatValue = (val: number) => (unit ? `${val} ${unit}` : val.toString());
86
+
87
+ if (values.length === 1) {
88
+ return `${formatValue(values[0])} out of ${formatValue(max)}`;
89
+ } else if (values.length === 2) {
90
+ return `${formatValue(values[0])} to ${formatValue(values[1])} out of ${formatValue(max)}`;
91
+ } else {
92
+ return `${values.map(formatValue).join(', ')} out of ${formatValue(max)}`;
93
+ }
94
+ },
95
+ [unit, max],
96
+ );
97
+
98
+ // Memoize tick elements for performance
99
+ const tickElements = React.useMemo(() => {
100
+ if (!ticks) return null;
101
+
102
+ return ticks.map((tick, index) => ({
103
+ ...tick,
104
+ percentage: ((tick.value - min) / (max - min)) * 100,
105
+ index,
106
+ }));
107
+ }, [ticks, min, max]);
108
+
109
+ // Live region state for accessibility announcements
110
+ const [announceValue, setAnnounceValue] = React.useState<string>('');
111
+
112
+ const { onValueChange } = sliderProps;
113
+ // Handle value changes with snapping
114
+ const handleValueChange = React.useCallback(
115
+ (newValue: number[]) => {
116
+ const finalValue =
117
+ snapToTicks && ticks ? newValue.map((v) => snapToNearestTick(v)) : newValue;
118
+
119
+ // Update live region for screen readers
120
+ const valueText = formatValueText(finalValue);
121
+ setAnnounceValue(valueText);
122
+
123
+ onValueChange?.(finalValue);
124
+ },
125
+ [snapToTicks, ticks, snapToNearestTick, formatValueText, onValueChange],
126
+ );
127
+
128
+ // Clear announcement after a delay to prevent spam
129
+ React.useEffect(() => {
130
+ if (announceValue) {
131
+ const timer = setTimeout(() => setAnnounceValue(''), 1000);
132
+ return () => clearTimeout(timer);
133
+ }
134
+ }, [announceValue]);
135
+
28
136
  return (
29
- <SliderPrimitive.Root
30
- data-accent-color={color}
31
- data-radius={radius}
32
- ref={forwardedRef}
33
- {...sliderProps}
34
- asChild={false}
35
- className={classNames('rt-SliderRoot', className)}
36
- >
37
- <SliderPrimitive.Track className="rt-SliderTrack">
38
- <SliderPrimitive.Range
39
- className={classNames('rt-SliderRange', { 'rt-high-contrast': props.highContrast })}
40
- data-inverted={sliderProps.inverted ? '' : undefined}
41
- />
42
- </SliderPrimitive.Track>
43
- {(sliderProps.value ?? sliderProps.defaultValue ?? []).map((value, index) => (
44
- <SliderPrimitive.Thumb
45
- key={index}
46
- className="rt-SliderThumb"
47
- {...(tabIndex !== undefined ? { tabIndex } : undefined)}
48
- />
49
- ))}
50
- </SliderPrimitive.Root>
137
+ <div className="rt-SliderContainer">
138
+ {/* Live region for screen reader announcements */}
139
+ <div
140
+ aria-live="polite"
141
+ aria-atomic="true"
142
+ className="sr-only"
143
+ style={{
144
+ position: 'absolute',
145
+ left: '-10000px',
146
+ width: '1px',
147
+ height: '1px',
148
+ overflow: 'hidden',
149
+ }}
150
+ >
151
+ {announceValue}
152
+ </div>
153
+
154
+ <SliderPrimitive.Root
155
+ data-accent-color={color}
156
+ data-radius={radius}
157
+ ref={forwardedRef}
158
+ {...sliderProps}
159
+ step={step}
160
+ onValueChange={handleValueChange}
161
+ asChild={false}
162
+ className={classNames('rt-SliderRoot', className)}
163
+ // Essential ARIA attributes for WCAG 2.2 AA compliance
164
+ aria-valuemin={min}
165
+ aria-valuemax={max}
166
+ aria-valuenow={Array.isArray(currentValue) ? currentValue[0] : (currentValue as number)}
167
+ aria-valuetext={formatValueText(currentValue as number[])}
168
+ aria-label={props['aria-label'] || `${isRange ? 'Range' : 'Value'} slider`}
169
+ >
170
+ <SliderPrimitive.Track className="rt-SliderTrack">
171
+ <SliderPrimitive.Range
172
+ className={classNames('rt-SliderRange', { 'rt-high-contrast': props.highContrast })}
173
+ data-inverted={sliderProps.inverted ? '' : undefined}
174
+ />
175
+ </SliderPrimitive.Track>
176
+ {(sliderProps.value ?? sliderProps.defaultValue ?? []).map((value, index) => (
177
+ <SliderPrimitive.Thumb
178
+ key={index}
179
+ className="rt-SliderThumb"
180
+ {...(tabIndex !== undefined ? { tabIndex } : undefined)}
181
+ aria-label={
182
+ isRange
183
+ ? `${index === 0 ? 'Minimum' : index === 1 ? 'Maximum' : `Thumb ${index + 1}`} value: ${unit ? `${value} ${unit}` : value}`
184
+ : `Slider value: ${unit ? `${value} ${unit}` : value}`
185
+ }
186
+ aria-valuetext={unit ? `${value} ${unit}` : value.toString()}
187
+ />
188
+ ))}
189
+ </SliderPrimitive.Root>
190
+ {tickElements && (
191
+ <div className="rt-SliderTicks" role="group" aria-label="Slider tick marks">
192
+ {tickElements.map((tick) => {
193
+ return (
194
+ <button
195
+ key={tick.index}
196
+ className="rt-SliderTick"
197
+ style={{
198
+ left: `${tick.percentage}%`,
199
+ transform: 'translateX(-50%)',
200
+ }}
201
+ onClick={() => {
202
+ const currentValues = sliderProps.value ?? sliderProps.defaultValue ?? [min];
203
+ const newValue = Array.isArray(currentValues)
204
+ ? currentValues.map(() => tick.value)
205
+ : [tick.value];
206
+
207
+ handleValueChange(newValue);
208
+ }}
209
+ aria-label={`Set to ${tick.label || (unit ? `${tick.value} ${unit}` : tick.value)}`}
210
+ aria-describedby={tick.label ? undefined : `tick-${tick.index}-value`}
211
+ type="button"
212
+ >
213
+ <div className="rt-SliderTickMark" />
214
+ {tick.label && showTickLabels !== false && (
215
+ <div className="rt-SliderTickLabel">{tick.label}</div>
216
+ )}
217
+ {!tick.label && (
218
+ <span id={`tick-${tick.index}-value`} className="sr-only">
219
+ {unit ? `${tick.value} ${unit}` : tick.value}
220
+ </span>
221
+ )}
222
+ </button>
223
+ );
224
+ })}
225
+ </div>
226
+ )}
227
+ </div>
51
228
  );
52
229
  });
53
230
  Slider.displayName = 'Slider';