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.
Files changed (177) hide show
  1. package/package.json +17 -15
  2. package/CHANGELOG.md +0 -940
  3. package/dist/css/components.css.map +0 -1
  4. package/dist/css/components.min.css.map +0 -1
  5. package/dist/css/fokus-components.css.map +0 -1
  6. package/dist/css/fokus-components.min.css.map +0 -1
  7. package/dist/css/fokus-core.css.map +0 -1
  8. package/dist/css/fokus-core.min.css.map +0 -1
  9. package/dist/css/fokus-dark.css.map +0 -1
  10. package/dist/css/fokus-dark.min.css.map +0 -1
  11. package/dist/css/fokus-rtl.css.map +0 -1
  12. package/dist/css/fokus-rtl.min.css.map +0 -1
  13. package/dist/css/fokus-utilities.css.map +0 -1
  14. package/dist/css/fokus-utilities.min.css.map +0 -1
  15. package/dist/css/fokus.css.map +0 -1
  16. package/dist/css/fokus.min.css.map +0 -1
  17. package/dist/css/fonts.css.map +0 -1
  18. package/dist/css/fonts.min.css.map +0 -1
  19. package/dist/css/forms.css.map +0 -1
  20. package/dist/css/forms.min.css.map +0 -1
  21. package/dist/css/helpers.css.map +0 -1
  22. package/dist/css/helpers.min.css.map +0 -1
  23. package/dist/css/layout.css.map +0 -1
  24. package/dist/css/layout.min.css.map +0 -1
  25. package/dist/js/fokus.js.map +0 -7
  26. package/dist/js/fokus.min.js.map +0 -7
  27. package/docs/README.md +0 -86
  28. package/docs/comparison.md +0 -124
  29. package/docs/components/accordion.md +0 -104
  30. package/docs/components/alert-dialog.md +0 -99
  31. package/docs/components/alert.md +0 -104
  32. package/docs/components/avatar.md +0 -13
  33. package/docs/components/badge.md +0 -101
  34. package/docs/components/breadcrumb.md +0 -93
  35. package/docs/components/button-group.md +0 -13
  36. package/docs/components/button.md +0 -98
  37. package/docs/components/card.md +0 -111
  38. package/docs/components/carousel.md +0 -167
  39. package/docs/components/checkbox.md +0 -110
  40. package/docs/components/close-button.md +0 -13
  41. package/docs/components/code.md +0 -13
  42. package/docs/components/collapse.md +0 -78
  43. package/docs/components/combobox.md +0 -123
  44. package/docs/components/command-palette.md +0 -131
  45. package/docs/components/datatable.md +0 -173
  46. package/docs/components/datepicker.md +0 -137
  47. package/docs/components/divider.md +0 -57
  48. package/docs/components/dropdown.md +0 -103
  49. package/docs/components/empty-state.md +0 -65
  50. package/docs/components/file-upload-advanced.md +0 -116
  51. package/docs/components/file-upload.md +0 -93
  52. package/docs/components/icon-link.md +0 -13
  53. package/docs/components/input-group.md +0 -73
  54. package/docs/components/input.md +0 -90
  55. package/docs/components/list-group.md +0 -13
  56. package/docs/components/modal.md +0 -120
  57. package/docs/components/navbar.md +0 -74
  58. package/docs/components/nested-menu.md +0 -90
  59. package/docs/components/notification-center.md +0 -116
  60. package/docs/components/offcanvas.md +0 -102
  61. package/docs/components/pagination.md +0 -145
  62. package/docs/components/placeholder.md +0 -13
  63. package/docs/components/popover.md +0 -118
  64. package/docs/components/progress.md +0 -126
  65. package/docs/components/radio.md +0 -80
  66. package/docs/components/range.md +0 -83
  67. package/docs/components/rating.md +0 -91
  68. package/docs/components/ratio.md +0 -13
  69. package/docs/components/responsive.md +0 -19
  70. package/docs/components/scrollspy.md +0 -13
  71. package/docs/components/segmented-control.md +0 -82
  72. package/docs/components/select.md +0 -89
  73. package/docs/components/skeleton.md +0 -70
  74. package/docs/components/stepper.md +0 -107
  75. package/docs/components/switch.md +0 -97
  76. package/docs/components/table.md +0 -90
  77. package/docs/components/tabs.md +0 -104
  78. package/docs/components/tag.md +0 -144
  79. package/docs/components/tile.md +0 -112
  80. package/docs/components/timeline.md +0 -78
  81. package/docs/components/toast.md +0 -108
  82. package/docs/components/tooltip.md +0 -113
  83. package/docs/components/tree-view.md +0 -118
  84. package/docs/contributing/contributing.md +0 -18
  85. package/docs/getting-started/installation.md +0 -70
  86. package/docs/getting-started/usage.md +0 -105
  87. package/docs/guides/accessibility.md +0 -109
  88. package/docs/guides/charts.md +0 -73
  89. package/docs/guides/dark-mode.md +0 -90
  90. package/docs/guides/icons.md +0 -99
  91. package/docs/guides/javascript-api.md +0 -9
  92. package/docs/guides/layout-advanced.md +0 -118
  93. package/docs/guides/migration-clarus-to-fokus.md +0 -48
  94. package/docs/guides/migration-external.md +0 -123
  95. package/docs/guides/migration-v1.md +0 -63
  96. package/docs/guides/print.md +0 -30
  97. package/docs/guides/rtl-and-system-preferences.md +0 -28
  98. package/docs/guides/theming.md +0 -140
  99. package/docs/guides/utility-api.md +0 -9
  100. package/docs/prompts/prompt-plan.md +0 -45
  101. package/docs/reference/accessibility-matrix.md +0 -77
  102. package/docs/reference/browser-support.md +0 -75
  103. package/docs/reference/contrast-report.md +0 -54
  104. package/docs/reference/definitions.md +0 -868
  105. package/docs/reference/design-tokens.md +0 -208
  106. package/docs/reference/scss-architecture.md +0 -227
  107. package/docs/reference/size-baseline.json +0 -34
  108. package/docs/reference/stability.md +0 -89
  109. package/docs/showcase.md +0 -25
  110. package/mockup/README.md +0 -41
  111. package/mockup/assets/carousel-planning.png +0 -0
  112. package/mockup/assets/carousel-workspace.png +0 -0
  113. package/mockup/assets/example-theme.css +0 -19
  114. package/mockup/assets/example-theme.js +0 -11
  115. package/mockup/assets/showcase-contracts.js +0 -84
  116. package/mockup/assets/showcase.css +0 -91
  117. package/mockup/assets/showcase.js +0 -724
  118. package/mockup/content-data.html +0 -9
  119. package/mockup/examples/accordion-tabs-toast.html +0 -149
  120. package/mockup/examples/alert-dialog.html +0 -84
  121. package/mockup/examples/alerts.html +0 -115
  122. package/mockup/examples/badges-alerts.html +0 -109
  123. package/mockup/examples/buttons.html +0 -58
  124. package/mockup/examples/cards.html +0 -132
  125. package/mockup/examples/carousel.html +0 -126
  126. package/mockup/examples/charts.html +0 -102
  127. package/mockup/examples/check-radio-switch.html +0 -620
  128. package/mockup/examples/collapse.html +0 -69
  129. package/mockup/examples/combobox.html +0 -60
  130. package/mockup/examples/command-palette.html +0 -64
  131. package/mockup/examples/datatable.html +0 -113
  132. package/mockup/examples/datepicker.html +0 -62
  133. package/mockup/examples/divider.html +0 -45
  134. package/mockup/examples/dropdown-tooltip.html +0 -77
  135. package/mockup/examples/empty-state.html +0 -56
  136. package/mockup/examples/file-drop.html +0 -74
  137. package/mockup/examples/file-upload-advanced.html +0 -68
  138. package/mockup/examples/forms-advanced.html +0 -77
  139. package/mockup/examples/hover-card.html +0 -86
  140. package/mockup/examples/icons.html +0 -157
  141. package/mockup/examples/input-group.html +0 -74
  142. package/mockup/examples/js-foundation.html +0 -215
  143. package/mockup/examples/layout.html +0 -134
  144. package/mockup/examples/modal-select.html +0 -127
  145. package/mockup/examples/nested-menu.html +0 -73
  146. package/mockup/examples/notification-center.html +0 -86
  147. package/mockup/examples/offcanvas-popover.html +0 -133
  148. package/mockup/examples/pagination-breadcrumbs.html +0 -92
  149. package/mockup/examples/popover.html +0 -81
  150. package/mockup/examples/range.html +0 -69
  151. package/mockup/examples/rating.html +0 -103
  152. package/mockup/examples/segmented-control.html +0 -96
  153. package/mockup/examples/skeletons.html +0 -82
  154. package/mockup/examples/spinner-progress.html +0 -130
  155. package/mockup/examples/stepper.html +0 -119
  156. package/mockup/examples/tables-navbar.html +0 -89
  157. package/mockup/examples/tag.html +0 -115
  158. package/mockup/examples/theming.html +0 -68
  159. package/mockup/examples/tile.html +0 -107
  160. package/mockup/examples/timeline.html +0 -108
  161. package/mockup/examples/toast.html +0 -113
  162. package/mockup/examples/tooltip.html +0 -68
  163. package/mockup/examples/tree-view.html +0 -68
  164. package/mockup/feedback-actions.html +0 -9
  165. package/mockup/forms.html +0 -13
  166. package/mockup/foundations.html +0 -7
  167. package/mockup/kitchen-sink.html +0 -696
  168. package/mockup/navigation-disclosure.html +0 -11
  169. package/mockup/overlays-commands.html +0 -12
  170. package/mockup/templates/README.md +0 -20
  171. package/mockup/templates/admin.html +0 -334
  172. package/mockup/templates/auth.html +0 -234
  173. package/mockup/templates/dashboard.html +0 -442
  174. package/mockup/templates/landing.html +0 -397
  175. package/packages/fokus-icons/package.json +0 -46
  176. package/scripts/migrate-fokus-map.json +0 -1366
  177. 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.
@@ -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 &lt;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).
@@ -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`.
@@ -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).