@rojaostudio/ds 1.0.1 → 2.0.0-next.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 (403) hide show
  1. package/README.md +75 -13
  2. package/dist/compat/generate.d.ts +0 -1
  3. package/dist/components/accordion.d.ts +30 -20
  4. package/dist/components/accordion.js +31 -87
  5. package/dist/components/action-bar.d.ts +24 -0
  6. package/dist/components/action-bar.js +55 -0
  7. package/dist/components/alert-dialog.d.ts +31 -0
  8. package/dist/components/alert-dialog.js +43 -0
  9. package/dist/components/alert.d.ts +31 -19
  10. package/dist/components/alert.js +74 -65
  11. package/dist/components/attachment.d.ts +37 -0
  12. package/dist/components/attachment.js +76 -0
  13. package/dist/components/avatar.d.ts +43 -36
  14. package/dist/components/avatar.js +59 -83
  15. package/dist/components/badge.d.ts +30 -41
  16. package/dist/components/badge.js +16 -106
  17. package/dist/components/banner.d.ts +27 -0
  18. package/dist/components/banner.js +66 -0
  19. package/dist/components/benefits.d.ts +30 -0
  20. package/dist/components/benefits.js +32 -0
  21. package/dist/components/breadcrumb.d.ts +25 -18
  22. package/dist/components/breadcrumb.js +40 -48
  23. package/dist/components/browser.d.ts +18 -0
  24. package/dist/components/browser.js +32 -0
  25. package/dist/components/bubble.d.ts +29 -0
  26. package/dist/components/bubble.js +33 -0
  27. package/dist/components/button-group.d.ts +19 -0
  28. package/dist/components/button-group.js +20 -0
  29. package/dist/components/button.d.ts +47 -20
  30. package/dist/components/button.js +51 -107
  31. package/dist/components/calendar.d.ts +29 -0
  32. package/dist/components/calendar.js +149 -0
  33. package/dist/components/card.d.ts +47 -19
  34. package/dist/components/card.js +38 -38
  35. package/dist/components/carousel.d.ts +28 -0
  36. package/dist/components/carousel.js +130 -0
  37. package/dist/components/chart.d.ts +49 -0
  38. package/dist/components/chart.js +258 -0
  39. package/dist/components/checkbox-group.d.ts +16 -0
  40. package/dist/components/checkbox-group.js +13 -0
  41. package/dist/components/checkbox.d.ts +25 -10
  42. package/dist/components/checkbox.js +86 -67
  43. package/dist/components/chip-input.d.ts +46 -20
  44. package/dist/components/chip-input.js +171 -158
  45. package/dist/components/chip.d.ts +28 -0
  46. package/dist/components/chip.js +73 -0
  47. package/dist/components/choice-card.d.ts +10 -13
  48. package/dist/components/choice-card.js +11 -56
  49. package/dist/components/choice-carousel.d.ts +9 -0
  50. package/dist/components/choice-carousel.js +67 -78
  51. package/dist/components/choice-preview-card.d.ts +10 -20
  52. package/dist/components/choice-preview-card.js +13 -30
  53. package/dist/components/color-input.d.ts +36 -11
  54. package/dist/components/color-input.js +139 -61
  55. package/dist/components/combobox.d.ts +60 -57
  56. package/dist/components/combobox.js +215 -196
  57. package/dist/components/command.d.ts +58 -0
  58. package/dist/components/command.js +177 -0
  59. package/dist/components/contact.d.ts +23 -0
  60. package/dist/components/contact.js +32 -0
  61. package/dist/components/context-menu.d.ts +34 -26
  62. package/dist/components/context-menu.js +43 -66
  63. package/dist/components/copy-field.d.ts +10 -5
  64. package/dist/components/copy-field.js +25 -27
  65. package/dist/components/currency-input.d.ts +25 -11
  66. package/dist/components/currency-input.js +39 -67
  67. package/dist/components/danger-zone.d.ts +10 -1
  68. package/dist/components/danger-zone.js +20 -14
  69. package/dist/components/data-table-header.d.ts +13 -2
  70. package/dist/components/data-table-header.js +143 -169
  71. package/dist/components/date-picker.d.ts +31 -32
  72. package/dist/components/date-picker.js +126 -242
  73. package/dist/components/delta.d.ts +26 -0
  74. package/dist/components/delta.js +24 -0
  75. package/dist/components/dialog.d.ts +21 -0
  76. package/dist/components/dialog.js +16 -0
  77. package/dist/components/drawer.d.ts +15 -23
  78. package/dist/components/drawer.js +56 -76
  79. package/dist/components/dropdown-menu.d.ts +63 -0
  80. package/dist/components/dropdown-menu.js +62 -0
  81. package/dist/components/dropzone.d.ts +10 -4
  82. package/dist/components/dropzone.js +30 -55
  83. package/dist/components/empty.d.ts +29 -0
  84. package/dist/components/empty.js +42 -0
  85. package/dist/components/fab.d.ts +29 -6
  86. package/dist/components/fab.js +51 -39
  87. package/dist/components/faq.d.ts +21 -0
  88. package/dist/components/faq.js +24 -0
  89. package/dist/components/file-input.d.ts +56 -0
  90. package/dist/components/file-input.js +244 -0
  91. package/dist/components/filter-chip.d.ts +34 -47
  92. package/dist/components/filter-chip.js +61 -57
  93. package/dist/components/floating-stepper.d.ts +7 -18
  94. package/dist/components/floating-stepper.js +17 -35
  95. package/dist/components/footer.d.ts +36 -0
  96. package/dist/components/footer.js +38 -0
  97. package/dist/components/form-actions.d.ts +28 -0
  98. package/dist/components/form-actions.js +24 -0
  99. package/dist/components/google-account-chooser.d.ts +25 -0
  100. package/dist/components/google-account-chooser.js +44 -0
  101. package/dist/components/google-button.d.ts +26 -0
  102. package/dist/components/google-button.js +38 -0
  103. package/dist/components/google-consent.d.ts +23 -0
  104. package/dist/components/google-consent.js +28 -0
  105. package/dist/components/google-sign-in.d.ts +26 -0
  106. package/dist/components/google-sign-in.js +36 -0
  107. package/dist/components/hover-card.d.ts +30 -0
  108. package/dist/components/hover-card.js +55 -0
  109. package/dist/components/icon-button.d.ts +41 -11
  110. package/dist/components/icon-button.js +47 -61
  111. package/dist/components/image-crop-modal.d.ts +3 -3
  112. package/dist/components/image-crop-modal.js +66 -52
  113. package/dist/components/image-upload.d.ts +21 -29
  114. package/dist/components/image-upload.js +59 -219
  115. package/dist/components/index.d.ts +105 -49
  116. package/dist/components/index.js +190 -68
  117. package/dist/components/input-otp.d.ts +35 -0
  118. package/dist/components/input-otp.js +119 -0
  119. package/dist/components/input.d.ts +23 -17
  120. package/dist/components/input.js +103 -108
  121. package/dist/components/insight-card.d.ts +25 -9
  122. package/dist/components/insight-card.js +45 -19
  123. package/dist/components/internal/announce.d.ts +3 -0
  124. package/dist/components/internal/announce.js +20 -0
  125. package/dist/components/internal/block.d.ts +15 -0
  126. package/dist/components/internal/block.js +14 -0
  127. package/dist/components/internal/button.d.ts +23 -0
  128. package/dist/components/internal/button.js +30 -0
  129. package/dist/components/internal/choice-card.d.ts +52 -0
  130. package/dist/components/internal/choice-card.js +117 -0
  131. package/dist/components/internal/choice.d.ts +25 -0
  132. package/dist/components/internal/choice.js +44 -0
  133. package/dist/components/internal/dates.d.ts +17 -0
  134. package/dist/components/internal/dates.js +59 -0
  135. package/dist/components/internal/field.d.ts +66 -0
  136. package/dist/components/internal/field.js +105 -0
  137. package/dist/components/internal/fieldset.d.ts +25 -0
  138. package/dist/components/internal/fieldset.js +56 -0
  139. package/dist/components/internal/focus-after.d.ts +3 -0
  140. package/dist/components/internal/focus-after.js +13 -0
  141. package/dist/components/internal/google.d.ts +47 -0
  142. package/dist/components/internal/google.js +73 -0
  143. package/dist/components/internal/icons.d.ts +108 -0
  144. package/dist/components/internal/icons.js +316 -0
  145. package/dist/components/internal/menu.d.ts +16 -0
  146. package/dist/components/internal/menu.js +14 -0
  147. package/dist/components/internal/modal.d.ts +50 -0
  148. package/dist/components/internal/modal.js +85 -0
  149. package/dist/components/internal/option-content.d.ts +10 -0
  150. package/dist/components/internal/option-content.js +13 -0
  151. package/dist/components/internal/radio-context.d.ts +16 -0
  152. package/dist/components/internal/radio-context.js +6 -0
  153. package/dist/components/internal/toggle.d.ts +7 -0
  154. package/dist/components/internal/toggle.js +13 -0
  155. package/dist/components/internal/use-listbox.d.ts +56 -0
  156. package/dist/components/internal/use-listbox.js +69 -0
  157. package/dist/components/internal/whatsapp.d.ts +8 -0
  158. package/dist/components/internal/whatsapp.js +12 -0
  159. package/dist/components/item.d.ts +32 -0
  160. package/dist/components/item.js +35 -0
  161. package/dist/components/kbd.d.ts +17 -0
  162. package/dist/components/kbd.js +18 -0
  163. package/dist/components/listbox.d.ts +34 -0
  164. package/dist/components/listbox.js +114 -0
  165. package/dist/components/marker.d.ts +24 -0
  166. package/dist/components/marker.js +28 -0
  167. package/dist/components/media-tile.d.ts +17 -14
  168. package/dist/components/media-tile.js +19 -24
  169. package/dist/components/message-scroller.d.ts +20 -0
  170. package/dist/components/message-scroller.js +108 -0
  171. package/dist/components/message.d.ts +33 -0
  172. package/dist/components/message.js +23 -0
  173. package/dist/components/navigation-menu.d.ts +42 -0
  174. package/dist/components/navigation-menu.js +30 -0
  175. package/dist/components/newsletter.d.ts +27 -0
  176. package/dist/components/newsletter.js +75 -0
  177. package/dist/components/number-input.d.ts +60 -0
  178. package/dist/components/number-input.js +234 -0
  179. package/dist/components/option-tile.d.ts +20 -19
  180. package/dist/components/option-tile.js +52 -131
  181. package/dist/components/page-header.d.ts +31 -0
  182. package/dist/components/page-header.js +25 -0
  183. package/dist/components/page-shell.d.ts +11 -1
  184. package/dist/components/page-shell.js +8 -27
  185. package/dist/components/page-skeleton.d.ts +15 -21
  186. package/dist/components/page-skeleton.js +37 -4
  187. package/dist/components/pagination.d.ts +32 -22
  188. package/dist/components/pagination.js +83 -76
  189. package/dist/components/password-input.d.ts +26 -0
  190. package/dist/components/password-input.js +112 -0
  191. package/dist/components/phone-input.d.ts +12 -8
  192. package/dist/components/phone-input.js +77 -47
  193. package/dist/components/phone.d.ts +27 -0
  194. package/dist/components/phone.js +35 -0
  195. package/dist/components/popover.d.ts +25 -36
  196. package/dist/components/popover.js +32 -129
  197. package/dist/components/pricing-card.d.ts +9 -25
  198. package/dist/components/pricing-card.js +9 -25
  199. package/dist/components/pricing.d.ts +48 -0
  200. package/dist/components/pricing.js +64 -0
  201. package/dist/components/progress.d.ts +30 -0
  202. package/dist/components/progress.js +57 -0
  203. package/dist/components/qr-display.d.ts +11 -6
  204. package/dist/components/qr-display.js +8 -19
  205. package/dist/components/questionnaire.d.ts +42 -0
  206. package/dist/components/questionnaire.js +107 -0
  207. package/dist/components/radio-group.d.ts +21 -0
  208. package/dist/components/radio-group.js +40 -0
  209. package/dist/components/radio.d.ts +15 -29
  210. package/dist/components/radio.js +46 -87
  211. package/dist/components/row-actions.d.ts +5 -0
  212. package/dist/components/row-actions.js +57 -56
  213. package/dist/components/saving-bar-context.d.ts +0 -5
  214. package/dist/components/saving-bar-context.js +16 -34
  215. package/dist/components/saving-bar.d.ts +26 -11
  216. package/dist/components/saving-bar.js +53 -65
  217. package/dist/components/section-card.d.ts +18 -4
  218. package/dist/components/section-card.js +26 -39
  219. package/dist/components/section-header.d.ts +8 -12
  220. package/dist/components/section-header.js +7 -2
  221. package/dist/components/select.d.ts +44 -16
  222. package/dist/components/select.js +85 -135
  223. package/dist/components/selectable-card.d.ts +11 -19
  224. package/dist/components/selectable-card.js +4 -21
  225. package/dist/components/separator.d.ts +20 -0
  226. package/dist/components/separator.js +19 -0
  227. package/dist/components/setting-row.d.ts +11 -15
  228. package/dist/components/setting-row.js +11 -14
  229. package/dist/components/settings-list.d.ts +10 -12
  230. package/dist/components/settings-list.js +9 -17
  231. package/dist/components/sheet.d.ts +21 -0
  232. package/dist/components/sheet.js +16 -0
  233. package/dist/components/sidebar.d.ts +79 -0
  234. package/dist/components/sidebar.js +111 -0
  235. package/dist/components/skeleton.d.ts +14 -20
  236. package/dist/components/skeleton.js +8 -36
  237. package/dist/components/slider.d.ts +21 -23
  238. package/dist/components/slider.js +65 -56
  239. package/dist/components/sparkline.d.ts +19 -0
  240. package/dist/components/sparkline.js +32 -0
  241. package/dist/components/spinner.d.ts +16 -8
  242. package/dist/components/spinner.js +35 -32
  243. package/dist/components/star-rating.d.ts +22 -0
  244. package/dist/components/star-rating.js +25 -0
  245. package/dist/components/stat.d.ts +33 -0
  246. package/dist/components/stat.js +29 -0
  247. package/dist/components/status.d.ts +27 -0
  248. package/dist/components/status.js +34 -0
  249. package/dist/components/step-progress.d.ts +13 -6
  250. package/dist/components/step-progress.js +20 -17
  251. package/dist/components/summary-bar.d.ts +20 -20
  252. package/dist/components/summary-bar.js +13 -50
  253. package/dist/components/switch.d.ts +20 -0
  254. package/dist/components/switch.js +46 -0
  255. package/dist/components/table.d.ts +56 -17
  256. package/dist/components/table.js +65 -59
  257. package/dist/components/tabs.d.ts +67 -0
  258. package/dist/components/tabs.js +56 -0
  259. package/dist/components/testimonial.d.ts +30 -0
  260. package/dist/components/testimonial.js +36 -0
  261. package/dist/components/textarea.d.ts +11 -16
  262. package/dist/components/textarea.js +55 -75
  263. package/dist/components/tile.d.ts +24 -0
  264. package/dist/components/tile.js +21 -0
  265. package/dist/components/time-picker.d.ts +40 -25
  266. package/dist/components/time-picker.js +191 -189
  267. package/dist/components/toast.d.ts +63 -0
  268. package/dist/components/toast.js +132 -0
  269. package/dist/components/toggle-card-compact.d.ts +15 -5
  270. package/dist/components/toggle-card-compact.js +22 -81
  271. package/dist/components/toggle-card.d.ts +11 -2
  272. package/dist/components/toggle-card.js +9 -70
  273. package/dist/components/toggle-group.d.ts +21 -59
  274. package/dist/components/toggle-group.js +31 -74
  275. package/dist/components/toggle.d.ts +19 -9
  276. package/dist/components/toggle.js +20 -55
  277. package/dist/components/tooltip.d.ts +25 -12
  278. package/dist/components/tooltip.js +16 -84
  279. package/dist/components/top-navigation.d.ts +33 -0
  280. package/dist/components/top-navigation.js +85 -0
  281. package/dist/components/typing-indicator.d.ts +6 -0
  282. package/dist/components/typing-indicator.js +3 -21
  283. package/dist/components/whatsapp-chat.d.ts +28 -0
  284. package/dist/components/whatsapp-chat.js +95 -0
  285. package/dist/components/whatsapp-message.d.ts +22 -0
  286. package/dist/components/whatsapp-message.js +34 -0
  287. package/dist/components/whatsapp-notification.d.ts +27 -0
  288. package/dist/components/whatsapp-notification.js +73 -0
  289. package/dist/components/whatsapp-template.d.ts +42 -0
  290. package/dist/components/whatsapp-template.js +69 -0
  291. package/dist/icons/index.d.ts +2 -0
  292. package/dist/icons/index.js +2 -0
  293. package/dist/icons/pix.d.ts +16 -0
  294. package/dist/icons/pix.js +29 -0
  295. package/dist/targets/native/components/accordion.js +31 -25
  296. package/dist/targets/native/components/alert.js +22 -16
  297. package/dist/targets/native/components/avatar.js +36 -29
  298. package/dist/targets/native/components/badge.js +4 -3
  299. package/dist/targets/native/components/button.js +11 -4
  300. package/dist/targets/native/components/card.js +2 -1
  301. package/dist/targets/native/components/checkbox.js +18 -15
  302. package/dist/targets/native/components/chips.js +19 -16
  303. package/dist/targets/native/components/choice-card.js +29 -23
  304. package/dist/targets/native/components/context-menu.js +13 -9
  305. package/dist/targets/native/components/currency-input.js +28 -25
  306. package/dist/targets/native/components/danger-zone.js +10 -4
  307. package/dist/targets/native/components/date-picker.js +86 -70
  308. package/dist/targets/native/components/divider.js +3 -2
  309. package/dist/targets/native/components/empty-state.js +6 -1
  310. package/dist/targets/native/components/fab.js +32 -26
  311. package/dist/targets/native/components/filter-chip.js +9 -8
  312. package/dist/targets/native/components/form-field.js +20 -10
  313. package/dist/targets/native/components/form-screen.js +50 -45
  314. package/dist/targets/native/components/google-icon.js +31 -25
  315. package/dist/targets/native/components/icon-button.js +6 -4
  316. package/dist/targets/native/components/icon.js +2 -1
  317. package/dist/targets/native/components/image-upload.js +59 -50
  318. package/dist/targets/native/components/index.d.ts +0 -2
  319. package/dist/targets/native/components/index.js +0 -4
  320. package/dist/targets/native/components/input.js +41 -34
  321. package/dist/targets/native/components/list-item.js +29 -23
  322. package/dist/targets/native/components/menu.js +12 -10
  323. package/dist/targets/native/components/modal.js +41 -32
  324. package/dist/targets/native/components/radio.js +19 -16
  325. package/dist/targets/native/components/search.js +41 -38
  326. package/dist/targets/native/components/select.js +71 -63
  327. package/dist/targets/native/components/sheet.js +36 -30
  328. package/dist/targets/native/components/skeleton.js +6 -5
  329. package/dist/targets/native/components/slider.js +51 -43
  330. package/dist/targets/native/components/spinner.js +2 -1
  331. package/dist/targets/native/components/stepper.js +14 -9
  332. package/dist/targets/native/components/switch.js +15 -14
  333. package/dist/targets/native/components/text.js +2 -1
  334. package/dist/targets/native/components/textarea.js +2 -1
  335. package/dist/targets/native/components/theme.js +2 -1
  336. package/dist/targets/native/components/toaster.js +24 -21
  337. package/dist/targets/native/index.d.ts +1 -1
  338. package/dist/targets/native/index.js +1 -3
  339. package/dist/targets/native/preset.cjs +0 -1
  340. package/dist/targets/native/theme.css +58 -60
  341. package/dist/targets/native/theme.d.ts +58 -60
  342. package/dist/targets/native/theme.js +58 -60
  343. package/package.json +35 -16
  344. package/styles/_primitives.generated.css +40 -0
  345. package/styles/base.css +15 -21
  346. package/styles/rds/components-styles.css +11365 -0
  347. package/styles/rds/components.css +993 -0
  348. package/styles/rds/foundation.css +74 -0
  349. package/styles/rds/theme.css +261 -0
  350. package/styles/rds.css +6 -0
  351. package/styles/themes/rojao.css +46 -53
  352. package/brand/rojao-black-on-white.png +0 -0
  353. package/brand/rojao-black.png +0 -0
  354. package/brand/rojao-white-on-black.png +0 -0
  355. package/brand/rojao-white.png +0 -0
  356. package/dist/components/blocker-card.d.ts +0 -42
  357. package/dist/components/blocker-card.js +0 -45
  358. package/dist/components/bottom-sheet.d.ts +0 -31
  359. package/dist/components/bottom-sheet.js +0 -120
  360. package/dist/components/chat-bubble.d.ts +0 -16
  361. package/dist/components/chat-bubble.js +0 -55
  362. package/dist/components/chips.d.ts +0 -22
  363. package/dist/components/chips.js +0 -94
  364. package/dist/components/copilot-hint.d.ts +0 -18
  365. package/dist/components/copilot-hint.js +0 -63
  366. package/dist/components/divider.d.ts +0 -20
  367. package/dist/components/divider.js +0 -47
  368. package/dist/components/empty-state.d.ts +0 -48
  369. package/dist/components/empty-state.js +0 -91
  370. package/dist/components/form-card-header.d.ts +0 -13
  371. package/dist/components/form-card-header.js +0 -8
  372. package/dist/components/label.d.ts +0 -16
  373. package/dist/components/label.js +0 -43
  374. package/dist/components/menu.d.ts +0 -50
  375. package/dist/components/menu.js +0 -80
  376. package/dist/components/modal.d.ts +0 -25
  377. package/dist/components/modal.js +0 -71
  378. package/dist/components/notice.d.ts +0 -50
  379. package/dist/components/notice.js +0 -103
  380. package/dist/components/page-tabs.d.ts +0 -35
  381. package/dist/components/page-tabs.js +0 -55
  382. package/dist/components/paywall-banner.d.ts +0 -37
  383. package/dist/components/paywall-banner.js +0 -42
  384. package/dist/components/paywall.d.ts +0 -44
  385. package/dist/components/paywall.js +0 -55
  386. package/dist/components/phone-frame.d.ts +0 -9
  387. package/dist/components/phone-frame.js +0 -18
  388. package/dist/components/pix-icon.d.ts +0 -8
  389. package/dist/components/pix-icon.js +0 -24
  390. package/dist/components/search.d.ts +0 -30
  391. package/dist/components/search.js +0 -81
  392. package/dist/components/themed.d.ts +0 -36
  393. package/dist/components/themed.js +0 -22
  394. package/dist/components/toaster.d.ts +0 -84
  395. package/dist/components/toaster.js +0 -284
  396. package/dist/components/use-dismiss.d.ts +0 -9
  397. package/dist/components/use-dismiss.js +0 -28
  398. package/dist/components/use-focus-trap.d.ts +0 -5
  399. package/dist/components/use-focus-trap.js +0 -54
  400. package/dist/targets/native/components/paywall-banner.d.ts +0 -11
  401. package/dist/targets/native/components/paywall-banner.js +0 -46
  402. package/dist/targets/native/components/paywall.d.ts +0 -18
  403. package/dist/targets/native/components/paywall.js +0 -61
