@1doc/1ds-react 2.8.0 → 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 (213) hide show
  1. package/CHANGELOG.md +1106 -0
  2. package/dist/components/AILabel/AILabel.js +1 -1
  3. package/dist/components/Accordion/Accordion.d.ts +6 -2
  4. package/dist/components/AttachmentCard/AttachmentCard.css +16 -0
  5. package/dist/components/AttachmentCard/AttachmentCard.d.ts +19 -2
  6. package/dist/components/AttachmentCard/AttachmentCard.js +40 -3
  7. package/dist/components/Avatar/Avatar.css +7 -2
  8. package/dist/components/Avatar/AvatarGroup.d.ts +17 -0
  9. package/dist/components/Avatar/AvatarGroup.js +22 -8
  10. package/dist/components/Badge/Badge.css +54 -2
  11. package/dist/components/Badge/Badge.d.ts +14 -4
  12. package/dist/components/Badge/Badge.js +1 -0
  13. package/dist/components/Box/Box.css +83 -0
  14. package/dist/components/Box/Box.d.ts +82 -2
  15. package/dist/components/Box/Box.js +42 -2
  16. package/dist/components/Button/Button.css +29 -0
  17. package/dist/components/Button/Button.d.ts +4 -4
  18. package/dist/components/Button/Button.js +4 -1
  19. package/dist/components/Calendar/Calendar.css +245 -0
  20. package/dist/components/Calendar/Calendar.d.ts +125 -0
  21. package/dist/components/Calendar/Calendar.js +320 -0
  22. package/dist/components/Chips/Chips.css +38 -0
  23. package/dist/components/Chips/Chips.d.ts +5 -2
  24. package/dist/components/Chips/Chips.js +2 -1
  25. package/dist/components/Coachmark/Coachmark.css +118 -0
  26. package/dist/components/Coachmark/Coachmark.d.ts +75 -0
  27. package/dist/components/Coachmark/Coachmark.js +321 -0
  28. package/dist/components/CodeBlock/CodeBlock.css +96 -0
  29. package/dist/components/CodeBlock/CodeBlock.d.ts +47 -0
  30. package/dist/components/CodeBlock/CodeBlock.js +103 -0
  31. package/dist/components/ColorPicker/ColorPicker.css +133 -0
  32. package/dist/components/ColorPicker/ColorPicker.d.ts +73 -0
  33. package/dist/components/ColorPicker/ColorPicker.js +219 -0
  34. package/dist/components/Combobox/Combobox.css +8 -0
  35. package/dist/components/DataTable/DataTable.css +80 -0
  36. package/dist/components/DataTable/DataTable.d.ts +19 -4
  37. package/dist/components/DataTable/DataTable.js +59 -15
  38. package/dist/components/DatePicker/DatePicker.css +8 -0
  39. package/dist/components/DatePicker/DatePicker.js +10 -1
  40. package/dist/components/DescriptionList/DescriptionList.css +113 -0
  41. package/dist/components/DescriptionList/DescriptionList.d.ts +59 -0
  42. package/dist/components/DescriptionList/DescriptionList.js +51 -0
  43. package/dist/components/FileInput/FileInput.css +16 -0
  44. package/dist/components/FileInput/FileInput.d.ts +4 -2
  45. package/dist/components/FileInput/FileInput.js +8 -2
  46. package/dist/components/Grid/Grid.js +5 -5
  47. package/dist/components/IconPicker/IconPicker.css +107 -0
  48. package/dist/components/IconPicker/IconPicker.d.ts +74 -0
  49. package/dist/components/IconPicker/IconPicker.js +194 -0
  50. package/dist/components/Input/Input.css +38 -0
  51. package/dist/components/Input/Input.d.ts +10 -1
  52. package/dist/components/Input/Input.js +66 -5
  53. package/dist/components/Kanban/Kanban.css +4 -0
  54. package/dist/components/Kbd/Kbd.css +66 -0
  55. package/dist/components/Kbd/Kbd.d.ts +32 -0
  56. package/dist/components/Kbd/Kbd.js +40 -0
  57. package/dist/components/List/List.css +136 -0
  58. package/dist/components/List/List.d.ts +82 -0
  59. package/dist/components/List/List.js +53 -0
  60. package/dist/components/List/ListItem.d.ts +85 -0
  61. package/dist/components/List/ListItem.js +81 -0
  62. package/dist/components/Modal/Modal.css +80 -0
  63. package/dist/components/Modal/Modal.d.ts +33 -6
  64. package/dist/components/Modal/Modal.js +101 -6
  65. package/dist/components/MultiSelect/MultiSelect.css +8 -0
  66. package/dist/components/MultiSelect/MultiSelect.js +10 -1
  67. package/dist/components/OrgChart/OrgChart.css +149 -0
  68. package/dist/components/OrgChart/OrgChart.d.ts +83 -0
  69. package/dist/components/OrgChart/OrgChart.js +297 -0
  70. package/dist/components/OtpInput/OtpInput.css +93 -0
  71. package/dist/components/OtpInput/OtpInput.d.ts +60 -0
  72. package/dist/components/OtpInput/OtpInput.js +215 -0
  73. package/dist/components/PhoneInput/PhoneInput.css +8 -0
  74. package/dist/components/Popover/Popover.d.ts +7 -0
  75. package/dist/components/Popover/Popover.js +11 -1
  76. package/dist/components/RichTextEditor/RichTextEditor.css +203 -0
  77. package/dist/components/RichTextEditor/RichTextEditor.d.ts +83 -0
  78. package/dist/components/RichTextEditor/RichTextEditor.js +494 -0
  79. package/dist/components/SegmentedControl/SegmentedControl.js +7 -2
  80. package/dist/components/Select/Select.css +70 -0
  81. package/dist/components/Select/Select.d.ts +12 -0
  82. package/dist/components/Select/Select.js +59 -4
  83. package/dist/components/Stack/Stack.css +49 -0
  84. package/dist/components/Stack/Stack.d.ts +65 -7
  85. package/dist/components/Stack/Stack.js +30 -2
  86. package/dist/components/StatCard/StatCard.css +73 -0
  87. package/dist/components/StatCard/StatCard.d.ts +17 -0
  88. package/dist/components/StatCard/StatCard.js +4 -1
  89. package/dist/components/Tabs/Tab.d.ts +15 -0
  90. package/dist/components/Tabs/Tab.js +30 -1
  91. package/dist/components/Tabs/Tabs.css +132 -0
  92. package/dist/components/Tabs/Tabs.d.ts +7 -0
  93. package/dist/components/Tabs/Tabs.js +13 -2
  94. package/dist/components/Tag/Tag.css +85 -2
  95. package/dist/components/Tag/Tag.d.ts +13 -6
  96. package/dist/components/Tag/Tag.js +1 -0
  97. package/dist/components/Text/Text.js +2 -2
  98. package/dist/components/Textarea/Textarea.css +8 -0
  99. package/dist/components/TimePicker/TimePicker.css +8 -0
  100. package/dist/components/Tooltip/Tooltip.css +25 -0
  101. package/dist/components/Tooltip/Tooltip.d.ts +11 -0
  102. package/dist/components/Tooltip/Tooltip.js +18 -3
  103. package/dist/index.d.ts +25 -0
  104. package/dist/index.js +14 -0
  105. package/dist/teste/AILabel.test.d.ts +1 -0
  106. package/dist/teste/AILabel.test.js +33 -0
  107. package/dist/teste/AccordionConteudoLivre.test.d.ts +1 -0
  108. package/dist/teste/AccordionConteudoLivre.test.js +29 -0
  109. package/dist/teste/AtributosRepassados.test.d.ts +1 -0
  110. package/dist/teste/AtributosRepassados.test.js +52 -0
  111. package/dist/teste/AttachmentCardIA.test.d.ts +1 -0
  112. package/dist/teste/AttachmentCardIA.test.js +89 -0
  113. package/dist/teste/AvatarGroupOverlap.test.d.ts +1 -0
  114. package/dist/teste/AvatarGroupOverlap.test.js +56 -0
  115. package/dist/teste/BadgeTag.test.d.ts +1 -0
  116. package/dist/teste/BadgeTag.test.js +42 -0
  117. package/dist/teste/BoxItemFlex.test.d.ts +1 -0
  118. package/dist/teste/BoxItemFlex.test.js +54 -0
  119. package/dist/teste/BoxLayout.test.d.ts +1 -0
  120. package/dist/teste/BoxLayout.test.js +35 -0
  121. package/dist/teste/Button.test.d.ts +1 -0
  122. package/dist/teste/Button.test.js +27 -0
  123. package/dist/teste/Calendar.test.d.ts +1 -0
  124. package/dist/teste/Calendar.test.js +221 -0
  125. package/dist/teste/ChipsXs.test.d.ts +1 -0
  126. package/dist/teste/ChipsXs.test.js +31 -0
  127. package/dist/teste/Coachmark.test.d.ts +1 -0
  128. package/dist/teste/Coachmark.test.js +149 -0
  129. package/dist/teste/ColorPicker.test.d.ts +1 -0
  130. package/dist/teste/ColorPicker.test.js +132 -0
  131. package/dist/teste/DataTableCelulaLivre.test.d.ts +1 -0
  132. package/dist/teste/DataTableCelulaLivre.test.js +76 -0
  133. package/dist/teste/DataTableDocumento.test.d.ts +1 -0
  134. package/dist/teste/DataTableDocumento.test.js +92 -0
  135. package/dist/teste/DatePicker.test.js +23 -0
  136. package/dist/teste/FileInputTrigger.test.d.ts +1 -0
  137. package/dist/teste/FileInputTrigger.test.js +53 -0
  138. package/dist/teste/IconPicker.test.d.ts +1 -0
  139. package/dist/teste/IconPicker.test.js +130 -0
  140. package/dist/teste/InputMascaraEAfins.test.d.ts +1 -0
  141. package/dist/teste/InputMascaraEAfins.test.js +99 -0
  142. package/dist/teste/KbdCodeBlock.test.d.ts +1 -0
  143. package/dist/teste/KbdCodeBlock.test.js +95 -0
  144. package/dist/teste/List.test.d.ts +1 -0
  145. package/dist/teste/List.test.js +153 -0
  146. package/dist/teste/ModalVariantes.test.d.ts +1 -0
  147. package/dist/teste/ModalVariantes.test.js +151 -0
  148. package/dist/teste/NomeAcessivelSsr.test.d.ts +1 -0
  149. package/dist/teste/NomeAcessivelSsr.test.js +88 -0
  150. package/dist/teste/OrgChart.test.d.ts +1 -0
  151. package/dist/teste/OrgChart.test.js +162 -0
  152. package/dist/teste/OtpInput.test.d.ts +1 -0
  153. package/dist/teste/OtpInput.test.js +143 -0
  154. package/dist/teste/PopoverMaxHeight.test.d.ts +1 -0
  155. package/dist/teste/PopoverMaxHeight.test.js +38 -0
  156. package/dist/teste/RichTextEditor.test.d.ts +1 -0
  157. package/dist/teste/RichTextEditor.test.js +287 -0
  158. package/dist/teste/SelectPlacementFiltro.test.d.ts +1 -0
  159. package/dist/teste/SelectPlacementFiltro.test.js +88 -0
  160. package/dist/teste/Stack.test.d.ts +1 -0
  161. package/dist/teste/Stack.test.js +57 -0
  162. package/dist/teste/StatCardRotuloTopo.test.d.ts +1 -0
  163. package/dist/teste/StatCardRotuloTopo.test.js +34 -0
  164. package/dist/teste/TabsContadorFechavel.test.d.ts +1 -0
  165. package/dist/teste/TabsContadorFechavel.test.js +79 -0
  166. package/dist/teste/TooltipDark.test.d.ts +1 -0
  167. package/dist/teste/TooltipDark.test.js +31 -0
  168. package/dist/utils/calendario.d.ts +28 -0
  169. package/dist/utils/calendario.js +73 -0
  170. package/dist/utils/html-seguro.d.ts +27 -0
  171. package/dist/utils/html-seguro.js +97 -0
  172. package/dist/utils/paleta-de-cores.d.ts +26 -0
  173. package/dist/utils/paleta-de-cores.js +10 -0
  174. package/dist/utils/texto.d.ts +5 -0
  175. package/dist/utils/texto.js +5 -0
  176. package/package.json +3 -3
  177. package/src/index.ts +26 -0
  178. package/src/teste/AILabel.test.tsx +41 -0
  179. package/src/teste/AccordionConteudoLivre.test.tsx +39 -0
  180. package/src/teste/AtributosRepassados.test.tsx +73 -0
  181. package/src/teste/AttachmentCardIA.test.tsx +126 -0
  182. package/src/teste/AvatarGroupOverlap.test.tsx +74 -0
  183. package/src/teste/BadgeTag.test.tsx +64 -0
  184. package/src/teste/BoxItemFlex.test.tsx +81 -0
  185. package/src/teste/BoxLayout.test.tsx +50 -0
  186. package/src/teste/Button.test.tsx +39 -0
  187. package/src/teste/Calendar.test.tsx +282 -0
  188. package/src/teste/ChipsXs.test.tsx +41 -0
  189. package/src/teste/Coachmark.test.tsx +198 -0
  190. package/src/teste/ColorPicker.test.tsx +153 -0
  191. package/src/teste/DataTableCelulaLivre.test.tsx +103 -0
  192. package/src/teste/DataTableDocumento.test.tsx +102 -0
  193. package/src/teste/DatePicker.test.tsx +38 -0
  194. package/src/teste/FileInputTrigger.test.tsx +89 -0
  195. package/src/teste/IconPicker.test.tsx +145 -0
  196. package/src/teste/InputMascaraEAfins.test.tsx +124 -0
  197. package/src/teste/KbdCodeBlock.test.tsx +106 -0
  198. package/src/teste/List.test.tsx +269 -0
  199. package/src/teste/ModalVariantes.test.tsx +173 -0
  200. package/src/teste/NomeAcessivelSsr.test.tsx +110 -0
  201. package/src/teste/OrgChart.test.tsx +183 -0
  202. package/src/teste/OtpInput.test.tsx +163 -0
  203. package/src/teste/PopoverMaxHeight.test.tsx +47 -0
  204. package/src/teste/RichTextEditor.test.tsx +329 -0
  205. package/src/teste/SelectPlacementFiltro.test.tsx +110 -0
  206. package/src/teste/Stack.test.tsx +80 -0
  207. package/src/teste/StatCardRotuloTopo.test.tsx +44 -0
  208. package/src/teste/TabsContadorFechavel.test.tsx +144 -0
  209. package/src/teste/TooltipDark.test.tsx +51 -0
  210. package/src/utils/calendario.ts +78 -0
  211. package/src/utils/html-seguro.ts +94 -0
  212. package/src/utils/paleta-de-cores.ts +34 -0
  213. package/src/utils/texto.ts +5 -0
