fokus-styles 2.5.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/package.json +17 -15
- package/CHANGELOG.md +0 -940
- 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 -104
- package/docs/components/avatar.md +0 -13
- package/docs/components/badge.md +0 -101
- 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 -110
- 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 -118
- package/docs/components/progress.md +0 -126
- package/docs/components/radio.md +0 -80
- package/docs/components/range.md +0 -83
- package/docs/components/rating.md +0 -91
- package/docs/components/ratio.md +0 -13
- package/docs/components/responsive.md +0 -19
- 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 -97
- package/docs/components/table.md +0 -90
- package/docs/components/tabs.md +0 -104
- package/docs/components/tag.md +0 -144
- package/docs/components/tile.md +0 -112
- package/docs/components/timeline.md +0 -78
- package/docs/components/toast.md +0 -108
- package/docs/components/tooltip.md +0 -113
- 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 -109
- 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 -54
- package/docs/reference/definitions.md +0 -868
- package/docs/reference/design-tokens.md +0 -208
- 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 -19
- 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 -115
- package/mockup/examples/badges-alerts.html +0 -109
- 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 -620
- 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/popover.html +0 -81
- 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 -115
- package/mockup/examples/theming.html +0 -68
- package/mockup/examples/tile.html +0 -107
- package/mockup/examples/timeline.html +0 -108
- package/mockup/examples/toast.html +0 -113
- package/mockup/examples/tooltip.html +0 -68
- 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,93 +0,0 @@
|
|
|
1
|
-
# Breadcrumb
|
|
2
|
-
|
|
3
|
-
Trilha de navegação hierárquica ("você está aqui"). O uso básico é 100%
|
|
4
|
-
CSS; auto-init opcional (`data-fs="breadcrumb"`) adiciona truncamento com
|
|
5
|
-
tooltip e colapso em telas pequenas.
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<nav aria-label="breadcrumb">
|
|
11
|
-
<ol class="fs-breadcrumb">
|
|
12
|
-
<li class="fs-breadcrumb-item"><a href="#">Início</a></li>
|
|
13
|
-
<li class="fs-breadcrumb-item"><a href="#">Categoria</a></li>
|
|
14
|
-
<li class="fs-breadcrumb-item is-active">Página atual</li>
|
|
15
|
-
</ol>
|
|
16
|
-
</nav>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Anatomia
|
|
20
|
-
|
|
21
|
-
`<ol class="fs-breadcrumb">` > `<li class="fs-breadcrumb-item">` (com
|
|
22
|
-
`<a>` interno, exceto o último). O separador `/` entre itens é desenhado
|
|
23
|
-
via `::before` — não insira manualmente.
|
|
24
|
-
|
|
25
|
-
## Variações
|
|
26
|
-
|
|
27
|
-
Nenhuma variação visual (cor/tamanho); a variação é comportamental (ver
|
|
28
|
-
Avançado abaixo).
|
|
29
|
-
|
|
30
|
-
## Estados
|
|
31
|
-
|
|
32
|
-
`.fs-breadcrumb-item.is-active` — marca o item atual, sem link, cor de
|
|
33
|
-
texto normal (os demais usam `--fs-color-muted`).
|
|
34
|
-
|
|
35
|
-
## Avançado: truncamento + colapso (JS opcional)
|
|
36
|
-
|
|
37
|
-
Com `data-fs="breadcrumb"`, cada label longo trunca com reticências (CSS)
|
|
38
|
-
e ganha um tooltip com o texto completo **só se realmente transbordar**
|
|
39
|
-
(medido após as fontes carregarem, pra não errar o corte com a métrica do
|
|
40
|
-
fallback). Abaixo de 640px de largura de viewport, os níveis
|
|
41
|
-
intermediários (mantendo sempre o primeiro e o último visíveis) colapsam
|
|
42
|
-
num único item "…" que abre um dropdown com os links ocultos.
|
|
43
|
-
|
|
44
|
-
```html
|
|
45
|
-
<ol class="fs-breadcrumb" data-fs="breadcrumb" data-max-items="3">
|
|
46
|
-
<li class="fs-breadcrumb-item"><a href="#">Início</a></li>
|
|
47
|
-
<li class="fs-breadcrumb-item"><a href="#">Categoria de produtos muito específica</a></li>
|
|
48
|
-
<li class="fs-breadcrumb-item"><a href="#">Subcategoria</a></li>
|
|
49
|
-
<li class="fs-breadcrumb-item"><a href="#">Marca</a></li>
|
|
50
|
-
<li class="fs-breadcrumb-item is-active">Produto atual com nome bem longo</li>
|
|
51
|
-
</ol>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`data-max-items` (padrão `4`) define quantos itens cabem antes do colapso
|
|
55
|
-
entrar em ação (só é avaliado abaixo do breakpoint `sm`, 640px).
|
|
56
|
-
|
|
57
|
-
## A11y
|
|
58
|
-
|
|
59
|
-
- Envolva a lista num `<nav aria-label="breadcrumb">` (ou "trilha de
|
|
60
|
-
navegação") — não gerado automaticamente.
|
|
61
|
-
- O item "…" do colapso tem `aria-label="Mostrar níveis ocultos"` e abre um
|
|
62
|
-
[Dropdown](dropdown.md) padrão, com toda a navegação por teclado dele.
|
|
63
|
-
|
|
64
|
-
## API JS
|
|
65
|
-
|
|
66
|
-
Auto-init via `data-fs="breadcrumb"` (só necessário para truncamento/
|
|
67
|
-
colapso — a trilha básica não precisa de JS). `Breadcrumb.getInstance(el)`.
|
|
68
|
-
|
|
69
|
-
| Método | Descrição |
|
|
70
|
-
|---|---|
|
|
71
|
-
| `dispose()` | Remove o listener de media query, restaura os itens colapsados e desregistra a instância. |
|
|
72
|
-
|
|
73
|
-
Sem eventos customizados.
|
|
74
|
-
|
|
75
|
-
## Tokens
|
|
76
|
-
|
|
77
|
-
`--fs-color-muted`, `--fs-color-primary` (links), `--fs-color-text`
|
|
78
|
-
(item ativo). O dropdown do colapso usa os tokens de
|
|
79
|
-
[Dropdown](dropdown.md).
|
|
80
|
-
|
|
81
|
-
## Exemplo
|
|
82
|
-
|
|
83
|
-
```html
|
|
84
|
-
<nav aria-label="breadcrumb">
|
|
85
|
-
<ol class="fs-breadcrumb">
|
|
86
|
-
<li class="fs-breadcrumb-item"><a href="#">Início</a></li>
|
|
87
|
-
<li class="fs-breadcrumb-item"><a href="#">Categoria</a></li>
|
|
88
|
-
<li class="fs-breadcrumb-item is-active">Produto atual</li>
|
|
89
|
-
</ol>
|
|
90
|
-
</nav>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#breadcrumb).
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Button group
|
|
2
|
-
|
|
3
|
-
## Visão geral
|
|
4
|
-
|
|
5
|
-
`.fs-button-group` agrupa ações relacionadas em uma unidade visual.
|
|
6
|
-
|
|
7
|
-
## Estados
|
|
8
|
-
|
|
9
|
-
Use `.fs-button-group-vertical` em barras verticais e mantenha apenas uma ação primária.
|
|
10
|
-
|
|
11
|
-
## A11y
|
|
12
|
-
|
|
13
|
-
Use `role="group"` e `aria-label` quando o agrupamento não tiver um título visível.
|
|
@@ -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,110 +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
|
-
- **Hover/active**: superfície e borda confirmam a interação sem depender
|
|
55
|
-
apenas da cor do texto.
|
|
56
|
-
- **RTL e movimento**: propriedades lógicas acompanham `dir="rtl"` e as
|
|
57
|
-
transições são desativadas em `prefers-reduced-motion: reduce`.
|
|
58
|
-
|
|
59
|
-
```html
|
|
60
|
-
<input type="checkbox" class="fs-check-input is-invalid" id="c1">
|
|
61
|
-
<label for="c1" class="fs-check-label">Campo obrigatório</label>
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```js
|
|
65
|
-
document.getElementById("c2").indeterminate = true;
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## A11y
|
|
69
|
-
|
|
70
|
-
- `<input type="checkbox">` nativo — `Space` alterna, `Tab` foca, leitor de
|
|
71
|
-
tela anuncia estado (marcado/desmarcado/indeterminado) automaticamente.
|
|
72
|
-
Nenhum ARIA extra é necessário.
|
|
73
|
-
- Sempre associe `label` via `for`/`id` — não use só `aria-label` no input
|
|
74
|
-
se houver texto visível ao lado (duplica a leitura ou some com o clique
|
|
75
|
-
no texto).
|
|
76
|
-
- Para grupos relacionados, use `fieldset`/`legend`. Associe ajuda ou erro
|
|
77
|
-
com `aria-describedby` e indique erro com `aria-invalid="true"` quando
|
|
78
|
-
aplicável.
|
|
79
|
-
|
|
80
|
-
## API JS
|
|
81
|
-
|
|
82
|
-
Nenhuma — 100% CSS. `indeterminate` é uma propriedade do DOM nativo do
|
|
83
|
-
`<input>`, não uma API do FokusStyles.
|
|
84
|
-
|
|
85
|
-
## Tokens
|
|
86
|
-
|
|
87
|
-
Tokens de componente podem ser sobrescritos por instância sem `!important`:
|
|
88
|
-
|
|
89
|
-
| Token | Fallback | Uso |
|
|
90
|
-
|---|---|---|
|
|
91
|
-
| `--fs-check-size` | `18px` | Caixa visual |
|
|
92
|
-
| `--fs-check-border-width` | `--fs-border-width` | Borda |
|
|
93
|
-
| `--fs-check-radius` | `--fs-radius-sm` | Raio |
|
|
94
|
-
| `--fs-check-gap` | `--fs-space-2` | Distância até o texto |
|
|
95
|
-
| `--fs-check-mark-color` | `--fs-color-on-primary` | Marca |
|
|
96
|
-
|
|
97
|
-
## Exemplo
|
|
98
|
-
|
|
99
|
-
```html
|
|
100
|
-
<div class="fs-check">
|
|
101
|
-
<input type="checkbox" class="fs-check-input" id="c1" checked>
|
|
102
|
-
<label for="c1" class="fs-check-label">Marcado</label>
|
|
103
|
-
</div>
|
|
104
|
-
<div class="fs-check">
|
|
105
|
-
<input type="checkbox" class="fs-check-input" id="c2" disabled>
|
|
106
|
-
<label for="c2" class="fs-check-label">Desabilitado</label>
|
|
107
|
-
</div>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
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.
|