@abrasileirado/dsgovbr-bootstraped 0.2.2 → 0.3.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/dist/dsgovbr-bootstraped.css +116 -2
- package/dist/dsgovbr-bootstraped.css.map +1 -1
- package/dist/dsgovbr-bootstraped.min.css +1 -1
- package/package.json +1 -1
- package/src/scss/_bootstrap-settings.scss +8 -4
- package/src/scss/_tokens.scss +13 -0
- package/src/scss/components/_alert.scss +50 -0
- package/src/scss/components/_button.scss +40 -0
- package/src/scss/components/_form.scss +38 -0
- package/src/scss/index.scss +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abrasileirado/dsgovbr-bootstraped",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Camada de compatibilidade visual não oficial entre o Bootstrap 5 e o Design System GOV.BR (DSGovBR)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Kelson da Costa Medeiros",
|
|
@@ -59,10 +59,9 @@ $btn-padding-x: 1.5rem !default; // 24px
|
|
|
59
59
|
$btn-padding-x-sm: 1rem !default; // 16px
|
|
60
60
|
$btn-padding-x-lg: 2rem !default; // 32px
|
|
61
61
|
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
// não exige identidade exata, só declarar a aproximação.
|
|
62
|
+
// A altura exata (32/40/48px — ver _tokens.scss) vem de min-height em
|
|
63
|
+
// components/_button.scss. Este padding vertical só dá respiro quando o
|
|
64
|
+
// rótulo quebra de linha (aí o botão cresce além do mínimo).
|
|
66
65
|
$btn-padding-y: 0.5rem !default; // ~40px de altura total (padrão)
|
|
67
66
|
$btn-padding-y-sm: 0.375rem !default; // ~32px de altura total
|
|
68
67
|
$btn-padding-y-lg: 0.625rem !default; // ~48px de altura total
|
|
@@ -110,6 +109,11 @@ $form-check-input-width: 24px !default;
|
|
|
110
109
|
// sobrescrevemos o resultado final também: 24px (caixa) + 8px (espaçamento,
|
|
111
110
|
// spacing-scale-base do GOV.BR DS) = 32px.
|
|
112
111
|
$form-check-padding-start: 2rem !default;
|
|
112
|
+
// Linha do GOV.BR DS: altura da caixa (24px) e 8px entre linhas
|
|
113
|
+
// (spacing-scale-base). Os padrões do Bootstrap (21px e .125rem) são menores
|
|
114
|
+
// que a caixa, e as caixas de linhas seguidas quase se tocavam.
|
|
115
|
+
$form-check-min-height: 24px !default;
|
|
116
|
+
$form-check-margin-bottom: 0.5rem !default;
|
|
113
117
|
$form-check-input-border-radius: $govbr-radius-sm !default; // 4px (só a caixa do checkbox)
|
|
114
118
|
$form-check-label-cursor: pointer !default;
|
|
115
119
|
|
package/src/scss/_tokens.scss
CHANGED
|
@@ -59,6 +59,19 @@ $govbr-font-weight-semibold: 600 !default;
|
|
|
59
59
|
// vendor/govbr-ds-core/.../configs/colors/_gray.scss
|
|
60
60
|
$govbr-gray-40: #888 !default;
|
|
61
61
|
|
|
62
|
+
// --- Foco (issue #30) ---
|
|
63
|
+
// --focus: var(--focus-color) = var(--focus-color-light) = var(--gold-vivid-40)
|
|
64
|
+
// vendor/govbr-ds-core/src/partial/scss/_tokens.scss (bloco :root)
|
|
65
|
+
// vendor/govbr-ds-core/.../configs/colors/_gold-vivid.scss
|
|
66
|
+
$govbr-focus: #c2850c !default;
|
|
67
|
+
// --focus-width: var(--surface-width-lg) (contorno do botão)
|
|
68
|
+
// vendor/govbr-ds-core/src/partial/scss/configs/_surface.scss ($width-lg)
|
|
69
|
+
$govbr-focus-width: 4px !default;
|
|
70
|
+
// focus-soft (campos): box-shadow 0 0 0 var(--surface-width-md) ($width-md)
|
|
71
|
+
$govbr-focus-ring-width: 2px !default;
|
|
72
|
+
// --focus-offset: var(--spacing-scale-half) = $spacer * 0.5
|
|
73
|
+
$govbr-focus-offset: 4px !default;
|
|
74
|
+
|
|
62
75
|
// --- Superfície (raio de borda) ---
|
|
63
76
|
// vendor/govbr-ds-core/src/partial/scss/configs/_surface.scss ($rounder-sm)
|
|
64
77
|
$govbr-radius-sm: 4px !default;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Ícone de severidade do alerta (GOV.BR DS: elemento .icon dentro de .message,
|
|
2
|
+
// com Font Awesome: check-circle, times-circle, info-circle e
|
|
3
|
+
// exclamation-triangle). O GOV.BR DS não redistribui nem dependemos do Font
|
|
4
|
+
// Awesome (DP-05), então aqui são formas SVG PRÓPRIAS (autoria deste
|
|
5
|
+
// projeto), aplicadas por ::before com mask-image: sem markup novo (RF-03), e
|
|
6
|
+
// a cor vem de CSS (um data-URI não enxerga custom properties; a máscara sim).
|
|
7
|
+
//
|
|
8
|
+
// O ícone é decorativo: a severidade continua no texto e no role="alert".
|
|
9
|
+
// Só nas quatro severidades do GOV.BR DS; alert-primary/secondary/light/dark
|
|
10
|
+
// são extensões (DP-06) e ficam sem ícone.
|
|
11
|
+
|
|
12
|
+
$govbr-alert-icons: (
|
|
13
|
+
// círculo com check
|
|
14
|
+
"success": escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zM11.35 5.35L7 9.7 4.65 7.35l-1 1L7 11.7l5.35-5.35-1-1z'/></svg>")),
|
|
15
|
+
// círculo com X
|
|
16
|
+
"danger": escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zM5.2 4.2L8 7l2.8-2.8 1 1L9 8l2.8 2.8-1 1L8 9l-2.8 2.8-1-1L7 8 4.2 5.2z'/></svg>")),
|
|
17
|
+
// círculo com "i"
|
|
18
|
+
"info": escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zM7.1 3.6h1.8v1.8H7.1zM7.1 6.8h1.8v5.6H7.1z'/></svg>")),
|
|
19
|
+
// triângulo com "!"
|
|
20
|
+
"warning": escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M8 .8l7.7 14H.3zM7.1 5.8h1.8v4.9H7.1zM7.1 11.6h1.8v1.8H7.1z'/></svg>"))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
// success/danger/info usam a cor da severidade; o aviso usa o texto escuro
|
|
24
|
+
// (no GOV.BR DS o ícone do aviso herda --color, não o amarelo).
|
|
25
|
+
$govbr-alert-icon-colors: (
|
|
26
|
+
"success": var(--bs-success),
|
|
27
|
+
"danger": var(--bs-danger),
|
|
28
|
+
"info": var(--bs-info),
|
|
29
|
+
"warning": var(--bs-body-color)
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
@each $nome, $icone in $govbr-alert-icons {
|
|
33
|
+
.alert-#{$nome} {
|
|
34
|
+
// abre espaço à esquerda: ícone (1.25rem) + respiro (.75rem)
|
|
35
|
+
padding-left: calc(var(--bs-alert-padding-x) + 1.25rem + 0.75rem);
|
|
36
|
+
|
|
37
|
+
&::before {
|
|
38
|
+
content: "";
|
|
39
|
+
position: absolute;
|
|
40
|
+
// centraliza o ícone (20px) na primeira linha do texto (21px)
|
|
41
|
+
top: calc(var(--bs-alert-padding-y) + 0.03125rem);
|
|
42
|
+
left: var(--bs-alert-padding-x);
|
|
43
|
+
width: 1.25rem;
|
|
44
|
+
height: 1.25rem;
|
|
45
|
+
background-color: map-get($govbr-alert-icon-colors, $nome);
|
|
46
|
+
-webkit-mask: $icone center / contain no-repeat;
|
|
47
|
+
mask: $icone center / contain no-repeat;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -6,3 +6,43 @@
|
|
|
6
6
|
.btn-outline-warning {
|
|
7
7
|
--bs-btn-color: #{$govbr-warning-text};
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
// Forma do botão do GOV.BR DS (vendor/govbr-ds-core/.../button/_mixins.scss):
|
|
11
|
+
// sem borda nas variantes preenchidas e altura FIXA por tamanho (32/40/48px),
|
|
12
|
+
// conteúdo centralizado. Usamos min-height (não height) para um rótulo que
|
|
13
|
+
// quebre linha fazer o botão crescer em vez de transbordar. O padding vertical
|
|
14
|
+
// de _bootstrap-settings.scss deixa de definir a altura; só dá respiro se quebrar.
|
|
15
|
+
.btn {
|
|
16
|
+
--bs-btn-border-width: 0;
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
min-height: $govbr-button-height-medium;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.btn-sm,
|
|
24
|
+
.btn-group-sm > .btn {
|
|
25
|
+
min-height: $govbr-button-height-small;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.btn-lg,
|
|
29
|
+
.btn-group-lg > .btn {
|
|
30
|
+
min-height: $govbr-button-height-large;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// No GOV.BR DS só a ênfase "secondary" tem borda (1px). Aqui: as variantes
|
|
34
|
+
// outline do Bootstrap (extensão, exceto outline-primary — ver DP-06).
|
|
35
|
+
[class*="btn-outline-"] {
|
|
36
|
+
--bs-btn-border-width: 1px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Foco por teclado do GOV.BR DS (mixin focus em partial/scss/mixins/_focus.scss):
|
|
40
|
+
// contorno tracejado dourado, afastado do botão, no lugar do anel azul
|
|
41
|
+
// translúcido (box-shadow) do Bootstrap. Contraste do dourado sobre branco
|
|
42
|
+
// ~3,2:1 (WCAG 1.4.11 pede 3:1 para componentes de interface).
|
|
43
|
+
.btn:focus-visible,
|
|
44
|
+
.btn-check:focus-visible + .btn {
|
|
45
|
+
outline: $govbr-focus-width dashed $govbr-focus;
|
|
46
|
+
outline-offset: $govbr-focus-offset;
|
|
47
|
+
box-shadow: none;
|
|
48
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Foco dos campos de texto (mixin focus-soft do GOV.BR DS): borda dourada mais
|
|
2
|
+
// um anel de 2px, no lugar do anel azul translúcido do Bootstrap.
|
|
3
|
+
// !important como no GOV.BR DS: o foco vence a cor de borda e o anel dos
|
|
4
|
+
// estados de validação (.is-valid/.is-invalid), que têm especificidade maior.
|
|
5
|
+
.form-control:focus,
|
|
6
|
+
.form-select:focus {
|
|
7
|
+
border-color: $govbr-focus !important;
|
|
8
|
+
box-shadow: 0 0 0 $govbr-focus-ring-width $govbr-focus !important;
|
|
9
|
+
outline: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Estados de validação: o GOV.BR DS engrossa a borda do campo para 2px na cor
|
|
13
|
+
// do estado (input-states: border-width: 2px). Engrossar a borda aqui mudaria
|
|
14
|
+
// a altura (e exigiria compensar o padding em cada tamanho), então os 2px
|
|
15
|
+
// visuais saem de 1px de borda (a cor do estado já vem do Bootstrap) + 1px de
|
|
16
|
+
// sombra interna na mesma cor: mesmo desenho, layout intocado. Em :focus a
|
|
17
|
+
// regra acima (dourada, !important) prevalece, como no GOV.BR DS.
|
|
18
|
+
.form-control.is-valid,
|
|
19
|
+
.form-select.is-valid,
|
|
20
|
+
.was-validated .form-control:valid,
|
|
21
|
+
.was-validated .form-select:valid {
|
|
22
|
+
box-shadow: inset 0 0 0 1px var(--bs-form-valid-border-color);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.form-control.is-invalid,
|
|
26
|
+
.form-select.is-invalid,
|
|
27
|
+
.was-validated .form-control:invalid,
|
|
28
|
+
.was-validated .form-select:invalid {
|
|
29
|
+
box-shadow: inset 0 0 0 1px var(--bs-form-invalid-border-color);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Centraliza a caixa na primeira linha do rótulo. O Bootstrap faz
|
|
33
|
+
// ($line-height-base - $form-check-input-width) * .5, que só funciona com a
|
|
34
|
+
// largura em em (1.5 - 1em); com a caixa de 24px vira 1.5 - 24px = -11.25px e
|
|
35
|
+
// a caixa sobe ~10px. Aqui: (altura da linha - 24px) / 2 = -1.5px.
|
|
36
|
+
.form-check-input {
|
|
37
|
+
margin-top: calc((var(--bs-body-line-height) * 1em - #{$form-check-input-width}) / 2);
|
|
38
|
+
}
|
package/src/scss/index.scss
CHANGED