@@ -1,9 +1,26 @@
1
- import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import './Box.css';
3
4
  function Box(props) {
5
+ function elementTag() {
6
+ return props.as || "div";
7
+ }
8
+ function isFlex() {
9
+ return !!(props.direction ||
10
+ props.gap ||
11
+ props.align ||
12
+ props.justify ||
13
+ props.wrap);
14
+ }
4
15
  function classes() {
5
16
  return [
6
17
  "umds-box",
18
+ isFlex() ? "umds-box--flex" : "",
19
+ isFlex() ? `umds-box--${props.direction || "vertical"}` : "",
20
+ props.gap ? `umds-box--gap-${props.gap}` : "",
21
+ props.align ? `umds-box--align-${props.align}` : "",
22
+ props.justify ? `umds-box--justify-${props.justify}` : "",
23
+ props.wrap ? "umds-box--wrap" : "",
7
24
  props.padding ? `umds-box--p-${props.padding}` : "",
8
25
  props.paddingX ? `umds-box--px-${props.paddingX}` : "",
9
26
  props.paddingY ? `umds-box--py-${props.paddingY}` : "",
@@ -18,11 +35,34 @@ function Box(props) {
18
35
  ? `umds-box--shadow-${props.shadow}`
19
36
  : "",
20
37
  props.fullWidth ? "umds-box--full" : "",
38
+ props.fullHeight ? "umds-box--full-height" : "",
39
+ props.grow ? "umds-box--grow" : "",
40
+ props.shrink ? `umds-box--shrink-${props.shrink}` : "",
41
+ props.basis ? `umds-box--basis-${props.basis}` : "",
42
+ props.minWidth ? `umds-box--min-w-${props.minWidth}` : "",
43
+ props.overflow ? `umds-box--overflow-${props.overflow}` : "",
44
+ props.overflowX ? `umds-box--overflow-x-${props.overflowX}` : "",
45
+ props.overflowY ? `umds-box--overflow-y-${props.overflowY}` : "",
21
46
  props.className,
22
47
  ]
23
48
  .filter(Boolean)
24
49
  .join(" ");
25
50
  }
26
- return (_jsx("div", { className: classes(), children: _jsx(_Fragment, { children: props.children }) }));
51
+ function htmlAttrs() {
52
+ const out = {};
53
+ for (const chave in props) {
54
+ if (chave.indexOf("data-") === 0 ||
55
+ chave.indexOf("aria-") === 0 ||
56
+ chave === "style" ||
57
+ chave === "class" ||
58
+ chave === "title" ||
59
+ chave === "role" ||
60
+ chave === "tabIndex") {
61
+ out[chave] = props[chave];
62
+ }
63
+ }
64
+ return out;
65
+ }
66
+ return (_jsxs(_Fragment, { children: [elementTag() === "div" ? (_jsx("div", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "span" ? (_jsx("span", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "ul" ? (_jsx("ul", { role: "list", id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "ol" ? (_jsx("ol", { role: "list", id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "li" ? (_jsx("li", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "section" ? (_jsx("section", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "nav" ? (_jsx("nav", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "header" ? (_jsx("header", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "footer" ? (_jsx("footer", { id: props.id, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, elementTag() === "form" ? (_jsx("form", { id: props.id, onSubmit: (event) => props.onSubmit && props.onSubmit(event), ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null] }));
27
67
  }
28
68
  export default Box;
@@ -38,6 +38,18 @@
38
38
  }
39
39
 
40
40
  /* ── Tamanhos ── */
41
+ .umds-button--xs {
42
+ /* 26px: 24 + 2, os dois degraus do DS somados (sem token próprio; é a altura do botão dentro de card/linha) */
43
+ height: calc(var(--umds-primitive-spacing-xxs) + var(--umds-primitive-spacing-micro));
44
+ padding: 0 var(--umds-primitive-spacing-mini); /* 12px */
45
+ gap: var(--umds-primitive-spacing-quarck); /* 4px */
46
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
47
+ }
48
+
49
+ .umds-button--xs .umds-icon {
50
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
51
+ }
52
+
41
53
  .umds-button--sm {
42
54
  height: var(--umds-primitive-spacing-xs); /* 32px */
43
55
  padding: 0 var(--umds-primitive-spacing-nano); /* era 0 12px (protótipo --space-3) — snap 14/07: controle compacto → 8px (escala sm 8 / md 16 / lg 24) */
@@ -110,6 +122,22 @@
110
122
  cursor: not-allowed;
111
123
  }
112
124
 
125
+ /* ── Neutral text (sem borda, sem azul: barra de ações) ── */
126
+ .umds-button--neutral-text {
127
+ background-color: transparent;
128
+ border-color: transparent;
129
+ color: var(--umds-semantic-color-neutral-dark-down);
130
+ }
131
+
132
+ .umds-button--neutral-text:hover:not(:disabled) {
133
+ background-color: var(--umds-semantic-color-neutral-light-medium);
134
+ }
135
+
136
+ .umds-button--neutral-text:disabled {
137
+ color: var(--umds-semantic-color-neutral-dark-up);
138
+ cursor: not-allowed;
139
+ }
140
+
113
141
  /* ── Text ── */
114
142
  .umds-button--text {
115
143
  background-color: transparent;
@@ -172,6 +200,7 @@
172
200
  padding: 0;
173
201
  }
174
202
 
203
+ .umds-button--icon.umds-button--xs { width: calc(var(--umds-primitive-spacing-xxs) + var(--umds-primitive-spacing-micro)); } /* 26px */
175
204
  .umds-button--icon.umds-button--sm { width: var(--umds-primitive-spacing-xs); } /* 32px */
176
205
  .umds-button--icon.umds-button--md { width: var(--umds-primitive-spacing-sm); } /* 40px */
177
206
  .umds-button--icon.umds-button--lg { width: var(--umds-primitive-spacing-md); } /* 48px */
@@ -1,8 +1,8 @@
1
1
  import './Button.css';
2
2
  /**
3
3
  * Button — botão de ação com variantes, tamanhos, ícones e estado de carregamento.
4
- * @property {string} variant - Variante visual: 'primary' | 'secondary' | 'neutral' | 'text' | 'negative' | 'negative-outlined' | 'icon'
5
- * @property {string} size - Tamanho do botão: 'sm' | 'md' | 'lg'
4
+ * @property {string} variant - Variante visual: 'primary' | 'secondary' | 'neutral' | 'neutral-text' | 'text' | 'negative' | 'negative-outlined' | 'icon'. `neutral` é o contornado cinza; `neutral-text` é o texto sem borda e sem azul, para barras de ações onde nenhum botão é a ação principal.
5
+ * @property {string} size - Tamanho do botão: 'xs' (26px, para dentro de card e linha de lista) | 'sm' (32px) | 'md' (40px) | 'lg' (48px)
6
6
  * @property {boolean} disabled - Desabilita o botão
7
7
  * @property {string} type - Tipo nativo do botão: 'button' | 'submit' | 'reset'
8
8
  * @property {Function} onClick - Callback disparado no clique
@@ -25,8 +25,8 @@ import './Button.css';
25
25
  * @quandoNaoUsar Para NAVEGAR para outra página ou recurso — use `Link`, que gera `<a>` e permite abrir em nova aba. A regra: se o usuário pode querer "abrir em nova aba", é `Link`.
26
26
  */
27
27
  export interface ButtonProps {
28
- variant?: "primary" | "secondary" | "neutral" | "text" | "negative" | "negative-outlined" | "icon";
29
- size?: "sm" | "md" | "lg";
28
+ variant?: "primary" | "secondary" | "neutral" | "neutral-text" | "text" | "negative" | "negative-outlined" | "icon";
29
+ size?: "xs" | "sm" | "md" | "lg";
30
30
  disabled?: boolean;
31
31
  type?: "button" | "submit" | "reset";
32
32
  children?: any;
@@ -15,6 +15,9 @@ function Button(props) {
15
15
  .filter(Boolean)
16
16
  .join(" ");
17
17
  }
18
+ function iconSize() {
19
+ return props.size === "xs" ? "sm" : props.size;
20
+ }
18
21
  function showStartIcon() {
19
22
  const isLoading = props.loading;
20
23
  const position = props.loadingPosition || "center";
@@ -68,6 +71,6 @@ function Button(props) {
68
71
  props.onClick(event);
69
72
  }
70
73
  }
71
- return (_jsxs("button", { type: props.type || "button", disabled: props.disabled, id: props.id, name: props.name, value: props.value, form: props.form, autoFocus: props.autoFocus, tabIndex: props.tabIndex, "aria-label": props.ariaLabel, "aria-busy": props.loading, onClick: (event) => handleClick(event), className: classes(), children: [showLoadingAtStart() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: props.size }) })) : null, showStartIcon() ? (_jsx(_Fragment, { children: startIconIsIcon() ? (_jsx(Icon, { variant: "inherit", icon: props.startIcon, size: props.size })) : (_jsx(_Fragment, { children: _jsx(_Fragment, { children: props.startIcon }) })) })) : null, showLoadingAtCenter() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: props.size }) })) : null, showLoadingAtCenter() ? (_jsx("span", { className: "umds-button__visually-hidden", children: props.children })) : null, showChildren() ? _jsx(_Fragment, { children: props.children }) : null, showEndIcon() ? (_jsx(_Fragment, { children: endIconIsIcon() ? (_jsx(Icon, { variant: "inherit", icon: props.endIcon, size: props.size })) : (_jsx(_Fragment, { children: _jsx(_Fragment, { children: props.endIcon }) })) })) : null, showLoadingAtEnd() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: props.size }) })) : null] }));
74
+ return (_jsxs("button", { type: props.type || "button", disabled: props.disabled, id: props.id, name: props.name, value: props.value, form: props.form, autoFocus: props.autoFocus || undefined, tabIndex: props.tabIndex, "aria-label": props.ariaLabel, "aria-busy": props.loading, onClick: (event) => handleClick(event), className: classes(), children: [showLoadingAtStart() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: iconSize() }) })) : null, showStartIcon() ? (_jsx(_Fragment, { children: startIconIsIcon() ? (_jsx(Icon, { variant: "inherit", icon: props.startIcon, size: iconSize() })) : (_jsx(_Fragment, { children: _jsx(_Fragment, { children: props.startIcon }) })) })) : null, showLoadingAtCenter() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: iconSize() }) })) : null, showLoadingAtCenter() ? (_jsx("span", { className: "umds-button__visually-hidden", children: props.children })) : null, showChildren() ? _jsx(_Fragment, { children: props.children }) : null, showEndIcon() ? (_jsx(_Fragment, { children: endIconIsIcon() ? (_jsx(Icon, { variant: "inherit", icon: props.endIcon, size: iconSize() })) : (_jsx(_Fragment, { children: _jsx(_Fragment, { children: props.endIcon }) })) })) : null, showLoadingAtEnd() ? (_jsx("span", { "aria-hidden": "true", className: "umds-button__loading", children: _jsx(Icon, { variant: "inherit", icon: props.loadingIcon || faRefresh, size: iconSize() }) })) : null] }));
72
75
  }
