@1doc/1ds-react 2.8.0 → 2.10.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 +1540 -0
- package/dist/components/AILabel/AILabel.js +1 -1
- package/dist/components/Accordion/Accordion.css +13 -0
- package/dist/components/Accordion/Accordion.d.ts +9 -2
- package/dist/components/Accordion/Accordion.js +1 -0
- package/dist/components/AppSubheader/AppSubheader.css +10 -1
- package/dist/components/AttachmentCard/AttachmentCard.css +26 -8
- package/dist/components/AttachmentCard/AttachmentCard.d.ts +22 -2
- package/dist/components/AttachmentCard/AttachmentCard.js +47 -3
- package/dist/components/Avatar/Avatar.css +7 -2
- package/dist/components/Avatar/AvatarGroup.d.ts +17 -0
- package/dist/components/Avatar/AvatarGroup.js +22 -8
- package/dist/components/Badge/Badge.css +67 -2
- package/dist/components/Badge/Badge.d.ts +23 -4
- package/dist/components/Badge/Badge.js +4 -0
- package/dist/components/Box/Box.css +83 -0
- package/dist/components/Box/Box.d.ts +82 -2
- package/dist/components/Box/Box.js +42 -2
- package/dist/components/Button/Button.css +29 -0
- package/dist/components/Button/Button.d.ts +4 -4
- package/dist/components/Button/Button.js +4 -1
- package/dist/components/Calendar/Calendar.css +245 -0
- package/dist/components/Calendar/Calendar.d.ts +126 -0
- package/dist/components/Calendar/Calendar.js +320 -0
- package/dist/components/Chips/Chips.css +38 -0
- package/dist/components/Chips/Chips.d.ts +5 -2
- package/dist/components/Chips/Chips.js +2 -1
- package/dist/components/Coachmark/Coachmark.css +128 -0
- package/dist/components/Coachmark/Coachmark.d.ts +87 -0
- package/dist/components/Coachmark/Coachmark.js +362 -0
- package/dist/components/CodeBlock/CodeBlock.css +96 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts +47 -0
- package/dist/components/CodeBlock/CodeBlock.js +103 -0
- package/dist/components/ColorPicker/ColorPicker.css +140 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +73 -0
- package/dist/components/ColorPicker/ColorPicker.js +219 -0
- package/dist/components/Combobox/Combobox.css +8 -0
- package/dist/components/DataTable/DataTable.css +254 -0
- package/dist/components/DataTable/DataTable.d.ts +81 -5
- package/dist/components/DataTable/DataTable.js +335 -19
- package/dist/components/DatePicker/DatePicker.css +8 -0
- package/dist/components/DatePicker/DatePicker.js +10 -1
- package/dist/components/DescriptionList/DescriptionList.css +127 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +62 -0
- package/dist/components/DescriptionList/DescriptionList.js +52 -0
- package/dist/components/EmptyState/EmptyState.d.ts +4 -2
- package/dist/components/EmptyState/EmptyState.js +2 -2
- package/dist/components/FileInput/FileInput.css +16 -0
- package/dist/components/FileInput/FileInput.d.ts +4 -2
- package/dist/components/FileInput/FileInput.js +8 -2
- package/dist/components/Grid/Grid.js +5 -5
- package/dist/components/IconPicker/IconPicker.css +107 -0
- package/dist/components/IconPicker/IconPicker.d.ts +74 -0
- package/dist/components/IconPicker/IconPicker.js +194 -0
- package/dist/components/Input/Input.css +59 -0
- package/dist/components/Input/Input.d.ts +17 -1
- package/dist/components/Input/Input.js +67 -5
- package/dist/components/Kanban/Kanban.css +4 -0
- package/dist/components/Kbd/Kbd.css +66 -0
- package/dist/components/Kbd/Kbd.d.ts +32 -0
- package/dist/components/Kbd/Kbd.js +40 -0
- package/dist/components/List/List.css +136 -0
- package/dist/components/List/List.d.ts +82 -0
- package/dist/components/List/List.js +53 -0
- package/dist/components/List/ListItem.d.ts +97 -0
- package/dist/components/List/ListItem.js +82 -0
- package/dist/components/Modal/Modal.css +80 -0
- package/dist/components/Modal/Modal.d.ts +33 -6
- package/dist/components/Modal/Modal.js +101 -6
- package/dist/components/MultiSelect/MultiSelect.css +8 -0
- package/dist/components/MultiSelect/MultiSelect.js +10 -1
- package/dist/components/OrgChart/OrgChart.css +149 -0
- package/dist/components/OrgChart/OrgChart.d.ts +83 -0
- package/dist/components/OrgChart/OrgChart.js +297 -0
- package/dist/components/OtpInput/OtpInput.css +93 -0
- package/dist/components/OtpInput/OtpInput.d.ts +60 -0
- package/dist/components/OtpInput/OtpInput.js +215 -0
- package/dist/components/PhoneInput/PhoneInput.css +8 -0
- package/dist/components/Popover/Popover.d.ts +7 -0
- package/dist/components/Popover/Popover.js +11 -1
- package/dist/components/RichTextEditor/RichTextEditor.css +250 -0
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +97 -0
- package/dist/components/RichTextEditor/RichTextEditor.js +951 -0
- package/dist/components/SegmentedControl/SegmentedControl.css +24 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -0
- package/dist/components/SegmentedControl/SegmentedControl.js +10 -2
- package/dist/components/Select/Select.css +164 -0
- package/dist/components/Select/Select.d.ts +34 -0
- package/dist/components/Select/Select.js +258 -28
- package/dist/components/Stack/Stack.css +49 -0
- package/dist/components/Stack/Stack.d.ts +65 -7
- package/dist/components/Stack/Stack.js +30 -2
- package/dist/components/StatCard/StatCard.css +138 -0
- package/dist/components/StatCard/StatCard.d.ts +26 -0
- package/dist/components/StatCard/StatCard.js +13 -1
- package/dist/components/Tabs/Tab.d.ts +15 -0
- package/dist/components/Tabs/Tab.js +30 -1
- package/dist/components/Tabs/Tabs.css +132 -0
- package/dist/components/Tabs/Tabs.d.ts +7 -0
- package/dist/components/Tabs/Tabs.js +13 -2
- package/dist/components/Tag/Tag.css +85 -2
- package/dist/components/Tag/Tag.d.ts +13 -6
- package/dist/components/Tag/Tag.js +1 -0
- package/dist/components/Text/Text.js +2 -2
- package/dist/components/Textarea/Textarea.css +8 -0
- package/dist/components/TimePicker/TimePicker.css +8 -0
- 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/components/Tooltip/Tooltip.css +25 -0
- package/dist/components/Tooltip/Tooltip.d.ts +11 -0
- package/dist/components/Tooltip/Tooltip.js +18 -3
- package/dist/index.d.ts +25 -0
- package/dist/index.js +14 -0
- package/dist/teste/AILabel.test.d.ts +1 -0
- package/dist/teste/AILabel.test.js +33 -0
- package/dist/teste/AccordionConteudoLivre.test.d.ts +1 -0
- package/dist/teste/AccordionConteudoLivre.test.js +29 -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/AtributosRepassados.test.d.ts +1 -0
- package/dist/teste/AtributosRepassados.test.js +52 -0
- package/dist/teste/AttachmentCardIA.test.d.ts +1 -0
- package/dist/teste/AttachmentCardIA.test.js +89 -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/AvatarGroupOverlap.test.d.ts +1 -0
- package/dist/teste/AvatarGroupOverlap.test.js +56 -0
- package/dist/teste/BadgeNeutroColado.test.d.ts +1 -0
- package/dist/teste/BadgeNeutroColado.test.js +11 -0
- package/dist/teste/BadgeTag.test.d.ts +1 -0
- package/dist/teste/BadgeTag.test.js +55 -0
- package/dist/teste/BoxItemFlex.test.d.ts +1 -0
- package/dist/teste/BoxItemFlex.test.js +54 -0
- package/dist/teste/BoxLayout.test.d.ts +1 -0
- package/dist/teste/BoxLayout.test.js +35 -0
- package/dist/teste/Button.test.d.ts +1 -0
- package/dist/teste/Button.test.js +27 -0
- package/dist/teste/Calendar.test.d.ts +1 -0
- package/dist/teste/Calendar.test.js +221 -0
- package/dist/teste/CalendarCabecalho.test.d.ts +1 -0
- package/dist/teste/CalendarCabecalho.test.js +11 -0
- package/dist/teste/ChipsXs.test.d.ts +1 -0
- package/dist/teste/ChipsXs.test.js +31 -0
- package/dist/teste/Coachmark.test.d.ts +1 -0
- package/dist/teste/Coachmark.test.js +149 -0
- package/dist/teste/CoachmarkSemVeu.test.d.ts +1 -0
- package/dist/teste/CoachmarkSemVeu.test.js +85 -0
- package/dist/teste/ColorPicker.test.d.ts +1 -0
- package/dist/teste/ColorPicker.test.js +132 -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/DataTableCelulaLivre.test.d.ts +1 -0
- package/dist/teste/DataTableCelulaLivre.test.js +76 -0
- package/dist/teste/DataTableDocumento.test.d.ts +1 -0
- package/dist/teste/DataTableDocumento.test.js +92 -0
- package/dist/teste/DatePicker.test.js +23 -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/FileInputTrigger.test.d.ts +1 -0
- package/dist/teste/FileInputTrigger.test.js +53 -0
- package/dist/teste/IconPicker.test.d.ts +1 -0
- package/dist/teste/IconPicker.test.js +130 -0
- package/dist/teste/InputAgrupado.test.d.ts +1 -0
- package/dist/teste/InputAgrupado.test.js +24 -0
- package/dist/teste/InputMascaraEAfins.test.d.ts +1 -0
- package/dist/teste/InputMascaraEAfins.test.js +99 -0
- package/dist/teste/KbdCodeBlock.test.d.ts +1 -0
- package/dist/teste/KbdCodeBlock.test.js +95 -0
- package/dist/teste/List.test.d.ts +1 -0
- package/dist/teste/List.test.js +153 -0
- package/dist/teste/ListItemTooltipStandalone.test.d.ts +1 -0
- package/dist/teste/ListItemTooltipStandalone.test.js +39 -0
- package/dist/teste/ModalVariantes.test.d.ts +1 -0
- package/dist/teste/ModalVariantes.test.js +151 -0
- package/dist/teste/NomeAcessivelSsr.test.d.ts +1 -0
- package/dist/teste/NomeAcessivelSsr.test.js +88 -0
- package/dist/teste/OrgChart.test.d.ts +1 -0
- package/dist/teste/OrgChart.test.js +162 -0
- package/dist/teste/OtpInput.test.d.ts +1 -0
- package/dist/teste/OtpInput.test.js +143 -0
- package/dist/teste/PopoverMaxHeight.test.d.ts +1 -0
- package/dist/teste/PopoverMaxHeight.test.js +38 -0
- package/dist/teste/RichTextEditor.test.d.ts +1 -0
- package/dist/teste/RichTextEditor.test.js +287 -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/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/SelectPlacementFiltro.test.d.ts +1 -0
- package/dist/teste/SelectPlacementFiltro.test.js +88 -0
- package/dist/teste/Stack.test.d.ts +1 -0
- package/dist/teste/Stack.test.js +57 -0
- package/dist/teste/StatCardRotuloTopo.test.d.ts +1 -0
- package/dist/teste/StatCardRotuloTopo.test.js +34 -0
- package/dist/teste/StatCardSecundariaETom.test.d.ts +1 -0
- package/dist/teste/StatCardSecundariaETom.test.js +45 -0
- package/dist/teste/TabsContadorFechavel.test.d.ts +1 -0
- package/dist/teste/TabsContadorFechavel.test.js +79 -0
- package/dist/teste/ToastAcaoEDetalhes.test.d.ts +1 -0
- package/dist/teste/ToastAcaoEDetalhes.test.js +94 -0
- package/dist/teste/TooltipDark.test.d.ts +1 -0
- package/dist/teste/TooltipDark.test.js +31 -0
- package/dist/utils/calendario.d.ts +28 -0
- package/dist/utils/calendario.js +73 -0
- package/dist/utils/html-seguro.d.ts +45 -0
- package/dist/utils/html-seguro.js +208 -0
- package/dist/utils/paleta-de-cores.d.ts +26 -0
- package/dist/utils/paleta-de-cores.js +10 -0
- package/dist/utils/texto.d.ts +5 -0
- package/dist/utils/texto.js +5 -0
- package/dist/utils/toast.d.ts +10 -1
- package/dist/utils/toast.js +2 -1
- package/package.json +3 -3
- package/src/index.ts +26 -0
- package/src/teste/AILabel.test.tsx +41 -0
- package/src/teste/AccordionConteudoLivre.test.tsx +39 -0
- package/src/teste/AccordionTituloNeutro.test.tsx +25 -0
- package/src/teste/AppSubheaderRegiao.test.tsx +17 -0
- package/src/teste/AtributosRepassados.test.tsx +73 -0
- package/src/teste/AttachmentCardIA.test.tsx +126 -0
- package/src/teste/AttachmentCardLista.test.tsx +53 -0
- package/src/teste/AttachmentCardSm.test.tsx +29 -0
- package/src/teste/AvatarGroupOverlap.test.tsx +74 -0
- package/src/teste/BadgeNeutroColado.test.tsx +15 -0
- package/src/teste/BadgeTag.test.tsx +85 -0
- package/src/teste/BoxItemFlex.test.tsx +81 -0
- package/src/teste/BoxLayout.test.tsx +50 -0
- package/src/teste/Button.test.tsx +39 -0
- package/src/teste/Calendar.test.tsx +282 -0
- package/src/teste/CalendarCabecalho.test.tsx +11 -0
- package/src/teste/ChipsXs.test.tsx +41 -0
- package/src/teste/Coachmark.test.tsx +198 -0
- package/src/teste/CoachmarkSemVeu.test.tsx +101 -0
- package/src/teste/ColorPicker.test.tsx +153 -0
- package/src/teste/ColorPickerXs.test.tsx +22 -0
- package/src/teste/DataTableArvoreEVariantes.test.tsx +240 -0
- package/src/teste/DataTableCelulaLivre.test.tsx +103 -0
- package/src/teste/DataTableDocumento.test.tsx +102 -0
- package/src/teste/DatePicker.test.tsx +38 -0
- package/src/teste/DescriptionListCompacta.test.tsx +24 -0
- package/src/teste/EmptyStateTituloRico.test.tsx +34 -0
- package/src/teste/FileInputTrigger.test.tsx +89 -0
- package/src/teste/IconPicker.test.tsx +145 -0
- package/src/teste/InputAgrupado.test.tsx +26 -0
- package/src/teste/InputMascaraEAfins.test.tsx +124 -0
- package/src/teste/KbdCodeBlock.test.tsx +106 -0
- package/src/teste/List.test.tsx +269 -0
- package/src/teste/ListItemTooltipStandalone.test.tsx +64 -0
- package/src/teste/ModalVariantes.test.tsx +173 -0
- package/src/teste/NomeAcessivelSsr.test.tsx +110 -0
- package/src/teste/OrgChart.test.tsx +183 -0
- package/src/teste/OtpInput.test.tsx +163 -0
- package/src/teste/PopoverMaxHeight.test.tsx +47 -0
- package/src/teste/RichTextEditor.test.tsx +329 -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/SelectAbertoControladoEFlutuante.test.tsx +180 -0
- package/src/teste/SelectFiltroCorETamanho.test.tsx +90 -0
- package/src/teste/SelectPlacementFiltro.test.tsx +110 -0
- package/src/teste/Stack.test.tsx +80 -0
- package/src/teste/StatCardRotuloTopo.test.tsx +44 -0
- package/src/teste/StatCardSecundariaETom.test.tsx +51 -0
- package/src/teste/TabsContadorFechavel.test.tsx +144 -0
- package/src/teste/ToastAcaoEDetalhes.test.tsx +109 -0
- package/src/teste/TooltipDark.test.tsx +51 -0
- package/src/utils/calendario.ts +78 -0
- package/src/utils/html-seguro.ts +197 -0
- package/src/utils/paleta-de-cores.ts +34 -0
- package/src/utils/texto.ts +5 -0
- package/src/utils/toast.ts +12 -2
|
@@ -99,3 +99,86 @@
|
|
|
99
99
|
.umds-box--shadow-level1 { box-shadow: var(--umds-primitive-shadow-level-1); }
|
|
100
100
|
.umds-box--shadow-level2 { box-shadow: var(--umds-primitive-shadow-level-2); }
|
|
101
101
|
.umds-box--shadow-level3 { box-shadow: var(--umds-primitive-shadow-level-3); }
|
|
102
|
+
|
|
103
|
+
/* ── Layout flex (direction, gap, align, justify, wrap) ──
|
|
104
|
+
Liga quando qualquer uma das props é passada; mesmos nomes e valores do Stack. */
|
|
105
|
+
.umds-box--flex {
|
|
106
|
+
display: flex;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.umds-box--vertical { flex-direction: column; }
|
|
110
|
+
.umds-box--horizontal { flex-direction: row; }
|
|
111
|
+
.umds-box--wrap { flex-wrap: wrap; }
|
|
112
|
+
|
|
113
|
+
.umds-box--gap-none { gap: 0; }
|
|
114
|
+
.umds-box--gap-quarck { gap: var(--umds-primitive-spacing-quarck); }
|
|
115
|
+
.umds-box--gap-nano { gap: var(--umds-primitive-spacing-nano); }
|
|
116
|
+
.umds-box--gap-micro { gap: var(--umds-primitive-spacing-micro); }
|
|
117
|
+
.umds-box--gap-mini { gap: var(--umds-primitive-spacing-mini); }
|
|
118
|
+
.umds-box--gap-xxxs { gap: var(--umds-primitive-spacing-xxxs); }
|
|
119
|
+
.umds-box--gap-xxs { gap: var(--umds-primitive-spacing-xxs); }
|
|
120
|
+
.umds-box--gap-xs { gap: var(--umds-primitive-spacing-xs); }
|
|
121
|
+
.umds-box--gap-sm { gap: var(--umds-primitive-spacing-sm); }
|
|
122
|
+
.umds-box--gap-md { gap: var(--umds-primitive-spacing-md); }
|
|
123
|
+
.umds-box--gap-lg { gap: var(--umds-primitive-spacing-lg); }
|
|
124
|
+
.umds-box--gap-xl { gap: var(--umds-primitive-spacing-xl); }
|
|
125
|
+
.umds-box--gap-xxl { gap: var(--umds-primitive-spacing-xxl); }
|
|
126
|
+
.umds-box--gap-xxxl { gap: var(--umds-primitive-spacing-xxxl); }
|
|
127
|
+
|
|
128
|
+
.umds-box--align-start { align-items: flex-start; }
|
|
129
|
+
.umds-box--align-center { align-items: center; }
|
|
130
|
+
.umds-box--align-end { align-items: flex-end; }
|
|
131
|
+
.umds-box--align-stretch { align-items: stretch; }
|
|
132
|
+
.umds-box--align-baseline { align-items: baseline; }
|
|
133
|
+
|
|
134
|
+
.umds-box--justify-start { justify-content: flex-start; }
|
|
135
|
+
.umds-box--justify-center { justify-content: center; }
|
|
136
|
+
.umds-box--justify-end { justify-content: flex-end; }
|
|
137
|
+
.umds-box--justify-between { justify-content: space-between; }
|
|
138
|
+
.umds-box--justify-around { justify-content: space-around; }
|
|
139
|
+
.umds-box--justify-evenly { justify-content: space-evenly; }
|
|
140
|
+
|
|
141
|
+
/* ── Lista: ul/ol sem marcador, margem nem recuo do navegador ──
|
|
142
|
+
:where() zera a especificidade, para o padding do Box (p, px, py) vencer. */
|
|
143
|
+
:where(ul.umds-box, ol.umds-box) {
|
|
144
|
+
list-style: none;
|
|
145
|
+
margin: 0;
|
|
146
|
+
padding: 0;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* ── Como item de Stack/Box flex ── */
|
|
150
|
+
.umds-box--grow { flex-grow: 1; }
|
|
151
|
+
.umds-box--shrink-0 { flex-shrink: 0; }
|
|
152
|
+
.umds-box--shrink-1 { flex-shrink: 1; }
|
|
153
|
+
|
|
154
|
+
.umds-box--basis-auto { flex-basis: auto; }
|
|
155
|
+
.umds-box--basis-0 { flex-basis: 0; }
|
|
156
|
+
.umds-box--basis-25 { flex-basis: 25%; }
|
|
157
|
+
.umds-box--basis-33 { flex-basis: 33.3333%; }
|
|
158
|
+
.umds-box--basis-50 { flex-basis: 50%; }
|
|
159
|
+
.umds-box--basis-66 { flex-basis: 66.6667%; }
|
|
160
|
+
.umds-box--basis-75 { flex-basis: 75%; }
|
|
161
|
+
.umds-box--basis-100 { flex-basis: 100%; }
|
|
162
|
+
|
|
163
|
+
/* O padrão do Box já é min-width: 0; estas duas só tornam a escolha explícita. */
|
|
164
|
+
.umds-box--min-w-0 { min-width: 0; }
|
|
165
|
+
.umds-box--min-w-auto { min-width: auto; }
|
|
166
|
+
|
|
167
|
+
/* ── Overflow: o eixo vem depois do geral, então vence por ordem de cascata ── */
|
|
168
|
+
.umds-box--overflow-visible { overflow: visible; }
|
|
169
|
+
.umds-box--overflow-hidden { overflow: hidden; }
|
|
170
|
+
.umds-box--overflow-auto { overflow: auto; }
|
|
171
|
+
.umds-box--overflow-scroll { overflow: scroll; }
|
|
172
|
+
|
|
173
|
+
.umds-box--overflow-x-visible { overflow-x: visible; }
|
|
174
|
+
.umds-box--overflow-x-hidden { overflow-x: hidden; }
|
|
175
|
+
.umds-box--overflow-x-auto { overflow-x: auto; }
|
|
176
|
+
.umds-box--overflow-x-scroll { overflow-x: scroll; }
|
|
177
|
+
|
|
178
|
+
.umds-box--overflow-y-visible { overflow-y: visible; }
|
|
179
|
+
.umds-box--overflow-y-hidden { overflow-y: hidden; }
|
|
180
|
+
.umds-box--overflow-y-auto { overflow-y: auto; }
|
|
181
|
+
.umds-box--overflow-y-scroll { overflow-y: scroll; }
|
|
182
|
+
|
|
183
|
+
/* ── Dimensão ── */
|
|
184
|
+
.umds-box--full-height { height: 100%; }
|
|
@@ -1,12 +1,55 @@
|
|
|
1
1
|
import './Box.css';
|
|
2
2
|
/** Degraus da escala oficial de espaçamento do 1DS. */
|
|
3
3
|
export type BoxSpacing = "none" | "quarck" | "nano" | "micro" | "mini" | "xxxs" | "xxs" | "xs" | "sm" | "md" | "lg" | "xl" | "xxl" | "xxxl";
|
|
4
|
+
/** Elemento HTML que o Box renderiza (mesma lista do Stack). */
|
|
5
|
+
/** Degraus da escala oficial de espaçamento do 1DS. */
|
|
6
|
+
/** Elemento HTML que o Box renderiza (mesma lista do Stack). */
|
|
7
|
+
export type BoxTag = "div" | "span" | "ul" | "ol" | "li" | "section" | "nav" | "header" | "footer" | "form";
|
|
8
|
+
/** Valores de `overflow` aceitos (por eixo ou nos dois). */
|
|
9
|
+
/** Degraus da escala oficial de espaçamento do 1DS. */
|
|
10
|
+
/** Elemento HTML que o Box renderiza (mesma lista do Stack). */
|
|
11
|
+
/** Valores de `overflow` aceitos (por eixo ou nos dois). */
|
|
12
|
+
export type BoxOverflow = "visible" | "hidden" | "auto" | "scroll";
|
|
4
13
|
/**
|
|
5
14
|
* Box — superfície com padding, fundo, borda e raio vindos dos tokens.
|
|
6
15
|
*
|
|
7
16
|
* É a caixa genérica do DS. Existe para evitar o `<div style={{ padding: 16,
|
|
8
17
|
* background: "#fff", borderRadius: 8 }}>` escrito à mão: cada valor sai da
|
|
9
18
|
* escala oficial, não da memória de quem escreve.
|
|
19
|
+
*
|
|
20
|
+
* Também é layout: com `direction`, `gap`, `align`, `justify` ou `wrap` (os
|
|
21
|
+
* mesmos nomes e valores do `Stack`) a caixa vira um flex, e uma linha, um
|
|
22
|
+
* cartão ou uma região com borda, fundo e padding é UM componente só, sem
|
|
23
|
+
* `Stack` por dentro nem flex no CSS do produto. Sem nenhuma dessas props, o
|
|
24
|
+
* Box continua sendo um bloco comum. Diferente do `Stack`, o `gap` do Box
|
|
25
|
+
* não tem valor padrão: sem `gap`, os filhos ficam colados.
|
|
26
|
+
*
|
|
27
|
+
* Também é item de flex: dentro de um `Stack` ou de outro `Box` flex, `grow`,
|
|
28
|
+
* `shrink`, `basis`, `minWidth`, `fullHeight`, `fullWidth` e `overflow*` (os
|
|
29
|
+
* mesmos nomes e valores do `Stack`) fazem a superfície crescer, encolher ou
|
|
30
|
+
* rolar no lugar certo, sem CSS do produto.
|
|
31
|
+
*
|
|
32
|
+
* `as` troca o elemento (`div` por padrão; `section`, `nav`, `li`, `ul`...):
|
|
33
|
+
* uma linha com borda e fundo dentro de uma lista é `<Box as="li">`. Com `nav`,
|
|
34
|
+
* `section` ou `form`, passe `aria-label` ou `aria-labelledby`.
|
|
35
|
+
*
|
|
36
|
+
* Atributos HTML (`id`, `style`, `title`, `role`, `tabIndex`, `data-*`,
|
|
37
|
+
* `aria-*`) vão para o elemento raiz.
|
|
38
|
+
* @property {string} as - Elemento HTML: 'div' (padrão) | 'span' | 'ul' | 'ol' | 'li' | 'section' | 'nav' | 'header' | 'footer' | 'form'
|
|
39
|
+
* @property {boolean} grow - Como item de Stack/Box flex: cresce para ocupar o espaço livre
|
|
40
|
+
* @property {string} shrink - Como item flex: '0' não encolhe, '1' encolhe
|
|
41
|
+
* @property {string} basis - Como item flex: tamanho base ('auto', '0', '25', '33', '50', '66', '75', '100'; os números são %)
|
|
42
|
+
* @property {string} minWidth - '0' (padrão do Box) deixa o conteúdo longo encolher; 'auto' devolve o mínimo do conteúdo
|
|
43
|
+
* @property {string} overflow - Overflow nos dois eixos
|
|
44
|
+
* @property {string} overflowX - Overflow horizontal
|
|
45
|
+
* @property {string} overflowY - Overflow vertical
|
|
46
|
+
* @property {boolean} fullHeight - Ocupa 100% da altura do pai
|
|
47
|
+
* @property {function} onSubmit - Só com as="form": callback do envio
|
|
48
|
+
* @property {string} direction - Liga o layout flex: 'vertical' | 'horizontal'
|
|
49
|
+
* @property {string} gap - Liga o layout flex: espaço entre os filhos, na escala do DS
|
|
50
|
+
* @property {string} align - Liga o layout flex: alinhamento no eixo transversal
|
|
51
|
+
* @property {string} justify - Liga o layout flex: distribuição no eixo principal
|
|
52
|
+
* @property {boolean} wrap - Liga o layout flex: permite quebrar em várias linhas
|
|
10
53
|
* @property {string} padding - Padding em todos os lados, na escala do DS
|
|
11
54
|
* @property {string} paddingX - Padding horizontal (sobrescreve padding)
|
|
12
55
|
* @property {string} paddingY - Padding vertical (sobrescreve padding)
|
|
@@ -16,11 +59,25 @@ export type BoxSpacing = "none" | "quarck" | "nano" | "micro" | "mini" | "xxxs"
|
|
|
16
59
|
* @property {string} shadow - Elevação
|
|
17
60
|
* @property {boolean} fullWidth - Ocupa 100% da largura disponível
|
|
18
61
|
* @property {string} className - Classes CSS adicionais
|
|
19
|
-
* @quandoUsar Agrupar conteúdo numa superfície com respiro e fundo: painel de filtros, bloco de resumo, área destacada dentro de uma tela.
|
|
20
|
-
* @quandoNaoUsar Para um item de listagem com título, ações e elevação própria — use `Card`, que já tem essa anatomia. Para só distribuir filhos no eixo sem desenhar nada, use `Stack`.
|
|
62
|
+
* @quandoUsar Agrupar conteúdo numa superfície com respiro e fundo: painel de filtros, bloco de resumo, área destacada dentro de uma tela. Uma linha de resultado ou um cartão simples cujo conteúdo precisa alinhar em linha (`direction="horizontal"`, `align="center"`, `gap="xxxs"`) com borda, fundo e padding.
|
|
63
|
+
* @quandoNaoUsar Para um item de listagem com título, ações e elevação própria — use `Card`, que já tem essa anatomia. Para uma linha de lista clicável (hover, foco, selecionado), use `ListItem`. Para só distribuir filhos no eixo sem desenhar nada (sem fundo, borda nem padding), use `Stack`.
|
|
21
64
|
*/
|
|
22
65
|
/** Degraus da escala oficial de espaçamento do 1DS. */
|
|
66
|
+
/** Elemento HTML que o Box renderiza (mesma lista do Stack). */
|
|
67
|
+
/** Valores de `overflow` aceitos (por eixo ou nos dois). */
|
|
23
68
|
export interface BoxProps {
|
|
69
|
+
/** Elemento HTML renderizado. @default 'div' */
|
|
70
|
+
as?: BoxTag;
|
|
71
|
+
/** Liga o layout flex. Eixo do empilhamento. @default 'vertical' (quando o flex está ligado) */
|
|
72
|
+
direction?: "vertical" | "horizontal";
|
|
73
|
+
/** Liga o layout flex. Espaço entre os filhos, na escala oficial (`none` = 0). Sem valor, não há espaço. */
|
|
74
|
+
gap?: BoxSpacing;
|
|
75
|
+
/** Liga o layout flex. Alinhamento no eixo transversal. */
|
|
76
|
+
align?: "start" | "center" | "end" | "stretch" | "baseline";
|
|
77
|
+
/** Liga o layout flex. Distribuição no eixo principal. */
|
|
78
|
+
justify?: "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
79
|
+
/** Liga o layout flex. Permite quebrar em várias linhas. */
|
|
80
|
+
wrap?: boolean;
|
|
24
81
|
/** Padding em todos os lados. @default 'none' */
|
|
25
82
|
padding?: BoxSpacing;
|
|
26
83
|
/** Padding horizontal. Sobrescreve `padding` no eixo X. */
|
|
@@ -37,8 +94,31 @@ export interface BoxProps {
|
|
|
37
94
|
shadow?: "none" | "level1" | "level2" | "level3";
|
|
38
95
|
/** Ocupa 100% da largura disponível. */
|
|
39
96
|
fullWidth?: boolean;
|
|
97
|
+
/** Ocupa 100% da altura do pai. */
|
|
98
|
+
fullHeight?: boolean;
|
|
99
|
+
/** Como item de Stack/Box flex: cresce para ocupar o espaço livre. */
|
|
100
|
+
grow?: boolean;
|
|
101
|
+
/** Como item flex: `"0"` não encolhe; `"1"` encolhe. */
|
|
102
|
+
shrink?: "0" | "1";
|
|
103
|
+
/** Como item flex: tamanho base. Os números são porcentagem do pai. */
|
|
104
|
+
basis?: "auto" | "0" | "25" | "33" | "50" | "66" | "75" | "100";
|
|
105
|
+
/** `"0"` (já é o padrão do Box) deixa o conteúdo encolher; `"auto"` volta ao mínimo do conteúdo. */
|
|
106
|
+
minWidth?: "0" | "auto";
|
|
107
|
+
/** Overflow nos dois eixos. */
|
|
108
|
+
overflow?: BoxOverflow;
|
|
109
|
+
/** Overflow horizontal (vence `overflow` no eixo X). */
|
|
110
|
+
overflowX?: BoxOverflow;
|
|
111
|
+
/** Overflow vertical (vence `overflow` no eixo Y). */
|
|
112
|
+
overflowY?: BoxOverflow;
|
|
113
|
+
/** Só com `as="form"`: chamado no envio do formulário. */
|
|
114
|
+
onSubmit?: (event: any) => void;
|
|
40
115
|
/** Classes CSS adicionais. */
|
|
41
116
|
className?: string;
|
|
117
|
+
/** ID HTML do elemento raiz. */
|
|
118
|
+
id?: string;
|
|
119
|
+
/** Atributos HTML repassados ao elemento raiz (style, data-*, aria-*…). */
|
|
120
|
+
style?: any;
|
|
121
|
+
[key: string]: any;
|
|
42
122
|
/** Conteúdo da caixa. */
|
|
43
123
|
children?: any;
|
|
44
124
|
}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
+
}
|