@rojaostudio/ds 1.0.2 → 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 (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 -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 +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
@@ -1,32 +1,30 @@
1
1
  import * as react from 'react';
2
- import { InputHTMLAttributes } from 'react';
2
+ import { ComponentPropsWithRef, ReactNode } from 'react';
3
3
 
4
- /**
5
- * Slider — input range single (sem range duplo). Inspirado em M3 Slider.
6
- *
7
- * Uso:
8
- * <Slider value={vol} onChange={setVol} min={0} max={100} />
9
- * <Slider value={qty} onChange={setQty} min={1} max={50} step={1} showValue />
10
- * <Slider value={pct} onChange={setPct} formatValue={v => `${v}%`} showValue />
11
- *
12
- * Sem range duplo por enquanto (M3 e shadcn separam em RangeSlider). Adicionar
13
- * componente próprio quando precisar.
14
- */
15
- interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value' | 'size'> {
16
- value: number;
17
- onChange: (value: number) => void;
4
+ interface SliderProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'value' | 'defaultValue' | 'min' | 'max' | 'step' | 'children' | 'size'> {
5
+ /** What is chosen ("Volume por dia") (Figma: `showLabel` + `label`). Without it, pass aria-label. */
6
+ label?: ReactNode;
7
+ /** The number beside the label (Figma: `showValue`). On by default: dragging without seeing the number is a guess. */
8
+ showValue?: boolean;
9
+ /** Controlled value (Figma: `value`). */
10
+ value?: number;
11
+ /** Uncontrolled: the value at first. */
12
+ defaultValue?: number;
13
+ /** Called with the new number on every change. */
14
+ onValueChange?: (value: number) => void;
18
15
  min?: number;
19
16
  max?: number;
17
+ /** The step of the arrows (Figma: 5 in 5). */
20
18
  step?: number;
21
- /** Mostra valor atual à direita. */
22
- showValue?: boolean;
23
- /** Formata valor (ex: `v => `R$ ${v}``). */
19
+ /** How the number reads, on screen and for screen readers ("75%", "1.500 por dia"). */
24
20
  formatValue?: (value: number) => string;
25
- /** Mostra ticks min/max abaixo. */
26
- showRange?: boolean;
27
- size?: 'sm' | 'md';
28
- className?: string;
29
21
  }
30
- declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAttributes<HTMLInputElement>>;
22
+ /**
23
+ * Slider — Figma [RDS] Forms/Slider. A value in a known range where close is good enough: a native
24
+ * <input type="range">. The arrows move a step, PageUp/PageDown a bigger one, Home and End go to the ends. The
25
+ * thumb is 20, the touch area 44. Disabled is the native one (Figma: `state`). A range of two thumbs is not in
26
+ * the Figma yet. Styles: slider.css.
27
+ */
28
+ declare function Slider({ label, showValue, value, defaultValue, onValueChange, min, max, step, formatValue, id, disabled, className, style, onChange, ...input }: SliderProps): react.JSX.Element;
31
29
 
32
30
  export { Slider, type SliderProps };
@@ -1,93 +1,88 @@
1
1
  "use client";
2
2
  import {
3
3
  __objRest,
4
+ __spreadProps,
4
5
  __spreadValues
5
6
  } from "../chunk-ORMEWXMH.js";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
- import { forwardRef, useId } from "react";
8
- const TRACK_HEIGHT = { sm: 4, md: 6 };
9
- const THUMB_SIZE = { sm: 14, md: 18 };
10
- const Slider = forwardRef(function Slider2(_a, ref) {
8
+ import { useId, useState } from "react";
9
+ import { hasContent, warnIfUnlabelled } from "./internal/field.js";
10
+ function Slider(_a) {
11
11
  var _b = _a, {
12
+ label,
13
+ showValue = true,
12
14
  value,
13
- onChange,
15
+ defaultValue,
16
+ onValueChange,
14
17
  min = 0,
15
18
  max = 100,
16
- step = 1,
17
- showValue = false,
18
- formatValue,
19
- showRange = false,
20
- size = "md",
19
+ step = 5,
20
+ formatValue = String,
21
+ id,
21
22
  disabled,
22
- className = ""
23
- } = _b, rest = __objRest(_b, [
23
+ className,
24
+ style,
25
+ onChange
26
+ } = _b, input = __objRest(_b, [
27
+ "label",
28
+ "showValue",
24
29
  "value",
25
- "onChange",
30
+ "defaultValue",
31
+ "onValueChange",
26
32
  "min",
27
33
  "max",
28
34
  "step",
29
- "showValue",
30
35
  "formatValue",
31
- "showRange",
32
- "size",
36
+ "id",
33
37
  "disabled",
34
- "className"
38
+ "className",
39
+ "style",
40
+ "onChange"
35
41
  ]);
36
- const id = useId();
37
- const pct = (value - min) / (max - min) * 100;
38
- const fmt = formatValue != null ? formatValue : ((v) => String(v));
39
- return /* @__PURE__ */ jsxs("div", { className: ["flex flex-col gap-2", className].join(" "), children: [
40
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
41
- /* @__PURE__ */ jsxs("div", { className: "relative flex-1 flex items-center", style: { height: THUMB_SIZE[size] }, children: [
42
+ warnIfUnlabelled("Slider", label, input["aria-label"], input["aria-labelledby"]);
43
+ const generated = useId();
44
+ const controlId = id != null ? id : generated;
45
+ const [own, setOwn] = useState(defaultValue != null ? defaultValue : min);
46
+ const current = value != null ? value : own;
47
+ const percent = (current - min) / (max - min || 1) * 100;
48
+ const labelled = hasContent(label);
49
+ function change(event) {
50
+ const next = Number(event.target.value);
51
+ setOwn(next);
52
+ onChange == null ? void 0 : onChange(event);
53
+ onValueChange == null ? void 0 : onValueChange(next);
54
+ }
55
+ return /* @__PURE__ */ jsxs(
56
+ "div",
57
+ {
58
+ role: disabled ? "group" : void 0,
59
+ "aria-disabled": disabled || void 0,
60
+ className: ["rds-slider", disabled && "rds-slider--disabled", className].filter(Boolean).join(" "),
61
+ style: __spreadProps(__spreadValues({}, style), { "--_percent": `${percent}%` }),
62
+ children: [
63
+ (labelled || showValue) && /* @__PURE__ */ jsxs("div", { className: "rds-slider__label-row", children: [
64
+ labelled && /* @__PURE__ */ jsx("label", { htmlFor: controlId, className: "rds-slider__label", children: label }),
65
+ showValue && /* @__PURE__ */ jsx("span", { className: "rds-slider__value", "aria-hidden": "true", children: formatValue(current) })
66
+ ] }),
42
67
  /* @__PURE__ */ jsx(
43
68
  "input",
44
- __spreadValues({
45
- ref,
46
- id,
69
+ __spreadProps(__spreadValues({}, input), {
70
+ id: controlId,
47
71
  type: "range",
72
+ className: "rds-slider__input",
48
73
  min,
49
74
  max,
50
75
  step,
51
- value,
52
76
  disabled,
53
- onChange: (e) => onChange(Number(e.target.value)),
54
- className: [
55
- "rojao-slider absolute inset-0 w-full bg-transparent appearance-none cursor-pointer",
56
- "focus:outline-none focus-visible:ring-2 focus-visible:ring-stroke-focus focus-visible:ring-offset-2 focus-visible:rounded-full",
57
- "disabled:cursor-not-allowed disabled:opacity-50"
58
- ].join(" "),
59
- style: {
60
- ["--rojao-slider-pct"]: `${pct}%`,
61
- ["--rojao-slider-track-h"]: `${TRACK_HEIGHT[size]}px`,
62
- ["--rojao-slider-thumb-size"]: `${THUMB_SIZE[size]}px`
63
- }
64
- }, rest)
65
- ),
66
- /* @__PURE__ */ jsx(
67
- "div",
68
- {
69
- "aria-hidden": true,
70
- className: "absolute inset-x-0 rounded-full bg-stroke-default pointer-events-none",
71
- style: { height: TRACK_HEIGHT[size] }
72
- }
73
- ),
74
- /* @__PURE__ */ jsx(
75
- "div",
76
- {
77
- "aria-hidden": true,
78
- className: "absolute left-0 rounded-full bg-brand-primary pointer-events-none",
79
- style: { height: TRACK_HEIGHT[size], width: `${pct}%` }
80
- }
77
+ "aria-valuetext": formatValue(current),
78
+ value: current,
79
+ onChange: change
80
+ })
81
81
  )
82
- ] }),
83
- showValue && /* @__PURE__ */ jsx("span", { className: "text-label font-medium text-fg-primary tabular-nums shrink-0 min-w-[3ch] text-right", children: fmt(value) })
84
- ] }),
85
- showRange && /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[11px] font-mono text-fg-muted", children: [
86
- /* @__PURE__ */ jsx("span", { children: fmt(min) }),
87
- /* @__PURE__ */ jsx("span", { children: fmt(max) })
88
- ] })
89
- ] });
90
- });
82
+ ]
83
+ }
84
+ );
85
+ }
91
86
  export {
92
87
  Slider
93
88
  };
