fokus-styles 2.5.0 → 2.6.1

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 (181) hide show
  1. package/README.md +20 -2
  2. package/package.json +19 -16
  3. package/packages/fokus-cli/README.md +5 -0
  4. package/packages/fokus-icons/README.md +5 -0
  5. package/packages/fokus-react/README.md +5 -0
  6. package/CHANGELOG.md +0 -940
  7. package/dist/css/components.css.map +0 -1
  8. package/dist/css/components.min.css.map +0 -1
  9. package/dist/css/fokus-components.css.map +0 -1
  10. package/dist/css/fokus-components.min.css.map +0 -1
  11. package/dist/css/fokus-core.css.map +0 -1
  12. package/dist/css/fokus-core.min.css.map +0 -1
  13. package/dist/css/fokus-dark.css.map +0 -1
  14. package/dist/css/fokus-dark.min.css.map +0 -1
  15. package/dist/css/fokus-rtl.css.map +0 -1
  16. package/dist/css/fokus-rtl.min.css.map +0 -1
  17. package/dist/css/fokus-utilities.css.map +0 -1
  18. package/dist/css/fokus-utilities.min.css.map +0 -1
  19. package/dist/css/fokus.css.map +0 -1
  20. package/dist/css/fokus.min.css.map +0 -1
  21. package/dist/css/fonts.css.map +0 -1
  22. package/dist/css/fonts.min.css.map +0 -1
  23. package/dist/css/forms.css.map +0 -1
  24. package/dist/css/forms.min.css.map +0 -1
  25. package/dist/css/helpers.css.map +0 -1
  26. package/dist/css/helpers.min.css.map +0 -1
  27. package/dist/css/layout.css.map +0 -1
  28. package/dist/css/layout.min.css.map +0 -1
  29. package/dist/js/fokus.js.map +0 -7
  30. package/dist/js/fokus.min.js.map +0 -7
  31. package/docs/README.md +0 -86
  32. package/docs/comparison.md +0 -124
  33. package/docs/components/accordion.md +0 -104
  34. package/docs/components/alert-dialog.md +0 -99
  35. package/docs/components/alert.md +0 -104
  36. package/docs/components/avatar.md +0 -13
  37. package/docs/components/badge.md +0 -101
  38. package/docs/components/breadcrumb.md +0 -93
  39. package/docs/components/button-group.md +0 -13
  40. package/docs/components/button.md +0 -98
  41. package/docs/components/card.md +0 -111
  42. package/docs/components/carousel.md +0 -167
  43. package/docs/components/checkbox.md +0 -110
  44. package/docs/components/close-button.md +0 -13
  45. package/docs/components/code.md +0 -13
  46. package/docs/components/collapse.md +0 -78
  47. package/docs/components/combobox.md +0 -123
  48. package/docs/components/command-palette.md +0 -131
  49. package/docs/components/datatable.md +0 -173
  50. package/docs/components/datepicker.md +0 -137
  51. package/docs/components/divider.md +0 -57
  52. package/docs/components/dropdown.md +0 -103
  53. package/docs/components/empty-state.md +0 -65
  54. package/docs/components/file-upload-advanced.md +0 -116
  55. package/docs/components/file-upload.md +0 -93
  56. package/docs/components/icon-link.md +0 -13
  57. package/docs/components/input-group.md +0 -73
  58. package/docs/components/input.md +0 -90
  59. package/docs/components/list-group.md +0 -13
  60. package/docs/components/modal.md +0 -120
  61. package/docs/components/navbar.md +0 -74
  62. package/docs/components/nested-menu.md +0 -90
  63. package/docs/components/notification-center.md +0 -116
  64. package/docs/components/offcanvas.md +0 -102
  65. package/docs/components/pagination.md +0 -145
  66. package/docs/components/placeholder.md +0 -13
  67. package/docs/components/popover.md +0 -118
  68. package/docs/components/progress.md +0 -126
  69. package/docs/components/radio.md +0 -80
  70. package/docs/components/range.md +0 -83
  71. package/docs/components/rating.md +0 -91
  72. package/docs/components/ratio.md +0 -13
  73. package/docs/components/responsive.md +0 -19
  74. package/docs/components/scrollspy.md +0 -13
  75. package/docs/components/segmented-control.md +0 -82
  76. package/docs/components/select.md +0 -89
  77. package/docs/components/skeleton.md +0 -70
  78. package/docs/components/stepper.md +0 -107
  79. package/docs/components/switch.md +0 -97
  80. package/docs/components/table.md +0 -90
  81. package/docs/components/tabs.md +0 -104
  82. package/docs/components/tag.md +0 -144
  83. package/docs/components/tile.md +0 -112
  84. package/docs/components/timeline.md +0 -78
  85. package/docs/components/toast.md +0 -108
  86. package/docs/components/tooltip.md +0 -113
  87. package/docs/components/tree-view.md +0 -118
  88. package/docs/contributing/contributing.md +0 -18
  89. package/docs/getting-started/installation.md +0 -70
  90. package/docs/getting-started/usage.md +0 -105
  91. package/docs/guides/accessibility.md +0 -109
  92. package/docs/guides/charts.md +0 -73
  93. package/docs/guides/dark-mode.md +0 -90
  94. package/docs/guides/icons.md +0 -99
  95. package/docs/guides/javascript-api.md +0 -9
  96. package/docs/guides/layout-advanced.md +0 -118
  97. package/docs/guides/migration-clarus-to-fokus.md +0 -48
  98. package/docs/guides/migration-external.md +0 -123
  99. package/docs/guides/migration-v1.md +0 -63
  100. package/docs/guides/print.md +0 -30
  101. package/docs/guides/rtl-and-system-preferences.md +0 -28
  102. package/docs/guides/theming.md +0 -140
  103. package/docs/guides/utility-api.md +0 -9
  104. package/docs/prompts/prompt-plan.md +0 -45
  105. package/docs/reference/accessibility-matrix.md +0 -77
  106. package/docs/reference/browser-support.md +0 -75
  107. package/docs/reference/contrast-report.md +0 -54
  108. package/docs/reference/definitions.md +0 -868
  109. package/docs/reference/design-tokens.md +0 -208
  110. package/docs/reference/scss-architecture.md +0 -227
  111. package/docs/reference/size-baseline.json +0 -34
  112. package/docs/reference/stability.md +0 -89
  113. package/docs/showcase.md +0 -25
  114. package/mockup/README.md +0 -41
  115. package/mockup/assets/carousel-planning.png +0 -0
  116. package/mockup/assets/carousel-workspace.png +0 -0
  117. package/mockup/assets/example-theme.css +0 -19
  118. package/mockup/assets/example-theme.js +0 -11
  119. package/mockup/assets/showcase-contracts.js +0 -84
  120. package/mockup/assets/showcase.css +0 -91
  121. package/mockup/assets/showcase.js +0 -724
  122. package/mockup/content-data.html +0 -9
  123. package/mockup/examples/accordion-tabs-toast.html +0 -149
  124. package/mockup/examples/alert-dialog.html +0 -84
  125. package/mockup/examples/alerts.html +0 -115
  126. package/mockup/examples/badges-alerts.html +0 -109
  127. package/mockup/examples/buttons.html +0 -58
  128. package/mockup/examples/cards.html +0 -132
  129. package/mockup/examples/carousel.html +0 -126
  130. package/mockup/examples/charts.html +0 -102
  131. package/mockup/examples/check-radio-switch.html +0 -620
  132. package/mockup/examples/collapse.html +0 -69
  133. package/mockup/examples/combobox.html +0 -60
  134. package/mockup/examples/command-palette.html +0 -64
  135. package/mockup/examples/datatable.html +0 -113
  136. package/mockup/examples/datepicker.html +0 -62
  137. package/mockup/examples/divider.html +0 -45
  138. package/mockup/examples/dropdown-tooltip.html +0 -77
  139. package/mockup/examples/empty-state.html +0 -56
  140. package/mockup/examples/file-drop.html +0 -74
  141. package/mockup/examples/file-upload-advanced.html +0 -68
  142. package/mockup/examples/forms-advanced.html +0 -77
  143. package/mockup/examples/hover-card.html +0 -86
  144. package/mockup/examples/icons.html +0 -157
  145. package/mockup/examples/input-group.html +0 -74
  146. package/mockup/examples/js-foundation.html +0 -215
  147. package/mockup/examples/layout.html +0 -134
  148. package/mockup/examples/modal-select.html +0 -127
  149. package/mockup/examples/nested-menu.html +0 -73
  150. package/mockup/examples/notification-center.html +0 -86
  151. package/mockup/examples/offcanvas-popover.html +0 -133
  152. package/mockup/examples/pagination-breadcrumbs.html +0 -92
  153. package/mockup/examples/popover.html +0 -81
  154. package/mockup/examples/range.html +0 -69
  155. package/mockup/examples/rating.html +0 -103
  156. package/mockup/examples/segmented-control.html +0 -96
  157. package/mockup/examples/skeletons.html +0 -82
  158. package/mockup/examples/spinner-progress.html +0 -130
  159. package/mockup/examples/stepper.html +0 -119
  160. package/mockup/examples/tables-navbar.html +0 -89
  161. package/mockup/examples/tag.html +0 -115
  162. package/mockup/examples/theming.html +0 -68
  163. package/mockup/examples/tile.html +0 -107
  164. package/mockup/examples/timeline.html +0 -108
  165. package/mockup/examples/toast.html +0 -113
  166. package/mockup/examples/tooltip.html +0 -68
  167. package/mockup/examples/tree-view.html +0 -68
  168. package/mockup/feedback-actions.html +0 -9
  169. package/mockup/forms.html +0 -13
  170. package/mockup/foundations.html +0 -7
  171. package/mockup/kitchen-sink.html +0 -696
  172. package/mockup/navigation-disclosure.html +0 -11
  173. package/mockup/overlays-commands.html +0 -12
  174. package/mockup/templates/README.md +0 -20
  175. package/mockup/templates/admin.html +0 -334
  176. package/mockup/templates/auth.html +0 -234
  177. package/mockup/templates/dashboard.html +0 -442
  178. package/mockup/templates/landing.html +0 -397
  179. package/packages/fokus-icons/package.json +0 -46
  180. package/scripts/migrate-fokus-map.json +0 -1366
  181. package/scripts/migrate-fokus.mjs +0 -97
