voa-ds-core 1.0.10 → 1.0.12
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/dist/styles/voa-components.css +4841 -0
- package/package.json +2 -2
- package/dist/collection/styles/external/saas-dashboard.css +0 -566
- package/dist/collection/styles/external/voa-accordion.external.css +0 -295
- package/dist/collection/styles/external/voa-alert.external.css +0 -348
- package/dist/collection/styles/external/voa-avatar.external.css +0 -118
- package/dist/collection/styles/external/voa-badge.external.css +0 -346
- package/dist/collection/styles/external/voa-breadcrumbs.external.css +0 -183
- package/dist/collection/styles/external/voa-button.external.css +0 -257
- package/dist/collection/styles/external/voa-card.external.css +0 -30
- package/dist/collection/styles/external/voa-checkbox.external.css +0 -303
- package/dist/collection/styles/external/voa-input-addon.external.css +0 -204
- package/dist/collection/styles/external/voa-input.external.css +0 -307
- package/dist/collection/styles/external/voa-keybinding.external.css +0 -34
- package/dist/collection/styles/external/voa-option.external.css +0 -213
- package/dist/collection/styles/external/voa-pagination.external.css +0 -125
- package/dist/collection/styles/external/voa-radio.external.css +0 -235
- package/dist/collection/styles/external/voa-radio.styles.ts +0 -155
- package/dist/collection/styles/external/voa-select.external.css +0 -568
- package/dist/collection/styles/external/voa-switch.external.css +0 -215
- package/dist/collection/styles/external/voa-tab.external.css +0 -284
- package/dist/collection/styles/external/voa-tag.external.css +0 -206
- package/dist/collection/styles/external/voa-text-area.external.css +0 -174
- package/dist/collection/styles/external/voa-tooltip.external.css +0 -320
- package/dist/collection/styles/voa-components.css +0 -32
- package/dist/voa/styles/external/saas-dashboard.css +0 -566
- package/dist/voa/styles/external/voa-accordion.external.css +0 -295
- package/dist/voa/styles/external/voa-alert.external.css +0 -348
- package/dist/voa/styles/external/voa-avatar.external.css +0 -118
- package/dist/voa/styles/external/voa-badge.external.css +0 -346
- package/dist/voa/styles/external/voa-breadcrumbs.external.css +0 -183
- package/dist/voa/styles/external/voa-button.external.css +0 -257
- package/dist/voa/styles/external/voa-card.external.css +0 -30
- package/dist/voa/styles/external/voa-checkbox.external.css +0 -303
- package/dist/voa/styles/external/voa-input-addon.external.css +0 -204
- package/dist/voa/styles/external/voa-input.external.css +0 -307
- package/dist/voa/styles/external/voa-keybinding.external.css +0 -34
- package/dist/voa/styles/external/voa-option.external.css +0 -213
- package/dist/voa/styles/external/voa-pagination.external.css +0 -125
- package/dist/voa/styles/external/voa-radio.external.css +0 -235
- package/dist/voa/styles/external/voa-radio.styles.ts +0 -155
- package/dist/voa/styles/external/voa-select.external.css +0 -568
- package/dist/voa/styles/external/voa-switch.external.css +0 -215
- package/dist/voa/styles/external/voa-tab.external.css +0 -284
- package/dist/voa/styles/external/voa-tag.external.css +0 -206
- package/dist/voa/styles/external/voa-text-area.external.css +0 -174
- package/dist/voa/styles/external/voa-tooltip.external.css +0 -320
- package/dist/voa/styles/voa-components.css +0 -32
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
@import '../../tokens/global.css';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Estilização Externa do VoaAccordion
|
|
5
|
-
*
|
|
6
|
-
* Este arquivo demonstra como estilizar o componente voa-accordion
|
|
7
|
-
* usando CSS Parts API e design tokens semânticos.
|
|
8
|
-
*
|
|
9
|
-
* Baseado no design do Figma:
|
|
10
|
-
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-201
|
|
11
|
-
*
|
|
12
|
-
* Para usar, importe este arquivo após os tokens:
|
|
13
|
-
* @import '@voa-ds/tokens/dist/tokens.css';
|
|
14
|
-
* @import '@voa-ds/styles/voa-accordion.css';
|
|
15
|
-
*
|
|
16
|
-
* ============================================
|
|
17
|
-
* ARQUITETURA DE ANIMAÇÃO
|
|
18
|
-
* ============================================
|
|
19
|
-
*
|
|
20
|
-
* Este componente segue a filosofia "Headless" onde:
|
|
21
|
-
* - Stencil fornece a MECÂNICA (estado, estrutura Grid)
|
|
22
|
-
* - Consumidor fornece a MOTION (timing, easing, comportamento)
|
|
23
|
-
*
|
|
24
|
-
* TÉCNICA: CSS Grid Trick
|
|
25
|
-
* - Usa grid-template-rows: 0fr → 1fr para animar altura
|
|
26
|
-
* - Permite animação suave de altura 0 para auto
|
|
27
|
-
* - Mais performático que max-height ou height
|
|
28
|
-
*
|
|
29
|
-
* TIMING:
|
|
30
|
-
* - Conteúdo: 250ms cubic-bezier(0.4, 0, 0.2, 1) - Material Design easing
|
|
31
|
-
* - Ícone: 200ms cubic-bezier(0.4, 0, 0.2, 1) - Interação rápida
|
|
32
|
-
* - Header: 200ms cubic-bezier(0.4, 0, 0.2, 1) - Hover suave
|
|
33
|
-
*
|
|
34
|
-
* ACESSIBILIDADE:
|
|
35
|
-
* - Suporta prefers-reduced-motion para usuários sensíveis a movimento
|
|
36
|
-
* - Remove todas as animações quando reduzido é preferido
|
|
37
|
-
*
|
|
38
|
-
* CUSTOMIZAÇÃO:
|
|
39
|
-
* - Consumidor pode sobrescrever timing via CSS Parts
|
|
40
|
-
* - Consumidor pode adicionar diferentes tipos de animação (slide, fade, etc.)
|
|
41
|
-
* - Consumidor controla acessibilidade globalmente
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
/* ============================================
|
|
45
|
-
BASE - Container principal do accordion
|
|
46
|
-
============================================ */
|
|
47
|
-
voa-accordion::part(base) {
|
|
48
|
-
/* Background - Semantic Token */
|
|
49
|
-
background-color: var(--structure-colors-bg-base);
|
|
50
|
-
|
|
51
|
-
/* Padding do container - Semantic Token */
|
|
52
|
-
padding: var(--structure-large-spacing-sm);
|
|
53
|
-
|
|
54
|
-
/* Gap entre header e content (5px conforme Figma) */
|
|
55
|
-
gap: 5px;
|
|
56
|
-
|
|
57
|
-
/* Border quando divider=true */
|
|
58
|
-
border-top: none;
|
|
59
|
-
border-right: none;
|
|
60
|
-
border-bottom: none;
|
|
61
|
-
border-left: none;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/* Aplicar border-top quando divider=true */
|
|
65
|
-
voa-accordion[divider]::part(base) {
|
|
66
|
-
border-top: 1px solid var(--structure-colors-border-color-secondary);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* ============================================
|
|
70
|
-
HEADER - Botão clicável do cabeçalho
|
|
71
|
-
============================================ */
|
|
72
|
-
voa-accordion::part(header) {
|
|
73
|
-
/* Reset de estilos do botão */
|
|
74
|
-
background: transparent;
|
|
75
|
-
border: none;
|
|
76
|
-
padding: 0;
|
|
77
|
-
margin: 0;
|
|
78
|
-
|
|
79
|
-
/* Tipografia do header (herdada do title) */
|
|
80
|
-
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
81
|
-
|
|
82
|
-
/* Cursor pointer */
|
|
83
|
-
cursor: pointer;
|
|
84
|
-
|
|
85
|
-
/* Transição suave para hover - Matches design system pattern */
|
|
86
|
-
transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
voa-accordion::part(header):hover {
|
|
90
|
-
opacity: 0.8;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
voa-accordion::part(header):focus-visible {
|
|
94
|
-
outline: 2px solid var(--brand-base);
|
|
95
|
-
outline-offset: 2px;
|
|
96
|
-
border-radius: var(--radius-xs);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/* ============================================
|
|
100
|
-
HEADER-CONTENT - Container flex do header
|
|
101
|
-
============================================ */
|
|
102
|
-
/* Layout flex já definido no CSS estrutural */
|
|
103
|
-
/* Padding horizontal apenas para size=lg (definido abaixo) */
|
|
104
|
-
|
|
105
|
-
/* Padding horizontal para size=lg */
|
|
106
|
-
voa-accordion[size="lg"]::part(header-content) {
|
|
107
|
-
padding-inline: var(--structure-large-spacing-sm);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* ============================================
|
|
111
|
-
TITLE - Texto do título
|
|
112
|
-
============================================ */
|
|
113
|
-
voa-accordion::part(title) {
|
|
114
|
-
/* Tipografia: 16px, SemiBold (600), line-height 24px */
|
|
115
|
-
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
116
|
-
font-size: var(--typography-base-type-scale-6, 16px);
|
|
117
|
-
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
118
|
-
line-height: 24px;
|
|
119
|
-
|
|
120
|
-
/* Cor do texto - Semantic Token */
|
|
121
|
-
color: var(--text-primary);
|
|
122
|
-
|
|
123
|
-
/* Espaçamento */
|
|
124
|
-
margin: 0;
|
|
125
|
-
padding: 0;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/* ============================================
|
|
129
|
-
ICON - Ícone expand/collapse
|
|
130
|
-
============================================ */
|
|
131
|
-
voa-accordion::part(icon) {
|
|
132
|
-
/* Cor do ícone - Semantic Token */
|
|
133
|
-
color: var(--text-primary);
|
|
134
|
-
|
|
135
|
-
/* Tamanho fixo 16x16px */
|
|
136
|
-
width: 16px;
|
|
137
|
-
height: 16px;
|
|
138
|
-
|
|
139
|
-
/* Transição suave para rotação - Consumer controls timing
|
|
140
|
-
Matches design system pattern: 200ms for quick interactions */
|
|
141
|
-
transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/* Rotação do ícone quando aberto (opcional, para melhor UX) */
|
|
145
|
-
voa-accordion[open]::part(icon) {
|
|
146
|
-
transform: rotate(180deg);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/* ============================================
|
|
150
|
-
CONTENT - Container do conteúdo expansível
|
|
151
|
-
============================================ */
|
|
152
|
-
voa-accordion::part(content) {
|
|
153
|
-
/* Tipografia do conteúdo: 14px, Regular (400), line-height 16px */
|
|
154
|
-
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
155
|
-
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
156
|
-
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
157
|
-
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
158
|
-
|
|
159
|
-
/* Cor do texto - Semantic Token */
|
|
160
|
-
color: var(--text-primary);
|
|
161
|
-
|
|
162
|
-
/* Padding padrão (size=md) */
|
|
163
|
-
padding: 0;
|
|
164
|
-
|
|
165
|
-
/* ANIMATION: The visual transition logic lives here.
|
|
166
|
-
Consumer controls timing, easing, and behavior.
|
|
167
|
-
|
|
168
|
-
Using Material Design-inspired easing for smooth height transitions:
|
|
169
|
-
- Height animation: 250ms with ease-out for natural deceleration
|
|
170
|
-
- Opacity: synchronized with height for smooth fade effect
|
|
171
|
-
- Matches design system patterns (similar to switch/button timing) */
|
|
172
|
-
transition: grid-template-rows 250ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
173
|
-
opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
174
|
-
opacity: 1;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/* Padding para size=lg conforme Figma */
|
|
178
|
-
voa-accordion[size="lg"]::part(content) {
|
|
179
|
-
padding-inline: var(--structure-large-spacing-sm);
|
|
180
|
-
padding-block: var(--structure-large-radius-xl);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/* Espaçamento interno do conteúdo */
|
|
184
|
-
voa-accordion::part(content)>* {
|
|
185
|
-
margin: 0;
|
|
186
|
-
padding: 0;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/* Espaçamento entre parágrafos no conteúdo */
|
|
190
|
-
voa-accordion::part(content)>*+* {
|
|
191
|
-
margin-top: var(--structure-large-spacing-xs);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/* ============================================
|
|
195
|
-
ESTADOS E VARIAÇÕES - ANIMAÇÃO
|
|
196
|
-
============================================ */
|
|
197
|
-
|
|
198
|
-
/* Accordion fechado - anima para altura 0
|
|
199
|
-
Usa múltiplos seletores para garantir compatibilidade
|
|
200
|
-
com diferentes formas de controle de estado */
|
|
201
|
-
voa-accordion:not([open])::part(content),
|
|
202
|
-
voa-accordion.voa-accordion--closed::part(content) {
|
|
203
|
-
/* Grid trick: 0fr = altura zero, permitindo animação suave */
|
|
204
|
-
grid-template-rows: 0fr;
|
|
205
|
-
/* Opacidade zero para fade out suave */
|
|
206
|
-
opacity: 0;
|
|
207
|
-
/* Garante que o conteúdo não seja interativo quando fechado */
|
|
208
|
-
pointer-events: none;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* Accordion aberto - anima para altura auto (1fr) */
|
|
212
|
-
voa-accordion[open]::part(content),
|
|
213
|
-
voa-accordion.voa-accordion--open::part(content) {
|
|
214
|
-
/* Grid trick: 1fr = altura automática baseada no conteúdo */
|
|
215
|
-
grid-template-rows: 1fr;
|
|
216
|
-
/* Opacidade total para fade in suave */
|
|
217
|
-
opacity: 1;
|
|
218
|
-
/* Restaura interatividade quando aberto */
|
|
219
|
-
pointer-events: auto;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/* ============================================
|
|
223
|
-
ACESSIBILIDADE
|
|
224
|
-
============================================ */
|
|
225
|
-
|
|
226
|
-
/* Focus visível para navegação por teclado */
|
|
227
|
-
voa-accordion::part(header):focus-visible {
|
|
228
|
-
outline: 2px solid var(--brand-base);
|
|
229
|
-
outline-offset: 2px;
|
|
230
|
-
border-radius: var(--radius-xs);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/* ============================================
|
|
234
|
-
ACESSIBILIDADE - PREFERS REDUCED MOTION
|
|
235
|
-
============================================ */
|
|
236
|
-
|
|
237
|
-
/* Prefers Reduced Motion - Mandatory for accessibility
|
|
238
|
-
Disables animations for users who prefer reduced motion.
|
|
239
|
-
This ensures the component remains accessible to users with
|
|
240
|
-
vestibular disorders or motion sensitivity. */
|
|
241
|
-
@media (prefers-reduced-motion: reduce) {
|
|
242
|
-
/* Remove todas as transições de animação */
|
|
243
|
-
voa-accordion::part(content) {
|
|
244
|
-
transition: none;
|
|
245
|
-
/* Mantém estados visuais, apenas remove animação */
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
voa-accordion::part(icon) {
|
|
249
|
-
transition: none;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
voa-accordion::part(header) {
|
|
253
|
-
transition: none;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/* Garante que o estado final seja aplicado imediatamente */
|
|
257
|
-
voa-accordion:not([open])::part(content),
|
|
258
|
-
voa-accordion.voa-accordion--closed::part(content) {
|
|
259
|
-
grid-template-rows: 0fr;
|
|
260
|
-
opacity: 0;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
voa-accordion[open]::part(content),
|
|
264
|
-
voa-accordion.voa-accordion--open::part(content) {
|
|
265
|
-
grid-template-rows: 1fr;
|
|
266
|
-
opacity: 1;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/* ============================================
|
|
271
|
-
EXEMPLOS DE CUSTOMIZAÇÃO
|
|
272
|
-
============================================ */
|
|
273
|
-
|
|
274
|
-
/* Exemplo: Accordion com cor de fundo customizada */
|
|
275
|
-
/*
|
|
276
|
-
voa-accordion.custom-bg::part(base) {
|
|
277
|
-
background-color: var(--structure-colors-bg-container, #f5f5f5);
|
|
278
|
-
}
|
|
279
|
-
*/
|
|
280
|
-
|
|
281
|
-
/* Exemplo: Accordion com espaçamento customizado */
|
|
282
|
-
/*
|
|
283
|
-
voa-accordion.custom-spacing::part(base) {
|
|
284
|
-
padding: var(--structure-large-spacing-md, 1rem);
|
|
285
|
-
gap: var(--spacing-spacing-sm, 0.5rem);
|
|
286
|
-
}
|
|
287
|
-
*/
|
|
288
|
-
|
|
289
|
-
/* Exemplo: Accordion com tipografia customizada */
|
|
290
|
-
/*
|
|
291
|
-
voa-accordion.custom-typography::part(title) {
|
|
292
|
-
font-size: var(--typography-base-type-scale-5, 20px);
|
|
293
|
-
font-weight: var(--typography-base-type-scale-4-weight, 700);
|
|
294
|
-
}
|
|
295
|
-
*/
|
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Estilização Externa do VoaAlert
|
|
3
|
-
*
|
|
4
|
-
* Este arquivo demonstra como estilizar o componente voa-alert
|
|
5
|
-
* usando CSS Parts API e design tokens semânticos.
|
|
6
|
-
*
|
|
7
|
-
* Baseado no design do Figma:
|
|
8
|
-
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-2706
|
|
9
|
-
*
|
|
10
|
-
* Para usar, importe este arquivo após os tokens:
|
|
11
|
-
* @import '@voa-ds/tokens/dist/tokens.css';
|
|
12
|
-
* @import '@voa-ds/styles/voa-alert.css';
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/* ============================================
|
|
16
|
-
BASE - Container principal do alert
|
|
17
|
-
============================================ */
|
|
18
|
-
voa-alert::part(base) {
|
|
19
|
-
/* Border radius padrão - Semantic Token */
|
|
20
|
-
border-radius: var(--radius-sm);
|
|
21
|
-
|
|
22
|
-
/* Border - Separado em propriedades explícitas para permitir override apenas da cor */
|
|
23
|
-
border-width: 1.5px;
|
|
24
|
-
border-style: solid;
|
|
25
|
-
/* Cor padrão da borda - será sobrescrita por regras específicas de tipo */
|
|
26
|
-
border-color: var(--structure-colors-border-color);
|
|
27
|
-
|
|
28
|
-
/* Padding padrão para variant default - Semantic Token */
|
|
29
|
-
padding: var(--spacing-spacing-md);
|
|
30
|
-
|
|
31
|
-
/* Gap entre conteúdo e botões - Semantic Token */
|
|
32
|
-
gap: var(--spacing-spacing-md, 1rem);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* Variante inline: padding e border-radius diferentes */
|
|
36
|
-
voa-alert[variant="inline"]::part(base) {
|
|
37
|
-
/* Padding inline: 20px horizontal, 14px vertical - conforme Figma */
|
|
38
|
-
padding: var(--spacing-spacing-lg, 14px) var(--spacing-spacing-xl, 20px);
|
|
39
|
-
border-radius: var(--radius-md);
|
|
40
|
-
/* Gap entre elementos na variante inline - Figma especifica 10px */
|
|
41
|
-
gap: 10px;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* ============================================
|
|
45
|
-
CORES POR TIPO - Background e Border
|
|
46
|
-
============================================ */
|
|
47
|
-
|
|
48
|
-
/* Basic */
|
|
49
|
-
voa-alert[type="basic"]::part(base) {
|
|
50
|
-
background-color: var(--structure-colors-bg-container);
|
|
51
|
-
border-color: var(--structure-colors-border-color);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* Success */
|
|
55
|
-
voa-alert[type="success"]::part(base) {
|
|
56
|
-
background-color: var(--palette-green-green-2);
|
|
57
|
-
border-color: var(--palette-green-green-4);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* Info */
|
|
61
|
-
voa-alert[type="info"]::part(base) {
|
|
62
|
-
background-color: var(--palette-blue-blue-2);
|
|
63
|
-
border-color: var(--palette-blue-blue-3);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/* Warning */
|
|
67
|
-
voa-alert[type="warning"]::part(base) {
|
|
68
|
-
background-color: var(--palette-yellow-yellow-2);
|
|
69
|
-
border-color: var(--palette-yellow-yellow-4);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/* Warning Inline */
|
|
73
|
-
voa-alert[type="warning-inline"]::part(base) {
|
|
74
|
-
background-color: var(--palette-yellow-yellow-1);
|
|
75
|
-
border-color: var(--palette-yellow-yellow-4);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/* Error */
|
|
79
|
-
voa-alert[type="error"]::part(base) {
|
|
80
|
-
background-color: var(--palette-red-red-2);
|
|
81
|
-
border-color: var(--palette-red-red-4);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/* Variante inline - ajustes de border para alguns tipos */
|
|
85
|
-
voa-alert[variant="inline"][type="info"]::part(base) {
|
|
86
|
-
border-color: var(--palette-blue-blue-4);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
voa-alert[variant="inline"][type="success"]::part(base) {
|
|
90
|
-
border-color: var(--palette-green-green-3);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
voa-alert[variant="inline"][type="error"]::part(base) {
|
|
94
|
-
border-color: var(--palette-red-red-5);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* ============================================
|
|
98
|
-
CONTENT-WRAPPER - Wrapper do conteúdo principal
|
|
99
|
-
============================================ */
|
|
100
|
-
voa-alert::part(content-wrapper) {
|
|
101
|
-
/* Gap entre ícone e conteúdo - Figma especifica 16px (radius-lg) */
|
|
102
|
-
gap: var(--radius-lg, 16px);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
voa-alert[variant="inline"]::part(content-wrapper) {
|
|
106
|
-
/* Gap entre ícone e conteúdo na variante inline - Figma especifica 10px */
|
|
107
|
-
gap: 10px;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* ============================================
|
|
111
|
-
ICON - Container do ícone
|
|
112
|
-
============================================ */
|
|
113
|
-
voa-alert::part(icon) {
|
|
114
|
-
/* Tamanho do ícone para variant default */
|
|
115
|
-
width: 24px;
|
|
116
|
-
height: 24px;
|
|
117
|
-
flex-shrink: 0;
|
|
118
|
-
|
|
119
|
-
/* Cor do ícone - será definida por tipo */
|
|
120
|
-
color: currentColor;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
voa-alert[variant="inline"]::part(icon) {
|
|
124
|
-
/* Tamanho do ícone para variant inline */
|
|
125
|
-
width: 20px;
|
|
126
|
-
height: 20px;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/* Cores dos ícones por tipo - Semantic Tokens quando disponíveis */
|
|
130
|
-
voa-alert[type="success"]::part(icon),
|
|
131
|
-
voa-alert[type="success"]::part(icon) svg {
|
|
132
|
-
color: var(--semantic-colors-success);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
voa-alert[type="info"]::part(icon),
|
|
136
|
-
voa-alert[type="info"]::part(icon) svg {
|
|
137
|
-
color: var(--palette-blue-blue-9);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
voa-alert[type="warning"]::part(icon),
|
|
141
|
-
voa-alert[type="warning"]::part(icon) svg,
|
|
142
|
-
voa-alert[type="warning-inline"]::part(icon),
|
|
143
|
-
voa-alert[type="warning-inline"]::part(icon) svg {
|
|
144
|
-
color: var(--palette-yellow-yellow-9);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
voa-alert[type="error"]::part(icon),
|
|
148
|
-
voa-alert[type="error"]::part(icon) svg {
|
|
149
|
-
color: var(--palette-red-red-9);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
voa-alert[type="basic"]::part(icon),
|
|
153
|
-
voa-alert[type="basic"]::part(icon) svg {
|
|
154
|
-
color: var(--palette-gray-gray-6);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/* ============================================
|
|
158
|
-
CONTENT - Container do conteúdo
|
|
159
|
-
============================================ */
|
|
160
|
-
voa-alert::part(content) {
|
|
161
|
-
/* Flex para layout vertical (default) ou horizontal (inline) */
|
|
162
|
-
flex: 1;
|
|
163
|
-
|
|
164
|
-
/* Tipografia base - Design Token */
|
|
165
|
-
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
166
|
-
color: var(--text-primary);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/* ============================================
|
|
170
|
-
TITLE - Título do alerta
|
|
171
|
-
============================================ */
|
|
172
|
-
voa-alert::part(title) {
|
|
173
|
-
/* Tipografia - Design Tokens */
|
|
174
|
-
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
175
|
-
font-size: var(--typography-base-type-scale-6, 16px);
|
|
176
|
-
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
177
|
-
line-height: var(--line-height-body-md, 24px);
|
|
178
|
-
color: var(--text-primary);
|
|
179
|
-
|
|
180
|
-
/* Margin */
|
|
181
|
-
margin: 0;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
voa-alert[variant="inline"]::part(title) {
|
|
185
|
-
/* Tipografia inline - menor */
|
|
186
|
-
font-size: var(--typography-base-type-scale-7, 14px);
|
|
187
|
-
line-height: var(--line-height-body-sm, 16px);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/* ============================================
|
|
191
|
-
DESCRIPTION - Descrição do alerta
|
|
192
|
-
============================================ */
|
|
193
|
-
voa-alert::part(description) {
|
|
194
|
-
/* Tipografia - Design Tokens */
|
|
195
|
-
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
196
|
-
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
197
|
-
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
198
|
-
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
199
|
-
color: var(--text-secondary);
|
|
200
|
-
|
|
201
|
-
/* Espaçamento do título - Semantic Token */
|
|
202
|
-
margin-top: var(--spacing-spacing-xs, 4px);
|
|
203
|
-
margin-bottom: 0;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/* ============================================
|
|
207
|
-
CONTENT-INNER - Wrapper interno do conteúdo
|
|
208
|
-
============================================ */
|
|
209
|
-
voa-alert::part(content-inner) {
|
|
210
|
-
/* Layout flex vertical para título e descrição */
|
|
211
|
-
display: flex;
|
|
212
|
-
flex-direction: column;
|
|
213
|
-
gap: 0; /* Gap será controlado via margin-top na descrição */
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/* ============================================
|
|
217
|
-
CLOSE-BUTTON - Botão de fechar
|
|
218
|
-
============================================ */
|
|
219
|
-
voa-alert::part(close-button) {
|
|
220
|
-
/* Tamanho do ícone de fechar para variant default */
|
|
221
|
-
width: 16px;
|
|
222
|
-
height: 16px;
|
|
223
|
-
flex-shrink: 0;
|
|
224
|
-
|
|
225
|
-
/* Cor do ícone de fechar - Primitive Token (não há token semântico para isso) */
|
|
226
|
-
color: var(--palette-gray-gray-6);
|
|
227
|
-
|
|
228
|
-
/* Hover */
|
|
229
|
-
transition: opacity 0.2s ease;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
voa-alert::part(close-button):hover {
|
|
233
|
-
opacity: 0.7;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
voa-alert::part(close-button):focus-visible {
|
|
237
|
-
outline: 2px solid var(--brand-base);
|
|
238
|
-
outline-offset: 2px;
|
|
239
|
-
border-radius: 2px;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
voa-alert[variant="inline"]::part(close-button) {
|
|
243
|
-
/* Tamanho do ícone de fechar para variant inline */
|
|
244
|
-
width: 16px;
|
|
245
|
-
height: 16px;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/* ============================================
|
|
249
|
-
ACTIONS - Container dos botões de ação
|
|
250
|
-
============================================ */
|
|
251
|
-
voa-alert::part(actions) {
|
|
252
|
-
/* Layout flex para botões */
|
|
253
|
-
display: flex;
|
|
254
|
-
justify-content: flex-end;
|
|
255
|
-
align-items: center;
|
|
256
|
-
|
|
257
|
-
/* Gap entre botões - Semantic Token */
|
|
258
|
-
gap: var(--spacing-spacing-sm, 0.5rem);
|
|
259
|
-
|
|
260
|
-
/* Padding top para separar do conteúdo - Semantic Token */
|
|
261
|
-
padding-top: var(--spacing-spacing-xs);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/* ============================================
|
|
265
|
-
BUTTONS - Estilização via exportparts
|
|
266
|
-
============================================ */
|
|
267
|
-
/*
|
|
268
|
-
* Os botões são expostos via exportparts no voa-alert:
|
|
269
|
-
* - primary-btn-base: Parte "base" do botão primário
|
|
270
|
-
* - secondary-btn-base: Parte "base" do botão secundário (ghost)
|
|
271
|
-
*
|
|
272
|
-
* Isso permite estilizar os botões de fora do Shadow DOM.
|
|
273
|
-
*/
|
|
274
|
-
|
|
275
|
-
/* Base styles for both buttons */
|
|
276
|
-
voa-alert::part(primary-btn-base),
|
|
277
|
-
voa-alert::part(secondary-btn-base) {
|
|
278
|
-
/* Tipografia - Design Tokens */
|
|
279
|
-
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
280
|
-
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
281
|
-
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
282
|
-
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
283
|
-
text-align: center;
|
|
284
|
-
|
|
285
|
-
/* Border-radius padrão - Semantic Token */
|
|
286
|
-
border-radius: var(--radius-sm);
|
|
287
|
-
|
|
288
|
-
/* Box-sizing */
|
|
289
|
-
box-sizing: border-box;
|
|
290
|
-
|
|
291
|
-
/* Transição suave para estados hover/active */
|
|
292
|
-
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
|
|
293
|
-
|
|
294
|
-
/* Padding para size="sm" */
|
|
295
|
-
padding-block: var(--spacing-spacing-xs);
|
|
296
|
-
padding-inline: var(--spacing-spacing-xs);
|
|
297
|
-
min-width: 98px;
|
|
298
|
-
gap: var(--spacing-spacing-xs, 0.25rem);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/* Primary Button */
|
|
302
|
-
voa-alert::part(primary-btn-base) {
|
|
303
|
-
background-color: var(--brand-base);
|
|
304
|
-
color: var(--text-on-primary);
|
|
305
|
-
border: var(--border-width-thin) solid var(--brand-base-50);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
voa-alert::part(primary-btn-base):hover {
|
|
309
|
-
background-color: var(--brand-hover);
|
|
310
|
-
border-color: var(--brand-base-50);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
voa-alert::part(primary-btn-base):active {
|
|
314
|
-
background-color: var(--brand-active);
|
|
315
|
-
border-color: var(--brand-base-50);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
voa-alert::part(primary-btn-base):focus-visible {
|
|
319
|
-
outline: 2px solid var(--brand-base);
|
|
320
|
-
outline-offset: 2px;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/* Secondary/Ghost Button - Com cores de danger */
|
|
324
|
-
voa-alert::part(secondary-btn-base) {
|
|
325
|
-
background-color: transparent;
|
|
326
|
-
color: var(--semantic-colors-danger);
|
|
327
|
-
border: 1px solid transparent;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
voa-alert::part(secondary-btn-base):hover {
|
|
331
|
-
background-color: var(--semantic-colors-danger);
|
|
332
|
-
color: var(--text-on-primary);
|
|
333
|
-
border-color: var(--semantic-colors-danger);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
voa-alert::part(secondary-btn-base):active {
|
|
337
|
-
background-color: var(--semantic-colors-danger);
|
|
338
|
-
color: var(--text-on-primary);
|
|
339
|
-
border-color: var(--semantic-colors-danger);
|
|
340
|
-
opacity: 0.9;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
voa-alert::part(secondary-btn-base):focus-visible {
|
|
344
|
-
outline: 2px solid var(--semantic-colors-danger);
|
|
345
|
-
outline-offset: 2px;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
|