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
@@ -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.
@@ -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,110 +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
- - **Hover/active**: superfície e borda confirmam a interação sem depender
55
- apenas da cor do texto.
56
- - **RTL e movimento**: propriedades lógicas acompanham `dir="rtl"` e as
57
- transições são desativadas em `prefers-reduced-motion: reduce`.
58
-
59
- ```html
60
- <input type="checkbox" class="fs-check-input is-invalid" id="c1">
61
- <label for="c1" class="fs-check-label">Campo obrigatório</label>
62
- ```
63
-
64
- ```js
65
- document.getElementById("c2").indeterminate = true;
66
- ```
67
-
68
- ## A11y
69
-
70
- - `<input type="checkbox">` nativo — `Space` alterna, `Tab` foca, leitor de
71
- tela anuncia estado (marcado/desmarcado/indeterminado) automaticamente.
72
- Nenhum ARIA extra é necessário.
73
- - Sempre associe `label` via `for`/`id` — não use só `aria-label` no input
74
- se houver texto visível ao lado (duplica a leitura ou some com o clique
75
- no texto).
76
- - Para grupos relacionados, use `fieldset`/`legend`. Associe ajuda ou erro
77
- com `aria-describedby` e indique erro com `aria-invalid="true"` quando
78
- aplicável.
79
-
80
- ## API JS
81
-
82
- Nenhuma — 100% CSS. `indeterminate` é uma propriedade do DOM nativo do
83
- `<input>`, não uma API do FokusStyles.
84
-
85
- ## Tokens
86
-
87
- Tokens de componente podem ser sobrescritos por instância sem `!important`:
88
-
89
- | Token | Fallback | Uso |
90
- |---|---|---|
91
- | `--fs-check-size` | `18px` | Caixa visual |
92
- | `--fs-check-border-width` | `--fs-border-width` | Borda |
93
- | `--fs-check-radius` | `--fs-radius-sm` | Raio |
94
- | `--fs-check-gap` | `--fs-space-2` | Distância até o texto |
95
- | `--fs-check-mark-color` | `--fs-color-on-primary` | Marca |
96
-
97
- ## Exemplo
98
-
99
- ```html
100
- <div class="fs-check">
101
- <input type="checkbox" class="fs-check-input" id="c1" checked>
102
- <label for="c1" class="fs-check-label">Marcado</label>
103
- </div>
104
- <div class="fs-check">
105
- <input type="checkbox" class="fs-check-input" id="c2" disabled>
106
- <label for="c2" class="fs-check-label">Desabilitado</label>
107
- </div>
108
- ```
109
-
110
- 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.