@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
@@ -52,11 +52,34 @@ interface DropdownMenuContentProps
52
52
  const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
53
53
  (props, forwardedRef) => {
54
54
  const themeContext = useThemeContext();
55
+
56
+ // Show deprecation warning for panelBackground when used
57
+ React.useEffect(() => {
58
+ if (props.panelBackground !== undefined) {
59
+ console.warn(
60
+ 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
61
+ );
62
+ }
63
+ }, [props.panelBackground]);
64
+
65
+ // Material takes precedence over panelBackground
66
+ const effectiveMaterial =
67
+ props.material ?? props.panelBackground ?? themeContext.panelBackground;
68
+
69
+ // Memoize theme context values to prevent unnecessary re-renders
70
+ const memoizedThemeContext = React.useMemo(
71
+ () => ({
72
+ material: effectiveMaterial,
73
+ accentColor: themeContext.accentColor,
74
+ }),
75
+ [effectiveMaterial, themeContext.accentColor],
76
+ );
77
+
55
78
  const {
56
79
  size = dropdownMenuContentPropDefs.size.default,
57
80
  variant = dropdownMenuContentPropDefs.variant.default,
58
81
  highContrast = dropdownMenuContentPropDefs.highContrast.default,
59
- panelBackground = props.panelBackground ?? themeContext.panelBackground,
82
+ material = memoizedThemeContext.material,
60
83
  } = props;
61
84
  const {
62
85
  className,
@@ -64,16 +87,23 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
64
87
  color,
65
88
  container,
66
89
  forceMount,
67
- panelBackground: _,
90
+ material: _,
91
+ panelBackground: __,
68
92
  ...contentProps
69
93
  } = extractProps(props, dropdownMenuContentPropDefs);
70
- const resolvedColor = color || themeContext.accentColor;
94
+
95
+ // Memoize color resolution to prevent unnecessary re-renders
96
+ const resolvedColor = React.useMemo(
97
+ () => color || memoizedThemeContext.accentColor,
98
+ [color, memoizedThemeContext.accentColor],
99
+ );
71
100
  return (
72
101
  <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>
73
102
  <Theme asChild>
74
103
  <DropdownMenuPrimitive.Content
75
104
  data-accent-color={resolvedColor}
76
- data-panel-background={panelBackground}
105
+ data-material={material}
106
+ data-panel-background={material}
77
107
  align="start"
78
108
  sideOffset={4}
79
109
  collisionPadding={10}
@@ -91,8 +121,8 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
91
121
  <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>
92
122
  <DropdownMenuContentContext.Provider
93
123
  value={React.useMemo(
94
- () => ({ size, variant, color: resolvedColor, highContrast, panelBackground }),
95
- [size, variant, resolvedColor, highContrast, panelBackground],
124
+ () => ({ size, variant, color: resolvedColor, highContrast, material }),
125
+ [size, variant, resolvedColor, highContrast, material],
96
126
  )}
97
127
  >
98
128
  {children}
@@ -307,25 +337,31 @@ DropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';
307
337
 
308
338
  type DropdownMenuSubContentElement = React.ElementRef<typeof DropdownMenuPrimitive.SubContent>;
309
339
  interface DropdownMenuSubContentProps
310
- extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps> {
340
+ extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps>,
341
+ DropdownMenuContentContextValue {
311
342
  container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];
312
343
  }
313
344
  const DropdownMenuSubContent = React.forwardRef<
314
345
  DropdownMenuSubContentElement,
315
346
  DropdownMenuSubContentProps
316
347
  >((props, forwardedRef) => {
317
- const { size, variant, color, highContrast, panelBackground } = React.useContext(
318
- DropdownMenuContentContext,
348
+ // Memoize context consumption to prevent unnecessary re-renders
349
+ const contextValue = React.useContext(DropdownMenuContentContext);
350
+ const { size, variant, color, highContrast, material } = React.useMemo(
351
+ () => contextValue,
352
+ [contextValue],
319
353
  );
354
+
320
355
  const {
321
356
  className,
322
357
  children,
323
358
  container,
324
359
  forceMount,
325
- panelBackground: _,
360
+ material: _,
361
+ panelBackground: __,
326
362
  ...subContentProps
327
363
  } = extractProps(
328
- { size, variant, color, highContrast, panelBackground, ...props },
364
+ { size, variant, color, highContrast, material, ...props },
329
365
  dropdownMenuContentPropDefs,
330
366
  );
331
367
  return (
@@ -333,7 +369,8 @@ const DropdownMenuSubContent = React.forwardRef<
333
369
  <Theme asChild>
334
370
  <DropdownMenuPrimitive.SubContent
335
371
  data-accent-color={color}
336
- data-panel-background={panelBackground}
372
+ data-material={material}
373
+ data-panel-background={material}
337
374
  alignOffset={-Number(size) * 4}
338
375
  // Side offset accounts for the outer solid box-shadow
339
376
  sideOffset={1}
@@ -1,11 +1,35 @@
1
+ /**
2
+ * IconButton Component Styles
3
+ *
4
+ * This file contains the core styling for the IconButton component, which
5
+ * extends the base button with specialized behavior for icon-only interactions.
6
+ * Icon buttons maintain square aspect ratios and provide consistent icon sizing
7
+ * across all variants and sizes.
8
+ *
9
+ * Key features:
10
+ * - Square aspect ratios for consistent visual alignment
11
+ * - Automatic icon sizing based on button size
12
+ * - Specialized flush behavior for ghost variants
13
+ * - Responsive design with mobile-first approach
14
+ * - Seamless text integration with negative margins
15
+ */
16
+
1
17
  @import './_internal/base-button.css';
2
18
 
3
19
  /***************************************************************************************************
4
20
  * *
5
21
  * SIZES *
6
22
  * *
23
+ * Icon button sizes maintain square aspect ratios for consistent visual alignment.
24
+ * Each size corresponds to the same dimensions as regular buttons but ensures
25
+ * perfect squares for optimal icon display and touch targets.
26
+ * *
7
27
  ***************************************************************************************************/
8
28
 
29
+ /*
30
+ * Base icon button styling that ensures square aspect ratios
31
+ * Uses the same height as base buttons but sets width to match
32
+ */
9
33
  .rt-IconButton {
10
34
  height: var(--base-button-height);
11
35
  width: var(--base-button-height);
@@ -13,28 +37,54 @@
13
37
 
14
38
  @breakpoints {
15
39
  .rt-IconButton {
40
+ /*
41
+ * Size 1: Compact (24px x 24px)
42
+ * Designed for toolbars and dense interfaces
43
+ */
16
44
  &:where(.rt-r-size-1) {
45
+ /*
46
+ * Icon sizing for size 1
47
+ * Icons are automatically sized to match the button's scale
48
+ */
17
49
  /* stylelint-disable-next-line selector-max-type */
18
50
  & :where(svg) {
19
51
  width: var(--content-icon-size-1);
20
52
  height: var(--content-icon-size-1);
21
53
  }
22
54
  }
55
+
56
+ /*
57
+ * Size 2: Standard (32px x 32px)
58
+ * Default size for most interface contexts
59
+ */
23
60
  &:where(.rt-r-size-2) {
61
+ /* Icon sizing for size 2 */
24
62
  /* stylelint-disable-next-line selector-max-type */
25
63
  & :where(svg) {
26
64
  width: var(--content-icon-size-2);
27
65
  height: var(--content-icon-size-2);
28
66
  }
29
67
  }
68
+
69
+ /*
70
+ * Size 3: Large (40px x 40px)
71
+ * Recommended for important actions and mobile touch targets
72
+ */
30
73
  &:where(.rt-r-size-3) {
74
+ /* Icon sizing for size 3 */
31
75
  /* stylelint-disable-next-line selector-max-type */
32
76
  & :where(svg) {
33
77
  width: var(--content-icon-size-3);
34
78
  height: var(--content-icon-size-3);
35
79
  }
36
80
  }
81
+
82
+ /*
83
+ * Size 4: Extra Large (48px x 48px)
84
+ * Designed for hero sections and maximum visual impact
85
+ */
37
86
  &:where(.rt-r-size-4) {
87
+ /* Icon sizing for size 4 */
38
88
  /* stylelint-disable-next-line selector-max-type */
39
89
  & :where(svg) {
40
90
  width: var(--content-icon-size-4);
@@ -43,27 +93,42 @@
43
93
  }
44
94
  }
45
95
 
96
+ /*
97
+ * Specialized flush behavior for ghost variant icon buttons
98
+ * This creates seamless text integration by using negative margins
99
+ * to compensate for the button's padding
100
+ */
46
101
  .rt-IconButton:where(.rt-variant-ghost) {
47
102
  &:where([data-flush='true']) {
48
- /* We reset the defined margin variables to avoid inheriting them from a higher component */
49
- /* If a margin IS defined on the component itself, the utility class will win and reset it */
103
+ /*
104
+ * Reset defined margin variables to avoid inheriting from higher components
105
+ * If a margin IS defined on the component itself, the utility class will win and reset it
106
+ */
50
107
  --margin-top: 0px;
51
108
  --margin-right: 0px;
52
109
  --margin-bottom: 0px;
53
110
  --margin-left: 0px;
54
111
 
55
- /* Define the overrides to incorporate the negative margins using ghost padding */
112
+ /*
113
+ * Define overrides to incorporate negative margins using ghost padding
114
+ * This creates the seamless integration effect by pulling the button
115
+ * closer to surrounding text
116
+ */
56
117
  --margin-top-override: calc(var(--margin-top) - var(--icon-button-ghost-padding));
57
118
  --margin-right-override: calc(var(--margin-right) - var(--icon-button-ghost-padding));
58
119
  --margin-bottom-override: calc(var(--margin-bottom) - var(--icon-button-ghost-padding));
59
120
  --margin-left-override: calc(var(--margin-left) - var(--icon-button-ghost-padding));
60
121
 
122
+ /* Apply the calculated negative margins */
61
123
  margin-top: var(--margin-top-override);
62
124
  margin-right: var(--margin-right-override);
63
125
  margin-bottom: var(--margin-bottom-override);
64
126
  margin-left: var(--margin-left-override);
65
127
 
66
- /* Reset the overrides on direct children */
128
+ /*
129
+ * Reset the overrides on direct children
130
+ * This prevents the negative margins from affecting child elements
131
+ */
67
132
  :where(&) > * {
68
133
  --margin-top-override: initial;
69
134
  --margin-right-override: initial;
@@ -72,6 +137,10 @@
72
137
  }
73
138
  }
74
139
 
140
+ /*
141
+ * Ghost padding values for different sizes
142
+ * These determine the amount of negative margin applied in flush mode
143
+ */
75
144
  &:where(.rt-r-size-1) {
76
145
  --icon-button-ghost-padding: var(--space-1);
77
146
  }
@@ -2,55 +2,161 @@ import * as React from 'react';
2
2
  import classNames from 'classnames';
3
3
 
4
4
  import { BaseButton } from './_internal/base-button.js';
5
+ import { Tooltip } from './tooltip.js';
5
6
  import type { BaseButtonProps } from './_internal/base-button.js';
6
7
 
7
8
  type IconButtonElement = React.ElementRef<typeof BaseButton>;
8
9
 
9
- // Required accessibility props for icon buttons
10
+ /**
11
+ * Required accessibility props for icon buttons
12
+ * Icon buttons must have an accessible name to meet WCAG guidelines
13
+ *
14
+ * Three ways to provide accessibility:
15
+ * 1. aria-label: Direct descriptive text
16
+ * 2. aria-labelledby: Reference to a label element
17
+ * 3. children: Visible text content (fallback)
18
+ */
10
19
  type AccessibilityProps =
11
20
  | { 'aria-label': string; 'aria-labelledby'?: never }
12
21
  | { 'aria-label'?: never; 'aria-labelledby': string }
13
22
  | { 'aria-label'?: never; 'aria-labelledby'?: never; children: React.ReactNode };
14
23
 
15
- // Polymorphic IconButton props with required accessibility
16
- type IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps;
24
+ /**
25
+ * Tooltip configuration props that can be passed to IconButton
26
+ * These props are forwarded to the underlying Tooltip component
27
+ */
28
+ interface IconButtonTooltipProps {
29
+ /** Content to display in the tooltip on hover/focus */
30
+ tooltip?: React.ReactNode;
31
+ /** Side of the button where the tooltip should appear */
32
+ tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
33
+ /** Alignment of the tooltip relative to the button */
34
+ tooltipAlign?: 'start' | 'center' | 'end';
35
+ /** Delay before showing the tooltip (in milliseconds) */
36
+ tooltipDelayDuration?: number;
37
+ /** Whether to disable hoverable content behavior */
38
+ tooltipDisableHoverableContent?: boolean;
39
+ }
17
40
 
41
+ /**
42
+ * Core IconButton props excluding the 'as' prop for polymorphic behavior
43
+ * Combines BaseButton props with accessibility requirements and tooltip functionality
44
+ */
45
+ type IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps & IconButtonTooltipProps;
46
+
47
+ /**
48
+ * Polymorphic IconButton props that support rendering as different HTML elements
49
+ * @template C - The element type to render as (defaults to 'button')
50
+ */
18
51
  type IconButtonProps<C extends React.ElementType = 'button'> = IconButtonOwnProps & {
52
+ /** Element type to render as (e.g., 'a', 'span', etc.) */
19
53
  as?: C;
20
54
  } & Omit<React.ComponentPropsWithoutRef<C>, keyof IconButtonOwnProps>;
21
55
 
56
+ /**
57
+ * IconButton component type that supports polymorphic rendering
58
+ * @template C - The element type to render as
59
+ */
22
60
  type IconButtonComponent = <C extends React.ElementType = 'button'>(
23
61
  props: IconButtonProps<C> & { ref?: React.ForwardedRef<IconButtonElement> },
24
62
  ) => React.ReactElement | null;
25
63
 
64
+ /**
65
+ * IconButton component for compact, accessible icon-only interactions
66
+ *
67
+ * The IconButton component extends Button with specialized behavior for visual symbols.
68
+ * It enforces accessibility requirements, provides automatic square sizing, and includes
69
+ * built-in tooltip integration. Icon buttons are essential for space-efficient interfaces
70
+ * while maintaining accessibility compliance.
71
+ *
72
+ * Key features:
73
+ * - Enforced accessibility requirements (aria-label, aria-labelledby, or children)
74
+ * - Automatic square aspect ratios for consistent visual alignment
75
+ * - Built-in tooltip support for context and guidance
76
+ * - Same variant and size system as Button for consistency
77
+ * - Runtime validation for accessibility compliance
78
+ *
79
+ * @example
80
+ * ```tsx
81
+ * // Basic icon button with aria-label
82
+ * <IconButton aria-label="Settings">
83
+ * <Settings />
84
+ * </IconButton>
85
+ *
86
+ * // Icon button with tooltip
87
+ * <IconButton aria-label="Save" tooltip="Save your progress">
88
+ * <Save />
89
+ * </IconButton>
90
+ *
91
+ * // Icon button with aria-labelledby
92
+ * <IconButton aria-labelledby="settings-label">
93
+ * <Settings />
94
+ * </IconButton>
95
+ * <span id="settings-label">Open settings panel</span>
96
+ *
97
+ * // Icon button with visible text (fallback)
98
+ * <IconButton>
99
+ * <Settings />
100
+ * Settings
101
+ * </IconButton>
102
+ * ```
103
+ */
26
104
  const IconButton = React.forwardRef(
27
105
  (
28
- { className, ...props }: IconButtonProps,
106
+ {
107
+ className,
108
+ tooltip,
109
+ tooltipSide = 'top',
110
+ tooltipAlign = 'center',
111
+ tooltipDelayDuration,
112
+ tooltipDisableHoverableContent,
113
+ ...props
114
+ }: IconButtonProps,
29
115
  forwardedRef: React.ForwardedRef<IconButtonElement>,
30
116
  ) => {
31
- // Warn in development if no accessibility attributes are provided
32
- if (process.env.NODE_ENV === 'development') {
33
- const hasAriaLabel = 'aria-label' in props && props['aria-label'];
34
- const hasAriaLabelledBy = 'aria-labelledby' in props && props['aria-labelledby'];
35
- const hasChildren = 'children' in props && props.children;
36
-
37
- if (!hasAriaLabel && !hasAriaLabelledBy && !hasChildren) {
38
- console.warn(
39
- 'IconButton: Icon buttons must have an accessible name. Please provide either:' +
40
- '\n- aria-label prop with descriptive text' +
41
- '\n- aria-labelledby prop referencing a label element' +
42
- '\n- or visible text children',
43
- );
44
- }
117
+ // Runtime accessibility validation to ensure WCAG compliance
118
+ // This helps catch accessibility issues during development
119
+ const hasAriaLabel = 'aria-label' in props && props['aria-label'];
120
+ const hasAriaLabelledBy = 'aria-labelledby' in props && props['aria-labelledby'];
121
+ const hasChildren = 'children' in props && props.children;
122
+
123
+ // Throw descriptive error if no accessible name is provided
124
+ if (!hasAriaLabel && !hasAriaLabelledBy && !hasChildren) {
125
+ throw new Error(
126
+ 'IconButton: Icon buttons must have an accessible name. Please provide either:' +
127
+ '\n- aria-label prop with descriptive text' +
128
+ '\n- aria-labelledby prop referencing a label element' +
129
+ '\n- or visible text children',
130
+ );
45
131
  }
46
132
 
47
- return (
133
+ // Create the base icon button element with accessibility props
134
+ const iconButton = (
48
135
  <BaseButton
49
136
  {...props}
50
137
  ref={forwardedRef}
51
138
  className={classNames('rt-IconButton', className)}
52
139
  />
53
140
  );
141
+
142
+ // If no tooltip is provided, return the icon button as-is for better performance
143
+ if (!tooltip) {
144
+ return iconButton;
145
+ }
146
+
147
+ // Wrap with Tooltip when tooltip content is provided
148
+ // This creates a compound component that handles both button and tooltip functionality
149
+ return (
150
+ <Tooltip
151
+ content={tooltip}
152
+ side={tooltipSide}
153
+ align={tooltipAlign}
154
+ delayDuration={tooltipDelayDuration}
155
+ disableHoverableContent={tooltipDisableHoverableContent}
156
+ >
157
+ {iconButton}
158
+ </Tooltip>
159
+ );
54
160
  },
55
161
  ) as IconButtonComponent & { displayName?: string };
56
162