@@ -1,79 +1,65 @@
1
+ "use client";
1
2
  import {
2
3
  __objRest,
4
+ __spreadProps,
3
5
  __spreadValues
4
6
  } from "../chunk-ORMEWXMH.js";
5
- import { forwardRef } from "react";
6
- const SIZE_CLASSES = {
7
- sm: "size-control-sm [&_svg]:size-4",
8
- md: "size-control-md [&_svg]:size-5",
9
- lg: "size-control-lg [&_svg]:size-6"
10
- };
11
- const COLOR_CLASSES = {
12
- filled: {
13
- primary: "bg-brand-primary text-brand-on-primary hover:bg-brand-hover",
14
- secondary: "bg-surface-raised text-fg-primary hover:opacity-90",
15
- danger: "bg-danger text-fg-inverse hover:bg-danger-text",
16
- neutral: "bg-surface-raised text-fg-primary hover:bg-stroke-default"
17
- },
18
- outline: {
19
- primary: "border border-brand-primary text-brand-primary hover:bg-surface-raised",
20
- secondary: "border border-stroke-default text-fg-secondary hover:bg-surface-raised",
21
- danger: "border border-danger text-danger-text hover:bg-danger-soft",
22
- neutral: "border border-stroke-default text-fg-secondary hover:bg-surface-raised"
23
- },
24
- ghost: {
25
- primary: "text-brand-primary hover:bg-surface-raised",
26
- secondary: "text-fg-secondary hover:bg-surface-raised",
27
- danger: "text-danger-text hover:bg-danger-soft",
28
- neutral: "text-fg-muted hover:bg-surface-raised hover:text-fg-primary"
29
- }
30
- };
31
- const IconButton = forwardRef(function IconButton2(_a, ref) {
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Slot, Slottable } from "@radix-ui/react-slot";
9
+ import {
10
+ blockWhenDisabled,
11
+ buttonClassName,
12
+ Loader,
13
+ useLoadingAnnouncement
14
+ } from "./internal/button.js";
15
+ function IconButton(_a) {
32
16
  var _b = _a, {
33
17
  icon,
34
- variant = "ghost",
35
- color = "neutral",
18
+ label,
19
+ tone = "action",
20
+ variant = "fill",
36
21
  size = "md",
37
- loading = false,
38
22
  disabled,
39
- className = ""
23
+ loading,
24
+ loadingLabel = "Carregando\u2026",
25
+ asChild,
26
+ type = "button",
27
+ className,
28
+ onClick,
29
+ children
40
30
  } = _b, rest = __objRest(_b, [
41
31
  "icon",
32
+ "label",
33
+ "tone",
42
34
  "variant",
43
- "color",
44
35
  "size",
45
- "loading",
46
36
  "disabled",
47
- "className"
37
+ "loading",
38
+ "loadingLabel",
39
+ "asChild",
40
+ "type",
41
+ "className",
42
+ "onClick",
43
+ "children"
48
44
  ]);
49
- return /* @__PURE__ */ React.createElement(
50
- "button",
51
- __spreadValues({
52
- ref,
53
- type: "button",
54
- disabled: disabled || loading,
55
- className: [
56
- "inline-flex items-center justify-center rounded-(--radius-control) transition-colors",
57
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-stroke-focus",
58
- "disabled:cursor-not-allowed disabled:opacity-50",
59
- SIZE_CLASSES[size],
60
- COLOR_CLASSES[variant][color],
61
- className
62
- ].join(" ")
63
- }, rest),
64
- loading ? /* @__PURE__ */ React.createElement(Spinner, null) : icon
45
+ const Root = asChild ? Slot : "button";
46
+ const iconNode = /* @__PURE__ */ jsx("span", { className: loading ? "rds-button__icon rds-button__loader" : "rds-button__icon", "aria-hidden": "true", children: loading ? /* @__PURE__ */ jsx(Loader, {}) : icon });
47
+ useLoadingAnnouncement(loading, loadingLabel);
48
+ return /* @__PURE__ */ jsxs(
49
+ Root,
50
+ __spreadProps(__spreadValues({}, rest), {
51
+ type: asChild ? void 0 : type,
52
+ "aria-label": label,
53
+ className: buttonClassName(tone, variant, size, ["rds-button--icon-only", className].filter(Boolean).join(" ")),
54
+ "aria-disabled": disabled || void 0,
55
+ "aria-busy": loading || void 0,
56
+ onClick: blockWhenDisabled(disabled || loading, onClick),
57
+ children: [
58
+ asChild ? /* @__PURE__ */ jsx(Slottable, { children }) : iconNode,
59
+ asChild && iconNode
60
+ ]
61
+ })
65
62
  );
66
- });
67
- function Spinner() {
68
- return /* @__PURE__ */ React.createElement("svg", { className: "animate-spin", viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2.5", opacity: "0.25" }), /* @__PURE__ */ React.createElement(
69
- "path",
70
- {
71
- d: "M22 12a10 10 0 0 1-10 10",
72
- stroke: "currentColor",
73
- strokeWidth: "2.5",
74
- strokeLinecap: "round"
75
- }
76
- ));
77
63
  }
78
64
  export {
79
65
  IconButton
@@ -1,9 +1,9 @@
1
1
  import * as react from 'react';
2
2
 
3
3
  /**
4
- * ImageCropModal — modal de crop de imagem com presets de aspect ratio.
5
- *
6
- * Requer `react-image-crop` instalado no consumer (peerDep).
4
+ * ImageCropModal — a composition of the Dialog, a ToggleGroup (the aspect presets), the Alert (an aspect out of
5
+ * bounds) and the Spinner: crops an image before upload. Needs `react-image-crop` (an optional peer, needed only
6
+ * here). Styles: image-crop-modal.css.
7
7
  *
8
8
  * Uso:
9
9
  * <ImageCropModal
@@ -1,25 +1,28 @@
1
1
  "use client";
2
2
  import "../chunk-ORMEWXMH.js";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
4
  import { useEffect, useRef, useState } from "react";
4
5
  import ReactCrop, { centerCrop } from "react-image-crop";
5
6
  import "react-image-crop/dist/ReactCrop.css";
6
- import { Modal } from "./modal.js";
7
- import { Spinner } from "./spinner.js";
7
+ import { Alert } from "./alert.js";
8
8
  import { Button } from "./button.js";
9
+ import { Dialog } from "./dialog.js";
10
+ import { Spinner } from "./spinner.js";
11
+ import { ToggleGroup, ToggleGroupItem } from "./toggle-group.js";
9
12
  function RatioIcon({ w, h }) {
10
13
  const box = 16;
11
14
  const rw = w >= h ? box : w / h * box;
12
15
  const rh = h >= w ? box : h / w * box;
13
- return /* @__PURE__ */ React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, className: "shrink-0" }, /* @__PURE__ */ React.createElement("rect", { x: (18 - rw) / 2, y: (18 - rh) / 2, width: rw, height: rh, rx: "1.5", stroke: "currentColor", strokeWidth: "1.6" }));
16
+ return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx("rect", { x: (18 - rw) / 2, y: (18 - rh) / 2, width: rw, height: rh, rx: "1.5", stroke: "currentColor", strokeWidth: "1.6" }) });
14
17
  }
