@rojaostudio/ds 1.0.2 → 2.0.0-next.1

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 (356) 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 -93
  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 +67 -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 -90
  15. package/dist/components/badge.d.ts +30 -41
  16. package/dist/components/badge.js +13 -110
  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 +38 -56
  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 +45 -108
  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 +31 -46
  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 +87 -81
  43. package/dist/components/chip-input.d.ts +46 -20
  44. package/dist/components/chip-input.js +172 -176
  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 -62
  49. package/dist/components/choice-carousel.d.ts +9 -0
  50. package/dist/components/choice-carousel.js +28 -44
  51. package/dist/components/choice-preview-card.d.ts +10 -20
  52. package/dist/components/choice-preview-card.js +12 -40
  53. package/dist/components/color-input.d.ts +36 -11
  54. package/dist/components/color-input.js +131 -59
  55. package/dist/components/combobox.d.ts +60 -57
  56. package/dist/components/combobox.js +210 -213
  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 +41 -68
  63. package/dist/components/copy-field.d.ts +10 -5
  64. package/dist/components/copy-field.js +24 -29
  65. package/dist/components/currency-input.d.ts +25 -11
  66. package/dist/components/currency-input.js +29 -65
  67. package/dist/components/danger-zone.d.ts +10 -1
  68. package/dist/components/danger-zone.js +14 -18
  69. package/dist/components/data-table-header.d.ts +13 -2
  70. package/dist/components/data-table-header.js +114 -190
  71. package/dist/components/date-picker.d.ts +31 -32
  72. package/dist/components/date-picker.js +119 -254
  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 +57 -89
  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 -58
  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 -51
  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 -61
  93. package/dist/components/floating-stepper.d.ts +7 -18
  94. package/dist/components/floating-stepper.js +27 -55
  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 +44 -64
  111. package/dist/components/image-crop-modal.d.ts +3 -3
  112. package/dist/components/image-crop-modal.js +32 -39
  113. package/dist/components/image-upload.d.ts +21 -29
  114. package/dist/components/image-upload.js +55 -259
  115. package/dist/components/index.d.ts +105 -52
  116. package/dist/components/index.js +190 -74
  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 +104 -137
  121. package/dist/components/insight-card.d.ts +25 -9
  122. package/dist/components/insight-card.js +42 -27
  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 -27
  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 -137
  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 -34
  185. package/dist/components/page-skeleton.d.ts +15 -21
  186. package/dist/components/page-skeleton.js +28 -25
  187. package/dist/components/pagination.d.ts +32 -22
  188. package/dist/components/pagination.js +78 -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 +75 -64
  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 +30 -131
  197. package/dist/components/pricing-card.d.ts +9 -25
  198. package/dist/components/pricing-card.js +9 -40
  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 +6 -22
  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 +45 -103
  211. package/dist/components/row-actions.d.ts +5 -0
  212. package/dist/components/row-actions.js +27 -34
  213. package/dist/components/saving-bar-context.d.ts +0 -5
  214. package/dist/components/saving-bar-context.js +16 -40
  215. package/dist/components/saving-bar.d.ts +26 -11
  216. package/dist/components/saving-bar.js +50 -65
  217. package/dist/components/section-card.d.ts +18 -4
  218. package/dist/components/section-card.js +29 -50
  219. package/dist/components/section-header.d.ts +8 -12
  220. package/dist/components/section-header.js +5 -10
  221. package/dist/components/select.d.ts +44 -16
  222. package/dist/components/select.js +83 -154
  223. package/dist/components/selectable-card.d.ts +11 -19
  224. package/dist/components/selectable-card.js +4 -28
  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 +10 -23
  229. package/dist/components/settings-list.d.ts +10 -12
  230. package/dist/components/settings-list.js +7 -19
  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 -37
  237. package/dist/components/slider.d.ts +21 -23
  238. package/dist/components/slider.js +59 -64
  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 +34 -37
  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 +18 -16
  251. package/dist/components/summary-bar.d.ts +20 -20
  252. package/dist/components/summary-bar.js +13 -55
  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 +59 -58
  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 -91
  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 +185 -203
  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 +19 -86
  271. package/dist/components/toggle-card.d.ts +11 -2
  272. package/dist/components/toggle-card.js +8 -77
  273. package/dist/components/toggle-group.d.ts +21 -59
  274. package/dist/components/toggle-group.js +31 -80
  275. package/dist/components/toggle.d.ts +19 -9
  276. package/dist/components/toggle.js +16 -61
  277. package/dist/components/tooltip.d.ts +25 -12
  278. package/dist/components/tooltip.js +15 -88
  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 -24
  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/targets/native/components/index.d.ts +0 -2
  295. package/dist/targets/native/components/index.js +0 -4
  296. package/dist/targets/native/preset.cjs +0 -1
  297. package/dist/targets/native/theme.css +58 -60
  298. package/dist/targets/native/theme.d.ts +58 -60
  299. package/dist/targets/native/theme.js +58 -60
  300. package/package.json +34 -12
  301. package/styles/_primitives.generated.css +40 -0
  302. package/styles/base.css +12 -18
  303. package/styles/rds/components-styles.css +11365 -0
  304. package/styles/rds/components.css +993 -0
  305. package/styles/rds/foundation.css +74 -0
  306. package/styles/rds/theme.css +261 -0
  307. package/styles/rds.css +6 -0
  308. package/styles/themes/rojao.css +46 -53
  309. package/dist/components/blocker-card.d.ts +0 -42
  310. package/dist/components/blocker-card.js +0 -54
  311. package/dist/components/bottom-sheet.d.ts +0 -31
  312. package/dist/components/bottom-sheet.js +0 -127
  313. package/dist/components/chat-bubble.d.ts +0 -16
  314. package/dist/components/chat-bubble.js +0 -56
  315. package/dist/components/chips.d.ts +0 -22
  316. package/dist/components/chips.js +0 -101
  317. package/dist/components/copilot-hint.d.ts +0 -18
  318. package/dist/components/copilot-hint.js +0 -72
  319. package/dist/components/divider.d.ts +0 -20
  320. package/dist/components/divider.js +0 -50
  321. package/dist/components/empty-state.d.ts +0 -48
  322. package/dist/components/empty-state.js +0 -94
  323. package/dist/components/form-card-header.d.ts +0 -13
  324. package/dist/components/form-card-header.js +0 -16
  325. package/dist/components/label.d.ts +0 -16
  326. package/dist/components/label.js +0 -48
  327. package/dist/components/menu.d.ts +0 -50
  328. package/dist/components/menu.js +0 -83
  329. package/dist/components/modal.d.ts +0 -25
  330. package/dist/components/modal.js +0 -86
  331. package/dist/components/notice.d.ts +0 -50
  332. package/dist/components/notice.js +0 -121
  333. package/dist/components/page-tabs.d.ts +0 -35
  334. package/dist/components/page-tabs.js +0 -68
  335. package/dist/components/paywall-banner.d.ts +0 -37
  336. package/dist/components/paywall-banner.js +0 -58
  337. package/dist/components/paywall.d.ts +0 -44
  338. package/dist/components/paywall.js +0 -65
  339. package/dist/components/phone-frame.d.ts +0 -9
  340. package/dist/components/phone-frame.js +0 -19
  341. package/dist/components/pix-icon.d.ts +0 -8
  342. package/dist/components/search.d.ts +0 -30
  343. package/dist/components/search.js +0 -86
  344. package/dist/components/themed.d.ts +0 -36
  345. package/dist/components/themed.js +0 -23
  346. package/dist/components/toaster.d.ts +0 -84
  347. package/dist/components/toaster.js +0 -290
  348. package/dist/components/use-dismiss.d.ts +0 -9
  349. package/dist/components/use-dismiss.js +0 -28
  350. package/dist/components/use-focus-trap.d.ts +0 -5
  351. package/dist/components/use-focus-trap.js +0 -54
  352. package/dist/targets/native/components/paywall-banner.d.ts +0 -11
  353. package/dist/targets/native/components/paywall-banner.js +0 -55
  354. package/dist/targets/native/components/paywall.d.ts +0 -18
  355. package/dist/targets/native/components/paywall.js +0 -71
  356. /package/dist/{components/pix-icon.js → icons/pix.js} +0 -0
