@1doc/1ds-react 2.9.0 → 2.11.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 (172) hide show
  1. package/CHANGELOG.md +653 -0
  2. package/dist/components/Accordion/Accordion.css +13 -0
  3. package/dist/components/Accordion/Accordion.d.ts +9 -0
  4. package/dist/components/Accordion/Accordion.js +18 -5
  5. package/dist/components/AppSubheader/AppSubheader.css +10 -1
  6. package/dist/components/AttachmentCard/AttachmentCard.css +10 -8
  7. package/dist/components/AttachmentCard/AttachmentCard.d.ts +3 -0
  8. package/dist/components/AttachmentCard/AttachmentCard.js +8 -1
  9. package/dist/components/Badge/Badge.css +27 -5
  10. package/dist/components/Badge/Badge.d.ts +20 -4
  11. package/dist/components/Badge/Badge.js +6 -0
  12. package/dist/components/Button/Button.css +5 -0
  13. package/dist/components/Button/Button.d.ts +3 -0
  14. package/dist/components/Button/Button.js +1 -0
  15. package/dist/components/Calendar/Calendar.css +10 -0
  16. package/dist/components/Calendar/Calendar.d.ts +10 -6
  17. package/dist/components/Calendar/Calendar.js +6 -1
  18. package/dist/components/Coachmark/Coachmark.css +10 -0
  19. package/dist/components/Coachmark/Coachmark.d.ts +14 -1
  20. package/dist/components/Coachmark/Coachmark.js +51 -5
  21. package/dist/components/ColorPicker/ColorPicker.css +8 -1
  22. package/dist/components/ColorPicker/ColorPicker.d.ts +2 -2
  23. package/dist/components/DataTable/DataTable.css +216 -0
  24. package/dist/components/DataTable/DataTable.d.ts +70 -2
  25. package/dist/components/DataTable/DataTable.js +293 -6
  26. package/dist/components/DescriptionList/DescriptionList.css +14 -0
  27. package/dist/components/DescriptionList/DescriptionList.d.ts +3 -0
  28. package/dist/components/DescriptionList/DescriptionList.js +1 -0
  29. package/dist/components/EmptyState/EmptyState.d.ts +4 -2
  30. package/dist/components/EmptyState/EmptyState.js +2 -2
  31. package/dist/components/Input/Input.css +30 -0
  32. package/dist/components/Input/Input.d.ts +10 -0
  33. package/dist/components/Input/Input.js +3 -1
  34. package/dist/components/List/ListItem.d.ts +14 -2
  35. package/dist/components/List/ListItem.js +3 -2
  36. package/dist/components/Modal/Modal.css +19 -0
  37. package/dist/components/Modal/Modal.d.ts +7 -0
  38. package/dist/components/Modal/Modal.js +1 -0
  39. package/dist/components/RichTextEditor/RichTextEditor.css +47 -0
  40. package/dist/components/RichTextEditor/RichTextEditor.d.ts +22 -8
  41. package/dist/components/RichTextEditor/RichTextEditor.js +460 -3
  42. package/dist/components/SegmentedControl/SegmentedControl.css +70 -0
  43. package/dist/components/SegmentedControl/SegmentedControl.d.ts +5 -0
  44. package/dist/components/SegmentedControl/SegmentedControl.js +5 -1
  45. package/dist/components/Select/Select.css +122 -2
  46. package/dist/components/Select/Select.d.ts +33 -4
  47. package/dist/components/Select/Select.js +256 -35
  48. package/dist/components/StatCard/StatCard.css +73 -0
  49. package/dist/components/StatCard/StatCard.d.ts +12 -0
  50. package/dist/components/StatCard/StatCard.js +11 -1
  51. package/dist/components/Tabs/Tabs.css +11 -0
  52. package/dist/components/Tabs/Tabs.d.ts +7 -0
  53. package/dist/components/Tabs/Tabs.js +7 -1
  54. package/dist/components/Tag/Tag.css +3 -1
  55. package/dist/components/Toast/Toast.css +32 -0
  56. package/dist/components/Toast/Toast.d.ts +18 -0
  57. package/dist/components/Toast/Toast.js +14 -1
  58. package/dist/components/Toast/ToastStack.js +8 -1
  59. package/dist/teste/AccordionControlado.test.d.ts +1 -0
  60. package/dist/teste/AccordionControlado.test.js +73 -0
  61. package/dist/teste/AccordionTituloNeutro.test.d.ts +1 -0
  62. package/dist/teste/AccordionTituloNeutro.test.js +23 -0
  63. package/dist/teste/AppSubheaderRegiao.test.d.ts +1 -0
  64. package/dist/teste/AppSubheaderRegiao.test.js +13 -0
  65. package/dist/teste/AttachmentCardLista.test.d.ts +1 -0
  66. package/dist/teste/AttachmentCardLista.test.js +49 -0
  67. package/dist/teste/AttachmentCardSm.test.d.ts +1 -0
  68. package/dist/teste/AttachmentCardSm.test.js +26 -0
  69. package/dist/teste/BadgeAttachedTomEPadding.test.d.ts +1 -0
  70. package/dist/teste/BadgeAttachedTomEPadding.test.js +43 -0
  71. package/dist/teste/BadgeNeutroColado.test.d.ts +1 -0
  72. package/dist/teste/BadgeNeutroColado.test.js +11 -0
  73. package/dist/teste/BadgeTag.test.js +13 -0
  74. package/dist/teste/ButtonDensidade.test.d.ts +1 -0
  75. package/dist/teste/ButtonDensidade.test.js +28 -0
  76. package/dist/teste/CalendarCabecalho.test.d.ts +1 -0
  77. package/dist/teste/CalendarCabecalho.test.js +11 -0
  78. package/dist/teste/CalendarCompacto.test.d.ts +1 -0
  79. package/dist/teste/CalendarCompacto.test.js +29 -0
  80. package/dist/teste/CoachmarkSemVeu.test.d.ts +1 -0
  81. package/dist/teste/CoachmarkSemVeu.test.js +85 -0
  82. package/dist/teste/CoachmarkUmPasso.test.d.ts +1 -0
  83. package/dist/teste/CoachmarkUmPasso.test.js +34 -0
  84. package/dist/teste/ColorPickerXs.test.d.ts +1 -0
  85. package/dist/teste/ColorPickerXs.test.js +21 -0
  86. package/dist/teste/DataTableArvoreEVariantes.test.d.ts +1 -0
  87. package/dist/teste/DataTableArvoreEVariantes.test.js +190 -0
  88. package/dist/teste/DataTableCompactaETom.test.d.ts +1 -0
  89. package/dist/teste/DataTableCompactaETom.test.js +69 -0
  90. package/dist/teste/DescriptionListCompacta.test.d.ts +1 -0
  91. package/dist/teste/DescriptionListCompacta.test.js +22 -0
  92. package/dist/teste/EmptyStateTituloRico.test.d.ts +1 -0
  93. package/dist/teste/EmptyStateTituloRico.test.js +23 -0
  94. package/dist/teste/InputAgrupado.test.d.ts +1 -0
  95. package/dist/teste/InputAgrupado.test.js +24 -0
  96. package/dist/teste/InputGhost.test.d.ts +1 -0
  97. package/dist/teste/InputGhost.test.js +32 -0
  98. package/dist/teste/ListItemTooltipStandalone.test.d.ts +1 -0
  99. package/dist/teste/ListItemTooltipStandalone.test.js +39 -0
  100. package/dist/teste/ModalProporcoes1Doc.test.d.ts +1 -0
  101. package/dist/teste/ModalProporcoes1Doc.test.js +32 -0
  102. package/dist/teste/RichTextEditorAlinhaImagemTabela.test.d.ts +1 -0
  103. package/dist/teste/RichTextEditorAlinhaImagemTabela.test.js +212 -0
  104. package/dist/teste/RichTextEditorEstiloDeTexto.test.d.ts +1 -0
  105. package/dist/teste/RichTextEditorEstiloDeTexto.test.js +120 -0
  106. package/dist/teste/SegmentedControlContador.test.d.ts +1 -0
  107. package/dist/teste/SegmentedControlContador.test.js +39 -0
  108. package/dist/teste/SegmentedControlSuperficie.test.d.ts +1 -0
  109. package/dist/teste/SegmentedControlSuperficie.test.js +39 -0
  110. package/dist/teste/SelectAbertoControladoEFlutuante.test.d.ts +1 -0
  111. package/dist/teste/SelectAbertoControladoEFlutuante.test.js +145 -0
  112. package/dist/teste/SelectFiltroCorETamanho.test.d.ts +1 -0
  113. package/dist/teste/SelectFiltroCorETamanho.test.js +77 -0
  114. package/dist/teste/SelectItemComEscopo.test.d.ts +1 -0
  115. package/dist/teste/SelectItemComEscopo.test.js +54 -0
  116. package/dist/teste/SelectListaFiltro.test.d.ts +1 -0
  117. package/dist/teste/SelectListaFiltro.test.js +102 -0
  118. package/dist/teste/StatCardSecundariaETom.test.d.ts +1 -0
  119. package/dist/teste/StatCardSecundariaETom.test.js +45 -0
  120. package/dist/teste/StatCardTamanhoSm.test.d.ts +1 -0
  121. package/dist/teste/StatCardTamanhoSm.test.js +32 -0
  122. package/dist/teste/TabsCompacta.test.d.ts +1 -0
  123. package/dist/teste/TabsCompacta.test.js +35 -0
  124. package/dist/teste/TagPositivoTingido.test.d.ts +1 -0
  125. package/dist/teste/TagPositivoTingido.test.js +54 -0
  126. package/dist/teste/ToastAcaoEDetalhes.test.d.ts +1 -0
  127. package/dist/teste/ToastAcaoEDetalhes.test.js +94 -0
  128. package/dist/teste/lerArquivo.d.ts +1 -0
  129. package/dist/teste/lerArquivo.js +12 -0
  130. package/dist/utils/html-seguro.d.ts +19 -1
  131. package/dist/utils/html-seguro.js +113 -2
  132. package/dist/utils/toast.d.ts +10 -1
  133. package/dist/utils/toast.js +2 -1
  134. package/package.json +3 -3
  135. package/src/teste/AccordionControlado.test.tsx +87 -0
  136. package/src/teste/AccordionTituloNeutro.test.tsx +25 -0
  137. package/src/teste/AppSubheaderRegiao.test.tsx +17 -0
  138. package/src/teste/AttachmentCardLista.test.tsx +53 -0
  139. package/src/teste/AttachmentCardSm.test.tsx +29 -0
  140. package/src/teste/BadgeAttachedTomEPadding.test.tsx +60 -0
  141. package/src/teste/BadgeNeutroColado.test.tsx +15 -0
  142. package/src/teste/BadgeTag.test.tsx +21 -0
  143. package/src/teste/ButtonDensidade.test.tsx +40 -0
  144. package/src/teste/CalendarCabecalho.test.tsx +11 -0
  145. package/src/teste/CalendarCompacto.test.tsx +37 -0
  146. package/src/teste/CoachmarkSemVeu.test.tsx +101 -0
  147. package/src/teste/CoachmarkUmPasso.test.tsx +45 -0
  148. package/src/teste/ColorPickerXs.test.tsx +22 -0
  149. package/src/teste/DataTableArvoreEVariantes.test.tsx +240 -0
  150. package/src/teste/DataTableCompactaETom.test.tsx +85 -0
  151. package/src/teste/DescriptionListCompacta.test.tsx +24 -0
  152. package/src/teste/EmptyStateTituloRico.test.tsx +34 -0
  153. package/src/teste/InputAgrupado.test.tsx +26 -0
  154. package/src/teste/InputGhost.test.tsx +42 -0
  155. package/src/teste/ListItemTooltipStandalone.test.tsx +64 -0
  156. package/src/teste/ModalProporcoes1Doc.test.tsx +36 -0
  157. package/src/teste/RichTextEditorAlinhaImagemTabela.test.tsx +238 -0
  158. package/src/teste/RichTextEditorEstiloDeTexto.test.tsx +137 -0
  159. package/src/teste/SegmentedControlContador.test.tsx +43 -0
  160. package/src/teste/SegmentedControlSuperficie.test.tsx +52 -0
  161. package/src/teste/SelectAbertoControladoEFlutuante.test.tsx +180 -0
  162. package/src/teste/SelectFiltroCorETamanho.test.tsx +90 -0
  163. package/src/teste/SelectItemComEscopo.test.tsx +69 -0
  164. package/src/teste/SelectListaFiltro.test.tsx +120 -0
  165. package/src/teste/StatCardSecundariaETom.test.tsx +51 -0
  166. package/src/teste/StatCardTamanhoSm.test.tsx +42 -0
  167. package/src/teste/TabsCompacta.test.tsx +45 -0
  168. package/src/teste/TagPositivoTingido.test.tsx +60 -0
  169. package/src/teste/ToastAcaoEDetalhes.test.tsx +109 -0
  170. package/src/teste/lerArquivo.ts +13 -0
  171. package/src/utils/html-seguro.ts +105 -2
  172. package/src/utils/toast.ts +12 -2
