@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,21 +1,16 @@
1
1
  import * as react from 'react';
2
- import { TextareaHTMLAttributes } from 'react';
2
+ import { ComponentPropsWithRef } from 'react';
3
+ import { FieldTextProps } from './internal/field.js';
3
4
 
4
- interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
5
- label?: string;
6
- helper?: string;
7
- error?: string;
8
- required?: boolean;
9
- optional?: boolean;
10
- /** Auto-cresce conforme conteúdo (sem scroll bar interna). default = false. */
11
- autoResize?: boolean;
12
- /** Conta caracteres (mostra "X/Y" se maxLength definido). */
13
- showCount?: boolean;
14
- /** Min rows quando autoResize. default = 3. */
15
- minRows?: number;
16
- /** Max rows quando autoResize (cap pra evitar crescer infinito). default = 10. */
17
- maxRows?: number;
5
+ interface TextareaProps extends FieldTextProps, Omit<ComponentPropsWithRef<'textarea'>, 'children'> {
6
+ /** Visible lines at first (3 to 5 fits most). Never under 2. The person can make it taller. */
7
+ rows?: number;
18
8
  }
19
- declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
9
+ /**
10
+ * Textarea — Figma [RDS] Forms/Textarea. A multi-line text field with its own label, hint and error; same
11
+ * model and spacing as the Input. The text is the native value (Figma: `content`). Styles: textarea.css
12
+ * and internal/field.css.
13
+ */
14
+ declare function Textarea({ label, labelPosition, hint, error, errorMessage, required, id, disabled, rows, className, style, ...textarea }: TextareaProps): react.JSX.Element;
20
15
 
21
16
  export { Textarea, type TextareaProps };
