@abrasileirado/dsgovbr-bootstraped 0.7.0 → 0.9.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abrasileirado/dsgovbr-bootstraped",
3
- "version": "0.7.0",
3
+ "version": "0.9.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",
@@ -308,3 +308,72 @@ $carousel-indicator-width: 8px !default;
308
308
  $carousel-indicator-height: 8px !default;
309
309
  $carousel-indicator-spacer: 4px !default;
310
310
  $carousel-indicator-opacity: 0.45 !default;
311
+
312
+ // --- Issue #45: header, menu e footer ---
313
+
314
+ // Modo escuro (data-bs-theme="dark") no fundo escuro do GOV.BR DS
315
+ // (--background-dark, --color-dark, --interactive-dark). É a superfície do
316
+ // Footer e do Header escuro; use .bg-body nesses blocos.
317
+ $body-bg-dark: $govbr-background-dark !default;
318
+ $body-color-dark: $govbr-color-dark !default;
319
+ $link-color-dark: $govbr-interactive-dark !default;
320
+ $link-hover-color-dark: $govbr-interactive-dark !default;
321
+
322
+ // Navbar como o Header do GOV.BR DS: 16px de respiro vertical, título de
323
+ // 14px (20,16px a partir de sm) na cor do texto, links na cor interativa e acionador do menu
324
+ // circular de 40px com o ícone na cor interativa.
325
+ $navbar-padding-y: 16px !default;
326
+ $navbar-brand-font-size: $govbr-font-size-base !default; // celular; sm e lg em components/_navbar.scss
327
+ $navbar-brand-padding-y: 4px !default; // o cálculo do Bootstrap mistura rem e px
328
+ $navbar-nav-link-padding-x: 16px !default;
329
+ $navbar-toggler-padding-y: 8px !default;
330
+ $navbar-toggler-padding-x: 8px !default;
331
+ $navbar-toggler-font-size: 16px !default;
332
+ $navbar-toggler-border-radius: 50% !default;
333
+ $navbar-light-color: $govbr-interactive !default;
334
+ $navbar-light-hover-color: $govbr-interactive !default;
335
+ $navbar-light-active-color: $govbr-active !default;
336
+ $navbar-light-disabled-color: $govbr-gray-40 !default;
337
+ $navbar-light-icon-color: $govbr-interactive !default;
338
+ $navbar-light-toggler-border-color: transparent !default;
339
+ $navbar-light-brand-color: $govbr-gray-80 !default;
340
+ $navbar-light-brand-hover-color: $govbr-gray-80 !default;
341
+ $navbar-dark-color: $govbr-interactive-dark !default;
342
+ $navbar-dark-hover-color: $govbr-interactive-dark !default;
343
+ $navbar-dark-active-color: $govbr-color-dark !default;
344
+ $navbar-dark-icon-color: $govbr-interactive-dark !default;
345
+ $navbar-dark-toggler-border-color: transparent !default;
346
+ $navbar-dark-brand-color: $govbr-color-dark !default;
347
+ $navbar-dark-brand-hover-color: $govbr-color-dark !default;
348
+
349
+ // Divider (GOV.BR DS: Divider) — <hr> opaco em --border-color.
350
+ $hr-color: $govbr-gray-20 !default;
351
+ $hr-opacity: 1 !default;
352
+
353
+ // --- Issue #46: switch e select ---
354
+
355
+ // Switch (GOV.BR DS: Switch, tamanho médio): trilho de 52x30px branco com
356
+ // borda --border-color e botão de 22px a 4px da borda, cinza (--off) quando
357
+ // desligado e azul (--on) quando ligado. O trilho não muda de cor ao ligar.
358
+ // Altura, posição do botão e hover ficam em components/_form.scss.
359
+ $form-switch-width: $govbr-switch-width !default;
360
+ $form-switch-padding-start: $govbr-switch-width + 8px !default; // spacing-scale-base
361
+ $form-switch-border-radius: 100em !default;
362
+ $form-switch-transition: background-position 0.3s ease-in-out !default;
363
+ $form-switch-color: $govbr-gray-20 !default;
364
+ $form-switch-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-11 -11 22 22'><circle r='11' fill='#{$form-switch-color}'/></svg>") !default;
365
+ $form-switch-focus-color: $govbr-gray-20 !default;
366
+ $form-switch-focus-bg-image: $form-switch-bg-image !default;
367
+ $form-switch-checked-color: $govbr-switch-on !default;
368
+ $form-switch-checked-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-11 -11 22 22'><circle r='11' fill='#{$form-switch-checked-color}'/></svg>") !default;
369
+ $form-switch-checked-bg-position: right 3px center !default; // 4px da borda externa
370
+ $form-switch-color-dark: $govbr-gray-20 !default;
371
+ $form-switch-bg-image-dark: $form-switch-bg-image !default;
372
+
373
+ // Select (GOV.BR DS: Select = Input + botão circular pequeno com seta na cor
374
+ // interativa, 4px da borda, e 40px de respiro à direita): mesma superfície
375
+ // dos campos de texto, seta na cor interativa centrada nos 32px do botão.
376
+ $form-select-indicator-color: $govbr-interactive !default;
377
+ $form-select-indicator-color-dark: $govbr-interactive-dark !default;
378
+ $form-select-indicator-padding: 2.5rem !default; // 40px = --input-padding-button (spacing-scale-5x); rem porque o Bootstrap soma com $form-select-padding-x
379
+ $form-select-bg-position: right 12px center !default; // 4px + (32px - 16px) / 2
@@ -133,3 +133,17 @@ $govbr-loading-md: 44px !default; // --loading-indetermined-diameter-md (borda 4
133
133
 