@@ -0,0 +1,19 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface SparklineProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
5
+ /** The series, oldest first. The dot marks the last value. */
6
+ data: number[];
7
+ /** The previous period, drawn dashed behind (Figma: `comparison=true`). Same length as `data` reads best. */
8
+ previous?: number[];
9
+ /** Height in px. The width follows the container. */
10
+ height?: number;
11
+ }
12
+ /**
13
+ * Sparkline — Figma [RDS] Content/Sparkline. The shape of a series in the space of a line, no axes: the trend beside
14
+ * a number. Always aria-hidden: the trend goes into the number's text or a Delta ("subiu 24% na semana").
15
+ * Styles: sparkline.css.
16
+ */
17
+ declare function Sparkline({ data, previous, height, className, style, ...rest }: SparklineProps): react.JSX.Element;
18
+
19
+ export { Sparkline, type SparklineProps };
@@ -0,0 +1,32 @@
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function toPoints(values, min, max, length) {
8
+ const span = max - min || 1;
9
+ const step = length > 1 ? 100 / (length - 1) : 0;
10
+ return values.map((value, index) => ({ x: index * step, y: 100 - (value - min) / span * 100 }));
11
+ }
12
+ const path = (points) => points.map((p, i) => `${i ? "L" : "M"}${p.x.toFixed(2)} ${p.y.toFixed(2)}`).join(" ");
13
+ function Sparkline(_a) {
14
+ var _b = _a, { data, previous, height = 32, className, style } = _b, rest = __objRest(_b, ["data", "previous", "height", "className", "style"]);
15
+ var _a2;
16
+ const all = previous ? [...data, ...previous] : data;
17
+ const min = Math.min(...all);
18
+ const max = Math.max(...all);
19
+ const length = Math.max(data.length, (_a2 = previous == null ? void 0 : previous.length) != null ? _a2 : 0);
20
+ const current = toPoints(data, min, max, length);
21
+ const last = current[current.length - 1];
22
+ return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({ "aria-hidden": "true" }, rest), { className: ["rds-sparkline", className].filter(Boolean).join(" "), style: __spreadValues({ height }, style), children: /* @__PURE__ */ jsxs("div", { className: "rds-sparkline__area", children: [
23
+ /* @__PURE__ */ jsxs("svg", { className: "rds-sparkline__svg", viewBox: "0 0 100 100", preserveAspectRatio: "none", focusable: "false", children: [
24
+ previous && /* @__PURE__ */ jsx("path", { className: "rds-sparkline__previous", d: path(toPoints(previous, min, max, length)) }),
25
+ /* @__PURE__ */ jsx("path", { className: "rds-sparkline__line", d: path(current) })
26
+ ] }),
27
+ last && /* @__PURE__ */ jsx("span", { className: "rds-sparkline__dot", style: { left: `${last.x}%`, top: `${last.y}%` } })
28
+ ] }) }));
29
+ }
30
+ export {
31
+ Sparkline
32
+ };
@@ -1,14 +1,22 @@
1
1
  import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
