@fanvue/ui 1.13.0 → 1.14.0

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 (543) hide show
  1. package/dist/cjs/components/Alert/Alert.cjs +10 -10
  2. package/dist/cjs/components/Alert/Alert.cjs.map +1 -1
  3. package/dist/cjs/components/AudioUpload/AudioUpload.cjs +15 -8
  4. package/dist/cjs/components/AudioUpload/AudioUpload.cjs.map +1 -1
  5. package/dist/cjs/components/AudioUpload/AudioWaveform.cjs +1 -1
  6. package/dist/cjs/components/AudioUpload/AudioWaveform.cjs.map +1 -1
  7. package/dist/cjs/components/Avatar/Avatar.cjs +15 -12
  8. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
  9. package/dist/cjs/components/Badge/Badge.cjs +25 -25
  10. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  11. package/dist/cjs/components/Button/Button.cjs +14 -14
  12. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  13. package/dist/cjs/components/Checkbox/Checkbox.cjs +15 -15
  14. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  15. package/dist/cjs/components/Chip/Chip.cjs +5 -5
  16. package/dist/cjs/components/Chip/Chip.cjs.map +1 -1
  17. package/dist/cjs/components/Count/Count.cjs +8 -8
  18. package/dist/cjs/components/Count/Count.cjs.map +1 -1
  19. package/dist/cjs/components/DatePicker/DatePicker.cjs +13 -13
  20. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  21. package/dist/cjs/components/Divider/Divider.cjs +1 -1
  22. package/dist/cjs/components/Divider/Divider.cjs.map +1 -1
  23. package/dist/cjs/components/IconButton/IconButton.cjs +9 -9
  24. package/dist/cjs/components/IconButton/IconButton.cjs.map +1 -1
  25. package/dist/cjs/components/Icons/AIIcon.cjs +40 -0
  26. package/dist/cjs/components/Icons/AIIcon.cjs.map +1 -0
  27. package/dist/cjs/components/Icons/AddIcon.cjs +45 -0
  28. package/dist/cjs/components/Icons/AddIcon.cjs.map +1 -0
  29. package/dist/cjs/components/Icons/AlertIcon.cjs +45 -0
  30. package/dist/cjs/components/Icons/AlertIcon.cjs.map +1 -0
  31. package/dist/cjs/components/Icons/ArrowDownIcon.cjs +57 -0
  32. package/dist/cjs/components/Icons/ArrowDownIcon.cjs.map +1 -0
  33. package/dist/cjs/components/Icons/ArrowLeftIcon.cjs +57 -0
  34. package/dist/cjs/components/Icons/ArrowLeftIcon.cjs.map +1 -0
  35. package/dist/cjs/components/Icons/ArrowRightIcon.cjs +29 -19
  36. package/dist/cjs/components/Icons/ArrowRightIcon.cjs.map +1 -1
  37. package/dist/cjs/components/Icons/ArrowUpIcon.cjs +57 -0
  38. package/dist/cjs/components/Icons/ArrowUpIcon.cjs.map +1 -0
  39. package/dist/cjs/components/Icons/BankIcon.cjs +46 -0
  40. package/dist/cjs/components/Icons/BankIcon.cjs.map +1 -0
  41. package/dist/cjs/components/Icons/BellIcon.cjs +42 -0
  42. package/dist/cjs/components/Icons/BellIcon.cjs.map +1 -0
  43. package/dist/cjs/components/Icons/BellOffIcon.cjs +51 -0
  44. package/dist/cjs/components/Icons/BellOffIcon.cjs.map +1 -0
  45. package/dist/cjs/components/Icons/BoltIcon.cjs +51 -0
  46. package/dist/cjs/components/Icons/BoltIcon.cjs.map +1 -0
  47. package/dist/cjs/components/Icons/BulbIcon.cjs +42 -0
  48. package/dist/cjs/components/Icons/BulbIcon.cjs.map +1 -0
  49. package/dist/cjs/components/Icons/Calendar2Icon.cjs +46 -0
  50. package/dist/cjs/components/Icons/Calendar2Icon.cjs.map +1 -0
  51. package/dist/cjs/components/Icons/CalendarIcon.cjs +46 -0
  52. package/dist/cjs/components/Icons/CalendarIcon.cjs.map +1 -0
  53. package/dist/cjs/components/Icons/CameraIcon.cjs +45 -0
  54. package/dist/cjs/components/Icons/CameraIcon.cjs.map +1 -0
  55. package/dist/cjs/components/Icons/ChartIcon.cjs +45 -0
  56. package/dist/cjs/components/Icons/ChartIcon.cjs.map +1 -0
  57. package/dist/cjs/components/Icons/ChevronDownIcon.cjs +24 -21
  58. package/dist/cjs/components/Icons/ChevronDownIcon.cjs.map +1 -1
  59. package/dist/cjs/components/Icons/ChevronLeftIcon.cjs +24 -21
  60. package/dist/cjs/components/Icons/ChevronLeftIcon.cjs.map +1 -1
  61. package/dist/cjs/components/Icons/ChevronRightIcon.cjs +24 -21
  62. package/dist/cjs/components/Icons/ChevronRightIcon.cjs.map +1 -1
  63. package/dist/cjs/components/Icons/ChevronUpIcon.cjs +52 -0
  64. package/dist/cjs/components/Icons/ChevronUpIcon.cjs.map +1 -0
  65. package/dist/cjs/components/Icons/ClockIcon.cjs +46 -0
  66. package/dist/cjs/components/Icons/ClockIcon.cjs.map +1 -0
  67. package/dist/cjs/components/Icons/CloseIcon.cjs +14 -18
  68. package/dist/cjs/components/Icons/CloseIcon.cjs.map +1 -1
  69. package/dist/cjs/components/Icons/CodeIcon.cjs +46 -0
  70. package/dist/cjs/components/Icons/CodeIcon.cjs.map +1 -0
  71. package/dist/cjs/components/Icons/CoinIcon.cjs +47 -0
  72. package/dist/cjs/components/Icons/CoinIcon.cjs.map +1 -0
  73. package/dist/cjs/components/Icons/CompassIcon.cjs +45 -0
  74. package/dist/cjs/components/Icons/CompassIcon.cjs.map +1 -0
  75. package/dist/cjs/components/Icons/CopyIcon.cjs +45 -0
  76. package/dist/cjs/components/Icons/CopyIcon.cjs.map +1 -0
  77. package/dist/cjs/components/Icons/CrownIcon.cjs +20 -12
  78. package/dist/cjs/components/Icons/CrownIcon.cjs.map +1 -1
  79. package/dist/cjs/components/Icons/DiamondIcon.cjs +45 -0
  80. package/dist/cjs/components/Icons/DiamondIcon.cjs.map +1 -0
  81. package/dist/cjs/components/Icons/DiscountIcon.cjs +45 -0
  82. package/dist/cjs/components/Icons/DiscountIcon.cjs.map +1 -0
  83. package/dist/cjs/components/Icons/DonateIcon.cjs +46 -0
  84. package/dist/cjs/components/Icons/DonateIcon.cjs.map +1 -0
  85. package/dist/cjs/components/Icons/DoubleTickIcon.cjs +52 -0
  86. package/dist/cjs/components/Icons/DoubleTickIcon.cjs.map +1 -0
  87. package/dist/cjs/components/Icons/DownloadIcon.cjs +46 -0
  88. package/dist/cjs/components/Icons/DownloadIcon.cjs.map +1 -0
  89. package/dist/cjs/components/Icons/EditIcon.cjs +45 -0
  90. package/dist/cjs/components/Icons/EditIcon.cjs.map +1 -0
  91. package/dist/cjs/components/Icons/ExpandIcon.cjs +45 -0
  92. package/dist/cjs/components/Icons/ExpandIcon.cjs.map +1 -0
  93. package/dist/cjs/components/Icons/EyeIcon.cjs +17 -35
  94. package/dist/cjs/components/Icons/EyeIcon.cjs.map +1 -1
  95. package/dist/cjs/components/Icons/EyeSlashIcon.cjs +46 -0
  96. package/dist/cjs/components/Icons/EyeSlashIcon.cjs.map +1 -0
  97. package/dist/cjs/components/Icons/FlagIcon.cjs +45 -0
  98. package/dist/cjs/components/Icons/FlagIcon.cjs.map +1 -0
  99. package/dist/cjs/components/Icons/FlameIcon.cjs +48 -0
  100. package/dist/cjs/components/Icons/FlameIcon.cjs.map +1 -0
  101. package/dist/cjs/components/Icons/FolderIcon.cjs +48 -0
  102. package/dist/cjs/components/Icons/FolderIcon.cjs.map +1 -0
  103. package/dist/cjs/components/Icons/ForwardIcon.cjs +48 -0
  104. package/dist/cjs/components/Icons/ForwardIcon.cjs.map +1 -0
  105. package/dist/cjs/components/Icons/GalleryIcon.cjs +47 -0
  106. package/dist/cjs/components/Icons/GalleryIcon.cjs.map +1 -0
  107. package/dist/cjs/components/Icons/GenderIcon.cjs +46 -0
  108. package/dist/cjs/components/Icons/GenderIcon.cjs.map +1 -0
  109. package/dist/cjs/components/Icons/GiftIcon.cjs +47 -0
  110. package/dist/cjs/components/Icons/GiftIcon.cjs.map +1 -0
  111. package/dist/cjs/components/Icons/HelpIcon.cjs +46 -0
  112. package/dist/cjs/components/Icons/HelpIcon.cjs.map +1 -0
  113. package/dist/cjs/components/Icons/HomeIcon.cjs +17 -12
  114. package/dist/cjs/components/Icons/HomeIcon.cjs.map +1 -1
  115. package/dist/cjs/components/Icons/HourglassIcon.cjs +48 -0
  116. package/dist/cjs/components/Icons/HourglassIcon.cjs.map +1 -0
  117. package/dist/cjs/components/Icons/ImageIcon.cjs +45 -0
  118. package/dist/cjs/components/Icons/ImageIcon.cjs.map +1 -0
  119. package/dist/cjs/components/Icons/InboxIcon.cjs +46 -0
  120. package/dist/cjs/components/Icons/InboxIcon.cjs.map +1 -0
  121. package/dist/cjs/components/Icons/LinkIcon.cjs +45 -0
  122. package/dist/cjs/components/Icons/LinkIcon.cjs.map +1 -0
  123. package/dist/cjs/components/Icons/LocationIcon.cjs +45 -0
  124. package/dist/cjs/components/Icons/LocationIcon.cjs.map +1 -0
  125. package/dist/cjs/components/Icons/LockerOffIcon.cjs +47 -0
  126. package/dist/cjs/components/Icons/LockerOffIcon.cjs.map +1 -0
  127. package/dist/cjs/components/Icons/LockerOnIcon.cjs +45 -0
  128. package/dist/cjs/components/Icons/LockerOnIcon.cjs.map +1 -0
  129. package/dist/cjs/components/Icons/LogoutIcon.cjs +64 -0
  130. package/dist/cjs/components/Icons/LogoutIcon.cjs.map +1 -0
  131. package/dist/cjs/components/Icons/LoveIcon.cjs +46 -0
  132. package/dist/cjs/components/Icons/LoveIcon.cjs.map +1 -0
  133. package/dist/cjs/components/Icons/MegaphoneIcon.cjs +46 -0
  134. package/dist/cjs/components/Icons/MegaphoneIcon.cjs.map +1 -0
  135. package/dist/cjs/components/Icons/MenuCloseIcon.cjs +45 -0
  136. package/dist/cjs/components/Icons/MenuCloseIcon.cjs.map +1 -0
  137. package/dist/cjs/components/Icons/MenuIcon.cjs +42 -0
  138. package/dist/cjs/components/Icons/MenuIcon.cjs.map +1 -0
  139. package/dist/cjs/components/Icons/MenuOpenIcon.cjs +45 -0
  140. package/dist/cjs/components/Icons/MenuOpenIcon.cjs.map +1 -0
  141. package/dist/cjs/components/Icons/MessageIcon.cjs +45 -0
  142. package/dist/cjs/components/Icons/MessageIcon.cjs.map +1 -0
  143. package/dist/cjs/components/Icons/MicrophoneIcon.cjs +18 -27
  144. package/dist/cjs/components/Icons/MicrophoneIcon.cjs.map +1 -1
  145. package/dist/cjs/components/Icons/MinusIcon.cjs +20 -12
  146. package/dist/cjs/components/Icons/MinusIcon.cjs.map +1 -1
  147. package/dist/cjs/components/Icons/MoonIcon.cjs +42 -0
  148. package/dist/cjs/components/Icons/MoonIcon.cjs.map +1 -0
  149. package/dist/cjs/components/Icons/MoreIcon.cjs +46 -0
  150. package/dist/cjs/components/Icons/MoreIcon.cjs.map +1 -0
  151. package/dist/cjs/components/Icons/MoreVerticalIcon.cjs +46 -0
  152. package/dist/cjs/components/Icons/MoreVerticalIcon.cjs.map +1 -0
  153. package/dist/cjs/components/Icons/PauseIcon.cjs +45 -0
  154. package/dist/cjs/components/Icons/PauseIcon.cjs.map +1 -0
  155. package/dist/cjs/components/Icons/PhoneIcon.cjs +48 -0
  156. package/dist/cjs/components/Icons/PhoneIcon.cjs.map +1 -0
  157. package/dist/cjs/components/Icons/PhoneOffIcon.cjs +51 -0
  158. package/dist/cjs/components/Icons/PhoneOffIcon.cjs.map +1 -0
  159. package/dist/cjs/components/Icons/PinIcon.cjs +45 -0
  160. package/dist/cjs/components/Icons/PinIcon.cjs.map +1 -0
  161. package/dist/cjs/components/Icons/PlayIcon.cjs +45 -0
  162. package/dist/cjs/components/Icons/PlayIcon.cjs.map +1 -0
  163. package/dist/cjs/components/Icons/PrivacyIcon.cjs +45 -0
  164. package/dist/cjs/components/Icons/PrivacyIcon.cjs.map +1 -0
  165. package/dist/cjs/components/Icons/RepeatIcon.cjs +64 -0
  166. package/dist/cjs/components/Icons/RepeatIcon.cjs.map +1 -0
  167. package/dist/cjs/components/Icons/Reply2Icon.cjs +46 -0
  168. package/dist/cjs/components/Icons/Reply2Icon.cjs.map +1 -0
  169. package/dist/cjs/components/Icons/ReplyIcon.cjs +48 -0
  170. package/dist/cjs/components/Icons/ReplyIcon.cjs.map +1 -0
  171. package/dist/cjs/components/Icons/SearchIcon.cjs +16 -31
  172. package/dist/cjs/components/Icons/SearchIcon.cjs.map +1 -1
  173. package/dist/cjs/components/Icons/SendIcon.cjs +45 -0
  174. package/dist/cjs/components/Icons/SendIcon.cjs.map +1 -0
  175. package/dist/cjs/components/Icons/SettingsIcon.cjs +46 -0
  176. package/dist/cjs/components/Icons/SettingsIcon.cjs.map +1 -0
  177. package/dist/cjs/components/Icons/ShareIcon.cjs +45 -0
  178. package/dist/cjs/components/Icons/ShareIcon.cjs.map +1 -0
  179. package/dist/cjs/components/Icons/StarIcon.cjs +48 -0
  180. package/dist/cjs/components/Icons/StarIcon.cjs.map +1 -0
  181. package/dist/cjs/components/Icons/StopIcon.cjs +17 -18
  182. package/dist/cjs/components/Icons/StopIcon.cjs.map +1 -1
  183. package/dist/cjs/components/Icons/SunIcon.cjs +42 -0
  184. package/dist/cjs/components/Icons/SunIcon.cjs.map +1 -0
  185. package/dist/cjs/components/Icons/Support2Icon.cjs +46 -0
  186. package/dist/cjs/components/Icons/Support2Icon.cjs.map +1 -0
  187. package/dist/cjs/components/Icons/SupportIcon.cjs +46 -0
  188. package/dist/cjs/components/Icons/SupportIcon.cjs.map +1 -0
  189. package/dist/cjs/components/Icons/TagIcon.cjs +45 -0
  190. package/dist/cjs/components/Icons/TagIcon.cjs.map +1 -0
  191. package/dist/cjs/components/Icons/TaskIcon.cjs +42 -0
  192. package/dist/cjs/components/Icons/TaskIcon.cjs.map +1 -0
  193. package/dist/cjs/components/Icons/ThumbDownIcon.cjs +45 -0
  194. package/dist/cjs/components/Icons/ThumbDownIcon.cjs.map +1 -0
  195. package/dist/cjs/components/Icons/ThumbUpIcon.cjs +45 -0
  196. package/dist/cjs/components/Icons/ThumbUpIcon.cjs.map +1 -0
  197. package/dist/cjs/components/Icons/TickCircleIcon.cjs +45 -0
  198. package/dist/cjs/components/Icons/TickCircleIcon.cjs.map +1 -0
  199. package/dist/cjs/components/Icons/TickCircleOffIcon.cjs +48 -0
  200. package/dist/cjs/components/Icons/TickCircleOffIcon.cjs.map +1 -0
  201. package/dist/cjs/components/Icons/TickIcon.cjs +48 -0
  202. package/dist/cjs/components/Icons/TickIcon.cjs.map +1 -0
  203. package/dist/cjs/components/Icons/TrashBinIcon.cjs +46 -0
  204. package/dist/cjs/components/Icons/TrashBinIcon.cjs.map +1 -0
  205. package/dist/cjs/components/Icons/TrophyIcon.cjs +46 -0
  206. package/dist/cjs/components/Icons/TrophyIcon.cjs.map +1 -0
  207. package/dist/cjs/components/Icons/UploadIcon.cjs +45 -0
  208. package/dist/cjs/components/Icons/UploadIcon.cjs.map +1 -0
  209. package/dist/cjs/components/Icons/UserCircleIcon.cjs +48 -0
  210. package/dist/cjs/components/Icons/UserCircleIcon.cjs.map +1 -0
  211. package/dist/cjs/components/Icons/UserIcon.cjs +67 -0
  212. package/dist/cjs/components/Icons/UserIcon.cjs.map +1 -0
  213. package/dist/cjs/components/Icons/UsersIcon.cjs +45 -0
  214. package/dist/cjs/components/Icons/UsersIcon.cjs.map +1 -0
  215. package/dist/cjs/components/Icons/VideoIcon.cjs +45 -0
  216. package/dist/cjs/components/Icons/VideoIcon.cjs.map +1 -0
  217. package/dist/cjs/components/Icons/WalletIcon.cjs +47 -0
  218. package/dist/cjs/components/Icons/WalletIcon.cjs.map +1 -0
  219. package/dist/cjs/components/Icons/WifiOffIcon.cjs +45 -0
  220. package/dist/cjs/components/Icons/WifiOffIcon.cjs.map +1 -0
  221. package/dist/cjs/components/Icons/WifiOnIcon.cjs +45 -0
  222. package/dist/cjs/components/Icons/WifiOnIcon.cjs.map +1 -0
  223. package/dist/cjs/components/Icons/WrenchIcon.cjs +48 -0
  224. package/dist/cjs/components/Icons/WrenchIcon.cjs.map +1 -0
  225. package/dist/cjs/components/Loader/Loader.cjs +1 -1
  226. package/dist/cjs/components/Loader/Loader.cjs.map +1 -1
  227. package/dist/cjs/components/Logo/Logo.cjs +13 -13
  228. package/dist/cjs/components/Logo/Logo.cjs.map +1 -1
  229. package/dist/cjs/components/Pagination/Pagination.cjs +2 -2
  230. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  231. package/dist/cjs/components/PasswordField/PasswordField.cjs +1 -1
  232. package/dist/cjs/components/PasswordField/PasswordField.cjs.map +1 -1
  233. package/dist/cjs/components/Pill/Pill.cjs +11 -11
  234. package/dist/cjs/components/Pill/Pill.cjs.map +1 -1
  235. package/dist/cjs/components/ProgressBar/ProgressBar.cjs +16 -13
  236. package/dist/cjs/components/ProgressBar/ProgressBar.cjs.map +1 -1
  237. package/dist/cjs/components/Radio/Radio.cjs +6 -6
  238. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  239. package/dist/cjs/components/Select/Select.cjs +13 -19
  240. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  241. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  242. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  243. package/dist/cjs/components/Slider/SliderLayout.cjs +12 -5
  244. package/dist/cjs/components/Slider/SliderLayout.cjs.map +1 -1
  245. package/dist/cjs/components/Slider/SliderThumb.cjs +6 -6
  246. package/dist/cjs/components/Slider/SliderThumb.cjs.map +1 -1
  247. package/dist/cjs/components/Snackbar/Snackbar.cjs +8 -8
  248. package/dist/cjs/components/Snackbar/Snackbar.cjs.map +1 -1
  249. package/dist/cjs/components/Switch/Switch.cjs +2 -2
  250. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  251. package/dist/cjs/components/SwitchField/SwitchField.cjs +13 -8
  252. package/dist/cjs/components/SwitchField/SwitchField.cjs.map +1 -1
  253. package/dist/cjs/components/SwitchToggle/SwitchToggle.cjs +4 -4
  254. package/dist/cjs/components/SwitchToggle/SwitchToggle.cjs.map +1 -1
  255. package/dist/cjs/components/Tabs/TabsList.cjs +1 -1
  256. package/dist/cjs/components/Tabs/TabsList.cjs.map +1 -1
  257. package/dist/cjs/components/Tabs/TabsTrigger.cjs +8 -8
  258. package/dist/cjs/components/Tabs/TabsTrigger.cjs.map +1 -1
  259. package/dist/cjs/components/TextArea/TextArea.cjs +10 -10
  260. package/dist/cjs/components/TextArea/TextArea.cjs.map +1 -1
  261. package/dist/cjs/components/TextField/TextField.cjs +10 -10
  262. package/dist/cjs/components/TextField/TextField.cjs.map +1 -1
  263. package/dist/cjs/components/Toast/Toast.cjs +9 -9
  264. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  265. package/dist/cjs/components/Tooltip/Tooltip.cjs +40 -14
  266. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  267. package/dist/cjs/index.cjs +176 -2
  268. package/dist/cjs/index.cjs.map +1 -1
  269. package/dist/components/Alert/Alert.mjs +10 -10
  270. package/dist/components/Alert/Alert.mjs.map +1 -1
  271. package/dist/components/AudioUpload/AudioUpload.mjs +15 -8
  272. package/dist/components/AudioUpload/AudioUpload.mjs.map +1 -1
  273. package/dist/components/AudioUpload/AudioWaveform.mjs +1 -1
  274. package/dist/components/AudioUpload/AudioWaveform.mjs.map +1 -1
  275. package/dist/components/Avatar/Avatar.mjs +15 -12
  276. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  277. package/dist/components/Badge/Badge.mjs +25 -25
  278. package/dist/components/Badge/Badge.mjs.map +1 -1
  279. package/dist/components/Button/Button.mjs +14 -14
  280. package/dist/components/Button/Button.mjs.map +1 -1
  281. package/dist/components/Checkbox/Checkbox.mjs +15 -15
  282. package/dist/components/Checkbox/Checkbox.mjs.map +1 -1
  283. package/dist/components/Chip/Chip.mjs +5 -5
  284. package/dist/components/Chip/Chip.mjs.map +1 -1
  285. package/dist/components/Count/Count.mjs +8 -8
  286. package/dist/components/Count/Count.mjs.map +1 -1
  287. package/dist/components/DatePicker/DatePicker.mjs +13 -13
  288. package/dist/components/DatePicker/DatePicker.mjs.map +1 -1
  289. package/dist/components/Divider/Divider.mjs +1 -1
  290. package/dist/components/Divider/Divider.mjs.map +1 -1
  291. package/dist/components/IconButton/IconButton.mjs +9 -9
  292. package/dist/components/IconButton/IconButton.mjs.map +1 -1
  293. package/dist/components/Icons/AIIcon.mjs +23 -0
  294. package/dist/components/Icons/AIIcon.mjs.map +1 -0
  295. package/dist/components/Icons/AddIcon.mjs +28 -0
  296. package/dist/components/Icons/AddIcon.mjs.map +1 -0
  297. package/dist/components/Icons/AlertIcon.mjs +28 -0
  298. package/dist/components/Icons/AlertIcon.mjs.map +1 -0
  299. package/dist/components/Icons/ArrowDownIcon.mjs +40 -0
  300. package/dist/components/Icons/ArrowDownIcon.mjs.map +1 -0
  301. package/dist/components/Icons/ArrowLeftIcon.mjs +40 -0
  302. package/dist/components/Icons/ArrowLeftIcon.mjs.map +1 -0
  303. package/dist/components/Icons/ArrowRightIcon.mjs +30 -20
  304. package/dist/components/Icons/ArrowRightIcon.mjs.map +1 -1
  305. package/dist/components/Icons/ArrowUpIcon.mjs +40 -0
  306. package/dist/components/Icons/ArrowUpIcon.mjs.map +1 -0
  307. package/dist/components/Icons/BankIcon.mjs +29 -0
  308. package/dist/components/Icons/BankIcon.mjs.map +1 -0
  309. package/dist/components/Icons/BellIcon.mjs +25 -0
  310. package/dist/components/Icons/BellIcon.mjs.map +1 -0
  311. package/dist/components/Icons/BellOffIcon.mjs +34 -0
  312. package/dist/components/Icons/BellOffIcon.mjs.map +1 -0
  313. package/dist/components/Icons/BoltIcon.mjs +34 -0
  314. package/dist/components/Icons/BoltIcon.mjs.map +1 -0
  315. package/dist/components/Icons/BulbIcon.mjs +25 -0
  316. package/dist/components/Icons/BulbIcon.mjs.map +1 -0
  317. package/dist/components/Icons/Calendar2Icon.mjs +29 -0
  318. package/dist/components/Icons/Calendar2Icon.mjs.map +1 -0
  319. package/dist/components/Icons/CalendarIcon.mjs +29 -0
  320. package/dist/components/Icons/CalendarIcon.mjs.map +1 -0
  321. package/dist/components/Icons/CameraIcon.mjs +28 -0
  322. package/dist/components/Icons/CameraIcon.mjs.map +1 -0
  323. package/dist/components/Icons/ChartIcon.mjs +28 -0
  324. package/dist/components/Icons/ChartIcon.mjs.map +1 -0
  325. package/dist/components/Icons/ChevronDownIcon.mjs +24 -21
  326. package/dist/components/Icons/ChevronDownIcon.mjs.map +1 -1
  327. package/dist/components/Icons/ChevronLeftIcon.mjs +24 -21
  328. package/dist/components/Icons/ChevronLeftIcon.mjs.map +1 -1
  329. package/dist/components/Icons/ChevronRightIcon.mjs +24 -21
  330. package/dist/components/Icons/ChevronRightIcon.mjs.map +1 -1
  331. package/dist/components/Icons/ChevronUpIcon.mjs +35 -0
  332. package/dist/components/Icons/ChevronUpIcon.mjs.map +1 -0
  333. package/dist/components/Icons/ClockIcon.mjs +29 -0
  334. package/dist/components/Icons/ClockIcon.mjs.map +1 -0
  335. package/dist/components/Icons/CloseIcon.mjs +14 -18
  336. package/dist/components/Icons/CloseIcon.mjs.map +1 -1
  337. package/dist/components/Icons/CodeIcon.mjs +29 -0
  338. package/dist/components/Icons/CodeIcon.mjs.map +1 -0
  339. package/dist/components/Icons/CoinIcon.mjs +30 -0
  340. package/dist/components/Icons/CoinIcon.mjs.map +1 -0
  341. package/dist/components/Icons/CompassIcon.mjs +28 -0
  342. package/dist/components/Icons/CompassIcon.mjs.map +1 -0
  343. package/dist/components/Icons/CopyIcon.mjs +28 -0
  344. package/dist/components/Icons/CopyIcon.mjs.map +1 -0
  345. package/dist/components/Icons/CrownIcon.mjs +20 -12
  346. package/dist/components/Icons/CrownIcon.mjs.map +1 -1
  347. package/dist/components/Icons/DiamondIcon.mjs +28 -0
  348. package/dist/components/Icons/DiamondIcon.mjs.map +1 -0
  349. package/dist/components/Icons/DiscountIcon.mjs +28 -0
  350. package/dist/components/Icons/DiscountIcon.mjs.map +1 -0
  351. package/dist/components/Icons/DonateIcon.mjs +29 -0
  352. package/dist/components/Icons/DonateIcon.mjs.map +1 -0
  353. package/dist/components/Icons/DoubleTickIcon.mjs +35 -0
  354. package/dist/components/Icons/DoubleTickIcon.mjs.map +1 -0
  355. package/dist/components/Icons/DownloadIcon.mjs +29 -0
  356. package/dist/components/Icons/DownloadIcon.mjs.map +1 -0
  357. package/dist/components/Icons/EditIcon.mjs +28 -0
  358. package/dist/components/Icons/EditIcon.mjs.map +1 -0
  359. package/dist/components/Icons/ExpandIcon.mjs +28 -0
  360. package/dist/components/Icons/ExpandIcon.mjs.map +1 -0
  361. package/dist/components/Icons/EyeIcon.mjs +18 -36
  362. package/dist/components/Icons/EyeIcon.mjs.map +1 -1
  363. package/dist/components/Icons/EyeSlashIcon.mjs +29 -0
  364. package/dist/components/Icons/EyeSlashIcon.mjs.map +1 -0
  365. package/dist/components/Icons/FlagIcon.mjs +28 -0
  366. package/dist/components/Icons/FlagIcon.mjs.map +1 -0
  367. package/dist/components/Icons/FlameIcon.mjs +31 -0
  368. package/dist/components/Icons/FlameIcon.mjs.map +1 -0
  369. package/dist/components/Icons/FolderIcon.mjs +31 -0
  370. package/dist/components/Icons/FolderIcon.mjs.map +1 -0
  371. package/dist/components/Icons/ForwardIcon.mjs +31 -0
  372. package/dist/components/Icons/ForwardIcon.mjs.map +1 -0
  373. package/dist/components/Icons/GalleryIcon.mjs +30 -0
  374. package/dist/components/Icons/GalleryIcon.mjs.map +1 -0
  375. package/dist/components/Icons/GenderIcon.mjs +29 -0
  376. package/dist/components/Icons/GenderIcon.mjs.map +1 -0
  377. package/dist/components/Icons/GiftIcon.mjs +30 -0
  378. package/dist/components/Icons/GiftIcon.mjs.map +1 -0
  379. package/dist/components/Icons/HelpIcon.mjs +29 -0
  380. package/dist/components/Icons/HelpIcon.mjs.map +1 -0
  381. package/dist/components/Icons/HomeIcon.mjs +18 -13
  382. package/dist/components/Icons/HomeIcon.mjs.map +1 -1
  383. package/dist/components/Icons/HourglassIcon.mjs +31 -0
  384. package/dist/components/Icons/HourglassIcon.mjs.map +1 -0
  385. package/dist/components/Icons/ImageIcon.mjs +28 -0
  386. package/dist/components/Icons/ImageIcon.mjs.map +1 -0
  387. package/dist/components/Icons/InboxIcon.mjs +29 -0
  388. package/dist/components/Icons/InboxIcon.mjs.map +1 -0
  389. package/dist/components/Icons/LinkIcon.mjs +28 -0
  390. package/dist/components/Icons/LinkIcon.mjs.map +1 -0
  391. package/dist/components/Icons/LocationIcon.mjs +28 -0
  392. package/dist/components/Icons/LocationIcon.mjs.map +1 -0
  393. package/dist/components/Icons/LockerOffIcon.mjs +30 -0
  394. package/dist/components/Icons/LockerOffIcon.mjs.map +1 -0
  395. package/dist/components/Icons/LockerOnIcon.mjs +28 -0
  396. package/dist/components/Icons/LockerOnIcon.mjs.map +1 -0
  397. package/dist/components/Icons/LogoutIcon.mjs +47 -0
  398. package/dist/components/Icons/LogoutIcon.mjs.map +1 -0
  399. package/dist/components/Icons/LoveIcon.mjs +29 -0
  400. package/dist/components/Icons/LoveIcon.mjs.map +1 -0
  401. package/dist/components/Icons/MegaphoneIcon.mjs +29 -0
  402. package/dist/components/Icons/MegaphoneIcon.mjs.map +1 -0
  403. package/dist/components/Icons/MenuCloseIcon.mjs +28 -0
  404. package/dist/components/Icons/MenuCloseIcon.mjs.map +1 -0
  405. package/dist/components/Icons/MenuIcon.mjs +25 -0
  406. package/dist/components/Icons/MenuIcon.mjs.map +1 -0
  407. package/dist/components/Icons/MenuOpenIcon.mjs +28 -0
  408. package/dist/components/Icons/MenuOpenIcon.mjs.map +1 -0
  409. package/dist/components/Icons/MessageIcon.mjs +28 -0
  410. package/dist/components/Icons/MessageIcon.mjs.map +1 -0
  411. package/dist/components/Icons/MicrophoneIcon.mjs +19 -28
  412. package/dist/components/Icons/MicrophoneIcon.mjs.map +1 -1
  413. package/dist/components/Icons/MinusIcon.mjs +20 -12
  414. package/dist/components/Icons/MinusIcon.mjs.map +1 -1
  415. package/dist/components/Icons/MoonIcon.mjs +25 -0
  416. package/dist/components/Icons/MoonIcon.mjs.map +1 -0
  417. package/dist/components/Icons/MoreIcon.mjs +29 -0
  418. package/dist/components/Icons/MoreIcon.mjs.map +1 -0
  419. package/dist/components/Icons/MoreVerticalIcon.mjs +29 -0
  420. package/dist/components/Icons/MoreVerticalIcon.mjs.map +1 -0
  421. package/dist/components/Icons/PauseIcon.mjs +28 -0
  422. package/dist/components/Icons/PauseIcon.mjs.map +1 -0
  423. package/dist/components/Icons/PhoneIcon.mjs +31 -0
  424. package/dist/components/Icons/PhoneIcon.mjs.map +1 -0
  425. package/dist/components/Icons/PhoneOffIcon.mjs +34 -0
  426. package/dist/components/Icons/PhoneOffIcon.mjs.map +1 -0
  427. package/dist/components/Icons/PinIcon.mjs +28 -0
  428. package/dist/components/Icons/PinIcon.mjs.map +1 -0
  429. package/dist/components/Icons/PlayIcon.mjs +28 -0
  430. package/dist/components/Icons/PlayIcon.mjs.map +1 -0
  431. package/dist/components/Icons/PrivacyIcon.mjs +28 -0
  432. package/dist/components/Icons/PrivacyIcon.mjs.map +1 -0
  433. package/dist/components/Icons/RepeatIcon.mjs +47 -0
  434. package/dist/components/Icons/RepeatIcon.mjs.map +1 -0
  435. package/dist/components/Icons/Reply2Icon.mjs +29 -0
  436. package/dist/components/Icons/Reply2Icon.mjs.map +1 -0
  437. package/dist/components/Icons/ReplyIcon.mjs +31 -0
  438. package/dist/components/Icons/ReplyIcon.mjs.map +1 -0
  439. package/dist/components/Icons/SearchIcon.mjs +17 -32
  440. package/dist/components/Icons/SearchIcon.mjs.map +1 -1
  441. package/dist/components/Icons/SendIcon.mjs +28 -0
  442. package/dist/components/Icons/SendIcon.mjs.map +1 -0
  443. package/dist/components/Icons/SettingsIcon.mjs +29 -0
  444. package/dist/components/Icons/SettingsIcon.mjs.map +1 -0
  445. package/dist/components/Icons/ShareIcon.mjs +28 -0
  446. package/dist/components/Icons/ShareIcon.mjs.map +1 -0
  447. package/dist/components/Icons/StarIcon.mjs +31 -0
  448. package/dist/components/Icons/StarIcon.mjs.map +1 -0
  449. package/dist/components/Icons/StopIcon.mjs +18 -19
  450. package/dist/components/Icons/StopIcon.mjs.map +1 -1
  451. package/dist/components/Icons/SunIcon.mjs +25 -0
  452. package/dist/components/Icons/SunIcon.mjs.map +1 -0
  453. package/dist/components/Icons/Support2Icon.mjs +29 -0
  454. package/dist/components/Icons/Support2Icon.mjs.map +1 -0
  455. package/dist/components/Icons/SupportIcon.mjs +29 -0
  456. package/dist/components/Icons/SupportIcon.mjs.map +1 -0
  457. package/dist/components/Icons/TagIcon.mjs +28 -0
  458. package/dist/components/Icons/TagIcon.mjs.map +1 -0
  459. package/dist/components/Icons/TaskIcon.mjs +25 -0
  460. package/dist/components/Icons/TaskIcon.mjs.map +1 -0
  461. package/dist/components/Icons/ThumbDownIcon.mjs +28 -0
  462. package/dist/components/Icons/ThumbDownIcon.mjs.map +1 -0
  463. package/dist/components/Icons/ThumbUpIcon.mjs +28 -0
  464. package/dist/components/Icons/ThumbUpIcon.mjs.map +1 -0
  465. package/dist/components/Icons/TickCircleIcon.mjs +28 -0
  466. package/dist/components/Icons/TickCircleIcon.mjs.map +1 -0
  467. package/dist/components/Icons/TickCircleOffIcon.mjs +31 -0
  468. package/dist/components/Icons/TickCircleOffIcon.mjs.map +1 -0
  469. package/dist/components/Icons/TickIcon.mjs +31 -0
  470. package/dist/components/Icons/TickIcon.mjs.map +1 -0
  471. package/dist/components/Icons/TrashBinIcon.mjs +29 -0
  472. package/dist/components/Icons/TrashBinIcon.mjs.map +1 -0
  473. package/dist/components/Icons/TrophyIcon.mjs +29 -0
  474. package/dist/components/Icons/TrophyIcon.mjs.map +1 -0
  475. package/dist/components/Icons/UploadIcon.mjs +28 -0
  476. package/dist/components/Icons/UploadIcon.mjs.map +1 -0
  477. package/dist/components/Icons/UserCircleIcon.mjs +31 -0
  478. package/dist/components/Icons/UserCircleIcon.mjs.map +1 -0
  479. package/dist/components/Icons/UserIcon.mjs +50 -0
  480. package/dist/components/Icons/UserIcon.mjs.map +1 -0
  481. package/dist/components/Icons/UsersIcon.mjs +28 -0
  482. package/dist/components/Icons/UsersIcon.mjs.map +1 -0
  483. package/dist/components/Icons/VideoIcon.mjs +28 -0
  484. package/dist/components/Icons/VideoIcon.mjs.map +1 -0
  485. package/dist/components/Icons/WalletIcon.mjs +30 -0
  486. package/dist/components/Icons/WalletIcon.mjs.map +1 -0
  487. package/dist/components/Icons/WifiOffIcon.mjs +28 -0
  488. package/dist/components/Icons/WifiOffIcon.mjs.map +1 -0
  489. package/dist/components/Icons/WifiOnIcon.mjs +28 -0
  490. package/dist/components/Icons/WifiOnIcon.mjs.map +1 -0
  491. package/dist/components/Icons/WrenchIcon.mjs +31 -0
  492. package/dist/components/Icons/WrenchIcon.mjs.map +1 -0
  493. package/dist/components/Loader/Loader.mjs +1 -1
  494. package/dist/components/Loader/Loader.mjs.map +1 -1
  495. package/dist/components/Logo/Logo.mjs +13 -13
  496. package/dist/components/Logo/Logo.mjs.map +1 -1
  497. package/dist/components/Pagination/Pagination.mjs +2 -2
  498. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  499. package/dist/components/PasswordField/PasswordField.mjs +1 -1
  500. package/dist/components/PasswordField/PasswordField.mjs.map +1 -1
  501. package/dist/components/Pill/Pill.mjs +11 -11
  502. package/dist/components/Pill/Pill.mjs.map +1 -1
  503. package/dist/components/ProgressBar/ProgressBar.mjs +16 -13
  504. package/dist/components/ProgressBar/ProgressBar.mjs.map +1 -1
  505. package/dist/components/Radio/Radio.mjs +6 -6
  506. package/dist/components/Radio/Radio.mjs.map +1 -1
  507. package/dist/components/Select/Select.mjs +13 -19
  508. package/dist/components/Select/Select.mjs.map +1 -1
  509. package/dist/components/Slider/Slider.mjs +1 -1
  510. package/dist/components/Slider/Slider.mjs.map +1 -1
  511. package/dist/components/Slider/SliderLayout.mjs +12 -5
  512. package/dist/components/Slider/SliderLayout.mjs.map +1 -1
  513. package/dist/components/Slider/SliderThumb.mjs +6 -6
  514. package/dist/components/Slider/SliderThumb.mjs.map +1 -1
  515. package/dist/components/Snackbar/Snackbar.mjs +8 -8
  516. package/dist/components/Snackbar/Snackbar.mjs.map +1 -1
  517. package/dist/components/Switch/Switch.mjs +2 -2
  518. package/dist/components/Switch/Switch.mjs.map +1 -1
  519. package/dist/components/SwitchField/SwitchField.mjs +13 -8
  520. package/dist/components/SwitchField/SwitchField.mjs.map +1 -1
  521. package/dist/components/SwitchToggle/SwitchToggle.mjs +4 -4
  522. package/dist/components/SwitchToggle/SwitchToggle.mjs.map +1 -1
  523. package/dist/components/Tabs/TabsList.mjs +1 -1
  524. package/dist/components/Tabs/TabsList.mjs.map +1 -1
  525. package/dist/components/Tabs/TabsTrigger.mjs +8 -8
  526. package/dist/components/Tabs/TabsTrigger.mjs.map +1 -1
  527. package/dist/components/TextArea/TextArea.mjs +10 -10
  528. package/dist/components/TextArea/TextArea.mjs.map +1 -1
  529. package/dist/components/TextField/TextField.mjs +10 -10
  530. package/dist/components/TextField/TextField.mjs.map +1 -1
  531. package/dist/components/Toast/Toast.mjs +9 -9
  532. package/dist/components/Toast/Toast.mjs.map +1 -1
  533. package/dist/components/Tooltip/Tooltip.mjs +40 -14
  534. package/dist/components/Tooltip/Tooltip.mjs.map +1 -1
  535. package/dist/index.d.ts +349 -14
  536. package/dist/index.mjs +176 -2
  537. package/dist/index.mjs.map +1 -1
  538. package/dist/styles/theme.css +298 -428
  539. package/package.json +2 -2
  540. package/dist/cjs/components/Icons/FireIcon.cjs +0 -47
  541. package/dist/cjs/components/Icons/FireIcon.cjs.map +0 -1
  542. package/dist/components/Icons/FireIcon.mjs +0 -30
  543. package/dist/components/Icons/FireIcon.mjs.map +0 -1
