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