@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
@@ -2,6 +2,15 @@ import * as React from 'react';
2
2
  import { BaseButton } from './_internal/base-button.js';
3
3
  import type { BaseButtonProps } from './_internal/base-button.js';
4
4
  type IconButtonElement = React.ElementRef<typeof BaseButton>;
5
+ /**
6
+ * Required accessibility props for icon buttons
7
+ * Icon buttons must have an accessible name to meet WCAG guidelines
8
+ *
9
+ * Three ways to provide accessibility:
10
+ * 1. aria-label: Direct descriptive text
11
+ * 2. aria-labelledby: Reference to a label element
12
+ * 3. children: Visible text content (fallback)
13
+ */
5
14
  type AccessibilityProps = {
6
15
  'aria-label': string;
7
16
  'aria-labelledby'?: never;
@@ -13,13 +22,82 @@ type AccessibilityProps = {
13
22
  'aria-labelledby'?: never;
14
23
  children: React.ReactNode;
15
24
  };
16
- type IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps;
25
+ /**
26
+ * Tooltip configuration props that can be passed to IconButton
27
+ * These props are forwarded to the underlying Tooltip component
28
+ */
29
+ interface IconButtonTooltipProps {
30
+ /** Content to display in the tooltip on hover/focus */
31
+ tooltip?: React.ReactNode;
32
+ /** Side of the button where the tooltip should appear */
33
+ tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
34
+ /** Alignment of the tooltip relative to the button */
35
+ tooltipAlign?: 'start' | 'center' | 'end';
36
+ /** Delay before showing the tooltip (in milliseconds) */
37
+ tooltipDelayDuration?: number;
38
+ /** Whether to disable hoverable content behavior */
39
+ tooltipDisableHoverableContent?: boolean;
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
+ * Polymorphic IconButton props that support rendering as different HTML elements
48
+ * @template C - The element type to render as (defaults to 'button')
49
+ */
17
50
  type IconButtonProps<C extends React.ElementType = 'button'> = IconButtonOwnProps & {
51
+ /** Element type to render as (e.g., 'a', 'span', etc.) */
18
52
  as?: C;
19
53
  } & Omit<React.ComponentPropsWithoutRef<C>, keyof IconButtonOwnProps>;
54
+ /**
55
+ * IconButton component type that supports polymorphic rendering
56
+ * @template C - The element type to render as
57
+ */
20
58
  type IconButtonComponent = <C extends React.ElementType = 'button'>(props: IconButtonProps<C> & {
21
59
  ref?: React.ForwardedRef<IconButtonElement>;
22
60
  }) => React.ReactElement | null;
61
+ /**
62
+ * IconButton component for compact, accessible icon-only interactions
63
+ *
64
+ * The IconButton component extends Button with specialized behavior for visual symbols.
65
+ * It enforces accessibility requirements, provides automatic square sizing, and includes
66
+ * built-in tooltip integration. Icon buttons are essential for space-efficient interfaces
67
+ * while maintaining accessibility compliance.
68
+ *
69
+ * Key features:
70
+ * - Enforced accessibility requirements (aria-label, aria-labelledby, or children)
71
+ * - Automatic square aspect ratios for consistent visual alignment
72
+ * - Built-in tooltip support for context and guidance
73
+ * - Same variant and size system as Button for consistency
74
+ * - Runtime validation for accessibility compliance
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * // Basic icon button with aria-label
79
+ * <IconButton aria-label="Settings">
80
+ * <Settings />
81
+ * </IconButton>
82
+ *
83
+ * // Icon button with tooltip
84
+ * <IconButton aria-label="Save" tooltip="Save your progress">
85
+ * <Save />
86
+ * </IconButton>
87
+ *
88
+ * // Icon button with aria-labelledby
89
+ * <IconButton aria-labelledby="settings-label">
90
+ * <Settings />
91
+ * </IconButton>
92
+ * <span id="settings-label">Open settings panel</span>
93
+ *
94
+ * // Icon button with visible text (fallback)
95
+ * <IconButton>
96
+ * <Settings />
97
+ * Settings
98
+ * </IconButton>
99
+ * ```
100
+ */
23
101
  declare const IconButton: IconButtonComponent & {
24
102
  displayName?: string;
25
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,KAAK,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAG7D,KAAK,kBAAkB,GACnB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAA;CAAE,GACnD;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC;AAGnF,KAAK,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC;AAE3E,KAAK,eAAe,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,IAAI,kBAAkB,GAAG;IAClF,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC;AAEtE,KAAK,mBAAmB,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,EAChE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;CAAE,KACxE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,QAAA,MAAM,UAAU,EA6BX,mBAAmB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAIpD,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,KAAK,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,KAAK,kBAAkB,GACnB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAA;CAAE,GACnD;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC;AAEnF;;;GAGG;AACH,UAAU,sBAAsB;IAC9B,uDAAuD;IACvD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,KAAK,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;AAEpG;;;GAGG;AACH,KAAK,eAAe,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,IAAI,kBAAkB,GAAG;IAClF,0DAA0D;IAC1D,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC;AAEtE;;;GAGG;AACH,KAAK,mBAAmB,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,EAChE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;CAAE,KACxE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,QAAA,MAAM,UAAU,EAyDX,mBAAmB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAIpD,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -1,2 +1,5 @@
1
- "use strict";var m=Object.create;var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},s=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of d(t))!y.call(e,o)&&o!==n&&a(e,o,{get:()=>t[o],enumerable:!(r=u(t,o))||r.enumerable});return e};var i=(e,t,n)=>(n=e!=null?m(B(e)):{},s(t||!e||!e.__esModule?a(n,"default",{value:e,enumerable:!0}):n,e)),I=e=>s(a({},"__esModule",{value:!0}),e);var h={};f(h,{IconButton:()=>l});module.exports=I(h);var p=i(require("react")),c=i(require("classnames")),b=require("./_internal/base-button.js");const l=p.forwardRef(({className:e,...t},n)=>p.createElement(b.BaseButton,{...t,ref:n,className:(0,c.default)("rt-IconButton",e)}));l.displayName="IconButton";
1
+ "use strict";var P=Object.create;var l=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var E=(t,e)=>{for(var o in e)l(t,o,{get:e[o],enumerable:!0})},p=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of C(e))!w.call(t,n)&&n!==o&&l(t,n,{get:()=>e[n],enumerable:!(r=h(e,n))||r.enumerable});return t};var b=(t,e,o)=>(o=t!=null?P(v(t)):{},p(e||!t||!t.__esModule?l(o,"default",{value:t,enumerable:!0}):o,t)),g=t=>p(l({},"__esModule",{value:!0}),t);var x={};E(x,{IconButton:()=>c});module.exports=g(x);var i=b(require("react")),u=b(require("classnames")),m=require("./_internal/base-button.js"),d=require("./tooltip.js");const c=i.forwardRef(({className:t,tooltip:e,tooltipSide:o="top",tooltipAlign:r="center",tooltipDelayDuration:n,tooltipDisableHoverableContent:B,...a},y)=>{const f="aria-label"in a&&a["aria-label"],I="aria-labelledby"in a&&a["aria-labelledby"],R="children"in a&&a.children;if(!f&&!I&&!R)throw new Error(`IconButton: Icon buttons must have an accessible name. Please provide either:
2
+ - aria-label prop with descriptive text
3
+ - aria-labelledby prop referencing a label element
4
+ - or visible text children`);const s=i.createElement(m.BaseButton,{...a,ref:y,className:(0,u.default)("rt-IconButton",t)});return e?i.createElement(d.Tooltip,{content:e,side:o,align:r,delayDuration:n,disableHoverableContent:B},s):s});c.displayName="IconButton";
2
5
  //# sourceMappingURL=icon-button.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/icon-button.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { BaseButton } from './_internal/base-button.js';\nimport type { BaseButtonProps } from './_internal/base-button.js';\n\ntype IconButtonElement = React.ElementRef<typeof BaseButton>;\n\n// Required accessibility props for icon buttons\ntype AccessibilityProps =\n | { 'aria-label': string; 'aria-labelledby'?: never }\n | { 'aria-label'?: never; 'aria-labelledby': string }\n | { 'aria-label'?: never; 'aria-labelledby'?: never; children: React.ReactNode };\n\n// Polymorphic IconButton props with required accessibility\ntype IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps;\n\ntype IconButtonProps<C extends React.ElementType = 'button'> = IconButtonOwnProps & {\n as?: C;\n} & Omit<React.ComponentPropsWithoutRef<C>, keyof IconButtonOwnProps>;\n\ntype IconButtonComponent = <C extends React.ElementType = 'button'>(\n props: IconButtonProps<C> & { ref?: React.ForwardedRef<IconButtonElement> },\n) => React.ReactElement | null;\n\nconst IconButton = React.forwardRef(\n (\n { className, ...props }: IconButtonProps,\n forwardedRef: React.ForwardedRef<IconButtonElement>,\n ) => {\n // Warn in development if no accessibility attributes are provided\n if (process.env.NODE_ENV === 'development') {\n const hasAriaLabel = 'aria-label' in props && props['aria-label'];\n const hasAriaLabelledBy = 'aria-labelledby' in props && props['aria-labelledby'];\n const hasChildren = 'children' in props && props.children;\n\n if (!hasAriaLabel && !hasAriaLabelledBy && !hasChildren) {\n console.warn(\n 'IconButton: Icon buttons must have an accessible name. Please provide either:' +\n '\\n- aria-label prop with descriptive text' +\n '\\n- aria-labelledby prop referencing a label element' +\n '\\n- or visible text children',\n );\n }\n }\n\n return (\n <BaseButton\n {...props}\n ref={forwardedRef}\n className={classNames('rt-IconButton', className)}\n />\n );\n },\n) as IconButtonComponent & { displayName?: string };\n\nIconButton.displayName = 'IconButton';\n\nexport { IconButton };\nexport type { IconButtonProps };\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,oBACvBC,EAAuB,yBAEvBC,EAA2B,sCAsB3B,MAAMJ,EAAaE,EAAM,WACvB,CACE,CAAE,UAAAG,EAAW,GAAGC,CAAM,EACtBC,IAmBEL,EAAA,cAAC,cACE,GAAGI,EACJ,IAAKC,EACL,aAAW,EAAAC,SAAW,gBAAiBH,CAAS,EAClD,CAGN,EAEAL,EAAW,YAAc",
