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
@@ -1,98 +0,0 @@
1
- # Button
2
-
3
- Botão de ação, base visual (cor de contraste automática, tamanhos) para
4
- badges, alertas, tags e tabelas.
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <button type="button" class="fs-btn">Padrão</button>
10
- <button type="button" class="fs-btn fs-btn-primary">Primary</button>
11
- <button type="button" class="fs-btn fs-btn-outline-primary">Outline</button>
12
- ```
13
-
14
- Funciona em `<button>`, `<a>` ou qualquer elemento — a classe é puramente
15
- visual, sem exigir uma tag específica.
16
-
17
- ## Anatomia
18
-
19
- Um único elemento (`.fs-btn`); nenhuma marcação interna obrigatória. O
20
- botão de fechar (`.fs-btn-close`, usado por Card/Modal/Toast/Tag) é uma
21
- variante separada, sem texto, desenhada só com `::before`/`::after`:
22
-
23
- ```html
24
- <button type="button" class="fs-btn-close" aria-label="Fechar"></button>
25
- ```
26
-
27
- ## Variações
28
-
29
- - **Cor sólida**: `.fs-btn-primary`, `-secondary`, `-success`, `-warning`,
30
- `-danger`, `-info` — fundo colorido, texto com contraste calculado
31
- automaticamente (`color-contrast()`, garante AA).
32
- - **Cor outline**: `.fs-btn-outline-{cor}` — borda e texto coloridos, fundo
33
- transparente; hover/active preenchem com a cor sólida.
34
- - **Tamanho**: `.fs-btn-sm` (30px), `.fs-btn-lg` (46px); sem sufixo = 38px
35
- (padrão).
36
-
37
- ```html
38
- <button type="button" class="fs-btn fs-btn-danger fs-btn-sm">Excluir</button>
39
- <button type="button" class="fs-btn fs-btn-outline-success fs-btn-lg">Aprovar</button>
40
- ```
41
-
42
- ## Estados
43
-
44
- - **Hover/active**: `filter: brightness()` (escurece), sem redeclarar cor.
45
- - **Foco**: anel via `:focus` (mixin `focus-ring`).
46
- - **Desabilitado**: atributo `disabled` (em `<button>`) ou classe
47
- `.is-disabled` (funciona em qualquer elemento, inclusive `<a>`, que não
48
- aceita `disabled` nativamente).
49
-
50
- ```html
51
- <button type="button" class="fs-btn fs-btn-primary" disabled>Desabilitado</button>
52
- <a href="#" class="fs-btn is-disabled">Link desabilitado</a>
53
- ```
54
-
55
- ## A11y
56
-
57
- - `<button>` é a tag recomendada para ações (não navegação); use `<a
58
- href="...">` só quando o clique navega para outra URL.
59
- - Botões só-ícone (sem texto visível) precisam de `aria-label` — o
60
- framework não injeta um automaticamente.
61
- - Foco visível por padrão; não remova o anel sem substituir por outro
62
- indicador com contraste equivalente.
63
-
64
- ## API JS
65
-
66
- Nenhuma — 100% CSS.
67
-
68
- ## Tokens
69
-
70
- Componente (`--fs-btn-*`, com fallback pro semântico correspondente —
71
- sobrescrevível por instância sem `!important`):
72
-
73
- | Token | Fallback |
74
- |---|---|
75
- | `--fs-btn-bg` | `--fs-color-bg-subtle` |
76
- | `--fs-btn-color` | `--fs-color-text-primary` |
77
- | `--fs-btn-border-color` | `--fs-color-border-default` |
78
-
79
- As variantes de cor (`.fs-btn-primary` etc.) sobrescrevem esses três tokens
80
- diretamente, não `background-color`/`color`/`border-color` — ver
81
- [`docs/reference/scss-architecture.md`](../reference/scss-architecture.md#tokens)
82
- para o padrão. Raio: `--fs-radius-sm`.
83
-
84
- ## Exemplo
85
-
86
- ```html
87
- <button type="button" class="fs-btn">Padrão</button>
88
- <button type="button" class="fs-btn fs-btn-primary">Primary</button>
89
- <button type="button" class="fs-btn fs-btn-outline-danger fs-btn-sm">Cancelar</button>
90
- <button type="button" class="fs-btn fs-btn-success fs-btn-lg">Confirmar</button>
91
-
92
- <style>
93
- .meu-botao { --fs-btn-bg: #6d28d9; --fs-btn-color: #fff; --fs-btn-border-color: #6d28d9; }
94
- </style>
95
- <button type="button" class="fs-btn meu-botao">Cor custom por instância</button>
96
- ```
97
-
98
- Mockup: [laboratório do componente](../../mockup/feedback-actions.html#button).
@@ -1,111 +0,0 @@
1
- # Card
2
-
3
- Contêiner de conteúdo genérico — a peça que mais combina outros
4
- componentes (botões, badges, tipografia) dentro de si.
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <div class="fs-card">
10
- <div class="fs-card-header">
11
- <h3 class="fs-card-title">Título do card</h3>
12
- <button type="button" class="fs-btn-close" aria-label="Fechar"></button>
13
- </div>
14
- <div class="fs-card-body">
15
- <p class="fs-card-text">Corpo de texto do card.</p>
16
- <button type="button" class="fs-btn fs-btn-primary">Ação</button>
17
- </div>
18
- <div class="fs-card-footer">
19
- <span class="fs-badge fs-badge-success">Ativo</span>
20
- </div>
21
- </div>
22
- ```
23
-
24
- ## Anatomia
25
-
26
- `.fs-card` > até três seções empilhadas, todas opcionais: `.fs-card-header`
27
- (fundo sutil, borda inferior — quando tem `.fs-card-title` + botão, o
28
- layout já vem com `justify-content: space-between`), `.fs-card-body`,
29
- `.fs-card-footer` (fundo sutil, borda superior).
30
-
31
- Dentro de `.fs-card-body`: `.fs-card-title` (destaque), `.fs-card-subtitle`
32
- (secundário, cor muted), `.fs-card-text` (parágrafo de corpo — o último de
33
- um card não tem margem inferior).
34
-
35
- ## Variações
36
-
37
- - **Horizontal**: `.fs-card-horizontal` — eixo principal de coluna pra
38
- linha ("imagem à esquerda, texto à direita"); raios de header/footer se
39
- ajustam pra lateral em vez de topo/base.
40
- - **Tamanho**: `.fs-card-sm` (5px de padding interno), `.fs-card-lg`
41
- (15px); sem sufixo = 10px (padrão) — não muda a largura do card, só a
42
- densidade.
43
- - **Clicável**: `.fs-card-clickable` + `.fs-stretched-link` — ver abaixo.
44
-
45
- ```html
46
- <div class="fs-card fs-card-horizontal">
47
- <div class="fs-card-header">Lateral</div>
48
- <div class="fs-card-body">Conteúdo ao lado.</div>
49
- </div>
50
- ```
51
-
52
- ### `.fs-card-clickable`
53
-
54
- Torna o card inteiro clicável/focável sem aninhar um `<a>` ao redor de todo
55
- o conteúdo (o que quebraria a semântica havendo outros elementos
56
- interativos dentro). Coloque `.fs-stretched-link` no link que deve capturar
57
- o clique — ele se expande via `::after` pra cobrir o card inteiro:
58
-
59
- ```html
60
- <div class="fs-card fs-card-clickable">
61
- <div class="fs-card-body">
62
- <h4 class="fs-card-title">
63
- <a href="/detalhes" class="fs-stretched-link">Ver detalhes</a>
64
- </h4>
65
- <p class="fs-card-text">O card inteiro é clicável, não só o link.</p>
66
- </div>
67
- </div>
68
- ```
69
-
70
- ## Estados
71
-
72
- `.fs-card-clickable:hover`/`:focus-within` — borda muda pra cor primária +
73
- sombra (`:focus-within` em vez de `:focus` pra destacar tanto no hover
74
- quanto ao navegar por teclado até o link interno).
75
-
76
- ## A11y
77
-
78
- - `.fs-stretched-link` deve estar num elemento nativamente focável (`<a
79
- href="...">`), nunca num `<div>` — é o link real que recebe o foco/clique
80
- do teclado, o `::after` só expande a área clicável do mouse.
81
- - Se o card tiver múltiplos links/botões, só o `.fs-stretched-link`
82
- expande; os demais continuam clicáveis normalmente por cima dele
83
- (`z-index` do `::after` é `1`, mas elementos com `position: relative` e
84
- `z-index` maior no conteúdo ficam acima).
85
-
86
- ## API JS
87
-
88
- Nenhuma — 100% CSS.
89
-
90
- ## Tokens
91
-
92
- `--fs-color-border`, `--fs-color-surface`, `--fs-color-subtle`
93
- (header/footer), `--fs-radius-lg`, `--fs-shadow-sm` (hover clicável),
94
- `--fs-color-primary` (borda hover clicável).
95
-
96
- ## Exemplo
97
-
98
- ```html
99
- <div class="fs-card fs-card-clickable" style="max-width: 320px;">
100
- <div class="fs-card-body">
101
- <h4 class="fs-card-title"><a href="#" class="fs-stretched-link">Relatório Q3</a></h4>
102
- <p class="fs-card-subtitle">Atualizado há 2 dias</p>
103
- <p class="fs-card-text">Resumo financeiro do terceiro trimestre.</p>
104
- </div>
105
- <div class="fs-card-footer">
106
- <span class="fs-badge fs-badge-success">Publicado</span>
107
- </div>
108
- </div>
109
- ```
110
-
111
- Mockup: [laboratório do componente](../../mockup/content-data.html#card).
@@ -1,167 +0,0 @@
1
- # Carousel
2
-
3
- Carrossel de painéis ou mídias relacionadas, com navegação por setas,
4
- indicadores, teclado, arraste e autoplay opcional. Use-o para conteúdo
5
- complementar; informação essencial deve continuar disponível fora dos slides.
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <div class="fs-carousel" data-fs="carousel" aria-label="Destaques de produto">
11
- <div class="fs-carousel-inner">
12
- <div class="fs-carousel-item is-active">
13
- <img src="slide1.jpg" alt="Equipe colaborando em um painel">
14
- <div class="fs-carousel-caption">
15
- <h2>Fluxos mais claros</h2>
16
- <p>Centralize tarefas recorrentes em uma experiência previsível.</p>
17
- </div>
18
- </div>
19
- <div class="fs-carousel-item"><img src="slide2.jpg" alt="Resumo de resultados"></div>
20
- </div>
21
- <button type="button" class="fs-carousel-control-prev" aria-label="Slide anterior"></button>
22
- <button type="button" class="fs-carousel-control-next" aria-label="Próximo slide"></button>
23
- </div>
24
- ```
25
-
26
- ## Anatomia
27
-
28
- `.fs-carousel` (`data-fs="carousel"`, rótulo acessível e recorte) >
29
- `.fs-carousel-inner` (trilha flex deslocada por `translate3d`) >
30
- `.fs-carousel-item` (um por slide; exatamente um inicia com `.is-active`).
31
-
32
- Use `.fs-carousel-media` com `background-image` para uma fotografia de fundo;
33
- como a imagem é decorativa nesse padrão, deixe-a com `aria-hidden="true"` e
34
- forneça o contexto na legenda. Para imagem semântica, prefira `<img alt>`.
35
-
36
- Filhos opcionais do contêiner são `.fs-carousel-control-prev`,
37
- `.fs-carousel-control-next`, `.fs-carousel-control-toggle`,
38
- `.fs-carousel-indicators` (lista de botões) e `.fs-carousel-caption` dentro
39
- de cada item. A legenda recebe um gradiente de leitura, título, texto e CTA
40
- opcional.
41
-
42
- ## Variações
43
-
44
- - **Fade**: `.fs-carousel-fade` troca os slides por opacidade.
45
- - **Controles no hover**: `.fs-carousel-hover-controls` revela setas e toggle
46
- ao passar o mouse ou ao focar um controle.
47
- - **Legenda lateral**: `.fs-carousel-caption-side` posiciona a legenda à
48
- direita em telas largas e volta ao overlay padrão em telas pequenas. Adicione
49
- `.fs-carousel-caption-start` à legenda de um slide para alinhá-la à esquerda
50
- quando isso preservar melhor o assunto da imagem. Em telas pequenas, a
51
- legenda ocupa a largura disponível, mas mantém o alinhamento visual: à
52
- direita por padrão e à esquerda com `.fs-carousel-caption-start`.
53
- - **Legenda empilhada**: `.fs-carousel-caption-stacked` posiciona a legenda e
54
- os indicadores abaixo da mídia, sem qualquer sobreposição.
55
- - **Sem mídia**: `.fs-carousel-no-media` cria painéis de superfície para
56
- conteúdo informativo ou interativo.
57
- - **Autoplay controlável**: use `data-autoplay="true"` e inclua o botão
58
- `[data-fs-carousel-toggle]` para oferecer pausa e reprodução explícitas.
59
-
60
- ```html
61
- <div class="fs-carousel fs-carousel-fade fs-carousel-hover-controls"
62
- data-fs="carousel" data-autoplay="true" data-interval="4000"
63
- aria-label="Atualizações automáticas">
64
- <!-- .fs-carousel-inner e itens -->
65
- <button type="button" class="fs-carousel-control-toggle" data-fs-carousel-toggle></button>
66
- </div>
67
- ```
68
-
69
- ## Estados
70
-
71
- `.fs-carousel-item.is-active` e `.fs-carousel-indicators button.is-active`
72
- são sincronizados pelo JavaScript. O botão de reprodução recebe
73
- `aria-pressed="true"` enquanto o autoplay está habilitado e troca seu nome
74
- acessível entre pausar e reproduzir.
75
-
76
- `data-autoplay="true"` avança a cada `data-interval` ms (padrão `5000`). O
77
- timer pausa temporariamente no hover, foco, arraste e quando a aba fica
78
- oculta. `pause()` ou o toggle impedem sua retomada até `play()` ser chamado.
79
-
80
- Com zero ou um slide, o componente recebe `.is-static`; controles e
81
- indicadores são ocultados e não é criado um tab stop de navegação.
82
-
83
- As áreas superior e inferior ficam reservadas pelos tokens
84
- `--fs-carousel-top-safe-area` e `--fs-carousel-bottom-safe-area`: legendas
85
- padrão nunca ocupam a barra de controles nem os indicadores. Para um
86
- carrossel de dois slides, `.fs-carousel-hide-indicators-two` oculta os dots.
87
- `[data-fs-carousel-counter]` recebe automaticamente o texto `1 de 3`, e
88
- `[data-fs-carousel-progress]` anima o progresso do autoplay. Use
89
- `data-drag="false"` quando o conteúdo do slide for altamente interativo.
90
-
91
- Na variação `.fs-carousel-caption-side`, a mesma reserva é aplicada no modo
92
- compacto: a legenda não invade a barra superior ou os indicadores, o excesso
93
- de conteúdo é recortado sem criar barra de rolagem e o gradiente de leitura
94
- ocupa toda a área da mídia.
95
-
96
- ## A11y
97
-
98
- O contêiner recebe `role="group"` e `aria-roledescription="carousel"`; forneça
99
- sempre um `aria-label` que descreva seu conteúdo. Slides inativos recebem
100
- `aria-hidden`; indicadores recebem `aria-current`; e a trilha é `aria-live`
101
- `off` durante autoplay ativo e `polite` quando manual ou pausado.
102
-
103
- Com foco no próprio carrossel, `ArrowLeft`/`ArrowRight` trocam o slide e
104
- `Home`/`End` vão ao primeiro/último. Os botões mantêm foco nativo e não têm
105
- suas teclas capturadas pelo contêiner. O arraste por mouse, toque ou caneta
106
- segue o movimento horizontal, preserva rolagem vertical e ignora gestos que
107
- começam em controles ou conteúdo interativo. Transições respeitam
108
- `prefers-reduced-motion: reduce`.
109
-
110
- ## API JS
111
-
112
- Auto-init via `data-fs="carousel"`. `Carousel.getInstance(el)` recupera a
113
- instância criada.
114
-
115
- | Método | Descrição |
116
- |---|---|
117
- | `next()` / `prev()` | Avança/volta um slide, circularmente. |
118
- | `goTo(index)` | Vai diretamente ao índice informado. |
119
- | `pause()` | Pausa o autoplay configurado até uma chamada a `play()`. |
120
- | `play()` | Retoma o autoplay configurado, se o carrossel for navegável e a página estiver visível. |
121
- | `dispose()` | Para o timer, remove listeners e desregistra a instância. |
122
-
123
- | Evento | Cancelável | Quando |
124
- |---|---|---|
125
- | `fs:carousel:slid` | Não | Após trocar de slide; `detail` contém `{ from, to }`. |
126
-
127
- ## Tokens
128
-
129
- O componente expõe tokens locais com fallback para tokens globais:
130
- `--fs-carousel-radius`, `--fs-carousel-transition-duration`,
131
- `--fs-carousel-transition-easing`, `--fs-carousel-control-size`,
132
- `--fs-carousel-control-inset`, `--fs-carousel-control-color`,
133
- `--fs-carousel-control-bg`, `--fs-carousel-control-bg-hover`,
134
- `--fs-carousel-focus-color`, `--fs-carousel-indicator-size`,
135
- `--fs-carousel-indicator-active-width`, `--fs-carousel-indicator-color`,
136
- `--fs-carousel-indicator-active-color`, `--fs-carousel-caption-scrim`,
137
- `--fs-carousel-top-safe-area`, `--fs-carousel-bottom-safe-area` e
138
- `--fs-carousel-progress-height`.
139
-
140
- ## Exemplo
141
-
142
- ```html
143
- <div class="fs-carousel" data-fs="carousel" data-autoplay="true"
144
- aria-label="Destaques do produto">
145
- <div class="fs-carousel-inner">
146
- <div class="fs-carousel-item is-active"><img src="a.jpg" alt="Produto em uso"></div>
147
- <div class="fs-carousel-item"><img src="b.jpg" alt="Equipe em reunião"></div>
148
- <div class="fs-carousel-item"><img src="c.jpg" alt="Painel de resultados"></div>
149
- </div>
150
- <button type="button" class="fs-carousel-control-prev" aria-label="Slide anterior"></button>
151
- <button type="button" class="fs-carousel-control-next" aria-label="Próximo slide"></button>
152
- <button type="button" class="fs-carousel-control-toggle" data-fs-carousel-toggle></button>
153
- <ul class="fs-carousel-indicators">
154
- <li><button type="button" class="is-active" aria-label="Ir para o slide 1"></button></li>
155
- <li><button type="button" aria-label="Ir para o slide 2"></button></li>
156
- <li><button type="button" aria-label="Ir para o slide 3"></button></li>
157
- </ul>
158
- </div>
159
- ```
160
-
161
- Mockup: [laboratório do componente](../../mockup/content-data.html#carousel).
162
-
163
- ## Limitações
164
-
165
- O Carousel mostra um item por vez e não inclui thumbnails, vídeo, zoom,
166
- lightbox ou múltiplos slides visíveis. Prefira compor recursos existentes para
167
- esses casos antes de propor uma expansão deste componente avançado.
@@ -1,97 +0,0 @@
1
- # Checkbox
2
-
3
- Checkbox 100% CSS, desenhado sobre um `<input type="checkbox">` nativo —
4
- teclado, foco e semântica são os do navegador; o framework só estiliza.
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <div class="fs-check">
10
- <input type="checkbox" class="fs-check-input" id="aceite">
11
- <label for="aceite" class="fs-check-label">Aceito os termos</label>
12
- </div>
13
- ```
14
-
15
- ## Anatomia
16
-
17
- `.fs-check` (wrapper) > `.fs-check-input` (`<input>`, visualmente oculto
18
- via clip — continua focável/anunciado por leitor de tela) + `.fs-check-label`
19
- (`<label for="...">`, desenha a caixa via `::before` e a marca via
20
- `::after`). Input e label são **irmãos**, não aninhados — a associação é só
21
- por `for`/`id` (mesma técnica de [Segmented Control](segmented-control.md)
22
- e [Rating](rating.md)).
23
-
24
- O `for`/`id` é obrigatório: sem ele, clicar no texto não alterna o
25
- checkbox, e leitores de tela não anunciam o rótulo.
26
-
27
- ## Variações
28
-
29
- Tamanho: `.fs-check-sm`, `.fs-check-lg` no wrapper (sem sufixo = padrão).
30
- O checkbox é quadrado (`border-radius: 0`): desmarcado tem borda `primary`,
31
- marcado usa preenchimento `primary` e check branco.
32
- No hover desmarcado, o fundo recebe um tom sutil de `primary`; em `:active`,
33
- o preenchimento fica mais intenso para confirmar o clique.
34
-
35
- ```html
36
- <div class="fs-check fs-check-sm">...</div>
37
- <div class="fs-check fs-check-lg">...</div>
38
- ```
39
-
40
- ## Estados
41
-
42
- - **checked**: atributo `checked` no `<input>`.
43
- - **indeterminate**: só via JavaScript (`input.indeterminate = true` — não
44
- existe atributo HTML equivalente; o framework estiliza `:indeterminate`,
45
- com borda tracejada `primary` e traço horizontal).
46
- - **disabled**: atributo `disabled` no `<input>`.
47
- - **Validação**: use `.is-invalid` no `<input>` quando houver erro. O
48
- inválido usa preenchimento `danger` com um X branco, inclusive quando não
49
- está marcado; não há estado visual separado para “válido”.
50
- - **Disabled**: desmarcado usa trilho e borda neutros; marcado mantém uma
51
- versão atenuada de `primary`, em vez de reduzir a opacidade do controle todo.
52
- - **Foco**: `:focus-visible` no input desenha o anel sobre a caixa
53
- (`::before` da label), não sobre o texto.
54
-
55
- ```html
56
- <input type="checkbox" class="fs-check-input is-invalid" id="c1">
57
- <label for="c1" class="fs-check-label">Campo obrigatório</label>
58
- ```
59
-
60
- ```js
61
- document.getElementById("c2").indeterminate = true;
62
- ```
63
-
64
- ## A11y
65
-
66
- - `<input type="checkbox">` nativo — `Space` alterna, `Tab` foca, leitor de
67
- tela anuncia estado (marcado/desmarcado/indeterminado) automaticamente.
68
- Nenhum ARIA extra é necessário.
69
- - Sempre associe `label` via `for`/`id` — não use só `aria-label` no input
70
- se houver texto visível ao lado (duplica a leitura ou some com o clique
71
- no texto).
72
-
73
- ## API JS
74
-
75
- Nenhuma — 100% CSS. `indeterminate` é uma propriedade do DOM nativo do
76
- `<input>`, não uma API do FokusStyles.
77
-
78
- ## Tokens
79
-
80
- Sem tokens de componente próprios — usa `--fs-color-primary` (caixa
81
- marcada), `--fs-color-border`/`--fs-color-surface` (caixa vazia),
82
- `--fs-color-success`/`--fs-color-danger` (validação), `--fs-radius-sm`.
83
-
84
- ## Exemplo
85
-
86
- ```html
87
- <div class="fs-check">
88
- <input type="checkbox" class="fs-check-input" id="c1" checked>
89
- <label for="c1" class="fs-check-label">Marcado</label>
90
- </div>
91
- <div class="fs-check">
92
- <input type="checkbox" class="fs-check-input" id="c2" disabled>
93
- <label for="c2" class="fs-check-label">Desabilitado</label>
94
- </div>
95
- ```
96
-
97
- Mockup: [laboratório do componente](../../mockup/forms.html#check-radio-switch).
@@ -1,13 +0,0 @@
1
- # Close button
2
-
3
- ## Visão geral
4
-
5
- `.fs-close` fornece um controle compacto para fechar painéis, diálogos e toasts.
6
-
7
- ## Estados
8
-
9
- O estado hover e o focus-visible são fornecidos pelo componente.
10
-
11
- ## A11y
12
-
13
- Sempre informe `aria-label="Fechar"` e associe o controle ao conteúdo que ele fecha.
@@ -1,13 +0,0 @@
1
- # Code
2
-
3
- ## Visão geral
4
-
5
- `.fs-code` estiliza código inline e `.fs-pre` apresenta blocos pré-formatados.
6
-
7
- ## Estados
8
-
9
- O bloco mantém rolagem horizontal para preservar linhas longas.
10
-
11
- ## A11y
12
-
13
- Use `code` para trechos curtos e `pre` para blocos; não transmita informação somente por cor.
@@ -1,78 +0,0 @@
1
- # Collapse
2
-
3
- Expande/recolhe um painel com transição de altura animada — primitivo
4
- usado internamente por [Accordion](accordion.md); use direto quando quiser
5
- só um "mostrar mais" sem a semântica de grupo do Accordion.
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <button type="button" class="fs-btn" data-fs="collapse" data-fs-target="#detalhes">
11
- Ver detalhes
12
- </button>
13
- <div class="fs-collapse" id="detalhes">
14
- Conteúdo que expande/recolhe.
15
- </div>
16
- ```
17
-
18
- ## Anatomia
19
-
20
- Gatilho (`data-fs="collapse"` + `data-fs-target`) + `.fs-collapse`
21
- (precisa de `overflow: hidden`, já incluso na classe — não remova via CSS
22
- próprio, quebra a animação de altura).
23
-
24
- ## Variações
25
-
26
- Nenhuma — sem tamanho/cor; é um comportamento, não um estilo visual
27
- próprio (o conteúdo interno usa suas próprias classes).
28
-
29
- ## Estados
30
-
31
- Estado inicial definido por `aria-expanded` no gatilho: `"true"` começa
32
- aberto, ausente ou `"false"` começa fechado.
33
-
34
- ```html
35
- <button type="button" class="fs-btn" data-fs="collapse" data-fs-target="#painel" aria-expanded="true">
36
- Recolher
37
- </button>
38
- ```
39
-
40
- ## A11y
41
-
42
- `aria-controls`/`aria-expanded` no gatilho são sincronizados
43
- automaticamente pelo JS a cada `show()`/`hide()`.
44
- [`prefers-reduced-motion: reduce`](../guides/accessibility.md#prefers-reduced-motion)
45
- pula a animação e aplica o estado final direto.
46
-
47
- ## API JS
48
-
49
- Auto-init via `data-fs="collapse"` **no gatilho**. `Collapse.getInstance(triggerEl)`.
50
-
51
- | Método | Descrição |
52
- |---|---|
53
- | `show()` | Expande com animação de altura. |
54
- | `hide()` | Recolhe com animação de altura. |
55
- | `toggle()` | Alterna (é o que o clique no gatilho já faz). |
56
- | `dispose()` | Remove o listener de clique e desregistra a instância. |
57
-
58
- | Evento (no gatilho) | Cancelável | Quando |
59
- |---|---|---|
60
- | `fs:collapse:shown` | Não | Depois que a animação de expandir termina. |
61
- | `fs:collapse:hidden` | Não | Depois que a animação de recolher termina. |
62
-
63
- ## Tokens
64
-
65
- Nenhum próprio — o conteúdo interno usa suas próprias cores/espaçamento.
66
-
67
- ## Exemplo
68
-
69
- ```html
70
- <button type="button" class="fs-btn fs-btn-outline-secondary" data-fs="collapse" data-fs-target="#mais-info">
71
- Mais informações
72
- </button>
73
- <div class="fs-collapse" id="mais-info">
74
- <p class="fs-u-mt-2">Texto adicional que só aparece quando expandido.</p>
75
- </div>
76
- ```
77
-
78
- Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#collapse).