@@ -1,111 +1,75 @@
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, useEffect, useRef } from "react";
8
- const Textarea = forwardRef(function Textarea2(_a, ref) {
8
+ import { FieldShell, hasContent, useFieldIds, warnIfUnlabelled } from "./internal/field.js";
9
+ function Textarea(_a) {
9
10
  var _b = _a, {
10
11
  label,
11
- helper,
12
+ labelPosition,
13
+ hint,
12
14
  error,
15
+ errorMessage,
13
16
  required,
14
- optional,
15
- autoResize = false,
16
- showCount,
17
- minRows = 3,
18
- maxRows = 10,
19
- className = "",
20
17
  id,
21
- rows,
22
- value,
23
- defaultValue,
24
- maxLength,
25
- onChange
26
- } = _b, props = __objRest(_b, [
18
+ disabled,
19
+ rows = 3,
20
+ className,
21
+ style
22
+ } = _b, textarea = __objRest(_b, [
27
23
  "label",
28
- "helper",
24
+ "labelPosition",
25
+ "hint",
29
26
  "error",
27
+ "errorMessage",
30
28
  "required",
31
- "optional",
32
- "autoResize",
33
- "showCount",
34
- "minRows",
35
- "maxRows",
36
- "className",
37
29
  "id",
30
+ "disabled",
38
31
  "rows",
39
- "value",
40
- "defaultValue",
41
- "maxLength",
42
- "onChange"
32
+ "className",
33
+ "style"
43
34
  ]);
44
- const generatedId = useId();
45
- const textareaId = id != null ? id : generatedId;
46
- const internalRef = useRef(null);
47
- function setRef(el) {
48
- internalRef.current = el;
49
- if (typeof ref === "function") ref(el);
50
- else if (ref) ref.current = el;
51
- }
52
- function adjust() {
53
- const el = internalRef.current;
54
- if (!el || !autoResize) return;
55
- el.style.height = "auto";
56
- const lineHeight = parseFloat(getComputedStyle(el).lineHeight || "20");
57
- const maxH = lineHeight * maxRows + 24;
58
- el.style.height = `${Math.min(el.scrollHeight, maxH)}px`;
59
- el.style.overflowY = el.scrollHeight > maxH ? "auto" : "hidden";
60
- }
61
- useEffect(() => {
62
- adjust();
63
- }, [value, autoResize]);
64
- function handleChange(e) {
65
- onChange == null ? void 0 : onChange(e);
66
- if (autoResize) adjust();
67
- }
68
- const currentLength = typeof value === "string" ? value.length : typeof defaultValue === "string" ? defaultValue.length : 0;
69
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 w-full", children: [
70
- label && /* @__PURE__ */ jsxs("label", { htmlFor: textareaId, className: "inline-flex items-center gap-1 text-label font-medium text-fg-primary", children: [
71
- /* @__PURE__ */ jsx("span", { children: label }),
72
- required && /* @__PURE__ */ jsx("span", { className: "text-danger", "aria-label": "obrigat\xF3rio", children: "*" }),
73
- optional && !required && /* @__PURE__ */ jsx("span", { className: "text-fg-muted font-normal", children: "(opcional)" })
74
- ] }),
75
- /* @__PURE__ */ jsx(
76
- "textarea",
77
- __spreadValues({
78
- ref: setRef,
79
- id: textareaId,
80
- rows: rows != null ? rows : minRows,
81
- value,
82
- defaultValue,
83
- maxLength,
84
- required,
85
- onChange: handleChange,
86
- className: [
87
- "w-full px-3 py-2 rounded-(--radius-control) text-label",
88
- "bg-surface-default text-fg-primary placeholder:text-fg-placeholder",
89
- "border transition-colors outline-none",
90
- autoResize ? "resize-none overflow-hidden" : "resize-y",
91
- error ? "border-danger focus:border-danger focus:ring-2 focus:ring-danger/20" : "border-stroke-control focus:border-stroke-focus focus:ring-2 focus:ring-stroke-focus/20",
92
- "disabled:opacity-50 disabled:cursor-not-allowed disabled:resize-none",
93
- className
94
- ].filter(Boolean).join(" "),
95
- "aria-invalid": error ? true : void 0,
96
- "aria-describedby": error ? `${textareaId}-error` : helper ? `${textareaId}-helper` : void 0
97
- }, props)
98
- ),
99
- (error || helper || showCount && maxLength) && /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
100
- error ? /* @__PURE__ */ jsx("p", { id: `${textareaId}-error`, className: "text-caption text-danger-text flex-1", children: error }) : helper ? /* @__PURE__ */ jsx("p", { id: `${textareaId}-helper`, className: "text-caption text-fg-muted flex-1", children: helper }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }),
101
- showCount && maxLength && /* @__PURE__ */ jsxs("span", { className: "text-caption text-fg-muted tabular-nums shrink-0", children: [
102
- currentLength,
103
- "/",
104
- maxLength
105
- ] })
106
- ] })
107
- ] });
108
- });
35
+ warnIfUnlabelled("Textarea", label, textarea["aria-label"], textarea["aria-labelledby"]);
36
+ const { controlId, hintId, errorId, invalid, describedBy } = useFieldIds(id, hint, error, errorMessage);
37
+ const floating = labelPosition === "floating" && hasContent(label);
38
+ return /* @__PURE__ */ jsxs(
39
+ FieldShell,
40
+ {
41
+ kind: "rds-textarea",
42
+ controlId,
43
+ hintId,
44
+ errorId,
45
+ label,
46
+ labelPosition,
47
+ hint,
48
+ errorMessage,
49
+ invalid,
50
+ required,
51
+ disabled,
52
+ className,
53
+ style,
54
+ children: [
55
+ /* @__PURE__ */ jsx(
56
+ "textarea",
57
+ __spreadProps(__spreadValues({}, textarea), {
58
+ id: controlId,
59
+ className: "rds-field__control rds-textarea__control",
60
+ rows: Math.max(2, rows),
61
+ required,
62
+ disabled,
63
+ "aria-invalid": invalid || void 0,
64
+ "aria-describedby": [describedBy, textarea["aria-describedby"]].filter(Boolean).join(" ") || void 0,
65
+ placeholder: floating ? " " : textarea.placeholder
66
+ })
67
+ ),
68
+ /* @__PURE__ */ jsx("svg", { className: "rds-textarea__grip", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: /* @__PURE__ */ jsx("path", { d: "M13 6 6 13M13 10l-3 3" }) })
69
+ ]
70
+ }
71
+ );
72
+ }
109
73
  export {
110
74
  Textarea
111
75
  };
@@ -0,0 +1,24 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type TileTone = 'action' | 'neutral' | 'info' | 'success' | 'warning' | 'danger';
5
+ /** Figma calls this property `style`; here it is `variant` because `style` belongs to React. */
6
+ type TileVariant = 'fill' | 'soft';
7
+ type TileSize = 'sm' | 'default' | 'lg';
8
+ interface TileProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
9
+ /** The icon (Figma: `icon`), an inline SVG. The Tile sizes it: 16, 24 or 32. */
10
+ icon: ReactNode;
11
+ /** action is the brand; the others follow feedback: success only for what went right, danger for what went wrong. */
12
+ tone?: TileTone;
13
+ /** fill is strong; soft is light, with the icon in the tone's colour (Figma: `style`). Same variant across a list. */
14
+ variant?: TileVariant;
15
+ /** sm 32, default 48, lg 64. */
16
+ size?: TileSize;
17
+ }
18
+ /**
19
+ * Tile — Figma [RDS] Content/Tile. An icon with weight, in a circle: a benefit in a list, a card's header, the top
20
+ * of an empty state. Decorative (aria-hidden): the text beside it says what it is. Not clickable. Styles: tile.css.
21
+ */
22
+ declare function Tile({ icon, tone, variant, size, className, ...rest }: TileProps): react.JSX.Element;
23
+
24
+ export { Tile, type TileProps, type TileSize, type TileTone, type TileVariant };
@@ -0,0 +1,21 @@
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../chunk-ORMEWXMH.js";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function Tile(_a) {
8
+ var _b = _a, { icon, tone = "action", variant = "fill", size = "default", className } = _b, rest = __objRest(_b, ["icon", "tone", "variant", "size", "className"]);
9
+ return /* @__PURE__ */ jsx(
10
+ "span",
11
+ __spreadProps(__spreadValues({
12
+ "aria-hidden": "true"
13
+ }, rest), {
14
+ className: ["rds-tile", `rds-tile--${tone}-${variant}`, `rds-tile--${size}`, className].filter(Boolean).join(" "),
15
+ children: icon
16
+ })
17
+ );
18
+ }
19
+ export {
20
+ Tile
21
+ };
@@ -1,34 +1,49 @@
1
1
  import * as react from 'react';