134
134
  // Modal: vendor/govbr-ds-core/src/components/modal/_mixins.scss (--modal-medium)
135
135
  $govbr-modal-width: 500px !default;
136
+ $govbr-font-size-up-03: 24.192px !default;
137
+ $govbr-background-dark: #071d41 !default; // --background-dark (blue-warm-vivid-90)
138
+ $govbr-color-dark: #fff !default; // --color-dark (pure-0)
139
+ $govbr-interactive-dark: #c5d4eb !default; // --interactive-dark (blue-warm-20)
140
+ $govbr-focus-dark: #ffbe2e !default; // --focus-color-dark (gold-vivid-20)
141
+ $govbr-gray-2: #f8f8f8 !default; // --menu-background-submenu, fundo do sign-in e da busca
142
+
143
+ // Switch: vendor/govbr-ds-core/src/components/switch/_mixins.scss (switch-tokens,
144
+ // tamanho médio) e --on (blue-warm-vivid-40) em partial/scss/_tokens.scss.
145
+ // O desligado usa --off = gray-20 ($govbr-gray-20).
146
+ $govbr-switch-on: #5992ed !default; // --on (blue-warm-vivid-40)
147
+ $govbr-switch-width: 52px !default; // --switch-width-medium
148
+ $govbr-switch-height: 30px !default; // --switch-height-medium
149
+ $govbr-switch-toggle: 22px !default; // --switch-toggle-medium
@@ -46,3 +46,25 @@
46
46
  outline-offset: $govbr-focus-offset;
47
47
  box-shadow: none;
48
48
  }