@@ -16,11 +16,11 @@ const Radio = React.forwardRef(({ className, size = "default", label, helperText
16
16
  "data-testid": "radio",
17
17
  "aria-describedby": helperText ? helperTextId : void 0,
18
18
  className: cn(
19
- "relative h-4 w-4 shrink-0 cursor-pointer appearance-none rounded-full border border-body-100 bg-transparent outline-brand-purple-500 transition-colors hover:bg-brand-green-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 not-disabled:active:bg-brand-green-50 disabled:cursor-not-allowed disabled:border-disabled-400 disabled:bg-transparent data-[state=checked]:border-body-100 data-[state=checked]:bg-transparent dark:border-body-100 dark:disabled:border-disabled-400",
19
+ "relative h-4 w-4 shrink-0 cursor-pointer appearance-none rounded-full border border-foreground-default bg-transparent outline-ring transition-colors hover:bg-brand-accent-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 not-disabled:active:bg-brand-accent-muted disabled:cursor-not-allowed disabled:border-neutral-300 disabled:bg-transparent data-[state=checked]:border-foreground-default data-[state=checked]:bg-transparent dark:border-foreground-default dark:disabled:border-neutral-300",
20
20
  helperText && "mt-1 self-start"
21
21
  ),
22
22
  ...props,
23
- children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-body-100 group-has-disabled:bg-disabled-400 dark:bg-body-100 dark:group-has-disabled:bg-disabled-400" }) })
23
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-foreground-default group-has-disabled:bg-neutral-300 dark:bg-foreground-default dark:group-has-disabled:bg-neutral-300" }) })
24
24
  }
25
25
  ),
26
26
  (label || helperText) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
@@ -29,8 +29,8 @@ const Radio = React.forwardRef(({ className, size = "default", label, helperText
29
29
  {
30
30
  htmlFor: inputId,
31
31
  className: cn(
32
- "cursor-pointer select-none text-body-100 group-has-disabled:cursor-not-allowed group-has-disabled:text-disabled-100",
33
- size === "small" ? "typography-body-2-semibold" : "typography-body-1-semibold"
32
+ "cursor-pointer select-none text-foreground-default group-has-disabled:cursor-not-allowed group-has-disabled:text-neutral-250",
33
+ size === "small" ? "typography-semibold-body-md" : "typography-semibold-body-lg"
34
34
  ),
35
35
  children: label
36
36
  }
@@ -40,8 +40,8 @@ const Radio = React.forwardRef(({ className, size = "default", label, helperText
40
40
  {
41
41
  id: helperTextId,
42
42
  className: cn(
43
- "text-body-200 group-has-disabled:cursor-not-allowed group-has-disabled:text-disabled-100",
44
- size === "small" ? "typography-body-2-semibold" : "typography-caption-regular"
43
+ "text-foreground-secondary group-has-disabled:cursor-not-allowed group-has-disabled:text-neutral-250",
44
+ size === "small" ? "typography-semibold-body-md" : "typography-regular-body-sm"
45
45
  ),
46
46
  children: helperText
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.mjs","sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioProps\n extends Omit<React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, \"asChild\"> {\n /** Size variant controlling label and helper text typography. @default \"default\" */\n size?: \"default\" | \"small\";\n /** Label text displayed next to the radio button. */\n label?: string;\n /** Descriptive text displayed below the label. */\n helperText?: string;\n}\n\n/**\n * A single radio option within a {@link RadioGroup}. Includes an optional label\n * and helper text.\n *\n * @example\n * ```tsx\n * <RadioGroup value={value} onValueChange={setValue}>\n * <Radio value=\"a\" label=\"Option A\" />\n * <Radio value=\"b\" label=\"Option B\" />\n * </RadioGroup>\n * ```\n */\nexport const Radio = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioProps\n>(({ className, size = \"default\", label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const helperTextId = `${inputId}-helper`;\n\n return (\n <div className={cn(\"group inline-flex items-center gap-2\", className)}>\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n data-testid=\"radio\"\n aria-describedby={helperText ? helperTextId : undefined}\n className={cn(\n \"relative h-4 w-4 shrink-0 cursor-pointer appearance-none rounded-full border border-body-100 bg-transparent outline-brand-purple-500 transition-colors hover:bg-brand-green-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 not-disabled:active:bg-brand-green-50 disabled:cursor-not-allowed disabled:border-disabled-400 disabled:bg-transparent data-[state=checked]:border-body-100 data-[state=checked]:bg-transparent dark:border-body-100 dark:disabled:border-disabled-400\",\n helperText && \"mt-1 self-start\",\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"size-2 rounded-full bg-body-100 group-has-disabled:bg-disabled-400 dark:bg-body-100 dark:group-has-disabled:bg-disabled-400\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {(label || helperText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer select-none text-body-100 group-has-disabled:cursor-not-allowed group-has-disabled:text-disabled-100\",\n size === \"small\" ? \"typography-body-2-semibold\" : \"typography-body-1-semibold\",\n )}\n >\n {label}\n </label>\n )}\n {helperText && (\n <span\n id={helperTextId}\n className={cn(\n \"text-body-200 group-has-disabled:cursor-not-allowed group-has-disabled:text-disabled-100\",\n size === \"small\" ? \"typography-body-2-semibold\" : \"typography-caption-regular\",\n )}\n >\n {helperText}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n\nRadio.displayName = \"Radio\";\n"],"names":[],"mappings":";;;;;AA0BO,MAAM,QAAQ,MAAM,WAGzB,CAAC,EAAE,WAAW,OAAO,WAAW,OAAO,YAAY,IAAI,GAAG,MAAA,GAAS,QAAQ;AAC3E,QAAM,cAAc,MAAM,MAAA;AAC1B,QAAM,UAAU,MAAM;AACtB,QAAM,eAAe,GAAG,OAAO;AAE/B,8BACG,OAAA,EAAI,WAAW,GAAG,wCAAwC,SAAS,GAClE,UAAA;AAAA,IAAA;AAAA,MAAC,oBAAoB;AAAA,MAApB;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ,eAAY;AAAA,QACZ,oBAAkB,aAAa,eAAe;AAAA,QAC9C,WAAW;AAAA,UACT;AAAA,UACA,cAAc;AAAA,QAAA;AAAA,QAEf,GAAG;AAAA,QAEJ,UAAA,oBAAC,oBAAoB,WAApB,EAA8B,WAAU,qDACvC,UAAA,oBAAC,QAAA,EAAK,WAAU,8HAAA,CAA8H,EAAA,CAChJ;AAAA,MAAA;AAAA,IAAA;AAAA,KAEA,SAAS,eACT,qBAAC,OAAA,EAAI,WAAU,yBACZ,UAAA;AAAA,MAAA,SACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,SAAS,UAAU,+BAA+B;AAAA,UAAA;AAAA,UAGnD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJ,cACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAW;AAAA,YACT;AAAA,YACA,SAAS,UAAU,+BAA+B;AAAA,UAAA;AAAA,UAGnD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAED,MAAM,cAAc;"}
1
+ {"version":3,"file":"Radio.mjs","sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioProps\n extends Omit<React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, \"asChild\"> {\n /** Size variant controlling label and helper text typography. @default \"default\" */\n size?: \"default\" | \"small\";\n /** Label text displayed next to the radio button. */\n label?: string;\n /** Descriptive text displayed below the label. */\n helperText?: string;\n}\n\n/**\n * A single radio option within a {@link RadioGroup}. Includes an optional label\n * and helper text.\n *\n * @example\n * ```tsx\n * <RadioGroup value={value} onValueChange={setValue}>\n * <Radio value=\"a\" label=\"Option A\" />\n * <Radio value=\"b\" label=\"Option B\" />\n * </RadioGroup>\n * ```\n */\nexport const Radio = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n RadioProps\n>(({ className, size = \"default\", label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const helperTextId = `${inputId}-helper`;\n\n return (\n <div className={cn(\"group inline-flex items-center gap-2\", className)}>\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n data-testid=\"radio\"\n aria-describedby={helperText ? helperTextId : undefined}\n className={cn(\n \"relative h-4 w-4 shrink-0 cursor-pointer appearance-none rounded-full border border-foreground-default bg-transparent outline-ring transition-colors hover:bg-brand-accent-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 not-disabled:active:bg-brand-accent-muted disabled:cursor-not-allowed disabled:border-neutral-300 disabled:bg-transparent data-[state=checked]:border-foreground-default data-[state=checked]:bg-transparent dark:border-foreground-default dark:disabled:border-neutral-300\",\n helperText && \"mt-1 self-start\",\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"size-2 rounded-full bg-foreground-default group-has-disabled:bg-neutral-300 dark:bg-foreground-default dark:group-has-disabled:bg-neutral-300\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {(label || helperText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer select-none text-foreground-default group-has-disabled:cursor-not-allowed group-has-disabled:text-neutral-250\",\n size === \"small\" ? \"typography-semibold-body-md\" : \"typography-semibold-body-lg\",\n )}\n >\n {label}\n </label>\n )}\n {helperText && (\n <span\n id={helperTextId}\n className={cn(\n \"text-foreground-secondary group-has-disabled:cursor-not-allowed group-has-disabled:text-neutral-250\",\n size === \"small\" ? \"typography-semibold-body-md\" : \"typography-regular-body-sm\",\n )}\n >\n {helperText}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n\nRadio.displayName = \"Radio\";\n"],"names":[],"mappings":";;;;;AA0BO,MAAM,QAAQ,MAAM,WAGzB,CAAC,EAAE,WAAW,OAAO,WAAW,OAAO,YAAY,IAAI,GAAG,MAAA,GAAS,QAAQ;AAC3E,QAAM,cAAc,MAAM,MAAA;AAC1B,QAAM,UAAU,MAAM;AACtB,QAAM,eAAe,GAAG,OAAO;AAE/B,8BACG,OAAA,EAAI,WAAW,GAAG,wCAAwC,SAAS,GAClE,UAAA;AAAA,IAAA;AAAA,MAAC,oBAAoB;AAAA,MAApB;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ,eAAY;AAAA,QACZ,oBAAkB,aAAa,eAAe;AAAA,QAC9C,WAAW;AAAA,UACT;AAAA,UACA,cAAc;AAAA,QAAA;AAAA,QAEf,GAAG;AAAA,QAEJ,UAAA,oBAAC,oBAAoB,WAApB,EAA8B,WAAU,qDACvC,UAAA,oBAAC,QAAA,EAAK,WAAU,gJAAA,CAAgJ,EAAA,CAClK;AAAA,MAAA;AAAA,IAAA;AAAA,KAEA,SAAS,eACT,qBAAC,OAAA,EAAI,WAAU,yBACZ,UAAA;AAAA,MAAA,SACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,SAAS,UAAU,gCAAgC;AAAA,UAAA;AAAA,UAGpD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJ,cACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAW;AAAA,YACT;AAAA,YACA,SAAS,UAAU,gCAAgC;AAAA,UAAA;AAAA,UAGpD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAED,MAAM,cAAc;"}
@@ -25,9 +25,9 @@ const TRIGGER_GAP = {
25
25
  "32": "gap-2"
26
26
  };
27
27
  const TRIGGER_TYPOGRAPHY = {
28
- "48": "typography-body-1-regular",
29
- "40": "typography-body-1-regular",
30
- "32": "typography-body-2-regular"
28
+ "48": "typography-regular-body-lg",
29
+ "40": "typography-regular-body-lg",
30
+ "32": "typography-regular-body-md"
31
31
  };
32
32
  const Select = React.forwardRef(
33
33
  ({
@@ -62,7 +62,7 @@ const Select = React.forwardRef(
62
62
  "label",
63
63
  {
64
64
  htmlFor: triggerId,
65
- className: "typography-caption-semibold px-1 pt-1 pb-2 text-body-100",
65
+ className: "typography-semibold-body-sm px-1 pt-1 pb-2 text-foreground-default",
66
66
  children: label
67
67
  }
68
68
  ),
@@ -82,7 +82,7 @@ const Select = React.forwardRef(
82
82
  TRIGGER_PADDING_X[size],
83
83
  TRIGGER_GAP[size],
84
84
  TRIGGER_TYPOGRAPHY[size],
85
- error ? "border-error-500" : "border-transparent",
85
+ error ? "border-error-default" : "border-transparent",
86
86
  !disabled && !error && "hover:border-neutral-400 data-[state=open]:border-neutral-400",
87
87
  disabled && "cursor-not-allowed opacity-50"
88
88
  ),
@@ -91,18 +91,12 @@ const Select = React.forwardRef(
91
91
  leftIcon && /* @__PURE__ */ jsx(
92
92
  "span",
93
93
  {
94
- className: "flex size-5 shrink-0 items-center justify-center text-body-200",
94
+ className: "flex size-5 shrink-0 items-center justify-center text-foreground-secondary",
95
95
  "data-testid": "left-icon",
96
96
  children: leftIcon
97
97
  }
98
98
  ),
99
- /* @__PURE__ */ jsx(
100
- SelectPrimitive.Value,
101
- {
102
- placeholder,
103
- className: "min-w-0 flex-1 truncate text-left text-body-100 data-placeholder:text-body-200 data-placeholder:opacity-40"
104
- }
105
- )
99
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left text-foreground-default [&>[data-placeholder]]:text-foreground-secondary [&>[data-placeholder]]:opacity-40", children: /* @__PURE__ */ jsx(SelectPrimitive.Value, { placeholder }) })
106
100
  ] }),
107
101
  /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, {}) })
108
102
  ]
@@ -115,8 +109,8 @@ const Select = React.forwardRef(
115
109
  {
116
110
  id: helperTextId,
117
111
  className: cn(
118
- "typography-caption-regular px-2 pt-1 pb-0.5",
119
- error ? "text-error-500" : "text-body-200"
112
+ "typography-regular-body-sm px-2 pt-1 pb-0.5",
113
+ error ? "text-error-default" : "text-foreground-secondary"
120
114
  ),
121
115
  children: bottomText
122
116
  }
@@ -135,7 +129,7 @@ const SelectContent = React.forwardRef(({ className, children, position = "poppe
135
129
  sideOffset,
136
130
  style: { zIndex: "var(--fanvue-ui-portal-z-index, 50)", ...style },
137
131
  className: cn(
138
- "relative min-w-(--radix-select-trigger-width) overflow-hidden rounded-xl border border-neutral-200 bg-background-inverse-solid text-body-100 shadow-[0_4px_16px_rgba(0,0,0,0.10)]",
132
+ "relative min-w-(--radix-select-trigger-width) overflow-hidden rounded-xl border border-neutral-200 bg-surface-page text-foreground-default shadow-[0_4px_16px_rgba(0,0,0,0.10)]",
139
133
  "data-[state=closed]:animate-out data-[state=open]:animate-in",
140
134
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
141
135
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -152,14 +146,14 @@ const SelectItem = React.forwardRef(({ className, children, ...props }, ref) =>
152
146
  {
153
147
  ref,
154
148
  className: cn(
155
- "typography-body-1-regular relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pr-2 pl-3 text-body-100 outline-none",
149
+ "typography-regular-body-lg relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pr-2 pl-3 text-foreground-default outline-none",
156
150
  "focus:bg-neutral-100 data-disabled:pointer-events-none data-disabled:opacity-50",
157
151
  className
158
152
  ),
159
153
  ...props,
160
154
  children: [
161
155
  /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
162
- /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "ml-auto flex size-4 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 text-body-100" }) })
156
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "ml-auto flex size-4 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 text-foreground-default" }) })
163
157
  ]
164
158
  }
165
159
  ));
@@ -170,7 +164,7 @@ const SelectLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PUR
170
164
  SelectPrimitive.Label,
171
165
  {
172
166
  ref,
173
- className: cn("typography-caption-semibold px-3 py-1.5 text-body-200", className),
167
+ className: cn("typography-semibold-body-sm px-3 py-1.5 text-foreground-secondary", className),
174
168
  ...props
175
169
  }
176
170
  ));