2
3
 
3
- type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
- type SpinnerColor = 'current' | 'brand' | 'muted' | 'inverse';
5
- interface SpinnerProps {
4
+ type SpinnerSize = 'sm' | 'default' | 'lg';
5
+ type SpinnerTone = 'default' | 'inverse';
6
+ interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
7
+ /** sm 16 (inside a button or field), default 24 (next to text), lg 32 (alone in an empty area). */
6
8
  size?: SpinnerSize;
7
- color?: SpinnerColor;
8
- /** Texto pra leitor de tela. default = "Carregando…". */
9
+ /** default on light surfaces; inverse on the dark brand band or a dark veil. */
10
+ tone?: SpinnerTone;
11
+ /** What is happening (Figma: `label`). Always the accessible name; shown next to the ring with `showLabel`. */
9
12
  label?: string;
10
- className?: string;
13
+ /** Show the label next to the ring (Figma: `showLabel`). */
14
+ showLabel?: boolean;
11
15
  }
12
- declare function Spinner({ size, color, label, className, }: SpinnerProps): react.JSX.Element;
16
+ /**
17
+ * Spinner — Figma [RDS] Indicators/Spinner. A wait without a known end (role="status"): a ring and a turning quarter
18
+ * arc. When the wait can be measured, use the Progress. Styles: spinner.css.
19
+ */
20
+ declare function Spinner({ size, tone, label, showLabel, className, ...rest }: SpinnerProps): react.JSX.Element;
13
21
 
