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
package/docs/README.md
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
# Documentação do Fokus Styles
|
|
2
|
-
|
|
3
|
-
Esta documentação acompanha o Fokus Styles do primeiro uso à referência técnica.
|
|
4
|
-
Comece pelo caminho recomendado, consulte um guia quando precisar adaptar o
|
|
5
|
-
sistema e use as páginas de componentes como contratos de HTML, CSS, JavaScript
|
|
6
|
-
e acessibilidade.
|
|
7
|
-
|
|
8
|
-
## Caminho recomendado
|
|
9
|
-
|
|
10
|
-
1. [Instalação](getting-started/installation.md) — pacotes, CDN, bundles,
|
|
11
|
-
fontes e importação via Sass.
|
|
12
|
-
2. [Formas de uso](getting-started/usage.md) — nomenclatura, auto-init,
|
|
13
|
-
eventos e API comum dos componentes interativos.
|
|
14
|
-
3. [Theming](guides/theming.md) — tokens, marcas, Sass e customização em
|
|
15
|
-
runtime.
|
|
16
|
-
4. [Acessibilidade](guides/accessibility.md) — foco, teclado, ARIA, contraste
|
|
17
|
-
e movimento reduzido.
|
|
18
|
-
5. [Estabilidade e roadmap](reference/stability.md) — maturidade e escopo de
|
|
19
|
-
cada grupo de recursos.
|
|
20
|
-
|
|
21
|
-
## Guias
|
|
22
|
-
|
|
23
|
-
- [Dark mode](guides/dark-mode.md)
|
|
24
|
-
- [Layout avançado](guides/layout-advanced.md)
|
|
25
|
-
- [Ícones](guides/icons.md)
|
|
26
|
-
- [Gráficos](guides/charts.md)
|
|
27
|
-
- [Utilitários de impressão](guides/print.md)
|
|
28
|
-
- [Migração para v1](guides/migration-v1.md)
|
|
29
|
-
- [Migração de outro framework](guides/migration-external.md)
|
|
30
|
-
|
|
31
|
-
## Componentes
|
|
32
|
-
|
|
33
|
-
### Núcleo essencial
|
|
34
|
-
|
|
35
|
-
[Button](components/button.md) · [Card](components/card.md) · [Alert](components/alert.md) ·
|
|
36
|
-
[Badge](components/badge.md) · [Table](components/table.md) · [Input](components/input.md) ·
|
|
37
|
-
[Select](components/select.md) · [Checkbox](components/checkbox.md) · [Radio](components/radio.md) ·
|
|
38
|
-
[Switch](components/switch.md) · [Navbar](components/navbar.md) · [Dropdown](components/dropdown.md) ·
|
|
39
|
-
[Tabs](components/tabs.md) · [Accordion](components/accordion.md) · [Modal](components/modal.md) ·
|
|
40
|
-
[Toast](components/toast.md) · [Pagination](components/pagination.md) · [Breadcrumb](components/breadcrumb.md)
|
|
41
|
-
|
|
42
|
-
### Extensões de interface
|
|
43
|
-
|
|
44
|
-
[Collapse](components/collapse.md) · [Offcanvas](components/offcanvas.md) · [Tooltip](components/tooltip.md) ·
|
|
45
|
-
[Popover](components/popover.md) · [Stepper](components/stepper.md) · [Tag](components/tag.md) ·
|
|
46
|
-
[Rating](components/rating.md) · [Segmented Control](components/segmented-control.md) ·
|
|
47
|
-
[Empty State](components/empty-state.md) · [Skeleton](components/skeleton.md) ·
|
|
48
|
-
[Spinner & Progress](components/progress.md) · [Tile](components/tile.md)
|
|
49
|
-
|
|
50
|
-
### Recursos avançados
|
|
51
|
-
|
|
52
|
-
[Combobox](components/combobox.md) · [Datepicker](components/datepicker.md) · [DataTable](components/datatable.md) ·
|
|
53
|
-
[Tree View](components/tree-view.md) · [Nested Menu](components/nested-menu.md) ·
|
|
54
|
-
[Command Palette](components/command-palette.md) · [Carousel](components/carousel.md) ·
|
|
55
|
-
[File Upload](components/file-upload.md) · [Upload avançado](components/file-upload-advanced.md) ·
|
|
56
|
-
[Timeline](components/timeline.md)
|
|
57
|
-
|
|
58
|
-
Cada página de componente segue o contrato editorial: visão geral, anatomia,
|
|
59
|
-
variações, estados, acessibilidade, API JS quando aplicável, tokens, exemplo e
|
|
60
|
-
limitações. Os exemplos funcionais ficam nos [laboratórios de
|
|
61
|
-
`mockup/`](../mockup/README.md); o [`kitchen-sink.html`](../mockup/kitchen-sink.html)
|
|
62
|
-
é um smoke test visual e não substitui a referência detalhada de cada seção.
|
|
63
|
-
|
|
64
|
-
## Referência técnica
|
|
65
|
-
|
|
66
|
-
- [Design tokens](reference/design-tokens.md)
|
|
67
|
-
- [Arquitetura SCSS](reference/scss-architecture.md)
|
|
68
|
-
- [Suporte a navegadores](reference/browser-support.md)
|
|
69
|
-
- [Matriz de acessibilidade](reference/accessibility-matrix.md)
|
|
70
|
-
- [Relatório de contraste](reference/contrast-report.md)
|
|
71
|
-
- [Baseline de tamanho](reference/size-baseline.json)
|
|
72
|
-
- [Definições do projeto](reference/definitions.md)
|
|
73
|
-
- [Estabilidade e roadmap](reference/stability.md)
|
|
74
|
-
|
|
75
|
-
## Ecossistema, templates e contribuição
|
|
76
|
-
|
|
77
|
-
Os recursos opcionais do mesmo pacote estão documentados nos guias de
|
|
78
|
-
[ícones](guides/icons.md), [theming](guides/theming.md) e
|
|
79
|
-
[migração para Fokus Styles](guides/migration-clarus-to-fokus.md). Os templates em [`mockup/templates/`](../mockup/templates)
|
|
80
|
-
mostram combinações completas para landing page, autenticação, dashboard e
|
|
81
|
-
administração.
|
|
82
|
-
|
|
83
|
-
Leia o [guia de contribuição](contributing/contributing.md) antes de alterar
|
|
84
|
-
SCSS, JavaScript, documentação ou snapshots. Uma mudança pública deve manter
|
|
85
|
-
implementação, exemplo, documentação e testes alinhados; `npm run docs:check`
|
|
86
|
-
verifica parte desse contrato automaticamente.
|
package/docs/comparison.md
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# Fokus Styles vs Bootstrap vs Tailwind CSS
|
|
2
|
-
|
|
3
|
-
Esta página existe para ajudar quem está avaliando o FokusStyles a decidir com
|
|
4
|
-
dados, não com marketing. Os três frameworks resolvem o mesmo problema
|
|
5
|
-
(estilizar uma interface web) com filosofias diferentes — nenhum dos três é
|
|
6
|
-
estritamente "melhor", e o objetivo aqui é deixar os trade-offs explícitos
|
|
7
|
-
para você decidir qual encaixa no seu projeto.
|
|
8
|
-
|
|
9
|
-
> **Metodologia.** Todo número abaixo é público e reproduzível: versões
|
|
10
|
-
> fixadas, arquivos publicados oficialmente (npm/CDN), medidos com o mesmo
|
|
11
|
-
> método usado no próprio CI do FokusStyles (`gzip`, nível de compressão 9 —
|
|
12
|
-
> ver `scripts/size.mjs`). Onde um dado não pôde ser medido de forma
|
|
13
|
-
> justa (caso do Tailwind, explicado abaixo), isso é declarado
|
|
14
|
-
> explicitamente em vez de omitido ou estimado. Fontes ao final da página.
|
|
15
|
-
|
|
16
|
-
## Filosofia e arquitetura
|
|
17
|
-
|
|
18
|
-
| | Fokus Styles | Bootstrap | Tailwind CSS |
|
|
19
|
-
|---|---|---|---|
|
|
20
|
-
| Paradigma | Componentes prontos (`.fs-btn`, `.fs-card`...) **+** utilitários atômicos (`.fs-u-*`) | Componentes prontos (`.btn`, `.card`...) + utilitários auxiliares | Utilitários atômicos puros — sem componentes visuais prontos |
|
|
21
|
-
| Passo de build obrigatório | Não — CSS/JS prontos via `<link>`/`<script>`, Sass é opcional | Não — CSS/JS prontos via CDN, Sass é opcional | **Sim** — motor JIT precisa escanear seu HTML/JS em build time (CLI ou PostCSS) para gerar as classes usadas |
|
|
22
|
-
| JS de componentes incluso | Sim — vanilla JS próprio (dropdown, modal, datepicker, datatable...) | Sim — vanilla JS próprio desde a v5 (antes exigia jQuery) | **Não** — é um framework de CSS puro; qualquer interatividade (abrir modal, dropdown) é responsabilidade do seu próprio JS |
|
|
23
|
-
| Motor de cor | Tokens semânticos em OKLCH (`color-mix()`) | Sass `map` + variáveis CSS (sRGB) | Paleta de utilitários fixa (sRGB), customizável via config |
|
|
24
|
-
| Tema escuro | Nativo desde o dia 1 — ver seção dedicada abaixo | Nativo desde a 5.3 (2023) | Requer variante `dark:` por utilidade — ver seção dedicada abaixo |
|
|
25
|
-
| Alvo de navegador | Moderno (piso Safari/iOS 16.4) — [detalhes](reference/browser-support.md) | Amplo (inclui navegadores mais antigos) | Depende do CSS gerado; suporte amplo por padrão |
|
|
26
|
-
|
|
27
|
-
## Tamanho de bundle (gzip)
|
|
28
|
-
|
|
29
|
-
Medido localmente a partir dos arquivos **publicados oficialmente** de
|
|
30
|
-
cada projeto (nível de compressão gzip 9, igual ao gate de CI do FokusStyles).
|
|
31
|
-
|
|
32
|
-
| Distribuição | Arquivo medido | Bruto | Gzip |
|
|
33
|
-
|---|---|---:|---:|
|
|
34
|
-
| **Fokus Styles** — bundle completo (todos os componentes) | `fokus.min.css` (medido em 2026-07-08) | 115.045 B | **18.607 B** (~18,2 KB) |
|
|
35
|
-
| **FokusStyles JS** — bundle completo (todos os componentes) | `fokus.min.js` (medido em 2026-07-08) | 89.458 B | **18.996 B** (~18,6 KB) |
|
|
36
|
-
| **Bootstrap CSS** — bundle completo | `bootstrap.min.css@5.3.8` (jsDelivr) | 232.111 B | **30.786 B** (~30,1 KB) |
|
|
37
|
-
| **Bootstrap JS** — bundle completo (inclui Popper) | `bootstrap.bundle.min.js@5.3.8` (jsDelivr) | 80.496 B | **23.707 B** (~23,2 KB) |
|
|
38
|
-
| **Tailwind CSS** — bundle "completo" | Não existe mais desde a v3 (ver nota) | — | ver nota |
|
|
39
|
-
|
|
40
|
-
**Nota sobre o Tailwind:** desde a v3 o Tailwind não publica um bundle CSS
|
|
41
|
-
fixo — o motor JIT gera só as classes efetivamente usadas no seu projeto, então
|
|
42
|
-
"o tamanho do Tailwind" não é uma pergunta com resposta única do jeito que
|
|
43
|
-
é para FokusStyles/Bootstrap (comparar um número fixo contra o deles seria
|
|
44
|
-
enganoso). Os dois números públicos que o próprio time do Tailwind
|
|
45
|
-
divulga, para contexto:
|
|
46
|
-
|
|
47
|
-
- **Catálogo completo sem purge** (todas as utilidades geradas, cenário
|
|
48
|
-
que não existe em produção): 3.645,2 KB descomprimido / **294,2 KB**
|
|
49
|
-
gzip / 72,8 KB brotli — número da própria documentação da v2 (a v3+ não
|
|
50
|
-
publica mais esse número porque não gera mais um build "completo" por
|
|
51
|
-
padrão).
|
|
52
|
-
- **Build de produção típico, já purgado**: "menos de 10 KB, mesmo em
|
|
53
|
-
projetos grandes", segundo a documentação oficial — com o exemplo do
|
|
54
|
-
Netflix Top 10 citado em **6,5 KB**.
|
|
55
|
-
|
|
56
|
-
Ou seja: o Tailwind tende a ficar **menor** que FokusStyles/Bootstrap em produção
|
|
57
|
-
(porque só embarca o que você de fato usa), mas ao custo de exigir um passo
|
|
58
|
-
de build por projeto — o número final depende do seu HTML, não é uma
|
|
59
|
-
constante do framework.
|
|
60
|
-
|
|
61
|
-
## Dependências
|
|
62
|
-
|
|
63
|
-
| | Fokus Styles | Bootstrap | Tailwind CSS |
|
|
64
|
-
|---|---|---|---|
|
|
65
|
-
| Dependência de runtime | Nenhuma | Nenhuma no CSS; JS de dropdown/tooltip/popover depende do **Popper** (já embarcado em `bootstrap.bundle.js`) | Nenhuma (não há JS de componente) |
|
|
66
|
-
| Ferramenta de build necessária | Nenhuma (Sass só se você quiser customizar tokens) | Nenhuma (Sass só se você quiser customizar) | **Sim** — CLI própria ou plugin PostCSS, sempre |
|
|
67
|
-
| jQuery | Nunca precisou | Não precisa desde a v5 (precisava até a v4) | Não se aplica (sem JS de componente) |
|
|
68
|
-
|
|
69
|
-
## Tema escuro nativo
|
|
70
|
-
|
|
71
|
-
| | Fokus Styles | Bootstrap | Tailwind CSS |
|
|
72
|
-
|---|---|---|---|
|
|
73
|
-
| Mecanismo | Atributo `data-theme="dark"`, redefine tokens semânticos uma vez — todo componente já herda via `var()` | Atributo `data-bs-theme="dark"` (desde a 5.3), mesmo princípio de redefinição de tokens | Variante `dark:` aplicada **individualmente em cada classe utilitária** (`bg-white dark:bg-gray-800`); por padrão segue `prefers-color-scheme`, alternância manual exige configurar um seletor customizado |
|
|
74
|
-
| Custo de adoção | Um atributo, zero JS obrigatório | Um atributo, zero JS obrigatório | Precisa duplicar `dark:*` em cada utilidade tocada pelo tema — sem redefinição central de tokens |
|
|
75
|
-
| Toggle pronto | Não fornece um widget de toggle — [guia com o snippet de ~10 linhas](guides/dark-mode.md) | Não fornece um widget de toggle | Não fornece um widget de toggle |
|
|
76
|
-
|
|
77
|
-
## Suporte a navegadores e features modernas
|
|
78
|
-
|
|
79
|
-
O FokusStyles mira um alvo deliberadamente mais moderno que o Bootstrap (que
|
|
80
|
-
mantém compatibilidade mais ampla). Isso é uma troca real — ver a matriz
|
|
81
|
-
completa de feature × navegador mínimo × fallback em
|
|
82
|
-
[`reference/browser-support.md`](reference/browser-support.md) em vez de
|
|
83
|
-
repetir a tabela aqui.
|
|
84
|
-
|
|
85
|
-
## Migrando de um para o outro
|
|
86
|
-
|
|
87
|
-
Já decidiu migrar? [`guides/migration-external.md`](guides/migration-external.md)
|
|
88
|
-
tem a tabela de equivalência de classes/componentes e o que não migra 1:1
|
|
89
|
-
(API JS, escala de espaçamento, grid flexbox vs. CSS Grid).
|
|
90
|
-
|
|
91
|
-
## Benchmarks de performance ao vivo
|
|
92
|
-
|
|
93
|
-
> ⏳ **Pendente de metodologia.** Esta página não inclui benchmarks de
|
|
94
|
-
> performance em runtime (tempo de parse/render, Core Web Vitals em uma
|
|
95
|
-
> página real, etc.) — não por esquecimento, mas porque um benchmark
|
|
96
|
-
> justo desse tipo depende de metodologia controlada (mesmo hardware,
|
|
97
|
-
> mesma página de teste, mesma versão de cada framework, sem viés de
|
|
98
|
-
> quem escreve o teste) que ainda não foi definida. Preferimos deixar
|
|
99
|
-
> isso marcado como pendente a publicar números que pareçam rigorosos
|
|
100
|
-
> sem ser.
|
|
101
|
-
|
|
102
|
-
## Quando cada um costuma encaixar melhor
|
|
103
|
-
|
|
104
|
-
- **Fokus Styles**: você quer componentes prontos (não só utilitários) e
|
|
105
|
-
dark mode nativo, sem passo de build obrigatório, mirando navegadores
|
|
106
|
-
modernos, e o pacote publicado ligeiramente maior que um Tailwind
|
|
107
|
-
purgado é aceitável em troca de zero configuração.
|
|
108
|
-
- **Bootstrap**: você precisa de suporte a navegadores mais antigos que
|
|
109
|
-
o piso do FokusStyles, ou já tem um ecossistema/time acostumado ao
|
|
110
|
-
Bootstrap.
|
|
111
|
-
- **Tailwind CSS**: você quer o menor CSS possível em produção e não se
|
|
112
|
-
importa em escrever/ler classes utilitárias longas por elemento, tem
|
|
113
|
-
um passo de build no fluxo do projeto, e prefere montar seus próprios
|
|
114
|
-
componentes (ou usar uma lib de componentes por cima, tipo shadcn/ui).
|
|
115
|
-
|
|
116
|
-
## Fontes
|
|
117
|
-
|
|
118
|
-
- [Bootstrap — Introdução (dependência do Popper)](https://getbootstrap.com/docs/5.3/getting-started/introduction/)
|
|
119
|
-
- [Bootstrap — Color modes (`data-bs-theme`)](https://getbootstrap.com/docs/5.3/customize/color-modes/)
|
|
120
|
-
- `bootstrap@5.3.8` — `dist/css/bootstrap.min.css` e `dist/js/bootstrap.bundle.min.js`, via jsDelivr (medido em 2026-07-08)
|
|
121
|
-
- [Tailwind CSS v3 — Optimizing for Production (build típico <10 KB, exemplo Netflix)](https://v3.tailwindcss.com/docs/optimizing-for-production)
|
|
122
|
-
- [Tailwind CSS v2 — Optimizing for Production (build completo sem purge)](https://v2.tailwindcss.com/docs/optimizing-for-production)
|
|
123
|
-
- [Tailwind CSS — Dark Mode (variante `dark:`)](https://tailwindcss.com/docs/dark-mode)
|
|
124
|
-
- [`docs/reference/size-baseline.json`](reference/size-baseline.json) — baseline de tamanho do FokusStyles (medido em 2026-07-07)
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Accordion
|
|
2
|
-
|
|
3
|
-
Grupo de painéis expansíveis, com controle de exclusividade (só um aberto
|
|
4
|
-
por vez, ou vários) — construído sobre a mesma animação de altura do
|
|
5
|
-
[Collapse](collapse.md).
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<div class="fs-accordion" data-fs="accordion">
|
|
11
|
-
<div class="fs-accordion-item">
|
|
12
|
-
<h3 class="fs-accordion-header">
|
|
13
|
-
<button type="button" class="fs-accordion-button" aria-expanded="true">Pergunta 1</button>
|
|
14
|
-
</h3>
|
|
15
|
-
<div class="fs-accordion-collapse">
|
|
16
|
-
<div class="fs-accordion-body">Resposta 1.</div>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="fs-accordion-item">
|
|
20
|
-
<h3 class="fs-accordion-header">
|
|
21
|
-
<button type="button" class="fs-accordion-button" aria-expanded="false">Pergunta 2</button>
|
|
22
|
-
</h3>
|
|
23
|
-
<div class="fs-accordion-collapse">
|
|
24
|
-
<div class="fs-accordion-body">Resposta 2.</div>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
`data-fs="accordion"` vai no contêiner do grupo (não em cada item) — os
|
|
31
|
-
botões internos são descobertos automaticamente.
|
|
32
|
-
|
|
33
|
-
## Anatomia
|
|
34
|
-
|
|
35
|
-
`.fs-accordion` > `.fs-accordion-item` (um por painel) > `.fs-accordion-header`
|
|
36
|
-
(`<h3>`, envolve o botão — nível de heading ajustável conforme a hierarquia
|
|
37
|
-
da sua página) > `.fs-accordion-button` (seta gerada via `::after`,
|
|
38
|
-
rotaciona ao abrir) + `.fs-accordion-collapse` > `.fs-accordion-body`.
|
|
39
|
-
|
|
40
|
-
## Variações
|
|
41
|
-
|
|
42
|
-
`data-multiple="true"` no `.fs-accordion` permite vários painéis abertos
|
|
43
|
-
simultaneamente; sem o atributo (padrão), abrir um fecha os demais do
|
|
44
|
-
grupo.
|
|
45
|
-
|
|
46
|
-
```html
|
|
47
|
-
<div class="fs-accordion" data-fs="accordion" data-multiple="true">...</div>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Estados
|
|
51
|
-
|
|
52
|
-
`aria-expanded="true"/"false"` no botão define o estado inicial de cada
|
|
53
|
-
item (exatamente como no HTML — o JS lê e sincroniza a partir daí, não
|
|
54
|
-
força todos fechados).
|
|
55
|
-
|
|
56
|
-
## A11y
|
|
57
|
-
|
|
58
|
-
Use `.fs-accordion-flush` para remover bordas externas. Com `data-fs-always-open="true"`,
|
|
59
|
-
um painel aberto não pode ser fechado isoladamente.
|
|
60
|
-
|
|
61
|
-
`aria-controls`/`aria-expanded` (botão) e `role="region"`/
|
|
62
|
-
`aria-labelledby` (painel) aplicados automaticamente. Cada botão é um
|
|
63
|
-
`<button>` nativo dentro de um heading (`<h3>`) — navegável por `Tab` e
|
|
64
|
-
ativável por `Enter`/`Space` sem JS extra. Respeita
|
|
65
|
-
`prefers-reduced-motion` (herdado do Collapse).
|
|
66
|
-
|
|
67
|
-
## API JS
|
|
68
|
-
|
|
69
|
-
Auto-init via `data-fs="accordion"` **no contêiner do grupo**.
|
|
70
|
-
`Accordion.getInstance(el)`.
|
|
71
|
-
|
|
72
|
-
| Método | Descrição |
|
|
73
|
-
|---|---|
|
|
74
|
-
| `dispose()` | Remove os listeners de todos os botões do grupo e desregistra a instância. |
|
|
75
|
-
|
|
76
|
-
Não há `show()`/`hide()` no grupo — a interação é sempre pelo clique no
|
|
77
|
-
botão de cada item (ou disparando o evento de clique programaticamente).
|
|
78
|
-
|
|
79
|
-
| Evento (no botão do item) | Cancelável | Quando |
|
|
80
|
-
|---|---|---|
|
|
81
|
-
| `fs:accordion:shown` | Não | Depois que o painel termina de expandir. |
|
|
82
|
-
| `fs:accordion:hidden` | Não | Depois que o painel termina de recolher. |
|
|
83
|
-
|
|
84
|
-
## Tokens
|
|
85
|
-
|
|
86
|
-
`--fs-color-border`, `--fs-color-surface`, `--fs-color-subtle` (hover),
|
|
87
|
-
`--fs-color-text`, `--fs-radius-md`.
|
|
88
|
-
|
|
89
|
-
## Exemplo
|
|
90
|
-
|
|
91
|
-
```html
|
|
92
|
-
<div class="fs-accordion" data-fs="accordion">
|
|
93
|
-
<div class="fs-accordion-item">
|
|
94
|
-
<h3 class="fs-accordion-header">
|
|
95
|
-
<button type="button" class="fs-accordion-button" aria-expanded="true">O que é o Fokus Styles?</button>
|
|
96
|
-
</h3>
|
|
97
|
-
<div class="fs-accordion-collapse">
|
|
98
|
-
<div class="fs-accordion-body">Um framework CSS open source, HTML/CSS/JS nativo, zero dependências.</div>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#accordion).
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
# Alert Dialog (Confirm)
|
|
2
|
-
|
|
3
|
-
Diálogo de confirmação, 100% programático — ao contrário de todo outro
|
|
4
|
-
componente interativo (auto-init declarativo via `data-fs`), este é
|
|
5
|
-
montado na hora por `FokusStyles.confirm()`, sem marcação pré-declarada na
|
|
6
|
-
página. Reaproveita [Modal](modal.md) internamente (foco/teclado/overlay
|
|
7
|
-
já prontos).
|
|
8
|
-
|
|
9
|
-
## Visão geral
|
|
10
|
-
|
|
11
|
-
```js
|
|
12
|
-
const confirmado = await FokusStyles.confirm({
|
|
13
|
-
title: "Excluir item?",
|
|
14
|
-
message: "Essa ação não pode ser desfeita.",
|
|
15
|
-
confirmText: "Excluir",
|
|
16
|
-
cancelText: "Cancelar",
|
|
17
|
-
variant: "danger",
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
if (confirmado) {
|
|
21
|
-
// ação
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
`FokusStyles.confirm()` retorna uma `Promise<boolean>` — `true` se confirmado,
|
|
26
|
-
`false` se cancelado (botão Cancelar, `Escape`, ou clique fora).
|
|
27
|
-
|
|
28
|
-
## Anatomia
|
|
29
|
-
|
|
30
|
-
Gerada internamente: `.fs-modal.fs-alert-dialog` >
|
|
31
|
-
`.fs-modal-dialog.fs-modal-sm` > `.fs-modal-content` > `.fs-modal-body`
|
|
32
|
-
(título + `.fs-alert-dialog-message`, se `message` foi passado) +
|
|
33
|
-
`.fs-modal-footer` (botão Cancelar + botão de ação, na cor de `variant`).
|
|
34
|
-
Não há HTML pra escrever — só a chamada JS.
|
|
35
|
-
|
|
36
|
-
## Variações
|
|
37
|
-
|
|
38
|
-
`variant` aceita qualquer cor de tema (`primary`, `secondary`, `success`,
|
|
39
|
-
`warning`, `danger` — padrão, `info`) — vira `.fs-btn-{variant}` no botão
|
|
40
|
-
de confirmação.
|
|
41
|
-
|
|
42
|
-
```js
|
|
43
|
-
await FokusStyles.confirm({ title: "Sair sem salvar?", variant: "warning" });
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Estados
|
|
47
|
-
|
|
48
|
-
Nenhum estado próprio — é um fluxo de uma chamada só (abre já com foco
|
|
49
|
-
preso, resolve e desmonta ao confirmar/cancelar).
|
|
50
|
-
|
|
51
|
-
## A11y
|
|
52
|
-
|
|
53
|
-
Herda focus trap, `Escape` e clique-fora do [Modal](modal.md). Ao resolver
|
|
54
|
-
(confirmar ou cancelar), o foco volta automaticamente pro elemento que
|
|
55
|
-
tinha foco antes de `FokusStyles.confirm()` ser chamado (normalmente o botão
|
|
56
|
-
que disparou a ação).
|
|
57
|
-
|
|
58
|
-
## API JS
|
|
59
|
-
|
|
60
|
-
| Função | Retorno |
|
|
61
|
-
|---|---|
|
|
62
|
-
| `FokusStyles.confirm(options)` | `Promise<boolean>` |
|
|
63
|
-
|
|
64
|
-
| Opção | Padrão | Descrição |
|
|
65
|
-
|---|---|---|
|
|
66
|
-
| `title` | `"Tem certeza?"` | Título do diálogo. |
|
|
67
|
-
| `message` | `""` | Texto de apoio abaixo do título (omitido se vazio). |
|
|
68
|
-
| `confirmText` | `"Confirmar"` | Texto do botão de ação. |
|
|
69
|
-
| `cancelText` | `"Cancelar"` | Texto do botão de cancelar. |
|
|
70
|
-
| `variant` | `"danger"` | Cor do botão de ação (qualquer cor de tema). |
|
|
71
|
-
|
|
72
|
-
Sem `getInstance()`/`dispose()` — cada chamada cria e desmonta seu próprio
|
|
73
|
-
diálogo; não há instância persistente pra gerenciar.
|
|
74
|
-
|
|
75
|
-
## Tokens
|
|
76
|
-
|
|
77
|
-
Os mesmos do [Modal](modal.md) — sem tokens próprios além de
|
|
78
|
-
`--fs-alert-dialog-message` usar `--fs-color-muted`/`$font-size-sm`.
|
|
79
|
-
|
|
80
|
-
## Exemplo
|
|
81
|
-
|
|
82
|
-
```html
|
|
83
|
-
<button type="button" class="fs-btn fs-btn-danger" id="btn-excluir">Excluir conta</button>
|
|
84
|
-
<script>
|
|
85
|
-
document.getElementById("btn-excluir").addEventListener("click", async () => {
|
|
86
|
-
const ok = await FokusStyles.confirm({
|
|
87
|
-
title: "Excluir conta?",
|
|
88
|
-
message: "Todos os seus dados serão apagados permanentemente.",
|
|
89
|
-
confirmText: "Excluir conta",
|
|
90
|
-
variant: "danger",
|
|
91
|
-
});
|
|
92
|
-
if (ok) {
|
|
93
|
-
// prosseguir com a exclusão
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
</script>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Mockup: [laboratório do componente](../../mockup/overlays-commands.html#alert-dialog).
|
package/docs/components/alert.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Alert
|
|
2
|
-
|
|
3
|
-
Mensagem contextual persistente para informar, confirmar, orientar ou explicar
|
|
4
|
-
um erro relacionado à região da página. Alert é CSS-only; para feedback
|
|
5
|
-
transitório controlado por JavaScript, use [Toast](toast.md).
|
|
6
|
-
|
|
7
|
-
## Uso mínimo
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<div class="fs-alert fs-alert-success">Operação concluída com sucesso.</div>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
O uso antigo continua válido. Variantes: `.fs-alert-primary`,
|
|
14
|
-
`.fs-alert-secondary`, `.fs-alert-success`, `.fs-alert-warning`,
|
|
15
|
-
`.fs-alert-danger` e `.fs-alert-info`.
|
|
16
|
-
|
|
17
|
-
## Visão geral
|
|
18
|
-
|
|
19
|
-
Alert permanece visível no contexto da página até que a aplicação resolva a
|
|
20
|
-
condição ou faça seu fechamento manual. Não é substituto de Toast nem de
|
|
21
|
-
Alert Dialog.
|
|
22
|
-
|
|
23
|
-
## Anatomia opcional
|
|
24
|
-
|
|
25
|
-
Os slots abaixo são opcionais. O ícone deve ser decorativo quando o texto já
|
|
26
|
-
comunica o estado.
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<div class="fs-alert fs-alert-danger" role="alert">
|
|
30
|
-
<span class="fs-alert-icon" aria-hidden="true"><svg class="fs-icon" aria-hidden="true"><!-- ícone --></svg></span>
|
|
31
|
-
<div class="fs-alert-content">
|
|
32
|
-
<h3 class="fs-alert-heading">Não foi possível salvar</h3>
|
|
33
|
-
<p class="fs-alert-text">Verifique os campos destacados e tente novamente.</p>
|
|
34
|
-
<div class="fs-alert-actions">
|
|
35
|
-
<button type="button" class="fs-btn fs-btn-danger fs-btn-sm">Tentar novamente</button>
|
|
36
|
-
<a class="fs-alert-link" href="#detalhes">Ver detalhes</a>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
<button type="button" class="fs-btn-close fs-alert-close" aria-label="Fechar aviso"></button>
|
|
40
|
-
</div>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Classes: `.fs-alert-icon`, `.fs-alert-content`, `.fs-alert-heading`,
|
|
44
|
-
`.fs-alert-text`, `.fs-alert-actions`, `.fs-alert-link` e `.fs-alert-close`.
|
|
45
|
-
O fechamento é apenas composição visual; a aplicação liga sua própria lógica.
|
|
46
|
-
|
|
47
|
-
Para mensagens relacionadas, use `.fs-alert-group` no contêiner. A variante
|
|
48
|
-
`.fs-alert-inline` reduz a densidade para mensagens próximas a campos ou
|
|
49
|
-
regiões compactas. Para operações assíncronas, aplique `aria-busy="true"` e
|
|
50
|
-
componha um `.fs-spinner` decorativo; o Alert não desabilita ações nem gerencia
|
|
51
|
-
o término da operação automaticamente.
|
|
52
|
-
|
|
53
|
-
## Estados
|
|
54
|
-
|
|
55
|
-
Não há estados JavaScript próprios. Links, botões e o fechamento visual usam
|
|
56
|
-
seus estados nativos de foco, hover e ativação.
|
|
57
|
-
|
|
58
|
-
## Layout e tokens
|
|
59
|
-
|
|
60
|
-
O acabamento usa raio médio, borda estrutural neutra e barra semântica em
|
|
61
|
-
`border-inline-start`, funcionando em RTL. Textos longos quebram sem overflow
|
|
62
|
-
e ações usam flex-wrap em telas estreitas.
|
|
63
|
-
|
|
64
|
-
Tokens locais sobrescrevíveis: `--fs-alert-padding-block`,
|
|
65
|
-
`--fs-alert-padding-inline`, `--fs-alert-gap`, `--fs-alert-radius`,
|
|
66
|
-
`--fs-alert-border-width`, `--fs-alert-accent-width`, `--fs-alert-icon-size`,
|
|
67
|
-
`--fs-alert-heading-gap` e `--fs-alert-actions-gap`.
|
|
68
|
-
|
|
69
|
-
```html
|
|
70
|
-
<div class="fs-alert fs-alert-danger">Ocorreu um erro ao processar a solicitação.</div>
|
|
71
|
-
<div class="fs-alert fs-alert-warning">Atenção: essa ação não pode ser desfeita.</div>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## A11y
|
|
75
|
-
|
|
76
|
-
O framework não injeta ARIA, não cria ícones automaticamente e não move foco.
|
|
77
|
-
Use `role="status"` para atualização não urgente e `role="alert"` somente
|
|
78
|
-
quando a mensagem precisar ser anunciada imediatamente. O significado deve
|
|
79
|
-
continuar compreensível sem cor, ícone ou borda. Ícones decorativos usam
|
|
80
|
-
`aria-hidden="true"`; informação adicional precisa de texto equivalente.
|
|
81
|
-
|
|
82
|
-
Links e botões mantêm foco visível. Para decisão crítica use [Alert Dialog](alert-dialog.md);
|
|
83
|
-
para mensagem breve use Toast.
|
|
84
|
-
|
|
85
|
-
Em `forced-colors: active`, a borda semântica usa as cores do sistema e o
|
|
86
|
-
conteúdo continua legível sem depender do fundo tintado.
|
|
87
|
-
|
|
88
|
-
## API JS
|
|
89
|
-
|
|
90
|
-
Nenhuma — 100% CSS.
|
|
91
|
-
|
|
92
|
-
## Tokens
|
|
93
|
-
|
|
94
|
-
`--fs-alert-{nome}-bg`/`-text` (fundo tintado e texto) e `--fs-color-border`.
|
|
95
|
-
Os tokens locais acima permitem ajuste por instância.
|
|
96
|
-
|
|
97
|
-
## Exemplo
|
|
98
|
-
|
|
99
|
-
```html
|
|
100
|
-
<div class="fs-alert fs-alert-success" role="status">Operação concluída com sucesso.</div>
|
|
101
|
-
<div class="fs-alert fs-alert-danger" role="alert">Erro ao salvar as alterações.</div>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Mockup: [laboratório do componente](../../mockup/examples/alerts.html).
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Avatar
|
|
2
|
-
|
|
3
|
-
## Visão geral
|
|
4
|
-
|
|
5
|
-
Use `.fs-avatar` para representar uma pessoa, equipe ou entidade com imagem ou iniciais.
|
|
6
|
-
|
|
7
|
-
## Estados
|
|
8
|
-
|
|
9
|
-
Combine `.fs-avatar-sm`, `.fs-avatar-lg` e `.fs-avatar-square` conforme o contexto.
|
|
10
|
-
|
|
11
|
-
## A11y
|
|
12
|
-
|
|
13
|
-
Imagens devem ter `alt` descritivo; iniciais devem ter um nome acessível com `aria-label`.
|
package/docs/components/badge.md
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# Badge
|
|
2
|
-
|
|
3
|
-
Rótulo pequeno de destaque — contagem, status — usado sozinho ou embutido
|
|
4
|
-
em cards, navbar, tabelas. Para a variante removível, ver
|
|
5
|
-
[Tag](tag.md).
|
|
6
|
-
|
|
7
|
-
## Visão geral
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<span class="fs-badge">Padrão</span>
|
|
11
|
-
<span class="fs-badge fs-badge-primary">Primary</span>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Anatomia
|
|
15
|
-
|
|
16
|
-
Um único elemento, `.fs-badge` — sem marcação interna obrigatória.
|
|
17
|
-
|
|
18
|
-
## Variações
|
|
19
|
-
|
|
20
|
-
- **Cor**: `.fs-badge-{primary|secondary|success|warning|danger|info}` —
|
|
21
|
-
fundo sólido, texto com contraste calculado automaticamente. Sem
|
|
22
|
-
modificador, usa cores neutras (`--fs-color-subtle`/`--fs-color-text`).
|
|
23
|
-
- **Peso visual**: `.fs-badge-soft-{nome}` cria fundo translúcido com borda
|
|
24
|
-
sutil, recomendado para status recorrentes em tabelas e cards;
|
|
25
|
-
`.fs-badge-outline-{nome}` mantém apenas contorno e texto, útil para
|
|
26
|
-
metadados e filtros. As variantes sólidas permanecem para destaque alto.
|
|
27
|
-
- **Tamanho**: `.fs-badge-sm` (18px), `.fs-badge-lg` (26px); sem sufixo =
|
|
28
|
-
22px (padrão).
|
|
29
|
-
- **Acabamento**: usa `--fs-radius-sm` (4px) por padrão, mantendo cantos
|
|
30
|
-
levemente arredondados sem transformar o badge em uma pílula.
|
|
31
|
-
- **Densidade**: `--fs-badge-padding-inline`,
|
|
32
|
-
`--fs-badge-padding-block-start` e `--fs-badge-padding-block-end` permitem
|
|
33
|
-
ajustar o espaço interno localmente sem substituir o componente inteiro.
|
|
34
|
-
- **Padrões**: `.fs-badge-dot` adiciona um indicador circular antes do texto;
|
|
35
|
-
`.fs-badge-count` estabiliza contagens com algarismos tabulares e
|
|
36
|
-
`.fs-badge-count-circle` cria um indicador circular para contagens curtas,
|
|
37
|
-
preferencialmente de um único dígito.
|
|
38
|
-
- **Split**: `.fs-badge-split` reúne um rótulo e um valor em segmentos
|
|
39
|
-
conectados. Use `.fs-badge-split-{nome}` para colorir o valor; os elementos
|
|
40
|
-
internos obrigatórios são `.fs-badge-split-label` e
|
|
41
|
-
`.fs-badge-split-value`.
|
|
42
|
-
|
|
43
|
-
```html
|
|
44
|
-
<span class="fs-badge fs-badge-success fs-badge-sm">Ativo</span>
|
|
45
|
-
<span class="fs-badge fs-badge-danger fs-badge-lg">Crítico</span>
|
|
46
|
-
<span class="fs-badge fs-badge-soft-success fs-badge-dot">Disponível</span>
|
|
47
|
-
<span class="fs-badge fs-badge-outline-primary">Beta</span>
|
|
48
|
-
<span class="fs-badge-split fs-badge-split-primary">
|
|
49
|
-
<span class="fs-badge-split-label">New</span>
|
|
50
|
-
<span class="fs-badge-split-value">0.7.1</span>
|
|
51
|
-
</span>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Estados
|
|
55
|
-
|
|
56
|
-
Nenhum — elemento estático, sem interação.
|
|
57
|
-
|
|
58
|
-
## A11y
|
|
59
|
-
|
|
60
|
-
Badge é decorativo/informativo, não interativo — se o conteúdo for
|
|
61
|
-
significativo pra quem usa leitor de tela (ex.: contador de notificações
|
|
62
|
-
não lidas), garanta que o texto ao redor já comunique o contexto (não
|
|
63
|
-
dependa só da cor).
|
|
64
|
-
|
|
65
|
-
## API JS
|
|
66
|
-
|
|
67
|
-
Nenhuma — 100% CSS.
|
|
68
|
-
|
|
69
|
-
## Tokens
|
|
70
|
-
|
|
71
|
-
Usa os tokens de cor de tema (`--fs-color-{nome}`, ver
|
|
72
|
-
[`docs/reference/design-tokens.md`](../reference/design-tokens.md)) e expõe
|
|
73
|
-
`--fs-badge-color`, `--fs-badge-bg`, `--fs-badge-border`,
|
|
74
|
-
`--fs-badge-height` e `--fs-badge-radius` (`var(--fs-radius-sm)` por padrão)
|
|
75
|
-
para personalização localizada. A densidade também pode ser ajustada com
|
|
76
|
-
`--fs-badge-padding-inline`, `--fs-badge-padding-block-start` e
|
|
77
|
-
`--fs-badge-padding-block-end`. Split também expõe
|
|
78
|
-
`--fs-badge-split-{label|value}-{bg|color}`, `--fs-badge-split-height` e
|
|
79
|
-
`--fs-badge-split-radius` (`var(--fs-radius-sm)` por padrão), aplicado ao
|
|
80
|
-
contêiner externo que conecta o rótulo e o valor.
|
|
81
|
-
|
|
82
|
-
## Exemplo
|
|
83
|
-
|
|
84
|
-
```html
|
|
85
|
-
<span class="fs-badge">12</span>
|
|
86
|
-
<span class="fs-badge fs-badge-primary">Novo</span>
|
|
87
|
-
<span class="fs-badge fs-badge-warning fs-badge-sm">Pendente</span>
|
|
88
|
-
<span class="fs-badge fs-badge-soft-success fs-badge-dot">Online</span>
|
|
89
|
-
<span class="fs-badge fs-badge-count fs-badge-danger">12</span>
|
|
90
|
-
<span class="fs-badge fs-badge-count fs-badge-count-circle fs-badge-danger" aria-label="1 notificação não lida">1</span>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Composição e contraste
|
|
94
|
-
|
|
95
|
-
Mantenha o badge próximo do título, status ou contagem que ele qualifica e
|
|
96
|
-
não use a cor como única indicação de estado. Para filtros ou ações, use um
|
|
97
|
-
botão ou Tag, não um badge estático. Em temas e marcas customizadas, valide
|
|
98
|
-
as variantes `soft` e `outline` com `npm run contrast:check` e confirme que o
|
|
99
|
-
texto continua legível nos temas claro e escuro.
|
|
100
|
-
|
|
101
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#badge).
|