fokus-styles 2.4.0 → 2.6.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/css/components.css +561 -83
- package/dist/css/components.min.css +1 -1
- package/dist/css/fokus-components.css +561 -83
- package/dist/css/fokus-components.min.css +1 -1
- package/dist/css/fokus-rtl.css +697 -83
- package/dist/css/fokus-rtl.min.css +1 -1
- package/dist/css/fokus-utilities.css +136 -0
- package/dist/css/fokus-utilities.min.css +1 -1
- package/dist/css/fokus.css +996 -258
- package/dist/css/fokus.min.css +1 -1
- package/dist/css/forms.css +300 -176
- package/dist/css/forms.min.css +1 -1
- package/dist/css/helpers.css +136 -0
- package/dist/css/helpers.min.css +1 -1
- package/dist/js/fokus.js +270 -25
- package/dist/js/fokus.min.js +18 -18
- package/package.json +17 -15
- package/packages/fokus-components/scss/components/_alerts.scss +128 -6
- package/packages/fokus-components/scss/components/_badges.scss +26 -10
- package/packages/fokus-components/scss/components/_index.scss +1 -0
- package/packages/fokus-components/scss/components/_popover.scss +131 -21
- package/packages/fokus-components/scss/components/_responsive.scss +23 -0
- package/packages/fokus-components/scss/components/_tag.scss +37 -14
- package/packages/fokus-components/scss/components/_toasts.scss +156 -11
- package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
- package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
- package/packages/fokus-components/scss/forms/_forms.scss +16 -0
- package/packages/fokus-js/js/carousel.d.ts +4 -0
- package/packages/fokus-js/js/carousel.js +8 -0
- package/packages/fokus-js/js/core/positioning.js +18 -9
- package/packages/fokus-js/js/dropdown.d.ts +4 -0
- package/packages/fokus-js/js/dropdown.js +7 -0
- package/packages/fokus-js/js/popover.js +26 -1
- package/packages/fokus-js/js/tabs.d.ts +3 -0
- package/packages/fokus-js/js/tabs.js +5 -0
- package/packages/fokus-js/js/tag.js +17 -0
- package/packages/fokus-js/js/toast.js +77 -3
- package/packages/fokus-js/js/tooltip.d.ts +8 -1
- package/packages/fokus-js/js/tooltip.js +106 -13
- package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
- package/CHANGELOG.md +0 -910
- package/dist/css/components.css.map +0 -1
- package/dist/css/components.min.css.map +0 -1
- package/dist/css/fokus-components.css.map +0 -1
- package/dist/css/fokus-components.min.css.map +0 -1
- package/dist/css/fokus-core.css.map +0 -1
- package/dist/css/fokus-core.min.css.map +0 -1
- package/dist/css/fokus-dark.css.map +0 -1
- package/dist/css/fokus-dark.min.css.map +0 -1
- package/dist/css/fokus-rtl.css.map +0 -1
- package/dist/css/fokus-rtl.min.css.map +0 -1
- package/dist/css/fokus-utilities.css.map +0 -1
- package/dist/css/fokus-utilities.min.css.map +0 -1
- package/dist/css/fokus.css.map +0 -1
- package/dist/css/fokus.min.css.map +0 -1
- package/dist/css/fonts.css.map +0 -1
- package/dist/css/fonts.min.css.map +0 -1
- package/dist/css/forms.css.map +0 -1
- package/dist/css/forms.min.css.map +0 -1
- package/dist/css/helpers.css.map +0 -1
- package/dist/css/helpers.min.css.map +0 -1
- package/dist/css/layout.css.map +0 -1
- package/dist/css/layout.min.css.map +0 -1
- package/dist/js/fokus.js.map +0 -7
- package/dist/js/fokus.min.js.map +0 -7
- package/docs/README.md +0 -86
- package/docs/comparison.md +0 -124
- package/docs/components/accordion.md +0 -104
- package/docs/components/alert-dialog.md +0 -99
- package/docs/components/alert.md +0 -59
- package/docs/components/avatar.md +0 -13
- package/docs/components/badge.md +0 -82
- package/docs/components/breadcrumb.md +0 -93
- package/docs/components/button-group.md +0 -13
- package/docs/components/button.md +0 -98
- package/docs/components/card.md +0 -111
- package/docs/components/carousel.md +0 -167
- package/docs/components/checkbox.md +0 -97
- package/docs/components/close-button.md +0 -13
- package/docs/components/code.md +0 -13
- package/docs/components/collapse.md +0 -78
- package/docs/components/combobox.md +0 -123
- package/docs/components/command-palette.md +0 -131
- package/docs/components/datatable.md +0 -173
- package/docs/components/datepicker.md +0 -137
- package/docs/components/divider.md +0 -57
- package/docs/components/dropdown.md +0 -103
- package/docs/components/empty-state.md +0 -65
- package/docs/components/file-upload-advanced.md +0 -116
- package/docs/components/file-upload.md +0 -93
- package/docs/components/icon-link.md +0 -13
- package/docs/components/input-group.md +0 -73
- package/docs/components/input.md +0 -90
- package/docs/components/list-group.md +0 -13
- package/docs/components/modal.md +0 -120
- package/docs/components/navbar.md +0 -74
- package/docs/components/nested-menu.md +0 -90
- package/docs/components/notification-center.md +0 -116
- package/docs/components/offcanvas.md +0 -102
- package/docs/components/pagination.md +0 -145
- package/docs/components/placeholder.md +0 -13
- package/docs/components/popover.md +0 -105
- package/docs/components/progress.md +0 -126
- package/docs/components/radio.md +0 -70
- package/docs/components/range.md +0 -83
- package/docs/components/rating.md +0 -91
- package/docs/components/ratio.md +0 -13
- package/docs/components/scrollspy.md +0 -13
- package/docs/components/segmented-control.md +0 -82
- package/docs/components/select.md +0 -89
- package/docs/components/skeleton.md +0 -70
- package/docs/components/stepper.md +0 -107
- package/docs/components/switch.md +0 -75
- package/docs/components/table.md +0 -90
- package/docs/components/tabs.md +0 -104
- package/docs/components/tag.md +0 -129
- package/docs/components/tile.md +0 -112
- package/docs/components/timeline.md +0 -78
- package/docs/components/toast.md +0 -95
- package/docs/components/tooltip.md +0 -77
- package/docs/components/tree-view.md +0 -118
- package/docs/contributing/contributing.md +0 -18
- package/docs/getting-started/installation.md +0 -70
- package/docs/getting-started/usage.md +0 -105
- package/docs/guides/accessibility.md +0 -102
- package/docs/guides/charts.md +0 -73
- package/docs/guides/dark-mode.md +0 -90
- package/docs/guides/icons.md +0 -99
- package/docs/guides/javascript-api.md +0 -9
- package/docs/guides/layout-advanced.md +0 -118
- package/docs/guides/migration-clarus-to-fokus.md +0 -48
- package/docs/guides/migration-external.md +0 -123
- package/docs/guides/migration-v1.md +0 -63
- package/docs/guides/print.md +0 -30
- package/docs/guides/rtl-and-system-preferences.md +0 -28
- package/docs/guides/theming.md +0 -140
- package/docs/guides/utility-api.md +0 -9
- package/docs/prompts/prompt-plan.md +0 -45
- package/docs/reference/accessibility-matrix.md +0 -77
- package/docs/reference/browser-support.md +0 -75
- package/docs/reference/contrast-report.md +0 -50
- package/docs/reference/definitions.md +0 -864
- package/docs/reference/design-tokens.md +0 -194
- package/docs/reference/scss-architecture.md +0 -227
- package/docs/reference/size-baseline.json +0 -34
- package/docs/reference/stability.md +0 -89
- package/docs/showcase.md +0 -25
- package/mockup/README.md +0 -41
- package/mockup/assets/carousel-planning.png +0 -0
- package/mockup/assets/carousel-workspace.png +0 -0
- package/mockup/assets/example-theme.css +0 -8
- package/mockup/assets/example-theme.js +0 -11
- package/mockup/assets/showcase-contracts.js +0 -84
- package/mockup/assets/showcase.css +0 -91
- package/mockup/assets/showcase.js +0 -724
- package/mockup/content-data.html +0 -9
- package/mockup/examples/accordion-tabs-toast.html +0 -149
- package/mockup/examples/alert-dialog.html +0 -84
- package/mockup/examples/alerts.html +0 -41
- package/mockup/examples/badges-alerts.html +0 -77
- package/mockup/examples/buttons.html +0 -58
- package/mockup/examples/cards.html +0 -132
- package/mockup/examples/carousel.html +0 -126
- package/mockup/examples/charts.html +0 -102
- package/mockup/examples/check-radio-switch.html +0 -144
- package/mockup/examples/collapse.html +0 -69
- package/mockup/examples/combobox.html +0 -60
- package/mockup/examples/command-palette.html +0 -64
- package/mockup/examples/datatable.html +0 -113
- package/mockup/examples/datepicker.html +0 -62
- package/mockup/examples/divider.html +0 -45
- package/mockup/examples/dropdown-tooltip.html +0 -77
- package/mockup/examples/empty-state.html +0 -56
- package/mockup/examples/file-drop.html +0 -74
- package/mockup/examples/file-upload-advanced.html +0 -68
- package/mockup/examples/forms-advanced.html +0 -77
- package/mockup/examples/hover-card.html +0 -86
- package/mockup/examples/icons.html +0 -157
- package/mockup/examples/input-group.html +0 -74
- package/mockup/examples/js-foundation.html +0 -215
- package/mockup/examples/layout.html +0 -134
- package/mockup/examples/modal-select.html +0 -127
- package/mockup/examples/nested-menu.html +0 -73
- package/mockup/examples/notification-center.html +0 -86
- package/mockup/examples/offcanvas-popover.html +0 -133
- package/mockup/examples/pagination-breadcrumbs.html +0 -92
- package/mockup/examples/range.html +0 -69
- package/mockup/examples/rating.html +0 -103
- package/mockup/examples/segmented-control.html +0 -96
- package/mockup/examples/skeletons.html +0 -82
- package/mockup/examples/spinner-progress.html +0 -130
- package/mockup/examples/stepper.html +0 -119
- package/mockup/examples/tables-navbar.html +0 -89
- package/mockup/examples/tag.html +0 -105
- package/mockup/examples/theming.html +0 -68
- package/mockup/examples/tile.html +0 -107
- package/mockup/examples/timeline.html +0 -108
- package/mockup/examples/tree-view.html +0 -68
- package/mockup/feedback-actions.html +0 -9
- package/mockup/forms.html +0 -13
- package/mockup/foundations.html +0 -7
- package/mockup/kitchen-sink.html +0 -696
- package/mockup/navigation-disclosure.html +0 -11
- package/mockup/overlays-commands.html +0 -12
- package/mockup/templates/README.md +0 -20
- package/mockup/templates/admin.html +0 -334
- package/mockup/templates/auth.html +0 -234
- package/mockup/templates/dashboard.html +0 -442
- package/mockup/templates/landing.html +0 -397
- package/packages/fokus-icons/package.json +0 -46
- package/scripts/migrate-fokus-map.json +0 -1366
- package/scripts/migrate-fokus.mjs +0 -97
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Button
|
|
2
|
-
|
|
3
|
-
Botão de ação, base visual (cor de contraste automática, tamanhos) para
|
|
4
|
-
badges, alertas, tags e tabelas.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<button type="button" class="fs-btn">Padrão</button>
|
|
10
|
-
<button type="button" class="fs-btn fs-btn-primary">Primary</button>
|
|
11
|
-
<button type="button" class="fs-btn fs-btn-outline-primary">Outline</button>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
Funciona em `<button>`, `<a>` ou qualquer elemento — a classe é puramente
|
|
15
|
-
visual, sem exigir uma tag específica.
|
|
16
|
-
|
|
17
|
-
## Anatomia
|
|
18
|
-
|
|
19
|
-
Um único elemento (`.fs-btn`); nenhuma marcação interna obrigatória. O
|
|
20
|
-
botão de fechar (`.fs-btn-close`, usado por Card/Modal/Toast/Tag) é uma
|
|
21
|
-
variante separada, sem texto, desenhada só com `::before`/`::after`:
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<button type="button" class="fs-btn-close" aria-label="Fechar"></button>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Variações
|
|
28
|
-
|
|
29
|
-
- **Cor sólida**: `.fs-btn-primary`, `-secondary`, `-success`, `-warning`,
|
|
30
|
-
`-danger`, `-info` — fundo colorido, texto com contraste calculado
|
|
31
|
-
automaticamente (`color-contrast()`, garante AA).
|
|
32
|
-
- **Cor outline**: `.fs-btn-outline-{cor}` — borda e texto coloridos, fundo
|
|
33
|
-
transparente; hover/active preenchem com a cor sólida.
|
|
34
|
-
- **Tamanho**: `.fs-btn-sm` (30px), `.fs-btn-lg` (46px); sem sufixo = 38px
|
|
35
|
-
(padrão).
|
|
36
|
-
|
|
37
|
-
```html
|
|
38
|
-
<button type="button" class="fs-btn fs-btn-danger fs-btn-sm">Excluir</button>
|
|
39
|
-
<button type="button" class="fs-btn fs-btn-outline-success fs-btn-lg">Aprovar</button>
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Estados
|
|
43
|
-
|
|
44
|
-
- **Hover/active**: `filter: brightness()` (escurece), sem redeclarar cor.
|
|
45
|
-
- **Foco**: anel via `:focus` (mixin `focus-ring`).
|
|
46
|
-
- **Desabilitado**: atributo `disabled` (em `<button>`) ou classe
|
|
47
|
-
`.is-disabled` (funciona em qualquer elemento, inclusive `<a>`, que não
|
|
48
|
-
aceita `disabled` nativamente).
|
|
49
|
-
|
|
50
|
-
```html
|
|
51
|
-
<button type="button" class="fs-btn fs-btn-primary" disabled>Desabilitado</button>
|
|
52
|
-
<a href="#" class="fs-btn is-disabled">Link desabilitado</a>
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## A11y
|
|
56
|
-
|
|
57
|
-
- `<button>` é a tag recomendada para ações (não navegação); use `<a
|
|
58
|
-
href="...">` só quando o clique navega para outra URL.
|
|
59
|
-
- Botões só-ícone (sem texto visível) precisam de `aria-label` — o
|
|
60
|
-
framework não injeta um automaticamente.
|
|
61
|
-
- Foco visível por padrão; não remova o anel sem substituir por outro
|
|
62
|
-
indicador com contraste equivalente.
|
|
63
|
-
|
|
64
|
-
## API JS
|
|
65
|
-
|
|
66
|
-
Nenhuma — 100% CSS.
|
|
67
|
-
|
|
68
|
-
## Tokens
|
|
69
|
-
|
|
70
|
-
Componente (`--fs-btn-*`, com fallback pro semântico correspondente —
|
|
71
|
-
sobrescrevível por instância sem `!important`):
|
|
72
|
-
|
|
73
|
-
| Token | Fallback |
|
|
74
|
-
|---|---|
|
|
75
|
-
| `--fs-btn-bg` | `--fs-color-bg-subtle` |
|
|
76
|
-
| `--fs-btn-color` | `--fs-color-text-primary` |
|
|
77
|
-
| `--fs-btn-border-color` | `--fs-color-border-default` |
|
|
78
|
-
|
|
79
|
-
As variantes de cor (`.fs-btn-primary` etc.) sobrescrevem esses três tokens
|
|
80
|
-
diretamente, não `background-color`/`color`/`border-color` — ver
|
|
81
|
-
[`docs/reference/scss-architecture.md`](../reference/scss-architecture.md#tokens)
|
|
82
|
-
para o padrão. Raio: `--fs-radius-sm`.
|
|
83
|
-
|
|
84
|
-
## Exemplo
|
|
85
|
-
|
|
86
|
-
```html
|
|
87
|
-
<button type="button" class="fs-btn">Padrão</button>
|
|
88
|
-
<button type="button" class="fs-btn fs-btn-primary">Primary</button>
|
|
89
|
-
<button type="button" class="fs-btn fs-btn-outline-danger fs-btn-sm">Cancelar</button>
|
|
90
|
-
<button type="button" class="fs-btn fs-btn-success fs-btn-lg">Confirmar</button>
|
|
91
|
-
|
|
92
|
-
<style>
|
|
93
|
-
.meu-botao { --fs-btn-bg: #6d28d9; --fs-btn-color: #fff; --fs-btn-border-color: #6d28d9; }
|
|
94
|
-
</style>
|
|
95
|
-
<button type="button" class="fs-btn meu-botao">Cor custom por instância</button>
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#button).
|
package/docs/components/card.md
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# Card
|
|
2
|
-
|
|
3
|
-
Contêiner de conteúdo genérico — a peça que mais combina outros
|
|
4
|
-
componentes (botões, badges, tipografia) dentro de si.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<div class="fs-card">
|
|
10
|
-
<div class="fs-card-header">
|
|
11
|
-
<h3 class="fs-card-title">Título do card</h3>
|
|
12
|
-
<button type="button" class="fs-btn-close" aria-label="Fechar"></button>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="fs-card-body">
|
|
15
|
-
<p class="fs-card-text">Corpo de texto do card.</p>
|
|
16
|
-
<button type="button" class="fs-btn fs-btn-primary">Ação</button>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="fs-card-footer">
|
|
19
|
-
<span class="fs-badge fs-badge-success">Ativo</span>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Anatomia
|
|
25
|
-
|
|
26
|
-
`.fs-card` > até três seções empilhadas, todas opcionais: `.fs-card-header`
|
|
27
|
-
(fundo sutil, borda inferior — quando tem `.fs-card-title` + botão, o
|
|
28
|
-
layout já vem com `justify-content: space-between`), `.fs-card-body`,
|
|
29
|
-
`.fs-card-footer` (fundo sutil, borda superior).
|
|
30
|
-
|
|
31
|
-
Dentro de `.fs-card-body`: `.fs-card-title` (destaque), `.fs-card-subtitle`
|
|
32
|
-
(secundário, cor muted), `.fs-card-text` (parágrafo de corpo — o último de
|
|
33
|
-
um card não tem margem inferior).
|
|
34
|
-
|
|
35
|
-
## Variações
|
|
36
|
-
|
|
37
|
-
- **Horizontal**: `.fs-card-horizontal` — eixo principal de coluna pra
|
|
38
|
-
linha ("imagem à esquerda, texto à direita"); raios de header/footer se
|
|
39
|
-
ajustam pra lateral em vez de topo/base.
|
|
40
|
-
- **Tamanho**: `.fs-card-sm` (5px de padding interno), `.fs-card-lg`
|
|
41
|
-
(15px); sem sufixo = 10px (padrão) — não muda a largura do card, só a
|
|
42
|
-
densidade.
|
|
43
|
-
- **Clicável**: `.fs-card-clickable` + `.fs-stretched-link` — ver abaixo.
|
|
44
|
-
|
|
45
|
-
```html
|
|
46
|
-
<div class="fs-card fs-card-horizontal">
|
|
47
|
-
<div class="fs-card-header">Lateral</div>
|
|
48
|
-
<div class="fs-card-body">Conteúdo ao lado.</div>
|
|
49
|
-
</div>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### `.fs-card-clickable`
|
|
53
|
-
|
|
54
|
-
Torna o card inteiro clicável/focável sem aninhar um `<a>` ao redor de todo
|
|
55
|
-
o conteúdo (o que quebraria a semântica havendo outros elementos
|
|
56
|
-
interativos dentro). Coloque `.fs-stretched-link` no link que deve capturar
|
|
57
|
-
o clique — ele se expande via `::after` pra cobrir o card inteiro:
|
|
58
|
-
|
|
59
|
-
```html
|
|
60
|
-
<div class="fs-card fs-card-clickable">
|
|
61
|
-
<div class="fs-card-body">
|
|
62
|
-
<h4 class="fs-card-title">
|
|
63
|
-
<a href="/detalhes" class="fs-stretched-link">Ver detalhes</a>
|
|
64
|
-
</h4>
|
|
65
|
-
<p class="fs-card-text">O card inteiro é clicável, não só o link.</p>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Estados
|
|
71
|
-
|
|
72
|
-
`.fs-card-clickable:hover`/`:focus-within` — borda muda pra cor primária +
|
|
73
|
-
sombra (`:focus-within` em vez de `:focus` pra destacar tanto no hover
|
|
74
|
-
quanto ao navegar por teclado até o link interno).
|
|
75
|
-
|
|
76
|
-
## A11y
|
|
77
|
-
|
|
78
|
-
- `.fs-stretched-link` deve estar num elemento nativamente focável (`<a
|
|
79
|
-
href="...">`), nunca num `<div>` — é o link real que recebe o foco/clique
|
|
80
|
-
do teclado, o `::after` só expande a área clicável do mouse.
|
|
81
|
-
- Se o card tiver múltiplos links/botões, só o `.fs-stretched-link`
|
|
82
|
-
expande; os demais continuam clicáveis normalmente por cima dele
|
|
83
|
-
(`z-index` do `::after` é `1`, mas elementos com `position: relative` e
|
|
84
|
-
`z-index` maior no conteúdo ficam acima).
|
|
85
|
-
|
|
86
|
-
## API JS
|
|
87
|
-
|
|
88
|
-
Nenhuma — 100% CSS.
|
|
89
|
-
|
|
90
|
-
## Tokens
|
|
91
|
-
|
|
92
|
-
`--fs-color-border`, `--fs-color-surface`, `--fs-color-subtle`
|
|
93
|
-
(header/footer), `--fs-radius-lg`, `--fs-shadow-sm` (hover clicável),
|
|
94
|
-
`--fs-color-primary` (borda hover clicável).
|
|
95
|
-
|
|
96
|
-
## Exemplo
|
|
97
|
-
|
|
98
|
-
```html
|
|
99
|
-
<div class="fs-card fs-card-clickable" style="max-width: 320px;">
|
|
100
|
-
<div class="fs-card-body">
|
|
101
|
-
<h4 class="fs-card-title"><a href="#" class="fs-stretched-link">Relatório Q3</a></h4>
|
|
102
|
-
<p class="fs-card-subtitle">Atualizado há 2 dias</p>
|
|
103
|
-
<p class="fs-card-text">Resumo financeiro do terceiro trimestre.</p>
|
|
104
|
-
</div>
|
|
105
|
-
<div class="fs-card-footer">
|
|
106
|
-
<span class="fs-badge fs-badge-success">Publicado</span>
|
|
107
|
-
</div>
|
|
108
|
-
</div>
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Mockup: [laboratório do componente](../../mockup/content-data.html#card).
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# Carousel
|
|
2
|
-
|
|
3
|
-
Carrossel de painéis ou mídias relacionadas, com navegação por setas,
|
|
4
|
-
indicadores, teclado, arraste e autoplay opcional. Use-o para conteúdo
|
|
5
|
-
complementar; informação essencial deve continuar disponível fora dos slides.
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<div class="fs-carousel" data-fs="carousel" aria-label="Destaques de produto">
|
|
11
|
-
<div class="fs-carousel-inner">
|
|
12
|
-
<div class="fs-carousel-item is-active">
|
|
13
|
-
<img src="slide1.jpg" alt="Equipe colaborando em um painel">
|
|
14
|
-
<div class="fs-carousel-caption">
|
|
15
|
-
<h2>Fluxos mais claros</h2>
|
|
16
|
-
<p>Centralize tarefas recorrentes em uma experiência previsível.</p>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="fs-carousel-item"><img src="slide2.jpg" alt="Resumo de resultados"></div>
|
|
20
|
-
</div>
|
|
21
|
-
<button type="button" class="fs-carousel-control-prev" aria-label="Slide anterior"></button>
|
|
22
|
-
<button type="button" class="fs-carousel-control-next" aria-label="Próximo slide"></button>
|
|
23
|
-
</div>
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Anatomia
|
|
27
|
-
|
|
28
|
-
`.fs-carousel` (`data-fs="carousel"`, rótulo acessível e recorte) >
|
|
29
|
-
`.fs-carousel-inner` (trilha flex deslocada por `translate3d`) >
|
|
30
|
-
`.fs-carousel-item` (um por slide; exatamente um inicia com `.is-active`).
|
|
31
|
-
|
|
32
|
-
Use `.fs-carousel-media` com `background-image` para uma fotografia de fundo;
|
|
33
|
-
como a imagem é decorativa nesse padrão, deixe-a com `aria-hidden="true"` e
|
|
34
|
-
forneça o contexto na legenda. Para imagem semântica, prefira `<img alt>`.
|
|
35
|
-
|
|
36
|
-
Filhos opcionais do contêiner são `.fs-carousel-control-prev`,
|
|
37
|
-
`.fs-carousel-control-next`, `.fs-carousel-control-toggle`,
|
|
38
|
-
`.fs-carousel-indicators` (lista de botões) e `.fs-carousel-caption` dentro
|
|
39
|
-
de cada item. A legenda recebe um gradiente de leitura, título, texto e CTA
|
|
40
|
-
opcional.
|
|
41
|
-
|
|
42
|
-
## Variações
|
|
43
|
-
|
|
44
|
-
- **Fade**: `.fs-carousel-fade` troca os slides por opacidade.
|
|
45
|
-
- **Controles no hover**: `.fs-carousel-hover-controls` revela setas e toggle
|
|
46
|
-
ao passar o mouse ou ao focar um controle.
|
|
47
|
-
- **Legenda lateral**: `.fs-carousel-caption-side` posiciona a legenda à
|
|
48
|
-
direita em telas largas e volta ao overlay padrão em telas pequenas. Adicione
|
|
49
|
-
`.fs-carousel-caption-start` à legenda de um slide para alinhá-la à esquerda
|
|
50
|
-
quando isso preservar melhor o assunto da imagem. Em telas pequenas, a
|
|
51
|
-
legenda ocupa a largura disponível, mas mantém o alinhamento visual: à
|
|
52
|
-
direita por padrão e à esquerda com `.fs-carousel-caption-start`.
|
|
53
|
-
- **Legenda empilhada**: `.fs-carousel-caption-stacked` posiciona a legenda e
|
|
54
|
-
os indicadores abaixo da mídia, sem qualquer sobreposição.
|
|
55
|
-
- **Sem mídia**: `.fs-carousel-no-media` cria painéis de superfície para
|
|
56
|
-
conteúdo informativo ou interativo.
|
|
57
|
-
- **Autoplay controlável**: use `data-autoplay="true"` e inclua o botão
|
|
58
|
-
`[data-fs-carousel-toggle]` para oferecer pausa e reprodução explícitas.
|
|
59
|
-
|
|
60
|
-
```html
|
|
61
|
-
<div class="fs-carousel fs-carousel-fade fs-carousel-hover-controls"
|
|
62
|
-
data-fs="carousel" data-autoplay="true" data-interval="4000"
|
|
63
|
-
aria-label="Atualizações automáticas">
|
|
64
|
-
<!-- .fs-carousel-inner e itens -->
|
|
65
|
-
<button type="button" class="fs-carousel-control-toggle" data-fs-carousel-toggle></button>
|
|
66
|
-
</div>
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Estados
|
|
70
|
-
|
|
71
|
-
`.fs-carousel-item.is-active` e `.fs-carousel-indicators button.is-active`
|
|
72
|
-
são sincronizados pelo JavaScript. O botão de reprodução recebe
|
|
73
|
-
`aria-pressed="true"` enquanto o autoplay está habilitado e troca seu nome
|
|
74
|
-
acessível entre pausar e reproduzir.
|
|
75
|
-
|
|
76
|
-
`data-autoplay="true"` avança a cada `data-interval` ms (padrão `5000`). O
|
|
77
|
-
timer pausa temporariamente no hover, foco, arraste e quando a aba fica
|
|
78
|
-
oculta. `pause()` ou o toggle impedem sua retomada até `play()` ser chamado.
|
|
79
|
-
|
|
80
|
-
Com zero ou um slide, o componente recebe `.is-static`; controles e
|
|
81
|
-
indicadores são ocultados e não é criado um tab stop de navegação.
|
|
82
|
-
|
|
83
|
-
As áreas superior e inferior ficam reservadas pelos tokens
|
|
84
|
-
`--fs-carousel-top-safe-area` e `--fs-carousel-bottom-safe-area`: legendas
|
|
85
|
-
padrão nunca ocupam a barra de controles nem os indicadores. Para um
|
|
86
|
-
carrossel de dois slides, `.fs-carousel-hide-indicators-two` oculta os dots.
|
|
87
|
-
`[data-fs-carousel-counter]` recebe automaticamente o texto `1 de 3`, e
|
|
88
|
-
`[data-fs-carousel-progress]` anima o progresso do autoplay. Use
|
|
89
|
-
`data-drag="false"` quando o conteúdo do slide for altamente interativo.
|
|
90
|
-
|
|
91
|
-
Na variação `.fs-carousel-caption-side`, a mesma reserva é aplicada no modo
|
|
92
|
-
compacto: a legenda não invade a barra superior ou os indicadores, o excesso
|
|
93
|
-
de conteúdo é recortado sem criar barra de rolagem e o gradiente de leitura
|
|
94
|
-
ocupa toda a área da mídia.
|
|
95
|
-
|
|
96
|
-
## A11y
|
|
97
|
-
|
|
98
|
-
O contêiner recebe `role="group"` e `aria-roledescription="carousel"`; forneça
|
|
99
|
-
sempre um `aria-label` que descreva seu conteúdo. Slides inativos recebem
|
|
100
|
-
`aria-hidden`; indicadores recebem `aria-current`; e a trilha é `aria-live`
|
|
101
|
-
`off` durante autoplay ativo e `polite` quando manual ou pausado.
|
|
102
|
-
|
|
103
|
-
Com foco no próprio carrossel, `ArrowLeft`/`ArrowRight` trocam o slide e
|
|
104
|
-
`Home`/`End` vão ao primeiro/último. Os botões mantêm foco nativo e não têm
|
|
105
|
-
suas teclas capturadas pelo contêiner. O arraste por mouse, toque ou caneta
|
|
106
|
-
segue o movimento horizontal, preserva rolagem vertical e ignora gestos que
|
|
107
|
-
começam em controles ou conteúdo interativo. Transições respeitam
|
|
108
|
-
`prefers-reduced-motion: reduce`.
|
|
109
|
-
|
|
110
|
-
## API JS
|
|
111
|
-
|
|
112
|
-
Auto-init via `data-fs="carousel"`. `Carousel.getInstance(el)` recupera a
|
|
113
|
-
instância criada.
|
|
114
|
-
|
|
115
|
-
| Método | Descrição |
|
|
116
|
-
|---|---|
|
|
117
|
-
| `next()` / `prev()` | Avança/volta um slide, circularmente. |
|
|
118
|
-
| `goTo(index)` | Vai diretamente ao índice informado. |
|
|
119
|
-
| `pause()` | Pausa o autoplay configurado até uma chamada a `play()`. |
|
|
120
|
-
| `play()` | Retoma o autoplay configurado, se o carrossel for navegável e a página estiver visível. |
|
|
121
|
-
| `dispose()` | Para o timer, remove listeners e desregistra a instância. |
|
|
122
|
-
|
|
123
|
-
| Evento | Cancelável | Quando |
|
|
124
|
-
|---|---|---|
|
|
125
|
-
| `fs:carousel:slid` | Não | Após trocar de slide; `detail` contém `{ from, to }`. |
|
|
126
|
-
|
|
127
|
-
## Tokens
|
|
128
|
-
|
|
129
|
-
O componente expõe tokens locais com fallback para tokens globais:
|
|
130
|
-
`--fs-carousel-radius`, `--fs-carousel-transition-duration`,
|
|
131
|
-
`--fs-carousel-transition-easing`, `--fs-carousel-control-size`,
|
|
132
|
-
`--fs-carousel-control-inset`, `--fs-carousel-control-color`,
|
|
133
|
-
`--fs-carousel-control-bg`, `--fs-carousel-control-bg-hover`,
|
|
134
|
-
`--fs-carousel-focus-color`, `--fs-carousel-indicator-size`,
|
|
135
|
-
`--fs-carousel-indicator-active-width`, `--fs-carousel-indicator-color`,
|
|
136
|
-
`--fs-carousel-indicator-active-color`, `--fs-carousel-caption-scrim`,
|
|
137
|
-
`--fs-carousel-top-safe-area`, `--fs-carousel-bottom-safe-area` e
|
|
138
|
-
`--fs-carousel-progress-height`.
|
|
139
|
-
|
|
140
|
-
## Exemplo
|
|
141
|
-
|
|
142
|
-
```html
|
|
143
|
-
<div class="fs-carousel" data-fs="carousel" data-autoplay="true"
|
|
144
|
-
aria-label="Destaques do produto">
|
|
145
|
-
<div class="fs-carousel-inner">
|
|
146
|
-
<div class="fs-carousel-item is-active"><img src="a.jpg" alt="Produto em uso"></div>
|
|
147
|
-
<div class="fs-carousel-item"><img src="b.jpg" alt="Equipe em reunião"></div>
|
|
148
|
-
<div class="fs-carousel-item"><img src="c.jpg" alt="Painel de resultados"></div>
|
|
149
|
-
</div>
|
|
150
|
-
<button type="button" class="fs-carousel-control-prev" aria-label="Slide anterior"></button>
|
|
151
|
-
<button type="button" class="fs-carousel-control-next" aria-label="Próximo slide"></button>
|
|
152
|
-
<button type="button" class="fs-carousel-control-toggle" data-fs-carousel-toggle></button>
|
|
153
|
-
<ul class="fs-carousel-indicators">
|
|
154
|
-
<li><button type="button" class="is-active" aria-label="Ir para o slide 1"></button></li>
|
|
155
|
-
<li><button type="button" aria-label="Ir para o slide 2"></button></li>
|
|
156
|
-
<li><button type="button" aria-label="Ir para o slide 3"></button></li>
|
|
157
|
-
</ul>
|
|
158
|
-
</div>
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Mockup: [laboratório do componente](../../mockup/content-data.html#carousel).
|
|
162
|
-
|
|
163
|
-
## Limitações
|
|
164
|
-
|
|
165
|
-
O Carousel mostra um item por vez e não inclui thumbnails, vídeo, zoom,
|
|
166
|
-
lightbox ou múltiplos slides visíveis. Prefira compor recursos existentes para
|
|
167
|
-
esses casos antes de propor uma expansão deste componente avançado.
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Checkbox
|
|
2
|
-
|
|
3
|
-
Checkbox 100% CSS, desenhado sobre um `<input type="checkbox">` nativo —
|
|
4
|
-
teclado, foco e semântica são os do navegador; o framework só estiliza.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<div class="fs-check">
|
|
10
|
-
<input type="checkbox" class="fs-check-input" id="aceite">
|
|
11
|
-
<label for="aceite" class="fs-check-label">Aceito os termos</label>
|
|
12
|
-
</div>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Anatomia
|
|
16
|
-
|
|
17
|
-
`.fs-check` (wrapper) > `.fs-check-input` (`<input>`, visualmente oculto
|
|
18
|
-
via clip — continua focável/anunciado por leitor de tela) + `.fs-check-label`
|
|
19
|
-
(`<label for="...">`, desenha a caixa via `::before` e a marca via
|
|
20
|
-
`::after`). Input e label são **irmãos**, não aninhados — a associação é só
|
|
21
|
-
por `for`/`id` (mesma técnica de [Segmented Control](segmented-control.md)
|
|
22
|
-
e [Rating](rating.md)).
|
|
23
|
-
|
|
24
|
-
O `for`/`id` é obrigatório: sem ele, clicar no texto não alterna o
|
|
25
|
-
checkbox, e leitores de tela não anunciam o rótulo.
|
|
26
|
-
|
|
27
|
-
## Variações
|
|
28
|
-
|
|
29
|
-
Tamanho: `.fs-check-sm`, `.fs-check-lg` no wrapper (sem sufixo = padrão).
|
|
30
|
-
O checkbox é quadrado (`border-radius: 0`): desmarcado tem borda `primary`,
|
|
31
|
-
marcado usa preenchimento `primary` e check branco.
|
|
32
|
-
No hover desmarcado, o fundo recebe um tom sutil de `primary`; em `:active`,
|
|
33
|
-
o preenchimento fica mais intenso para confirmar o clique.
|
|
34
|
-
|
|
35
|
-
```html
|
|
36
|
-
<div class="fs-check fs-check-sm">...</div>
|
|
37
|
-
<div class="fs-check fs-check-lg">...</div>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Estados
|
|
41
|
-
|
|
42
|
-
- **checked**: atributo `checked` no `<input>`.
|
|
43
|
-
- **indeterminate**: só via JavaScript (`input.indeterminate = true` — não
|
|
44
|
-
existe atributo HTML equivalente; o framework estiliza `:indeterminate`,
|
|
45
|
-
com borda tracejada `primary` e traço horizontal).
|
|
46
|
-
- **disabled**: atributo `disabled` no `<input>`.
|
|
47
|
-
- **Validação**: use `.is-invalid` no `<input>` quando houver erro. O
|
|
48
|
-
inválido usa preenchimento `danger` com um X branco, inclusive quando não
|
|
49
|
-
está marcado; não há estado visual separado para “válido”.
|
|
50
|
-
- **Disabled**: desmarcado usa trilho e borda neutros; marcado mantém uma
|
|
51
|
-
versão atenuada de `primary`, em vez de reduzir a opacidade do controle todo.
|
|
52
|
-
- **Foco**: `:focus-visible` no input desenha o anel sobre a caixa
|
|
53
|
-
(`::before` da label), não sobre o texto.
|
|
54
|
-
|
|
55
|
-
```html
|
|
56
|
-
<input type="checkbox" class="fs-check-input is-invalid" id="c1">
|
|
57
|
-
<label for="c1" class="fs-check-label">Campo obrigatório</label>
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
```js
|
|
61
|
-
document.getElementById("c2").indeterminate = true;
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## A11y
|
|
65
|
-
|
|
66
|
-
- `<input type="checkbox">` nativo — `Space` alterna, `Tab` foca, leitor de
|
|
67
|
-
tela anuncia estado (marcado/desmarcado/indeterminado) automaticamente.
|
|
68
|
-
Nenhum ARIA extra é necessário.
|
|
69
|
-
- Sempre associe `label` via `for`/`id` — não use só `aria-label` no input
|
|
70
|
-
se houver texto visível ao lado (duplica a leitura ou some com o clique
|
|
71
|
-
no texto).
|
|
72
|
-
|
|
73
|
-
## API JS
|
|
74
|
-
|
|
75
|
-
Nenhuma — 100% CSS. `indeterminate` é uma propriedade do DOM nativo do
|
|
76
|
-
`<input>`, não uma API do FokusStyles.
|
|
77
|
-
|
|
78
|
-
## Tokens
|
|
79
|
-
|
|
80
|
-
Sem tokens de componente próprios — usa `--fs-color-primary` (caixa
|
|
81
|
-
marcada), `--fs-color-border`/`--fs-color-surface` (caixa vazia),
|
|
82
|
-
`--fs-color-success`/`--fs-color-danger` (validação), `--fs-radius-sm`.
|
|
83
|
-
|
|
84
|
-
## Exemplo
|
|
85
|
-
|
|
86
|
-
```html
|
|
87
|
-
<div class="fs-check">
|
|
88
|
-
<input type="checkbox" class="fs-check-input" id="c1" checked>
|
|
89
|
-
<label for="c1" class="fs-check-label">Marcado</label>
|
|
90
|
-
</div>
|
|
91
|
-
<div class="fs-check">
|
|
92
|
-
<input type="checkbox" class="fs-check-input" id="c2" disabled>
|
|
93
|
-
<label for="c2" class="fs-check-label">Desabilitado</label>
|
|
94
|
-
</div>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Mockup: [laboratório do componente](../../mockup/forms.html#check-radio-switch).
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Close button
|
|
2
|
-
|
|
3
|
-
## Visão geral
|
|
4
|
-
|
|
5
|
-
`.fs-close` fornece um controle compacto para fechar painéis, diálogos e toasts.
|
|
6
|
-
|
|
7
|
-
## Estados
|
|
8
|
-
|
|
9
|
-
O estado hover e o focus-visible são fornecidos pelo componente.
|
|
10
|
-
|
|
11
|
-
## A11y
|
|
12
|
-
|
|
13
|
-
Sempre informe `aria-label="Fechar"` e associe o controle ao conteúdo que ele fecha.
|
package/docs/components/code.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Code
|
|
2
|
-
|
|
3
|
-
## Visão geral
|
|
4
|
-
|
|
5
|
-
`.fs-code` estiliza código inline e `.fs-pre` apresenta blocos pré-formatados.
|
|
6
|
-
|
|
7
|
-
## Estados
|
|
8
|
-
|
|
9
|
-
O bloco mantém rolagem horizontal para preservar linhas longas.
|
|
10
|
-
|
|
11
|
-
## A11y
|
|
12
|
-
|
|
13
|
-
Use `code` para trechos curtos e `pre` para blocos; não transmita informação somente por cor.
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# Collapse
|
|
2
|
-
|
|
3
|
-
Expande/recolhe um painel com transição de altura animada — primitivo
|
|
4
|
-
usado internamente por [Accordion](accordion.md); use direto quando quiser
|
|
5
|
-
só um "mostrar mais" sem a semântica de grupo do Accordion.
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<button type="button" class="fs-btn" data-fs="collapse" data-fs-target="#detalhes">
|
|
11
|
-
Ver detalhes
|
|
12
|
-
</button>
|
|
13
|
-
<div class="fs-collapse" id="detalhes">
|
|
14
|
-
Conteúdo que expande/recolhe.
|
|
15
|
-
</div>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Anatomia
|
|
19
|
-
|
|
20
|
-
Gatilho (`data-fs="collapse"` + `data-fs-target`) + `.fs-collapse`
|
|
21
|
-
(precisa de `overflow: hidden`, já incluso na classe — não remova via CSS
|
|
22
|
-
próprio, quebra a animação de altura).
|
|
23
|
-
|
|
24
|
-
## Variações
|
|
25
|
-
|
|
26
|
-
Nenhuma — sem tamanho/cor; é um comportamento, não um estilo visual
|
|
27
|
-
próprio (o conteúdo interno usa suas próprias classes).
|
|
28
|
-
|
|
29
|
-
## Estados
|
|
30
|
-
|
|
31
|
-
Estado inicial definido por `aria-expanded` no gatilho: `"true"` começa
|
|
32
|
-
aberto, ausente ou `"false"` começa fechado.
|
|
33
|
-
|
|
34
|
-
```html
|
|
35
|
-
<button type="button" class="fs-btn" data-fs="collapse" data-fs-target="#painel" aria-expanded="true">
|
|
36
|
-
Recolher
|
|
37
|
-
</button>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## A11y
|
|
41
|
-
|
|
42
|
-
`aria-controls`/`aria-expanded` no gatilho são sincronizados
|
|
43
|
-
automaticamente pelo JS a cada `show()`/`hide()`.
|
|
44
|
-
[`prefers-reduced-motion: reduce`](../guides/accessibility.md#prefers-reduced-motion)
|
|
45
|
-
pula a animação e aplica o estado final direto.
|
|
46
|
-
|
|
47
|
-
## API JS
|
|
48
|
-
|
|
49
|
-
Auto-init via `data-fs="collapse"` **no gatilho**. `Collapse.getInstance(triggerEl)`.
|
|
50
|
-
|
|
51
|
-
| Método | Descrição |
|
|
52
|
-
|---|---|
|
|
53
|
-
| `show()` | Expande com animação de altura. |
|
|
54
|
-
| `hide()` | Recolhe com animação de altura. |
|
|
55
|
-
| `toggle()` | Alterna (é o que o clique no gatilho já faz). |
|
|
56
|
-
| `dispose()` | Remove o listener de clique e desregistra a instância. |
|
|
57
|
-
|
|
58
|
-
| Evento (no gatilho) | Cancelável | Quando |
|
|
59
|
-
|---|---|---|
|
|
60
|
-
| `fs:collapse:shown` | Não | Depois que a animação de expandir termina. |
|
|
61
|
-
| `fs:collapse:hidden` | Não | Depois que a animação de recolher termina. |
|
|
62
|
-
|
|
63
|
-
## Tokens
|
|
64
|
-
|
|
65
|
-
Nenhum próprio — o conteúdo interno usa suas próprias cores/espaçamento.
|
|
66
|
-
|
|
67
|
-
## Exemplo
|
|
68
|
-
|
|
69
|
-
```html
|
|
70
|
-
<button type="button" class="fs-btn fs-btn-outline-secondary" data-fs="collapse" data-fs-target="#mais-info">
|
|
71
|
-
Mais informações
|
|
72
|
-
</button>
|
|
73
|
-
<div class="fs-collapse" id="mais-info">
|
|
74
|
-
<p class="fs-u-mt-2">Texto adicional que só aparece quando expandido.</p>
|
|
75
|
-
</div>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#collapse).
|