14
- export { Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize };
22
+ export { Spinner, type SpinnerProps, type SpinnerSize, type SpinnerTone };
@@ -1,41 +1,38 @@
1
- import "../chunk-ORMEWXMH.js";
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
2
6
  import { jsx, jsxs } from "react/jsx-runtime";
3
- const SIZE = {
4
- xs: "size-3",
5
- sm: "size-4",
6
- md: "size-5",
7
- lg: "size-6",
8
- xl: "size-8"
9
- };
10
- const COLOR = {
11
- current: "text-current",
12
- brand: "text-brand-primary",
13
- muted: "text-fg-muted",
14
- inverse: "text-fg-inverse"
15
- };
16
- function Spinner({
17
- size = "md",
18
- color = "current",
19
- label = "Carregando\u2026",
20
- className = ""
21
- }) {
22
- return /* @__PURE__ */ jsxs("span", { role: "status", "aria-label": label, className: "inline-flex", children: [
23
- /* @__PURE__ */ jsxs(
24
- "svg",
25
- {
26
- className: ["animate-spin", SIZE[size], COLOR[color], className].join(" "),
27
- xmlns: "http://www.w3.org/2000/svg",
28
- fill: "none",
29
- viewBox: "0 0 24 24",
30
- "aria-hidden": "true",
31
- children: [
32
- /* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3" }),
33
- /* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })
34
- ]
35
- }
36
- ),
37
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
38
- ] });
7
+ function Spinner(_a) {
8
+ var _b = _a, {
9
+ size = "default",
10
+ tone = "default",
11
+ label = "Carregando\u2026",
12
+ showLabel = false,
13
+ className
14
+ } = _b, rest = __objRest(_b, [
15
+ "size",
16
+ "tone",
17
+ "label",
18
+ "showLabel",
19
+ "className"
20
+ ]);
21
+ return /* @__PURE__ */ jsxs(
22
+ "span",
23
+ __spreadProps(__spreadValues({}, rest), {
24
+ role: "status",
25
+ "aria-label": showLabel ? void 0 : label,
26
+ className: ["rds-spinner", `rds-spinner--${size}`, `rds-spinner--${tone}`, className].filter(Boolean).join(" "),
27
+ children: [
28
+ /* @__PURE__ */ jsxs("svg", { className: "rds-spinner__ring", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
29
+ /* @__PURE__ */ jsx("circle", { className: "rds-spinner__track", cx: "12", cy: "12", r: "10.5", fill: "none", strokeWidth: "3" }),
30
+ /* @__PURE__ */ jsx("path", { className: "rds-spinner__indicator", d: "M12 1.5 A10.5 10.5 0 0 1 22.5 12", fill: "none", strokeWidth: "3", strokeLinecap: "round" })
31
+ ] }),
32
+ showLabel && /* @__PURE__ */ jsx("span", { className: "rds-spinner__label", children: label })
33
+ ]
34
+ })
35
+ );
39
36
  }
40
37
  export {
41
38
  Spinner
@@ -0,0 +1,22 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type StarRatingSize = 'sm' | 'default' | 'lg';
5
+ interface StarRatingProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
6
+ /** 0 to 5, rounded to the nearest half (Figma: `value`). */
7
+ value: number;
8
+ /** sm: 16 stars and 12 text; default: 20 and 14; lg: 24 and 14 (Figma: `size`). */
9
+ size?: StarRatingSize;
10
+ /**
11
+ * The written grade, such as the value and how many reviews (Figma: `showLabel` + `label`): "4,5 (128
12
+ * avaliações)". Show it: the yellow star alone has too little contrast to be the only cue.
13
+ */
14
+ label?: ReactNode;
15
+ }
16
+ /**
17
+ * StarRating — Figma [RDS] Indicators/StarRating. The average rating in stars, read only: the stars are one image
18
+ * named "Nota 4,5 de 5". For the person to give a grade, it is another component. Styles: star-rating.css.
19
+ */
20
+ declare function StarRating({ value, size, label, className, ...rest }: StarRatingProps): react.JSX.Element;
21
+
22
+ export { StarRating, type StarRatingProps, type StarRatingSize };
@@ -0,0 +1,25 @@
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { StarFilledIcon, StarIcon } from "./internal/icons.js";
8
+ const format = (n) => n.toLocaleString("pt-BR", { maximumFractionDigits: 1 });
9
+ function StarRating(_a) {
10
+ var _b = _a, { value, size = "default", label, className } = _b, rest = __objRest(_b, ["value", "size", "label", "className"]);
11
+ const rounded = Math.round(Math.min(Math.max(value, 0), 5) * 2) / 2;
12
+ return /* @__PURE__ */ jsxs("span", __spreadProps(__spreadValues({}, rest), { className: ["rds-rating", `rds-rating--${size}`, className].filter(Boolean).join(" "), children: [
13
+ /* @__PURE__ */ jsx("span", { className: "rds-rating__stars", role: "img", "aria-label": `Nota ${format(rounded)} de 5`, children: [1, 2, 3, 4, 5].map((i) => {
14
+ const fill = rounded >= i ? "full" : rounded >= i - 0.5 ? "half" : "empty";
15
+ return /* @__PURE__ */ jsxs("span", { className: `rds-rating__star rds-rating__star--${fill}`, "aria-hidden": "true", children: [
16
+ fill !== "full" && /* @__PURE__ */ jsx("span", { className: "rds-rating__empty", children: /* @__PURE__ */ jsx(StarIcon, {}) }),
17
+ fill !== "empty" && /* @__PURE__ */ jsx("span", { className: "rds-rating__fill", children: /* @__PURE__ */ jsx(StarFilledIcon, {}) })
18
+ ] }, i);
19
+ }) }),
20
+ label && /* @__PURE__ */ jsx("span", { className: "rds-rating__label", children: label })
21
+ ] }));
22
+ }
23
+ export {
24
+ StarRating
25
+ };
@@ -0,0 +1,33 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ /** What the number means: money in (positive), a loss or a lack (negative), a counter that asks for attention, zero. */
5
+ type StatTone = 'default' | 'positive' | 'negative' | 'warning' | 'muted';
6
+ interface StatProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
7
+ /** What is counted (Figma: `label`): "Pedidos no mês". */
8
+ label: ReactNode;
9
+ /** The number, already formatted by the caller (Figma: `value`): "1.284", "R$ 48.320". */
10
+ value: ReactNode;
11
+ /** Paints the number (Figma: `tone`). */
12
+ tone?: StatTone;
13
+ /** A line under the number (Figma: `showCaption` + `caption`): "vs. 1.142 em agosto". */
14
+ caption?: ReactNode;
15
+ /** The change, a Delta beside the number (Figma: `showDelta` + the exposed Delta). */
16
+ delta?: ReactNode;
17
+ /** The trend, a Sparkline under the text (Figma: `showSparkline` + the exposed Sparkline). */
18
+ sparkline?: ReactNode;
19
+ /**
20
+ * On its own card surface with a border (Figma: `framed=true`, the default). Inside a SummaryBar it is false by
21
+ * default: the cell of the strip, no border.
22
+ */
23
+ framed?: boolean;
24
+ }
25
+ /** Set by the SummaryBar: a Stat inside it is a cell (framed=false) unless it says otherwise. */
26
+ declare const StatFramedDefault: react.Context<boolean>;
27
+ /**
28
+ * Stat — Figma [RDS] Content/Stat. A number that matters, with its label, the change (Delta) and, when it helps,
29
+ * the trend (Sparkline). Alone it is a card; in a SummaryBar it is a cell. Styles: stat.css.
30
+ */
31
+ declare function Stat({ label, value, tone, caption, delta, sparkline, framed, className, ...rest }: StatProps): react.JSX.Element;
32
+
33
+ export { Stat, StatFramedDefault, type StatProps, type StatTone };
@@ -0,0 +1,29 @@
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 { createContext, useContext } from "react";
9
+ const StatFramedDefault = createContext(true);
10
+ function Stat(_a) {
11
+ var _b = _a, { label, value, tone = "default", caption, delta, sparkline, framed, className } = _b, rest = __objRest(_b, ["label", "value", "tone", "caption", "delta", "sparkline", "framed", "className"]);
12
+ const framedDefault = useContext(StatFramedDefault);
13
+ const isFramed = framed != null ? framed : framedDefault;
14
+ return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({}, rest), { className: ["rds-stat", `rds-stat--${tone}`, isFramed && "rds-stat--framed", className].filter(Boolean).join(" "), children: [
15
+ /* @__PURE__ */ jsxs("div", { className: "rds-stat__pair", children: [
16
+ /* @__PURE__ */ jsx("span", { className: "rds-stat__label", children: label }),
17
+ /* @__PURE__ */ jsxs("span", { className: "rds-stat__row", children: [
18
+ /* @__PURE__ */ jsx("span", { className: "rds-stat__value", children: value }),
19
+ delta
20
+ ] }),
21
+ caption && /* @__PURE__ */ jsx("span", { className: "rds-stat__caption", children: caption })
22
+ ] }),
23
+ sparkline
24
+ ] }));
25
+ }
26
+ export {
27
+ Stat,
28
+ StatFramedDefault
29
+ };
@@ -0,0 +1,27 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type StatusTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
5
+ /**
6
+ * Figma calls this property `style`: outline (white pill with a hairline, for coloured bands), soft (light plate
7
+ * with the tone's dark text, for dark backgrounds), fill (the tone's plate, for neutral backgrounds).
8
+ */
9
+ type StatusVariant = 'outline' | 'soft' | 'fill';
10
+ type StatusSize = 'default' | 'sm';
11
+ interface StatusProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
12
+ /** The state, in one or two words (Figma: `label`). The text says the state; the dot only adds colour. */
13
+ children: ReactNode;
14
+ /** neutral (a record: draft, closed), info (in progress), success (done), warning (pending), danger (failed). */
15
+ tone?: StatusTone;
16
+ variant?: StatusVariant;
17
+ /** default 32 tall; sm 24 (dot 6), for narrow cards and table rows. */
18
+ size?: StatusSize;
19
+ }
20
+ /**
21
+ * Status — Figma [RDS] Indicators/Status. A state that changes over time ("Em análise", "Concluído"): a pill with a
22
+ * dot and the word. A fixed attribute is a Badge. When it changes without a reload, put aria-live="polite" on the
23
+ * surrounding region, not here. Styles: status.css.
24
+ */
25
+ declare function Status({ tone, variant, size, children, className, ...rest }: StatusProps): react.JSX.Element;
26
+
27
+ export { Status, type StatusProps, type StatusSize, type StatusTone, type StatusVariant };
@@ -0,0 +1,34 @@
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function Status(_a) {
8
+ var _b = _a, {
9
+ tone = "neutral",
10
+ variant = "outline",
11
+ size = "default",
12
+ children,
13
+ className
14
+ } = _b, rest = __objRest(_b, [
15
+ "tone",
16
+ "variant",
17
+ "size",
18
+ "children",
19
+ "className"
20
+ ]);
21
+ return /* @__PURE__ */ jsxs(
22
+ "span",
23
+ __spreadProps(__spreadValues({}, rest), {
24
+ className: ["rds-status", `rds-status--${tone}-${variant}`, `rds-status--${size}`, className].filter(Boolean).join(" "),
25
+ children: [
26
+ /* @__PURE__ */ jsx("span", { className: "rds-status__dot", "aria-hidden": "true" }),
27
+ children
28
+ ]
29
+ })
30
+ );
31
+ }
32
+ export {
33
+ Status
34
+ };
@@ -1,12 +1,19 @@
1
1
  import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
2
3
 
3
- interface StepProgressProps {
4
- /** Zero-based current step index */
5
- current: number;
6
- /** Total number of steps */
4
+ interface StepProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
5
+ /** The step the person is on, from 1 (Figma: `step`, "2 of 4"). */
6
+ step: number;
7
+ /** How many steps the flow has (Figma: the "of 4"). */
7
8
  total: number;
8
- className?: string;
9
+ /** The bar's name for screen readers: what the flow is. */
10
+ 'aria-label'?: string;
9
11
  }
10
- declare function StepProgress({ current, total, className }: StepProgressProps): react.JSX.Element;
12
+ /**
13
+ * StepProgress — Figma [RDS] Indicators/StepProgress. The thin bar of a flow in steps (sign-up, onboarding): how much
14
+ * is done. It has no text; "Passo 2 de 4" goes outside, in the title. Read as a progressbar, "Passo 2 de 4".
15
+ * Named steps are the Stepper. Styles: step-progress.css.
16
+ */
17
+ declare function StepProgress({ step, total, className, 'aria-label': ariaLabel, ...rest }: StepProgressProps): react.JSX.Element;
11
18
 
12
19
  export { StepProgress, type StepProgressProps };
@@ -1,23 +1,25 @@
1
- import "../chunk-ORMEWXMH.js";
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
2
6
  import { jsx } from "react/jsx-runtime";
3
- function StepProgress({ current, total, className = "" }) {
4
- const pct = Math.round((current + 1) / total * 100);
7
+ function StepProgress(_a) {
8
+ var _b = _a, { step, total, className, "aria-label": ariaLabel = "Progresso" } = _b, rest = __objRest(_b, ["step", "total", "className", "aria-label"]);
9
+ const safeTotal = Math.max(1, total);
10
+ const current = Math.min(Math.max(step, 0), safeTotal);
5
11
  return /* @__PURE__ */ jsx(
6
12
  "div",
7
- {
8
- className: ["w-full h-1.5 rounded-full overflow-hidden [background:var(--border-subtle)]", className].join(" "),
13
+ __spreadProps(__spreadValues({}, rest), {
14
+ className: ["rds-step-progress", className].filter(Boolean).join(" "),
9
15
  role: "progressbar",
10
- "aria-valuenow": current + 1,
11
- "aria-valuemin": 1,
12
- "aria-valuemax": total,
13
- children: /* @__PURE__ */ jsx(
14
- "div",
15
- {
16
- className: "h-full rounded-full transition-all duration-300 ease-out [background:var(--brand-primary)]",
17
- style: { width: `${pct}%` }
18
- }
19
- )
20
- }
16
+ "aria-label": ariaLabel,
17
+ "aria-valuenow": current,
18
+ "aria-valuemin": 0,
19
+ "aria-valuemax": safeTotal,
20
+ "aria-valuetext": `Passo ${current} de ${safeTotal}`,
21
+ children: /* @__PURE__ */ jsx("div", { className: "rds-step-progress__fill", style: { width: `${current / safeTotal * 100}%` } })
22
+ })
21
23
  );
22
24
  }
23
25
  export {