73
76
  export default Button;
@@ -0,0 +1,245 @@
1
+ /* ─────────────────────────────────────────────
2
+ CALENDAR
3
+ Agenda com eventos por dia: visão de mês e de semana.
4
+
5
+ O evento é um chip de fundo suave (a cor do dado a 16% sobre o branco) com
6
+ uma barra da cor do dado no lado esquerdo. O TEXTO é sempre escuro: a cor
7
+ nunca é o único sinal, e o contraste do texto não depende do tom escolhido.
8
+
9
+ Cores: semânticos · Medidas: primitivos
10
+ ───────────────────────────────────────────── */
11
+
12
+ .umds-calendar {
13
+ display: flex;
14
+ flex-direction: column;
15
+ width: 100%;
16
+ background: var(--umds-semantic-color-background-white);
17
+ border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
18
+ border-radius: var(--umds-primitive-border-radius-sm);
19
+ font-family: var(--umds-semantic-font-family-base);
20
+ color: var(--umds-semantic-color-neutral-dark-pure);
21
+ overflow: hidden;
22
+ }
23
+
24
+ /* ── Cabeçalho ── */
25
+ .umds-calendar__toolbar {
26
+ display: grid;
27
+ grid-template-columns: 1fr auto 1fr;
28
+ align-items: center;
29
+ gap: var(--umds-primitive-spacing-xxxs); /* 16px */
30
+ padding: var(--umds-primitive-spacing-mini) var(--umds-primitive-spacing-xxxs); /* 12px 16px */
31
+ border-bottom: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
32
+ }
33
+
34
+ .umds-calendar__toolbar-start,
35
+ .umds-calendar__toolbar-end {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: var(--umds-primitive-spacing-nano); /* 8px */
39
+ min-width: 0;
40
+ }
41
+
42
+ .umds-calendar__toolbar-end {
43
+ justify-content: flex-end;
44
+ }
45
+
46
+ .umds-calendar__nav {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: var(--umds-primitive-spacing-nano); /* 8px */
50
+ }
51
+
52
+ .umds-calendar__title {
53
+ /* 152px (200 - 48): o título trocando de tamanho não faz os botões dançarem. */
54
+ min-width: calc(var(--umds-primitive-spacing-giant) - var(--umds-primitive-spacing-md));
55
+ text-align: center;
56
+ font-size: var(--umds-primitive-font-size-xs); /* 16px */
57
+ font-weight: var(--umds-primitive-font-weight-bold);
58
+ }
59
+
60
+ /* ── Grade ── */
61
+ .umds-calendar__grid {
62
+ display: flex;
63
+ flex-direction: column;
64
+ }
65
+
66
+ .umds-calendar__weekdays,
67
+ .umds-calendar__week {
68
+ display: grid;
69
+ grid-template-columns: repeat(7, minmax(0, 1fr));
70
+ }
71
+
72
+ .umds-calendar__weekdays {
73
+ background: var(--umds-semantic-color-background-light);
74
+ border-bottom: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
75
+ }
76
+
77
+ .umds-calendar__weekday {
78
+ padding: var(--umds-primitive-spacing-nano); /* 8px */
79
+ text-align: center;
80
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
81
+ font-weight: var(--umds-primitive-font-weight-bold);
82
+ color: var(--umds-semantic-color-neutral-dark-down);
83
+ }
84
+
85
+ .umds-calendar__week + .umds-calendar__week .umds-calendar__cell {
86
+ border-top: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
87
+ }
88
+
89
+ .umds-calendar__cell {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: var(--umds-primitive-spacing-quarck); /* 4px */
93
+ box-sizing: border-box;
94
+ min-width: 0;
95
+ min-height: var(--umds-primitive-spacing-xxl); /* 80px */
96
+ padding: var(--umds-primitive-spacing-nano); /* 8px */
97
+ border-left: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
98
+ background: var(--umds-semantic-color-background-white);
99
+ cursor: default;
100
+ }
101
+
102
+ .umds-calendar__cell:first-child {
103
+ border-left: none;
104
+ }
105
+
106
+ .umds-calendar--week .umds-calendar__cell {
107
+ min-height: var(--umds-primitive-spacing-giant); /* 200px */
108
+ }
109
+
110
+ .umds-calendar__cell--outside {
111
+ background: var(--umds-semantic-color-background-light);
112
+ color: var(--umds-semantic-color-neutral-dark-down);
113
+ }
114
+
115
+ .umds-calendar__cell--today {
116
+ background: var(--umds-semantic-color-primary-light);
117
+ }
118
+
119
+ .umds-calendar__cell--selected {
120
+ box-shadow: inset 0 0 0 var(--umds-primitive-border-width-thin) var(--umds-semantic-color-primary-pure);
121
+ }
122
+
123
+ .umds-calendar__cell:focus-visible {
124
+ outline: var(--umds-primitive-border-width-thin) solid var(--umds-semantic-color-primary-pure);
125
+ outline-offset: calc(var(--umds-primitive-border-width-thin) * -1);
126
+ }
127
+
128
+ .umds-calendar__day-number {
129
+ align-self: flex-start;
130
+ display: inline-flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ min-width: var(--umds-primitive-spacing-xxs); /* 24px */
134
+ height: var(--umds-primitive-spacing-xxs);
135
+ font-size: var(--umds-primitive-font-size-xxs); /* 14px */
136
+ border-radius: var(--umds-primitive-border-radius-circular);
137
+ }
138
+
139
+ /* Hoje: o número num círculo cheio. Texto claro sobre o primário. */
140
+ .umds-calendar__cell--today .umds-calendar__day-number {
141
+ background: var(--umds-semantic-color-primary-pure);
142
+ color: var(--umds-semantic-color-background-white);
143
+ font-weight: var(--umds-primitive-font-weight-bold);
144
+ }
145
+
146
+ /* ── Eventos ── */
147
+ .umds-calendar__events {
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: var(--umds-primitive-spacing-quarck); /* 4px */
151
+ min-width: 0;
152
+ }
153
+
154
+ .umds-calendar__event {
155
+ display: flex;
156
+ align-items: baseline;
157
+ gap: var(--umds-primitive-spacing-quarck); /* 4px */
158
+ box-sizing: border-box;
159
+ width: 100%;
160
+ min-width: 0;
161
+ margin: 0;
162
+ padding: var(--umds-primitive-spacing-micro) var(--umds-primitive-spacing-nano); /* 2px 8px */
163
+ border: none;
164
+ /* A cor do dado vem do `style` (barra e fundo suave); o texto é sempre escuro. */
165
+ border-left: var(--umds-primitive-border-width-thin) solid transparent;
166
+ border-radius: var(--umds-primitive-border-radius-xs);
167
+ font: inherit;
168
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
169
+ color: var(--umds-semantic-color-neutral-dark-pure);
170
+ text-align: left;
171
+ cursor: pointer;
172
+ }
173
+
174
+ .umds-calendar__event:hover {
175
+ filter: brightness(0.96);
176
+ }
177
+
178
+ .umds-calendar__event:focus-visible,
179
+ .umds-calendar__more:focus-visible {
180
+ outline: var(--umds-primitive-border-width-thin) solid var(--umds-semantic-color-primary-pure);
181
+ outline-offset: var(--umds-primitive-border-width-thin);
182
+ }
183
+
184
+ .umds-calendar__event-time {
185
+ flex: none;
186
+ font-weight: var(--umds-primitive-font-weight-semibold);
187
+ }
188
+
189
+ .umds-calendar__event-title {
190
+ min-width: 0;
191
+ overflow: hidden;
192
+ text-overflow: ellipsis;
193
+ white-space: nowrap;
194
+ }
195
+
196
+ .umds-calendar--week .umds-calendar__event-title {
197
+ white-space: normal;
198
+ overflow-wrap: anywhere;
199
+ }
200
+
201
+ .umds-calendar__more {
202
+ align-self: flex-start;
203
+ margin: 0;
204
+ padding: var(--umds-primitive-spacing-micro) var(--umds-primitive-spacing-quarck); /* 2px 4px */
205
+ border: none;
206
+ border-radius: var(--umds-primitive-border-radius-xs);
207
+ background: transparent;
208
+ font: inherit;
209
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
210
+ font-weight: var(--umds-primitive-font-weight-semibold);
211
+ color: var(--umds-semantic-color-primary-dark);
212
+ cursor: pointer;
213
+ }
214
+
215
+ .umds-calendar__more:hover {
216
+ text-decoration: underline;
217
+ }
218
+
219
+ /* Telas estreitas: o cabeçalho empilha e a célula perde folga. */
220
+ @media (max-width: 640px) {
221
+ .umds-calendar__toolbar {
222
+ grid-template-columns: 1fr;
223
+ justify-items: center;
224
+ }
225
+
226
+ .umds-calendar__toolbar-start,
227
+ .umds-calendar__toolbar-end {
228
+ justify-content: center;
229
+ flex-wrap: wrap;
230
+ }
231
+
232
+ .umds-calendar__cell {
233
+ padding: var(--umds-primitive-spacing-quarck); /* 4px */
234
+ }
235
+ }
236
+
237
+ @media (forced-colors: active) {
238
+ .umds-calendar__event {
239
+ border: var(--umds-primitive-border-width-hairline) solid CanvasText;
240
+ }
241
+
242
+ .umds-calendar__cell--today .umds-calendar__day-number {
243
+ outline: var(--umds-primitive-border-width-thin) solid Highlight;
244
+ }
245
+ }
@@ -0,0 +1,125 @@
1
+ import './Calendar.css';
2
+ /**
3
+ * Evento do Calendar.
4
+ * @property {string} id - Identidade do evento (opcional)
5
+ * @property {string} date - Dia do evento: `YYYY-MM-DD` (ou um `Date`)
6
+ * @property {string} title - Texto do evento
7
+ * @property {string} color - Cor de DADO do evento: nome de um token (`--umds-primitive-blue-pure`) ou uma cor. Padrão: o primário. A cor vai no fundo suave e na barra do lado; o texto é sempre escuro (a cor nunca fica sozinha).
8
+ * @property {string} time - Horário, mostrado antes do título (ex.: "09:00")
9
+ */
10
+ export interface CalendarEvent {
11
+ id?: string;
12
+ date: any;
13
+ title: string;
14
+ color?: string;
15
+ time?: string;
16
+ [key: string]: any;
17
+ }
18
+ /** Um dia da grade, já pronto para desenhar. */
19
+ /** Um dia da grade, já pronto para desenhar. */
20
+ export interface CalendarDayCell {
21
+ iso: string;
22
+ day: number;
23
+ outside: boolean;
24
+ today: boolean;
25
+ selected: boolean;
26
+ tabIndex: number;
27
+ label: string;
28
+ classes: string;
29
+ visible: CalendarEvent[];
30
+ hidden: number;
31
+ moreText: string;
32
+ moreAria: string;
33
+ [key: string]: any;
34
+ }
35
+ /**
36
+ * Calendar — agenda com eventos por dia, em visão de mês ou de semana.
37
+ *
38
+ * `events` é uma lista plana (`{ date, title, color? }`): o componente agrupa
39
+ * por dia. A cor é cor de DADO (um token, como o do `ColorPicker`), aplicada num
40
+ * fundo suave com uma barra do lado; o texto do evento é sempre escuro, então a
41
+ * cor nunca é a única informação.
42
+ *
43
+ * Mês: cada dia mostra até `maxVisible` eventos e um "+N" para o resto
44
+ * (`onMoreClick` recebe o dia e os eventos escondidos). O corte é por QUANTIDADE,
45
+ * não por altura. Semana: sete colunas, todos os eventos de cada dia.
46
+ *
47
+ * É uma grade acessível (`role="grid"`): um Tab entra no dia em foco (hoje, ou o
48
+ * primeiro), as setas movem de dia (mudando de mês ou de semana se for preciso),
49
+ * Home e End vão às pontas da semana, PageUp e PageDown trocam de mês (ou de
50
+ * semana), Enter e Espaço acionam `onDayClick`. Os eventos do dia em foco entram
51
+ * na ordem de Tab depois dele.
52
+ *
53
+ * A data mostrada (`date`) e a visão (`view`) são controláveis (`onDateChange`,
54
+ * `onViewChange`) ou internas (`defaultDate`, `defaultView`). O cabeçalho aceita
55
+ * o slot `headerStart` (um filtro de escopo, à esquerda) e `headerEnd` (a
56
+ * legenda, à direita). Nomes de mês e de dia saem do `Intl` no `locale` pedido;
57
+ * os demais textos são props.
58
+ * @property {CalendarEvent[]} events - Eventos (lista plana)
59
+ * @property {string} view - Visão: 'month' | 'week' (controlada)
60
+ * @property {string} defaultView - Visão inicial (não controlada; padrão 'month')
61
+ * @property {string} date - Data de referência `YYYY-MM-DD`: o mês ou a semana que ela contém é o que se vê (controlada)
62
+ * @property {string} defaultDate - Data inicial (não controlada; padrão hoje)
63
+ * @property {string} selectedDate - Dia marcado como selecionado (`YYYY-MM-DD`)
64
+ * @property {string} today - O "hoje" do calendário (`YYYY-MM-DD`; padrão a data do sistema). Útil em testes e em demonstração.
65
+ * @property {number} weekStartsOn - Primeiro dia da semana: 0 domingo (padrão) | 1 segunda
66
+ * @property {number} maxVisible - Eventos por dia na visão de mês antes do "+N" (padrão 3)
67
+ * @property {string} locale - Idioma dos nomes de mês e de dia (padrão 'pt-BR')
68
+ * @property {string} ariaLabel - Nome acessível da grade (padrão: o título, ex.: "Maio 2026")
69
+ * @property {string} previousLabel - Nome do botão de voltar (padrão "Anterior")
70
+ * @property {string} nextLabel - Nome do botão de avançar (padrão "Próximo")
71
+ * @property {string} todayLabel - Texto do botão de hoje (padrão "Hoje")
72
+ * @property {string} monthLabel - Texto da visão de mês (padrão "Mês")
73
+ * @property {string} weekLabel - Texto da visão de semana (padrão "Semana")
74
+ * @property {string} viewLabel - Nome do seletor de visão (padrão "Visão")
75
+ * @property {boolean} hideViewSwitcher - Esconde o seletor Mês/Semana
76
+ * @property {string} moreLabel - Texto do "+N"; `{count}` vira o número (padrão "+{count}")
77
+ * @property {string} moreAriaLabel - Nome do "+N"; `{count}` e `{date}` são trocados (padrão "{count} eventos a mais em {date}")
78
+ * @property {function} dayLabel - Nome acessível de cada dia: `(iso, quantidade) => texto` (padrão: "sexta-feira, 15 de maio de 2026, 2 eventos", no `locale`)
79
+ * @property {function} onDayClick - Clique (ou Enter) num dia: recebe `YYYY-MM-DD`
80
+ * @property {function} onEventClick - Clique num evento: recebe o evento
81
+ * @property {function} onMoreClick - Clique no "+N": recebe o dia e a lista dos eventos escondidos
82
+ * @property {function} onDateChange - Mudou a data de referência (navegação): recebe `YYYY-MM-DD`
83
+ * @property {function} onViewChange - Mudou a visão: recebe 'month' | 'week'
84
+ * @property {string} className - Classes CSS adicionais
85
+ * @slot headerStart - Cabeçalho, à esquerda: um filtro de escopo.
86
+ * @slot headerEnd - Cabeçalho, antes do seletor de visão: a legenda.
87
+ * @quandoUsar Mostrar prazos, vencimentos e compromissos distribuídos no tempo: agenda de documentos, de tarefas, de assinaturas.
88
+ * @quandoNaoUsar Para escolher UMA data num campo, use `DatePicker`. Para uma sequência de acontecimentos sem grade de dias, use `Timeline`. Para uma grade de horas (agenda com horário de início e fim), este componente não serve: não tem eixo de horas.
89
+ */
90
+ /** Um dia da grade, já pronto para desenhar. */
91
+ export interface CalendarProps {
92
+ events?: CalendarEvent[];
93
+ view?: "month" | "week";
94
+ defaultView?: "month" | "week";
95
+ date?: string;
96
+ defaultDate?: string;
97
+ selectedDate?: string;
98
+ today?: string;
99
+ weekStartsOn?: 0 | 1;
100
+ maxVisible?: number;
101
+ locale?: string;
102
+ ariaLabel?: string;
103
+ previousLabel?: string;
104
+ nextLabel?: string;
105
+ todayLabel?: string;
106
+ monthLabel?: string;
107
+ weekLabel?: string;
108
+ viewLabel?: string;
109
+ hideViewSwitcher?: boolean;
110
+ moreLabel?: string;
111
+ moreAriaLabel?: string;
112
+ dayLabel?: (iso: string, count: number) => string;
113
+ className?: string;
114
+ /** Slot `headerStart`: à esquerda do cabeçalho. */
115
+ headerStart?: any;
116
+ /** Slot `headerEnd`: à direita, antes do seletor de visão. */
117
+ headerEnd?: any;
118
+ onDayClick?: (iso: string) => void;
119
+ onEventClick?: (event: CalendarEvent) => void;
120
+ onMoreClick?: (iso: string, hidden: CalendarEvent[]) => void;
121
+ onDateChange?: (iso: string) => void;
122
+ onViewChange?: (view: "month" | "week") => void;
123
+ }
124
+ declare function Calendar(props: CalendarProps): import("react/jsx-runtime").JSX.Element;
125
+ export default Calendar;