voa-ds-core 1.0.8 → 1.0.10
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/collection/components/GetStarted/ImportandoEstilos.stories.js +32 -11
- package/dist/collection/components/GetStarted/ImportandoEstilos.stories.js.map +1 -1
- package/dist/collection/styles/external/saas-dashboard.css +566 -0
- package/dist/collection/styles/external/voa-accordion.external.css +295 -0
- package/dist/collection/styles/external/voa-alert.external.css +348 -0
- package/dist/collection/styles/external/voa-avatar.external.css +118 -0
- package/dist/collection/styles/external/voa-badge.external.css +346 -0
- package/dist/collection/styles/external/voa-breadcrumbs.external.css +183 -0
- package/dist/collection/styles/external/voa-button.external.css +257 -0
- package/dist/collection/styles/external/voa-card.external.css +30 -0
- package/dist/collection/styles/external/voa-checkbox.external.css +303 -0
- package/dist/collection/styles/external/voa-input-addon.external.css +204 -0
- package/dist/collection/styles/external/voa-input.external.css +307 -0
- package/dist/collection/styles/external/voa-keybinding.external.css +34 -0
- package/dist/collection/styles/external/voa-option.external.css +213 -0
- package/dist/collection/styles/external/voa-pagination.external.css +125 -0
- package/dist/collection/styles/external/voa-radio.external.css +235 -0
- package/dist/collection/styles/external/voa-radio.styles.ts +155 -0
- package/dist/collection/styles/external/voa-select.external.css +568 -0
- package/dist/collection/styles/external/voa-switch.external.css +215 -0
- package/dist/collection/styles/external/voa-tab.external.css +284 -0
- package/dist/collection/styles/external/voa-tag.external.css +206 -0
- package/dist/collection/styles/external/voa-text-area.external.css +174 -0
- package/dist/collection/styles/external/voa-tooltip.external.css +320 -0
- package/dist/collection/styles/voa-components.css +32 -0
- package/dist/voa/styles/external/saas-dashboard.css +566 -0
- package/dist/voa/styles/external/voa-accordion.external.css +295 -0
- package/dist/voa/styles/external/voa-alert.external.css +348 -0
- package/dist/voa/styles/external/voa-avatar.external.css +118 -0
- package/dist/voa/styles/external/voa-badge.external.css +346 -0
- package/dist/voa/styles/external/voa-breadcrumbs.external.css +183 -0
- package/dist/voa/styles/external/voa-button.external.css +257 -0
- package/dist/voa/styles/external/voa-card.external.css +30 -0
- package/dist/voa/styles/external/voa-checkbox.external.css +303 -0
- package/dist/voa/styles/external/voa-input-addon.external.css +204 -0
- package/dist/voa/styles/external/voa-input.external.css +307 -0
- package/dist/voa/styles/external/voa-keybinding.external.css +34 -0
- package/dist/voa/styles/external/voa-option.external.css +213 -0
- package/dist/voa/styles/external/voa-pagination.external.css +125 -0
- package/dist/voa/styles/external/voa-radio.external.css +235 -0
- package/dist/voa/styles/external/voa-radio.styles.ts +155 -0
- package/dist/voa/styles/external/voa-select.external.css +568 -0
- package/dist/voa/styles/external/voa-switch.external.css +215 -0
- package/dist/voa/styles/external/voa-tab.external.css +284 -0
- package/dist/voa/styles/external/voa-tag.external.css +206 -0
- package/dist/voa/styles/external/voa-text-area.external.css +174 -0
- package/dist/voa/styles/external/voa-tooltip.external.css +320 -0
- package/dist/voa/styles/voa-components.css +32 -0
- package/package.json +3 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estilização Externa do VoaAvatar
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo demonstra como estilizar o componente voa-avatar
|
|
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-2809&t=eEPGXVkQRijr3FMg-4
|
|
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-avatar.css';
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/* ============================================
|
|
16
|
+
BASE - Container principal do avatar
|
|
17
|
+
============================================ */
|
|
18
|
+
voa-avatar::part(base) {
|
|
19
|
+
/* Background do avatar - Semantic Token (conforme Figma: bg-elevated) */
|
|
20
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
21
|
+
|
|
22
|
+
/* Border-radius circular - Semantic Token (conforme Figma: radius-round) */
|
|
23
|
+
border-radius: var(--radius-round);
|
|
24
|
+
|
|
25
|
+
/* Shadow conforme Figma: 0px 4px 4px 0px rgba(0,0,0,0.25) */
|
|
26
|
+
box-shadow: var(--voa-shadow-avatar);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* ============================================
|
|
30
|
+
INITIALS - Texto de iniciais
|
|
31
|
+
============================================ */
|
|
32
|
+
voa-avatar::part(initials) {
|
|
33
|
+
/* Cor do texto - Semantic Token (conforme Figma: text-primary) */
|
|
34
|
+
color: var(--text-primary);
|
|
35
|
+
|
|
36
|
+
/* Font-family (Manrope SemiBold conforme Figma) */
|
|
37
|
+
font-family: var(--font-family-sans, 'Manrope', sans-serif);
|
|
38
|
+
font-weight: var(--typography-base-body-sm-bold-weight); /* SemiBold */
|
|
39
|
+
font-style: normal;
|
|
40
|
+
|
|
41
|
+
/* Line-height */
|
|
42
|
+
line-height: 1;
|
|
43
|
+
|
|
44
|
+
/* Text transform já aplicado no CSS estrutural */
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Tamanhos de fonte para iniciais baseados no size do avatar */
|
|
48
|
+
voa-avatar[size="xs"]::part(initials) {
|
|
49
|
+
font-size: var(--avatar-font-size-xs); /* Conforme Figma: 8px para xs */
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
voa-avatar[size="sm"]::part(initials) {
|
|
53
|
+
font-size: var(--avatar-font-size-sm); /* Conforme Figma: 12px para sm */
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
voa-avatar[size="md"]::part(initials) {
|
|
57
|
+
font-size: var(--avatar-font-size-md); /* Conforme Figma: 16px para md */
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
voa-avatar[size="lg"]::part(initials) {
|
|
61
|
+
font-size: var(--avatar-font-size-lg); /* Conforme Figma: 24px para lg */
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
voa-avatar[size="xl"]::part(initials) {
|
|
65
|
+
font-size: var(--avatar-font-size-xl); /* Conforme Figma: 28px para xl */
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* ============================================
|
|
69
|
+
ICON - Ícone SVG padrão
|
|
70
|
+
============================================ */
|
|
71
|
+
voa-avatar::part(icon) {
|
|
72
|
+
/* Cor do ícone - Primitive Token (conforme Figma: rgba(73, 80, 87, 1) = gray-7) */
|
|
73
|
+
/* Nota: Não há token semântico específico para cor de ícone, usando primitivo */
|
|
74
|
+
color: var(--palette-gray-gray-7);
|
|
75
|
+
|
|
76
|
+
/* Fill será aplicado via currentColor */
|
|
77
|
+
fill: currentColor;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* ============================================
|
|
81
|
+
IMAGE - Imagem do avatar
|
|
82
|
+
============================================ */
|
|
83
|
+
voa-avatar::part(image) {
|
|
84
|
+
/* Estilos estruturais já aplicados no CSS do componente */
|
|
85
|
+
/* Apenas garantir que a imagem preencha o container */
|
|
86
|
+
object-fit: cover;
|
|
87
|
+
object-position: center;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* ============================================
|
|
91
|
+
VARIAÇÕES POR TIPO
|
|
92
|
+
============================================ */
|
|
93
|
+
|
|
94
|
+
/* Avatar tipo photo - sem background (apenas imagem) */
|
|
95
|
+
voa-avatar[type="photo"]::part(base) {
|
|
96
|
+
background-color: transparent;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* Avatar tipo icon - com background */
|
|
100
|
+
voa-avatar[type="icon"]::part(base) {
|
|
101
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Avatar tipo initials - com background */
|
|
105
|
+
voa-avatar[type="initials"]::part(base) {
|
|
106
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ============================================
|
|
110
|
+
ACESSIBILIDADE
|
|
111
|
+
============================================ */
|
|
112
|
+
|
|
113
|
+
/* Focus visível para navegação por teclado (se o avatar for interativo) */
|
|
114
|
+
voa-avatar::part(base):focus-visible {
|
|
115
|
+
outline: 2px solid var(--brand-base);
|
|
116
|
+
outline-offset: 2px;
|
|
117
|
+
}
|
|
118
|
+
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estilização Externa do VoaBadge
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo demonstra como estilizar o componente voa-badge
|
|
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-3352
|
|
9
|
+
*
|
|
10
|
+
* Para usar, importe este arquivo após os tokens:
|
|
11
|
+
* @import '@voa-ds/tokens/global.css';
|
|
12
|
+
* @import '@voa-ds/styles/voa-badge.css';
|
|
13
|
+
*
|
|
14
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
15
|
+
*
|
|
16
|
+
* Figma Token → Style Dictionary Token
|
|
17
|
+
* --------------------------------------------
|
|
18
|
+
* --structure-colors/bg-container → --structure-colors-bg-container
|
|
19
|
+
* --structure-colors/border-color → --structure-colors-border-color
|
|
20
|
+
* --structure-colors/border-color-secondary → --structure-colors-border-color-secondary
|
|
21
|
+
* --structure-colors/fill-secondary → --structure-colors-fill-secondary
|
|
22
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
23
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
24
|
+
* --spacing/spacing-md → --spacing-spacing-md (16px)
|
|
25
|
+
* --spacing/spacing-lg → --spacing-spacing-lg (24px)
|
|
26
|
+
* --spacing/spacing-xxs → --spacing-spacing-xxs (2px)
|
|
27
|
+
* --radius/radius-xs → --radius-xs (4px)
|
|
28
|
+
* --radius/radius-round → --radius-round (1024px)
|
|
29
|
+
* --semantic-colors/danger → --semantic-colors-danger
|
|
30
|
+
* --asset-colors/text-primary → --text-primary
|
|
31
|
+
* --base/family/family-sans → --font-family-sans
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/* ============================================
|
|
35
|
+
BASE - Container principal do badge
|
|
36
|
+
============================================ */
|
|
37
|
+
voa-badge::part(base) {
|
|
38
|
+
/* Background padrão - Semantic Token (conforme Figma: structure-colors/bg-container) */
|
|
39
|
+
background-color: var(--structure-colors-bg-container, #f1f3f5);
|
|
40
|
+
|
|
41
|
+
/* Border padrão - Figma: 1.5px solid */
|
|
42
|
+
border: 1.5px solid var(--structure-colors-border-color, #adb5bd);
|
|
43
|
+
|
|
44
|
+
/* Border-radius padrão para state="default" - Semantic Token (conforme Figma: radius/radius-xs) */
|
|
45
|
+
border-radius: var(--radius-xs, 4px);
|
|
46
|
+
|
|
47
|
+
/* Box-sizing */
|
|
48
|
+
box-sizing: border-box;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* State: Pill - Border-radius completamente arredondado */
|
|
52
|
+
voa-badge[shape="pill"]::part(base) {
|
|
53
|
+
/* Border-radius pill - Semantic Token (conforme Figma: radius/radius-round = 1024px) */
|
|
54
|
+
border-radius: var(--radius-round, 1024px);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* ============================================
|
|
58
|
+
VARIANTE: ICON-ONLY
|
|
59
|
+
Figma: Type=icon-only
|
|
60
|
+
============================================ */
|
|
61
|
+
|
|
62
|
+
/* Icon-only - Size: md, State: default */
|
|
63
|
+
voa-badge[variant="icon-only"]::part(base) {
|
|
64
|
+
/* Padding uniforme - Figma: spacing-xs (4px) */
|
|
65
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
66
|
+
/* Gap entre elementos - Figma: 4px */
|
|
67
|
+
gap: 4px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Icon-only - Size: sm */
|
|
71
|
+
voa-badge[variant="icon-only"][size="sm"]::part(base) {
|
|
72
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
73
|
+
gap: 4px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* ============================================
|
|
77
|
+
VARIANTE: INDICATOR
|
|
78
|
+
Figma: Type=indicator
|
|
79
|
+
============================================ */
|
|
80
|
+
|
|
81
|
+
/* Indicator - Size: md, State: default */
|
|
82
|
+
voa-badge[variant="indicator"]::part(base),
|
|
83
|
+
voa-badge[variant="indicator"][size="md"]::part(base) {
|
|
84
|
+
/* Padding - Figma: px=spacing-xs (4px), py=spacing-xxs (2px) */
|
|
85
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
86
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
87
|
+
/* Height - Figma: spacing-lg (24px) */
|
|
88
|
+
height: var(--spacing-spacing-lg, 24px);
|
|
89
|
+
/* Max-width - Figma: 24px */
|
|
90
|
+
max-width: 24px;
|
|
91
|
+
/* Gap - Figma: 10px */
|
|
92
|
+
gap: 10px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Indicator - Size: sm, State: default */
|
|
96
|
+
voa-badge[variant="indicator"][size="sm"]::part(base) {
|
|
97
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
98
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
99
|
+
/* Size - Figma: spacing-md (16px) x spacing-md (16px) */
|
|
100
|
+
width: var(--spacing-spacing-md, 16px);
|
|
101
|
+
height: var(--spacing-spacing-md, 16px);
|
|
102
|
+
max-width: 24px;
|
|
103
|
+
gap: 10px;
|
|
104
|
+
/* Border color secondary para sm - Figma */
|
|
105
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Indicator - Size: md, State: pill */
|
|
109
|
+
voa-badge[variant="indicator"][shape="pill"]::part(base),
|
|
110
|
+
voa-badge[variant="indicator"][shape="pill"][size="md"]::part(base) {
|
|
111
|
+
padding-block: var(--radius-xs, 4px);
|
|
112
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
113
|
+
height: 24px;
|
|
114
|
+
gap: 10px;
|
|
115
|
+
/* items-start no Figma, portanto align-items: flex-start */
|
|
116
|
+
align-items: flex-start;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Indicator - Size: sm, State: pill */
|
|
120
|
+
voa-badge[variant="indicator"][shape="pill"][size="sm"]::part(base) {
|
|
121
|
+
padding-block: var(--radius-xs, 4px);
|
|
122
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
123
|
+
width: var(--spacing-spacing-md, 16px);
|
|
124
|
+
height: var(--spacing-spacing-md, 16px);
|
|
125
|
+
gap: 10px;
|
|
126
|
+
align-items: flex-start;
|
|
127
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* ============================================
|
|
131
|
+
VARIANTE: INDICATOR-OVERLAY
|
|
132
|
+
Figma: Type=indicator-overlay (fundo vermelho)
|
|
133
|
+
============================================ */
|
|
134
|
+
|
|
135
|
+
/* Indicator-overlay - Base styles */
|
|
136
|
+
voa-badge[variant="indicator-overlay"]::part(base) {
|
|
137
|
+
/* Background vermelho - Semantic Token (conforme Figma: semantic-colors/danger) */
|
|
138
|
+
background-color: var(--semantic-colors-danger, #e51937);
|
|
139
|
+
/* Border com fill-secondary - Figma */
|
|
140
|
+
border-color: var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Indicator-overlay - Size: md, State: default */
|
|
144
|
+
voa-badge[variant="indicator-overlay"][size="md"]::part(base) {
|
|
145
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
146
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
147
|
+
height: var(--spacing-spacing-lg, 24px);
|
|
148
|
+
max-width: 24px;
|
|
149
|
+
gap: 10px;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Indicator-overlay - Size: sm, State: default */
|
|
153
|
+
voa-badge[variant="indicator-overlay"][size="sm"]::part(base) {
|
|
154
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
155
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
156
|
+
/* Size fixa 16x16 - Figma */
|
|
157
|
+
width: var(--spacing-spacing-md, 16px);
|
|
158
|
+
height: var(--spacing-spacing-md, 16px);
|
|
159
|
+
max-width: 24px;
|
|
160
|
+
gap: 10px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Indicator-overlay - Size: md, State: pill */
|
|
164
|
+
voa-badge[variant="indicator-overlay"][shape="pill"]::part(base),
|
|
165
|
+
voa-badge[variant="indicator-overlay"][shape="pill"][size="md"]::part(base) {
|
|
166
|
+
padding-block: var(--radius-xs, 4px);
|
|
167
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
168
|
+
height: 24px;
|
|
169
|
+
gap: 10px;
|
|
170
|
+
align-items: flex-start;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Indicator-overlay - Size: sm, State: pill */
|
|
174
|
+
voa-badge[variant="indicator-overlay"][shape="pill"][size="sm"]::part(base) {
|
|
175
|
+
padding-block: var(--radius-xs, 4px);
|
|
176
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
177
|
+
width: var(--spacing-spacing-md, 16px);
|
|
178
|
+
height: var(--spacing-spacing-md, 16px);
|
|
179
|
+
gap: 10px;
|
|
180
|
+
align-items: flex-start;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* ============================================
|
|
184
|
+
VARIANTE: INDICATOR-ONLY
|
|
185
|
+
Figma: Type=indicator-only (apenas ponto vermelho)
|
|
186
|
+
============================================ */
|
|
187
|
+
|
|
188
|
+
voa-badge[variant="indicator-only"]::part(base) {
|
|
189
|
+
/* Background vermelho - Figma */
|
|
190
|
+
background-color: var(--semantic-colors-danger, #e51937);
|
|
191
|
+
/* Border-radius - Figma: radius-xs (4px) */
|
|
192
|
+
border-radius: var(--radius-xs, 4px);
|
|
193
|
+
/* Tamanho fixo - Figma: spacing-sm (8px) x spacing-sm (8px) */
|
|
194
|
+
width: var(--spacing-spacing-sm, 8px);
|
|
195
|
+
height: var(--spacing-spacing-sm, 8px);
|
|
196
|
+
/* Sem border - Figma */
|
|
197
|
+
border: none;
|
|
198
|
+
/* Sem padding */
|
|
199
|
+
padding: 0;
|
|
200
|
+
/* Shadow - Figma: 0px 4px 4px 0px rgba(0,0,0,0.25) */
|
|
201
|
+
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* ============================================
|
|
205
|
+
VARIANTE: PLAIN (compatibilidade legado)
|
|
206
|
+
Nota: Não existe no Figma atual, mantido para retrocompatibilidade
|
|
207
|
+
============================================ */
|
|
208
|
+
|
|
209
|
+
voa-badge[variant="plain"]::part(base) {
|
|
210
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
211
|
+
padding-inline: var(--spacing-spacing-sm, 8px);
|
|
212
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
voa-badge[variant="plain"][size="sm"]::part(base) {
|
|
216
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ============================================
|
|
220
|
+
VARIANTE: ICONS (compatibilidade legado)
|
|
221
|
+
Nota: Não existe no Figma atual, mantido para retrocompatibilidade
|
|
222
|
+
============================================ */
|
|
223
|
+
|
|
224
|
+
voa-badge[variant="icons"]::part(base) {
|
|
225
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
226
|
+
padding-inline: var(--spacing-spacing-sm, 8px);
|
|
227
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
voa-badge[variant="icons"][size="sm"]::part(base) {
|
|
231
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* ============================================
|
|
235
|
+
LABEL - Texto do badge
|
|
236
|
+
============================================ */
|
|
237
|
+
voa-badge::part(label) {
|
|
238
|
+
/* Cor do texto - Semantic Token (conforme Figma: asset-colors/text-primary) */
|
|
239
|
+
color: var(--text-primary, #0b1215);
|
|
240
|
+
|
|
241
|
+
/* Font-family - Figma: base/family/family-sans */
|
|
242
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
243
|
+
|
|
244
|
+
/* Font-weight: Regular (400) */
|
|
245
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
246
|
+
font-style: normal;
|
|
247
|
+
|
|
248
|
+
/* Line-height e font-size por tamanho */
|
|
249
|
+
line-height: 16px;
|
|
250
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Size: Small - Tipografia menor */
|
|
254
|
+
voa-badge[size="sm"]::part(label) {
|
|
255
|
+
font-size: 11px;
|
|
256
|
+
line-height: 12px;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* ============================================
|
|
260
|
+
INDICATOR - Contador numérico
|
|
261
|
+
============================================ */
|
|
262
|
+
voa-badge::part(indicator) {
|
|
263
|
+
/* Cor do texto - Figma: asset-colors/text-primary */
|
|
264
|
+
color: var(--text-primary, #0b1215);
|
|
265
|
+
|
|
266
|
+
/* Font-family - Figma: base/family/family-sans com SemiBold */
|
|
267
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
268
|
+
|
|
269
|
+
/* Font-weight: SemiBold (600) - Figma */
|
|
270
|
+
font-weight: 600;
|
|
271
|
+
font-style: normal;
|
|
272
|
+
|
|
273
|
+
/* Text alignment */
|
|
274
|
+
text-align: center;
|
|
275
|
+
white-space: pre-wrap;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/* Indicator - Size: md */
|
|
279
|
+
voa-badge[size="md"]::part(indicator),
|
|
280
|
+
voa-badge[variant="indicator"][size="md"]::part(indicator),
|
|
281
|
+
voa-badge[variant="indicator-overlay"][size="md"]::part(indicator) {
|
|
282
|
+
/* Figma: 14px, line-height 16px, size 16x16 */
|
|
283
|
+
font-size: 14px;
|
|
284
|
+
line-height: 16px;
|
|
285
|
+
width: 16px;
|
|
286
|
+
height: 16px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Indicator - Size: sm */
|
|
290
|
+
voa-badge[size="sm"]::part(indicator),
|
|
291
|
+
voa-badge[variant="indicator"][size="sm"]::part(indicator),
|
|
292
|
+
voa-badge[variant="indicator-overlay"][size="sm"]::part(indicator) {
|
|
293
|
+
/* Figma: 10px, line-height 8px, size 8x8 */
|
|
294
|
+
font-size: 10px;
|
|
295
|
+
line-height: 8px;
|
|
296
|
+
width: 8px;
|
|
297
|
+
height: 8px;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* Variante: Indicator-overlay - Texto branco */
|
|
301
|
+
voa-badge[variant="indicator-overlay"]::part(indicator) {
|
|
302
|
+
/* Cor do texto branco - Figma: structure-colors/bg-base */
|
|
303
|
+
color: var(--structure-colors-bg-base, #ffffff);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* ============================================
|
|
307
|
+
ICON - Ícone do badge
|
|
308
|
+
============================================ */
|
|
309
|
+
voa-badge::part(icon),
|
|
310
|
+
voa-badge::part(icon-leading),
|
|
311
|
+
voa-badge::part(icon-trailing) {
|
|
312
|
+
/* Cor do ícone - Figma usa cor específica do ícone (ex: rgba(0, 229, 206, 1) para check) */
|
|
313
|
+
/* Mantemos currentColor para flexibilidade */
|
|
314
|
+
color: currentColor;
|
|
315
|
+
fill: currentColor;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/* Icon - Size: md */
|
|
319
|
+
voa-badge[size="md"]::part(icon),
|
|
320
|
+
voa-badge[size="md"]::part(icon-leading),
|
|
321
|
+
voa-badge[size="md"]::part(icon-trailing),
|
|
322
|
+
voa-badge[variant="icon-only"][size="md"]::part(icon) {
|
|
323
|
+
/* Figma: 16x16 */
|
|
324
|
+
width: 16px;
|
|
325
|
+
height: 16px;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Icon - Size: sm */
|
|
329
|
+
voa-badge[size="sm"]::part(icon),
|
|
330
|
+
voa-badge[size="sm"]::part(icon-leading),
|
|
331
|
+
voa-badge[size="sm"]::part(icon-trailing),
|
|
332
|
+
voa-badge[variant="icon-only"][size="sm"]::part(icon) {
|
|
333
|
+
/* Figma: 8x8 para icon-only sm */
|
|
334
|
+
width: 8px;
|
|
335
|
+
height: 8px;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* ============================================
|
|
339
|
+
ACESSIBILIDADE
|
|
340
|
+
============================================ */
|
|
341
|
+
|
|
342
|
+
/* Focus visível para navegação por teclado (se o badge for interativo) */
|
|
343
|
+
voa-badge::part(base):focus-visible {
|
|
344
|
+
outline: 2px solid var(--brand-base, #0064cb);
|
|
345
|
+
outline-offset: 2px;
|
|
346
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estilização Externa do VoaBreadcrumbs
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo demonstra como estilizar o componente voa-breadcrumbs
|
|
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=443-10022&t=eEPGXVkQRijr3FMg-4
|
|
9
|
+
*
|
|
10
|
+
* Para usar, importe este arquivo após os tokens:
|
|
11
|
+
* @import '@voa-ds/tokens/global.css';
|
|
12
|
+
* @import '@voa-ds/styles/voa-breadcrumbs.css';
|
|
13
|
+
*
|
|
14
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
15
|
+
*
|
|
16
|
+
* Figma Token → Style Dictionary Token
|
|
17
|
+
* --------------------------------------------
|
|
18
|
+
* --structure-colors/bg-base → --structure-colors-bg-base
|
|
19
|
+
* --structure-colors/fill-15 → --structure-colors-fill-15
|
|
20
|
+
* --structure-colors/border-color-secondary → --structure-colors-border-color-secondary
|
|
21
|
+
* --radius/radius-round → --radius-round
|
|
22
|
+
* --radius/radius-lg → --radius-lg
|
|
23
|
+
* --spacing/spacing-md → --spacing-spacing-md (16px)
|
|
24
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
25
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
26
|
+
* --asset-colors/text-secondary → --text-secondary
|
|
27
|
+
* --asset-colors/text-hover → --text-hover (ou --brand-base)
|
|
28
|
+
* --base/family/family-sans → --font-family-sans
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/* ============================================
|
|
32
|
+
BASE - Container principal do breadcrumb
|
|
33
|
+
============================================ */
|
|
34
|
+
voa-breadcrumbs::part(base) {
|
|
35
|
+
/* Background padrão (default) - Semantic Token (conforme Figma: structure-colors/bg-base) */
|
|
36
|
+
background-color: var(--structure-colors-bg-base);
|
|
37
|
+
|
|
38
|
+
/* Padding horizontal - Semantic Token (conforme Figma: spacing/spacing-md = 16px) */
|
|
39
|
+
padding-inline: var(--spacing-spacing-md);
|
|
40
|
+
|
|
41
|
+
/* Padding vertical */
|
|
42
|
+
padding-block: 0;
|
|
43
|
+
|
|
44
|
+
/* Box-sizing */
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
|
|
47
|
+
/* Gap entre items - Semantic Token (conforme Figma: spacing/spacing-sm = 8px) */
|
|
48
|
+
/* Note: Gap is handled by separator margin in the items */
|
|
49
|
+
gap: 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Variante: Round - Estilos específicos */
|
|
53
|
+
voa-breadcrumbs[type="round"]::part(base) {
|
|
54
|
+
/* Background round - Semantic Token (conforme Figma: structure-colors/fill-15) */
|
|
55
|
+
background-color: var(--structure-colors-fill-15);
|
|
56
|
+
|
|
57
|
+
/* Border - Semantic Token (conforme Figma: structure-colors/border-color-secondary) */
|
|
58
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color-secondary);
|
|
59
|
+
|
|
60
|
+
/* Border-radius completamente arredondado - Semantic Token (conforme Figma: radius/radius-round) */
|
|
61
|
+
border-radius: var(--radius-round);
|
|
62
|
+
|
|
63
|
+
/* Padding round - Semantic Token (conforme Figma: radius/radius-lg = 16px) */
|
|
64
|
+
padding-inline: var(--radius-lg);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Variante: Outline - Estilos específicos */
|
|
68
|
+
voa-breadcrumbs[type="outline"]::part(base) {
|
|
69
|
+
/* Background transparente */
|
|
70
|
+
background-color: transparent;
|
|
71
|
+
|
|
72
|
+
/* Border - Semantic Token */
|
|
73
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color-secondary);
|
|
74
|
+
|
|
75
|
+
/* Border-radius padrão */
|
|
76
|
+
border-radius: var(--radius-sm);
|
|
77
|
+
|
|
78
|
+
/* Padding similar ao round para compensar a borda */
|
|
79
|
+
padding-inline: var(--spacing-spacing-md);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ============================================
|
|
83
|
+
BREADCRUMBS ITEM - Item do breadcrumb
|
|
84
|
+
============================================ */
|
|
85
|
+
|
|
86
|
+
/* Base do item (Content) */
|
|
87
|
+
voa-breadcrumbs-item::part(content) {
|
|
88
|
+
/* Display flex para alinhamento */
|
|
89
|
+
display: inline-flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
|
|
92
|
+
/* Padding vertical - Semantic Token (conforme Figma: spacing/spacing-xs = 4px) */
|
|
93
|
+
padding-block: var(--spacing-spacing-xs);
|
|
94
|
+
|
|
95
|
+
/* Text decoration para links */
|
|
96
|
+
text-decoration: none;
|
|
97
|
+
|
|
98
|
+
/* Box-sizing */
|
|
99
|
+
box-sizing: border-box;
|
|
100
|
+
|
|
101
|
+
/* Cursor pointer para links */
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
|
|
104
|
+
/* --- Text Styles from Figma (component-specific overrides) --- */
|
|
105
|
+
/* Cor do texto - Figma: asset-colors/text-secondary = #00e5ce (teal) */
|
|
106
|
+
color: #00e5ce;
|
|
107
|
+
|
|
108
|
+
/* Font-family - Semantic Token (conforme Figma: base/family/family-sans) */
|
|
109
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
110
|
+
|
|
111
|
+
/* Font-weight: Regular (400) */
|
|
112
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
113
|
+
font-style: normal;
|
|
114
|
+
|
|
115
|
+
/* Font-size: 10px conforme Figma (Legal/Regular) */
|
|
116
|
+
font-size: 0.625rem; /* 10px */
|
|
117
|
+
line-height: 16px;
|
|
118
|
+
|
|
119
|
+
/* Text alignment right conforme Figma */
|
|
120
|
+
text-align: right;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Item ativo (span) - sem cursor pointer */
|
|
124
|
+
voa-breadcrumbs-item[active]::part(content) {
|
|
125
|
+
cursor: default;
|
|
126
|
+
|
|
127
|
+
/* --- Active Text Styles from Figma --- */
|
|
128
|
+
/* Cor do texto ativo - Figma: asset-colors/text-hover = #0064cb (blue) */
|
|
129
|
+
color: #0064cb;
|
|
130
|
+
|
|
131
|
+
/* Font-weight: SemiBold (600) conforme Figma (Legal/Bold) */
|
|
132
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Link não ativo - hover effect */
|
|
136
|
+
voa-breadcrumbs-item::part(content):hover {
|
|
137
|
+
/* Text decoration underline para links */
|
|
138
|
+
text-decoration: underline;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
voa-breadcrumbs-item[active]::part(content):hover {
|
|
142
|
+
/* Sem underline quando ativo */
|
|
143
|
+
text-decoration: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* ============================================
|
|
147
|
+
BREADCRUMBS SEPARATOR - Divisor entre items
|
|
148
|
+
============================================ */
|
|
149
|
+
|
|
150
|
+
/* Base do divisor */
|
|
151
|
+
voa-breadcrumbs-item::part(separator) {
|
|
152
|
+
/* Cor do ícone - Figma: rgba(159, 159, 168, 1) = gray separator */
|
|
153
|
+
color: rgba(159, 159, 168, 1);
|
|
154
|
+
|
|
155
|
+
/* Fill será aplicado via currentColor */
|
|
156
|
+
fill: currentColor;
|
|
157
|
+
|
|
158
|
+
/* Margem horizontal - Semantic Token (conforme Figma: spacing/spacing-sm = 8px) */
|
|
159
|
+
margin-inline: var(--spacing-spacing-sm);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Tamanho do ícone - 16x16 conforme Figma */
|
|
163
|
+
voa-breadcrumbs-item::part(separator) svg {
|
|
164
|
+
width: 16px;
|
|
165
|
+
height: 16px;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* ============================================
|
|
169
|
+
ACESSIBILIDADE
|
|
170
|
+
============================================ */
|
|
171
|
+
|
|
172
|
+
/* Focus visível para navegação por teclado */
|
|
173
|
+
voa-breadcrumbs-item::part(content):focus-visible {
|
|
174
|
+
outline: 2px solid var(--brand-base);
|
|
175
|
+
outline-offset: 2px;
|
|
176
|
+
border-radius: 2px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* Link ativo não precisa de focus */
|
|
180
|
+
voa-breadcrumbs-item[active]::part(content):focus-visible {
|
|
181
|
+
outline: none;
|
|
182
|
+
}
|
|
183
|
+
|