@@ -0,0 +1,130 @@
1
+ "use client";
2
+ import {
3
+ __objRest,
4
+ __spreadProps,
5
+ __spreadValues
6
+ } from "../chunk-ORMEWXMH.js";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Children, useRef, useState } from "react";
9
+ import { IconButton } from "./icon-button.js";
10
+ import { Tooltip } from "./tooltip.js";
11
+ import { ChevronLeftIcon, ChevronRightIcon } from "./internal/icons.js";
12
+ function Carousel(_a) {
13
+ var _b = _a, {
14
+ showControls = true,
15
+ showDots = true,
16
+ defaultIndex = 0,
17
+ index,
18
+ onIndexChange,
19
+ className,
20
+ children,
21
+ onKeyDown
22
+ } = _b, rest = __objRest(_b, [
23
+ "showControls",
24
+ "showDots",
25
+ "defaultIndex",
26
+ "index",
27
+ "onIndexChange",
28
+ "className",
29
+ "children",
30
+ "onKeyDown"
31
+ ]);
32
+ const slides = Children.toArray(children);
33
+ const count = slides.length;
34
+ const [own, setOwn] = useState(defaultIndex);
35
+ const current = Math.min(Math.max(index != null ? index : own, 0), Math.max(count - 1, 0));
36
+ const start = useRef(null);
37
+ const go = (next) => {
38
+ const clamped = Math.min(Math.max(next, 0), count - 1);
39
+ if (clamped === current) return;
40
+ setOwn(clamped);
41
+ onIndexChange == null ? void 0 : onIndexChange(clamped);
42
+ };
43
+ const handleKey = (event) => {
44
+ onKeyDown == null ? void 0 : onKeyDown(event);
45
+ if (event.defaultPrevented) return;
46
+ if (event.target.closest('input, textarea, select, [contenteditable="true"]')) return;
47
+ if (event.key === "ArrowLeft") {
48
+ event.preventDefault();
49
+ go(current - 1);
50
+ } else if (event.key === "ArrowRight") {
51
+ event.preventDefault();
52
+ go(current + 1);
53
+ }
54
+ };
55
+ const onPointerDown = (event) => {
56
+ if (event.pointerType !== "mouse") start.current = event.clientX;
57
+ };
58
+ const onPointerUp = (event) => {
59
+ if (start.current === null) return;
60
+ const delta = event.clientX - start.current;
61
+ start.current = null;
62
+ if (Math.abs(delta) > 40) go(current + (delta < 0 ? 1 : -1));
63
+ };
64
+ return /* @__PURE__ */ jsxs(
65
+ "section",
66
+ __spreadProps(__spreadValues({
67
+ "aria-roledescription": "carrossel"
68
+ }, rest), {
69
+ onKeyDown: handleKey,
70
+ className: ["rds-carousel", className].filter(Boolean).join(" "),
71
+ children: [
72
+ /* @__PURE__ */ jsxs("div", { className: "rds-carousel__stage", children: [
73
+ showControls && /* @__PURE__ */ jsx(Tooltip, { text: "Slide anterior", children: /* @__PURE__ */ jsx(
74
+ IconButton,
75
+ {
76
+ icon: /* @__PURE__ */ jsx(ChevronLeftIcon, {}),
77
+ label: "Slide anterior",
78
+ tone: "neutral",
79
+ variant: "outline",
80
+ disabled: current === 0,
81
+ onClick: () => go(current - 1)
82
+ }
83
+ ) }),
84
+ /* @__PURE__ */ jsx("div", { className: "rds-carousel__viewport", "aria-live": "polite", onPointerDown, onPointerUp, children: slides.map((slide, i) => /* @__PURE__ */ jsx(
85
+ "div",
86
+ {
87
+ role: "group",
88
+ "aria-roledescription": "slide",
89
+ "aria-label": `${i + 1} de ${count}`,
90
+ hidden: i !== current,
91
+ className: "rds-carousel__slide",
92
+ children: slide
93
+ },
94
+ i
95
+ )) }),
96
+ showControls && /* @__PURE__ */ jsx(Tooltip, { text: "Pr\xF3ximo slide", children: /* @__PURE__ */ jsx(
97
+ IconButton,
98
+ {
99
+ icon: /* @__PURE__ */ jsx(ChevronRightIcon, {}),
100
+ label: "Pr\xF3ximo slide",
101
+ tone: "neutral",
102
+ variant: "outline",
103
+ disabled: current === count - 1,
104
+ onClick: () => go(current + 1)
105
+ }
106
+ ) })
107
+ ] }),
108
+ showDots && count > 1 && /* @__PURE__ */ jsx("div", { className: "rds-carousel__dots", children: slides.map((_, i) => /* @__PURE__ */ jsx(
109
+ "button",
110
+ {
111
+ type: "button",
112
+ className: "rds-carousel__dot",
113
+ "aria-label": `Ir para o slide ${i + 1}`,
114
+ "aria-current": i === current ? "true" : void 0,
115
+ onClick: () => go(i)
116
+ },
117
+ i
118
+ )) })
119
+ ]
120
+ })
121
+ );
122
+ }
123
+ function CarouselPlaceholder(_c) {
124
+ var _d = _c, { className } = _d, rest = __objRest(_d, ["className"]);
125
+ return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({}, rest), { className: ["rds-carousel__placeholder", className].filter(Boolean).join(" ") }));
126
+ }
127
+ export {
128
+ Carousel,
129
+ CarouselPlaceholder
130
+ };
@@ -0,0 +1,49 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ type ChartType = 'line' | 'bar' | 'column';
5
+ interface ChartSeries {
6
+ /** The series name, shown in the legend, the tooltip and the data table. */
7
+ name: string;
8
+ /** One value per label, in the same order. */
9
+ data: number[];
10
+ /** line only: which axis it reads on. right only when the two series have different units (volume and rate). */
11
+ axis?: 'left' | 'right';
12
+ }
13
+ interface ChartProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
14
+ /** What the chart shows, with the period. It names the chart and captions its data table. */
15
+ label: string;
16
+ /** line: lines over time; bar: a ranking in horizontal bars; column: columns by category. */
17
+ type?: ChartType;
18
+ /** The x labels: dates (line) or categories (bar, column), one per value. */
19
+ labels: string[];
20
+ /**
21
+ * Up to five series, in the order of the palette (chart/series/1 to 5); the main one first. bar draws the first
22
+ * series, one colour per row, as in Figma.
23
+ */
24
+ series: ChartSeries[];
25
+ /** Formats the left axis and its values. By default a compact number in pt-BR ("2,8 mi"). */
26
+ formatLeft?: (value: number) => string;
27
+ /** Formats the right axis and its values. */
28
+ formatRight?: (value: number) => string;
29
+ /** The right axis, for the series with axis="right" (Figma: `showRightAxis`). Off: every series reads on the left. */
30
+ showRightAxis?: boolean;
31
+ /** The legend under the chart (Figma: `showLegend`). Keep it on whenever there is more than one series. */
32
+ showLegend?: boolean;
33
+ /** The values of the point under the pointer or the keyboard (Figma: `showTooltip`). */
34
+ showTooltip?: boolean;
35
+ /** Off: only the first, middle and last label (Figma: `showAllDates`). Use it under about 360 px. */
36
+ showAllDates?: boolean;
37
+ /** Show the data table under the chart. By default it is there only for screen readers. */
38
+ showTable?: boolean;
39
+ /** Height of the plot area, in px (Figma: 200). */
40
+ height?: number;
41
+ }
42
+ /**
43
+ * Chart — Figma [RDS] Content/Chart. The chart area, to go inside a Card. Every chart carries a table with the same
44
+ * data (visually hidden unless `showTable`). In line and column the plot is a slider for screen readers and the
45
+ * keyboard: the arrows move from point to point, and each point is read with its label and values. Styles: chart.css.
46
+ */
47
+ declare function Chart({ label, type, labels, series, formatLeft, formatRight, showRightAxis, showLegend, showTooltip, showAllDates, showTable, height, className, ...rest }: ChartProps): react.JSX.Element;
48
+
49
+ export { Chart, type ChartProps, type ChartSeries, type ChartType };
@@ -0,0 +1,258 @@
1
+ "use client";
2
+ import {
3
+ __objRest,
4
+ __spreadProps,
5
+ __spreadValues
6
+ } from "../chunk-ORMEWXMH.js";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import { useId, useState } from "react";
9
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table.js";
10
+ const compact = new Intl.NumberFormat("pt-BR", { notation: "compact", maximumFractionDigits: 1 });
11
+ const defaultFormat = (value) => compact.format(value);
12
+ const seriesStyle = (n) => ({ ["--_series"]: `var(--_series-${(n - 1) % 5 + 1})` });
13
+ function niceStep(raw) {
14
+ if (raw <= 0) return 1;
15
+ const power = 10 ** Math.floor(Math.log10(raw));
16
+ const fraction = raw / power;
17
+ const nice = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 2.5 ? 2.5 : fraction <= 5 ? 5 : 10;
18
+ return nice * power;
19
+ }
20
+ function scaleOf(values) {
21
+ const low = Math.min(0, ...values);
22
+ const high = Math.max(0, ...values);
23
+ const step = niceStep((high - low) / 4);
24
+ const min = Math.floor(low / step) * step;
25
+ const max = min + step * 4;
26
+ return { min, max, ticks: [4, 3, 2, 1, 0].map((i) => min + step * i) };
27
+ }
28
+ function Chart(_a) {
29
+ var _b = _a, {
30
+ label,
31
+ type = "line",
32
+ labels,
33
+ series,
34
+ formatLeft = defaultFormat,
35
+ formatRight = defaultFormat,
36
+ showRightAxis = true,
37
+ showLegend = true,
38
+ showTooltip = true,
39
+ showAllDates = true,
40
+ showTable = false,
41
+ height = 200,
42
+ className
43
+ } = _b, rest = __objRest(_b, [
44
+ "label",
45
+ "type",
46
+ "labels",
47
+ "series",
48
+ "formatLeft",
49
+ "formatRight",
50
+ "showRightAxis",
51
+ "showLegend",
52
+ "showTooltip",
53
+ "showAllDates",
54
+ "showTable",
55
+ "height",
56
+ "className"
57
+ ]);
58
+ var _a2;
59
+ const [active, setActive] = useState(null);
60
+ const tooltipId = useId();
61
+ const count = labels.length;
62
+ const shown = type === "bar" ? series.slice(0, 1) : series.slice(0, 5);
63
+ const onRight = (s) => type === "line" && showRightAxis && s.axis === "right";
64
+ const left = shown.filter((s) => !onRight(s));
65
+ const right = shown.filter(onRight);
66
+ const leftScale = scaleOf(left.flatMap((s) => s.data));
67
+ const rightScale = right.length ? scaleOf(right.flatMap((s) => s.data)) : null;
68
+ const dual = Boolean(rightScale);
69
+ const scaleFor = (s) => onRight(s) && rightScale ? rightScale : leftScale;
70
+ const formatFor = (s) => onRight(s) ? formatRight : formatLeft;
71
+ const x = (index) => type === "column" ? (index + 0.5) / count * 100 : count > 1 ? index / (count - 1) * 100 : 50;
72
+ const y = (s, value) => {
73
+ const { min, max } = scaleFor(s);
74
+ return 100 - (value - min) / (max - min) * 100;
75
+ };
76
+ const describe = (index) => `${labels[index]}: ` + shown.map((s) => {
77
+ var _a3;
78
+ return `${s.name} ${formatFor(s)((_a3 = s.data[index]) != null ? _a3 : 0)}`;
79
+ }).join(", ");
80
+ const legendName = (s) => dual ? `${s.name} (${onRight(s) ? "direita" : "esquerda"})` : s.name;
81
+ const labelIndexes = showAllDates || count <= 3 ? labels.map((_, i) => i) : [0, Math.floor((count - 1) / 2), count - 1];
82
+ const onPointerMove = (event) => {
83
+ const box = event.currentTarget.getBoundingClientRect();
84
+ const ratio = Math.min(1, Math.max(0, (event.clientX - box.left) / box.width));
85
+ setActive(type === "column" ? Math.min(count - 1, Math.floor(ratio * count)) : Math.round(ratio * (count - 1)));
86
+ };
87
+ const onKeyDown = (event) => {
88
+ const current = active != null ? active : 0;
89
+ const keys = {
90
+ ArrowRight: Math.min(count - 1, current + 1),
91
+ ArrowUp: Math.min(count - 1, current + 1),
92
+ ArrowLeft: Math.max(0, current - 1),
93
+ ArrowDown: Math.max(0, current - 1),
94
+ Home: 0,
95
+ End: count - 1
96
+ };
97
+ if (!(event.key in keys)) return;
98
+ event.preventDefault();
99
+ setActive(keys[event.key]);
100
+ };
101
+ const Axis = ({ ticks, format, side }) => /* @__PURE__ */ jsx("div", { className: `rds-chart__axis rds-chart__axis--${side}`, "aria-hidden": "true", children: ticks.map((tick) => /* @__PURE__ */ jsx("span", { children: format(tick) }, tick)) });
102
+ const tooltip = active !== null && showTooltip && /* @__PURE__ */ jsxs(
103
+ "div",
104
+ {
105
+ id: tooltipId,
106
+ role: "tooltip",
107
+ className: `rds-chart__tooltip${x(active) > 50 ? " rds-chart__tooltip--flip" : ""}`,
108
+ style: x(active) > 50 ? { right: `${100 - x(active)}%` } : { left: `${x(active)}%` },
109
+ children: [
110
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__tooltip-title", children: labels[active] }),
111
+ shown.map((s, n) => {
112
+ var _a3;
113
+ return /* @__PURE__ */ jsxs("span", { className: "rds-chart__tooltip-row", children: [
114
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__dot", style: seriesStyle(n + 1), "aria-hidden": "true" }),
115
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__tooltip-name", children: s.name }),
116
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__tooltip-value", children: formatFor(s)((_a3 = s.data[active]) != null ? _a3 : 0) })
117
+ ] }, s.name);
118
+ })
119
+ ]
120
+ }
121
+ );
122
+ const plotProps = {
123
+ className: "rds-chart__plot",
124
+ role: "slider",
125
+ tabIndex: 0,
126
+ "aria-label": `Ler ${label.charAt(0).toLowerCase()}${label.slice(1)}`,
127
+ "aria-valuemin": 0,
128
+ "aria-valuemax": Math.max(count - 1, 0),
129
+ "aria-valuenow": active != null ? active : 0,
130
+ "aria-valuetext": count ? describe(active != null ? active : 0) : void 0,
131
+ "aria-describedby": active !== null && showTooltip ? tooltipId : void 0,
132
+ onPointerMove,
133
+ onPointerLeave: (event) => {
134
+ if (document.activeElement !== event.currentTarget) setActive(null);
135
+ },
136
+ onFocus: () => setActive((current) => current != null ? current : 0),
137
+ onBlur: () => setActive(null),
138
+ onKeyDown
139
+ };
140
+ const grid = leftScale.ticks.map((tick, i) => /* @__PURE__ */ jsx("span", { className: "rds-chart__grid", style: { top: `${i * 25}%` } }, tick));
141
+ let body;
142
+ if (type === "bar") {
143
+ const s = shown[0];
144
+ const top = Math.max(0, ...(_a2 = s == null ? void 0 : s.data) != null ? _a2 : [0]);
145
+ body = /* @__PURE__ */ jsx("div", { className: "rds-chart__bars", "aria-hidden": "true", children: labels.map((name, i) => {
146
+ var _a3, _b2;
147
+ return /* @__PURE__ */ jsxs("div", { className: "rds-chart__bar-row", children: [
148
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__bar-label", children: name }),
149
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__track", children: /* @__PURE__ */ jsx(
150
+ "span",
151
+ {
152
+ className: "rds-chart__bar",
153
+ style: __spreadProps(__spreadValues({}, seriesStyle(i + 1)), { width: `${top ? ((_a3 = s == null ? void 0 : s.data[i]) != null ? _a3 : 0) / top * 100 : 0}%` })
154
+ }
155
+ ) }),
156
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__bar-value", children: s ? formatLeft((_b2 = s.data[i]) != null ? _b2 : 0) : "" })
157
+ ] }, name);
158
+ }) });
159
+ } else {
160
+ body = /* @__PURE__ */ jsxs(Fragment, { children: [
161
+ /* @__PURE__ */ jsxs("div", { className: "rds-chart__row", style: { height }, children: [
162
+ /* @__PURE__ */ jsx(Axis, { ticks: leftScale.ticks, format: formatLeft, side: "left" }),
163
+ /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({}, plotProps), { children: [
164
+ grid,
165
+ type === "line" ? /* @__PURE__ */ jsx("svg", { className: "rds-chart__svg", viewBox: "0 0 100 100", preserveAspectRatio: "none", focusable: "false", "aria-hidden": "true", children: shown.map((s, n) => /* @__PURE__ */ jsx(
166
+ "path",
167
+ {
168
+ className: "rds-chart__line",
169
+ style: seriesStyle(n + 1),
170
+ d: s.data.map((value, i) => `${i ? "L" : "M"}${x(i).toFixed(2)} ${y(s, value).toFixed(2)}`).join(" ")
171
+ },
172
+ s.name
173
+ )) }) : /* @__PURE__ */ jsx("div", { className: "rds-chart__columns", "aria-hidden": "true", children: labels.map((name, i) => /* @__PURE__ */ jsx("div", { className: "rds-chart__column-group", children: shown.map((s, n) => {
174
+ var _a3;
175
+ return /* @__PURE__ */ jsx(
176
+ "span",
177
+ {
178
+ className: "rds-chart__column",
179
+ style: __spreadProps(__spreadValues({}, seriesStyle(n + 1)), { height: `${100 - y(s, (_a3 = s.data[i]) != null ? _a3 : 0)}%` })
180
+ },
181
+ s.name
182
+ );
183
+ }) }, name)) }),
184
+ active !== null && type === "line" && /* @__PURE__ */ jsxs(Fragment, { children: [
185
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__crosshair", style: { left: `${x(active)}%` }, "aria-hidden": "true" }),
186
+ shown.map((s, n) => {
187
+ var _a3;
188
+ return /* @__PURE__ */ jsx(
189
+ "span",
190
+ {
191
+ className: "rds-chart__point",
192
+ style: __spreadProps(__spreadValues({}, seriesStyle(n + 1)), { left: `${x(active)}%`, top: `${y(s, (_a3 = s.data[active]) != null ? _a3 : 0)}%` }),
193
+ "aria-hidden": "true"
194
+ },
195
+ s.name
196
+ );
197
+ })
198
+ ] }),
199
+ active !== null && type === "column" && /* @__PURE__ */ jsx(
200
+ "span",
201
+ {
202
+ className: "rds-chart__band",
203
+ style: { left: `${active / count * 100}%`, width: `${100 / count}%` },
204
+ "aria-hidden": "true"
205
+ }
206
+ ),
207
+ tooltip
208
+ ] })),
209
+ rightScale && /* @__PURE__ */ jsx(Axis, { ticks: rightScale.ticks, format: formatRight, side: "right" })
210
+ ] }),
211
+ /* @__PURE__ */ jsx("div", { className: "rds-chart__labels", "aria-hidden": "true", children: /* @__PURE__ */ jsx("div", { className: `rds-chart__labels-track rds-chart__labels-track--${type}`, children: labelIndexes.map((i) => /* @__PURE__ */ jsx("span", { className: "rds-chart__label", style: { left: `${x(i)}%` }, children: labels[i] }, i)) }) })
212
+ ] });
213
+ }
214
+ const firstColumn = type === "line" ? "Data" : "Categoria";
215
+ return /* @__PURE__ */ jsxs(
216
+ "figure",
217
+ __spreadProps(__spreadValues({}, rest), {
218
+ "aria-label": label,
219
+ className: ["rds-chart", `rds-chart--${type}`, dual && "rds-chart--dual", className].filter(Boolean).join(" "),
220
+ children: [
221
+ body,
222
+ showLegend && type !== "bar" && /* @__PURE__ */ jsx("ul", { className: "rds-chart__legend", "aria-hidden": "true", children: shown.map((s, n) => /* @__PURE__ */ jsxs("li", { children: [
223
+ /* @__PURE__ */ jsx("span", { className: "rds-chart__dot", style: seriesStyle(n + 1) }),
224
+ legendName(s)
225
+ ] }, s.name)) }),
226
+ showTable ? /* @__PURE__ */ jsxs(Table, { caption: label, showCaption: true, className: "rds-chart__table", children: [
227
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
228
+ /* @__PURE__ */ jsx(TableHead, { children: firstColumn }),
229
+ shown.map((s) => /* @__PURE__ */ jsx(TableHead, { align: "end", children: legendName(s) }, s.name))
230
+ ] }) }),
231
+ /* @__PURE__ */ jsx(TableBody, { children: labels.map((name, i) => /* @__PURE__ */ jsxs(TableRow, { children: [
232
+ /* @__PURE__ */ jsx(TableCell, { children: name }),
233
+ shown.map((s) => {
234
+ var _a3;
235
+ return /* @__PURE__ */ jsx(TableCell, { align: "end", children: formatFor(s)((_a3 = s.data[i]) != null ? _a3 : 0) }, s.name);
236
+ })
237
+ ] }, name)) })
238
+ ] }) : /* @__PURE__ */ jsxs("table", { className: "rds-visually-hidden", children: [
239
+ /* @__PURE__ */ jsx("caption", { children: label }),
240
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
241
+ /* @__PURE__ */ jsx("th", { scope: "col", children: firstColumn }),
242
+ shown.map((s) => /* @__PURE__ */ jsx("th", { scope: "col", children: legendName(s) }, s.name))
243
+ ] }) }),
244
+ /* @__PURE__ */ jsx("tbody", { children: labels.map((name, i) => /* @__PURE__ */ jsxs("tr", { children: [
245
+ /* @__PURE__ */ jsx("th", { scope: "row", children: name }),
246
+ shown.map((s) => {
247
+ var _a3;
248
+ return /* @__PURE__ */ jsx("td", { children: formatFor(s)((_a3 = s.data[i]) != null ? _a3 : 0) }, s.name);
249
+ })
250
+ ] }, name)) })
251
+ ] })
252
+ ]
253
+ })
254
+ );
255
+ }
256
+ export {
257
+ Chart
258
+ };
@@ -0,0 +1,16 @@
1
+ import * as react from 'react';
2
+ import { ChoiceFieldsetProps } from './internal/fieldset.js';
3
+
4
+ interface CheckboxGroupProps extends ChoiceFieldsetProps {
5
+ /** Said after the legend to screen readers when `required` (a group of checkboxes has no native required). */
6
+ requiredText?: string;
7
+ }
8
+ /**
9
+ * CheckboxGroup — Figma [RDS] Forms/CheckboxGroup. A question and its multiple-choice options (Checkbox
10
+ * children, Figma slot `options`) in a <fieldset>, with the group's hint and one error for the group.
11
+ * HTML has no required for a group of checkboxes: validate on submit and pass `errorMessage`.
12
+ * Styles: checkbox-group.css and internal/fieldset.css.
13
+ */
14
+ declare function CheckboxGroup({ requiredText, ...props }: CheckboxGroupProps): react.JSX.Element;
15
+
16
+ export { CheckboxGroup, type CheckboxGroupProps };
@@ -0,0 +1,13 @@
1
+ import {
2
+ __objRest,
3
+ __spreadValues
4
+ } from "../chunk-ORMEWXMH.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import { ChoiceFieldset } from "./internal/fieldset.js";
7
+ function CheckboxGroup(_a) {
8
+ var _b = _a, { requiredText = "obrigat\xF3rio" } = _b, props = __objRest(_b, ["requiredText"]);
9
+ return /* @__PURE__ */ jsx(ChoiceFieldset, __spreadValues({ kind: "rds-checkbox-group", requiredText }, props));
10
+ }
11
+ export {
12
+ CheckboxGroup
13
+ };
@@ -1,14 +1,29 @@
1
1
  import * as react from 'react';
