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,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).