49
+
50
+ // Button circular do GOV.BR DS (classe circle): .btn + .rounded-circle. Largura
51
+ // igual à altura (32/40/48px), sem padding, ícone de 16,8px. Com .btn-link é a
52
+ // ênfase baixa (sem fundo), usada nos ícones do Header, do Menu e do Footer.
53
+ .btn.rounded-circle {
54
+ width: $govbr-button-height-medium;
55
+ padding: 0;
56
+ font-size: $govbr-font-size-up-01;
57
+ text-decoration: none;
58
+ }
59
+
60
+ .btn-sm.rounded-circle {
61
+ width: $govbr-button-height-small;
62
+ }
63
+
64
+ .btn-lg.rounded-circle {
65
+ width: $govbr-button-height-large;
66
+ }
67
+
68
+ .btn-link.rounded-circle:hover {
69
+ @include govbr-hover;
70
+ }
@@ -0,0 +1,31 @@
1
+ // Bloco em modo escuro herda a cor do texto do body (clara); o Bootstrap só
2
+ // troca as variáveis. Aqui o texto do bloco passa a --color-dark.
3
+ [data-bs-theme="dark"] {
4
+ color: var(--#{$prefix}body-color);
5
+ }
6
+
7
+ // Modo escuro do GOV.BR DS (mixin dark-mode em partial/scss/mixins/_states.scss):
8
+ // o foco passa a --focus-color-dark (gold-vivid-20), que contrasta com o fundo
9
+ // escuro. Declarado por último e com um atributo a mais que as regras de foco,
10
+ // então vence sem !important.
11
+ [data-bs-theme="dark"] :focus-visible,
12
+ [data-bs-theme="dark"]:focus-visible {
13
+ outline-color: $govbr-focus-dark;
14
+ }
15
+
16
+ // Hover dos links de navegação no fundo escuro: camada clara em vez da azul.
17
+ [data-bs-theme="dark"] .nav-link:hover:not(.active):not(.disabled),
18
+ [data-bs-theme="dark"] .list-group-item-action:hover:not(.active) {
19
+ @include govbr-hover($govbr-interactive-dark);
20
+ }
21
+
22
+ // .btn-link (ênfase baixa) no fundo escuro: --interactive-dark.
23
+ [data-bs-theme="dark"] .btn-link {
24
+ --#{$prefix}btn-color: #{$govbr-interactive-dark};
25
+ --#{$prefix}btn-hover-color: #{$govbr-interactive-dark};
26
+ --#{$prefix}btn-active-color: #{$govbr-color-dark};
27
+ }
28
+
29
+ [data-bs-theme="dark"] .btn-link.rounded-circle:hover {
30
+ @include govbr-hover($govbr-interactive-dark);
31
+ }
@@ -0,0 +1,6 @@
1
+ // Divider do GOV.BR DS (vendor/govbr-ds-core/src/components/divider): 1px
2
+ // opaco em --border-color. <hr> recebe pelas variáveis $hr-color/$hr-opacity;
3
+ // o .vr (divisor vertical do Header) usa a cor de fundo.
4
+ .vr {
5
+ background-color: $govbr-gray-20;
6
+ }
@@ -0,0 +1,28 @@
1
+ // Footer do GOV.BR DS (vendor/govbr-ds-core/src/components/footer):
2
+ // <footer data-bs-theme="dark" class="bg-body"> — fundo --background-dark (do
3
+ // modo escuro), divisor no topo, 48px de respiro, títulos de categoria em
4
+ // 11,66px negrito e caixa alta e itens de 56px (Item do GOV.BR DS: 8px de
5
+ // respiro + 40px) com links em --interactive-dark.
6
+ footer[data-bs-theme="dark"] {
7
+ padding-top: 48px;
8
+ border-top: 1px solid $govbr-gray-20;
9
+
10
+ h2 {
11
+ display: flex;
12
+ align-items: center;
13
+ min-height: 56px;
14
+ margin: 0;
15
+ padding: 8px 16px;
16
+ font-size: $govbr-font-size-down-01;
17
+ font-weight: $govbr-font-weight-bold;
18
+ color: $govbr-interactive-dark;
19
+ text-transform: uppercase;
20
+ }
21
+
22
+ .nav-link {
23
+ display: flex;
24
+ align-items: center;
25
+ min-height: 56px;
26
+ padding: 8px 16px;
27
+ }
28
+ }
@@ -36,3 +36,54 @@
36
36
  .form-check-input {
37
37
  margin-top: calc((var(--bs-body-line-height) * 1em - #{$form-check-input-width}) / 2);
38
38
  }
39
+
40
+ // Switch (GOV.BR DS: Switch): trilho de 30px de altura, botão de 22px
41
+ // (imagem de fundo) a 4px da borda e trilho branco também quando ligado.
42
+ // background-origin é a caixa de padding, então 3px + 1px de borda = 4px.
43
+ .form-switch {
44
+ min-height: $govbr-switch-height;
45
+
46
+ .form-check-input {
47
+ height: $govbr-switch-height;
48
+ margin-top: calc((var(--bs-body-line-height) * 1em - #{$govbr-switch-height}) / 2);
49
+ background-color: $govbr-background;
50
+ background-position: left 3px center;
51
+ background-size: $govbr-switch-toggle $govbr-switch-toggle;
52
+ border-color: $govbr-gray-20;
53
+
54
+ &:checked {
55
+ background-color: $govbr-background;
56
+ border-color: $govbr-gray-20;
57
+ }
58
+
59
+ // Hover e pressionado: camada na cor do botão (--off/--on) sobre o
60
+ // trilho, abaixo do botão (segunda imagem de fundo).
61
+ &:hover:not(:disabled) {
62
+ background-image: var(--#{$prefix}form-switch-bg), linear-gradient(rgba($govbr-gray-20, $govbr-hover-opacity), rgba($govbr-gray-20, $govbr-hover-opacity));
63
+ background-position: left 3px center, 0 0;
64
+ background-size: $govbr-switch-toggle $govbr-switch-toggle, 100% 100%;
65
+ }
66
+
67
+ &:checked:hover:not(:disabled) {
68
+ background-image: var(--#{$prefix}form-switch-bg), linear-gradient(rgba($govbr-switch-on, $govbr-hover-opacity), rgba($govbr-switch-on, $govbr-hover-opacity));
69
+ background-position: $form-switch-checked-bg-position, 0 0;
70
+ }
71
+
72
+ // Foco do GOV.BR DS (focus-soft), como nos campos de texto.
73
+ &:focus-visible {
74
+ border-color: $govbr-focus;
75
+ box-shadow: 0 0 0 $govbr-focus-ring-width $govbr-focus;
76
+ }
77
+
78
+ &:focus:not(:focus-visible) {
79
+ box-shadow: none;
80
+ }
81
+ }
82
+ }
83
+
84
+ [data-bs-theme="dark"] .form-switch .form-check-input {
85
+ &,
86
+ &:checked {
87
+ background-color: $govbr-background;
88
+ }
89
+ }
@@ -0,0 +1,67 @@
1
+ // Menu do GOV.BR DS (vendor/govbr-ds-core/src/components/menu) no offcanvas
2
+ // lateral: cabeçalho de 8px com divisor, itens de 16px na cor interativa com
3
+ // ícone de 24px, pastas (acionadas por Collapse) com seta que gira, subnível em
4
+ // fundo cinza-claro recuado 40px e item ativo em --active.
5
+ .offcanvas-start,
6
+ .offcanvas-end {
7
+ .offcanvas-header {
8
+ padding: 8px 8px 8px 16px;
9
+ border-bottom: 1px solid $govbr-gray-20;
10
+ }
11
+
12
+ .list-group-item {
13
+ display: flex;
14
+ align-items: center;
15
+ padding: 16px;
16
+ color: $govbr-interactive;
17
+ text-align: left;
18
+ border-color: $govbr-gray-20;
19
+
20
+ > i {
21
+ flex: 0 0 24px;
22
+ margin-right: 16px;
23
+ text-align: center;
24
+ }
25
+
26
+ &.active {
27
+ color: $govbr-color-dark;
28
+ background-color: $govbr-active;
29
+ border-color: $govbr-gray-20;
30
+ }
31
+ }
32
+
33
+ // Pasta: seta para baixo à direita; gira quando aberta.
34
+ .list-group-item[data-bs-toggle="collapse"]::after {
35
+ flex: 0 0 16px;
36
+ height: 16px;
37
+ margin-left: auto;
38
+ content: "";
39
+ background-color: currentcolor;
40
+ mask: escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>")) center / 16px no-repeat;
41
+ transition: transform 0.2s ease-in-out;
42
+
43
+ @media (prefers-reduced-motion: reduce) {
44
+ transition: none;
45
+ }
46
+ }
47
+
48
+ .list-group-item[data-bs-toggle="collapse"][aria-expanded="true"]::after {
49
+ transform: rotate(-180deg);
50
+ }
51
+
52
+ // Subnível (--menu-background-submenu): sem divisores entre os itens.
53
+ .collapse > .list-group,
54
+ .collapsing > .list-group {
55
+ background-color: $govbr-gray-2;
56
+
57
+ > .list-group-item {
58
+ padding-left: 40px;
59
+ background-color: transparent;
60
+ border-width: 0;
61
+
62
+ &.active {
63
+ background-color: $govbr-active;
64
+ }
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,125 @@
1
+ // Navbar como o Header do GOV.BR DS (vendor/govbr-ds-core/src/components/header).
2
+ // A estrutura, os breakpoints e os plugins continuam os do Bootstrap; o Header
3
+ // completo é uma composição (ver docs/exemplos/admin.html):
4
+ // linha de cima: logo, .vr e assinatura (.navbar-text); à direita, botões
5
+ // circulares (.btn.btn-link.rounded-circle) com dropdown e o "Entrar"
6
+ // (.btn.btn-light.btn-sm);
7
+ // linha de baixo: acionador do menu, título (.navbar-brand) com subtítulo
8
+ // (.navbar-text logo depois) e a busca (form[role="search"]).
9
+ .navbar {
10
+ box-shadow: $govbr-shadow-sm;
11
+ }
12
+
13
+ // Título (--header-title-size): 14px no celular, 20,16px a partir de sm e
14
+ // 24,19px a partir do lg do GOV.BR DS (1280px; aqui o xl do Bootstrap, 1200px).
15
+ .navbar-brand {
16
+ font-weight: normal;
17
+ }
18
+
19
+ @include media-breakpoint-up(sm) {
20
+ .navbar-brand {
21
+ font-size: $govbr-font-size-up-02;
22
+ }
23
+ }
24
+
25
+ @include media-breakpoint-up(xl) {
26
+ .navbar-brand {
27
+ font-size: $govbr-font-size-up-03;
28
+ }
29
+ }
30
+
31
+ // Assinatura e subtítulo no texto padrão, não na cor dos links.
32
+ .navbar-text {
33
+ color: var(--#{$prefix}body-color);
34
+ }
35
+
36
+ // Subtítulo (--header-subtitle-size): logo abaixo do título, em peso médio;
37
+ // oculto no celular, 11,66px a partir de sm e 14px a partir do xl.
38
+ .navbar-brand + .navbar-text {
39
+ display: none;
40
+ padding: 4px 0 0;
41
+ font-size: $govbr-font-size-down-01;
42
+ font-weight: $govbr-font-weight-medium;
43
+ }
44
+
45
+ @include media-breakpoint-up(sm) {
46
+ .navbar-brand + .navbar-text {
47
+ display: block;
48
+ }
49
+ }
50
+
51
+ @include media-breakpoint-up(xl) {
52
+ .navbar-brand + .navbar-text {
53
+ font-size: $govbr-font-size-base;
54
+ }
55
+ }
56
+
57
+ .navbar-toggler {
58
+ border: 0;
59
+ }
60
+
61
+ .navbar-nav .nav-link {
62
+ border-radius: $govbr-button-radius;
63
+
64
+ &.active {
65
+ font-weight: $govbr-font-weight-semibold;
66
+ }
67
+ }
68
+
69
+ .navbar-nav .nav-link:hover:not(.disabled),
70
+ .navbar-toggler:hover {
71
+ @include govbr-hover;
72
+ }
73
+
74
+ [data-bs-theme="dark"] .navbar-nav .nav-link:hover:not(.disabled),
75
+ [data-bs-theme="dark"] .navbar-toggler:hover,
76
+ [data-bs-theme="dark"].navbar .navbar-toggler:hover {
77
+ @include govbr-hover($govbr-interactive-dark);
78
+ }
79
+
80
+ // "Entrar" (Sign-in do GOV.BR DS): pílula de fundo cinza-claro com texto e
81
+ // ícone na cor interativa, 16,8px.
82
+ .navbar .btn-light {
83
+ --#{$prefix}btn-bg: #{$govbr-gray-2};
84
+ --#{$prefix}btn-color: #{$govbr-interactive};
85
+ --#{$prefix}btn-hover-bg: #{$govbr-gray-2};
86
+ --#{$prefix}btn-hover-color: #{$govbr-interactive};
87
+ --#{$prefix}btn-active-bg: #{$govbr-gray-2};
88
+ --#{$prefix}btn-active-color: #{$govbr-active};
89
+ gap: 8px;
90
+ padding-top: 0;
91
+ padding-bottom: 0;
92
+ font-size: $govbr-font-size-up-01;
93
+
94
+ &:hover {
95
+ @include govbr-hover;
96
+ }
97
+ }
98
+
99
+ // Busca do Header: campo de 40px com fundo cinza-claro, sem borda visível e
100
+ // espaço à direita para o botão circular de pesquisa.
101
+ .navbar [role="search"] {
102
+ position: relative;
103
+
104
+ .form-control {
105
+ height: $govbr-button-height-medium;
106
+ padding-top: 0;
107
+ padding-bottom: 0;
108
+ padding-right: $govbr-button-height-medium;
109
+ font-size: $govbr-font-size-up-01;
110
+ font-weight: $govbr-font-weight-medium;
111
+ background-color: $govbr-gray-2;
112
+ border-color: transparent;
113
+
114
+ &::placeholder {
115
+ font-style: italic;
116
+ }
117
+ }
118
+
119
+ .btn.rounded-circle {
120
+ position: absolute;
121
+ top: 50%;
122
+ right: 4px;
123
+ transform: translateY(-50%);
124
+ }
125
+ }
@@ -36,3 +36,8 @@
36
36
  @import "components/toast";
37
37
  @import "components/modal";
38
38
  @import "components/carousel";
39
+ @import "components/divider";
40
+ @import "components/navbar";
41
+ @import "components/menu";
42
+ @import "components/footer";
43
+ @import "components/dark";