6
- "names": ["icon_button_exports", "__export", "IconButton", "__toCommonJS", "React", "import_classnames", "import_base_button", "className", "props", "forwardedRef", "classNames"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { BaseButton } from './_internal/base-button.js';\nimport { Tooltip } from './tooltip.js';\nimport type { BaseButtonProps } from './_internal/base-button.js';\n\ntype IconButtonElement = React.ElementRef<typeof BaseButton>;\n\n/**\n * Required accessibility props for icon buttons\n * Icon buttons must have an accessible name to meet WCAG guidelines\n *\n * Three ways to provide accessibility:\n * 1. aria-label: Direct descriptive text\n * 2. aria-labelledby: Reference to a label element\n * 3. children: Visible text content (fallback)\n */\ntype AccessibilityProps =\n | { 'aria-label': string; 'aria-labelledby'?: never }\n | { 'aria-label'?: never; 'aria-labelledby': string }\n | { 'aria-label'?: never; 'aria-labelledby'?: never; children: React.ReactNode };\n\n/**\n * Tooltip configuration props that can be passed to IconButton\n * These props are forwarded to the underlying Tooltip component\n */\ninterface IconButtonTooltipProps {\n /** Content to display in the tooltip on hover/focus */\n tooltip?: React.ReactNode;\n /** Side of the button where the tooltip should appear */\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n /** Alignment of the tooltip relative to the button */\n tooltipAlign?: 'start' | 'center' | 'end';\n /** Delay before showing the tooltip (in milliseconds) */\n tooltipDelayDuration?: number;\n /** Whether to disable hoverable content behavior */\n tooltipDisableHoverableContent?: boolean;\n}\n\n/**\n * Core IconButton props excluding the 'as' prop for polymorphic behavior\n * Combines BaseButton props with accessibility requirements and tooltip functionality\n */\ntype IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps & IconButtonTooltipProps;\n\n/**\n * Polymorphic IconButton props that support rendering as different HTML elements\n * @template C - The element type to render as (defaults to 'button')\n */\ntype IconButtonProps<C extends React.ElementType = 'button'> = IconButtonOwnProps & {\n /** Element type to render as (e.g., 'a', 'span', etc.) */\n as?: C;\n} & Omit<React.ComponentPropsWithoutRef<C>, keyof IconButtonOwnProps>;\n\n/**\n * IconButton component type that supports polymorphic rendering\n * @template C - The element type to render as\n */\ntype IconButtonComponent = <C extends React.ElementType = 'button'>(\n props: IconButtonProps<C> & { ref?: React.ForwardedRef<IconButtonElement> },\n) => React.ReactElement | null;\n\n/**\n * IconButton component for compact, accessible icon-only interactions\n *\n * The IconButton component extends Button with specialized behavior for visual symbols.\n * It enforces accessibility requirements, provides automatic square sizing, and includes\n * built-in tooltip integration. Icon buttons are essential for space-efficient interfaces\n * while maintaining accessibility compliance.\n *\n * Key features:\n * - Enforced accessibility requirements (aria-label, aria-labelledby, or children)\n * - Automatic square aspect ratios for consistent visual alignment\n * - Built-in tooltip support for context and guidance\n * - Same variant and size system as Button for consistency\n * - Runtime validation for accessibility compliance\n *\n * @example\n * ```tsx\n * // Basic icon button with aria-label\n * <IconButton aria-label=\"Settings\">\n * <Settings />\n * </IconButton>\n *\n * // Icon button with tooltip\n * <IconButton aria-label=\"Save\" tooltip=\"Save your progress\">\n * <Save />\n * </IconButton>\n *\n * // Icon button with aria-labelledby\n * <IconButton aria-labelledby=\"settings-label\">\n * <Settings />\n * </IconButton>\n * <span id=\"settings-label\">Open settings panel</span>\n *\n * // Icon button with visible text (fallback)\n * <IconButton>\n * <Settings />\n * Settings\n * </IconButton>\n * ```\n */\nconst IconButton = React.forwardRef(\n (\n {\n className,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...props\n }: IconButtonProps,\n forwardedRef: React.ForwardedRef<IconButtonElement>,\n ) => {\n // Runtime accessibility validation to ensure WCAG compliance\n // This helps catch accessibility issues during development\n const hasAriaLabel = 'aria-label' in props && props['aria-label'];\n const hasAriaLabelledBy = 'aria-labelledby' in props && props['aria-labelledby'];\n const hasChildren = 'children' in props && props.children;\n\n // Throw descriptive error if no accessible name is provided\n if (!hasAriaLabel && !hasAriaLabelledBy && !hasChildren) {\n throw new Error(\n 'IconButton: Icon buttons must have an accessible name. Please provide either:' +\n '\\n- aria-label prop with descriptive text' +\n '\\n- aria-labelledby prop referencing a label element' +\n '\\n- or visible text children',\n );\n }\n\n // Create the base icon button element with accessibility props\n const iconButton = (\n <BaseButton\n {...props}\n ref={forwardedRef}\n className={classNames('rt-IconButton', className)}\n />\n );\n\n // If no tooltip is provided, return the icon button as-is for better performance\n if (!tooltip) {\n return iconButton;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n // This creates a compound component that handles both button and tooltip functionality\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n >\n {iconButton}\n </Tooltip>\n );\n },\n) as IconButtonComponent & { displayName?: string };\n\nIconButton.displayName = 'IconButton';\n\nexport { IconButton };\nexport type { IconButtonProps };\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,oBACvBC,EAAuB,yBAEvBC,EAA2B,sCAC3BC,EAAwB,wBAmGxB,MAAML,EAAaE,EAAM,WACvB,CACE,CACE,UAAAI,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EACAC,IACG,CAGH,MAAMC,EAAe,eAAgBF,GAASA,EAAM,YAAY,EAC1DG,EAAoB,oBAAqBH,GAASA,EAAM,iBAAiB,EACzEI,EAAc,aAAcJ,GAASA,EAAM,SAGjD,GAAI,CAACE,GAAgB,CAACC,GAAqB,CAACC,EAC1C,MAAM,IAAI,MACR;AAAA;AAAA;AAAA,2BAIF,EAIF,MAAMC,EACJf,EAAA,cAAC,cACE,GAAGU,EACJ,IAAKC,EACL,aAAW,EAAAK,SAAW,gBAAiBZ,CAAS,EAClD,EAIF,OAAKC,EAOHL,EAAA,cAAC,WACC,QAASK,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,GAExBM,CACH,EAdOA,CAgBX,CACF,EAEAjB,EAAW,YAAc",
6
+ "names": ["icon_button_exports", "__export", "IconButton", "__toCommonJS", "React", "import_classnames", "import_base_button", "import_tooltip", "className", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "props", "forwardedRef", "hasAriaLabel", "hasAriaLabelledBy", "hasChildren", "iconButton", "classNames"]
7
7
  }
@@ -6,41 +6,160 @@ import type { WidthProps } from '../props/width.props.js';
6
6
  import type { HeightProps } from '../props/height.props.js';
7
7
  import type { LayoutProps } from '../props/layout.props.js';
8
8
  import type { GetPropDefTypes } from '../props/prop-def.js';
9
+ /**
10
+ * Core Image props that extend the base image prop definitions
11
+ * These props provide enhanced functionality beyond standard HTML img attributes
12
+ */
9
13
  type ImageOwnProps = GetPropDefTypes<typeof imagePropDefs> & {
14
+ /**
15
+ * Native loading behavior for the image
16
+ * 'lazy' defers loading until the image is near the viewport
17
+ * 'eager' loads the image immediately
18
+ */
10
19
  loading?: 'eager' | 'lazy';
11
20
  /**
12
- * Placeholder image URL to show while the main image is loading.
13
- * Can be a low-quality/blurred version of the main image.
21
+ * Placeholder image URL to show while the main image is loading
22
+ *
23
+ * Best practices:
24
+ * - Use a low-quality/blurred version of the main image
25
+ * - Keep file size small (under 10KB recommended)
26
+ * - Use same aspect ratio as main image
27
+ * - Consider using base64 data URLs for inline placeholders
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <Image
32
+ * src="/high-res-image.jpg"
33
+ * placeholder="/low-res-placeholder.jpg"
34
+ * alt="Product photo"
35
+ * />
36
+ * ```
14
37
  */
15
38
  placeholder?: string;
16
39
  /**
17
- * Shows a skeleton placeholder while loading instead of a blank space.
40
+ * Shows a skeleton placeholder while loading instead of a blank space
41
+ *
42
+ * Use this when:
43
+ * - You don't have a placeholder image
44
+ * - You want consistent loading states across your interface
45
+ * - The image is part of a content layout that needs stable dimensions
18
46
  */
19
47
  showSkeleton?: boolean;
20
48
  /**
21
- * Whether the image should fade in when loaded. Set to false for background images or when you want immediate visibility.
49
+ * Whether the image should fade in when loaded
50
+ *
51
+ * Set to false for:
52
+ * - Background images where immediate visibility is important
53
+ * - Images that need to appear instantly for UX reasons
54
+ * - When you're implementing custom loading animations
22
55
  */
23
56
  fadeIn?: boolean;
24
57
  /**
25
- * Callback fired when the image successfully loads.
58
+ * Callback fired when the image successfully loads
59
+ *
60
+ * Use this to:
61
+ * - Track image loading performance
62
+ * - Trigger layout adjustments after load
63
+ * - Implement custom loading state management
26
64
  */
27
65
  onLoad?: (event: React.SyntheticEvent<HTMLImageElement>) => void;
28
66
  /**
29
- * Callback fired when the image fails to load.
67
+ * Callback fired when the image fails to load
68
+ *
69
+ * Use this to:
70
+ * - Log errors for monitoring
71
+ * - Show fallback content
72
+ * - Implement retry logic
30
73
  */
31
74
  onError?: (event: React.SyntheticEvent<HTMLImageElement>) => void;
32
- /**
33
- * Style object to apply to the wrapper container. Useful for overriding display, width, height, etc.
34
- */
35
- wrapperStyle?: React.CSSProperties;
36
75
  };
76
+ /**
77
+ * Complete Image component props interface
78
+ *
79
+ * Combines HTML img attributes with design system props and enhanced functionality.
80
+ * Excludes conflicting props like 'color', 'width', 'height' that are handled by the design system.
81
+ */
37
82
  interface ImageProps extends ComponentPropsWithout<'img', RemovedProps | 'color' | 'width' | 'height' | 'alt'>, MarginProps, WidthProps, HeightProps, LayoutProps, ImageOwnProps {
38
83
  /**
39
- * The alt attribute provides alternative information for an image if a user for some reason cannot view it.
40
- * Required for accessibility when not using asChild. Use empty string for decorative images.
84
+ * Alternative text for the image
85
+ *
86
+ * Required for accessibility when not using asChild pattern.
87
+ * Describes the image content for screen readers and when images fail to load.
88
+ *
89
+ * Guidelines:
90
+ * - Be descriptive but concise
91
+ * - Don't include "image of" or "picture of"
92
+ * - Use empty string ("") for purely decorative images
93
+ * - Describe the content and context, not just what you see
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * // Good alt text
98
+ * <Image src="/chart.png" alt="Sales increased 25% from Q1 to Q2" />
99
+ *
100
+ * // Decorative image
101
+ * <Image src="/decoration.png" alt="" />
102
+ *
103
+ * // Avoid generic descriptions
104
+ * <Image src="/photo.jpg" alt="A photo" /> // ❌ Too generic
105
+ * <Image src="/photo.jpg" alt="Team celebrating project launch" /> // ✅ Descriptive
106
+ * ```
41
107
  */
42
108
  alt: string;
43
109
  }
110
+ /**
111
+ * Image component for displaying images with enhanced loading states and accessibility
112
+ *
113
+ * The Image component extends the standard HTML img element with advanced features
114
+ * including placeholder images, skeleton loading states, fade-in animations, and
115
+ * comprehensive accessibility support. It integrates seamlessly with the design
116
+ * system's layout, spacing, and theming capabilities.
117
+ *
118
+ * Key features:
119
+ * - Progressive loading with placeholder and skeleton states
120
+ * - Fade-in animations with reduced motion support
121
+ * - Comprehensive accessibility with ARIA attributes
122
+ * - Object-fit control for responsive image scaling
123
+ * - Caption support for additional context
124
+ * - AsChild pattern for flexible composition
125
+ * - Error handling with fallback states
126
+ * - Performance optimizations for cached images
127
+ *
128
+ * @example
129
+ * ```tsx
130
+ * // Basic usage
131
+ * <Image src="/photo.jpg" alt="Team photo" />
132
+ *
133
+ * // With placeholder and skeleton
134
+ * <Image
135
+ * src="/high-res.jpg"
136
+ * placeholder="/low-res.jpg"
137
+ * showSkeleton
138
+ * alt="Product showcase"
139
+ * />
140
+ *
141
+ * // With caption and custom fit
142
+ * <Image
143
+ * src="/chart.png"
144
+ * alt="Sales data visualization"
145
+ * caption="Q3 2024 Sales Performance"
146
+ * fit="contain"
147
+ * width="400px"
148
+ * height="300px"
149
+ * />
150
+ *
151
+ * // As clickable element
152
+ * <Image
153
+ * asChild
154
+ * src="/thumbnail.jpg"
155
+ * alt="View full gallery"
156
+ * >
157
+ * <a href="/gallery">
158
+ * View Gallery
159
+ * </a>
160
+ * </Image>
161
+ * ```
162
+ */
44
163
  declare const Image: React.ForwardRefExoticComponent<ImageProps & React.RefAttributes<HTMLImageElement>>;
45
164
  export { Image };
46
165
  export type { ImageProps };
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/components/image.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACjE;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClE;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACpC,CAAC;AAEF,UAAU,UACR,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,EACvF,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa;IACf;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,QAAA,MAAM,KAAK,qFA0TT,CAAC;AAIH,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/components/image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D;;;GAGG;AACH,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACjE;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CACnE,CAAC;AAEF;;;;;GAKG;AACH,UAAU,UACR,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,EACvF,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa;IACf;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,QAAA,MAAM,KAAK,qFA+OT,CAAC;AAIH,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var V=Object.create;var b=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var R=(o,e)=>{for(var s in e)b(o,s,{get:e[s],enumerable:!0})},z=(o,e,s,y)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of Y(e))!_.call(o,p)&&p!==s&&b(o,p,{get:()=>e[p],enumerable:!(y=X(e,p))||y.enumerable});return o};var O=(o,e,s)=>(s=o!=null?V(Z(o)):{},z(e||!o||!o.__esModule?b(s,"default",{value:o,enumerable:!0}):s,o)),ee=o=>z(b({},"__esModule",{value:!0}),o);var te={};R(te,{Image:()=>x});module.exports=ee(te);var t=O(require("react")),a=O(require("classnames")),B=require("./image.props.js"),q=require("../helpers/extract-props.js"),A=require("../props/margin.props.js"),G=require("../props/width.props.js"),F=require("../props/height.props.js"),$=require("../props/layout.props.js"),J=require("./skeleton.js"),v=require("./box.js");const x=t.forwardRef((o,e)=>{const{variant:s="surface",wrapperStyle:y,...p}=o,{asChild:D,className:n,radius:l,style:d,loading:c="lazy",alt:u,src:i,placeholder:E,showSkeleton:K=!1,fadeIn:k=!0,onLoad:C,onError:w,children:H,...M}=(0,q.extractProps)(p,B.imagePropDefs,A.marginPropDefs,G.widthPropDefs,F.heightPropDefs,$.layoutPropDefs),[T,S]=t.useState(!1),[Q,L]=t.useState(!1),[U,N]=t.useState(!!E),g=t.useRef(null),f=t.useCallback(r=>{S(!0),L(!1),N(!1),C?.(r)},[C]),I=t.useCallback(r=>{S(!1),L(!0),N(!1),w?.(r)},[w]);if(t.useEffect(()=>{const r=g.current;r&&r.complete&&r.naturalWidth>0&&(S(!0),L(!1),N(!1))},[i]),!i)return console.warn("Image component: src prop is required"),null;!D&&u===void 0&&console.warn("Image component: alt prop is required for accessibility when not using asChild");const h={width:"100%",height:"100%",display:"block",opacity:k?T?1:0:1,transition:k?"opacity 0.3s ease-out":"none",...d},P={position:"relative",display:"block",...y},j=K&&!T&&!Q?t.createElement(J.Skeleton,{width:"100%",height:"100px",style:{borderRadius:l?`var(--radius-${l})`:void 0},className:n}):null,W=E&&U?t.createElement("img",{"data-radius":l,style:{...h,filter:"blur(4px)",opacity:.7,transition:"opacity 0.3s ease-out"},className:(0,a.default)("rt-reset","rt-Image","rt-Image--placeholder",n),alt:"",src:E}):null;if(D&&H){const r=t.Children.only(H);return s==="blur"?t.cloneElement(r,{className:(0,a.default)(r.props?.className,"rt-variant-blur"),style:{textDecoration:"none",color:"inherit",border:"none",background:"none",padding:0,font:"inherit",cursor:"pointer",...P,...d,...r.props?.style},children:t.createElement(t.Fragment,null,t.createElement("img",{"data-radius":l,loading:c,style:{position:"absolute",top:"0",left:"0",width:"105%",height:"105%",transform:"translate(-2.5%, -2.5%)",filter:"blur(16px) saturate(1.5)",opacity:.5,zIndex:-1},className:(0,a.default)("rt-reset","rt-Image","rt-Image--blur-bg",n),alt:"",src:i}),t.createElement("img",{"data-radius":l,loading:c,style:h,className:(0,a.default)("rt-reset","rt-Image","rt-Image--blur",n),alt:u,src:i,onLoad:f,onError:I,ref:m=>{g.current=m,typeof e=="function"?e(m):e&&(e.current=m)}}))}):t.cloneElement(r,{className:(0,a.default)(r.props?.className),style:{textDecoration:"none",color:"inherit",border:"none",background:"none",padding:0,font:"inherit",cursor:"pointer",...P,...r.props?.style},children:t.createElement(t.Fragment,null,j,W,t.createElement("img",{"data-radius":l,loading:c,style:h,className:(0,a.default)("rt-reset","rt-Image",n),alt:u,src:i,onLoad:f,onError:I,ref:m=>{g.current=m,typeof e=="function"?e(m):e&&(e.current=m)}}))})}return s==="blur"?t.createElement(v.Box,{className:(0,a.default)("rt-variant-blur",n),style:{...d,...P},...M},t.createElement("img",{"data-radius":l,loading:c,style:{position:"absolute",top:"0",left:"0",width:"105%",height:"105%",transform:"translate(-2.5%, -2.5%)",filter:"blur(16px) saturate(1.5)",opacity:.5,zIndex:-1},className:(0,a.default)("rt-reset","rt-Image","rt-Image--blur-bg",n),alt:"",src:i}),t.createElement("img",{"data-radius":l,loading:c,style:h,className:(0,a.default)("rt-reset","rt-Image","rt-Image--blur",n),alt:u,src:i,onLoad:f,onError:I,ref:r=>{g.current=r,typeof e=="function"?e(r):e&&(e.current=r)}})):t.createElement(v.Box,{className:n,style:{...d,...P},...M},j,W,t.createElement("img",{"data-radius":l,loading:c,style:h,className:(0,a.default)("rt-reset","rt-Image",n),alt:u,src:i,onLoad:f,onError:I,ref:r=>{g.current=r,typeof e=="function"?e(r):e&&(e.current=r)}}))});x.displayName="Image";
1
+ "use strict";var U=Object.create;var l=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,Z=Object.prototype.hasOwnProperty;var _=(o,t)=>{for(var r in t)l(o,r,{get:t[r],enumerable:!0})},D=(o,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of X(t))!Z.call(o,i)&&i!==r&&l(o,i,{get:()=>t[i],enumerable:!(s=V(t,i))||s.enumerable});return o};var C=(o,t,r)=>(r=o!=null?U(Y(o)):{},D(t||!o||!o.__esModule?l(r,"default",{value:o,enumerable:!0}):r,o)),$=o=>D(l({},"__esModule",{value:!0}),o);var ee={};_(ee,{Image:()=>y});module.exports=$(ee);var e=C(require("react")),h=C(require("classnames")),N=require("./image.props.js"),H=require("../helpers/extract-props.js"),k=require("../props/margin.props.js"),M=require("../props/width.props.js"),T=require("../props/height.props.js"),j=require("../props/layout.props.js"),W=require("./skeleton.js"),z=require("./slot.js");const y=e.forwardRef((o,t)=>{const{asChild:r,className:s,style:i,loading:O="lazy",alt:u,src:p,placeholder:m,showSkeleton:R=!1,fadeIn:P=!0,errorAriaLabel:q="Failed to load image",radius:G,caption:n,onLoad:I,onError:v,children:A,...E}=(0,H.extractProps)(o,N.imagePropDefs,k.marginPropDefs,M.widthPropDefs,T.heightPropDefs,j.layoutPropDefs),[d,c]=e.useState("loading"),[F,g]=e.useState(!!m),S=e.useRef(null),B=e.useCallback(a=>{c("loaded"),g(!1),I?.(a)},[I]),J=e.useCallback(a=>{c("error"),g(!1),v?.(a)},[v]);if(e.useEffect(()=>{const a=S.current;a&&a.complete&&a.naturalWidth>0&&(c("loaded"),g(!1))},[p]),!p)return console.warn("Image component: src prop is required"),null;!r&&u===void 0&&console.warn("Image component: alt prop is required for accessibility when not using asChild");const L=d==="loading",f=d==="error",K=d==="loaded",Q={"aria-busy":L,"aria-invalid":f,"aria-describedby":f?"image-error":void 0},b={width:"100%",height:"100%",display:"block",opacity:P?K?1:0:1,transition:P?"opacity 0.3s ease-out":"none"},w=e.createElement(e.Fragment,null,e.createElement("div",{style:{position:"relative",flex:n?"1 1 0%":void 0,height:n?void 0:"100%",minHeight:0}},f&&e.createElement("div",{id:"image-error",className:"rt-sr-only","aria-live":"polite"},q),R&&L&&e.createElement(W.Skeleton,{width:"100%",height:"100%",style:{position:"absolute",inset:0}}),m&&F&&e.createElement("img",{style:{...b,position:"absolute",inset:0,filter:"blur(4px)",opacity:.7,zIndex:0},className:(0,h.default)("rt-reset","rt-Image","rt-Image--placeholder"),alt:"",src:m}),e.createElement("img",{ref:a=>{S.current=a,typeof t=="function"?t(a):t&&(t.current=a)},loading:O,style:{...b,position:"relative",zIndex:1},className:(0,h.default)("rt-reset","rt-Image",s),alt:u,src:p,"data-radius":G,onLoad:B,onError:J,...Q})),n&&e.createElement("div",{className:"rt-Image-caption",style:{flex:"0 0 auto"}},n)),x={display:n?"flex":"block",flexDirection:n?"column":void 0,...i};return r?e.createElement(z.Slot,{className:s,style:x,...E},e.cloneElement(A,{},w)):e.createElement("div",{className:s,style:x,...E},w)});y.displayName="Image";
2
2
  //# sourceMappingURL=image.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/image.tsx"],
