@1doc/1ds-react 2.7.2 → 2.9.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 (302) hide show
  1. package/CHANGELOG.md +1280 -0
  2. package/dist/components/AIContent/AIContent.d.ts +10 -0
  3. package/dist/components/AIContent/AIContent.js +1 -1
  4. package/dist/components/AILabel/AILabel.d.ts +4 -0
  5. package/dist/components/AILabel/AILabel.js +2 -2
  6. package/dist/components/Accordion/Accordion.d.ts +6 -2
  7. package/dist/components/Alert/Alert.css +2 -0
  8. package/dist/components/Alert/Alert.d.ts +3 -1
  9. package/dist/components/Alert/Alert.js +7 -1
  10. package/dist/components/AppHeader/AppHeader.css +82 -8
  11. package/dist/components/AppHeader/AppHeader.d.ts +12 -1
  12. package/dist/components/AppHeader/AppHeader.js +186 -1
  13. package/dist/components/AppNavItem/AppNavItem.css +11 -3
  14. package/dist/components/AppShell/AppShell.css +9 -0
  15. package/dist/components/AppShell/AppShell.d.ts +8 -0
  16. package/dist/components/AppShell/AppShell.js +4 -1
  17. package/dist/components/AppSidebar/AppSidebar.css +1 -1
  18. package/dist/components/AppSidebar/AppSidebar.d.ts +4 -0
  19. package/dist/components/AppSidebar/AppSidebar.js +3 -1
  20. package/dist/components/AttachmentCard/AttachmentCard.css +17 -1
  21. package/dist/components/AttachmentCard/AttachmentCard.d.ts +29 -2
  22. package/dist/components/AttachmentCard/AttachmentCard.js +88 -20
  23. package/dist/components/Avatar/Avatar.css +7 -2
  24. package/dist/components/Avatar/AvatarGroup.d.ts +27 -0
  25. package/dist/components/Avatar/AvatarGroup.js +28 -4
  26. package/dist/components/Badge/Badge.css +61 -3
  27. package/dist/components/Badge/Badge.d.ts +14 -4
  28. package/dist/components/Badge/Badge.js +1 -0
  29. package/dist/components/BottomSheet/BottomSheet.css +1 -0
  30. package/dist/components/BottomSheet/BottomSheet.d.ts +8 -0
  31. package/dist/components/BottomSheet/BottomSheet.js +14 -2
  32. package/dist/components/Box/Box.css +83 -0
  33. package/dist/components/Box/Box.d.ts +82 -2
  34. package/dist/components/Box/Box.js +42 -2
  35. package/dist/components/Button/Button.css +29 -0
  36. package/dist/components/Button/Button.d.ts +4 -4
  37. package/dist/components/Button/Button.js +4 -1
  38. package/dist/components/Calendar/Calendar.css +245 -0
  39. package/dist/components/Calendar/Calendar.d.ts +125 -0
  40. package/dist/components/Calendar/Calendar.js +320 -0
  41. package/dist/components/Chart/BarChart.d.ts +6 -0
  42. package/dist/components/Chart/BarChart.js +3 -1
  43. package/dist/components/Chart/LineChart.d.ts +6 -0
  44. package/dist/components/Chart/LineChart.js +3 -1
  45. package/dist/components/Checkbox/Checkbox.css +4 -1
  46. package/dist/components/Chips/Chips.css +39 -0
  47. package/dist/components/Chips/Chips.d.ts +7 -2
  48. package/dist/components/Chips/Chips.js +6 -2
  49. package/dist/components/Coachmark/Coachmark.css +118 -0
  50. package/dist/components/Coachmark/Coachmark.d.ts +75 -0
  51. package/dist/components/Coachmark/Coachmark.js +321 -0
  52. package/dist/components/CodeBlock/CodeBlock.css +96 -0
  53. package/dist/components/CodeBlock/CodeBlock.d.ts +47 -0
  54. package/dist/components/CodeBlock/CodeBlock.js +103 -0
  55. package/dist/components/ColorPicker/ColorPicker.css +133 -0
  56. package/dist/components/ColorPicker/ColorPicker.d.ts +73 -0
  57. package/dist/components/ColorPicker/ColorPicker.js +219 -0
  58. package/dist/components/Combobox/Combobox.css +11 -3
  59. package/dist/components/ConfirmAIAction/ConfirmAIAction.d.ts +11 -1
  60. package/dist/components/ConfirmAIAction/ConfirmAIAction.js +6 -1
  61. package/dist/components/ConfirmDialog/ConfirmDialog.css +3 -0
  62. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +14 -0
  63. package/dist/components/ConfirmDialog/ConfirmDialog.js +2 -2
  64. package/dist/components/DataTable/DataTable.css +80 -0
  65. package/dist/components/DataTable/DataTable.d.ts +23 -4
  66. package/dist/components/DataTable/DataTable.js +61 -15
  67. package/dist/components/DatePicker/DatePicker.css +8 -0
  68. package/dist/components/DatePicker/DatePicker.d.ts +4 -0
  69. package/dist/components/DatePicker/DatePicker.js +14 -1
  70. package/dist/components/DescriptionList/DescriptionList.css +113 -0
  71. package/dist/components/DescriptionList/DescriptionList.d.ts +59 -0
  72. package/dist/components/DescriptionList/DescriptionList.js +51 -0
  73. package/dist/components/Drawer/Drawer.css +1 -0
  74. package/dist/components/Dropdown/Dropdown.js +47 -29
  75. package/dist/components/FileInput/FileInput.css +24 -4
  76. package/dist/components/FileInput/FileInput.d.ts +22 -2
  77. package/dist/components/FileInput/FileInput.js +23 -2
  78. package/dist/components/Grid/Grid.js +5 -5
  79. package/dist/components/IconPicker/IconPicker.css +107 -0
  80. package/dist/components/IconPicker/IconPicker.d.ts +74 -0
  81. package/dist/components/IconPicker/IconPicker.js +194 -0
  82. package/dist/components/Input/Input.css +41 -3
  83. package/dist/components/Input/Input.d.ts +14 -1
  84. package/dist/components/Input/Input.js +72 -6
  85. package/dist/components/Kanban/Kanban.css +5 -0
  86. package/dist/components/Kanban/Kanban.d.ts +41 -0
  87. package/dist/components/Kanban/Kanban.js +59 -27
  88. package/dist/components/Kanban/KanbanCard.d.ts +2 -0
  89. package/dist/components/Kanban/KanbanCard.js +1 -1
  90. package/dist/components/Kanban/KanbanColumn.d.ts +2 -0
  91. package/dist/components/Kanban/KanbanColumn.js +3 -0
  92. package/dist/components/Kbd/Kbd.css +66 -0
  93. package/dist/components/Kbd/Kbd.d.ts +32 -0
  94. package/dist/components/Kbd/Kbd.js +40 -0
  95. package/dist/components/Link/Link.css +1 -1
  96. package/dist/components/List/List.css +136 -0
  97. package/dist/components/List/List.d.ts +82 -0
  98. package/dist/components/List/List.js +53 -0
  99. package/dist/components/List/ListItem.d.ts +85 -0
  100. package/dist/components/List/ListItem.js +81 -0
  101. package/dist/components/Modal/Modal.css +93 -8
  102. package/dist/components/Modal/Modal.d.ts +45 -7
  103. package/dist/components/Modal/Modal.js +106 -6
  104. package/dist/components/MultiSelect/MultiSelect.css +9 -1
  105. package/dist/components/MultiSelect/MultiSelect.js +45 -8
  106. package/dist/components/OrgChart/OrgChart.css +149 -0
  107. package/dist/components/OrgChart/OrgChart.d.ts +83 -0
  108. package/dist/components/OrgChart/OrgChart.js +297 -0
  109. package/dist/components/OtpInput/OtpInput.css +93 -0
  110. package/dist/components/OtpInput/OtpInput.d.ts +60 -0
  111. package/dist/components/OtpInput/OtpInput.js +215 -0
  112. package/dist/components/Pagination/Pagination.d.ts +6 -0
  113. package/dist/components/Pagination/Pagination.js +9 -1
  114. package/dist/components/PhoneInput/PhoneInput.css +9 -1
  115. package/dist/components/PhoneInput/PhoneInput.d.ts +10 -0
  116. package/dist/components/PhoneInput/PhoneInput.js +20 -3
  117. package/dist/components/Popover/Popover.d.ts +7 -0
  118. package/dist/components/Popover/Popover.js +11 -1
  119. package/dist/components/RichTextEditor/RichTextEditor.css +203 -0
  120. package/dist/components/RichTextEditor/RichTextEditor.d.ts +83 -0
  121. package/dist/components/RichTextEditor/RichTextEditor.js +494 -0
  122. package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -0
  123. package/dist/components/SegmentedControl/SegmentedControl.js +21 -8
  124. package/dist/components/Select/Select.css +71 -1
  125. package/dist/components/Select/Select.d.ts +12 -0
  126. package/dist/components/Select/Select.js +93 -10
  127. package/dist/components/SidePanel/SidePanel.css +4 -4
  128. package/dist/components/SidePanelItem/SidePanelItem.css +7 -5
  129. package/dist/components/SidePanelSearch/SidePanelSearch.css +2 -2
  130. package/dist/components/SidePanelSection/SidePanelSection.css +7 -5
  131. package/dist/components/Stack/Stack.css +49 -0
  132. package/dist/components/Stack/Stack.d.ts +65 -7
  133. package/dist/components/Stack/Stack.js +30 -2
  134. package/dist/components/StatCard/StatCard.css +73 -0
  135. package/dist/components/StatCard/StatCard.d.ts +17 -0
  136. package/dist/components/StatCard/StatCard.js +4 -1
  137. package/dist/components/Stepper/Stepper.css +4 -1
  138. package/dist/components/Stepper/Stepper.d.ts +8 -0
  139. package/dist/components/Stepper/Stepper.js +4 -4
  140. package/dist/components/Switch/Switch.css +1 -0
  141. package/dist/components/Tabs/Tab.d.ts +15 -0
  142. package/dist/components/Tabs/Tab.js +30 -1
  143. package/dist/components/Tabs/Tabs.css +132 -0
  144. package/dist/components/Tabs/Tabs.d.ts +7 -0
  145. package/dist/components/Tabs/Tabs.js +13 -2
  146. package/dist/components/Tag/Tag.css +85 -2
  147. package/dist/components/Tag/Tag.d.ts +13 -6
  148. package/dist/components/Tag/Tag.js +1 -0
  149. package/dist/components/Text/Text.d.ts +9 -1
  150. package/dist/components/Text/Text.js +2 -2
  151. package/dist/components/Textarea/Textarea.css +11 -3
  152. package/dist/components/TimePicker/TimePicker.css +8 -0
  153. package/dist/components/TimePicker/TimePicker.d.ts +6 -0
  154. package/dist/components/TimePicker/TimePicker.js +1 -1
  155. package/dist/components/Tooltip/Tooltip.css +40 -0
  156. package/dist/components/Tooltip/Tooltip.d.ts +11 -0
  157. package/dist/components/Tooltip/Tooltip.js +114 -11
  158. package/dist/index.d.ts +25 -0
  159. package/dist/index.js +14 -0
  160. package/dist/teste/AILabel.test.d.ts +1 -0
  161. package/dist/teste/AILabel.test.js +33 -0
  162. package/dist/teste/AccordionConteudoLivre.test.d.ts +1 -0
  163. package/dist/teste/AccordionConteudoLivre.test.js +29 -0
  164. package/dist/teste/Alert.test.d.ts +1 -0
  165. package/dist/teste/Alert.test.js +27 -0
  166. package/dist/teste/AtributosRepassados.test.d.ts +1 -0
  167. package/dist/teste/AtributosRepassados.test.js +52 -0
  168. package/dist/teste/AttachmentCardIA.test.d.ts +1 -0
  169. package/dist/teste/AttachmentCardIA.test.js +89 -0
  170. package/dist/teste/AvatarGroupOverlap.test.d.ts +1 -0
  171. package/dist/teste/AvatarGroupOverlap.test.js +56 -0
  172. package/dist/teste/BadgeTag.test.d.ts +1 -0
  173. package/dist/teste/BadgeTag.test.js +42 -0
  174. package/dist/teste/BottomSheet.test.d.ts +1 -0
  175. package/dist/teste/BottomSheet.test.js +23 -0
  176. package/dist/teste/BoxItemFlex.test.d.ts +1 -0
  177. package/dist/teste/BoxItemFlex.test.js +54 -0
  178. package/dist/teste/BoxLayout.test.d.ts +1 -0
  179. package/dist/teste/BoxLayout.test.js +35 -0
  180. package/dist/teste/Button.test.d.ts +1 -0
  181. package/dist/teste/Button.test.js +27 -0
  182. package/dist/teste/Calendar.test.d.ts +1 -0
  183. package/dist/teste/Calendar.test.js +221 -0
  184. package/dist/teste/ChipsXs.test.d.ts +1 -0
  185. package/dist/teste/ChipsXs.test.js +31 -0
  186. package/dist/teste/Coachmark.test.d.ts +1 -0
  187. package/dist/teste/Coachmark.test.js +149 -0
  188. package/dist/teste/ColorPicker.test.d.ts +1 -0
  189. package/dist/teste/ColorPicker.test.js +132 -0
  190. package/dist/teste/ConfirmAIAction.test.d.ts +1 -0
  191. package/dist/teste/ConfirmAIAction.test.js +33 -0
  192. package/dist/teste/DataTableCelulaLivre.test.d.ts +1 -0
  193. package/dist/teste/DataTableCelulaLivre.test.js +76 -0
  194. package/dist/teste/DataTableDocumento.test.d.ts +1 -0
  195. package/dist/teste/DataTableDocumento.test.js +92 -0
  196. package/dist/teste/DatePicker.test.js +23 -0
  197. package/dist/teste/Dropdown.test.js +111 -0
  198. package/dist/teste/FileInputTrigger.test.d.ts +1 -0
  199. package/dist/teste/FileInputTrigger.test.js +53 -0
  200. package/dist/teste/IconPicker.test.d.ts +1 -0
  201. package/dist/teste/IconPicker.test.js +130 -0
  202. package/dist/teste/InputMascaraEAfins.test.d.ts +1 -0
  203. package/dist/teste/InputMascaraEAfins.test.js +99 -0
  204. package/dist/teste/KbdCodeBlock.test.d.ts +1 -0
  205. package/dist/teste/KbdCodeBlock.test.js +95 -0
  206. package/dist/teste/List.test.d.ts +1 -0
  207. package/dist/teste/List.test.js +153 -0
  208. package/dist/teste/Modal.test.d.ts +1 -0
  209. package/dist/teste/Modal.test.js +26 -0
  210. package/dist/teste/ModalVariantes.test.d.ts +1 -0
  211. package/dist/teste/ModalVariantes.test.js +151 -0
  212. package/dist/teste/MultiSelectErro.test.d.ts +1 -0
  213. package/dist/teste/MultiSelectErro.test.js +62 -0
  214. package/dist/teste/NomeAcessivelSsr.test.d.ts +1 -0
  215. package/dist/teste/NomeAcessivelSsr.test.js +88 -0
  216. package/dist/teste/OrgChart.test.d.ts +1 -0
  217. package/dist/teste/OrgChart.test.js +162 -0
  218. package/dist/teste/OtpInput.test.d.ts +1 -0
  219. package/dist/teste/OtpInput.test.js +143 -0
  220. package/dist/teste/PopoverMaxHeight.test.d.ts +1 -0
  221. package/dist/teste/PopoverMaxHeight.test.js +38 -0
  222. package/dist/teste/RichTextEditor.test.d.ts +1 -0
  223. package/dist/teste/RichTextEditor.test.js +287 -0
  224. package/dist/teste/RotulosTraduziveis.test.d.ts +1 -0
  225. package/dist/teste/RotulosTraduziveis.test.js +405 -0
  226. package/dist/teste/SegmentedControl.test.js +33 -0
  227. package/dist/teste/Select.test.d.ts +1 -0
  228. package/dist/teste/Select.test.js +62 -0
  229. package/dist/teste/SelectPlacementFiltro.test.d.ts +1 -0
  230. package/dist/teste/SelectPlacementFiltro.test.js +88 -0
  231. package/dist/teste/Stack.test.d.ts +1 -0
  232. package/dist/teste/Stack.test.js +57 -0
  233. package/dist/teste/StatCardRotuloTopo.test.d.ts +1 -0
  234. package/dist/teste/StatCardRotuloTopo.test.js +34 -0
  235. package/dist/teste/TabsContadorFechavel.test.d.ts +1 -0
  236. package/dist/teste/TabsContadorFechavel.test.js +79 -0
  237. package/dist/teste/Tooltip.test.d.ts +1 -0
  238. package/dist/teste/Tooltip.test.js +109 -0
  239. package/dist/teste/TooltipDark.test.d.ts +1 -0
  240. package/dist/teste/TooltipDark.test.js +31 -0
  241. package/dist/utils/calendario.d.ts +28 -0
  242. package/dist/utils/calendario.js +73 -0
  243. package/dist/utils/chart.d.ts +4 -0
  244. package/dist/utils/chart.js +3 -2
  245. package/dist/utils/html-seguro.d.ts +27 -0
  246. package/dist/utils/html-seguro.js +97 -0
  247. package/dist/utils/id.d.ts +2 -0
  248. package/dist/utils/id.js +23 -0
  249. package/dist/utils/paleta-de-cores.d.ts +26 -0
  250. package/dist/utils/paleta-de-cores.js +10 -0
  251. package/dist/utils/texto.d.ts +5 -0
  252. package/dist/utils/texto.js +5 -0
  253. package/package.json +3 -3
  254. package/src/index.ts +26 -0
  255. package/src/teste/AILabel.test.tsx +41 -0
  256. package/src/teste/AccordionConteudoLivre.test.tsx +39 -0
  257. package/src/teste/Alert.test.tsx +32 -0
  258. package/src/teste/AtributosRepassados.test.tsx +73 -0
  259. package/src/teste/AttachmentCardIA.test.tsx +126 -0
  260. package/src/teste/AvatarGroupOverlap.test.tsx +74 -0
  261. package/src/teste/BadgeTag.test.tsx +64 -0
  262. package/src/teste/BottomSheet.test.tsx +25 -0
  263. package/src/teste/BoxItemFlex.test.tsx +81 -0
  264. package/src/teste/BoxLayout.test.tsx +50 -0
  265. package/src/teste/Button.test.tsx +39 -0
  266. package/src/teste/Calendar.test.tsx +282 -0
  267. package/src/teste/ChipsXs.test.tsx +41 -0
  268. package/src/teste/Coachmark.test.tsx +198 -0
  269. package/src/teste/ColorPicker.test.tsx +153 -0
  270. package/src/teste/ConfirmAIAction.test.tsx +41 -0
  271. package/src/teste/DataTableCelulaLivre.test.tsx +103 -0
  272. package/src/teste/DataTableDocumento.test.tsx +102 -0
  273. package/src/teste/DatePicker.test.tsx +38 -0
  274. package/src/teste/Dropdown.test.tsx +146 -0
  275. package/src/teste/FileInputTrigger.test.tsx +89 -0
  276. package/src/teste/IconPicker.test.tsx +145 -0
  277. package/src/teste/InputMascaraEAfins.test.tsx +124 -0
  278. package/src/teste/KbdCodeBlock.test.tsx +106 -0
  279. package/src/teste/List.test.tsx +269 -0
  280. package/src/teste/Modal.test.tsx +28 -0
  281. package/src/teste/ModalVariantes.test.tsx +173 -0
  282. package/src/teste/MultiSelectErro.test.tsx +97 -0
  283. package/src/teste/NomeAcessivelSsr.test.tsx +110 -0
  284. package/src/teste/OrgChart.test.tsx +183 -0
  285. package/src/teste/OtpInput.test.tsx +163 -0
  286. package/src/teste/PopoverMaxHeight.test.tsx +47 -0
  287. package/src/teste/RichTextEditor.test.tsx +329 -0
  288. package/src/teste/RotulosTraduziveis.test.tsx +545 -0
  289. package/src/teste/SegmentedControl.test.tsx +57 -0
  290. package/src/teste/Select.test.tsx +97 -0
  291. package/src/teste/SelectPlacementFiltro.test.tsx +110 -0
  292. package/src/teste/Stack.test.tsx +80 -0
  293. package/src/teste/StatCardRotuloTopo.test.tsx +44 -0
  294. package/src/teste/TabsContadorFechavel.test.tsx +144 -0
  295. package/src/teste/Tooltip.test.tsx +219 -0
  296. package/src/teste/TooltipDark.test.tsx +51 -0
  297. package/src/utils/calendario.ts +78 -0
  298. package/src/utils/chart.ts +7 -2
  299. package/src/utils/html-seguro.ts +94 -0
  300. package/src/utils/id.ts +24 -0
  301. package/src/utils/paleta-de-cores.ts +34 -0
  302. package/src/utils/texto.ts +5 -0