15
18
  function FreeIcon() {
16
- return /* @__PURE__ */ React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, className: "shrink-0" }, /* @__PURE__ */ React.createElement("rect", { x: "2.5", y: "2.5", width: "13", height: "13", rx: "1.5", stroke: "currentColor", strokeWidth: "1.6", strokeDasharray: "2.5 2.2" }));
19
+ return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx("rect", { x: "2.5", y: "2.5", width: "13", height: "13", rx: "1.5", stroke: "currentColor", strokeWidth: "1.6", strokeDasharray: "2.5 2.2" }) });
17
20
  }
18
21
  const DEFAULT_PRESETS = [
19
- { id: "square", label: "1:1", aspect: 1, icon: /* @__PURE__ */ React.createElement(RatioIcon, { w: 1, h: 1 }) },
20
- { id: "portrait", label: "4:5", aspect: 4 / 5, icon: /* @__PURE__ */ React.createElement(RatioIcon, { w: 4, h: 5 }) },
21
- { id: "landscape", label: "16:9", aspect: 16 / 9, icon: /* @__PURE__ */ React.createElement(RatioIcon, { w: 16, h: 9 }) },
22
- { id: "free", label: "Livre", icon: /* @__PURE__ */ React.createElement(FreeIcon, null) }
22
+ { id: "square", label: "1:1", aspect: 1, icon: /* @__PURE__ */ jsx(RatioIcon, { w: 1, h: 1 }) },
23
+ { id: "portrait", label: "4:5", aspect: 4 / 5, icon: /* @__PURE__ */ jsx(RatioIcon, { w: 4, h: 5 }) },
24
+ { id: "landscape", label: "16:9", aspect: 16 / 9, icon: /* @__PURE__ */ jsx(RatioIcon, { w: 16, h: 9 }) },
25
+ { id: "free", label: "Livre", icon: /* @__PURE__ */ jsx(FreeIcon, {}) }
23
26
  ];