2
- import { InputHTMLAttributes, ReactNode } from 'react';
2
+ import { ComponentPropsWithRef, ReactNode } from 'react';
3
3
 
4
- interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
5
- label?: ReactNode;
6
- /** Texto secundário abaixo do label. */
7
- description?: ReactNode;
8
- indeterminate?: boolean;
9
- error?: string;
10
- size?: 'sm' | 'md';
4
+ type CheckboxChecked = boolean | 'indeterminate';
5
+ interface CheckboxProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'children' | 'checked' | 'size'> {
6
+ /** What the person confirms or chooses (Figma: `showLabel` + `label`). Without it, pass aria-label (a table cell). */
7
+ children?: ReactNode;
8
+ /** A line under the label (Figma: `showHint` + `hint`), tied by aria-describedby. */
9
+ hint?: ReactNode;
10
+ /**
11
+ * Controlled (Figma: `checked`). `'indeterminate'` is partly checked: only for the "select all" of a list
12
+ * when some options are checked. Pair it with `onChange` or `onCheckedChange`.
13
+ */
14
+ checked?: CheckboxChecked;
15
+ /** Called with the new checked state on every change. */
16
+ onCheckedChange?: (checked: boolean) => void;
17
+ /** The error state (Figma: `error`). Passing `errorMessage` turns it on too. Inside a CheckboxGroup, the error belongs to the group. */
18
+ error?: boolean;
19
+ /** What is missing and how to fix it ("Aceite os termos para continuar"). Turns the error state on. */
20
+ errorMessage?: ReactNode;
11
21
  }
12
- declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
22
+ /**
23
+ * Checkbox — Figma [RDS] Forms/Checkbox. A box to check: alone for a yes (terms), or in a list inside a
24
+ * CheckboxGroup. Native <input type="checkbox">: Space toggles it, and it goes with the form. Disabled is
25
+ * the native one. Styles: checkbox.css and internal/choice.css.
26
+ */
27
+ declare function Checkbox({ children, hint, checked, onCheckedChange, error, errorMessage, required, disabled, id, className, style, onChange, ref, ...input }: CheckboxProps): react.JSX.Element;
13
28
 
14
- export { Checkbox, type CheckboxProps };
29
+ export { Checkbox, type CheckboxChecked, type CheckboxProps };