@@ -49,6 +49,7 @@ function SegmentedControl(props) {
49
49
  return [
50
50
  "umds-segmented",
51
51
  `umds-segmented--${props.size || "md"}`,
52
+ props.variant === "surface" ? "umds-segmented--surface" : "",
52
53
  props.fullWidth ? "umds-segmented--full-width" : "",
53
54
  props.disabled ? "umds-segmented--disabled" : "",
54
55
  isInvalid() ? "umds-segmented--invalid" : "",
@@ -63,6 +64,9 @@ function SegmentedControl(props) {
63
64
  function estaEscolhido(option) {
64
65
  return option.value === currentValue();
65
66
  }
67
+ function temContador(option) {
68
+ return (option.count !== undefined && option.count !== null && option.count !== "");
69
+ }
66
70
  function estaDesabilitado(option) {
67
71
  return !!props.disabled || !!option.disabled;
68
72
  }
@@ -88,6 +92,6 @@ function SegmentedControl(props) {
88
92
  if (!props.id)
89
93
  setUid(gerarId("umds-segmented"));
90
94
  }, []);
91
- return (_jsxs("div", { className: groupClasses(), children: [props.label ? (_jsxs("span", { className: "umds-segmented__group-label", id: labelId(), children: [props.label, props.required ? (_jsx("span", { className: "umds-segmented__required", children: " *" })) : null] })) : null, _jsx("div", { role: "radiogroup", className: "umds-segmented__track", "aria-labelledby": labelledByText(), "aria-label": groupAriaLabel(), "aria-describedby": describedByText(), "aria-invalid": ariaInvalidText(), "aria-required": ariaRequiredText(), children: optionList()?.map((option, index) => (_jsxs(React.Fragment, { children: [_jsx("input", { type: "radio", className: "umds-segmented__input", id: inputId(index), name: groupName(), value: option.value, checked: estaEscolhido(option), disabled: estaDesabilitado(option), "aria-label": rotuloDoSegmento(option), onChange: (event) => handleChange(option) }), _jsx("label", { className: "umds-segmented__item", htmlFor: inputId(index), children: _jsxs("span", { className: "umds-segmented__conteudo", children: [option.icon ? (_jsx(Icon, { size: "sm", variant: "inherit", icon: option.icon })) : null, option.label ? (_jsx("span", { className: "umds-segmented__texto", children: option.label })) : null] }) })] }, option.value))) }), props.errorMessage ? (_jsx(Text, { as: "span", variant: "caption", color: "negative", className: "umds-segmented__error-message", id: errorId(), children: props.errorMessage })) : null] }));
95
+ return (_jsxs("div", { className: groupClasses(), children: [props.label ? (_jsxs("span", { className: "umds-segmented__group-label", id: labelId(), children: [props.label, props.required ? (_jsx("span", { className: "umds-segmented__required", children: " *" })) : null] })) : null, _jsx("div", { role: "radiogroup", className: "umds-segmented__track", "aria-labelledby": labelledByText(), "aria-label": groupAriaLabel(), "aria-describedby": describedByText(), "aria-invalid": ariaInvalidText(), "aria-required": ariaRequiredText(), children: optionList()?.map((option, index) => (_jsxs(React.Fragment, { children: [_jsx("input", { type: "radio", className: "umds-segmented__input", id: inputId(index), name: groupName(), value: option.value, checked: estaEscolhido(option), disabled: estaDesabilitado(option), "aria-label": rotuloDoSegmento(option), onChange: (event) => handleChange(option) }), _jsx("label", { className: "umds-segmented__item", htmlFor: inputId(index), children: _jsxs("span", { className: "umds-segmented__conteudo", children: [option.icon ? (_jsx(Icon, { size: "sm", variant: "inherit", icon: option.icon })) : null, option.label ? (_jsx("span", { className: "umds-segmented__texto", children: option.label })) : null, temContador(option) ? (_jsx("span", { className: "umds-segmented__count", children: option.count })) : null] }) })] }, option.value))) }), props.errorMessage ? (_jsx(Text, { as: "span", variant: "caption", color: "negative", className: "umds-segmented__error-message", id: errorId(), children: props.errorMessage })) : null] }));
92
96
  }
93
97
  export default SegmentedControl;
@@ -175,8 +175,10 @@
175
175
 
176
176
  /* ── Variante filter: botão de filtro de barra de ferramentas ──
177
177
  Contornado em azul, largura do conteúdo, lista mais larga que o botão. */
178
+ /* fit-content e não auto: o wrapper é flex (bloco), e `auto` o estica até a largura do pai. Com ele esticado,
179
+ o `100%` da lista passava a ser o do pai (556px numa barra) e não o do gatilho. */
178
180
  .umds-select--filter {
179
- width: auto;
181
+ width: fit-content;
180
182
  }
181
183
 
182
184
  .umds-select--filter.umds-select--full-width {
@@ -191,10 +193,16 @@
191
193
  width: 100%;
192
194
  }
193
195
 
196
+ /* Fundo branco: o azul-claro do gatilho só vem depois de escolhido um valor (`--has-value`,
197
+ abaixo), que é quando o filtro está recortando a lista. O tamanho padrão é o sm (32px). */
194
198
  .umds-select--filter .umds-select__trigger {
195
199
  width: auto;
196
200
  gap: var(--umds-primitive-spacing-nano);
197
201
  border-color: var(--umds-semantic-color-primary-pure);
202
+ background-color: var(--umds-semantic-color-background-white);
203
+ }
204
+
205
+ .umds-select--filter.umds-select--has-value .umds-select__trigger {
198
206
  background-color: var(--umds-semantic-color-primary-light);
199
207
  }
200
208
 
@@ -212,13 +220,114 @@
212
220
  font-weight: var(--umds-primitive-font-weight-semibold);
213
221
  }