@@ -1,89 +0,0 @@
1
- # Select customizado
2
-
3
- Substitui a aparência do `<select>` nativo (impossível de estilizar
4
- consistentemente entre navegadores) por um [Dropdown](dropdown.md), mantendo
5
- o `<select>` real por baixo — sincronizado, escondido visualmente.
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <select class="fs-form-select" data-fs="select" id="pais">
11
- <option value="br">Brasil</option>
12
- <option value="pt">Portugal</option>
13
- <option value="us" disabled>Estados Unidos (indisponível)</option>
14
- </select>
15
- ```
16
-
17
- O JS constrói o dropdown customizado logo depois do `<select>` no DOM e
18
- esconde o original (`display: none` — continua no DOM, então
19
- `<select>`/`<option>` do seu HTML/backend seguem sendo a fonte da
20
- verdade).
21
-
22
- ## Anatomia
23
-
24
- Gerado automaticamente a partir do `<select>`: `.fs-dropdown.fs-form-select-dropdown`
25
- > `.fs-form-select` (botão-toggle, mesma aparência estática documentada em
26
- [Input](input.md#anatomia)) + `.fs-dropdown-menu` > um `.fs-dropdown-item`
27
- por `<option>`.
28
-
29
- ## Variações
30
-
31
- Tamanho: `data-size="sm"`/`"lg"` no `<select>` original — vira
32
- `.fs-form-select-sm`/`-lg` no toggle gerado.
33
-
34
- ```html
35
- <select class="fs-form-select" data-fs="select" data-size="sm">...</select>
36
- ```
37
-
38
- ## Estados
39
-
40
- - `<option disabled>` vira um item com `.is-disabled` no menu (não
41
- clicável).
42
- - `<select disabled>` desabilita o botão-toggle inteiro.
43
- - Item selecionado (`selectedIndex`) fica com `.is-active` no menu.
44
-
45
- ## A11y
46
-
47
- `aria-haspopup="listbox"` no toggle, `role="listbox"` no menu,
48
- `role="option"` + `aria-selected` em cada item — aplicados
49
- automaticamente. Navegação por teclado herdada do
50
- [Dropdown](dropdown.md) (`ArrowDown`/`ArrowUp` entre opções, `Escape`
51
- fecha). Selecionar uma opção dispara `change` no `<select>` original —
52
- formulários/validação que escutam esse evento continuam funcionando sem
53
- mudança.
54
-
55
- ## API JS
56
-
57
- Auto-init via `data-fs="select"` **no `<select>`**. `Select.getInstance(selectEl)`.
58
-
59
- | Método | Descrição |
60
- |---|---|
61
- | `show()` / `hide()` / `toggle()` | Delegam pro Dropdown interno. |
62
- | `dispose()` | Desmonta o dropdown gerado, restaura o `<select>` original visível. |
63
-
64
- | Evento (no `<select>` original) | Cancelável | Quando |
65
- |---|---|---|
66
- | `change` (nativo) | Não | Ao selecionar uma opção — mesmo evento que um `<select>` comum dispara. |
67
- | `fs:select:changed` | Não | Mesmo momento, com `event.detail.value` (o novo valor). |
68
-
69
- ## Tokens
70
-
71
- Os mesmos do [Dropdown](dropdown.md) e de
72
- [`.fs-form-select`](input.md) — sem tokens próprios.
73
-
74
- ## Exemplo
75
-
76
- ```html
77
- <select class="fs-form-select" data-fs="select" id="prioridade">
78
- <option value="baixa">Baixa</option>
79
- <option value="media" selected>Média</option>
80
- <option value="alta">Alta</option>
81
- </select>
82
- <script>
83
- document.getElementById("prioridade").addEventListener("fs:select:changed", (e) => {
84
- console.log("nova prioridade:", e.detail.value);
85
- });
86
- </script>
87
- ```
88
-
89
- Mockup: [laboratório do componente](../../mockup/forms.html#select).
@@ -1,70 +0,0 @@
1
- # Skeleton
2
-
3
- Placeholder de carregamento — 100% CSS, sem JS (você troca pelo conteúdo
4
- real quando os dados chegam).
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <div class="fs-skeleton fs-skeleton-text"></div>
10
- <div class="fs-skeleton fs-skeleton-text"></div>
11
- <div class="fs-skeleton fs-skeleton-circle" style="width: 48px; height: 48px;"></div>
12
- ```
13
-
14
- ## Anatomia
15
-
16
- `.fs-skeleton` (base — cor + animação de pulso) combinado com uma forma:
17
- `.fs-skeleton-text` (linha de texto, 1em de altura; o último de uma
18
- sequência automaticamente encolhe pra 80% de largura, imitando o fim de um
19
- parágrafo), `.fs-skeleton-circle` (avatar), `.fs-skeleton-rect` (bloco/
20
- imagem). Tamanho de circle/rect é livre — defina `width`/`height` via
21
- `style` inline ou classe própria.
22
-
23
- ## Variações
24
-
25
- `.fs-skeleton-wave` — em vez de pulsar a opacidade inteira, varre um
26
- brilho da esquerda pra direita (substitui a animação padrão, não combine
27
- os dois).
28
-
29
- ```html
30
- <div class="fs-skeleton fs-skeleton-rect fs-skeleton-wave" style="width: 100%; height: 120px;"></div>
31
- ```
32
-
33
- ## Estados
34
-
35
- Nenhum — é ele mesmo um estado (de carregamento) de outro conteúdo.
36
- Anima infinitamente enquanto presente no DOM; remova/substitua quando os
37
- dados reais chegarem.
38
-
39
- ## A11y
40
-
41
- As variantes `.fs-skeleton-card`, `.fs-skeleton-table` e `.fs-skeleton-avatar` são visuais;
42
- anuncie o carregamento no contêiner com `aria-busy="true"`.
43
-
44
- A animação para automaticamente sob `prefers-reduced-motion: reduce`
45
- (fica estática, sem pulso/varredura). Se o carregamento for anunciado a
46
- leitores de tela, envolva o conjunto de skeletons num contêiner com
47
- `aria-busy="true"` (e remova ao trocar pelo conteúdo real) — não aplicado
48
- automaticamente.
49
-
50
- ## API JS
51
-
52
- Nenhuma — 100% CSS.
53
-
54
- ## Tokens
55
-
56
- `--fs-color-subtle` (cor de base), `--fs-radius-sm`/`-md`.
57
-
58
- ## Exemplo
59
-
60
- ```html
61
- <div class="fs-tile" aria-busy="true">
62
- <div class="fs-skeleton fs-skeleton-circle" style="width: 40px; height: 40px;"></div>
63
- <div class="fs-tile-body" style="width: 100%;">
64
- <div class="fs-skeleton fs-skeleton-text" style="width: 60%;"></div>
65
- <div class="fs-skeleton fs-skeleton-text"></div>
66
- </div>
67
- </div>
68
- ```
69
-
70
- Mockup: [laboratório do componente](../../mockup/feedback-actions.html#skeleton).
@@ -1,107 +0,0 @@
1
- # Stepper
2
-
3
- Wizard de múltiplos passos — cabeçalho com indicadores de progresso, painéis
4
- de conteúdo opcionais, navegação linear ou livre.
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <div class="fs-stepper" data-fs="stepper">
10
- <ol class="fs-stepper-header">
11
- <li class="fs-step fs-step-active">
12
- <span class="fs-step-indicator">1</span>
13
- <span class="fs-step-label">Conta</span>
14
- </li>
15
- <li class="fs-step">
16
- <span class="fs-step-indicator">2</span>
17
- <span class="fs-step-label">Perfil</span>
18
- </li>
19
- <li class="fs-step">
20
- <span class="fs-step-indicator">3</span>
21
- <span class="fs-step-label">Revisão</span>
22
- </li>
23
- </ol>
24
- <div class="fs-stepper-content">
25
- <div class="fs-step-panel is-active">Passo 1: dados da conta.</div>
26
- <div class="fs-step-panel">Passo 2: dados do perfil.</div>
27
- <div class="fs-step-panel">Passo 3: revise e confirme.</div>
28
- </div>
29
- <div class="fs-stepper-actions">
30
- <button type="button" class="fs-btn" data-stepper="prev">Voltar</button>
31
- <button type="button" class="fs-btn fs-btn-primary" data-stepper="next">Avançar</button>
32
- </div>
33
- </div>
34
- ```
35
-
36
- ## Anatomia
37
-
38
- `.fs-stepper` (`data-fs="stepper"`) > `.fs-stepper-header` (`<ol>`) >
39
- `.fs-step` (um por passo) > `.fs-step-indicator` (número/check) +
40
- `.fs-step-label` + `.fs-step-description` (opcional) — mais, opcionais:
41
- `.fs-stepper-content` > `.fs-step-panel` (um por passo, na mesma ordem) e
42
- `.fs-stepper-actions` com botões `data-stepper="prev"`/`"next"`.
43
-
44
- Um `.fs-step` pode apontar pra um painel específico via `data-fs-target`
45
- (seletor) em vez de depender da ordem posicional.
46
-
47
- ## Variações
48
-
49
- `.fs-stepper-vertical` no `.fs-stepper` — cabeçalho em coluna, cada passo
50
- com label/descrição ao lado do indicador em vez de embaixo.
51
-
52
- ## Estados
53
-
54
- Cada `.fs-step` recebe uma destas classes, sincronizadas pelo JS:
55
-
56
- | Classe | Significado |
57
- |---|---|
58
- | (nenhuma) | Pendente — ainda não alcançado. |
59
- | `.fs-step-active` | Passo atual. |
60
- | `.fs-step-completed` | Já concluído (indicador vira um check). |
61
- | `.fs-step-error` | Marcado com erro via `setError()` — não muda automaticamente. |
62
- | `.fs-step-clickable` | Aplicada automaticamente aos passos navegáveis pelo cabeçalho. |
63
-
64
- **Modo linear** (padrão, `data-linear` ausente ou `"true"`): só permite
65
- voltar clicando em passos já concluídos, não pular pra frente. `data-linear="false"` libera clicar em qualquer passo do cabeçalho a
66
- qualquer momento.
67
-
68
- ## A11y
69
-
70
- Cada `.fs-step` tem `role="listitem"`, `tabindex` (só os clicáveis
71
- recebem `0`) e `aria-current="step"` no passo ativo — navegável e ativável
72
- por teclado (`Enter`/`Space`) quando clicável.
73
-
74
- ## API JS
75
-
76
- Auto-init via `data-fs="stepper"`. `Stepper.getInstance(el)`.
77
-
78
- | Método | Descrição |
79
- |---|---|
80
- | `next()` | Avança um passo; no último, chama `complete()`. |
81
- | `prev()` | Volta um passo. |
82
- | `goTo(index)` | Vai direto pro passo `index` (respeitando o modo linear se disparado pelo cabeçalho — via método, sempre permitido). |
83
- | `setError(index, hasError = true)` | Marca/desmarca `.fs-step-error` num passo específico. |
84
- | `complete()` | Marca o wizard como concluído (todos os passos ficam `.fs-step-completed`). |
85
- | `dispose()` | Remove todos os listeners e desregistra a instância. |
86
-
87
- | Evento | Cancelável | Quando |
88
- |---|---|---|
89
- | `fs:stepper:beforechange` | Sim | Antes de trocar de passo (ou concluir) — `event.detail` traz `{ from, to }`; `preventDefault()` bloqueia a mudança (útil pra validar o passo atual antes de avançar). |
90
- | `fs:stepper:changed` | Não | Depois de trocar de passo. |
91
- | `fs:stepper:completed` | Não | Depois de `complete()`. |
92
-
93
- ```js
94
- stepperEl.addEventListener("fs:stepper:beforechange", (event) => {
95
- if (!formularioValido()) event.preventDefault();
96
- });
97
- ```
98
-
99
- ## Tokens
100
-
101
- `--fs-color-border`, `--fs-color-primary` (ativo/concluído),
102
- `--fs-color-danger` (erro), `--fs-color-muted`, `--fs-color-text`.
103
-
104
- ## Exemplo
105
-
106
- Ver acima (Visão geral) — mockup completo com validação por passo em
107
- [`mockup/navigation-disclosure.html#stepper`](../../mockup/navigation-disclosure.html#stepper).
@@ -1,97 +0,0 @@
1
- # Switch
2
-
3
- Toggle liga/desliga 100% CSS, sobre um `<input type="checkbox">` nativo —
4
- semanticamente é um checkbox (representa um estado booleano), só a
5
- aparência muda. Knob **retangular arredondado**, não circular — decisão de
6
- design deliberada (nada circular no framework além de radio/spinner).
7
-
8
- ## Visão geral
9
-
10
- ```html
11
- <div class="fs-switch">
12
- <input type="checkbox" class="fs-switch-input" id="notif" checked>
13
- <label for="notif" class="fs-switch-label">Notificações</label>
14
- </div>
15
- ```
16
-
17
- ## Anatomia
18
-
19
- `.fs-switch` (wrapper) > `.fs-switch-input` (oculto via clip) +
20
- `.fs-switch-label` (`<label for="...">`, desenha o trilho via `::before` e
21
- o knob via `::after`, que desliza com propriedades lógicas e `transition`).
22
-
23
- ## Variações
24
-
25
- Tamanho: `.fs-switch-sm`, `.fs-switch-lg` no wrapper.
26
-
27
- ## Estados
28
-
29
- checked/disabled/foco — mesmo padrão do [Checkbox](checkbox.md). O switch
30
- também possui hover com halo sutil, active com redução discreta do thumb,
31
- valid/invalid opcional para uso em formulário, forced colors e redução de
32
- movimento. O trilho desligado usa superfície neutra e o thumb possui contraste
33
- e elevação próprios. Não há `indeterminate`.
34
-
35
- ## A11y
36
-
37
- - `<input type="checkbox">` nativo — `Space` alterna, leitor de tela
38
- anuncia como checkbox marcado/desmarcado (não há um role "switch" nativo
39
- em HTML; usar `type="checkbox"` é a escolha correta e amplamente
40
- suportada — um `role="switch"` explícito é opcional, não aplicado pelo
41
- framework).
42
- - Quando não houver texto visível ao lado (ex.: dentro de um
43
- [Tile](tile.md), como no exemplo abaixo), use `aria-label` no `<input>`
44
- em vez de deixar a `<label>` vazia.
45
- - O Fokus Styles não injeta `role="switch"`: o contrato oficial continua
46
- sendo o checkbox nativo, com `Space` e anúncio de marcado/desmarcado.
47
-
48
- ```html
49
- <div class="fs-switch">
50
- <input type="checkbox" class="fs-switch-input" id="s1" aria-label="Ativar tema escuro">
51
- <label for="s1" class="fs-switch-label"></label>
52
- </div>
53
- ```
54
-
55
- ## API JS
56
-
57
- Nenhuma — 100% CSS.
58
-
59
- ## Tokens
60
-
61
- | Token | Fallback | Uso |
62
- |---|---|---|
63
- | `--fs-switch-track-width` | `40px` | Largura do trilho |
64
- | `--fs-switch-track-height` | `24px` | Altura do trilho |
65
- | `--fs-switch-thumb-width` | `18px` | Largura do knob |
66
- | `--fs-switch-thumb-height` | `18px` | Altura do knob |
67
- | `--fs-switch-thumb-offset` | `3px` | Posição desligada |
68
- | `--fs-switch-on-offset` | `19px` | Posição ligada |
69
- | `--fs-switch-radius` | `--fs-radius-md` | Raio do trilho |
70
- | `--fs-switch-thumb-radius` | `--fs-radius-sm` | Raio do knob |
71
- | `--fs-switch-gap` | `--fs-space-2` | Distância até o texto |
72
- | `--fs-switch-track-bg` | `--fs-color-subtle` | Fundo desligado |
73
- | `--fs-switch-track-border` | `--fs-color-border-default` | Borda do trilho |
74
- | `--fs-switch-track-checked-bg` | `--fs-color-primary` | Fundo ligado |
75
- | `--fs-switch-thumb-bg` | `--fs-color-surface` | Fundo do knob |
76
- | `--fs-switch-thumb-border` | `--fs-color-border-default` | Borda do knob |
77
- | `--fs-switch-thumb-shadow` | `--fs-shadow-sm` | Elevação do knob |
78
- | `--fs-switch-track-shadow` | Sombra interna sutil | Profundidade do trilho desligado |
79
- | `--fs-switch-hover-ring` | Mistura de primary com transparente | Halo de hover |
80
- | `--fs-switch-hover-shadow` | Halo baseado em `--fs-switch-hover-ring` | Sombra de hover |
81
- | `--fs-switch-active-scale` | `0.92` | Escala do knob durante active |
82
-
83
- ## Exemplo
84
-
85
- ```html
86
- <div class="fs-switch">
87
- <input type="checkbox" class="fs-switch-input" id="sw1">
88
- <label for="sw1" class="fs-switch-label">Desligado</label>
89
- </div>
90
- <div class="fs-switch">
91
- <input type="checkbox" class="fs-switch-input" id="sw2" checked>
92
- <label for="sw2" class="fs-switch-label">Ligado</label>
93
- </div>
94
- ```
95
-
96
- Mockup: [laboratório do componente](../../mockup/forms.html#check-radio-switch).
97
- Uso combinado com Tile: [laboratório de conteúdo e dados](../../mockup/content-data.html#tile).
@@ -1,90 +0,0 @@
1
- # Table
2
-
3
- Tabelas seguem a marcação HTML nativa — classes modificadoras no próprio
4
- `<table>` ligam/desligam comportamentos visuais.
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <table class="fs-table fs-table-striped fs-table-hover">
10
- <thead>
11
- <tr><th>Nome</th><th>Status</th></tr>
12
- </thead>
13
- <tbody>
14
- <tr><td>Ana</td><td>Ativo</td></tr>
15
- <tr><td>Bruno</td><td>Inativo</td></tr>
16
- </tbody>
17
- </table>
18
- ```
19
-
20
- ## Anatomia
21
-
22
- `<table class="fs-table">` com `<thead>`/`<tbody>` nativos — nenhuma
23
- marcação extra obrigatória. `<thead th>` já vem em uppercase, cor muted,
24
- peso médio.
25
-
26
- ## Variações
27
-
28
- - `.fs-table-striped` — linhas ímpares do corpo com fundo diferente (zebra).
29
- - `.fs-table-hover` — destaca a linha sob o cursor.
30
- - `.fs-table-bordered` — bordas em todas as células.
31
- - `.fs-table-borderless` — remove todas as bordas internas.
32
- - `.fs-table-sm` — reduz o padding das células.
33
- - `.fs-table-{primary|secondary|success|warning|danger|info}` — tinge
34
- fundo/texto da tabela inteira com uma cor de estado (mesmos tokens dos
35
- alerts).
36
- - `.fs-table-responsive` — aplique num `<div>` **envolvendo** a
37
- `<table>` (não na tabela em si), para rolagem horizontal em telas
38
- estreitas:
39
-
40
- ```html
41
- <div class="fs-table-responsive">
42
- <table class="fs-table">...</table>
43
- </div>
44
- ```
45
-
46
- Combináveis entre si (ex.: `fs-table-striped fs-table-bordered fs-table-sm`).
47
-
48
- ## Estados
49
-
50
- Nenhum — tabela é conteúdo estático. Se precisar de ordenação/filtro/
51
- paginação client-side, veja o [DataTable](datatable.md), a camada JS
52
- opcional que reusa `.fs-table`.
53
-
54
- ## A11y
55
-
56
- Use `.fs-table-responsive` para rolagem horizontal, `.fs-table-caption` para legenda e
57
- `.fs-table-empty` para estados sem dados. `.fs-table-priority` preserva colunas essenciais.
58
-
59
- - Use `<th scope="col">`/`<th scope="row">` conforme o cabeçalho for de
60
- coluna ou linha — não é aplicado automaticamente.
61
- - Para tabelas grandes/complexas, considere `<caption>` descrevendo o
62
- conteúdo.
63
-
64
- ## API JS
65
-
66
- Nenhuma — 100% CSS. Para ordenação/filtro/paginação, use o
67
- [DataTable](datatable.md).
68
-
69
- ## Tokens
70
-
71
- `--fs-color-border`, `--fs-color-text`, `--fs-color-muted` (cabeçalho),
72
- `--fs-color-subtle` (striped/hover), `--fs-alert-{nome}-bg`/`-text`
73
- (variante de cor de estado).
74
-
75
- ## Exemplo
76
-
77
- ```html
78
- <div class="fs-table-responsive">
79
- <table class="fs-table fs-table-striped fs-table-bordered fs-table-sm">
80
- <thead>
81
- <tr><th scope="col">Nome</th><th scope="col">E-mail</th><th scope="col">Status</th></tr>
82
- </thead>
83
- <tbody>
84
- <tr><td>Ana</td><td>ana@exemplo.com</td><td>Ativo</td></tr>
85
- </tbody>
86
- </table>
87
- </div>
88
- ```
89
-
90
- Mockup: [laboratório do componente](../../mockup/content-data.html#table).
@@ -1,104 +0,0 @@
1
- # Tabs
2
-
3
- Alterna painéis de conteúdo por clique/teclado. Reusa `.fs-nav-link`
4
- ([Navbar](navbar.md)) como item — o HTML e a navegação por teclado são os
5
- mesmos em qualquer um dos 3 estilos visuais.
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <div class="fs-tabs" data-fs="tabs">
11
- <a href="#" class="fs-nav-link is-active" data-fs-target="#perfil">Perfil</a>
12
- <a href="#" class="fs-nav-link" data-fs-target="#seguranca">Segurança</a>
13
- </div>
14
- <div class="fs-tab-content">
15
- <div class="fs-tab-pane is-active" id="perfil">Conteúdo Perfil.</div>
16
- <div class="fs-tab-pane" id="seguranca">Conteúdo Segurança.</div>
17
- </div>
18
- ```
19
-
20
- ## Anatomia
21
-
22
- `.fs-tabs` (`data-fs="tabs"`) > `.fs-nav-link` (um por aba, `data-fs-target`
23
- apontando pro painel) + `.fs-tab-content` > `.fs-tab-pane` (um por aba,
24
- `id` batendo com o `data-fs-target` correspondente).
25
-
26
- ## Variações
27
-
28
- - **Estilo**: linha (padrão, sublinhado na aba ativa), `.fs-tabs-pill`
29
- (chip com fundo sólido na aba ativa, sem linha), `.fs-tabs-depth` (aba
30
- ativa "sobe" com fundo igual ao conteúdo, sobre um backdrop neutro — como
31
- aba de pasta).
32
- - **Alinhamento**: `.fs-tabs-center`, `.fs-tabs-right`; sem sufixo =
33
- esquerda (padrão). `.fs-tabs-fill` distribui os itens em largura igual.
34
- - **Tamanho**: `.fs-tabs-sm`, `.fs-tabs-lg`; sem sufixo = padrão.
35
-
36
- ```html
37
- <div class="fs-tabs fs-tabs-pill fs-tabs-center" data-fs="tabs">...</div>
38
- <div class="fs-tabs fs-tabs-depth fs-tabs-fill fs-tabs-lg" data-fs="tabs">...</div>
39
- ```
40
-
41
- ## Estados
42
-
43
- - `.is-active` na aba e no painel correspondente — controlado pelo JS ao
44
- trocar, ou definido no HTML inicial (exatamente uma aba/painel deve
45
- começar ativo).
46
- - `.is-disabled` na aba — não recebe clique nem entra na navegação por
47
- seta.
48
-
49
- ## A11y
50
-
51
- O JS aplica automaticamente ao inicializar: `role="tablist"` no `.fs-tabs`,
52
- `role="tab"` + `aria-selected` + `tabindex` (roving: só a aba ativa tem
53
- `tabindex="0"`) em cada `.fs-nav-link`, e `role="tabpanel"` +
54
- `aria-labelledby` no painel correspondente. Nenhum desses atributos precisa
55
- ser escrito manualmente no HTML.
56
-
57
- Teclado (com foco numa aba): `ArrowLeft`/`ArrowRight` move e ativa a
58
- aba anterior/próxima (pulando desabilitadas), `Home`/`End` vai pra
59
- primeira/última.
60
-
61
- Para separar navegação e ativação, use `data-tabs-activation="manual"` no
62
- grupo. Nesse modo as setas apenas movem o foco; `Enter` ou `Espaço` ativa a
63
- aba focada.
64
-
65
- ## API JS
66
-
67
- Auto-init via `data-fs="tabs"`. `Tabs.getInstance(el)`.
68
-
69
- | Método | Descrição |
70
- |---|---|
71
- | `show(tabEl)` | Ativa a aba `tabEl` (deve ser uma das `.fs-nav-link` do grupo) e o painel correspondente; desativa as demais. Não faz nada se `tabEl` já é a ativa. |
72
- | `dispose()` | Remove os listeners de clique/teclado e desregistra a instância. |
73
-
74
- | Evento | Cancelável | Quando |
75
- |---|---|---|
76
- | `fs:tab:changed` | Não | Depois de trocar de aba — `event.detail.target` traz o seletor (`data-fs-target`) da aba ativa. |
77
-
78
- ```js
79
- const tabs = FokusStyles.Tabs.getInstance(document.getElementById("minhas-tabs"));
80
- tabs.show(document.querySelector('[data-fs-target="#seguranca"]'));
81
- ```
82
-
83
- ## Tokens
84
-
85
- Usa `--fs-color-border`, `--fs-color-primary` (linha/pill ativos),
86
- `--fs-color-bg-subtle` (depth), `--fs-color-surface` (depth ativo),
87
- `--fs-radius-sm`.
88
-
89
- ## Exemplo
90
-
91
- ```html
92
- <div class="fs-tabs" data-fs="tabs">
93
- <a href="#" class="fs-nav-link is-active" data-fs-target="#tab-perfil">Perfil</a>
94
- <a href="#" class="fs-nav-link" data-fs-target="#tab-seguranca">Segurança</a>
95
- <a href="#" class="fs-nav-link is-disabled" data-fs-target="#tab-notif">Notificações</a>
96
- </div>
97
- <div class="fs-tab-content">
98
- <div class="fs-tab-pane is-active" id="tab-perfil">Conteúdo da aba Perfil.</div>
99
- <div class="fs-tab-pane" id="tab-seguranca">Conteúdo da aba Segurança.</div>
100
- <div class="fs-tab-pane" id="tab-notif">Conteúdo da aba Notificações (desabilitada).</div>
101
- </div>
102
- ```
103
-
104
- Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#tabs).