@@ -44,6 +44,12 @@ export interface TimePickerProps {
44
44
  minuteLabel?: string;
45
45
  /** Rótulo acessível do campo de segundo. @default 'Segundo' */
46
46
  secondLabel?: string;
47
+ /** Unidade visível ao lado da coluna de hora. Troque para traduzir. @default 'h' */
48
+ hourUnitLabel?: string;
49
+ /** Unidade visível ao lado da coluna de minuto. Troque para traduzir. @default 'min' */
50
+ minuteUnitLabel?: string;
51
+ /** Unidade visível ao lado da coluna de segundo. Troque para traduzir. @default 'seg' */
52
+ secondUnitLabel?: string;
47
53
  value?: string;
48
54
  defaultValue?: string;
49
55
  /** Nome do campo no submit do form — emite um input hidden com o valor atual. */
@@ -300,6 +300,6 @@ function TimePicker(props) {
300
300
  stopAutoUpdate();
301
301
  };
302
302
  }, []);
303
- return (_jsxs("div", { ref: rootRef, className: wrapperClasses(), children: [props.label ? (_jsx("label", { className: "umds-timepicker__label", id: labelId(), children: props.label })) : null, _jsxs("div", { role: "combobox", "aria-haspopup": "dialog", className: "umds-timepicker__input", ref: triggerRef, onClick: (event) => toggleOpen(), onKeyDown: (event) => handleInputKeydown(event), tabIndex: inputTabIndex(), "aria-readonly": props.readOnly ? "true" : undefined, "aria-expanded": open, "aria-labelledby": triggerLabelledby(), "aria-label": triggerAriaLabel(), "aria-controls": triggerControls(), children: [_jsx("span", { className: valueClasses(), children: displayValue() || placeholderText() }), _jsx("span", { "aria-hidden": "true", className: "umds-timepicker__icon", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faClock }) })] }), props.name ? (_jsx("input", { type: "hidden", name: props.name, value: currentValue() || "" })) : null, ehInvalido() && props.errorMessage ? (_jsx("span", { role: "alert", className: "umds-timepicker__error-msg", children: props.errorMessage })) : null, _jsx(Portal, { children: open ? (_jsx("span", { className: "umds-timepicker__floating", ref: floatingRef, style: floatingStyle(), children: _jsxs("div", { role: "dialog", className: "umds-timepicker__dropdown", id: dropdownId(), "aria-label": props.ariaLabel || "Selecionar hora", onKeyDown: (event) => handleDialogKeydown(event), children: [_jsxs("div", { className: "umds-timepicker__columns", children: [_jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.hourLabel || "Hora", "aria-valuemin": 0, "aria-valuemax": 23, "aria-valuenow": parsedH(), "aria-valuetext": hourDigit(), onKeyDown: (event) => handleHourKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: "h" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementH(), tabIndex: -1, "aria-label": props.increaseHourLabel || "Aumentar hora", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: hourDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementH(), tabIndex: -1, "aria-label": props.decreaseHourLabel || "Diminuir hora", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] }), _jsx("span", { "aria-hidden": "true", className: "umds-timepicker__sep", children: ":" }), _jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.minuteLabel || "Minuto", "aria-valuemin": 0, "aria-valuemax": 59, "aria-valuenow": parsedM(), "aria-valuetext": minuteDigit(), onKeyDown: (event) => handleMinuteKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: "min" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementM(), tabIndex: -1, "aria-label": props.increaseMinuteLabel || "Aumentar minuto", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: minuteDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementM(), tabIndex: -1, "aria-label": props.decreaseMinuteLabel || "Diminuir minuto", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] }), showSeconds() ? (_jsx("span", { "aria-hidden": "true", className: "umds-timepicker__sep", children: ":" })) : null, showSeconds() ? (_jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.secondLabel || "Segundo", "aria-valuemin": 0, "aria-valuemax": 59, "aria-valuenow": parsedS(), "aria-valuetext": secondDigit(), onKeyDown: (event) => handleSecondKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: "seg" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementS(), tabIndex: -1, "aria-label": props.increaseSecondLabel || "Aumentar segundo", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: secondDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementS(), tabIndex: -1, "aria-label": props.decreaseSecondLabel || "Diminuir segundo", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] })) : null] }), _jsxs("div", { className: "umds-timepicker__footer", children: [_jsx("button", { type: "button", className: "umds-timepicker__now-btn", onClick: (event) => setNow(), children: nowText() }), _jsx("button", { type: "button", className: "umds-timepicker__ok-btn", onClick: (event) => closeAndFocus(), children: okText() })] })] }) })) : null })] }));
303
+ return (_jsxs("div", { ref: rootRef, className: wrapperClasses(), children: [props.label ? (_jsx("label", { className: "umds-timepicker__label", id: labelId(), children: props.label })) : null, _jsxs("div", { role: "combobox", "aria-haspopup": "dialog", className: "umds-timepicker__input", ref: triggerRef, onClick: (event) => toggleOpen(), onKeyDown: (event) => handleInputKeydown(event), tabIndex: inputTabIndex(), "aria-readonly": props.readOnly ? "true" : undefined, "aria-expanded": open, "aria-labelledby": triggerLabelledby(), "aria-label": triggerAriaLabel(), "aria-controls": triggerControls(), children: [_jsx("span", { className: valueClasses(), children: displayValue() || placeholderText() }), _jsx("span", { "aria-hidden": "true", className: "umds-timepicker__icon", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faClock }) })] }), props.name ? (_jsx("input", { type: "hidden", name: props.name, value: currentValue() || "" })) : null, ehInvalido() && props.errorMessage ? (_jsx("span", { role: "alert", className: "umds-timepicker__error-msg", children: props.errorMessage })) : null, _jsx(Portal, { children: open ? (_jsx("span", { className: "umds-timepicker__floating", ref: floatingRef, style: floatingStyle(), children: _jsxs("div", { role: "dialog", className: "umds-timepicker__dropdown", id: dropdownId(), "aria-label": props.ariaLabel || "Selecionar hora", onKeyDown: (event) => handleDialogKeydown(event), children: [_jsxs("div", { className: "umds-timepicker__columns", children: [_jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.hourLabel || "Hora", "aria-valuemin": 0, "aria-valuemax": 23, "aria-valuenow": parsedH(), "aria-valuetext": hourDigit(), onKeyDown: (event) => handleHourKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: props.hourUnitLabel || "h" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementH(), tabIndex: -1, "aria-label": props.increaseHourLabel || "Aumentar hora", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: hourDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementH(), tabIndex: -1, "aria-label": props.decreaseHourLabel || "Diminuir hora", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] }), _jsx("span", { "aria-hidden": "true", className: "umds-timepicker__sep", children: ":" }), _jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.minuteLabel || "Minuto", "aria-valuemin": 0, "aria-valuemax": 59, "aria-valuenow": parsedM(), "aria-valuetext": minuteDigit(), onKeyDown: (event) => handleMinuteKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: props.minuteUnitLabel || "min" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementM(), tabIndex: -1, "aria-label": props.increaseMinuteLabel || "Aumentar minuto", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: minuteDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementM(), tabIndex: -1, "aria-label": props.decreaseMinuteLabel || "Diminuir minuto", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] }), showSeconds() ? (_jsx("span", { "aria-hidden": "true", className: "umds-timepicker__sep", children: ":" })) : null, showSeconds() ? (_jsxs("div", { role: "spinbutton", className: "umds-timepicker__col", tabIndex: 0, "aria-label": props.secondLabel || "Segundo", "aria-valuemin": 0, "aria-valuemax": 59, "aria-valuenow": parsedS(), "aria-valuetext": secondDigit(), onKeyDown: (event) => handleSecondKeydown(event), children: [_jsx("span", { className: "umds-timepicker__unit-label", children: props.secondUnitLabel || "seg" }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => incrementS(), tabIndex: -1, "aria-label": props.increaseSecondLabel || "Aumentar segundo", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronUp }) }), _jsx("div", { className: "umds-timepicker__digit", children: secondDigit() }), _jsx("button", { type: "button", className: "umds-timepicker__step-btn", onClick: (event) => decrementS(), tabIndex: -1, "aria-label": props.decreaseSecondLabel || "Diminuir segundo", children: _jsx(Icon, { variant: "inherit", customSize: "14px", icon: faChevronDown }) })] })) : null] }), _jsxs("div", { className: "umds-timepicker__footer", children: [_jsx("button", { type: "button", className: "umds-timepicker__now-btn", onClick: (event) => setNow(), children: nowText() }), _jsx("button", { type: "button", className: "umds-timepicker__ok-btn", onClick: (event) => closeAndFocus(), children: okText() })] })] }) })) : null })] }));
304
304
  }