2
+ import { CSSProperties } from 'react';
3
+ import { FieldTextProps } from './internal/field.js';
2
4
 
3
- /**
4
- * TimePicker — input de hora (HH:mm) com popover de seletor.
5
- *
6
- * Uso:
7
- * <TimePicker value="09:30" onChange={setTime} />
8
- * <TimePicker value={null} onChange={setTime} step={15} /> // múltiplos de 15min
9
- * <TimePicker value="14:00" onChange={setTime} format="12h" />
10
- *
11
- * Valor é string "HH:mm" (24h) ou null. Lib calling code converte se precisar Date.
12
- * Confirma via botão "OK". ESC e clique fora descartam o rascunho.
13
- */
14
- interface TimePickerProps {
15
- value: string | null;
16
- onChange: (time: string | null) => void;
17
- /** Step de minutos. default = 1. Use 5/15/30 pra agendamentos. */
5
+ type TimeFormat = '24h' | '12h';
6
+ interface TimePickerProps extends FieldTextProps {
7
+ /** Controlled: the time, "HH:mm" in 24 h, or null for none (Figma: the Input's `text`). */
8
+ value?: string | null;
9
+ /** Uncontrolled: the time at first. */
10
+ defaultValue?: string | null;
11
+ /** Called with "HH:mm" (24 h) when a valid time is typed or chosen, and with null when the field is emptied. */
12
+ onChange?: (time: string | null) => void;
13
+ /** The list's step, in minutes: 5, 15 or 30 as the schedule asks. Typing takes any minute. */
18
14
  step?: number;
19
- /** Formato exibido. default = '24h'. */
20
- format?: '24h' | '12h';
21
- placeholder?: string;
22
- size?: 'sm' | 'md';
23
- width?: 'full' | 'hug';
24
- disabled?: boolean;
25
- /** Hora mínima permitida ("HH:mm"). */
15
+ /** "HH:mm" (24 h): the earliest time, in the list and when typing. */
26
16
  min?: string;
27
- /** Hora máxima permitida ("HH:mm"). */
17
+ /** "HH:mm" (24 h): the latest time, in the list and when typing. */
28
18
  max?: string;
19
+ /** How the time shows: 24h (default) or 12h ("02:30 PM"). The value is always 24 h. */
20
+ format?: TimeFormat;
21
+ /** What shows in the empty field. */
22
+ placeholder?: string;
23
+ /** The message when the typed time does not exist or is out of min and max. */
24
+ invalidMessage?: string;
25
+ /** The form field name: a hidden input carries "HH:mm". */
26
+ name?: string;
27
+ disabled?: boolean;
28
+ id?: string;
29
29
  className?: string;
30
+ style?: CSSProperties;
31
+ /** The name when there is no visible label. */
30
32
  'aria-label'?: string;
33
+ 'aria-labelledby'?: string;
31
34
  }
32
- declare const TimePicker: react.ForwardRefExoticComponent<TimePickerProps & react.RefAttributes<HTMLButtonElement>>;
35
+ /** "9:30", "09:30", "0930", "2:30 pm" → "HH:mm" (24 h), or null. */
36
+ declare function parseTime(text: string): string | null;
37
+ /** "HH:mm" as it shows: the same in 24 h, "02:30 PM" in 12 h. */
38
+ declare function formatTime(time: string, format?: TimeFormat): string;
39
+ /**
40
+ * TimePicker — Figma [RDS] Forms/TimePicker. A time field that takes typing (HH:mm, the colon comes by itself) and
41
+ * opens the list of times in the chosen step (Figma: menu=open). It is the Input with the clock at the end and the
42
+ * Listbox under it (ARIA combobox), as the DatePicker is the Input with the Calendar: the focus stays in the field,
43
+ * the arrows walk the list, Enter chooses and Escape closes without changing. No tokens of its own (--input-*,
44
+ * --listbox-*). A date is the DatePicker; a duration, the NumberInput. Styles: time-picker.css,
45
+ * internal/field.css and internal/listbox.css.
46
+ */
47
+ declare function TimePicker({ label, labelPosition, hint, error, errorMessage, required, value, defaultValue, onChange, step, min, max, format, placeholder, invalidMessage, name, disabled, id, className, style, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, }: TimePickerProps): react.JSX.Element;
33
48
 
34
- export { TimePicker, type TimePickerProps };
49
+ export { type TimeFormat, TimePicker, type TimePickerProps, formatTime, parseTime };