24
27
  const DEFAULT_MIN_ASPECT = 0.5;
25
28
  const DEFAULT_MAX_ASPECT = 2;
@@ -185,54 +188,65 @@ function ImageCropModal({
185
188
  setBusy(false);
186
189
  }
187
190
  }
188
- return /* @__PURE__ */ React.createElement(
189
- Modal,
191
+ return /* @__PURE__ */ jsx(
192
+ Dialog,
190
193
  {
191
194
  open,
192
- onClose: onCancel,
195
+ onOpenChange: (next) => {
196
+ if (!next) onCancel();
197
+ },
193
198
  size: "lg",
194
199
  title: position ? `${title} \xB7 ${position}` : title,
195
- footer: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Button, { variant: "ghost", onClick: onCancel }, "Cancelar"), /* @__PURE__ */ React.createElement(Button, { onClick: handleConfirm, disabled: busy || !completedCrop || !!aspectError, loading: busy }, busy ? "Aplicando\u2026" : confirmLabel))
196
- },
197
- /* @__PURE__ */ React.createElement("div", { className: "space-y-3" }, presets.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-1 rounded-(--radius-control) bg-surface-raised p-1" }, presets.map((p) => /* @__PURE__ */ React.createElement(
198
- "button",
199
- {
200
- key: p.id,
201
- type: "button",
202
- onClick: () => applyPreset(p),
203
- className: [
204
- "flex flex-1 min-w-[80px] items-center justify-center gap-1.5 rounded-(--radius-control) px-3 py-1.5 text-caption font-medium transition-colors",
205
- preset.id === p.id ? "bg-surface-default text-fg-primary shadow-sm" : "text-fg-muted hover:text-fg-primary"
206
- ].join(" ")
207
- },
208
- p.icon,
209
- p.label
210
- ))), /* @__PURE__ */ React.createElement("div", { className: "relative rounded-(--radius-control) bg-surface-overlay overflow-hidden flex items-center justify-center min-h-[300px] max-h-[60vh] p-4" }, src && /* @__PURE__ */ React.createElement(
211
- ReactCrop,
212
- {
213
- crop,
214
- onChange: (_, percentCrop) => setCrop(percentCrop),
215
- onComplete: (c) => {
216
- setCompletedCrop(c);
217
- validateFreeAspect(c);
218
- },
219
- aspect: preset.aspect,
220
- keepSelection: true,
221
- minWidth: 50,
222
- minHeight: 50,
223
- className: "max-h-[60vh] max-w-full"
224
- },
225
- /* @__PURE__ */ React.createElement(
226
- "img",
227
- {
228
- ref: imgRef,
229
- src,
230
- alt: "",
231
- onLoad: handleImageLoad,
232
- className: "max-h-full max-w-full"
233
- }
234
- )
235
- ), !imgLoaded && /* @__PURE__ */ React.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none" }, /* @__PURE__ */ React.createElement(Spinner, { size: "lg", color: "inverse" })), busy && /* @__PURE__ */ React.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/40" }, /* @__PURE__ */ React.createElement(Spinner, { size: "lg", color: "inverse" }))), aspectError && /* @__PURE__ */ React.createElement("p", { className: "rounded-(--radius-control) bg-danger-soft px-3 py-2 text-caption text-danger-text" }, aspectError), !aspectError && preset.id === "free" && /* @__PURE__ */ React.createElement("p", { className: "text-caption text-fg-muted" }, "Livre: propor\xE7\xE3o entre ", minAspect.toFixed(1), " (vertical) e ", maxAspect.toFixed(1), " (horizontal)."))
200
+ footer: /* @__PURE__ */ jsxs(Fragment, { children: [
201
+ /* @__PURE__ */ jsx(Button, { tone: "neutral", variant: "ghost", onClick: onCancel, children: "Cancelar" }),
202
+ /* @__PURE__ */ jsx(Button, { onClick: handleConfirm, disabled: busy || !completedCrop || !!aspectError, loading: busy, children: busy ? "Aplicando\u2026" : confirmLabel })
203
+ ] }),
204
+ children: /* @__PURE__ */ jsxs("div", { className: "rds-image-crop", children: [
205
+ presets.length > 1 && /* @__PURE__ */ jsx(
206
+ ToggleGroup,
207
+ {
208
+ type: "single",
209
+ "aria-label": "Propor\xE7\xE3o",
210
+ value: preset.id,
211
+ onValueChange: (id) => {
212
+ const next = presets.find((p) => p.id === id);
213
+ if (next) applyPreset(next);
214
+ },
215
+ className: "rds-image-crop__presets",
216
+ children: presets.map((p) => /* @__PURE__ */ jsx(ToggleGroupItem, { value: p.id, icon: p.icon, children: p.label }, p.id))
217
+ }
218
+ ),
219
+ /* @__PURE__ */ jsxs("div", { className: "rds-image-crop__stage", children: [
220
+ src && /* @__PURE__ */ jsx(
221
+ ReactCrop,
222
+ {
223
+ crop,
224
+ onChange: (_, percentCrop) => setCrop(percentCrop),
225
+ onComplete: (c) => {
226
+ setCompletedCrop(c);
227
+ validateFreeAspect(c);
228
+ },
229
+ aspect: preset.aspect,
230
+ keepSelection: true,
231
+ minWidth: 50,
232
+ minHeight: 50,
233
+ className: "rds-image-crop__crop",
234
+ children: /* @__PURE__ */ jsx("img", { ref: imgRef, src, alt: "", onLoad: handleImageLoad, className: "rds-image-crop__image" })
235
+ }
236
+ ),
237
+ !imgLoaded && /* @__PURE__ */ jsx("div", { className: "rds-image-crop__layer", children: /* @__PURE__ */ jsx(Spinner, { size: "lg", label: "Carregando imagem\u2026" }) }),
238
+ busy && /* @__PURE__ */ jsx("div", { className: "rds-image-crop__layer rds-image-crop__layer--busy", children: /* @__PURE__ */ jsx(Spinner, { size: "lg", tone: "inverse", label: "Enviando\u2026" }) })
239
+ ] }),
240
+ aspectError && /* @__PURE__ */ jsx(Alert, { tone: "danger", title: aspectError, announce: "alert" }),
241
+ !aspectError && preset.id === "free" && /* @__PURE__ */ jsxs("p", { className: "rds-image-crop__hint", children: [
242
+ "Livre: propor\xE7\xE3o entre ",
243
+ minAspect.toFixed(1),
244
+ " (vertical) e ",
245
+ maxAspect.toFixed(1),
246
+ " (horizontal)."
247
+ ] })
248
+ ] })
249
+ }
236
250
  );