305
305
  export default TimePicker;
@@ -12,6 +12,21 @@
12
12
  height: fit-content;
13
13
  }
14
14
 
15
+ /* Cópia do texto que o aria-describedby do filho referencia: fora da tela,
16
+ fora do fluxo. Receita visually-hidden; os 1px não são medida de design. */
17
+ .umds-tooltip__descricao {
18
+ position: absolute;
19
+ width: 1px;
20
+ height: 1px;
21
+ margin: -1px;
22
+ padding: 0;
23
+ border: 0;
24
+ overflow: hidden;
25
+ clip: rect(0, 0, 0, 0);
26
+ clip-path: inset(50%);
27
+ white-space: nowrap;
28
+ }
29
+
15
30
  /* Wrapper flutuante (Portal no body; transform/visibility via style inline) */
16
31
  .umds-tooltip__floating {
17
32
  position: fixed;
@@ -138,6 +153,31 @@
138
153
  bottom: 12px;
139
154
  }
140
155
 
156
+ /* ── variant="dark": balão compacto escuro ──
157
+ background-dark é a superfície invertida do tema (azul-marinho no claro, claro
158
+ no escuro, branco no alto contraste) e neutral-light-pure o texto sobre ela.
159
+ Fonte de 12px (a escala do DS não tem o 11px do CrisDoc). */
160
+ .umds-tooltip__floating--dark {
161
+ max-width: 220px; /* quebra do CrisDoc; maxWidth sobrescreve */
162
+ }
163
+
164
+ .umds-tooltip__bubble--dark {
165
+ padding: var(--umds-primitive-spacing-quarck) var(--umds-primitive-spacing-nano);
166
+ border-radius: var(--umds-primitive-border-radius-xs); /* 4px */
167
+ background-color: var(--umds-semantic-color-background-dark);
168
+ color: var(--umds-semantic-color-neutral-light-pure);
169
+ }
170
+
171
+ .umds-tooltip__bubble--dark .umds-tooltip__title,
172
+ .umds-tooltip__bubble--dark .umds-tooltip__content {
173
+ color: var(--umds-semantic-color-neutral-light-pure);
174
+ }
175
+
176
+ .umds-tooltip__bubble--dark .umds-tooltip__arrow {
177
+ background-color: var(--umds-semantic-color-background-dark);
178
+ border-color: var(--umds-semantic-color-background-dark);
179
+ }
180
+
141
181
  /* ── Alto contraste ──
142
182
  O balão usa neutral-light-pure, que neste tema é preto como a página, e a
143
183
  sombra não aparece: sem traço o balão some. Outline para dentro (não
@@ -13,6 +13,17 @@ export interface TooltipProps {
13
13
  side?: "top" | "bottom" | "left" | "right";
14
14
  /** Alinhamento no eixo cruzado: "center" usa só o `side`; "start"/"end" viram placements compostos (`top-start`, `right-end`…). */
