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,70 +0,0 @@
|
|
|
1
|
-
# Skeleton
|
|
2
|
-
|
|
3
|
-
Placeholder de carregamento — 100% CSS, sem JS (você troca pelo conteúdo
|
|
4
|
-
real quando os dados chegam).
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<div class="fs-skeleton fs-skeleton-text"></div>
|
|
10
|
-
<div class="fs-skeleton fs-skeleton-text"></div>
|
|
11
|
-
<div class="fs-skeleton fs-skeleton-circle" style="width: 48px; height: 48px;"></div>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Anatomia
|
|
15
|
-
|
|
16
|
-
`.fs-skeleton` (base — cor + animação de pulso) combinado com uma forma:
|
|
17
|
-
`.fs-skeleton-text` (linha de texto, 1em de altura; o último de uma
|
|
18
|
-
sequência automaticamente encolhe pra 80% de largura, imitando o fim de um
|
|
19
|
-
parágrafo), `.fs-skeleton-circle` (avatar), `.fs-skeleton-rect` (bloco/
|
|
20
|
-
imagem). Tamanho de circle/rect é livre — defina `width`/`height` via
|
|
21
|
-
`style` inline ou classe própria.
|
|
22
|
-
|
|
23
|
-
## Variações
|
|
24
|
-
|
|
25
|
-
`.fs-skeleton-wave` — em vez de pulsar a opacidade inteira, varre um
|
|
26
|
-
brilho da esquerda pra direita (substitui a animação padrão, não combine
|
|
27
|
-
os dois).
|
|
28
|
-
|
|
29
|
-
```html
|
|
30
|
-
<div class="fs-skeleton fs-skeleton-rect fs-skeleton-wave" style="width: 100%; height: 120px;"></div>
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Estados
|
|
34
|
-
|
|
35
|
-
Nenhum — é ele mesmo um estado (de carregamento) de outro conteúdo.
|
|
36
|
-
Anima infinitamente enquanto presente no DOM; remova/substitua quando os
|
|
37
|
-
dados reais chegarem.
|
|
38
|
-
|
|
39
|
-
## A11y
|
|
40
|
-
|
|
41
|
-
As variantes `.fs-skeleton-card`, `.fs-skeleton-table` e `.fs-skeleton-avatar` são visuais;
|
|
42
|
-
anuncie o carregamento no contêiner com `aria-busy="true"`.
|
|
43
|
-
|
|
44
|
-
A animação para automaticamente sob `prefers-reduced-motion: reduce`
|
|
45
|
-
(fica estática, sem pulso/varredura). Se o carregamento for anunciado a
|
|
46
|
-
leitores de tela, envolva o conjunto de skeletons num contêiner com
|
|
47
|
-
`aria-busy="true"` (e remova ao trocar pelo conteúdo real) — não aplicado
|
|
48
|
-
automaticamente.
|
|
49
|
-
|
|
50
|
-
## API JS
|
|
51
|
-
|
|
52
|
-
Nenhuma — 100% CSS.
|
|
53
|
-
|
|
54
|
-
## Tokens
|
|
55
|
-
|
|
56
|
-
`--fs-color-subtle` (cor de base), `--fs-radius-sm`/`-md`.
|
|
57
|
-
|
|
58
|
-
## Exemplo
|
|
59
|
-
|
|
60
|
-
```html
|
|
61
|
-
<div class="fs-tile" aria-busy="true">
|
|
62
|
-
<div class="fs-skeleton fs-skeleton-circle" style="width: 40px; height: 40px;"></div>
|
|
63
|
-
<div class="fs-tile-body" style="width: 100%;">
|
|
64
|
-
<div class="fs-skeleton fs-skeleton-text" style="width: 60%;"></div>
|
|
65
|
-
<div class="fs-skeleton fs-skeleton-text"></div>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#skeleton).
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# Stepper
|
|
2
|
-
|
|
3
|
-
Wizard de múltiplos passos — cabeçalho com indicadores de progresso, painéis
|
|
4
|
-
de conteúdo opcionais, navegação linear ou livre.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<div class="fs-stepper" data-fs="stepper">
|
|
10
|
-
<ol class="fs-stepper-header">
|
|
11
|
-
<li class="fs-step fs-step-active">
|
|
12
|
-
<span class="fs-step-indicator">1</span>
|
|
13
|
-
<span class="fs-step-label">Conta</span>
|
|
14
|
-
</li>
|
|
15
|
-
<li class="fs-step">
|
|
16
|
-
<span class="fs-step-indicator">2</span>
|
|
17
|
-
<span class="fs-step-label">Perfil</span>
|
|
18
|
-
</li>
|
|
19
|
-
<li class="fs-step">
|
|
20
|
-
<span class="fs-step-indicator">3</span>
|
|
21
|
-
<span class="fs-step-label">Revisão</span>
|
|
22
|
-
</li>
|
|
23
|
-
</ol>
|
|
24
|
-
<div class="fs-stepper-content">
|
|
25
|
-
<div class="fs-step-panel is-active">Passo 1: dados da conta.</div>
|
|
26
|
-
<div class="fs-step-panel">Passo 2: dados do perfil.</div>
|
|
27
|
-
<div class="fs-step-panel">Passo 3: revise e confirme.</div>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="fs-stepper-actions">
|
|
30
|
-
<button type="button" class="fs-btn" data-stepper="prev">Voltar</button>
|
|
31
|
-
<button type="button" class="fs-btn fs-btn-primary" data-stepper="next">Avançar</button>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Anatomia
|
|
37
|
-
|
|
38
|
-
`.fs-stepper` (`data-fs="stepper"`) > `.fs-stepper-header` (`<ol>`) >
|
|
39
|
-
`.fs-step` (um por passo) > `.fs-step-indicator` (número/check) +
|
|
40
|
-
`.fs-step-label` + `.fs-step-description` (opcional) — mais, opcionais:
|
|
41
|
-
`.fs-stepper-content` > `.fs-step-panel` (um por passo, na mesma ordem) e
|
|
42
|
-
`.fs-stepper-actions` com botões `data-stepper="prev"`/`"next"`.
|
|
43
|
-
|
|
44
|
-
Um `.fs-step` pode apontar pra um painel específico via `data-fs-target`
|
|
45
|
-
(seletor) em vez de depender da ordem posicional.
|
|
46
|
-
|
|
47
|
-
## Variações
|
|
48
|
-
|
|
49
|
-
`.fs-stepper-vertical` no `.fs-stepper` — cabeçalho em coluna, cada passo
|
|
50
|
-
com label/descrição ao lado do indicador em vez de embaixo.
|
|
51
|
-
|
|
52
|
-
## Estados
|
|
53
|
-
|
|
54
|
-
Cada `.fs-step` recebe uma destas classes, sincronizadas pelo JS:
|
|
55
|
-
|
|
56
|
-
| Classe | Significado |
|
|
57
|
-
|---|---|
|
|
58
|
-
| (nenhuma) | Pendente — ainda não alcançado. |
|
|
59
|
-
| `.fs-step-active` | Passo atual. |
|
|
60
|
-
| `.fs-step-completed` | Já concluído (indicador vira um check). |
|
|
61
|
-
| `.fs-step-error` | Marcado com erro via `setError()` — não muda automaticamente. |
|
|
62
|
-
| `.fs-step-clickable` | Aplicada automaticamente aos passos navegáveis pelo cabeçalho. |
|
|
63
|
-
|
|
64
|
-
**Modo linear** (padrão, `data-linear` ausente ou `"true"`): só permite
|
|
65
|
-
voltar clicando em passos já concluídos, não pular pra frente. `data-linear="false"` libera clicar em qualquer passo do cabeçalho a
|
|
66
|
-
qualquer momento.
|
|
67
|
-
|
|
68
|
-
## A11y
|
|
69
|
-
|
|
70
|
-
Cada `.fs-step` tem `role="listitem"`, `tabindex` (só os clicáveis
|
|
71
|
-
recebem `0`) e `aria-current="step"` no passo ativo — navegável e ativável
|
|
72
|
-
por teclado (`Enter`/`Space`) quando clicável.
|
|
73
|
-
|
|
74
|
-
## API JS
|
|
75
|
-
|
|
76
|
-
Auto-init via `data-fs="stepper"`. `Stepper.getInstance(el)`.
|
|
77
|
-
|
|
78
|
-
| Método | Descrição |
|
|
79
|
-
|---|---|
|
|
80
|
-
| `next()` | Avança um passo; no último, chama `complete()`. |
|
|
81
|
-
| `prev()` | Volta um passo. |
|
|
82
|
-
| `goTo(index)` | Vai direto pro passo `index` (respeitando o modo linear se disparado pelo cabeçalho — via método, sempre permitido). |
|
|
83
|
-
| `setError(index, hasError = true)` | Marca/desmarca `.fs-step-error` num passo específico. |
|
|
84
|
-
| `complete()` | Marca o wizard como concluído (todos os passos ficam `.fs-step-completed`). |
|
|
85
|
-
| `dispose()` | Remove todos os listeners e desregistra a instância. |
|
|
86
|
-
|
|
87
|
-
| Evento | Cancelável | Quando |
|
|
88
|
-
|---|---|---|
|
|
89
|
-
| `fs:stepper:beforechange` | Sim | Antes de trocar de passo (ou concluir) — `event.detail` traz `{ from, to }`; `preventDefault()` bloqueia a mudança (útil pra validar o passo atual antes de avançar). |
|
|
90
|
-
| `fs:stepper:changed` | Não | Depois de trocar de passo. |
|
|
91
|
-
| `fs:stepper:completed` | Não | Depois de `complete()`. |
|
|
92
|
-
|
|
93
|
-
```js
|
|
94
|
-
stepperEl.addEventListener("fs:stepper:beforechange", (event) => {
|
|
95
|
-
if (!formularioValido()) event.preventDefault();
|
|
96
|
-
});
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Tokens
|
|
100
|
-
|
|
101
|
-
`--fs-color-border`, `--fs-color-primary` (ativo/concluído),
|
|
102
|
-
`--fs-color-danger` (erro), `--fs-color-muted`, `--fs-color-text`.
|
|
103
|
-
|
|
104
|
-
## Exemplo
|
|
105
|
-
|
|
106
|
-
Ver acima (Visão geral) — mockup completo com validação por passo em
|
|
107
|
-
[`mockup/navigation-disclosure.html#stepper`](../../mockup/navigation-disclosure.html#stepper).
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Switch
|
|
2
|
-
|
|
3
|
-
Toggle liga/desliga 100% CSS, sobre um `<input type="checkbox">` nativo —
|
|
4
|
-
semanticamente é um checkbox (representa um estado booleano), só a
|
|
5
|
-
aparência muda. Knob **retangular arredondado**, não circular — decisão de
|
|
6
|
-
design deliberada (nada circular no framework além de radio/spinner).
|
|
7
|
-
|
|
8
|
-
## Visão geral
|
|
9
|
-
|
|
10
|
-
```html
|
|
11
|
-
<div class="fs-switch">
|
|
12
|
-
<input type="checkbox" class="fs-switch-input" id="notif" checked>
|
|
13
|
-
<label for="notif" class="fs-switch-label">Notificações</label>
|
|
14
|
-
</div>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Anatomia
|
|
18
|
-
|
|
19
|
-
`.fs-switch` (wrapper) > `.fs-switch-input` (oculto via clip) +
|
|
20
|
-
`.fs-switch-label` (`<label for="...">`, desenha o trilho via `::before` e
|
|
21
|
-
o knob via `::after`, que desliza com `left` + `transition`).
|
|
22
|
-
|
|
23
|
-
## Variações
|
|
24
|
-
|
|
25
|
-
Tamanho: `.fs-switch-sm`, `.fs-switch-lg` no wrapper.
|
|
26
|
-
|
|
27
|
-
## Estados
|
|
28
|
-
|
|
29
|
-
checked/disabled/foco — mesmo padrão do [Checkbox](checkbox.md). Sem
|
|
30
|
-
`indeterminate` nem validação (switch não é um campo de formulário
|
|
31
|
-
validável, é um controle de preferência/estado).
|
|
32
|
-
|
|
33
|
-
## A11y
|
|
34
|
-
|
|
35
|
-
- `<input type="checkbox">` nativo — `Space` alterna, leitor de tela
|
|
36
|
-
anuncia como checkbox marcado/desmarcado (não há um role "switch" nativo
|
|
37
|
-
em HTML; usar `type="checkbox"` é a escolha correta e amplamente
|
|
38
|
-
suportada — um `role="switch"` explícito é opcional, não aplicado pelo
|
|
39
|
-
framework).
|
|
40
|
-
- Quando não houver texto visível ao lado (ex.: dentro de um
|
|
41
|
-
[Tile](tile.md), como no exemplo abaixo), use `aria-label` no `<input>`
|
|
42
|
-
em vez de deixar a `<label>` vazia.
|
|
43
|
-
|
|
44
|
-
```html
|
|
45
|
-
<div class="fs-switch">
|
|
46
|
-
<input type="checkbox" class="fs-switch-input" id="s1" aria-label="Ativar tema escuro">
|
|
47
|
-
<label for="s1" class="fs-switch-label"></label>
|
|
48
|
-
</div>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## API JS
|
|
52
|
-
|
|
53
|
-
Nenhuma — 100% CSS.
|
|
54
|
-
|
|
55
|
-
## Tokens
|
|
56
|
-
|
|
57
|
-
Sem tokens de componente próprios — usa `--fs-color-primary` (trilho
|
|
58
|
-
ligado), `--fs-color-border` (knob desligado), `--fs-radius-md` (trilho),
|
|
59
|
-
`--fs-radius-sm` (knob).
|
|
60
|
-
|
|
61
|
-
## Exemplo
|
|
62
|
-
|
|
63
|
-
```html
|
|
64
|
-
<div class="fs-switch">
|
|
65
|
-
<input type="checkbox" class="fs-switch-input" id="sw1">
|
|
66
|
-
<label for="sw1" class="fs-switch-label">Desligado</label>
|
|
67
|
-
</div>
|
|
68
|
-
<div class="fs-switch">
|
|
69
|
-
<input type="checkbox" class="fs-switch-input" id="sw2" checked>
|
|
70
|
-
<label for="sw2" class="fs-switch-label">Ligado</label>
|
|
71
|
-
</div>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Mockup: [laboratório do componente](../../mockup/content-data.html#tile).
|
|
75
|
-
Uso combinado com Tile: [laboratório de conteúdo e dados](../../mockup/content-data.html#tile).
|
package/docs/components/table.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Table
|
|
2
|
-
|
|
3
|
-
Tabelas seguem a marcação HTML nativa — classes modificadoras no próprio
|
|
4
|
-
`<table>` ligam/desligam comportamentos visuais.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<table class="fs-table fs-table-striped fs-table-hover">
|
|
10
|
-
<thead>
|
|
11
|
-
<tr><th>Nome</th><th>Status</th></tr>
|
|
12
|
-
</thead>
|
|
13
|
-
<tbody>
|
|
14
|
-
<tr><td>Ana</td><td>Ativo</td></tr>
|
|
15
|
-
<tr><td>Bruno</td><td>Inativo</td></tr>
|
|
16
|
-
</tbody>
|
|
17
|
-
</table>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Anatomia
|
|
21
|
-
|
|
22
|
-
`<table class="fs-table">` com `<thead>`/`<tbody>` nativos — nenhuma
|
|
23
|
-
marcação extra obrigatória. `<thead th>` já vem em uppercase, cor muted,
|
|
24
|
-
peso médio.
|
|
25
|
-
|
|
26
|
-
## Variações
|
|
27
|
-
|
|
28
|
-
- `.fs-table-striped` — linhas ímpares do corpo com fundo diferente (zebra).
|
|
29
|
-
- `.fs-table-hover` — destaca a linha sob o cursor.
|
|
30
|
-
- `.fs-table-bordered` — bordas em todas as células.
|
|
31
|
-
- `.fs-table-borderless` — remove todas as bordas internas.
|
|
32
|
-
- `.fs-table-sm` — reduz o padding das células.
|
|
33
|
-
- `.fs-table-{primary|secondary|success|warning|danger|info}` — tinge
|
|
34
|
-
fundo/texto da tabela inteira com uma cor de estado (mesmos tokens dos
|
|
35
|
-
alerts).
|
|
36
|
-
- `.fs-table-responsive` — aplique num `<div>` **envolvendo** a
|
|
37
|
-
`<table>` (não na tabela em si), para rolagem horizontal em telas
|
|
38
|
-
estreitas:
|
|
39
|
-
|
|
40
|
-
```html
|
|
41
|
-
<div class="fs-table-responsive">
|
|
42
|
-
<table class="fs-table">...</table>
|
|
43
|
-
</div>
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Combináveis entre si (ex.: `fs-table-striped fs-table-bordered fs-table-sm`).
|
|
47
|
-
|
|
48
|
-
## Estados
|
|
49
|
-
|
|
50
|
-
Nenhum — tabela é conteúdo estático. Se precisar de ordenação/filtro/
|
|
51
|
-
paginação client-side, veja o [DataTable](datatable.md), a camada JS
|
|
52
|
-
opcional que reusa `.fs-table`.
|
|
53
|
-
|
|
54
|
-
## A11y
|
|
55
|
-
|
|
56
|
-
Use `.fs-table-responsive` para rolagem horizontal, `.fs-table-caption` para legenda e
|
|
57
|
-
`.fs-table-empty` para estados sem dados. `.fs-table-priority` preserva colunas essenciais.
|
|
58
|
-
|
|
59
|
-
- Use `<th scope="col">`/`<th scope="row">` conforme o cabeçalho for de
|
|
60
|
-
coluna ou linha — não é aplicado automaticamente.
|
|
61
|
-
- Para tabelas grandes/complexas, considere `<caption>` descrevendo o
|
|
62
|
-
conteúdo.
|
|
63
|
-
|
|
64
|
-
## API JS
|
|
65
|
-
|
|
66
|
-
Nenhuma — 100% CSS. Para ordenação/filtro/paginação, use o
|
|
67
|
-
[DataTable](datatable.md).
|
|
68
|
-
|
|
69
|
-
## Tokens
|
|
70
|
-
|
|
71
|
-
`--fs-color-border`, `--fs-color-text`, `--fs-color-muted` (cabeçalho),
|
|
72
|
-
`--fs-color-subtle` (striped/hover), `--fs-alert-{nome}-bg`/`-text`
|
|
73
|
-
(variante de cor de estado).
|
|
74
|
-
|
|
75
|
-
## Exemplo
|
|
76
|
-
|
|
77
|
-
```html
|
|
78
|
-
<div class="fs-table-responsive">
|
|
79
|
-
<table class="fs-table fs-table-striped fs-table-bordered fs-table-sm">
|
|
80
|
-
<thead>
|
|
81
|
-
<tr><th scope="col">Nome</th><th scope="col">E-mail</th><th scope="col">Status</th></tr>
|
|
82
|
-
</thead>
|
|
83
|
-
<tbody>
|
|
84
|
-
<tr><td>Ana</td><td>ana@exemplo.com</td><td>Ativo</td></tr>
|
|
85
|
-
</tbody>
|
|
86
|
-
</table>
|
|
87
|
-
</div>
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Mockup: [laboratório do componente](../../mockup/content-data.html#table).
|
package/docs/components/tabs.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Tabs
|
|
2
|
-
|
|
3
|
-
Alterna painéis de conteúdo por clique/teclado. Reusa `.fs-nav-link`
|
|
4
|
-
([Navbar](navbar.md)) como item — o HTML e a navegação por teclado são os
|
|
5
|
-
mesmos em qualquer um dos 3 estilos visuais.
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<div class="fs-tabs" data-fs="tabs">
|
|
11
|
-
<a href="#" class="fs-nav-link is-active" data-fs-target="#perfil">Perfil</a>
|
|
12
|
-
<a href="#" class="fs-nav-link" data-fs-target="#seguranca">Segurança</a>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="fs-tab-content">
|
|
15
|
-
<div class="fs-tab-pane is-active" id="perfil">Conteúdo Perfil.</div>
|
|
16
|
-
<div class="fs-tab-pane" id="seguranca">Conteúdo Segurança.</div>
|
|
17
|
-
</div>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Anatomia
|
|
21
|
-
|
|
22
|
-
`.fs-tabs` (`data-fs="tabs"`) > `.fs-nav-link` (um por aba, `data-fs-target`
|
|
23
|
-
apontando pro painel) + `.fs-tab-content` > `.fs-tab-pane` (um por aba,
|
|
24
|
-
`id` batendo com o `data-fs-target` correspondente).
|
|
25
|
-
|
|
26
|
-
## Variações
|
|
27
|
-
|
|
28
|
-
- **Estilo**: linha (padrão, sublinhado na aba ativa), `.fs-tabs-pill`
|
|
29
|
-
(chip com fundo sólido na aba ativa, sem linha), `.fs-tabs-depth` (aba
|
|
30
|
-
ativa "sobe" com fundo igual ao conteúdo, sobre um backdrop neutro — como
|
|
31
|
-
aba de pasta).
|
|
32
|
-
- **Alinhamento**: `.fs-tabs-center`, `.fs-tabs-right`; sem sufixo =
|
|
33
|
-
esquerda (padrão). `.fs-tabs-fill` distribui os itens em largura igual.
|
|
34
|
-
- **Tamanho**: `.fs-tabs-sm`, `.fs-tabs-lg`; sem sufixo = padrão.
|
|
35
|
-
|
|
36
|
-
```html
|
|
37
|
-
<div class="fs-tabs fs-tabs-pill fs-tabs-center" data-fs="tabs">...</div>
|
|
38
|
-
<div class="fs-tabs fs-tabs-depth fs-tabs-fill fs-tabs-lg" data-fs="tabs">...</div>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Estados
|
|
42
|
-
|
|
43
|
-
- `.is-active` na aba e no painel correspondente — controlado pelo JS ao
|
|
44
|
-
trocar, ou definido no HTML inicial (exatamente uma aba/painel deve
|
|
45
|
-
começar ativo).
|
|
46
|
-
- `.is-disabled` na aba — não recebe clique nem entra na navegação por
|
|
47
|
-
seta.
|
|
48
|
-
|
|
49
|
-
## A11y
|
|
50
|
-
|
|
51
|
-
O JS aplica automaticamente ao inicializar: `role="tablist"` no `.fs-tabs`,
|
|
52
|
-
`role="tab"` + `aria-selected` + `tabindex` (roving: só a aba ativa tem
|
|
53
|
-
`tabindex="0"`) em cada `.fs-nav-link`, e `role="tabpanel"` +
|
|
54
|
-
`aria-labelledby` no painel correspondente. Nenhum desses atributos precisa
|
|
55
|
-
ser escrito manualmente no HTML.
|
|
56
|
-
|
|
57
|
-
Teclado (com foco numa aba): `ArrowLeft`/`ArrowRight` move e ativa a
|
|
58
|
-
aba anterior/próxima (pulando desabilitadas), `Home`/`End` vai pra
|
|
59
|
-
primeira/última.
|
|
60
|
-
|
|
61
|
-
Para separar navegação e ativação, use `data-tabs-activation="manual"` no
|
|
62
|
-
grupo. Nesse modo as setas apenas movem o foco; `Enter` ou `Espaço` ativa a
|
|
63
|
-
aba focada.
|
|
64
|
-
|
|
65
|
-
## API JS
|
|
66
|
-
|
|
67
|
-
Auto-init via `data-fs="tabs"`. `Tabs.getInstance(el)`.
|
|
68
|
-
|
|
69
|
-
| Método | Descrição |
|
|
70
|
-
|---|---|
|
|
71
|
-
| `show(tabEl)` | Ativa a aba `tabEl` (deve ser uma das `.fs-nav-link` do grupo) e o painel correspondente; desativa as demais. Não faz nada se `tabEl` já é a ativa. |
|
|
72
|
-
| `dispose()` | Remove os listeners de clique/teclado e desregistra a instância. |
|
|
73
|
-
|
|
74
|
-
| Evento | Cancelável | Quando |
|
|
75
|
-
|---|---|---|
|
|
76
|
-
| `fs:tab:changed` | Não | Depois de trocar de aba — `event.detail.target` traz o seletor (`data-fs-target`) da aba ativa. |
|
|
77
|
-
|
|
78
|
-
```js
|
|
79
|
-
const tabs = FokusStyles.Tabs.getInstance(document.getElementById("minhas-tabs"));
|
|
80
|
-
tabs.show(document.querySelector('[data-fs-target="#seguranca"]'));
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Tokens
|
|
84
|
-
|
|
85
|
-
Usa `--fs-color-border`, `--fs-color-primary` (linha/pill ativos),
|
|
86
|
-
`--fs-color-bg-subtle` (depth), `--fs-color-surface` (depth ativo),
|
|
87
|
-
`--fs-radius-sm`.
|
|
88
|
-
|
|
89
|
-
## Exemplo
|
|
90
|
-
|
|
91
|
-
```html
|
|
92
|
-
<div class="fs-tabs" data-fs="tabs">
|
|
93
|
-
<a href="#" class="fs-nav-link is-active" data-fs-target="#tab-perfil">Perfil</a>
|
|
94
|
-
<a href="#" class="fs-nav-link" data-fs-target="#tab-seguranca">Segurança</a>
|
|
95
|
-
<a href="#" class="fs-nav-link is-disabled" data-fs-target="#tab-notif">Notificações</a>
|
|
96
|
-
</div>
|
|
97
|
-
<div class="fs-tab-content">
|
|
98
|
-
<div class="fs-tab-pane is-active" id="tab-perfil">Conteúdo da aba Perfil.</div>
|
|
99
|
-
<div class="fs-tab-pane" id="tab-seguranca">Conteúdo da aba Segurança.</div>
|
|
100
|
-
<div class="fs-tab-pane" id="tab-notif">Conteúdo da aba Notificações (desabilitada).</div>
|
|
101
|
-
</div>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#tabs).
|
package/docs/components/tag.md
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
# Tag
|
|
2
|
-
|
|
3
|
-
Badge dismissível — reusa [Badge](badge.md) e `.fs-btn-close`
|
|
4
|
-
([Button](button.md)) mais o JS mínimo pra remover do DOM ao clicar no "x".
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<span class="fs-badge fs-tag" data-fs="tag">
|
|
10
|
-
Frontend
|
|
11
|
-
<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Frontend"></button>
|
|
12
|
-
</span>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Anatomia
|
|
16
|
-
|
|
17
|
-
`.fs-badge.fs-tag` (mesmo elemento, duas classes — Tag é um refinamento de
|
|
18
|
-
Badge, não um componente separado) contendo texto + `.fs-btn-close` com
|
|
19
|
-
`data-fs-dismiss="tag"`.
|
|
20
|
-
|
|
21
|
-
## Variações
|
|
22
|
-
|
|
23
|
-
- **Cor**: as mesmas de [Badge](badge.md) (`.fs-badge-{cor}`).
|
|
24
|
-
- **Tamanho**: apenas o tamanho padrão. Tags são controles compactos de
|
|
25
|
-
remoção; usar uma única densidade evita variações de alvo e de texto em
|
|
26
|
-
filtros e formulários.
|
|
27
|
-
- **Ícone inicial**: envolva um SVG de `fokus-styles/icons` em `.fs-tag-icon` antes
|
|
28
|
-
de `.fs-tag-label`. O ícone é decorativo (`aria-hidden="true"`) quando o
|
|
29
|
-
texto já descreve a tag.
|
|
30
|
-
- **Texto longo**: use `.fs-tag-truncate` na tag e `.fs-tag-label` no texto.
|
|
31
|
-
Defina `--fs-tag-max-inline-size` conforme o contexto; o texto integral
|
|
32
|
-
continua no DOM e pode ser exposto em `title` como apoio visual.
|
|
33
|
-
- **Agrupamento**: `.fs-tag-group` (flex + wrap) no contêiner pai,
|
|
34
|
-
une tags lado a lado com separadores translúcidos; o botão de remoção só é
|
|
35
|
-
revelado em hover ou foco, evitando ruído visual. A reserva simétrica de
|
|
36
|
-
espaço para o botão mantém o texto visualmente centralizado; o fundo da tag
|
|
37
|
-
inteira sinaliza o hover.
|
|
38
|
-
- **Protegida**: `.fs-tag-protected` desativa interação com `pointer-events:
|
|
39
|
-
none`; substitua o botão por `.fs-tag-lock` e o ícone `shield-check` de
|
|
40
|
-
`fokus-styles/icons` quando a tag não puder ser removida.
|
|
41
|
-
- **Overflow**: `.fs-tag-overflow` é um `<button>` compacto e transparente,
|
|
42
|
-
sem borda, com o ícone `tags` em `primary` centralizado; ele representa tags
|
|
43
|
-
não exibidas.
|
|
44
|
-
Conecte-o a um popover ou a uma lista expandida e mantenha `aria-expanded`
|
|
45
|
-
sincronizado com essa interface.
|
|
46
|
-
|
|
47
|
-
```html
|
|
48
|
-
<div class="fs-tag-group">
|
|
49
|
-
<span class="fs-badge fs-tag" data-fs="tag">Design<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover"></button></span>
|
|
50
|
-
<span class="fs-badge fs-tag" data-fs="tag">Frontend<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover"></button></span>
|
|
51
|
-
</div>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Estados
|
|
55
|
-
|
|
56
|
-
Botão de dispensa é transparente no repouso; tem hover (fundo sutil) e
|
|
57
|
-
`:active` (leve "afundar", feedback tátil antes da remoção assíncrona). Ao
|
|
58
|
-
receber foco pelo teclado, a tag inteira também recebe um anel de foco para
|
|
59
|
-
ficar distinguível em agrupamentos densos.
|
|
60
|
-
|
|
61
|
-
Para uma operação assíncrona, aplique `aria-busy="true"` e `.is-loading`, ou
|
|
62
|
-
use `Tag.setLoading(true)`. Inclua um `.fs-spinner` depois de `.fs-tag-label`:
|
|
63
|
-
o estado pendente usa fundo `warning`, texto e spinner pretos. O botão de
|
|
64
|
-
remoção é desabilitado até que o estado seja removido.
|
|
65
|
-
|
|
66
|
-
## A11y
|
|
67
|
-
|
|
68
|
-
- `.fs-btn-close` **precisa** de `aria-label` descritivo (ex.: "Remover tag
|
|
69
|
-
Frontend", não só "Remover") — é um botão só-ícone.
|
|
70
|
-
- A remoção só acontece ao clicar no botão de fechar, nunca ao clicar na
|
|
71
|
-
tag inteira — evita remoção acidental.
|
|
72
|
-
- Para tags truncadas, mantenha a string completa dentro de `.fs-tag-label`;
|
|
73
|
-
ela continua disponível para tecnologias assistivas. `title` é apenas uma
|
|
74
|
-
ajuda adicional para ponteiro.
|
|
75
|
-
- O botão `.fs-tag-overflow` requer um nome acessível descritivo, como
|
|
76
|
-
`aria-label="Mostrar mais 3 tags"`.
|
|
77
|
-
|
|
78
|
-
## API JS
|
|
79
|
-
|
|
80
|
-
Auto-init via `data-fs="tag"`. `Tag.getInstance(el)`.
|
|
81
|
-
|
|
82
|
-
| Método | Descrição |
|
|
83
|
-
|---|---|
|
|
84
|
-
| `dismiss()` | Dispara `fs:tag:dismissed` (cancelável); se não cancelado, remove o elemento do DOM e retorna `true`. Retorna `false` se estiver carregando ou se o evento for cancelado. |
|
|
85
|
-
| `setLoading(loading)` | Alterna `.is-loading`, `aria-busy` e o estado desabilitado do botão de remoção. |
|
|
86
|
-
| `dispose()` | Remove o listener de clique e desregistra a instância (não remove o elemento). |
|
|
87
|
-
|
|
88
|
-
| Evento | Cancelável | Quando |
|
|
89
|
-
|---|---|---|
|
|
90
|
-
| `fs:tag:dismissed` | Sim | Antes de remover — `event.preventDefault()` cancela a remoção. |
|
|
91
|
-
|
|
92
|
-
## Tokens
|
|
93
|
-
|
|
94
|
-
Usa os tokens de [Badge](badge.md). Sem tokens de componente próprios.
|
|
95
|
-
|
|
96
|
-
## Exemplo
|
|
97
|
-
|
|
98
|
-
```html
|
|
99
|
-
<div class="fs-tag-group">
|
|
100
|
-
<span class="fs-badge fs-badge-primary fs-tag" data-fs="tag">
|
|
101
|
-
Urgente
|
|
102
|
-
<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Urgente"></button>
|
|
103
|
-
</span>
|
|
104
|
-
<span class="fs-badge fs-badge-danger fs-tag" data-fs="tag">
|
|
105
|
-
Bloqueado
|
|
106
|
-
<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Bloqueado"></button>
|
|
107
|
-
</span>
|
|
108
|
-
</div>
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
```html
|
|
112
|
-
<span class="fs-badge fs-tag fs-tag-truncate" style="--fs-tag-max-inline-size: 20rem;" data-fs="tag">
|
|
113
|
-
<span class="fs-tag-icon" aria-hidden="true"><!-- SVG de fokus-styles/icons --></span>
|
|
114
|
-
<span class="fs-tag-label">Revisão de acessibilidade e compatibilidade entre navegadores</span>
|
|
115
|
-
<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Revisão de acessibilidade e compatibilidade entre navegadores"></button>
|
|
116
|
-
</span>
|
|
117
|
-
|
|
118
|
-
<button type="button" class="fs-badge fs-tag fs-tag-overflow" aria-label="Mostrar mais 3 tags" aria-expanded="false">
|
|
119
|
-
<svg class="fs-icon" aria-hidden="true"><!-- SVG tags de fokus-styles/icons --></svg>
|
|
120
|
-
</button>
|
|
121
|
-
|
|
122
|
-
<span class="fs-badge fs-tag is-loading" data-fs="tag" aria-busy="true">
|
|
123
|
-
<span class="fs-tag-label">Salvando</span>
|
|
124
|
-
<span class="fs-spinner" aria-hidden="true"></span>
|
|
125
|
-
<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Salvando" disabled></button>
|
|
126
|
-
</span>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#tag).
|