237
251
  }
238
252
  export {
@@ -2,44 +2,32 @@ import * as react from 'react';
2
2
  import { CropPreset } from './image-crop-modal.js';
3
3
 
4
4
  /**
5
- * ImageUpload — upload com preview e remoção.
6
- *
7
- * variant="button" → botão + preview simples (inline, form denso)
8
- * variant="dropzone" → zona de drop grande com drag & drop (upload é o herói: banner, galeria)
9
- * variant="tile" → tile COMPACTO auto-contido (ativo único e pequeno: logo, avatar). O
10
- * próprio tile é o alvo de clique/drop; quando preenchido, vira o preview
11
- * com botões-ícone de trocar/remover no canto (sem fileira de controles
12
- * separada, sem largura full). Todos os estados no mesmo footprint.
13
- *
14
- * Textos são i18n-áveis via `labels` (defaults pt-BR preservam o comportamento atual).
15
- *
16
- * Uso:
17
- * <ImageUpload name="logo" value={url} onChange={setUrl}
18
- * onUpload={async (file) => { ... return url; }} variant="tile" aspect="logo" />
5
+ * @deprecated Use `<FileInput variant="tile">` (Figma [RDS] Forms/FileInput): the image's square with the preview
6
+ * and the swap and remove buttons. ImageUpload is now a thin wrapper over it that keeps the 1.x API compiling and
7
+ * keeps the upload (`onUpload`) and the crop (`crop`). Every variant renders the tile: an image asks for a preview.
19
8
  */
20
9
  type ImageUploadAspect = 'logo' | 'banner' | 'square';
21
10
  type ImageUploadVariant = 'button' | 'dropzone' | 'tile';
22
11
  interface ImageUploadLabels {
23
- /** Botão/prompt do estado vazio (button/dropzone/tile). */
12
+ /** The empty tile's text (FileInput's `tileText`). */
24
13
  select: string;
25
- /** Ação de trocar a imagem (botão + aria-label do tile). */
14
+ /** The swap button's name. */
26
15
  change: string;
27
- /** Ação de remover. */
16
+ /** The remove button's name. */
28
17
  remove: string;
29
- /** Texto durante o upload. */
18
+ /** The tile's text while uploading. */
30
19
  uploading: string;
31
- /** Título da dropzone vazia. */
20
+ /** @deprecated Not shown: the tile has no title. */
32
21
  dropTitle: string;
33
- /** Subtítulo da dropzone vazia. */
22
+ /** @deprecated Not shown: say the formats in `hint`. */
34
23
  dropHint: string;
35
- /** aria-label da área de upload. */
24
+ /** The field's name when there is no `label`. */
36
25
  aria: string;
37
- /** Mensagem de erro genérica de upload. */
26
+ /** The error message when the upload fails without one. */
38
27
  error: string;
39
28
  }
40
- /** Config de crop: quando presente, a imagem selecionada passa pelo ImageCropModal antes do upload. */
29
+ /** When given, the chosen image goes through the ImageCropModal before the upload. */
41
30
  interface ImageUploadCrop {
42
- /** Presets de proporção. 1 só preset (ex.: 'free') = recorte livre, sem barra de presets. */
43
31
  presets?: CropPreset[];
44
32
  minAspect?: number;
45
33
  maxAspect?: number;
@@ -48,25 +36,29 @@ interface ImageUploadCrop {
48
36
  confirmLabel?: string;
49
37
  }
50
38
  interface ImageUploadProps {
51
- /** Sobrescreve o tamanho/estilo do preview (dropzone/tile). */
39
+ /** @deprecated Ignored: the tile's preview fills the square. */
52
40
  previewClassName?: string;
53
- /** Classe do wrapper do preview (ex.: simular o fundo claro/escuro da vitrine). */
41
+ /** @deprecated Ignored. */
54
42
  previewWrapperClassName?: string;
43
+ /** The form field name: a hidden input carries the image's URL. */
55
44
  name: string;
45
+ /** The image's URL, '' for none. */
56
46
  value: string;
57
47
  onChange: (url: string) => void;
48
+ /** Sends the file and resolves to its URL. A rejection shows its message as the error. */
58
49
  onUpload: (file: File) => Promise<string>;
59
50
  label?: string;
60
51
  hint?: string;
52
+ /** @deprecated Ignored: the tile is a 112 square. */
61
53
  aspect?: ImageUploadAspect;
62
54
  accept?: string;
63
55
  className?: string;
56
+ /** @deprecated Ignored: every variant is the tile. */
64
57
  variant?: ImageUploadVariant;
65
- /** Quando definido, abre o crop (ImageCropModal) entre selecionar o arquivo e subir. */
66
58
  crop?: ImageUploadCrop;
67
- /** Textos exibidos — mescla com os defaults pt-BR (passe só o que quiser sobrescrever). */
68
59
  labels?: Partial<ImageUploadLabels>;
69
60
  }
70
- declare function ImageUpload({ name, value, onChange, onUpload, label, hint, aspect, accept, className, variant, previewClassName, previewWrapperClassName, crop, labels, }: ImageUploadProps): react.JSX.Element;
61
+ /** @deprecated Use `<FileInput variant="tile">`, with the upload in its `onFiles` and the URL in `preview`. */
62
+ declare function ImageUpload({ name, value, onChange, onUpload, label, hint, accept, className, crop, labels, }: ImageUploadProps): react.JSX.Element;
71
63
 
72
64
  export { ImageUpload, type ImageUploadAspect, type ImageUploadCrop, type ImageUploadLabels, type ImageUploadProps, type ImageUploadVariant };