15
15
  align?: "start" | "center" | "end";
16
+ /**
17
+ * Aparência do balão. `dark` é o compacto escuro (fundo `background-dark`,
18
+ * texto `neutral-light-pure`, padding 4/8, raio 4, no máximo 220px de
19
+ * largura): o balão de ícone, sigla e botão de barra de ferramentas. Os dois
20
+ * tokens são o par invertido do tema, então o contraste vale nos claros,
21
+ * escuro e alto contraste.
22
+ * @default 'default'
23
+ */
24
+ variant?: "default" | "dark";
25
+ /** Largura máxima do balão, qualquer valor CSS (`"220px"`, `"20rem"`). Vence o teto de cada variante (280px no padrão, 220px no dark). */
26
+ maxWidth?: string;
16
27
  sideOffset?: number;
17
28
  delayDuration?: number;
18
29
  disabled?: boolean;
@@ -5,6 +5,7 @@ import { useState, useRef, useEffect } from "react";
5
5
  import { computePosition, autoUpdate, offset, flip, shift, } from "@floating-ui/dom";
6
6
  import Icon from "../Icon/Icon";
7
7
  import Portal from "../Portal/Portal";
8
+ import { gerarId } from "../../utils/id";
8
9
  function Tooltip(props) {
9
10
  const triggerRef = useRef(null);
10
11
  const floatingRef = useRef(null);
@@ -15,6 +16,11 @@ function Tooltip(props) {
15
16
  const openTimerRef = useRef(null);
16
17
  const closeTimerRef = useRef(null);
17
18
  const wantOpenRef = useRef(false);
19
+ const descIdRef = useRef("");
20
+ const alvoDescritoRef = useRef(null);
21
+ const wrapperNodeRef = useRef(null);
22
+ const focusInWatcherRef = useRef(null);
23
+ const focusOutWatcherRef = useRef(null);
18
24
  const [mounted, setMounted] = useState(() => false);
19
25
  const [positioned, setPositioned] = useState(() => false);
20
26
  const [open, setOpen] = useState(() => false);
@@ -22,7 +28,55 @@ function Tooltip(props) {
22
28
  const [posY, setPosY] = useState(() => 0);
23
29
  const [finalSide, setFinalSide] = useState(() => "top");
24
30
  const [finalAlign, setFinalAlign] = useState(() => "center");
25
- const [bubbleId, setBubbleId] = useState(() => "umds-tooltip-" + Math.random().toString(36).slice(2, 9));
31
+ const [bubbleId, setBubbleId] = useState(() => "");
32
+ const [descId, setDescId] = useState(() => "");
33
+ function bubbleIdText() {
34
+ return bubbleId || undefined;
35
+ }
36
+ function descIdText() {
37
+ return descId || undefined;
38
+ }
39
+ function tituloDescrito() {
40
+ return props.title ? props.title + " " : "";
41
+ }
42
+ function alvoDaDescricao() {
43
+ const wrapper = wrapperNodeRef.current;
44
+ if (!wrapper)
45
+ return null;
46
+ const focavel = wrapper.querySelector("a[href], button, input, select, textarea, summary, [tabindex], [contenteditable]");
47
+ return focavel || wrapper;
48
+ }
49
+ function desligarDescricao(alvo) {
50
+ if (!alvo || !descIdRef.current)
51
+ return;
52
+ const restantes = (alvo.getAttribute("aria-describedby") || "")
53
+ .split(" ")
54
+ .filter((token) => token && token !== descIdRef.current);
55
+ if (restantes.length > 0) {
56
+ alvo.setAttribute("aria-describedby", restantes.join(" "));
57
+ }
58
+ else {
59
+ alvo.removeAttribute("aria-describedby");
60
+ }
61
+ }
62
+ function ligarDescricao() {
63
+ if (!descIdRef.current)
64
+ return;
65
+ const alvo = props.disabled ? null : alvoDaDescricao();
66
+ const anterior = alvoDescritoRef.current;
67
+ if (anterior && anterior !== alvo)
68
+ desligarDescricao(anterior);
69
+ alvoDescritoRef.current = alvo;
70
+ if (!alvo)
71
+ return;
72
+ const tokens = (alvo.getAttribute("aria-describedby") || "")
73
+ .split(" ")
74
+ .filter(Boolean);
75
+ if (tokens.indexOf(descIdRef.current) === -1) {
76
+ tokens.push(descIdRef.current);
77
+ alvo.setAttribute("aria-describedby", tokens.join(" "));
78
+ }
79
+ }
26
80
  function updatePosition() {
27
81
  if (!triggerRef.current || !floatingRef.current)
28
82
  return;
@@ -97,23 +151,26 @@ function Tooltip(props) {
97
151
  }
98
152
  }
99
153
  function startKeydownWatch() {
100
- if (typeof document === "undefined")
154
+ if (typeof window === "undefined")
101
155
  return;
102
156
  if (keydownWatcherRef.current)
103
157
  return;
104
158
  const watcher = (event) => {
105
- if (event.key === "Escape") {
106
- closeNow();
107
- }
159
+ if (event.key !== "Escape")
160
+ return;
161
+ if (!wantOpenRef.current)
162
+ return;
163
+ event.stopPropagation();
164
+ closeNow();
108
165
  };
109
166
  keydownWatcherRef.current = watcher;
110
- document.addEventListener("keydown", watcher, true);
167
+ window.addEventListener("keydown", watcher, true);
111
168
  }
112
169
  function stopKeydownWatch() {
113
- if (typeof document === "undefined")
170
+ if (typeof window === "undefined")
114
171
  return;
115
172
  if (keydownWatcherRef.current) {
116
- document.removeEventListener("keydown", keydownWatcherRef.current, true);
173
+ window.removeEventListener("keydown", keydownWatcherRef.current, true);
117
174
  keydownWatcherRef.current = null;
118
175
  }
119
176
  }
@@ -184,13 +241,28 @@ function Tooltip(props) {
184
241
  closeNow();
185
242
  }
186
243
  function floatingStyle() {
187
- return {
244
+ const estilo = {
188
245
  transform: "translate(" + posX + "px, " + posY + "px)",
189
246
  visibility: positioned ? "visible" : "hidden",
190
247
  };
248
+ if (props.maxWidth)
249
+ estilo.maxWidth = props.maxWidth;
250
+ return estilo;
251
+ }
252
+ function floatingClasses() {
253
+ return [
254
+ "umds-tooltip__floating",
255
+ props.variant === "dark" ? "umds-tooltip__floating--dark" : "",
256
+ ]
257
+ .filter(Boolean)
258
+ .join(" ");
191
259
  }
192
260
  function bubbleClasses() {
193
- return ["umds-tooltip__bubble", open ? "umds-tooltip__bubble--open" : ""]
261
+ return [
262
+ "umds-tooltip__bubble",
263
+ props.variant === "dark" ? "umds-tooltip__bubble--dark" : "",
264
+ open ? "umds-tooltip__bubble--open" : "",
265
+ ]
194
266
  .filter(Boolean)
195
267
  .join(" ");
196
268
  }
@@ -201,8 +273,39 @@ function Tooltip(props) {
201
273
  "umds-tooltip__arrow--align-" + finalAlign,
202
274
  ].join(" ");
203
275
  }
276
+ useEffect(() => {
277
+ if (!triggerRef.current)
278
+ return;
279
+ // Copia "pura" do no: o React zera a ref de elemento antes do cleanup.
280
+ wrapperNodeRef.current = triggerRef.current;
281
+ const base = gerarId("umds-tooltip");
282
+ descIdRef.current = base + "-desc";
283
+ setBubbleId(base);
284
+ setDescId(base + "-desc");
285
+ const aoFocar = () => handleOpen();
286
+ const aoDesfocar = (event) => handleClose(event);
287
+ focusInWatcherRef.current = aoFocar;
288
+ focusOutWatcherRef.current = aoDesfocar;
289
+ triggerRef.current.addEventListener("focusin", aoFocar);
290
+ triggerRef.current.addEventListener("focusout", aoDesfocar);
291
+ ligarDescricao();
292
+ }, []);
293
+ useEffect(() => {
294
+ ligarDescricao();
295
+ });
204
296
  useEffect(() => {
205
297
  return () => {
298
+ const wrapper = wrapperNodeRef.current;
299
+ if (wrapper && focusInWatcherRef.current) {
300
+ wrapper.removeEventListener("focusin", focusInWatcherRef.current);
301
+ }
302
+ if (wrapper && focusOutWatcherRef.current) {
303
+ wrapper.removeEventListener("focusout", focusOutWatcherRef.current);
304
+ }
305
+ focusInWatcherRef.current = null;
306
+ focusOutWatcherRef.current = null;
307
+ desligarDescricao(alvoDescritoRef.current);
308
+ alvoDescritoRef.current = null;
206
309
  if (openTimerRef.current)
207
310
  clearTimeout(openTimerRef.current);
208
311
  if (closeTimerRef.current)
@@ -212,6 +315,6 @@ function Tooltip(props) {
212
315
  stopKeydownWatch();
213
316
  };
214
317
  }, []);
215
- return (_jsxs("span", { ref: triggerRef, className: ["umds-tooltip", props.className].filter(Boolean).join(" "), "aria-describedby": open ? bubbleId : undefined, onMouseEnter: (event) => handleOpen(), onMouseLeave: (event) => handleClose(event), onFocus: (event) => handleOpen(), onBlur: (event) => handleClose(event), children: [_jsx(_Fragment, { children: props.children }), _jsx(Portal, { children: mounted ? (_jsx("span", { className: "umds-tooltip__floating", ref: floatingRef, style: floatingStyle(), children: _jsxs("span", { role: "tooltip", className: bubbleClasses(), id: bubbleId, "aria-hidden": !open, children: [_jsxs("span", { className: "umds-tooltip__row", children: [props.icon ? (_jsx(Icon, { size: "sm", variant: "inherit", icon: props.icon })) : null, _jsxs("span", { className: "umds-tooltip__text", children: [props.title ? (_jsx("span", { className: "umds-tooltip__title", children: props.title })) : null, props.content ? (_jsx("span", { className: "umds-tooltip__content", children: _jsx(_Fragment, { children: props.content }) })) : null] })] }), _jsx("span", { ref: arrowRef, className: arrowClasses() })] }) })) : null })] }));
318
+ return (_jsxs("span", { ref: triggerRef, className: ["umds-tooltip", props.className].filter(Boolean).join(" "), onMouseEnter: (event) => handleOpen(), onMouseLeave: (event) => handleClose(event), children: [_jsx(_Fragment, { children: props.children }), _jsxs("span", { className: "umds-tooltip__descricao", "aria-hidden": "true", id: descIdText(), children: [props.title ? _jsx(_Fragment, { children: tituloDescrito() }) : null, props.content ? _jsx(_Fragment, { children: props.content }) : null] }), _jsx(Portal, { children: mounted ? (_jsx("span", { ref: floatingRef, className: floatingClasses(), style: floatingStyle(), children: _jsxs("span", { role: "tooltip", className: bubbleClasses(), id: bubbleIdText(), "aria-hidden": !open, children: [_jsxs("span", { className: "umds-tooltip__row", children: [props.icon ? (_jsx(Icon, { size: "sm", variant: "inherit", icon: props.icon })) : null, _jsxs("span", { className: "umds-tooltip__text", children: [props.title ? (_jsx("span", { className: "umds-tooltip__title", children: props.title })) : null, props.content ? (_jsx("span", { className: "umds-tooltip__content", children: _jsx(_Fragment, { children: props.content }) })) : null] })] }), _jsx("span", { ref: arrowRef, className: arrowClasses() })] }) })) : null })] }));
216
319
  }
217
320
  export default Tooltip;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,14 @@
1
1
  export * from "./utils/theme";
2
2
  export * from "./utils/toast";
3
3
  export * from "./utils/density";
4
+ export * from "./utils/paleta-de-cores";
4
5
  export { library } from "@fortawesome/fontawesome-svg-core";
5
6
  export { default as Accordion } from "./components/Accordion/Accordion";
6
7
  export { default as AILabel } from "./components/AILabel/AILabel";
7
8
  export { default as AIContent } from "./components/AIContent/AIContent";
9
+ export { default as Calendar } from "./components/Calendar/Calendar";
10
+ export { default as Coachmark } from "./components/Coachmark/Coachmark";
11
+ export { default as CodeBlock } from "./components/CodeBlock/CodeBlock";
8
12
  export { default as ConfirmAIAction } from "./components/ConfirmAIAction/ConfirmAIAction";
9
13
  export { default as Alert } from "./components/Alert/Alert";
10
14
  export { default as AppHeader } from "./components/AppHeader/AppHeader";
@@ -26,11 +30,13 @@ export { default as Button } from "./components/Button/Button";
26
30
  export { default as Card } from "./components/Card/Card";
27
31
  export { default as Checkbox } from "./components/Checkbox/Checkbox";
28
32
  export { default as Chips } from "./components/Chips/Chips";
33
+ export { default as ColorPicker } from "./components/ColorPicker/ColorPicker";
29
34
  export { default as Combobox } from "./components/Combobox/Combobox";
30
35
  export { default as ConfirmDialog } from "./components/ConfirmDialog/ConfirmDialog";
31
36
  export { default as Container } from "./components/Container/Container";
32
37
  export { default as DataTable } from "./components/DataTable/DataTable";
33
38
  export { default as DatePicker } from "./components/DatePicker/DatePicker";
39
+ export { default as DescriptionList } from "./components/DescriptionList/DescriptionList";
34
40
  export { default as Divider } from "./components/Divider/Divider";
35
41
  export { default as DonutChart } from "./components/Chart/DonutChart";
36
42
  export { default as Drawer } from "./components/Drawer/Drawer";
@@ -39,15 +45,21 @@ export { default as EmptyState } from "./components/EmptyState/EmptyState";
39
45
  export { default as FileInput } from "./components/FileInput/FileInput";
40
46
  export { default as Grid } from "./components/Grid/Grid";
41
47
  export { default as Icon } from "./components/Icon/Icon";
48
+ export { default as IconPicker } from "./components/IconPicker/IconPicker";
42
49
  export { default as Input } from "./components/Input/Input";
43
50
  export { default as Kanban } from "./components/Kanban/Kanban";
44
51
  export { default as KanbanCard } from "./components/Kanban/KanbanCard";
45
52
  export { default as KanbanColumn } from "./components/Kanban/KanbanColumn";
53
+ export { default as Kbd } from "./components/Kbd/Kbd";
46
54
  export { default as Link } from "./components/Link/Link";
47
55
  export { default as LineChart } from "./components/Chart/LineChart";
56
+ export { default as List } from "./components/List/List";
57
+ export { default as ListItem } from "./components/List/ListItem";
48
58
  export { default as Logo } from "./components/Logo/Logo";
49
59
  export { default as Modal } from "./components/Modal/Modal";
50
60
  export { default as MultiSelect } from "./components/MultiSelect/MultiSelect";
61
+ export { default as OrgChart } from "./components/OrgChart/OrgChart";
62
+ export { default as OtpInput } from "./components/OtpInput/OtpInput";
51
63
  export { default as PageHeader } from "./components/PageHeader/PageHeader";
52
64
  export { default as Pagination } from "./components/Pagination/Pagination";
53
65
  export { default as PhoneInput } from "./components/PhoneInput/PhoneInput";
@@ -55,6 +67,7 @@ export { default as Podium } from "./components/Podium/Podium";
55
67
  export { default as ProgressBar } from "./components/ProgressBar/ProgressBar";
56
68
  export { default as Radio } from "./components/Radio/Radio";
57
69
  export { default as RadioGroup } from "./components/Radio/RadioGroup";
70
+ export { default as RichTextEditor } from "./components/RichTextEditor/RichTextEditor";
58
71
  export { default as SegmentedControl } from "./components/SegmentedControl/SegmentedControl";
59
72
  export { default as Select } from "./components/Select/Select";
60
73
  export { default as SidePanel } from "./components/SidePanel/SidePanel";
@@ -85,6 +98,9 @@ export { default as Tree } from "./components/Tree/Tree";
85
98
  export type * from "./components/Accordion/Accordion";
86
99
  export type * from "./components/AILabel/AILabel";
87
100
  export type * from "./components/AIContent/AIContent";
101
+ export type * from "./components/Calendar/Calendar";
102
+ export type * from "./components/Coachmark/Coachmark";
103
+ export type * from "./components/CodeBlock/CodeBlock";
88
104
  export type * from "./components/ConfirmAIAction/ConfirmAIAction";
89
105
  export type * from "./components/Alert/Alert";
90
106
  export type * from "./components/AppHeader/AppHeader";
@@ -106,11 +122,13 @@ export type * from "./components/Button/Button";
106
122
  export type * from "./components/Card/Card";
107
123
  export type * from "./components/Checkbox/Checkbox";
108
124
  export type * from "./components/Chips/Chips";
125
+ export type * from "./components/ColorPicker/ColorPicker";
109
126
  export type * from "./components/Combobox/Combobox";
110
127
  export type * from "./components/ConfirmDialog/ConfirmDialog";
111
128
  export type * from "./components/Container/Container";
112
129
  export type * from "./components/DataTable/DataTable";
113
130
  export type * from "./components/DatePicker/DatePicker";
131
+ export type * from "./components/DescriptionList/DescriptionList";
114
132
  export type * from "./components/Divider/Divider";
115
133
  export type * from "./components/Chart/DonutChart";
116
134
  export type * from "./components/Drawer/Drawer";
@@ -119,15 +137,21 @@ export type * from "./components/EmptyState/EmptyState";
119
137
  export type * from "./components/FileInput/FileInput";
120
138
  export type * from "./components/Grid/Grid";
121
139
  export type * from "./components/Icon/Icon";
140
+ export type * from "./components/IconPicker/IconPicker";
122
141
  export type * from "./components/Input/Input";
123
142
  export type * from "./components/Kanban/Kanban";
124
143
  export type * from "./components/Kanban/KanbanCard";
125
144
  export type * from "./components/Kanban/KanbanColumn";
145
+ export type * from "./components/Kbd/Kbd";
126
146
  export type * from "./components/Link/Link";
127
147
  export type * from "./components/Chart/LineChart";
148
+ export type * from "./components/List/List";
149
+ export type * from "./components/List/ListItem";
128
150
  export type * from "./components/Logo/Logo";
129
151
  export type * from "./components/Modal/Modal";
130
152
  export type * from "./components/MultiSelect/MultiSelect";
153
+ export type * from "./components/OrgChart/OrgChart";
154
+ export type * from "./components/OtpInput/OtpInput";
131
155
  export type * from "./components/PageHeader/PageHeader";
132
156
  export type * from "./components/Pagination/Pagination";
133
157
  export type * from "./components/PhoneInput/PhoneInput";
@@ -135,6 +159,7 @@ export type * from "./components/Podium/Podium";
135
159
  export type * from "./components/ProgressBar/ProgressBar";
136
160
  export type * from "./components/Radio/Radio";
137
161
  export type * from "./components/Radio/RadioGroup";
162
+ export type * from "./components/RichTextEditor/RichTextEditor";
138
163
  export type * from "./components/SegmentedControl/SegmentedControl";
139
164
  export type * from "./components/Select/Select";
140
165
  export type * from "./components/SidePanel/SidePanel";
package/dist/index.js CHANGED
@@ -4,12 +4,17 @@ export * from "./utils/theme";
4
4
  export * from "./utils/toast";
5
5
  // Densidade global (modo touch ≥44px via data-density)
6
6
  export * from "./utils/density";
7
+ // Paleta de cor categórica (primitivos) do ColorPicker
8
+ export * from "./utils/paleta-de-cores";
7
9
  // FontAwesome
8
10
  export { library } from "@fortawesome/fontawesome-svg-core";
9
11
  // Components
10
12
  export { default as Accordion } from "./components/Accordion/Accordion";
11
13
  export { default as AILabel } from "./components/AILabel/AILabel";
12
14
  export { default as AIContent } from "./components/AIContent/AIContent";
15
+ export { default as Calendar } from "./components/Calendar/Calendar";
16
+ export { default as Coachmark } from "./components/Coachmark/Coachmark";
17
+ export { default as CodeBlock } from "./components/CodeBlock/CodeBlock";
13
18
  export { default as ConfirmAIAction } from "./components/ConfirmAIAction/ConfirmAIAction";
14
19
  export { default as Alert } from "./components/Alert/Alert";
15
20
  export { default as AppHeader } from "./components/AppHeader/AppHeader";
@@ -31,11 +36,13 @@ export { default as Button } from "./components/Button/Button";
31
36
  export { default as Card } from "./components/Card/Card";
32
37
  export { default as Checkbox } from "./components/Checkbox/Checkbox";
33
38
  export { default as Chips } from "./components/Chips/Chips";
39
+ export { default as ColorPicker } from "./components/ColorPicker/ColorPicker";
34
40
  export { default as Combobox } from "./components/Combobox/Combobox";
35
41
  export { default as ConfirmDialog } from "./components/ConfirmDialog/ConfirmDialog";
36
42
  export { default as Container } from "./components/Container/Container";
37
43
  export { default as DataTable } from "./components/DataTable/DataTable";
38
44
  export { default as DatePicker } from "./components/DatePicker/DatePicker";
45
+ export { default as DescriptionList } from "./components/DescriptionList/DescriptionList";
39
46
  export { default as Divider } from "./components/Divider/Divider";
40
47
  export { default as DonutChart } from "./components/Chart/DonutChart";
41
48
  export { default as Drawer } from "./components/Drawer/Drawer";
@@ -44,15 +51,21 @@ export { default as EmptyState } from "./components/EmptyState/EmptyState";
44
51
  export { default as FileInput } from "./components/FileInput/FileInput";
45
52
  export { default as Grid } from "./components/Grid/Grid";
46
53
  export { default as Icon } from "./components/Icon/Icon";
54
+ export { default as IconPicker } from "./components/IconPicker/IconPicker";
47
55
  export { default as Input } from "./components/Input/Input";
48
56
  export { default as Kanban } from "./components/Kanban/Kanban";
49
57
  export { default as KanbanCard } from "./components/Kanban/KanbanCard";
50
58
  export { default as KanbanColumn } from "./components/Kanban/KanbanColumn";
59
+ export { default as Kbd } from "./components/Kbd/Kbd";
51
60
  export { default as Link } from "./components/Link/Link";
52
61
  export { default as LineChart } from "./components/Chart/LineChart";
62
+ export { default as List } from "./components/List/List";
63
+ export { default as ListItem } from "./components/List/ListItem";
53
64
  export { default as Logo } from "./components/Logo/Logo";
54
65
  export { default as Modal } from "./components/Modal/Modal";
55
66
  export { default as MultiSelect } from "./components/MultiSelect/MultiSelect";
67
+ export { default as OrgChart } from "./components/OrgChart/OrgChart";
68
+ export { default as OtpInput } from "./components/OtpInput/OtpInput";
56
69
  export { default as PageHeader } from "./components/PageHeader/PageHeader";
57
70
  export { default as Pagination } from "./components/Pagination/Pagination";
58
71
  export { default as PhoneInput } from "./components/PhoneInput/PhoneInput";
@@ -60,6 +73,7 @@ export { default as Podium } from "./components/Podium/Podium";
60
73
  export { default as ProgressBar } from "./components/ProgressBar/ProgressBar";
61
74
  export { default as Radio } from "./components/Radio/Radio";
62
75
  export { default as RadioGroup } from "./components/Radio/RadioGroup";
76
+ export { default as RichTextEditor } from "./components/RichTextEditor/RichTextEditor";
63
77
  export { default as SegmentedControl } from "./components/SegmentedControl/SegmentedControl";
64
78
  export { default as Select } from "./components/Select/Select";
65
79
  export { default as SidePanel } from "./components/SidePanel/SidePanel";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, expect, it, vi } from "vitest";
3
+ import { render, screen } from "@testing-library/react";
4
+ import userEvent from "@testing-library/user-event";
5
+ import AILabel from "../components/AILabel/AILabel";
6
+ /**
7
+ * `defaultOpen` era declarado e documentado, mas nunca lido: o painel nascia
8
+ * fechado de qualquer jeito, e a story "Em inglês" usava `open` (controlado)
9
+ * para contornar — o que travava o clique.
10
+ */
11
+ describe("AILabel · defaultOpen", () => {
12
+ it("abre o painel na montagem", () => {
13
+ render(_jsx(AILabel, { explanation: "Resumo dos despachos.", defaultOpen: true }));
14
+ expect(screen.getByRole("region")).toHaveTextContent("Resumo dos despachos.");
15
+ expect(screen.getByRole("button", { name: "Conteúdo gerado por IA" })).toHaveAttribute("aria-expanded", "true");
16
+ });
17
+ it("continua não-controlado: o clique fecha e avisa", async () => {
18
+ const usuario = userEvent.setup();
19
+ const onOpenChange = vi.fn();
20
+ render(_jsx(AILabel, { explanation: "Resumo.", defaultOpen: true, onOpenChange: onOpenChange }));
21
+ await usuario.click(screen.getByRole("button", { name: "Conteúdo gerado por IA" }));
22
+ expect(screen.queryByRole("region")).not.toBeInTheDocument();
23
+ expect(onOpenChange).toHaveBeenCalledWith(false);
24
+ });
25
+ it("sem defaultOpen nasce fechado", () => {
26
+ render(_jsx(AILabel, { explanation: "Resumo." }));
27
+ expect(screen.queryByRole("region")).not.toBeInTheDocument();
28
+ });
29
+ it("`open` controlado vence o defaultOpen", () => {
30
+ render(_jsx(AILabel, { explanation: "Resumo.", defaultOpen: true, open: false }));
31
+ expect(screen.queryByRole("region")).not.toBeInTheDocument();
32
+ });
33
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { describe, expect, it } from "vitest";
3
+ import { render, screen } from "@testing-library/react";
4
+ import Accordion from "../components/Accordion/Accordion";
5
+ describe("Accordion · conteúdo livre por item (React)", () => {
6
+ it("o content do item aceita qualquer nó (campos, botões)", () => {
7
+ render(_jsx(Accordion, { items: [
8
+ {
9
+ id: "s1",
10
+ title: "Seção 01",
11
+ defaultOpen: true,
12
+ content: (_jsxs("label", { children: ["Nome ", _jsx("input", { defaultValue: "Maria" })] })),
13
+ },
14
+ { id: "s2", title: "Seção 02", content: _jsx("button", { type: "button", children: "Anexar arquivo" }) },
15
+ ] }));
16
+ expect(screen.getByDisplayValue("Maria")).toBeInTheDocument();
17
+ expect(screen.getByRole("button", { name: "Anexar arquivo", hidden: true })).toBeInTheDocument();
18
+ });
19
+ it("o título do item é o botão do painel, sem cor própria (herda a neutra do gatilho)", () => {
20
+ const { container } = render(_jsx(Accordion, { items: [{ id: "a", title: "Seção", content: "x" }] }));
21
+ const titulo = container.querySelector(".umds-accordion__title");
22
+ expect(titulo.closest("button")).toHaveClass("umds-accordion__trigger");
23
+ expect(titulo.getAttribute("style")).toBeNull();
24
+ });
25
+ it("o texto simples continua funcionando", () => {
26
+ render(_jsx(Accordion, { items: [{ id: "a", title: "Seção", content: "Texto do painel", defaultOpen: true }] }));
27
+ expect(screen.getByText("Texto do painel")).toBeInTheDocument();
28
+ });
29
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, expect, it } from "vitest";
3
+ import { render, screen } from "@testing-library/react";
4
+ import Alert from "../components/Alert/Alert";
5
+ /**
6
+ * O Alert anunciava toda variante com `role="alert"`, que é assertivo: um
7
+ * aviso informativo ou de sucesso cortava o que o leitor de tela estava
8
+ * lendo. Só o erro (`negative`) pode interromper; o resto é `role="status"`.
9
+ */
10
+ describe("Alert · anúncio ao leitor de tela", () => {
11
+ it("negative interrompe: role=alert e aria-live=assertive", () => {
12
+ render(_jsx(Alert, { variant: "negative", title: "Falhou" }));
13
+ const alerta = screen.getByRole("alert");
14
+ expect(alerta).toHaveAttribute("aria-live", "assertive");
15
+ expect(screen.queryByRole("status")).not.toBeInTheDocument();
16
+ });
17
+ it.each(["positive", "info", "neutral"])("%s é educado: role=status e aria-live=polite", (variant) => {
18
+ render(_jsx(Alert, { variant: variant, title: "Aviso" }));
19
+ const alerta = screen.getByRole("status");
20
+ expect(alerta).toHaveAttribute("aria-live", "polite");
21
+ expect(screen.queryByRole("alert")).not.toBeInTheDocument();
22
+ });
23
+ it("sem variant cai no neutral, educado", () => {
24
+ render(_jsx(Alert, { title: "Aviso" }));
25
+ expect(screen.getByRole("status")).toBeInTheDocument();
26
+ });
27
+ });
@@ -0,0 +1 @@
1
+ export {};