4
- "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { imagePropDefs } from './image.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { marginPropDefs } from '../props/margin.props.js';\nimport { widthPropDefs } from '../props/width.props.js';\nimport { heightPropDefs } from '../props/height.props.js';\nimport { layoutPropDefs } from '../props/layout.props.js';\nimport { Skeleton } from './skeleton.js';\nimport { Box } from './box.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { MarginProps } from '../props/margin.props.js';\nimport type { WidthProps } from '../props/width.props.js';\nimport type { HeightProps } from '../props/height.props.js';\nimport type { LayoutProps } from '../props/layout.props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ImageElement = React.ElementRef<'img'>;\ntype ImageOwnProps = GetPropDefTypes<typeof imagePropDefs> & {\n loading?: 'eager' | 'lazy';\n /**\n * Placeholder image URL to show while the main image is loading.\n * Can be a low-quality/blurred version of the main image.\n */\n placeholder?: string;\n /**\n * Shows a skeleton placeholder while loading instead of a blank space.\n */\n showSkeleton?: boolean;\n /**\n * Whether the image should fade in when loaded. Set to false for background images or when you want immediate visibility.\n */\n fadeIn?: boolean;\n /**\n * Callback fired when the image successfully loads.\n */\n onLoad?: (event: React.SyntheticEvent<HTMLImageElement>) => void;\n /**\n * Callback fired when the image fails to load.\n */\n onError?: (event: React.SyntheticEvent<HTMLImageElement>) => void;\n /**\n * Style object to apply to the wrapper container. Useful for overriding display, width, height, etc.\n */\n wrapperStyle?: React.CSSProperties;\n};\n\ninterface ImageProps\n extends ComponentPropsWithout<'img', RemovedProps | 'color' | 'width' | 'height' | 'alt'>,\n MarginProps,\n WidthProps,\n HeightProps,\n LayoutProps,\n ImageOwnProps {\n /**\n * The alt attribute provides alternative information for an image if a user for some reason cannot view it.\n * Required for accessibility when not using asChild. Use empty string for decorative images.\n */\n alt: string;\n}\n\nconst Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) => {\n const { variant = 'surface', wrapperStyle, ...restProps } = props;\n const {\n asChild,\n className,\n radius,\n style,\n loading = 'lazy',\n alt,\n src,\n placeholder,\n showSkeleton = false,\n fadeIn = true,\n onLoad: userOnLoad,\n onError: userOnError,\n children,\n ...wrapperProps\n } = extractProps(\n restProps,\n imagePropDefs,\n marginPropDefs,\n widthPropDefs,\n heightPropDefs,\n layoutPropDefs,\n );\n\n // Loading state management\n const [imageLoaded, setImageLoaded] = React.useState(false);\n const [imageError, setImageError] = React.useState(false);\n const [showPlaceholder, setShowPlaceholder] = React.useState(!!placeholder);\n\n // Ref to check if image is already loaded (for cached images)\n const imgRef = React.useRef<HTMLImageElement>(null);\n\n // Handle image load\n const handleLoad = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setImageLoaded(true);\n setImageError(false);\n setShowPlaceholder(false);\n userOnLoad?.(event);\n },\n [userOnLoad],\n );\n\n // Handle image error\n const handleError = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setImageLoaded(false);\n setImageError(true);\n setShowPlaceholder(false);\n userOnError?.(event);\n },\n [userOnError],\n );\n\n // Check if image is already loaded (for cached images)\n React.useEffect(() => {\n const img = imgRef.current;\n if (img && img.complete && img.naturalWidth > 0) {\n setImageLoaded(true);\n setImageError(false);\n setShowPlaceholder(false);\n }\n }, [src]);\n\n // Validate required props\n if (!src) {\n console.warn('Image component: src prop is required');\n return null;\n }\n\n if (!asChild && alt === undefined) {\n console.warn('Image component: alt prop is required for accessibility when not using asChild');\n }\n\n // Common image styles that apply to the actual img element\n const imgStyle: React.CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'block',\n opacity: fadeIn ? (imageLoaded ? 1 : 0) : 1,\n transition: fadeIn ? 'opacity 0.3s ease-out' : 'none',\n ...style, // Allow style overrides for the image\n };\n\n // Wrapper styles that get all the sizing and positioning\n const wrapperStyleFinal: React.CSSProperties = {\n position: 'relative',\n display: 'block', // Use block instead of inline-block to work better with AspectRatio\n ...wrapperStyle,\n };\n\n // Create skeleton placeholder\n const skeletonElement =\n showSkeleton && !imageLoaded && !imageError ? (\n <Skeleton\n width=\"100%\"\n height=\"100px\" // Default height, can be overridden by wrapper\n style={{\n borderRadius: radius ? `var(--radius-${radius})` : undefined,\n }}\n className={className}\n />\n ) : null;\n\n // Create placeholder image element\n const placeholderElement =\n placeholder && showPlaceholder ? (\n <img\n data-radius={radius}\n style={{\n ...imgStyle,\n filter: 'blur(4px)',\n opacity: 0.7,\n transition: 'opacity 0.3s ease-out',\n }}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--placeholder', className)}\n alt=\"\"\n src={placeholder}\n />\n ) : null;\n\n // Handle asChild - inject content into the child element\n if (asChild && children) {\n const child = React.Children.only(children) as React.ReactElement<any>;\n\n if (variant === 'blur') {\n // For blur variant with asChild\n return React.cloneElement(child, {\n className: classNames(child.props?.className, 'rt-variant-blur'),\n style: {\n textDecoration: 'none',\n color: 'inherit',\n border: 'none',\n background: 'none',\n padding: 0,\n font: 'inherit',\n cursor: 'pointer',\n ...wrapperStyleFinal,\n ...style, // Apply sizing to the child element\n ...child.props?.style,\n },\n children: (\n <>\n {/* Background blurred image */}\n <img\n data-radius={radius}\n loading={loading}\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '105%',\n height: '105%',\n transform: 'translate(-2.5%, -2.5%)',\n filter: 'blur(16px) saturate(1.5)',\n opacity: 0.5,\n zIndex: -1,\n }}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur-bg', className)}\n alt=\"\"\n src={src}\n />\n {/* Foreground image */}\n <img\n data-radius={radius}\n loading={loading}\n style={imgStyle}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur', className)}\n alt={alt}\n src={src}\n onLoad={handleLoad}\n onError={handleError}\n ref={(node) => {\n imgRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n />\n </>\n ),\n });\n } else {\n // For surface variant with asChild\n return React.cloneElement(child, {\n className: classNames(child.props?.className),\n style: {\n textDecoration: 'none',\n color: 'inherit',\n border: 'none',\n background: 'none',\n padding: 0,\n font: 'inherit',\n cursor: 'pointer',\n ...wrapperStyleFinal,\n ...child.props?.style,\n },\n children: (\n <>\n {skeletonElement}\n {placeholderElement}\n <img\n data-radius={radius}\n loading={loading}\n style={imgStyle}\n className={classNames('rt-reset', 'rt-Image', className)}\n alt={alt}\n src={src}\n onLoad={handleLoad}\n onError={handleError}\n ref={(node) => {\n imgRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n />\n </>\n ),\n });\n }\n }\n\n // Regular rendering without asChild - both variants use Box wrapper\n if (variant === 'blur') {\n return (\n <Box\n className={classNames('rt-variant-blur', className)}\n style={{\n ...style, // Include the width/height styles from extractProps\n ...wrapperStyleFinal,\n }}\n {...wrapperProps} // Apply other props to wrapper\n >\n {/* Background blurred image */}\n <img\n data-radius={radius}\n loading={loading}\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '105%',\n height: '105%',\n transform: 'translate(-2.5%, -2.5%)',\n filter: 'blur(16px) saturate(1.5)',\n opacity: 0.5,\n zIndex: -1,\n }}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur-bg', className)}\n alt=\"\"\n src={src}\n />\n {/* Foreground image */}\n <img\n data-radius={radius}\n loading={loading}\n style={imgStyle}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur', className)}\n alt={alt}\n src={src}\n onLoad={handleLoad}\n onError={handleError}\n ref={(node) => {\n imgRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n />\n </Box>\n );\n }\n\n // Surface variant - also use Box wrapper for consistency\n return (\n <Box\n className={className}\n style={{\n ...style, // Include the width/height styles from extractProps\n ...wrapperStyleFinal,\n }}\n {...wrapperProps} // Apply other props to wrapper\n >\n {skeletonElement}\n {placeholderElement}\n <img\n data-radius={radius}\n loading={loading}\n style={imgStyle}\n className={classNames('rt-reset', 'rt-Image', className)}\n alt={alt}\n src={src}\n onLoad={handleLoad}\n onError={handleError}\n ref={(node) => {\n imgRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n />\n </Box>\n );\n});\n\nImage.displayName = 'Image';\n\nexport { Image };\nexport type { ImageProps };\n"],
5
- "mappings": "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",
6
- "names": ["image_exports", "__export", "Image", "__toCommonJS", "React", "import_classnames", "import_image_props", "import_extract_props", "import_margin_props", "import_width_props", "import_height_props", "import_layout_props", "import_skeleton", "import_box", "props", "forwardedRef", "variant", "wrapperStyle", "restProps", "asChild", "className", "radius", "style", "loading", "alt", "src", "placeholder", "showSkeleton", "fadeIn", "userOnLoad", "userOnError", "children", "wrapperProps", "imageLoaded", "setImageLoaded", "imageError", "setImageError", "showPlaceholder", "setShowPlaceholder", "imgRef", "handleLoad", "event", "handleError", "img", "imgStyle", "wrapperStyleFinal", "skeletonElement", "placeholderElement", "classNames", "child", "node"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { imagePropDefs } from './image.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { marginPropDefs } from '../props/margin.props.js';\nimport { widthPropDefs } from '../props/width.props.js';\nimport { heightPropDefs } from '../props/height.props.js';\nimport { layoutPropDefs } from '../props/layout.props.js';\nimport { Skeleton } from './skeleton.js';\nimport { Slot } from './slot.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { MarginProps } from '../props/margin.props.js';\nimport type { WidthProps } from '../props/width.props.js';\nimport type { HeightProps } from '../props/height.props.js';\nimport type { LayoutProps } from '../props/layout.props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ImageElement = React.ElementRef<'img'>;\n\n/**\n * Core Image props that extend the base image prop definitions\n * These props provide enhanced functionality beyond standard HTML img attributes\n */\ntype ImageOwnProps = GetPropDefTypes<typeof imagePropDefs> & {\n /**\n * Native loading behavior for the image\n * 'lazy' defers loading until the image is near the viewport\n * 'eager' loads the image immediately\n */\n loading?: 'eager' | 'lazy';\n /**\n * Placeholder image URL to show while the main image is loading\n *\n * Best practices:\n * - Use a low-quality/blurred version of the main image\n * - Keep file size small (under 10KB recommended)\n * - Use same aspect ratio as main image\n * - Consider using base64 data URLs for inline placeholders\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/high-res-image.jpg\"\n * placeholder=\"/low-res-placeholder.jpg\"\n * alt=\"Product photo\"\n * />\n * ```\n */\n placeholder?: string;\n /**\n * Shows a skeleton placeholder while loading instead of a blank space\n *\n * Use this when:\n * - You don't have a placeholder image\n * - You want consistent loading states across your interface\n * - The image is part of a content layout that needs stable dimensions\n */\n showSkeleton?: boolean;\n /**\n * Whether the image should fade in when loaded\n *\n * Set to false for:\n * - Background images where immediate visibility is important\n * - Images that need to appear instantly for UX reasons\n * - When you're implementing custom loading animations\n */\n fadeIn?: boolean;\n /**\n * Callback fired when the image successfully loads\n *\n * Use this to:\n * - Track image loading performance\n * - Trigger layout adjustments after load\n * - Implement custom loading state management\n */\n onLoad?: (event: React.SyntheticEvent<HTMLImageElement>) => void;\n /**\n * Callback fired when the image fails to load\n *\n * Use this to:\n * - Log errors for monitoring\n * - Show fallback content\n * - Implement retry logic\n */\n onError?: (event: React.SyntheticEvent<HTMLImageElement>) => void;\n};\n\n/**\n * Complete Image component props interface\n *\n * Combines HTML img attributes with design system props and enhanced functionality.\n * Excludes conflicting props like 'color', 'width', 'height' that are handled by the design system.\n */\ninterface ImageProps\n extends ComponentPropsWithout<'img', RemovedProps | 'color' | 'width' | 'height' | 'alt'>,\n MarginProps,\n WidthProps,\n HeightProps,\n LayoutProps,\n ImageOwnProps {\n /**\n * Alternative text for the image\n *\n * Required for accessibility when not using asChild pattern.\n * Describes the image content for screen readers and when images fail to load.\n *\n * Guidelines:\n * - Be descriptive but concise\n * - Don't include \"image of\" or \"picture of\"\n * - Use empty string (\"\") for purely decorative images\n * - Describe the content and context, not just what you see\n *\n * @example\n * ```tsx\n * // Good alt text\n * <Image src=\"/chart.png\" alt=\"Sales increased 25% from Q1 to Q2\" />\n *\n * // Decorative image\n * <Image src=\"/decoration.png\" alt=\"\" />\n *\n * // Avoid generic descriptions\n * <Image src=\"/photo.jpg\" alt=\"A photo\" /> // \u274C Too generic\n * <Image src=\"/photo.jpg\" alt=\"Team celebrating project launch\" /> // \u2705 Descriptive\n * ```\n */\n alt: string;\n}\n\n/**\n * Image component for displaying images with enhanced loading states and accessibility\n *\n * The Image component extends the standard HTML img element with advanced features\n * including placeholder images, skeleton loading states, fade-in animations, and\n * comprehensive accessibility support. It integrates seamlessly with the design\n * system's layout, spacing, and theming capabilities.\n *\n * Key features:\n * - Progressive loading with placeholder and skeleton states\n * - Fade-in animations with reduced motion support\n * - Comprehensive accessibility with ARIA attributes\n * - Object-fit control for responsive image scaling\n * - Caption support for additional context\n * - AsChild pattern for flexible composition\n * - Error handling with fallback states\n * - Performance optimizations for cached images\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Image src=\"/photo.jpg\" alt=\"Team photo\" />\n *\n * // With placeholder and skeleton\n * <Image\n * src=\"/high-res.jpg\"\n * placeholder=\"/low-res.jpg\"\n * showSkeleton\n * alt=\"Product showcase\"\n * />\n *\n * // With caption and custom fit\n * <Image\n * src=\"/chart.png\"\n * alt=\"Sales data visualization\"\n * caption=\"Q3 2024 Sales Performance\"\n * fit=\"contain\"\n * width=\"400px\"\n * height=\"300px\"\n * />\n *\n * // As clickable element\n * <Image\n * asChild\n * src=\"/thumbnail.jpg\"\n * alt=\"View full gallery\"\n * >\n * <a href=\"/gallery\">\n * View Gallery\n * </a>\n * </Image>\n * ```\n */\nconst Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) => {\n // Extract and organize props for different purposes\n const {\n asChild,\n className,\n style,\n loading = 'lazy', // Default to lazy loading for performance\n alt,\n src,\n placeholder,\n showSkeleton = false, // Default to no skeleton for simpler UX\n fadeIn = true, // Default to fade-in for smooth loading experience\n\n errorAriaLabel = 'Failed to load image',\n radius,\n caption,\n onLoad: userOnLoad,\n onError: userOnError,\n children,\n ...wrapperProps\n } = extractProps(\n props,\n imagePropDefs,\n marginPropDefs,\n widthPropDefs,\n heightPropDefs,\n layoutPropDefs,\n );\n\n // State management for loading, error, and placeholder states\n const [loadingState, setLoadingState] = React.useState<'loading' | 'loaded' | 'error'>('loading');\n const [showPlaceholder, setShowPlaceholder] = React.useState(!!placeholder);\n const imgRef = React.useRef<HTMLImageElement>(null);\n\n /**\n * Handle successful image load\n * Updates state and triggers user callback for load event\n */\n const handleLoad = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoadingState('loaded');\n setShowPlaceholder(false);\n // Call user's onLoad handler if provided\n userOnLoad?.(event);\n },\n [userOnLoad],\n );\n\n /**\n * Handle image load error\n * Updates state and triggers user callback for error event\n */\n const handleError = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoadingState('error');\n setShowPlaceholder(false);\n // Call user's onError handler if provided\n userOnError?.(event);\n },\n [userOnError],\n );\n\n /**\n * Check if image is already loaded (optimization for cached images)\n * This prevents unnecessary loading states for images that are already available\n */\n React.useEffect(() => {\n const img = imgRef.current;\n if (img && img.complete && img.naturalWidth > 0) {\n setLoadingState('loaded');\n setShowPlaceholder(false);\n }\n }, [src]);\n\n // Validate required props and provide helpful development warnings\n if (!src) {\n console.warn('Image component: src prop is required');\n return null;\n }\n\n if (!asChild && alt === undefined) {\n console.warn('Image component: alt prop is required for accessibility when not using asChild');\n }\n\n // Derive loading state flags for cleaner conditional rendering\n const isLoading = loadingState === 'loading';\n const isError = loadingState === 'error';\n const isLoaded = loadingState === 'loaded';\n\n /**\n * ARIA attributes for comprehensive accessibility support\n * These attributes help screen readers understand the image state\n */\n const ariaProps = {\n 'aria-busy': isLoading,\n 'aria-invalid': isError,\n 'aria-describedby': isError ? 'image-error' : undefined,\n };\n\n /**\n * Image styling that handles fade-in animation and responsive behavior\n * Respects user's motion preferences through CSS media queries\n */\n const imgStyle: React.CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'block',\n // Conditional opacity for fade-in effect\n opacity: fadeIn ? (isLoaded ? 1 : 0) : 1,\n // Smooth transition for fade-in, respects reduced motion preferences\n transition: fadeIn ? 'opacity 0.3s ease-out' : 'none',\n };\n\n /**\n * Create the complete image content structure\n * This includes the main image, placeholder, skeleton, caption, and error states\n */\n const imageContent = (\n <>\n {/*\n * Image container - handles layout and positioning\n * Uses flex layout when caption is present for proper space distribution\n */}\n <div\n style={{\n position: 'relative',\n flex: caption ? '1 1 0%' : undefined,\n height: caption ? undefined : '100%',\n minHeight: 0, // Important for flex shrinking in constrained layouts\n }}\n >\n {/*\n * Error message for screen readers\n * Hidden visually but announced by assistive technology\n */}\n {isError && (\n <div id=\"image-error\" className=\"rt-sr-only\" aria-live=\"polite\">\n {errorAriaLabel}\n </div>\n )}\n\n {/*\n * Skeleton placeholder during loading\n * Provides visual feedback and prevents layout shift\n */}\n {showSkeleton && isLoading && (\n <Skeleton width=\"100%\" height=\"100%\" style={{ position: 'absolute', inset: 0 }} />\n )}\n\n {/*\n * Placeholder image with blur effect\n * Shows a low-quality version while the main image loads\n */}\n {placeholder && showPlaceholder && (\n <img\n style={{\n ...imgStyle,\n position: 'absolute',\n inset: 0,\n filter: 'blur(4px)', // Creates the blur effect for LQIP (Low Quality Image Placeholder)\n opacity: 0.7, // Subtle opacity to indicate it's a placeholder\n zIndex: 0, // Behind the main image\n }}\n className={classNames('rt-reset', 'rt-Image', 'rt-Image--placeholder')}\n alt=\"\" // Decorative placeholder, no alt text needed\n src={placeholder}\n />\n )}\n\n {/*\n * Main image element\n * Handles all the core functionality and user interactions\n */}\n <img\n ref={(node) => {\n // Handle both internal ref and forwarded ref\n imgRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n loading={loading}\n style={{ ...imgStyle, position: 'relative', zIndex: 1 }}\n className={classNames('rt-reset', 'rt-Image', className)}\n alt={alt}\n src={src}\n data-radius={radius}\n onLoad={handleLoad}\n onError={handleError}\n {...ariaProps}\n />\n </div>\n\n {/*\n * Caption element - positioned below the image\n * Takes only the space it needs, doesn't interfere with image sizing\n */}\n {caption && (\n <div className=\"rt-Image-caption\" style={{ flex: '0 0 auto' }}>\n {caption}\n </div>\n )}\n </>\n );\n\n /**\n * Container styling that adapts based on caption presence\n * Uses flexbox when caption is present for proper layout control\n */\n const containerStyle: React.CSSProperties = {\n display: caption ? 'flex' : 'block',\n flexDirection: caption ? 'column' : undefined,\n ...style, // Allow user styles to override defaults\n };\n\n /**\n * Render with asChild pattern for composition\n * This allows the Image to be rendered as a child of another element\n * while maintaining all its functionality and styling\n */\n if (asChild) {\n return (\n <Slot className={className} style={containerStyle} {...wrapperProps}>\n {React.cloneElement(children as React.ReactElement, {}, imageContent)}\n </Slot>\n );\n }\n\n /**\n * Regular rendering as a standalone div container\n * This is the default rendering mode for most use cases\n */\n return (\n <div className={className} style={containerStyle} {...wrapperProps}>\n {imageContent}\n </div>\n );\n});\n\nImage.displayName = 'Image';\n\nexport { Image };\nexport type { ImageProps };\n"],
5
+ "mappings": "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",
6
+ "names": ["image_exports", "__export", "Image", "__toCommonJS", "React", "import_classnames", "import_image_props", "import_extract_props", "import_margin_props", "import_width_props", "import_height_props", "import_layout_props", "import_skeleton", "import_slot", "props", "forwardedRef", "asChild", "className", "style", "loading", "alt", "src", "placeholder", "showSkeleton", "fadeIn", "errorAriaLabel", "radius", "caption", "userOnLoad", "userOnError", "children", "wrapperProps", "loadingState", "setLoadingState", "showPlaceholder", "setShowPlaceholder", "imgRef", "handleLoad", "event", "handleError", "img", "isLoading", "isError", "isLoaded", "ariaProps", "imgStyle", "imageContent", "classNames", "node", "containerStyle"]
7
7
  }