214
222
 
223
+ /* Fonte de 12px no filtro pequeno (o tamanho do CrisDoc); no md segue 14px. */
224
+ .umds-select--filter.umds-select--sm .umds-select__trigger .umds-text {
225
+ font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
226
+ }
227
+
215
228
  .umds-select--filter .umds-select__dropdown {
216
- /* 240px: três vezes o degrau xxl (80px). Sem token de largura de menu. */
229
+ /* 240px: três vezes o degrau xxl (80px). Sem token de largura de menu. `listMinWidth` troca este mínimo
230
+ (estilo inline). A lista nunca é mais estreita que o gatilho (100%). */
217
231
  width: max-content;
218
232
  min-width: max(100%, calc(var(--umds-primitive-spacing-xxl) * 3));
219
233
  max-width: calc(100vw - var(--umds-primitive-spacing-xxxs) * 2);
220
234
  }
221
235
 
236
+ /* Perto da borda direita da janela: a lista se alinha ao fim do gatilho (`alignEnd`, medido ao abrir). */
237
+ .umds-select--filter.umds-select--list-end .umds-select__dropdown {
238
+ left: auto;
239
+ right: 0;
240
+ }
241
+
242
+ /* A busca da lista de filtro acompanha a largura da lista e não a dita: `contain: inline-size` tira a
243
+ largura natural do campo da conta do `max-content`. */
244
+ .umds-select--filter .umds-select__search-container {
245
+ contain: inline-size;
246
+ }
247
+
248
+ /* ── Variante search: o filtro dentro de uma barra de busca ──
249
+ Altura de campo e contorno neutro, para ficar ao lado do campo de busca. */
250
+ .umds-select--filter-search .umds-select__trigger {
251
+ border-color: var(--umds-semantic-field-border-default);
252
+ background-color: var(--umds-semantic-color-background-white);
253
+ }
254
+
255
+ .umds-select--filter-search.umds-select--has-value .umds-select__trigger {
256
+ background-color: var(--umds-semantic-color-background-white);
257
+ }
258
+
259
+ .umds-select--filter-search .umds-select__trigger:hover:not(.umds-select--disabled .umds-select__trigger) {
260
+ border-color: var(--umds-semantic-field-border-hover);
261
+ }
262
+
263
+ .umds-select--filter-search .umds-select__trigger .umds-text,
264
+ .umds-select--filter-search .umds-select__actions {
265
+ color: var(--umds-semantic-color-neutral-dark-pure);
266
+ font-weight: var(--umds-primitive-font-weight-regular);
267
+ }
268
+
269
+ .umds-select--filter-search .umds-select__actions {
270
+ color: var(--umds-semantic-color-neutral-dark-medium);
271
+ }
272
+
273
+ /* ── Variante combo: o filtro colado a outro controle ──
274
+ Sem contorno nem raio próprios: quem desenha a borda é o contêiner do combo. */
275
+ .umds-select--filter-combo .umds-select__trigger {
276
+ border-color: transparent;
277
+ border-radius: var(--umds-primitive-border-radius-none);
278
+ background-color: transparent;
279
+ }
280
+
281
+ .umds-select--filter-combo.umds-select--has-value .umds-select__trigger {
282
+ background-color: transparent;
283
+ }
284
+
285
+ .umds-select--filter-combo .umds-select__trigger:hover:not(.umds-select--disabled .umds-select__trigger) {
286
+ border-color: transparent;
287
+ background-color: var(--umds-semantic-color-background-light);
288
+ }
289
+
290
+ .umds-select--filter-combo .umds-select__trigger .umds-text,
291
+ .umds-select--filter-combo .umds-select__actions {
292
+ color: var(--umds-semantic-color-neutral-dark-down);
293
+ font-weight: var(--umds-primitive-font-weight-regular);
294
+ }
295
+
296
+ /* O foco do combo é o anel do próprio gatilho, por dentro (o contêiner pode cortar o de fora). */
297
+ .umds-select--filter-combo .umds-select__trigger:focus-visible,
298
+ .umds-select--filter-combo.umds-select--open .umds-select__trigger {
299
+ border-color: transparent;
300
+ box-shadow: inset 0 0 0 var(--umds-primitive-border-width-thin) var(--umds-semantic-color-primary-pure);
301
+ }
302
+
303
+ /* ── Ícone e amostra de cor no gatilho (triggerIcon, triggerSwatch) ── */
304
+ .umds-select__trigger-icon {
305
+ display: inline-flex;
306
+ align-items: center;
307
+ flex-shrink: 0;
308
+ color: var(--umds-semantic-color-neutral-dark-medium);
309
+ }
310
+
311
+ .umds-select--filter .umds-select__trigger-icon {
312
+ color: inherit;
313
+ }
314
+
315
+ .umds-select__swatch {
316
+ flex-shrink: 0;
317
+ box-sizing: border-box;
318
+ width: var(--umds-primitive-spacing-mini);
319
+ height: var(--umds-primitive-spacing-mini);
320
+ border-radius: var(--umds-primitive-border-radius-xs);
321
+ /* Anel de 1px: amostra clara não some no fundo branco, nem escura no escuro. */
322
+ border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-down);
323
+ }
324
+
325
+ /* ── Lista flutuante (dentro de diálogo) ──
326
+ O estilo inline (fixed, translate, largura e altura medidas) vem do componente. */
327
+ .umds-select--floating .umds-select__dropdown {
328
+ box-sizing: border-box;
329
+ }
330
+
222
331
  /* ── Busca no dropdown ── */
