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
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,59 +0,0 @@
|
|
|
1
|
-
# Alert
|
|
2
|
-
|
|
3
|
-
Mensagem de estado (sucesso, erro, aviso, informação) com destaque visual —
|
|
4
|
-
fundo tintado, texto com contraste garantido, barra lateral colorida.
|
|
5
|
-
|
|
6
|
-
## Visão geral
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<div class="fs-alert">Alerta neutro, sem cor de estado.</div>
|
|
10
|
-
<div class="fs-alert fs-alert-success">Operação concluída com sucesso.</div>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Anatomia
|
|
14
|
-
|
|
15
|
-
Um único elemento, `.fs-alert` — sem marcação interna obrigatória.
|
|
16
|
-
|
|
17
|
-
## Variações
|
|
18
|
-
|
|
19
|
-
Cor: `.fs-alert-{primary|secondary|success|warning|danger|info}`. Sem
|
|
20
|
-
modificador, usa borda/texto neutros. Sem tamanhos (`-sm`/`-lg`) — Alert é
|
|
21
|
-
sempre o mesmo `padding`.
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<div class="fs-alert fs-alert-danger">Ocorreu um erro ao processar a solicitação.</div>
|
|
25
|
-
<div class="fs-alert fs-alert-warning">Atenção: essa ação não pode ser desfeita.</div>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Estados
|
|
29
|
-
|
|
30
|
-
Nenhum — elemento estático. Para um alerta dispensável, monte você mesmo
|
|
31
|
-
com um `.fs-btn-close` (ver [Toast](toast.md) para o padrão de dispensa com
|
|
32
|
-
JS, caso precise).
|
|
33
|
-
|
|
34
|
-
## A11y
|
|
35
|
-
|
|
36
|
-
Para alertas que aparecem dinamicamente (não já presentes no HTML da
|
|
37
|
-
carga), adicione `role="alert"` (ou `role="status"` para os menos urgentes)
|
|
38
|
-
no elemento, pra leitores de tela anunciarem automaticamente — o framework
|
|
39
|
-
não injeta esse atributo.
|
|
40
|
-
|
|
41
|
-
## API JS
|
|
42
|
-
|
|
43
|
-
Nenhuma — 100% CSS.
|
|
44
|
-
|
|
45
|
-
## Tokens
|
|
46
|
-
|
|
47
|
-
`--fs-alert-{nome}-bg`/`-text` (fundo tintado e texto, calculados por
|
|
48
|
-
`tint-color()`/`shade-color()` a partir do primitivo — ver
|
|
49
|
-
[`docs/reference/design-tokens.md`](../reference/design-tokens.md)),
|
|
50
|
-
`--fs-color-border`. Alerts usam `border-radius: 0`.
|
|
51
|
-
|
|
52
|
-
## Exemplo
|
|
53
|
-
|
|
54
|
-
```html
|
|
55
|
-
<div class="fs-alert fs-alert-success" role="status">Operação concluída com sucesso.</div>
|
|
56
|
-
<div class="fs-alert fs-alert-danger" role="alert">Erro ao salvar as alterações.</div>
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#alert).
|
|
@@ -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,82 +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
|
-
- **Padrões**: `.fs-badge-dot` adiciona um indicador circular antes do texto;
|
|
30
|
-
`.fs-badge-count` estabiliza contagens com algarismos tabulares.
|
|
31
|
-
- **Split**: `.fs-badge-split` reúne um rótulo e um valor em segmentos
|
|
32
|
-
conectados. Use `.fs-badge-split-{nome}` para colorir o valor; os elementos
|
|
33
|
-
internos obrigatórios são `.fs-badge-split-label` e
|
|
34
|
-
`.fs-badge-split-value`.
|
|
35
|
-
|
|
36
|
-
```html
|
|
37
|
-
<span class="fs-badge fs-badge-success fs-badge-sm">Ativo</span>
|
|
38
|
-
<span class="fs-badge fs-badge-danger fs-badge-lg">Crítico</span>
|
|
39
|
-
<span class="fs-badge fs-badge-soft-success fs-badge-dot">Disponível</span>
|
|
40
|
-
<span class="fs-badge fs-badge-outline-primary">Beta</span>
|
|
41
|
-
<span class="fs-badge-split fs-badge-split-primary">
|
|
42
|
-
<span class="fs-badge-split-label">New</span>
|
|
43
|
-
<span class="fs-badge-split-value">0.7.1</span>
|
|
44
|
-
</span>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Estados
|
|
48
|
-
|
|
49
|
-
Nenhum — elemento estático, sem interação.
|
|
50
|
-
|
|
51
|
-
## A11y
|
|
52
|
-
|
|
53
|
-
Badge é decorativo/informativo, não interativo — se o conteúdo for
|
|
54
|
-
significativo pra quem usa leitor de tela (ex.: contador de notificações
|
|
55
|
-
não lidas), garanta que o texto ao redor já comunique o contexto (não
|
|
56
|
-
dependa só da cor).
|
|
57
|
-
|
|
58
|
-
## API JS
|
|
59
|
-
|
|
60
|
-
Nenhuma — 100% CSS.
|
|
61
|
-
|
|
62
|
-
## Tokens
|
|
63
|
-
|
|
64
|
-
Usa os tokens de cor de tema (`--fs-color-{nome}`, ver
|
|
65
|
-
[`docs/reference/design-tokens.md`](../reference/design-tokens.md)) e expõe
|
|
66
|
-
`--fs-badge-color`, `--fs-badge-bg`, `--fs-badge-border`,
|
|
67
|
-
`--fs-badge-height` e `--fs-badge-radius` (0 por padrão) para
|
|
68
|
-
personalização localizada. Split também expõe
|
|
69
|
-
`--fs-badge-split-{label|value}-{bg|color}`, `--fs-badge-split-height` e
|
|
70
|
-
`--fs-badge-split-radius`.
|
|
71
|
-
|
|
72
|
-
## Exemplo
|
|
73
|
-
|
|
74
|
-
```html
|
|
75
|
-
<span class="fs-badge">12</span>
|
|
76
|
-
<span class="fs-badge fs-badge-primary">Novo</span>
|
|
77
|
-
<span class="fs-badge fs-badge-warning fs-badge-sm">Pendente</span>
|
|
78
|
-
<span class="fs-badge fs-badge-soft-success fs-badge-dot">Online</span>
|
|
79
|
-
<span class="fs-badge fs-badge-count fs-badge-danger">12</span>
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Mockup: [laboratório do componente](../../mockup/feedback-actions.html#badge).
|
|
@@ -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.
|