@@ -1 +1 @@
1
- {"version":3,"file":"Select.mjs","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { CheckIcon } from \"../Icons/CheckIcon\";\nimport { ChevronDownIcon } from \"../Icons/ChevronDownIcon\";\n\n/** Select field height in pixels. */\nexport type SelectSize = \"48\" | \"40\" | \"32\";\n\ntype SelectContextValue = {\n size: SelectSize;\n error: boolean;\n disabled?: boolean;\n};\n\nconst SelectContext = React.createContext<SelectContextValue>({\n size: \"48\",\n error: false,\n});\n\nconst TRIGGER_HEIGHT: Record<SelectSize, string> = {\n \"48\": \"h-12\",\n \"40\": \"h-10\",\n \"32\": \"h-8\",\n};\n\nconst TRIGGER_PADDING_X: Record<SelectSize, string> = {\n \"48\": \"px-4\",\n \"40\": \"px-4\",\n \"32\": \"px-3\",\n};\n\nconst TRIGGER_GAP: Record<SelectSize, string> = {\n \"48\": \"gap-3\",\n \"40\": \"gap-3\",\n \"32\": \"gap-2\",\n};\n\nconst TRIGGER_TYPOGRAPHY: Record<SelectSize, string> = {\n \"48\": \"typography-body-1-regular\",\n \"40\": \"typography-body-1-regular\",\n \"32\": \"typography-body-2-regular\",\n};\n\nexport interface SelectProps extends Omit<SelectPrimitive.SelectProps, \"dir\"> {\n /** Label text displayed above the trigger. Also used as the accessible name. */\n label?: string;\n /** Accessible name applied directly to the trigger button when no visible `label` is provided. */\n \"aria-label\"?: string;\n /** ID of an external element that labels the trigger button. */\n \"aria-labelledby\"?: string;\n /** Helper text displayed below the trigger. Replaced by `errorMessage` when `error` is `true`. */\n helperText?: string;\n /** Height of the select field in pixels. @default \"48\" */\n size?: SelectSize;\n /** Whether the field is in an error state. @default false */\n error?: boolean;\n /** Error message displayed below the trigger. Shown instead of `helperText` when `error` is `true`. */\n errorMessage?: string;\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Icon element displayed at the left side of the trigger. */\n leftIcon?: React.ReactNode;\n /** Whether the field stretches to fill its container width. @default false */\n fullWidth?: boolean;\n /** Wraps the `className` of the outermost container div. */\n className?: string;\n /** HTML `id` applied to the trigger button. Auto-generated if omitted. */\n id?: string;\n}\n\n/**\n * A select field with optional label, helper/error text, and an icon slot,\n * built on Radix UI Select for full accessibility and keyboard navigation.\n *\n * Pair with {@link SelectContent} and {@link SelectItem} to provide options.\n *\n * @example\n * ```tsx\n * <Select label=\"Country\" placeholder=\"Select a country\">\n * <SelectContent>\n * <SelectItem value=\"us\">United States</SelectItem>\n * <SelectItem value=\"uk\">United Kingdom</SelectItem>\n * </SelectContent>\n * </Select>\n * ```\n */\nexport const Select = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\n SelectProps\n>(\n (\n {\n label,\n helperText,\n size = \"48\",\n error = false,\n errorMessage,\n placeholder,\n leftIcon,\n fullWidth = false,\n className,\n id,\n disabled,\n children,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const triggerId = id ?? generatedId;\n const helperTextId = `${triggerId}-helper`;\n const bottomText = error && errorMessage ? errorMessage : helperText;\n\n return (\n <SelectContext.Provider value={{ size, error, disabled }}>\n <div\n className={cn(\"flex flex-col\", fullWidth && \"w-full\", className)}\n data-disabled={disabled ? \"\" : undefined}\n data-error={error ? \"\" : undefined}\n >\n {label && (\n <label\n htmlFor={triggerId}\n className=\"typography-caption-semibold px-1 pt-1 pb-2 text-body-100\"\n >\n {label}\n </label>\n )}\n\n <SelectPrimitive.Root disabled={disabled} {...props}>\n <SelectPrimitive.Trigger\n ref={ref}\n id={triggerId}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={bottomText ? helperTextId : undefined}\n aria-invalid={error || undefined}\n className={cn(\n \"flex w-full cursor-pointer items-center justify-between rounded-xl border bg-neutral-100 outline-none motion-safe:transition-colors\",\n TRIGGER_HEIGHT[size],\n TRIGGER_PADDING_X[size],\n TRIGGER_GAP[size],\n TRIGGER_TYPOGRAPHY[size],\n error ? \"border-error-500\" : \"border-transparent\",\n !disabled &&\n !error &&\n \"hover:border-neutral-400 data-[state=open]:border-neutral-400\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon && (\n <span\n className=\"flex size-5 shrink-0 items-center justify-center text-body-200\"\n data-testid=\"left-icon\"\n >\n {leftIcon}\n </span>\n )}\n <SelectPrimitive.Value\n placeholder={placeholder}\n className=\"min-w-0 flex-1 truncate text-left text-body-100 data-placeholder:text-body-200 data-placeholder:opacity-40\"\n />\n </div>\n\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n {children}\n </SelectPrimitive.Root>\n\n {bottomText && (\n <p\n id={helperTextId}\n className={cn(\n \"typography-caption-regular px-2 pt-1 pb-0.5\",\n error ? \"text-error-500\" : \"text-body-200\",\n )}\n >\n {bottomText}\n </p>\n )}\n </div>\n </SelectContext.Provider>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport interface SelectContentProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> {}\n\n/**\n * The dropdown panel rendered inside a portal. Place {@link SelectItem} elements\n * (and optionally {@link SelectGroup} / {@link SelectLabel}) as children.\n */\nexport const SelectContent = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Content>,\n SelectContentProps\n>(({ className, children, position = \"popper\", sideOffset = 4, style, ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n style={{ zIndex: \"var(--fanvue-ui-portal-z-index, 50)\", ...style }}\n className={cn(\n \"relative min-w-(--radix-select-trigger-width) overflow-hidden rounded-xl border border-neutral-200 bg-background-inverse-solid text-body-100 shadow-[0_4px_16px_rgba(0,0,0,0.10)]\",\n \"data-[state=closed]:animate-out data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"max-h-[var(--radix-select-content-available-height)] overflow-y-auto p-1\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\n\nSelectContent.displayName = \"SelectContent\";\n\nexport interface SelectItemProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {}\n\n/**\n * An individual option inside {@link SelectContent}.\n */\nexport const SelectItem = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"typography-body-1-regular relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pr-2 pl-3 text-body-100 outline-none\",\n \"focus:bg-neutral-100 data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"ml-auto flex size-4 shrink-0 items-center justify-center\">\n <CheckIcon className=\"size-4 text-body-100\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\n\nSelectItem.displayName = \"SelectItem\";\n\n/** Props for {@link SelectGroup}. */\nexport type SelectGroupProps = React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group>;\n\n/**\n * Groups related {@link SelectItem} elements under a {@link SelectLabel}.\n */\nexport const SelectGroup = SelectPrimitive.Group;\nSelectGroup.displayName = \"SelectGroup\";\n\nexport interface SelectLabelProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> {}\n\n/**\n * A non-interactive label shown above a {@link SelectGroup}.\n */\nexport const SelectLabel = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"typography-caption-semibold px-3 py-1.5 text-body-200\", className)}\n {...props}\n />\n));\n\nSelectLabel.displayName = \"SelectLabel\";\n\nexport interface SelectSeparatorProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> {}\n\n/** A horizontal rule that visually separates groups in {@link SelectContent}. */\nexport const SelectSeparator = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-neutral-200\", className)}\n {...props}\n />\n));\n\nSelectSeparator.displayName = \"SelectSeparator\";\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Select.mjs","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { CheckIcon } from \"../Icons/CheckIcon\";\nimport { ChevronDownIcon } from \"../Icons/ChevronDownIcon\";\n\n/** Select field height in pixels. */\nexport type SelectSize = \"48\" | \"40\" | \"32\";\n\ntype SelectContextValue = {\n size: SelectSize;\n error: boolean;\n disabled?: boolean;\n};\n\nconst SelectContext = React.createContext<SelectContextValue>({\n size: \"48\",\n error: false,\n});\n\nconst TRIGGER_HEIGHT: Record<SelectSize, string> = {\n \"48\": \"h-12\",\n \"40\": \"h-10\",\n \"32\": \"h-8\",\n};\n\nconst TRIGGER_PADDING_X: Record<SelectSize, string> = {\n \"48\": \"px-4\",\n \"40\": \"px-4\",\n \"32\": \"px-3\",\n};\n\nconst TRIGGER_GAP: Record<SelectSize, string> = {\n \"48\": \"gap-3\",\n \"40\": \"gap-3\",\n \"32\": \"gap-2\",\n};\n\nconst TRIGGER_TYPOGRAPHY: Record<SelectSize, string> = {\n \"48\": \"typography-regular-body-lg\",\n \"40\": \"typography-regular-body-lg\",\n \"32\": \"typography-regular-body-md\",\n};\n\nexport interface SelectProps extends Omit<SelectPrimitive.SelectProps, \"dir\"> {\n /** Label text displayed above the trigger. Also used as the accessible name. */\n label?: string;\n /** Accessible name applied directly to the trigger button when no visible `label` is provided. */\n \"aria-label\"?: string;\n /** ID of an external element that labels the trigger button. */\n \"aria-labelledby\"?: string;\n /** Helper text displayed below the trigger. Replaced by `errorMessage` when `error` is `true`. */\n helperText?: string;\n /** Height of the select field in pixels. @default \"48\" */\n size?: SelectSize;\n /** Whether the field is in an error state. @default false */\n error?: boolean;\n /** Error message displayed below the trigger. Shown instead of `helperText` when `error` is `true`. */\n errorMessage?: string;\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Icon element displayed at the left side of the trigger. */\n leftIcon?: React.ReactNode;\n /** Whether the field stretches to fill its container width. @default false */\n fullWidth?: boolean;\n /** Wraps the `className` of the outermost container div. */\n className?: string;\n /** HTML `id` applied to the trigger button. Auto-generated if omitted. */\n id?: string;\n}\n\n/**\n * A select field with optional label, helper/error text, and an icon slot,\n * built on Radix UI Select for full accessibility and keyboard navigation.\n *\n * Pair with {@link SelectContent} and {@link SelectItem} to provide options.\n *\n * @example\n * ```tsx\n * <Select label=\"Country\" placeholder=\"Select a country\">\n * <SelectContent>\n * <SelectItem value=\"us\">United States</SelectItem>\n * <SelectItem value=\"uk\">United Kingdom</SelectItem>\n * </SelectContent>\n * </Select>\n * ```\n */\nexport const Select = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\n SelectProps\n>(\n (\n {\n label,\n helperText,\n size = \"48\",\n error = false,\n errorMessage,\n placeholder,\n leftIcon,\n fullWidth = false,\n className,\n id,\n disabled,\n children,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const triggerId = id ?? generatedId;\n const helperTextId = `${triggerId}-helper`;\n const bottomText = error && errorMessage ? errorMessage : helperText;\n\n return (\n <SelectContext.Provider value={{ size, error, disabled }}>\n <div\n className={cn(\"flex flex-col\", fullWidth && \"w-full\", className)}\n data-disabled={disabled ? \"\" : undefined}\n data-error={error ? \"\" : undefined}\n >\n {label && (\n <label\n htmlFor={triggerId}\n className=\"typography-semibold-body-sm px-1 pt-1 pb-2 text-foreground-default\"\n >\n {label}\n </label>\n )}\n\n <SelectPrimitive.Root disabled={disabled} {...props}>\n <SelectPrimitive.Trigger\n ref={ref}\n id={triggerId}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={bottomText ? helperTextId : undefined}\n aria-invalid={error || undefined}\n className={cn(\n \"flex w-full cursor-pointer items-center justify-between rounded-xl border bg-neutral-100 outline-none motion-safe:transition-colors\",\n TRIGGER_HEIGHT[size],\n TRIGGER_PADDING_X[size],\n TRIGGER_GAP[size],\n TRIGGER_TYPOGRAPHY[size],\n error ? \"border-error-default\" : \"border-transparent\",\n !disabled &&\n !error &&\n \"hover:border-neutral-400 data-[state=open]:border-neutral-400\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon && (\n <span\n className=\"flex size-5 shrink-0 items-center justify-center text-foreground-secondary\"\n data-testid=\"left-icon\"\n >\n {leftIcon}\n </span>\n )}\n <span className=\"min-w-0 flex-1 truncate text-left text-foreground-default [&>[data-placeholder]]:text-foreground-secondary [&>[data-placeholder]]:opacity-40\">\n <SelectPrimitive.Value placeholder={placeholder} />\n </span>\n </div>\n\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n {children}\n </SelectPrimitive.Root>\n\n {bottomText && (\n <p\n id={helperTextId}\n className={cn(\n \"typography-regular-body-sm px-2 pt-1 pb-0.5\",\n error ? \"text-error-default\" : \"text-foreground-secondary\",\n )}\n >\n {bottomText}\n </p>\n )}\n </div>\n </SelectContext.Provider>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport interface SelectContentProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> {}\n\n/**\n * The dropdown panel rendered inside a portal. Place {@link SelectItem} elements\n * (and optionally {@link SelectGroup} / {@link SelectLabel}) as children.\n */\nexport const SelectContent = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Content>,\n SelectContentProps\n>(({ className, children, position = \"popper\", sideOffset = 4, style, ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n style={{ zIndex: \"var(--fanvue-ui-portal-z-index, 50)\", ...style }}\n className={cn(\n \"relative min-w-(--radix-select-trigger-width) overflow-hidden rounded-xl border border-neutral-200 bg-surface-page text-foreground-default shadow-[0_4px_16px_rgba(0,0,0,0.10)]\",\n \"data-[state=closed]:animate-out data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"max-h-[var(--radix-select-content-available-height)] overflow-y-auto p-1\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\n\nSelectContent.displayName = \"SelectContent\";\n\nexport interface SelectItemProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {}\n\n/**\n * An individual option inside {@link SelectContent}.\n */\nexport const SelectItem = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"typography-regular-body-lg relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pr-2 pl-3 text-foreground-default outline-none\",\n \"focus:bg-neutral-100 data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"ml-auto flex size-4 shrink-0 items-center justify-center\">\n <CheckIcon className=\"size-4 text-foreground-default\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\n\nSelectItem.displayName = \"SelectItem\";\n\n/** Props for {@link SelectGroup}. */\nexport type SelectGroupProps = React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group>;\n\n/**\n * Groups related {@link SelectItem} elements under a {@link SelectLabel}.\n */\nexport const SelectGroup = SelectPrimitive.Group;\nSelectGroup.displayName = \"SelectGroup\";\n\nexport interface SelectLabelProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> {}\n\n/**\n * A non-interactive label shown above a {@link SelectGroup}.\n */\nexport const SelectLabel = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"typography-semibold-body-sm px-3 py-1.5 text-foreground-secondary\", className)}\n {...props}\n />\n));\n\nSelectLabel.displayName = \"SelectLabel\";\n\nexport interface SelectSeparatorProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> {}\n\n/** A horizontal rule that visually separates groups in {@link SelectContent}. */\nexport const SelectSeparator = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-neutral-200\", className)}\n {...props}\n />\n));\n\nSelectSeparator.displayName = \"SelectSeparator\";\n"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@ const Slider = React.forwardRef(
41
41
  ),
42
42
  ...props,
43
43
  children: [
44
- /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-3 w-full overflow-hidden rounded-full border border-neutral-100 bg-neutral-100", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full rounded-full bg-brand-green-500" }) }),
44
+ /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-3 w-full overflow-hidden rounded-full border border-neutral-100 bg-neutral-100", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full rounded-full bg-brand-accent-default" }) }),
45
45
  Array.from({ length: thumbCount }, (_, i) => /* @__PURE__ */ jsx(
46
46
  SliderThumb,
47
47
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.mjs","sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { SliderLayout } from \"./SliderLayout\";\nimport { SliderThumb } from \"./SliderThumb\";\n\n/** Position of the slider label relative to the track. */\nexport type SliderLabelPosition = \"top\" | \"left\";\n\nexport interface SliderProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"asChild\" | \"children\"\n > {\n /** Label text displayed alongside the slider. */\n label?: string;\n /** Position of the label relative to the slider track. @default \"top\" */\n labelPosition?: SliderLabelPosition;\n /** Text shown at the minimum end of the track. */\n minLabel?: string;\n /** Text shown at the maximum end of the track. */\n maxLabel?: string;\n /** Whether to show a tooltip with the current value above the thumb. @default false */\n showTooltip?: boolean;\n /** Custom formatter for the tooltip value (e.g. to add units or format numbers). */\n formatTooltip?: (value: number) => string;\n}\n\n/**\n * A range input for selecting one or more numeric values along a track.\n * Supports single and multi-thumb modes, optional labels, and a value tooltip.\n *\n * Built on Radix UI `Slider`.\n *\n * @example\n * ```tsx\n * <Slider\n * label=\"Volume\"\n * min={0}\n * max={100}\n * defaultValue={[50]}\n * showTooltip\n * />\n * ```\n */\nexport const Slider = React.forwardRef<\n React.ComponentRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(\n (\n {\n className,\n label,\n labelPosition = \"top\",\n minLabel,\n maxLabel,\n showTooltip = false,\n formatTooltip,\n disabled,\n value,\n defaultValue,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref,\n ) => {\n const labelId = React.useId();\n const thumbCount = value?.length ?? defaultValue?.length ?? 1;\n const resolvedLabelledBy = ariaLabelledBy ?? (label ? labelId : undefined);\n const resolvedAriaLabel = !resolvedLabelledBy ? ariaLabel : undefined;\n\n const sliderTrack = (\n <SliderPrimitive.Root\n ref={ref}\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n aria-label={resolvedAriaLabel}\n aria-labelledby={resolvedLabelledBy}\n className={cn(\n \"group/slider relative flex w-full touch-none select-none items-center\",\n disabled && \"pointer-events-none opacity-50\",\n className,\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-3 w-full overflow-hidden rounded-full border border-neutral-100 bg-neutral-100\">\n <SliderPrimitive.Range className=\"absolute h-full rounded-full bg-brand-green-500\" />\n </SliderPrimitive.Track>\n\n {Array.from({ length: thumbCount }, (_, i) => (\n <SliderThumb\n // biome-ignore lint/suspicious/noArrayIndexKey: thumbs are fixed-count and never reorder\n key={i}\n showTooltip={showTooltip}\n formatTooltip={formatTooltip}\n index={i}\n aria-label={resolvedAriaLabel}\n aria-labelledby={resolvedLabelledBy}\n />\n ))}\n </SliderPrimitive.Root>\n );\n\n const hasLayout = Boolean(label || minLabel || maxLabel);\n\n if (!hasLayout) return sliderTrack;\n\n return (\n <SliderLayout\n label={label}\n labelId={labelId}\n labelPosition={labelPosition}\n minLabel={minLabel}\n maxLabel={maxLabel}\n >\n {sliderTrack}\n </SliderLayout>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n"],"names":[],"mappings":";;;;;;;AA6CO,MAAM,SAAS,MAAM;AAAA,EAI1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,UAAU,MAAM,MAAA;AACtB,UAAM,aAAa,OAAO,UAAU,cAAc,UAAU;AAC5D,UAAM,qBAAqB,mBAAmB,QAAQ,UAAU;AAChE,UAAM,oBAAoB,CAAC,qBAAqB,YAAY;AAE5D,UAAM,cACJ;AAAA,MAAC,gBAAgB;AAAA,MAAhB;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,WAAW;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,gBAAgB,OAAhB,EAAsB,WAAU,6FAC/B,UAAA,oBAAC,gBAAgB,OAAhB,EAAsB,WAAU,kDAAA,CAAkD,EAAA,CACrF;AAAA,UAEC,MAAM,KAAK,EAAE,QAAQ,cAAc,CAAC,GAAG,MACtC;AAAA,YAAC;AAAA,YAAA;AAAA,cAGC;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,cAAY;AAAA,cACZ,mBAAiB;AAAA,YAAA;AAAA,YALZ;AAAA,UAAA,CAOR;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIL,UAAM,YAAY,QAAQ,SAAS,YAAY,QAAQ;AAEvD,QAAI,CAAC,UAAW,QAAO;AAEvB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA,OAAO,cAAc;"}
1
+ {"version":3,"file":"Slider.mjs","sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { SliderLayout } from \"./SliderLayout\";\nimport { SliderThumb } from \"./SliderThumb\";\n\n/** Position of the slider label relative to the track. */\nexport type SliderLabelPosition = \"top\" | \"left\";\n\nexport interface SliderProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"asChild\" | \"children\"\n > {\n /** Label text displayed alongside the slider. */\n label?: string;\n /** Position of the label relative to the slider track. @default \"top\" */\n labelPosition?: SliderLabelPosition;\n /** Text shown at the minimum end of the track. */\n minLabel?: string;\n /** Text shown at the maximum end of the track. */\n maxLabel?: string;\n /** Whether to show a tooltip with the current value above the thumb. @default false */\n showTooltip?: boolean;\n /** Custom formatter for the tooltip value (e.g. to add units or format numbers). */\n formatTooltip?: (value: number) => string;\n}\n\n/**\n * A range input for selecting one or more numeric values along a track.\n * Supports single and multi-thumb modes, optional labels, and a value tooltip.\n *\n * Built on Radix UI `Slider`.\n *\n * @example\n * ```tsx\n * <Slider\n * label=\"Volume\"\n * min={0}\n * max={100}\n * defaultValue={[50]}\n * showTooltip\n * />\n * ```\n */\nexport const Slider = React.forwardRef<\n React.ComponentRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(\n (\n {\n className,\n label,\n labelPosition = \"top\",\n minLabel,\n maxLabel,\n showTooltip = false,\n formatTooltip,\n disabled,\n value,\n defaultValue,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref,\n ) => {\n const labelId = React.useId();\n const thumbCount = value?.length ?? defaultValue?.length ?? 1;\n const resolvedLabelledBy = ariaLabelledBy ?? (label ? labelId : undefined);\n const resolvedAriaLabel = !resolvedLabelledBy ? ariaLabel : undefined;\n\n const sliderTrack = (\n <SliderPrimitive.Root\n ref={ref}\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n aria-label={resolvedAriaLabel}\n aria-labelledby={resolvedLabelledBy}\n className={cn(\n \"group/slider relative flex w-full touch-none select-none items-center\",\n disabled && \"pointer-events-none opacity-50\",\n className,\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-3 w-full overflow-hidden rounded-full border border-neutral-100 bg-neutral-100\">\n <SliderPrimitive.Range className=\"absolute h-full rounded-full bg-brand-accent-default\" />\n </SliderPrimitive.Track>\n\n {Array.from({ length: thumbCount }, (_, i) => (\n <SliderThumb\n // biome-ignore lint/suspicious/noArrayIndexKey: thumbs are fixed-count and never reorder\n key={i}\n showTooltip={showTooltip}\n formatTooltip={formatTooltip}\n index={i}\n aria-label={resolvedAriaLabel}\n aria-labelledby={resolvedLabelledBy}\n />\n ))}\n </SliderPrimitive.Root>\n );\n\n const hasLayout = Boolean(label || minLabel || maxLabel);\n\n if (!hasLayout) return sliderTrack;\n\n return (\n <SliderLayout\n label={label}\n labelId={labelId}\n labelPosition={labelPosition}\n minLabel={minLabel}\n maxLabel={maxLabel}\n >\n {sliderTrack}\n </SliderLayout>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n"],"names":[],"mappings":";;;;;;;AA6CO,MAAM,SAAS,MAAM;AAAA,EAI1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,UAAU,MAAM,MAAA;AACtB,UAAM,aAAa,OAAO,UAAU,cAAc,UAAU;AAC5D,UAAM,qBAAqB,mBAAmB,QAAQ,UAAU;AAChE,UAAM,oBAAoB,CAAC,qBAAqB,YAAY;AAE5D,UAAM,cACJ;AAAA,MAAC,gBAAgB;AAAA,MAAhB;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,WAAW;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,gBAAgB,OAAhB,EAAsB,WAAU,6FAC/B,UAAA,oBAAC,gBAAgB,OAAhB,EAAsB,WAAU,uDAAA,CAAuD,EAAA,CAC1F;AAAA,UAEC,MAAM,KAAK,EAAE,QAAQ,cAAc,CAAC,GAAG,MACtC;AAAA,YAAC;AAAA,YAAA;AAAA,cAGC;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,cAAY;AAAA,cACZ,mBAAiB;AAAA,YAAA;AAAA,YALZ;AAAA,UAAA,CAOR;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIL,UAAM,YAAY,QAAQ,SAAS,YAAY,QAAQ;AAEvD,QAAI,CAAC,UAAW,QAAO;AAEvB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA,OAAO,cAAc;"}
@@ -10,15 +10,22 @@ function SliderLayout({
10
10
  }) {
11
11
  if (labelPosition === "left") {
12
12
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
13
- label && /* @__PURE__ */ jsx("span", { id: labelId, className: "typography-body-1-semibold shrink-0 text-body-100", children: label }),
14
- minLabel && /* @__PURE__ */ jsx("span", { className: "typography-body-2-regular shrink-0 text-body-200", children: minLabel }),
13
+ label && /* @__PURE__ */ jsx(
14
+ "span",
15
+ {
16
+ id: labelId,
17
+ className: "typography-semibold-body-lg shrink-0 text-foreground-default",
18
+ children: label
19
+ }
20
+ ),
21
+ minLabel && /* @__PURE__ */ jsx("span", { className: "typography-regular-body-md shrink-0 text-foreground-secondary", children: minLabel }),
15
22
  children,
16
- maxLabel && /* @__PURE__ */ jsx("span", { className: "typography-body-2-regular shrink-0 text-body-200", children: maxLabel })
23
+ maxLabel && /* @__PURE__ */ jsx("span", { className: "typography-regular-body-md shrink-0 text-foreground-secondary", children: maxLabel })
17
24
  ] });