223
332
  .umds-select__search-container {
224
333
  display: flex;
@@ -239,6 +348,7 @@
239
348
 
240
349
  .umds-select__search-input {
241
350
  flex: 1;
351
+ min-width: 0;
242
352
  border: none;
243
353
  outline: none;
244
354
  font-size: var(--umds-primitive-font-size-xxs);
@@ -463,3 +573,13 @@
463
573
  border-bottom-color: var(--umds-semantic-color-primary-pure);
464
574
  box-shadow: inset 0 -1px 0 var(--umds-semantic-color-primary-pure);
465
575
  }
576
+
577
+ /* ── item no gatilho: o conteúdo do slot/função `item` da opção escolhida ── */
578
+ .umds-select__trigger-item {
579
+ display: inline-flex;
580
+ align-items: center;
581
+ min-width: 0;
582
+ overflow: hidden;
583
+ font-size: var(--umds-semantic-field-text-size);
584
+ color: var(--umds-semantic-field-text-color);
585
+ }
@@ -3,10 +3,13 @@ import './Select.css';
3
3
  * Opção exibida na lista do Select.
4
4
  * @property {string} label - Texto visível da opção.
5
5
  * @property {any} value - Valor associado à opção.
6
+ * @property {string} color - Cor da opção, um token (`var(--umds-semantic-color-...)` ou `var(--umds-primitive-...)`): uma amostra de 12px antes do texto na lista e, com a opção escolhida (seleção única), no gatilho. Decorativa: o texto diz a opção. Sem a prop, nada muda.
6
7
  */
7
8
  export interface SelectOption {
8
9
  label: string;
9
10
  value: string | number;
11
+ /** Cor da opção (token): amostra antes do texto, e no gatilho quando escolhida. */
12
+ color?: string;
10
13
  [key: string]: any;
11
14
  }
12
15
  /**
@@ -40,10 +43,18 @@ export interface SelectOption {
40
43
  * @property {string} ariaLabel - Nome acessível quando não há label visível.
41
44
  * @property {string} id - ID base dos elementos internos. Gerado automaticamente se omitido.
42
45
  * @property {function} onChange - Callback com o(s) valor(es) selecionado(s).
43
- * @property {string} placement - Onde a lista abre: 'bottom' (padrão) | 'top' | 'auto'. O `auto` abre para cima quando falta espaço embaixo da tela e há mais em cima (lista dentro do rodapé de um modal).
44
- * @property {string} variant - 'default' | 'filter'. O `filter` é o botão de filtro de barra de ferramentas: contornado em azul, largura do conteúdo, lista mais larga que o botão, busca focada ao abrir. Combine com `searchable`, `emptyOptionLabel` e o slot `footer`.
46
+ * @property {string} placement - Onde a lista abre: 'bottom' (padrão) | 'top' | 'auto'. O `auto` mede o espaço da janela E do ancestral que rola ou corta (um corpo de modal, um painel com overflow): abre para cima quando falta espaço embaixo e há mais em cima, e limita a altura da lista ao espaço que sobra.
47
+ *
48
+ * Dentro de um diálogo (`role="dialog"` ou `aria-modal`), a lista abre por cima dele: ela passa a `position: fixed`, ancorada no gatilho pelo `@floating-ui/dom`, e não é cortada pelo `overflow` do corpo do modal.
49
+ * @property {string} variant - 'default' | 'filter' | 'search' | 'combo'. O `filter` é o botão de filtro de barra de ferramentas: 32px (`size="sm"` é o padrão das variantes de filtro) e fonte de 12px, fundo branco com contorno azul (azul-claro só depois de escolhido um valor), largura do conteúdo, lista mais larga que o botão, busca focada ao abrir. `search` é o mesmo filtro dentro de uma barra de busca (altura de campo, contorno neutro). `combo` é o filtro colado a outro controle (sem contorno nem raio próprios: quem desenha a borda é o contêiner). Combine com `searchable`, `emptyOptionLabel` e o slot `footer`.
50
+ * @property {boolean} open - Abre/fecha a lista de fora (modo controlado). Sem ela, o Select controla o próprio estado. Use com `onOpenChange`: o filtro com ação no rodapé fecha a lista antes de abrir um modal.
51
+ * @property {function} onOpenChange - Chamado quando a lista pede para abrir ou fechar (clique, teclado, clique fora, Esc, escolha de opção). No modo controlado, é quem decide o novo `open`.
52
+ * @property {IconProp} triggerIcon - Ícone à esquerda do texto do gatilho (objeto Font Awesome importado). Decorativo.
53
+ * @property {string} triggerSwatch - Amostra de cor à esquerda do texto do gatilho: um token (`var(--umds-semantic-color-...)`) ou `var(--umds-primitive-...)`. Decorativa; o texto diz a opção.
45
54
  * @property {string} emptyOptionLabel - Opção "sem filtro" no topo da lista (seleção única): marcada quando nada está escolhido; ao escolher, `onChange` recebe `""` e o campo volta a mostrar o `placeholder` (o nome do filtro).
46
55
  * @property {any} footer - Rodapé fixo da lista, com ações ("Gerenciar marcadores"). Passe o elemento correspondente (React node ou Vue slot `footer`).
56
+ * @property {any} item - Conteúdo de cada opção na lista, e do gatilho com a opção escolhida (seleção única). No React, uma função `({ optionData }) => nó` (`optionData` é a opção: `label`, `value` e os campos seus). No Vue, o slot com escopo `#item="{ optionData }"` (o mesmo `optionData`; `option` é um apelido). Sem ela, a opção é o `label` em texto. Na lista de seleção múltipla e na do `emptyOptionLabel` o gatilho segue mostrando o texto.
57
+ * @property {string|number} listMinWidth - Largura mínima da lista das variantes de filtro: um número (px) ou uma medida CSS ("220px"). Padrão: 240px. A lista tem a largura do gatilho (nunca menor), cresce até o conteúdo e nunca passa da borda da janela: perto da borda direita ela se alinha ao fim do gatilho. A busca interna acompanha a largura da lista, sem alargá-la.
47
58
  * @quandoUsar Escolher UM valor de uma lista fechada. O valor selecionado fica visível no campo.
48
59
  * @quandoNaoUsar Para escolher VÁRIOS valores — use `MultiSelect`. Para um menu de AÇÕES (editar, excluir, duplicar) em vez de valores, use `Dropdown`. Para 2 a 4 opções mutuamente exclusivas sempre visíveis, use `Radio`.
49
60
  */
@@ -83,12 +94,29 @@ export interface SelectProps {
83
94
  size?: "sm" | "md" | "lg";
84
95
  /** Onde a lista abre. @default 'bottom' */
85
96
  placement?: "bottom" | "top" | "auto";
86
- /** Variante visual. @default 'default' */
87
- variant?: "default" | "filter";
97
+ /** Variante visual. `filter`, `search` e `combo` são o filtro de barra. @default 'default' */
98
+ variant?: "default" | "filter" | "search" | "combo";
99
+ /**
100
+ * Abre/fecha a lista de fora (modo controlado). `any` de propósito: no Vue uma
101
+ * prop `boolean` sem valor chega como `false`, e `props.open !== undefined`
102
+ * ficaria sempre verdadeiro (o Select se acharia controlado e nunca abriria).
103
+ */
104
+ open?: any;
105
+ /** Pede para abrir ou fechar a lista. No modo controlado, o pai decide o novo `open`. */
106
+ onOpenChange?: (open: boolean) => void;
107
+ /** Ícone à esquerda do texto do gatilho. */
108
+ triggerIcon?: IconProp;
109
+ /** Amostra de cor à esquerda do texto do gatilho (token de cor). */
110
+ triggerSwatch?: string;
88
111
  /** Opção "sem filtro" no topo da lista (seleção única). Escolhê-la chama `onChange("")`. */
89
112
  emptyOptionLabel?: string;
90
113
  /** Rodapé fixo da lista (ações). React node ou slot `footer` no Vue. */
91
114
  footer?: any;
115
+ /**
116
+ * Largura mínima da lista das variantes de filtro: número (px) ou medida CSS ("220px"). A lista nunca
117
+ * fica mais estreita que o gatilho. @default 240 (o `filter` do DS)
118
+ */
119
+ listMinWidth?: string | number;
92
120
  pagination?: boolean;
93
121
  hasMore?: boolean;
94
122
  onLoadMore?: () => void;
@@ -105,5 +133,6 @@ export interface SelectProps {
105
133
  ariaLabel?: string;
106
134
  className?: string;
107
135
  }
136
+ import { IconProp } from "../Icon/Icon";
108
137
  declare function Select(props: SelectProps): import("react/jsx-runtime").JSX.Element;
109
138
  export default Select;