@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.
- package/CHANGELOG.md +653 -0
- package/dist/components/Accordion/Accordion.css +13 -0
- package/dist/components/Accordion/Accordion.d.ts +9 -0
- package/dist/components/Accordion/Accordion.js +18 -5
- package/dist/components/AppSubheader/AppSubheader.css +10 -1
- package/dist/components/AttachmentCard/AttachmentCard.css +10 -8
- package/dist/components/AttachmentCard/AttachmentCard.d.ts +3 -0
- package/dist/components/AttachmentCard/AttachmentCard.js +8 -1
- package/dist/components/Badge/Badge.css +27 -5
- package/dist/components/Badge/Badge.d.ts +20 -4
- package/dist/components/Badge/Badge.js +6 -0
- package/dist/components/Button/Button.css +5 -0
- package/dist/components/Button/Button.d.ts +3 -0
- package/dist/components/Button/Button.js +1 -0
- package/dist/components/Calendar/Calendar.css +10 -0
- package/dist/components/Calendar/Calendar.d.ts +10 -6
- package/dist/components/Calendar/Calendar.js +6 -1
- package/dist/components/Coachmark/Coachmark.css +10 -0
- package/dist/components/Coachmark/Coachmark.d.ts +14 -1
- package/dist/components/Coachmark/Coachmark.js +51 -5
- package/dist/components/ColorPicker/ColorPicker.css +8 -1
- package/dist/components/ColorPicker/ColorPicker.d.ts +2 -2
- package/dist/components/DataTable/DataTable.css +216 -0
- package/dist/components/DataTable/DataTable.d.ts +70 -2
- package/dist/components/DataTable/DataTable.js +293 -6
- package/dist/components/DescriptionList/DescriptionList.css +14 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +3 -0
- package/dist/components/DescriptionList/DescriptionList.js +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +4 -2
- package/dist/components/EmptyState/EmptyState.js +2 -2
- package/dist/components/Input/Input.css +30 -0
- package/dist/components/Input/Input.d.ts +10 -0
- package/dist/components/Input/Input.js +3 -1
- package/dist/components/List/ListItem.d.ts +14 -2
- package/dist/components/List/ListItem.js +3 -2
- package/dist/components/Modal/Modal.css +19 -0
- package/dist/components/Modal/Modal.d.ts +7 -0
- package/dist/components/Modal/Modal.js +1 -0
- package/dist/components/RichTextEditor/RichTextEditor.css +47 -0
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +22 -8
- package/dist/components/RichTextEditor/RichTextEditor.js +460 -3
- package/dist/components/SegmentedControl/SegmentedControl.css +70 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +5 -0
- package/dist/components/SegmentedControl/SegmentedControl.js +5 -1
- package/dist/components/Select/Select.css +122 -2
- package/dist/components/Select/Select.d.ts +33 -4
- package/dist/components/Select/Select.js +256 -35
- package/dist/components/StatCard/StatCard.css +73 -0
- package/dist/components/StatCard/StatCard.d.ts +12 -0
- package/dist/components/StatCard/StatCard.js +11 -1
- package/dist/components/Tabs/Tabs.css +11 -0
- package/dist/components/Tabs/Tabs.d.ts +7 -0
- package/dist/components/Tabs/Tabs.js +7 -1
- package/dist/components/Tag/Tag.css +3 -1
- package/dist/components/Toast/Toast.css +32 -0
- package/dist/components/Toast/Toast.d.ts +18 -0
- package/dist/components/Toast/Toast.js +14 -1
- package/dist/components/Toast/ToastStack.js +8 -1
- package/dist/teste/AccordionControlado.test.d.ts +1 -0
- package/dist/teste/AccordionControlado.test.js +73 -0
- package/dist/teste/AccordionTituloNeutro.test.d.ts +1 -0
- package/dist/teste/AccordionTituloNeutro.test.js +23 -0
- package/dist/teste/AppSubheaderRegiao.test.d.ts +1 -0
- package/dist/teste/AppSubheaderRegiao.test.js +13 -0
- package/dist/teste/AttachmentCardLista.test.d.ts +1 -0
- package/dist/teste/AttachmentCardLista.test.js +49 -0
- package/dist/teste/AttachmentCardSm.test.d.ts +1 -0
- package/dist/teste/AttachmentCardSm.test.js +26 -0
- package/dist/teste/BadgeAttachedTomEPadding.test.d.ts +1 -0
- package/dist/teste/BadgeAttachedTomEPadding.test.js +43 -0
- package/dist/teste/BadgeNeutroColado.test.d.ts +1 -0
- package/dist/teste/BadgeNeutroColado.test.js +11 -0
- package/dist/teste/BadgeTag.test.js +13 -0
- package/dist/teste/ButtonDensidade.test.d.ts +1 -0
- package/dist/teste/ButtonDensidade.test.js +28 -0
- package/dist/teste/CalendarCabecalho.test.d.ts +1 -0
- package/dist/teste/CalendarCabecalho.test.js +11 -0
- package/dist/teste/CalendarCompacto.test.d.ts +1 -0
- package/dist/teste/CalendarCompacto.test.js +29 -0
- package/dist/teste/CoachmarkSemVeu.test.d.ts +1 -0
- package/dist/teste/CoachmarkSemVeu.test.js +85 -0
- package/dist/teste/CoachmarkUmPasso.test.d.ts +1 -0
- package/dist/teste/CoachmarkUmPasso.test.js +34 -0
- package/dist/teste/ColorPickerXs.test.d.ts +1 -0
- package/dist/teste/ColorPickerXs.test.js +21 -0
- package/dist/teste/DataTableArvoreEVariantes.test.d.ts +1 -0
- package/dist/teste/DataTableArvoreEVariantes.test.js +190 -0
- package/dist/teste/DataTableCompactaETom.test.d.ts +1 -0
- package/dist/teste/DataTableCompactaETom.test.js +69 -0
- package/dist/teste/DescriptionListCompacta.test.d.ts +1 -0
- package/dist/teste/DescriptionListCompacta.test.js +22 -0
- package/dist/teste/EmptyStateTituloRico.test.d.ts +1 -0
- package/dist/teste/EmptyStateTituloRico.test.js +23 -0
- package/dist/teste/InputAgrupado.test.d.ts +1 -0
- package/dist/teste/InputAgrupado.test.js +24 -0
- package/dist/teste/InputGhost.test.d.ts +1 -0
- package/dist/teste/InputGhost.test.js +32 -0
- package/dist/teste/ListItemTooltipStandalone.test.d.ts +1 -0
- package/dist/teste/ListItemTooltipStandalone.test.js +39 -0
- package/dist/teste/ModalProporcoes1Doc.test.d.ts +1 -0
- package/dist/teste/ModalProporcoes1Doc.test.js +32 -0
- package/dist/teste/RichTextEditorAlinhaImagemTabela.test.d.ts +1 -0
- package/dist/teste/RichTextEditorAlinhaImagemTabela.test.js +212 -0
- package/dist/teste/RichTextEditorEstiloDeTexto.test.d.ts +1 -0
- package/dist/teste/RichTextEditorEstiloDeTexto.test.js +120 -0
- package/dist/teste/SegmentedControlContador.test.d.ts +1 -0
- package/dist/teste/SegmentedControlContador.test.js +39 -0
- package/dist/teste/SegmentedControlSuperficie.test.d.ts +1 -0
- package/dist/teste/SegmentedControlSuperficie.test.js +39 -0
- package/dist/teste/SelectAbertoControladoEFlutuante.test.d.ts +1 -0
- package/dist/teste/SelectAbertoControladoEFlutuante.test.js +145 -0
- package/dist/teste/SelectFiltroCorETamanho.test.d.ts +1 -0
- package/dist/teste/SelectFiltroCorETamanho.test.js +77 -0
- package/dist/teste/SelectItemComEscopo.test.d.ts +1 -0
- package/dist/teste/SelectItemComEscopo.test.js +54 -0
- package/dist/teste/SelectListaFiltro.test.d.ts +1 -0
- package/dist/teste/SelectListaFiltro.test.js +102 -0
- package/dist/teste/StatCardSecundariaETom.test.d.ts +1 -0
- package/dist/teste/StatCardSecundariaETom.test.js +45 -0
- package/dist/teste/StatCardTamanhoSm.test.d.ts +1 -0
- package/dist/teste/StatCardTamanhoSm.test.js +32 -0
- package/dist/teste/TabsCompacta.test.d.ts +1 -0
- package/dist/teste/TabsCompacta.test.js +35 -0
- package/dist/teste/TagPositivoTingido.test.d.ts +1 -0
- package/dist/teste/TagPositivoTingido.test.js +54 -0
- package/dist/teste/ToastAcaoEDetalhes.test.d.ts +1 -0
- package/dist/teste/ToastAcaoEDetalhes.test.js +94 -0
- package/dist/teste/lerArquivo.d.ts +1 -0
- package/dist/teste/lerArquivo.js +12 -0
- package/dist/utils/html-seguro.d.ts +19 -1
- package/dist/utils/html-seguro.js +113 -2
- package/dist/utils/toast.d.ts +10 -1
- package/dist/utils/toast.js +2 -1
- package/package.json +3 -3
- package/src/teste/AccordionControlado.test.tsx +87 -0
- package/src/teste/AccordionTituloNeutro.test.tsx +25 -0
- package/src/teste/AppSubheaderRegiao.test.tsx +17 -0
- package/src/teste/AttachmentCardLista.test.tsx +53 -0
- package/src/teste/AttachmentCardSm.test.tsx +29 -0
- package/src/teste/BadgeAttachedTomEPadding.test.tsx +60 -0
- package/src/teste/BadgeNeutroColado.test.tsx +15 -0
- package/src/teste/BadgeTag.test.tsx +21 -0
- package/src/teste/ButtonDensidade.test.tsx +40 -0
- package/src/teste/CalendarCabecalho.test.tsx +11 -0
- package/src/teste/CalendarCompacto.test.tsx +37 -0
- package/src/teste/CoachmarkSemVeu.test.tsx +101 -0
- package/src/teste/CoachmarkUmPasso.test.tsx +45 -0
- package/src/teste/ColorPickerXs.test.tsx +22 -0
- package/src/teste/DataTableArvoreEVariantes.test.tsx +240 -0
- package/src/teste/DataTableCompactaETom.test.tsx +85 -0
- package/src/teste/DescriptionListCompacta.test.tsx +24 -0
- package/src/teste/EmptyStateTituloRico.test.tsx +34 -0
- package/src/teste/InputAgrupado.test.tsx +26 -0
- package/src/teste/InputGhost.test.tsx +42 -0
- package/src/teste/ListItemTooltipStandalone.test.tsx +64 -0
- package/src/teste/ModalProporcoes1Doc.test.tsx +36 -0
- package/src/teste/RichTextEditorAlinhaImagemTabela.test.tsx +238 -0
- package/src/teste/RichTextEditorEstiloDeTexto.test.tsx +137 -0
- package/src/teste/SegmentedControlContador.test.tsx +43 -0
- package/src/teste/SegmentedControlSuperficie.test.tsx +52 -0
- package/src/teste/SelectAbertoControladoEFlutuante.test.tsx +180 -0
- package/src/teste/SelectFiltroCorETamanho.test.tsx +90 -0
- package/src/teste/SelectItemComEscopo.test.tsx +69 -0
- package/src/teste/SelectListaFiltro.test.tsx +120 -0
- package/src/teste/StatCardSecundariaETom.test.tsx +51 -0
- package/src/teste/StatCardTamanhoSm.test.tsx +42 -0
- package/src/teste/TabsCompacta.test.tsx +45 -0
- package/src/teste/TagPositivoTingido.test.tsx +60 -0
- package/src/teste/ToastAcaoEDetalhes.test.tsx +109 -0
- package/src/teste/lerArquivo.ts +13 -0
- package/src/utils/html-seguro.ts +105 -2
- 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:
|
|
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
|
|
44
|
-
*
|
|
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;
|