18
25
  }
19
26
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-3", children: [
20
- label && /* @__PURE__ */ jsx("span", { id: labelId, className: "typography-body-1-semibold text-body-100", children: label }),
21
- (minLabel || maxLabel) && /* @__PURE__ */ jsxs("div", { className: "flex w-full items-start justify-between text-body-200 text-sm leading-[18px]", children: [
27
+ label && /* @__PURE__ */ jsx("span", { id: labelId, className: "typography-semibold-body-lg text-foreground-default", children: label }),
28
+ (minLabel || maxLabel) && /* @__PURE__ */ jsxs("div", { className: "flex w-full items-start justify-between text-foreground-secondary text-sm leading-[18px]", children: [
22
29
  minLabel && /* @__PURE__ */ jsx("span", { children: minLabel }),
23
30
  maxLabel && /* @__PURE__ */ jsx("span", { className: "ml-auto", children: maxLabel })
24
31
  ] }),
@@ -1 +1 @@
1
- {"version":3,"file":"SliderLayout.mjs","sources":["../../../src/components/Slider/SliderLayout.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport type { SliderLabelPosition } from \"./Slider\";\n\ninterface SliderLayoutProps {\n label?: string;\n labelId: string;\n labelPosition: SliderLabelPosition;\n minLabel?: string;\n maxLabel?: string;\n children: React.ReactNode;\n}\n\nexport function SliderLayout({\n label,\n labelId,\n labelPosition,\n minLabel,\n maxLabel,\n children,\n}: SliderLayoutProps) {\n if (labelPosition === \"left\") {\n return (\n <div className=\"flex items-center gap-3\">\n {label && (\n <span id={labelId} className=\"typography-body-1-semibold shrink-0 text-body-100\">\n {label}\n </span>\n )}\n {minLabel && (\n <span className=\"typography-body-2-regular shrink-0 text-body-200\">{minLabel}</span>\n )}\n {children}\n {maxLabel && (\n <span className=\"typography-body-2-regular shrink-0 text-body-200\">{maxLabel}</span>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full flex-col gap-3\">\n {label && (\n <span id={labelId} className=\"typography-body-1-semibold text-body-100\">\n {label}\n </span>\n )}\n {(minLabel || maxLabel) && (\n <div className=\"flex w-full items-start justify-between text-body-200 text-sm leading-[18px]\">\n {minLabel && <span>{minLabel}</span>}\n {maxLabel && <span className=\"ml-auto\">{maxLabel}</span>}\n </div>\n )}\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAYO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,MAAI,kBAAkB,QAAQ;AAC5B,WACE,qBAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,MAAA,6BACE,QAAA,EAAK,IAAI,SAAS,WAAU,qDAC1B,UAAA,OACH;AAAA,MAED,YACC,oBAAC,QAAA,EAAK,WAAU,oDAAoD,UAAA,UAAS;AAAA,MAE9E;AAAA,MACA,YACC,oBAAC,QAAA,EAAK,WAAU,oDAAoD,UAAA,SAAA,CAAS;AAAA,IAAA,GAEjF;AAAA,EAEJ;AAEA,SACE,qBAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,IAAA,6BACE,QAAA,EAAK,IAAI,SAAS,WAAU,4CAC1B,UAAA,OACH;AAAA,KAEA,YAAY,aACZ,qBAAC,OAAA,EAAI,WAAU,gFACZ,UAAA;AAAA,MAAA,YAAY,oBAAC,UAAM,UAAA,SAAA,CAAS;AAAA,MAC5B,YAAY,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,SAAA,CAAS;AAAA,IAAA,GACnD;AAAA,IAED;AAAA,EAAA,GACH;AAEJ;"}
1
+ {"version":3,"file":"SliderLayout.mjs","sources":["../../../src/components/Slider/SliderLayout.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport type { SliderLabelPosition } from \"./Slider\";\n\ninterface SliderLayoutProps {\n label?: string;\n labelId: string;\n labelPosition: SliderLabelPosition;\n minLabel?: string;\n maxLabel?: string;\n children: React.ReactNode;\n}\n\nexport function SliderLayout({\n label,\n labelId,\n labelPosition,\n minLabel,\n maxLabel,\n children,\n}: SliderLayoutProps) {\n if (labelPosition === \"left\") {\n return (\n <div className=\"flex items-center gap-3\">\n {label && (\n <span\n id={labelId}\n className=\"typography-semibold-body-lg shrink-0 text-foreground-default\"\n >\n {label}\n </span>\n )}\n {minLabel && (\n <span className=\"typography-regular-body-md shrink-0 text-foreground-secondary\">\n {minLabel}\n </span>\n )}\n {children}\n {maxLabel && (\n <span className=\"typography-regular-body-md shrink-0 text-foreground-secondary\">\n {maxLabel}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full flex-col gap-3\">\n {label && (\n <span id={labelId} className=\"typography-semibold-body-lg text-foreground-default\">\n {label}\n </span>\n )}\n {(minLabel || maxLabel) && (\n <div className=\"flex w-full items-start justify-between text-foreground-secondary text-sm leading-[18px]\">\n {minLabel && <span>{minLabel}</span>}\n {maxLabel && <span className=\"ml-auto\">{maxLabel}</span>}\n </div>\n )}\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAYO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,MAAI,kBAAkB,QAAQ;AAC5B,WACE,qBAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,MAAA,SACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAU;AAAA,UAET,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJ,YACC,oBAAC,QAAA,EAAK,WAAU,iEACb,UAAA,UACH;AAAA,MAED;AAAA,MACA,YACC,oBAAC,QAAA,EAAK,WAAU,iEACb,UAAA,SAAA,CACH;AAAA,IAAA,GAEJ;AAAA,EAEJ;AAEA,SACE,qBAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,IAAA,6BACE,QAAA,EAAK,IAAI,SAAS,WAAU,uDAC1B,UAAA,OACH;AAAA,KAEA,YAAY,aACZ,qBAAC,OAAA,EAAI,WAAU,4FACZ,UAAA;AAAA,MAAA,YAAY,oBAAC,UAAM,UAAA,SAAA,CAAS;AAAA,MAC5B,YAAY,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,SAAA,CAAS;AAAA,IAAA,GACnD;AAAA,IAED;AAAA,EAAA,GACH;AAEJ;"}
@@ -36,21 +36,21 @@ function SliderThumb({
36
36
  }
37
37
  },
38
38
  className: cn(
39
- "flex size-6 items-center justify-center rounded-full border border-neutral-100 bg-background-inverse-solid shadow-sm",
39
+ "flex size-6 items-center justify-center rounded-full border border-neutral-100 bg-surface-page shadow-sm",
40
40
  "transition-shadow duration-150",
41
- "hover:ring-2 hover:ring-brand-green-500",
42
- "not-data-disabled:active:ring-2 not-data-disabled:active:ring-brand-green-500",
43
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-purple-500 focus-visible:ring-offset-2 focus-visible:ring-offset-background-inverse-solid",
41
+ "hover:ring-2 hover:ring-brand-accent-default",
42
+ "not-data-disabled:active:ring-2 not-data-disabled:active:ring-brand-accent-default",
43
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-page",
44
44
  "data-disabled:cursor-not-allowed"
45
45
  ),
46
46
  children: [
47
- /* @__PURE__ */ jsx("span", { className: "block size-3 rounded-full bg-brand-green-500 shadow-[inset_0px_1px_2px_0px_rgba(0,0,0,0.1)]" }),
47
+ /* @__PURE__ */ jsx("span", { className: "block size-3 rounded-full bg-brand-accent-default shadow-[inset_0px_1px_2px_0px_rgba(0,0,0,0.1)]" }),
48
48
  showTooltip && /* @__PURE__ */ jsx(
49
49
  "span",
50
50
  {
51
51
  role: "tooltip",
52
52
  "data-slider-tooltip": true,
53
- className: "typography-caption-semibold pointer-events-none absolute bottom-full mb-2 rounded-3xl bg-background-solid px-2 py-1 text-background-inverse-solid shadow-sm"
53
+ className: "typography-semibold-body-sm pointer-events-none absolute bottom-full mb-2 rounded-3xl bg-surface-pageinverse px-2 py-1 text-foreground-inverse shadow-sm"
54
54
  }
55
55
  )
56
56
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"SliderThumb.mjs","sources":["../../../src/components/Slider/SliderThumb.tsx"],"sourcesContent":["import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\ninterface SliderThumbProps {\n showTooltip: boolean;\n formatTooltip?: (value: number) => string;\n index: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n}\n\nexport function SliderThumb({\n showTooltip,\n formatTooltip,\n index,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n}: SliderThumbProps) {\n const thumbRef = React.useCallback(\n (el: HTMLSpanElement | null) => {\n if (!el || !showTooltip) return;\n syncTooltipText(el, formatTooltip);\n },\n [showTooltip, formatTooltip],\n );\n\n return (\n <SliderPrimitive.Thumb\n ref={thumbRef}\n data-index={index}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onPointerDown={(e) => {\n if (showTooltip) syncTooltipText(e.currentTarget, formatTooltip);\n }}\n onPointerMove={(e) => {\n if (showTooltip) syncTooltipText(e.currentTarget, formatTooltip);\n }}\n onKeyDown={(e) => {\n if (showTooltip) {\n requestAnimationFrame(() => syncTooltipText(e.currentTarget, formatTooltip));\n }\n }}\n className={cn(\n \"flex size-6 items-center justify-center rounded-full border border-neutral-100 bg-background-inverse-solid shadow-sm\",\n \"transition-shadow duration-150\",\n \"hover:ring-2 hover:ring-brand-green-500\",\n \"not-data-disabled:active:ring-2 not-data-disabled:active:ring-brand-green-500\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-purple-500 focus-visible:ring-offset-2 focus-visible:ring-offset-background-inverse-solid\",\n \"data-disabled:cursor-not-allowed\",\n )}\n >\n <span className=\"block size-3 rounded-full bg-brand-green-500 shadow-[inset_0px_1px_2px_0px_rgba(0,0,0,0.1)]\" />\n\n {showTooltip && (\n <span\n role=\"tooltip\"\n data-slider-tooltip\n className=\"typography-caption-semibold pointer-events-none absolute bottom-full mb-2 rounded-3xl bg-background-solid px-2 py-1 text-background-inverse-solid shadow-sm\"\n />\n )}\n </SliderPrimitive.Thumb>\n );\n}\n\nfunction syncTooltipText(thumb: HTMLElement, formatTooltip?: (value: number) => string) {\n const raw = thumb.getAttribute(\"aria-valuenow\");\n const tooltip = thumb.querySelector<HTMLSpanElement>(\"[data-slider-tooltip]\");\n if (raw == null || !tooltip) return;\n const num = Number(raw);\n tooltip.textContent = formatTooltip ? formatTooltip(num) : String(num);\n}\n"],"names":[],"mappings":";;;;;AAYO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AACrB,GAAqB;AACnB,QAAM,WAAW,MAAM;AAAA,IACrB,CAAC,OAA+B;AAC9B,UAAI,CAAC,MAAM,CAAC,YAAa;AACzB,sBAAgB,IAAI,aAAa;AAAA,IACnC;AAAA,IACA,CAAC,aAAa,aAAa;AAAA,EAAA;AAG7B,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,KAAK;AAAA,MACL,cAAY;AAAA,MACZ,cAAY;AAAA,MACZ,mBAAiB;AAAA,MACjB,eAAe,CAAC,MAAM;AACpB,YAAI,YAAa,iBAAgB,EAAE,eAAe,aAAa;AAAA,MACjE;AAAA,MACA,eAAe,CAAC,MAAM;AACpB,YAAI,YAAa,iBAAgB,EAAE,eAAe,aAAa;AAAA,MACjE;AAAA,MACA,WAAW,CAAC,MAAM;AAChB,YAAI,aAAa;AACf,gCAAsB,MAAM,gBAAgB,EAAE,eAAe,aAAa,CAAC;AAAA,QAC7E;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,8FAAA,CAA8F;AAAA,QAE7G,eACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,uBAAmB;AAAA,YACnB,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,SAAS,gBAAgB,OAAoB,eAA2C;AACtF,QAAM,MAAM,MAAM,aAAa,eAAe;AAC9C,QAAM,UAAU,MAAM,cAA+B,uBAAuB;AAC5E,MAAI,OAAO,QAAQ,CAAC,QAAS;AAC7B,QAAM,MAAM,OAAO,GAAG;AACtB,UAAQ,cAAc,gBAAgB,cAAc,GAAG,IAAI,OAAO,GAAG;AACvE;"}
1
+ {"version":3,"file":"SliderThumb.mjs","sources":["../../../src/components/Slider/SliderThumb.tsx"],"sourcesContent":["import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\ninterface SliderThumbProps {\n showTooltip: boolean;\n formatTooltip?: (value: number) => string;\n index: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n}\n\nexport function SliderThumb({\n showTooltip,\n formatTooltip,\n index,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n}: SliderThumbProps) {\n const thumbRef = React.useCallback(\n (el: HTMLSpanElement | null) => {\n if (!el || !showTooltip) return;\n syncTooltipText(el, formatTooltip);\n },\n [showTooltip, formatTooltip],\n );\n\n return (\n <SliderPrimitive.Thumb\n ref={thumbRef}\n data-index={index}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onPointerDown={(e) => {\n if (showTooltip) syncTooltipText(e.currentTarget, formatTooltip);\n }}\n onPointerMove={(e) => {\n if (showTooltip) syncTooltipText(e.currentTarget, formatTooltip);\n }}\n onKeyDown={(e) => {\n if (showTooltip) {\n requestAnimationFrame(() => syncTooltipText(e.currentTarget, formatTooltip));\n }\n }}\n className={cn(\n \"flex size-6 items-center justify-center rounded-full border border-neutral-100 bg-surface-page shadow-sm\",\n \"transition-shadow duration-150\",\n \"hover:ring-2 hover:ring-brand-accent-default\",\n \"not-data-disabled:active:ring-2 not-data-disabled:active:ring-brand-accent-default\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-page\",\n \"data-disabled:cursor-not-allowed\",\n )}\n >\n <span className=\"block size-3 rounded-full bg-brand-accent-default shadow-[inset_0px_1px_2px_0px_rgba(0,0,0,0.1)]\" />\n\n {showTooltip && (\n <span\n role=\"tooltip\"\n data-slider-tooltip\n className=\"typography-semibold-body-sm pointer-events-none absolute bottom-full mb-2 rounded-3xl bg-surface-pageinverse px-2 py-1 text-foreground-inverse shadow-sm\"\n />\n )}\n </SliderPrimitive.Thumb>\n );\n}\n\nfunction syncTooltipText(thumb: HTMLElement, formatTooltip?: (value: number) => string) {\n const raw = thumb.getAttribute(\"aria-valuenow\");\n const tooltip = thumb.querySelector<HTMLSpanElement>(\"[data-slider-tooltip]\");\n if (raw == null || !tooltip) return;\n const num = Number(raw);\n tooltip.textContent = formatTooltip ? formatTooltip(num) : String(num);\n}\n"],"names":[],"mappings":";;;;;AAYO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AACrB,GAAqB;AACnB,QAAM,WAAW,MAAM;AAAA,IACrB,CAAC,OAA+B;AAC9B,UAAI,CAAC,MAAM,CAAC,YAAa;AACzB,sBAAgB,IAAI,aAAa;AAAA,IACnC;AAAA,IACA,CAAC,aAAa,aAAa;AAAA,EAAA;AAG7B,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,KAAK;AAAA,MACL,cAAY;AAAA,MACZ,cAAY;AAAA,MACZ,mBAAiB;AAAA,MACjB,eAAe,CAAC,MAAM;AACpB,YAAI,YAAa,iBAAgB,EAAE,eAAe,aAAa;AAAA,MACjE;AAAA,MACA,eAAe,CAAC,MAAM;AACpB,YAAI,YAAa,iBAAgB,EAAE,eAAe,aAAa;AAAA,MACjE;AAAA,MACA,WAAW,CAAC,MAAM;AAChB,YAAI,aAAa;AACf,gCAAsB,MAAM,gBAAgB,EAAE,eAAe,aAAa,CAAC;AAAA,QAC7E;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,mGAAA,CAAmG;AAAA,QAElH,eACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,uBAAmB;AAAA,YACnB,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,SAAS,gBAAgB,OAAoB,eAA2C;AACtF,QAAM,MAAM,MAAM,aAAa,eAAe;AAC9C,QAAM,UAAU,MAAM,cAA+B,uBAAuB;AAC5E,MAAI,OAAO,QAAQ,CAAC,QAAS;AAC7B,QAAM,MAAM,OAAO,GAAG;AACtB,UAAQ,cAAc,gBAAgB,cAAc,GAAG,IAAI,OAAO,GAAG;AACvE;"}
@@ -46,8 +46,8 @@ function VipEarnContent({
46
46
  icon && /* @__PURE__ */ jsx("span", { className: "flex shrink-0", "aria-hidden": "true", children: icon }),
47
47
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-4", children: [
48
48
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
49
- title && /* @__PURE__ */ jsx("p", { className: "typography-body-1-semibold text-body-100 leading-6", children: title }),
50
- description && /* @__PURE__ */ jsx("p", { className: "typography-body-2-regular text-body-200", children: description })
49
+ title && /* @__PURE__ */ jsx("p", { className: "typography-semibold-body-lg text-foreground-default leading-6", children: title }),
50
+ description && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-foreground-secondary", children: description })
51
51
  ] }),
52
52
  showActions && primary && /* @__PURE__ */ jsx("div", { className: "self-start", children: primary })
53
53
  ] })
@@ -71,9 +71,9 @@ function WelcomeContent({
71
71
  variant: "secondary"
72
72
  });
73
73
  return /* @__PURE__ */ jsxs(Fragment, { children: [
74
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2 px-8 text-center text-body-100", children: [
75
- title && /* @__PURE__ */ jsx("p", { className: "typography-heading-4 text-body-100", children: title }),
76
- description && /* @__PURE__ */ jsx("p", { className: "typography-body-2-regular text-body-200", children: description })
74
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2 px-8 text-center text-foreground-default", children: [
75
+ title && /* @__PURE__ */ jsx("p", { className: "typography-bold-heading-xs text-foreground-default", children: title }),
76
+ description && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-foreground-secondary", children: description })
77
77
  ] }),
78
78
  showActions && (primary || secondary) && /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-4 px-8 sm:flex-row sm:*:flex-1", children: [
79
79
  secondary,
@@ -100,7 +100,7 @@ function DefaultContent({
100
100
  size: "40"
101
101
  });
102
102
  return /* @__PURE__ */ jsxs(Fragment, { children: [
103
- /* @__PURE__ */ jsx("div", { className: "typography-body-1-medium flex min-w-0 flex-1 items-center self-stretch text-body-100", children }),
103
+ /* @__PURE__ */ jsx("div", { className: "typography-regular-body-lg flex min-w-0 flex-1 items-center self-stretch text-foreground-default", children }),
104
104
  showActions && (primary || secondary) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-start gap-2", children: [
105
105
  primary,
106
106
  secondary
@@ -137,10 +137,10 @@ const Snackbar = React.forwardRef(
137
137
  "data-testid": "snackbar",
138
138
  className: cn(
139
139
  "flex gap-4 rounded-2xl",
140
- (variant === "default" || variant === "vipEarn") && "border border-neutral-50 bg-background-200 p-4 backdrop-blur-md",
140
+ (variant === "default" || variant === "vipEarn") && "border border-neutral-50 bg-surface-container p-4 backdrop-blur-md",
141
141
  variant === "default" && "flex-wrap items-start",
142
142
  variant === "vipEarn" && "items-start",
143
- variant === "welcome" && "relative flex-col items-center bg-background-inverse-solid py-6",
143
+ variant === "welcome" && "relative flex-col items-center bg-surface-page py-6",
144
144
  className
145
145
  ),
146
146
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.mjs","sources":["../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button/Button\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport { CrossIcon } from \"../Icons/CrossIcon\";\n\n/** Layout variant of the snackbar. */\nexport type SnackbarVariant = \"default\" | \"vipEarn\" | \"welcome\";\n\nexport interface SnackbarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Layout variant of the snackbar. @default \"default\" */\n variant?: SnackbarVariant;\n /** Icon element displayed at the leading edge (used by the `vipEarn` variant). */\n icon?: React.ReactNode;\n /** Title content. */\n title?: React.ReactNode;\n /** Descriptive body text. */\n description?: React.ReactNode;\n /** Whether to show primary/secondary action buttons. @default true */\n showActions?: boolean;\n /** Primary CTA label — renders a default {@link Button}. */\n primaryLabel?: string;\n /** Click handler for the primary CTA (used together with `primaryLabel`). */\n primaryOnClick?: () => void;\n /** Custom element rendered as the primary CTA. Overrides `primaryLabel` / `primaryOnClick`. */\n primarySlot?: React.ReactNode;\n /** Secondary CTA label — renders a default {@link Button}. */\n secondaryLabel?: string;\n /** Click handler for the secondary CTA (used together with `secondaryLabel`). */\n secondaryOnClick?: () => void;\n /** Custom element rendered as the secondary CTA. Overrides `secondaryLabel` / `secondaryOnClick`. */\n secondarySlot?: React.ReactNode;\n /** Whether to show the close button. @default false */\n closable?: boolean;\n /** Callback fired when the close button is clicked. */\n onClose?: () => void;\n /** Accessible label for the close button. @default \"Close snackbar\" */\n closeLabel?: string;\n}\n\nfunction CloseButton({\n onClose,\n className,\n closeLabel = \"Close snackbar\",\n}: {\n onClose?: () => void;\n className?: string;\n closeLabel?: string;\n}) {\n return (\n <IconButton\n variant=\"tertiary\"\n size=\"24\"\n onClick={onClose}\n icon={<CrossIcon />}\n className={cn(\"shrink-0\", className)}\n aria-label={closeLabel}\n />\n );\n}\n\n/**\n * Resolves a CTA slot. If a custom slot is provided it takes precedence,\n * otherwise a default Button is rendered from label + onClick.\n */\nfunction resolveCtaSlot(\n slot: React.ReactNode | undefined,\n label: string | undefined,\n onClick: (() => void) | undefined,\n buttonProps: React.ComponentProps<typeof Button>,\n): React.ReactNode | null {\n if (slot) return slot;\n if (label) {\n return (\n <Button onClick={onClick} {...buttonProps}>\n {label}\n </Button>\n );\n }\n return null;\n}\n\nfunction VipEarnContent({\n icon,\n title,\n description,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"icon\"\n | \"title\"\n | \"description\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"text\",\n size: \"24\",\n });\n\n return (\n <>\n {icon && (\n <span className=\"flex shrink-0\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n <div className=\"flex flex-col\">\n {title && <p className=\"typography-body-1-semibold text-body-100 leading-6\">{title}</p>}\n {description && <p className=\"typography-body-2-regular text-body-200\">{description}</p>}\n </div>\n {showActions && primary && <div className=\"self-start\">{primary}</div>}\n </div>\n </>\n );\n}\n\nfunction WelcomeContent({\n title,\n description,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n secondarySlot,\n secondaryLabel,\n secondaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"title\"\n | \"description\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n | \"secondarySlot\"\n | \"secondaryLabel\"\n | \"secondaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"primary\",\n });\n const secondary = resolveCtaSlot(secondarySlot, secondaryLabel, secondaryOnClick, {\n variant: \"secondary\",\n });\n\n return (\n <>\n <div className=\"flex flex-col items-center gap-2 px-8 text-center text-body-100\">\n {title && <p className=\"typography-heading-4 text-body-100\">{title}</p>}\n {description && <p className=\"typography-body-2-regular text-body-200\">{description}</p>}\n </div>\n {showActions && (primary || secondary) && (\n <div className=\"flex w-full flex-col gap-4 px-8 sm:flex-row sm:*:flex-1\">\n {secondary}\n {primary}\n </div>\n )}\n </>\n );\n}\n\nfunction DefaultContent({\n children,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n secondarySlot,\n secondaryLabel,\n secondaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"children\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n | \"secondarySlot\"\n | \"secondaryLabel\"\n | \"secondaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"primary\",\n size: \"40\",\n });\n const secondary = resolveCtaSlot(secondarySlot, secondaryLabel, secondaryOnClick, {\n variant: \"tertiary\",\n size: \"40\",\n });\n\n return (\n <>\n <div className=\"typography-body-1-medium flex min-w-0 flex-1 items-center self-stretch text-body-100\">\n {children}\n </div>\n {showActions && (primary || secondary) && (\n <div className=\"flex shrink-0 items-start gap-2\">\n {primary}\n {secondary}\n </div>\n )}\n </>\n );\n}\n\n/**\n * A prominent inline message with optional title, description, action buttons,\n * and close control. Supports three layout variants: `default`, `vipEarn`, and\n * `welcome`.\n *\n * @example\n * ```tsx\n * <Snackbar\n * variant=\"default\"\n * primaryLabel=\"Undo\"\n * primaryOnClick={undo}\n * closable\n * onClose={dismiss}\n * >\n * Item deleted\n * </Snackbar>\n * ```\n */\nexport const Snackbar = React.forwardRef<HTMLDivElement, SnackbarProps>(\n (\n {\n className,\n variant = \"default\",\n icon,\n title,\n description,\n showActions = true,\n primaryLabel,\n primaryOnClick,\n primarySlot,\n secondaryLabel,\n secondaryOnClick,\n secondarySlot,\n closable = false,\n onClose,\n closeLabel,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n /* biome-ignore lint/a11y/useSemanticElements: output cannot contain div children; browsers would break the wrapper. */\n <div\n ref={ref}\n role=\"status\"\n data-testid=\"snackbar\"\n className={cn(\n \"flex gap-4 rounded-2xl\",\n (variant === \"default\" || variant === \"vipEarn\") &&\n \"border border-neutral-50 bg-background-200 p-4 backdrop-blur-md\",\n variant === \"default\" && \"flex-wrap items-start\",\n variant === \"vipEarn\" && \"items-start\",\n variant === \"welcome\" &&\n \"relative flex-col items-center bg-background-inverse-solid py-6\",\n className,\n )}\n {...props}\n >\n {variant === \"vipEarn\" && (\n <VipEarnContent\n icon={icon}\n title={title}\n description={description}\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n />\n )}\n {variant === \"welcome\" && (\n <WelcomeContent\n title={title}\n description={description}\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n secondarySlot={secondarySlot}\n secondaryLabel={secondaryLabel}\n secondaryOnClick={secondaryOnClick}\n />\n )}\n {variant === \"default\" && (\n <DefaultContent\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n secondarySlot={secondarySlot}\n secondaryLabel={secondaryLabel}\n secondaryOnClick={secondaryOnClick}\n >\n {children}\n </DefaultContent>\n )}\n {closable && (\n <CloseButton\n onClose={onClose}\n closeLabel={closeLabel}\n className={variant === \"welcome\" ? \"absolute top-2 right-2\" : undefined}\n />\n )}\n </div>\n );\n },\n);\n\nSnackbar.displayName = \"Snackbar\";\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.mjs","sources":["../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button/Button\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport { CrossIcon } from \"../Icons/CrossIcon\";\n\n/** Layout variant of the snackbar. */\nexport type SnackbarVariant = \"default\" | \"vipEarn\" | \"welcome\";\n\nexport interface SnackbarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Layout variant of the snackbar. @default \"default\" */\n variant?: SnackbarVariant;\n /** Icon element displayed at the leading edge (used by the `vipEarn` variant). */\n icon?: React.ReactNode;\n /** Title content. */\n title?: React.ReactNode;\n /** Descriptive body text. */\n description?: React.ReactNode;\n /** Whether to show primary/secondary action buttons. @default true */\n showActions?: boolean;\n /** Primary CTA label — renders a default {@link Button}. */\n primaryLabel?: string;\n /** Click handler for the primary CTA (used together with `primaryLabel`). */\n primaryOnClick?: () => void;\n /** Custom element rendered as the primary CTA. Overrides `primaryLabel` / `primaryOnClick`. */\n primarySlot?: React.ReactNode;\n /** Secondary CTA label — renders a default {@link Button}. */\n secondaryLabel?: string;\n /** Click handler for the secondary CTA (used together with `secondaryLabel`). */\n secondaryOnClick?: () => void;\n /** Custom element rendered as the secondary CTA. Overrides `secondaryLabel` / `secondaryOnClick`. */\n secondarySlot?: React.ReactNode;\n /** Whether to show the close button. @default false */\n closable?: boolean;\n /** Callback fired when the close button is clicked. */\n onClose?: () => void;\n /** Accessible label for the close button. @default \"Close snackbar\" */\n closeLabel?: string;\n}\n\nfunction CloseButton({\n onClose,\n className,\n closeLabel = \"Close snackbar\",\n}: {\n onClose?: () => void;\n className?: string;\n closeLabel?: string;\n}) {\n return (\n <IconButton\n variant=\"tertiary\"\n size=\"24\"\n onClick={onClose}\n icon={<CrossIcon />}\n className={cn(\"shrink-0\", className)}\n aria-label={closeLabel}\n />\n );\n}\n\n/**\n * Resolves a CTA slot. If a custom slot is provided it takes precedence,\n * otherwise a default Button is rendered from label + onClick.\n */\nfunction resolveCtaSlot(\n slot: React.ReactNode | undefined,\n label: string | undefined,\n onClick: (() => void) | undefined,\n buttonProps: React.ComponentProps<typeof Button>,\n): React.ReactNode | null {\n if (slot) return slot;\n if (label) {\n return (\n <Button onClick={onClick} {...buttonProps}>\n {label}\n </Button>\n );\n }\n return null;\n}\n\nfunction VipEarnContent({\n icon,\n title,\n description,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"icon\"\n | \"title\"\n | \"description\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"text\",\n size: \"24\",\n });\n\n return (\n <>\n {icon && (\n <span className=\"flex shrink-0\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n <div className=\"flex flex-col\">\n {title && (\n <p className=\"typography-semibold-body-lg text-foreground-default leading-6\">{title}</p>\n )}\n {description && (\n <p className=\"typography-regular-body-md text-foreground-secondary\">{description}</p>\n )}\n </div>\n {showActions && primary && <div className=\"self-start\">{primary}</div>}\n </div>\n </>\n );\n}\n\nfunction WelcomeContent({\n title,\n description,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n secondarySlot,\n secondaryLabel,\n secondaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"title\"\n | \"description\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n | \"secondarySlot\"\n | \"secondaryLabel\"\n | \"secondaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"primary\",\n });\n const secondary = resolveCtaSlot(secondarySlot, secondaryLabel, secondaryOnClick, {\n variant: \"secondary\",\n });\n\n return (\n <>\n <div className=\"flex flex-col items-center gap-2 px-8 text-center text-foreground-default\">\n {title && <p className=\"typography-bold-heading-xs text-foreground-default\">{title}</p>}\n {description && (\n <p className=\"typography-regular-body-md text-foreground-secondary\">{description}</p>\n )}\n </div>\n {showActions && (primary || secondary) && (\n <div className=\"flex w-full flex-col gap-4 px-8 sm:flex-row sm:*:flex-1\">\n {secondary}\n {primary}\n </div>\n )}\n </>\n );\n}\n\nfunction DefaultContent({\n children,\n showActions,\n primarySlot,\n primaryLabel,\n primaryOnClick,\n secondarySlot,\n secondaryLabel,\n secondaryOnClick,\n}: Pick<\n SnackbarProps,\n | \"children\"\n | \"showActions\"\n | \"primarySlot\"\n | \"primaryLabel\"\n | \"primaryOnClick\"\n | \"secondarySlot\"\n | \"secondaryLabel\"\n | \"secondaryOnClick\"\n>) {\n const primary = resolveCtaSlot(primarySlot, primaryLabel, primaryOnClick, {\n variant: \"primary\",\n size: \"40\",\n });\n const secondary = resolveCtaSlot(secondarySlot, secondaryLabel, secondaryOnClick, {\n variant: \"tertiary\",\n size: \"40\",\n });\n\n return (\n <>\n <div className=\"typography-regular-body-lg flex min-w-0 flex-1 items-center self-stretch text-foreground-default\">\n {children}\n </div>\n {showActions && (primary || secondary) && (\n <div className=\"flex shrink-0 items-start gap-2\">\n {primary}\n {secondary}\n </div>\n )}\n </>\n );\n}\n\n/**\n * A prominent inline message with optional title, description, action buttons,\n * and close control. Supports three layout variants: `default`, `vipEarn`, and\n * `welcome`.\n *\n * @example\n * ```tsx\n * <Snackbar\n * variant=\"default\"\n * primaryLabel=\"Undo\"\n * primaryOnClick={undo}\n * closable\n * onClose={dismiss}\n * >\n * Item deleted\n * </Snackbar>\n * ```\n */\nexport const Snackbar = React.forwardRef<HTMLDivElement, SnackbarProps>(\n (\n {\n className,\n variant = \"default\",\n icon,\n title,\n description,\n showActions = true,\n primaryLabel,\n primaryOnClick,\n primarySlot,\n secondaryLabel,\n secondaryOnClick,\n secondarySlot,\n closable = false,\n onClose,\n closeLabel,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n /* biome-ignore lint/a11y/useSemanticElements: output cannot contain div children; browsers would break the wrapper. */\n <div\n ref={ref}\n role=\"status\"\n data-testid=\"snackbar\"\n className={cn(\n \"flex gap-4 rounded-2xl\",\n (variant === \"default\" || variant === \"vipEarn\") &&\n \"border border-neutral-50 bg-surface-container p-4 backdrop-blur-md\",\n variant === \"default\" && \"flex-wrap items-start\",\n variant === \"vipEarn\" && \"items-start\",\n variant === \"welcome\" && \"relative flex-col items-center bg-surface-page py-6\",\n className,\n )}\n {...props}\n >\n {variant === \"vipEarn\" && (\n <VipEarnContent\n icon={icon}\n title={title}\n description={description}\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n />\n )}\n {variant === \"welcome\" && (\n <WelcomeContent\n title={title}\n description={description}\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n secondarySlot={secondarySlot}\n secondaryLabel={secondaryLabel}\n secondaryOnClick={secondaryOnClick}\n />\n )}\n {variant === \"default\" && (\n <DefaultContent\n showActions={showActions}\n primarySlot={primarySlot}\n primaryLabel={primaryLabel}\n primaryOnClick={primaryOnClick}\n secondarySlot={secondarySlot}\n secondaryLabel={secondaryLabel}\n secondaryOnClick={secondaryOnClick}\n >\n {children}\n </DefaultContent>\n )}\n {closable && (\n <CloseButton\n onClose={onClose}\n closeLabel={closeLabel}\n className={variant === \"welcome\" ? \"absolute top-2 right-2\" : undefined}\n />\n )}\n </div>\n );\n },\n);\n\nSnackbar.displayName = \"Snackbar\";\n"],"names":[],"mappings":";;;;;;;AAwCA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAIG;AACD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS;AAAA,MACT,0BAAO,WAAA,EAAU;AAAA,MACjB,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,cAAY;AAAA,IAAA;AAAA,EAAA;AAGlB;AAMA,SAAS,eACP,MACA,OACA,SACA,aACwB;AACxB,MAAI,KAAM,QAAO;AACjB,MAAI,OAAO;AACT,WACE,oBAAC,QAAA,EAAO,SAAmB,GAAG,aAC3B,UAAA,OACH;AAAA,EAEJ;AACA,SAAO;AACT;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASG;AACD,QAAM,UAAU,eAAe,aAAa,cAAc,gBAAgB;AAAA,IACxE,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,CACP;AAED,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,4BACE,QAAA,EAAK,WAAU,iBAAgB,eAAY,QACzC,UAAA,MACH;AAAA,IAEF,qBAAC,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,iBACZ,UAAA;AAAA,QAAA,SACC,oBAAC,KAAA,EAAE,WAAU,iEAAiE,UAAA,OAAM;AAAA,QAErF,eACC,oBAAC,KAAA,EAAE,WAAU,wDAAwD,UAAA,YAAA,CAAY;AAAA,MAAA,GAErF;AAAA,MACC,eAAe,WAAW,oBAAC,OAAA,EAAI,WAAU,cAAc,UAAA,QAAA,CAAQ;AAAA,IAAA,EAAA,CAClE;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,QAAM,UAAU,eAAe,aAAa,cAAc,gBAAgB;AAAA,IACxE,SAAS;AAAA,EAAA,CACV;AACD,QAAM,YAAY,eAAe,eAAe,gBAAgB,kBAAkB;AAAA,IAChF,SAAS;AAAA,EAAA,CACV;AAED,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,6EACZ,UAAA;AAAA,MAAA,SAAS,oBAAC,KAAA,EAAE,WAAU,sDAAsD,UAAA,OAAM;AAAA,MAClF,eACC,oBAAC,KAAA,EAAE,WAAU,wDAAwD,UAAA,YAAA,CAAY;AAAA,IAAA,GAErF;AAAA,IACC,gBAAgB,WAAW,cAC1B,qBAAC,OAAA,EAAI,WAAU,2DACZ,UAAA;AAAA,MAAA;AAAA,MACA;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAUG;AACD,QAAM,UAAU,eAAe,aAAa,cAAc,gBAAgB;AAAA,IACxE,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,CACP;AACD,QAAM,YAAY,eAAe,eAAe,gBAAgB,kBAAkB;AAAA,IAChF,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,CACP;AAED,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,oGACZ,SAAA,CACH;AAAA,IACC,gBAAgB,WAAW,cAC1B,qBAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,MAAA;AAAA,MACA;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAoBO,MAAM,WAAW,MAAM;AAAA,EAC5B,CACE;AAAA,IACE;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,QACG;AACH;AAAA;AAAA,MAEE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,eAAY;AAAA,UACZ,WAAW;AAAA,YACT;AAAA,aACC,YAAY,aAAa,YAAY,cACpC;AAAA,YACF,YAAY,aAAa;AAAA,YACzB,YAAY,aAAa;AAAA,YACzB,YAAY,aAAa;AAAA,YACzB;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,UAEH,UAAA;AAAA,YAAA,YAAY,aACX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH,YAAY,aACX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH,YAAY,aACX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBAEC;AAAA,cAAA;AAAA,YAAA;AAAA,YAGJ,YACC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,WAAW,YAAY,YAAY,2BAA2B;AAAA,cAAA;AAAA,YAAA;AAAA,UAChE;AAAA,QAAA;AAAA,MAAA;AAAA;AAAA,EAIR;AACF;AAEA,SAAS,cAAc;"}
@@ -12,7 +12,7 @@ const Switch = React.forwardRef(({ className, size = "default", ...props }, ref)
12
12
  className: cn(
13
13
  "inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors duration-150",
14
14
  "focus-visible:shadow-focus-ring focus-visible:outline-none",
15
- "data-[state=checked]:border-neutral-200 data-[state=checked]:bg-brand-green-500",
15
+ "data-[state=checked]:border-neutral-200 data-[state=checked]:bg-brand-accent-default",
16
16
  "data-[state=unchecked]:bg-neutral-400",
17
17
  "not-disabled:active:opacity-80",
18
18
  "disabled:cursor-not-allowed disabled:opacity-50",
@@ -25,7 +25,7 @@ const Switch = React.forwardRef(({ className, size = "default", ...props }, ref)
25
25
  SwitchPrimitive.Thumb,
26
26
  {
27
27
  className: cn(
28
- "pointer-events-none rounded-full bg-body-white-solid-constant shadow-sm transition-transform duration-150 dark:bg-body-black-solid-constant",
28
+ "pointer-events-none rounded-full bg-surface-page shadow-sm transition-transform duration-150",
29
29
  thumbSizeClass
30
30
  )
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.mjs","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/** Size variant of the switch toggle. */\nexport type SwitchSize = \"default\" | \"small\";\n\nexport interface SwitchProps\n extends Omit<React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, \"asChild\"> {\n /** Size variant of the switch. @default \"default\" */\n size?: SwitchSize;\n}\n\n/**\n * A toggle switch for boolean on/off states. Built on Radix UI `Switch`.\n *\n * For a labelled switch with helper text, see {@link SwitchField}.\n *\n * @example\n * ```tsx\n * <Switch checked={on} onCheckedChange={setOn} />\n * ```\n */\nexport const Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size = \"default\", ...props }, ref) => {\n const thumbSizeClass =\n size === \"default\"\n ? \"size-4.5 translate-x-0.75 data-[state=checked]:translate-x-4.75\"\n : \"size-4 translate-x-0.5 data-[state=checked]:translate-x-4.25\";\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors duration-150\",\n \"focus-visible:shadow-focus-ring focus-visible:outline-none\",\n \"data-[state=checked]:border-neutral-200 data-[state=checked]:bg-brand-green-500\",\n \"data-[state=unchecked]:bg-neutral-400\",\n \"not-disabled:active:opacity-80\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n size === \"default\" && \"h-6 w-10.5\",\n size === \"small\" && \"h-5 w-9\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none rounded-full bg-body-white-solid-constant shadow-sm transition-transform duration-150 dark:bg-body-black-solid-constant\",\n thumbSizeClass,\n )}\n />\n </SwitchPrimitive.Root>\n );\n});\n\nSwitch.displayName = \"Switch\";\n"],"names":[],"mappings":";;;;;AAuBO,MAAM,SAAS,MAAM,WAG1B,CAAC,EAAE,WAAW,OAAO,WAAW,GAAG,MAAA,GAAS,QAAQ;AACpD,QAAM,iBACJ,SAAS,YACL,oEACA;AAEN,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,SAAS,WAAW;AAAA,QACpB;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN,CAAC;AAED,OAAO,cAAc;"}
1
+ {"version":3,"file":"Switch.mjs","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/** Size variant of the switch toggle. */\nexport type SwitchSize = \"default\" | \"small\";\n\nexport interface SwitchProps\n extends Omit<React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, \"asChild\"> {\n /** Size variant of the switch. @default \"default\" */\n size?: SwitchSize;\n}\n\n/**\n * A toggle switch for boolean on/off states. Built on Radix UI `Switch`.\n *\n * For a labelled switch with helper text, see {@link SwitchField}.\n *\n * @example\n * ```tsx\n * <Switch checked={on} onCheckedChange={setOn} />\n * ```\n */\nexport const Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size = \"default\", ...props }, ref) => {\n const thumbSizeClass =\n size === \"default\"\n ? \"size-4.5 translate-x-0.75 data-[state=checked]:translate-x-4.75\"\n : \"size-4 translate-x-0.5 data-[state=checked]:translate-x-4.25\";\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors duration-150\",\n \"focus-visible:shadow-focus-ring focus-visible:outline-none\",\n \"data-[state=checked]:border-neutral-200 data-[state=checked]:bg-brand-accent-default\",\n \"data-[state=unchecked]:bg-neutral-400\",\n \"not-disabled:active:opacity-80\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n size === \"default\" && \"h-6 w-10.5\",\n size === \"small\" && \"h-5 w-9\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none rounded-full bg-surface-page shadow-sm transition-transform duration-150\",\n thumbSizeClass,\n )}\n />\n </SwitchPrimitive.Root>\n );\n});\n\nSwitch.displayName = \"Switch\";\n"],"names":[],"mappings":";;;;;AAuBO,MAAM,SAAS,MAAM,WAG1B,CAAC,EAAE,WAAW,OAAO,WAAW,GAAG,MAAA,GAAS,QAAQ;AACpD,QAAM,iBACJ,SAAS,YACL,oEACA;AAEN,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,SAAS,WAAW;AAAA,QACpB;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN,CAAC;AAED,OAAO,cAAc;"}
@@ -46,15 +46,21 @@ const SwitchField = React.forwardRef(
46
46
  {
47
47
  htmlFor: id,
48
48
  className: cn(
49
- "cursor-pointer select-none text-body-100",
50
- disabled && "cursor-not-allowed text-disabled-100",
51
- size === "default" ? "typography-body-1-semibold" : "typography-body-2-semibold"
49
+ "cursor-pointer select-none text-foreground-default",
50
+ disabled && "cursor-not-allowed text-neutral-250",
51
+ size === "default" ? "typography-semibold-body-lg" : "typography-semibold-body-md"
52
52
  ),
53
53
  children: label
54
54
  }
55
55
  ),
56
56
  infoText && /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
57
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("button", { type: "button", "aria-label": infoLabel, className: "flex shrink-0 pt-0.5", children: /* @__PURE__ */ jsx(InfoCircleIcon, { "aria-hidden": "true", className: "size-5 text-body-200" }) }) }),
57
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("button", { type: "button", "aria-label": infoLabel, className: "flex shrink-0 pt-0.5", children: /* @__PURE__ */ jsx(
58
+ InfoCircleIcon,
59
+ {
60
+ "aria-hidden": "true",
61
+ className: "size-5 text-foreground-secondary"
62
+ }
63
+ ) }) }),
58
64
  /* @__PURE__ */ jsx(TooltipContent, { side: "bottom", children: infoText })
59
65
  ] }) })
60
66
  ] }),
@@ -63,10 +69,9 @@ const SwitchField = React.forwardRef(
63
69
  {
64
70
  id: helperTextId,
65
71
  className: cn(
66
- "text-body-200",
67
- // !TODO https://linear.app/fanvue/issue/ENG-7301/swap-out-typography-tailwind-utility-classes
68
- disabled && "text-disabled-100",
69
- size === "default" ? "typography-body-2-regular" : "typography-caption-regular"
72
+ "text-foreground-secondary",
73
+ disabled && "text-neutral-250",
74
+ size === "default" ? "typography-regular-body-md" : "typography-regular-body-sm"
70
75
  ),
71
76
  children: helperText
72
77
  }