fokus-styles 2.4.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/css/components.css +561 -83
  2. package/dist/css/components.min.css +1 -1
  3. package/dist/css/fokus-components.css +561 -83
  4. package/dist/css/fokus-components.min.css +1 -1
  5. package/dist/css/fokus-rtl.css +697 -83
  6. package/dist/css/fokus-rtl.min.css +1 -1
  7. package/dist/css/fokus-utilities.css +136 -0
  8. package/dist/css/fokus-utilities.min.css +1 -1
  9. package/dist/css/fokus.css +996 -258
  10. package/dist/css/fokus.min.css +1 -1
  11. package/dist/css/forms.css +300 -176
  12. package/dist/css/forms.min.css +1 -1
  13. package/dist/css/helpers.css +136 -0
  14. package/dist/css/helpers.min.css +1 -1
  15. package/dist/js/fokus.js +270 -25
  16. package/dist/js/fokus.min.js +18 -18
  17. package/package.json +17 -15
  18. package/packages/fokus-components/scss/components/_alerts.scss +128 -6
  19. package/packages/fokus-components/scss/components/_badges.scss +26 -10
  20. package/packages/fokus-components/scss/components/_index.scss +1 -0
  21. package/packages/fokus-components/scss/components/_popover.scss +131 -21
  22. package/packages/fokus-components/scss/components/_responsive.scss +23 -0
  23. package/packages/fokus-components/scss/components/_tag.scss +37 -14
  24. package/packages/fokus-components/scss/components/_toasts.scss +156 -11
  25. package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
  26. package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
  27. package/packages/fokus-components/scss/forms/_forms.scss +16 -0
  28. package/packages/fokus-js/js/carousel.d.ts +4 -0
  29. package/packages/fokus-js/js/carousel.js +8 -0
  30. package/packages/fokus-js/js/core/positioning.js +18 -9
  31. package/packages/fokus-js/js/dropdown.d.ts +4 -0
  32. package/packages/fokus-js/js/dropdown.js +7 -0
  33. package/packages/fokus-js/js/popover.js +26 -1
  34. package/packages/fokus-js/js/tabs.d.ts +3 -0
  35. package/packages/fokus-js/js/tabs.js +5 -0
  36. package/packages/fokus-js/js/tag.js +17 -0
  37. package/packages/fokus-js/js/toast.js +77 -3
  38. package/packages/fokus-js/js/tooltip.d.ts +8 -1
  39. package/packages/fokus-js/js/tooltip.js +106 -13
  40. package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
  41. package/CHANGELOG.md +0 -910
  42. package/dist/css/components.css.map +0 -1
  43. package/dist/css/components.min.css.map +0 -1
  44. package/dist/css/fokus-components.css.map +0 -1
  45. package/dist/css/fokus-components.min.css.map +0 -1
  46. package/dist/css/fokus-core.css.map +0 -1
  47. package/dist/css/fokus-core.min.css.map +0 -1
  48. package/dist/css/fokus-dark.css.map +0 -1
  49. package/dist/css/fokus-dark.min.css.map +0 -1
  50. package/dist/css/fokus-rtl.css.map +0 -1
  51. package/dist/css/fokus-rtl.min.css.map +0 -1
  52. package/dist/css/fokus-utilities.css.map +0 -1
  53. package/dist/css/fokus-utilities.min.css.map +0 -1
  54. package/dist/css/fokus.css.map +0 -1
  55. package/dist/css/fokus.min.css.map +0 -1
  56. package/dist/css/fonts.css.map +0 -1
  57. package/dist/css/fonts.min.css.map +0 -1
  58. package/dist/css/forms.css.map +0 -1
  59. package/dist/css/forms.min.css.map +0 -1
  60. package/dist/css/helpers.css.map +0 -1
  61. package/dist/css/helpers.min.css.map +0 -1
  62. package/dist/css/layout.css.map +0 -1
  63. package/dist/css/layout.min.css.map +0 -1
  64. package/dist/js/fokus.js.map +0 -7
  65. package/dist/js/fokus.min.js.map +0 -7
  66. package/docs/README.md +0 -86
  67. package/docs/comparison.md +0 -124
  68. package/docs/components/accordion.md +0 -104
  69. package/docs/components/alert-dialog.md +0 -99
  70. package/docs/components/alert.md +0 -59
  71. package/docs/components/avatar.md +0 -13
  72. package/docs/components/badge.md +0 -82
  73. package/docs/components/breadcrumb.md +0 -93
  74. package/docs/components/button-group.md +0 -13
  75. package/docs/components/button.md +0 -98
  76. package/docs/components/card.md +0 -111
  77. package/docs/components/carousel.md +0 -167
  78. package/docs/components/checkbox.md +0 -97
  79. package/docs/components/close-button.md +0 -13
  80. package/docs/components/code.md +0 -13
  81. package/docs/components/collapse.md +0 -78
  82. package/docs/components/combobox.md +0 -123
  83. package/docs/components/command-palette.md +0 -131
  84. package/docs/components/datatable.md +0 -173
  85. package/docs/components/datepicker.md +0 -137
  86. package/docs/components/divider.md +0 -57
  87. package/docs/components/dropdown.md +0 -103
  88. package/docs/components/empty-state.md +0 -65
  89. package/docs/components/file-upload-advanced.md +0 -116
  90. package/docs/components/file-upload.md +0 -93
  91. package/docs/components/icon-link.md +0 -13
  92. package/docs/components/input-group.md +0 -73
  93. package/docs/components/input.md +0 -90
  94. package/docs/components/list-group.md +0 -13
  95. package/docs/components/modal.md +0 -120
  96. package/docs/components/navbar.md +0 -74
  97. package/docs/components/nested-menu.md +0 -90
  98. package/docs/components/notification-center.md +0 -116
  99. package/docs/components/offcanvas.md +0 -102
  100. package/docs/components/pagination.md +0 -145
  101. package/docs/components/placeholder.md +0 -13
  102. package/docs/components/popover.md +0 -105
  103. package/docs/components/progress.md +0 -126
  104. package/docs/components/radio.md +0 -70
  105. package/docs/components/range.md +0 -83
  106. package/docs/components/rating.md +0 -91
  107. package/docs/components/ratio.md +0 -13
  108. package/docs/components/scrollspy.md +0 -13
  109. package/docs/components/segmented-control.md +0 -82
  110. package/docs/components/select.md +0 -89
  111. package/docs/components/skeleton.md +0 -70
  112. package/docs/components/stepper.md +0 -107
  113. package/docs/components/switch.md +0 -75
  114. package/docs/components/table.md +0 -90
  115. package/docs/components/tabs.md +0 -104
  116. package/docs/components/tag.md +0 -129
  117. package/docs/components/tile.md +0 -112
  118. package/docs/components/timeline.md +0 -78
  119. package/docs/components/toast.md +0 -95
  120. package/docs/components/tooltip.md +0 -77
  121. package/docs/components/tree-view.md +0 -118
  122. package/docs/contributing/contributing.md +0 -18
  123. package/docs/getting-started/installation.md +0 -70
  124. package/docs/getting-started/usage.md +0 -105
  125. package/docs/guides/accessibility.md +0 -102
  126. package/docs/guides/charts.md +0 -73
  127. package/docs/guides/dark-mode.md +0 -90
  128. package/docs/guides/icons.md +0 -99
  129. package/docs/guides/javascript-api.md +0 -9
  130. package/docs/guides/layout-advanced.md +0 -118
  131. package/docs/guides/migration-clarus-to-fokus.md +0 -48
  132. package/docs/guides/migration-external.md +0 -123
  133. package/docs/guides/migration-v1.md +0 -63
  134. package/docs/guides/print.md +0 -30
  135. package/docs/guides/rtl-and-system-preferences.md +0 -28
  136. package/docs/guides/theming.md +0 -140
  137. package/docs/guides/utility-api.md +0 -9
  138. package/docs/prompts/prompt-plan.md +0 -45
  139. package/docs/reference/accessibility-matrix.md +0 -77
  140. package/docs/reference/browser-support.md +0 -75
  141. package/docs/reference/contrast-report.md +0 -50
  142. package/docs/reference/definitions.md +0 -864
  143. package/docs/reference/design-tokens.md +0 -194
  144. package/docs/reference/scss-architecture.md +0 -227
  145. package/docs/reference/size-baseline.json +0 -34
  146. package/docs/reference/stability.md +0 -89
  147. package/docs/showcase.md +0 -25
  148. package/mockup/README.md +0 -41
  149. package/mockup/assets/carousel-planning.png +0 -0
  150. package/mockup/assets/carousel-workspace.png +0 -0
  151. package/mockup/assets/example-theme.css +0 -8
  152. package/mockup/assets/example-theme.js +0 -11
  153. package/mockup/assets/showcase-contracts.js +0 -84
  154. package/mockup/assets/showcase.css +0 -91
  155. package/mockup/assets/showcase.js +0 -724
  156. package/mockup/content-data.html +0 -9
  157. package/mockup/examples/accordion-tabs-toast.html +0 -149
  158. package/mockup/examples/alert-dialog.html +0 -84
  159. package/mockup/examples/alerts.html +0 -41
  160. package/mockup/examples/badges-alerts.html +0 -77
  161. package/mockup/examples/buttons.html +0 -58
  162. package/mockup/examples/cards.html +0 -132
  163. package/mockup/examples/carousel.html +0 -126
  164. package/mockup/examples/charts.html +0 -102
  165. package/mockup/examples/check-radio-switch.html +0 -144
  166. package/mockup/examples/collapse.html +0 -69
  167. package/mockup/examples/combobox.html +0 -60
  168. package/mockup/examples/command-palette.html +0 -64
  169. package/mockup/examples/datatable.html +0 -113
  170. package/mockup/examples/datepicker.html +0 -62
  171. package/mockup/examples/divider.html +0 -45
  172. package/mockup/examples/dropdown-tooltip.html +0 -77
  173. package/mockup/examples/empty-state.html +0 -56
  174. package/mockup/examples/file-drop.html +0 -74
  175. package/mockup/examples/file-upload-advanced.html +0 -68
  176. package/mockup/examples/forms-advanced.html +0 -77
  177. package/mockup/examples/hover-card.html +0 -86
  178. package/mockup/examples/icons.html +0 -157
  179. package/mockup/examples/input-group.html +0 -74
  180. package/mockup/examples/js-foundation.html +0 -215
  181. package/mockup/examples/layout.html +0 -134
  182. package/mockup/examples/modal-select.html +0 -127
  183. package/mockup/examples/nested-menu.html +0 -73
  184. package/mockup/examples/notification-center.html +0 -86
  185. package/mockup/examples/offcanvas-popover.html +0 -133
  186. package/mockup/examples/pagination-breadcrumbs.html +0 -92
  187. package/mockup/examples/range.html +0 -69
  188. package/mockup/examples/rating.html +0 -103
  189. package/mockup/examples/segmented-control.html +0 -96
  190. package/mockup/examples/skeletons.html +0 -82
  191. package/mockup/examples/spinner-progress.html +0 -130
  192. package/mockup/examples/stepper.html +0 -119
  193. package/mockup/examples/tables-navbar.html +0 -89
  194. package/mockup/examples/tag.html +0 -105
  195. package/mockup/examples/theming.html +0 -68
  196. package/mockup/examples/tile.html +0 -107
  197. package/mockup/examples/timeline.html +0 -108
  198. package/mockup/examples/tree-view.html +0 -68
  199. package/mockup/feedback-actions.html +0 -9
  200. package/mockup/forms.html +0 -13
  201. package/mockup/foundations.html +0 -7
  202. package/mockup/kitchen-sink.html +0 -696
  203. package/mockup/navigation-disclosure.html +0 -11
  204. package/mockup/overlays-commands.html +0 -12
  205. package/mockup/templates/README.md +0 -20
  206. package/mockup/templates/admin.html +0 -334
  207. package/mockup/templates/auth.html +0 -234
  208. package/mockup/templates/dashboard.html +0 -442
  209. package/mockup/templates/landing.html +0 -397
  210. package/packages/fokus-icons/package.json +0 -46
  211. package/scripts/migrate-fokus-map.json +0 -1366
  212. package/scripts/migrate-fokus.mjs +0 -97
@@ -1,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,75 +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 `left` + `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). Sem
30
- `indeterminate` nem validação (switch não é um campo de formulário
31
- validável, é um controle de preferência/estado).
32
-
33
- ## A11y
34
-
35
- - `<input type="checkbox">` nativo — `Space` alterna, leitor de tela
36
- anuncia como checkbox marcado/desmarcado (não há um role "switch" nativo
37
- em HTML; usar `type="checkbox"` é a escolha correta e amplamente
38
- suportada — um `role="switch"` explícito é opcional, não aplicado pelo
39
- framework).
40
- - Quando não houver texto visível ao lado (ex.: dentro de um
41
- [Tile](tile.md), como no exemplo abaixo), use `aria-label` no `<input>`
42
- em vez de deixar a `<label>` vazia.
43
-
44
- ```html
45
- <div class="fs-switch">
46
- <input type="checkbox" class="fs-switch-input" id="s1" aria-label="Ativar tema escuro">
47
- <label for="s1" class="fs-switch-label"></label>
48
- </div>
49
- ```
50
-
51
- ## API JS
52
-
53
- Nenhuma — 100% CSS.
54
-
55
- ## Tokens
56
-
57
- Sem tokens de componente próprios — usa `--fs-color-primary` (trilho
58
- ligado), `--fs-color-border` (knob desligado), `--fs-radius-md` (trilho),
59
- `--fs-radius-sm` (knob).
60
-
61
- ## Exemplo
62
-
63
- ```html
64
- <div class="fs-switch">
65
- <input type="checkbox" class="fs-switch-input" id="sw1">
66
- <label for="sw1" class="fs-switch-label">Desligado</label>
67
- </div>
68
- <div class="fs-switch">
69
- <input type="checkbox" class="fs-switch-input" id="sw2" checked>
70
- <label for="sw2" class="fs-switch-label">Ligado</label>
71
- </div>
72
- ```
73
-
74
- Mockup: [laboratório do componente](../../mockup/content-data.html#tile).
75
- 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).
@@ -1,129 +0,0 @@
1
- # Tag
2
-
3
- Badge dismissível — reusa [Badge](badge.md) e `.fs-btn-close`
4
- ([Button](button.md)) mais o JS mínimo pra remover do DOM ao clicar no "x".
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <span class="fs-badge fs-tag" data-fs="tag">
10
- Frontend
11
- <button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Frontend"></button>
12
- </span>
13
- ```
14
-
15
- ## Anatomia
16
-
17
- `.fs-badge.fs-tag` (mesmo elemento, duas classes — Tag é um refinamento de
18
- Badge, não um componente separado) contendo texto + `.fs-btn-close` com
19
- `data-fs-dismiss="tag"`.
20
-
21
- ## Variações
22
-
23
- - **Cor**: as mesmas de [Badge](badge.md) (`.fs-badge-{cor}`).
24
- - **Tamanho**: apenas o tamanho padrão. Tags são controles compactos de
25
- remoção; usar uma única densidade evita variações de alvo e de texto em
26
- filtros e formulários.
27
- - **Ícone inicial**: envolva um SVG de `fokus-styles/icons` em `.fs-tag-icon` antes
28
- de `.fs-tag-label`. O ícone é decorativo (`aria-hidden="true"`) quando o
29
- texto já descreve a tag.
30
- - **Texto longo**: use `.fs-tag-truncate` na tag e `.fs-tag-label` no texto.
31
- Defina `--fs-tag-max-inline-size` conforme o contexto; o texto integral
32
- continua no DOM e pode ser exposto em `title` como apoio visual.
33
- - **Agrupamento**: `.fs-tag-group` (flex + wrap) no contêiner pai,
34
- une tags lado a lado com separadores translúcidos; o botão de remoção só é
35
- revelado em hover ou foco, evitando ruído visual. A reserva simétrica de
36
- espaço para o botão mantém o texto visualmente centralizado; o fundo da tag
37
- inteira sinaliza o hover.
38
- - **Protegida**: `.fs-tag-protected` desativa interação com `pointer-events:
39
- none`; substitua o botão por `.fs-tag-lock` e o ícone `shield-check` de
40
- `fokus-styles/icons` quando a tag não puder ser removida.
41
- - **Overflow**: `.fs-tag-overflow` é um `<button>` compacto e transparente,
42
- sem borda, com o ícone `tags` em `primary` centralizado; ele representa tags
43
- não exibidas.
44
- Conecte-o a um popover ou a uma lista expandida e mantenha `aria-expanded`
45
- sincronizado com essa interface.
46
-
47
- ```html
48
- <div class="fs-tag-group">
49
- <span class="fs-badge fs-tag" data-fs="tag">Design<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover"></button></span>
50
- <span class="fs-badge fs-tag" data-fs="tag">Frontend<button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover"></button></span>
51
- </div>
52
- ```
53
-
54
- ## Estados
55
-
56
- Botão de dispensa é transparente no repouso; tem hover (fundo sutil) e
57
- `:active` (leve "afundar", feedback tátil antes da remoção assíncrona). Ao
58
- receber foco pelo teclado, a tag inteira também recebe um anel de foco para
59
- ficar distinguível em agrupamentos densos.
60
-
61
- Para uma operação assíncrona, aplique `aria-busy="true"` e `.is-loading`, ou
62
- use `Tag.setLoading(true)`. Inclua um `.fs-spinner` depois de `.fs-tag-label`:
63
- o estado pendente usa fundo `warning`, texto e spinner pretos. O botão de
64
- remoção é desabilitado até que o estado seja removido.
65
-
66
- ## A11y
67
-
68
- - `.fs-btn-close` **precisa** de `aria-label` descritivo (ex.: "Remover tag
69
- Frontend", não só "Remover") — é um botão só-ícone.
70
- - A remoção só acontece ao clicar no botão de fechar, nunca ao clicar na
71
- tag inteira — evita remoção acidental.
72
- - Para tags truncadas, mantenha a string completa dentro de `.fs-tag-label`;
73
- ela continua disponível para tecnologias assistivas. `title` é apenas uma
74
- ajuda adicional para ponteiro.
75
- - O botão `.fs-tag-overflow` requer um nome acessível descritivo, como
76
- `aria-label="Mostrar mais 3 tags"`.
77
-
78
- ## API JS
79
-
80
- Auto-init via `data-fs="tag"`. `Tag.getInstance(el)`.
81
-
82
- | Método | Descrição |
83
- |---|---|
84
- | `dismiss()` | Dispara `fs:tag:dismissed` (cancelável); se não cancelado, remove o elemento do DOM e retorna `true`. Retorna `false` se estiver carregando ou se o evento for cancelado. |
85
- | `setLoading(loading)` | Alterna `.is-loading`, `aria-busy` e o estado desabilitado do botão de remoção. |
86
- | `dispose()` | Remove o listener de clique e desregistra a instância (não remove o elemento). |
87
-
88
- | Evento | Cancelável | Quando |
89
- |---|---|---|
90
- | `fs:tag:dismissed` | Sim | Antes de remover — `event.preventDefault()` cancela a remoção. |
91
-
92
- ## Tokens
93
-
94
- Usa os tokens de [Badge](badge.md). Sem tokens de componente próprios.
95
-
96
- ## Exemplo
97
-
98
- ```html
99
- <div class="fs-tag-group">
100
- <span class="fs-badge fs-badge-primary fs-tag" data-fs="tag">
101
- Urgente
102
- <button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Urgente"></button>
103
- </span>
104
- <span class="fs-badge fs-badge-danger fs-tag" data-fs="tag">
105
- Bloqueado
106
- <button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Bloqueado"></button>
107
- </span>
108
- </div>
109
- ```
110
-
111
- ```html
112
- <span class="fs-badge fs-tag fs-tag-truncate" style="--fs-tag-max-inline-size: 20rem;" data-fs="tag">
113
- <span class="fs-tag-icon" aria-hidden="true"><!-- SVG de fokus-styles/icons --></span>
114
- <span class="fs-tag-label">Revisão de acessibilidade e compatibilidade entre navegadores</span>
115
- <button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Revisão de acessibilidade e compatibilidade entre navegadores"></button>
116
- </span>
117
-
118
- <button type="button" class="fs-badge fs-tag fs-tag-overflow" aria-label="Mostrar mais 3 tags" aria-expanded="false">
119
- <svg class="fs-icon" aria-hidden="true"><!-- SVG tags de fokus-styles/icons --></svg>
120
- </button>
121
-
122
- <span class="fs-badge fs-tag is-loading" data-fs="tag" aria-busy="true">
123
- <span class="fs-tag-label">Salvando</span>
124
- <span class="fs-spinner" aria-hidden="true"></span>
125
- <button type="button" class="fs-btn-close" data-fs-dismiss="tag" aria-label="Remover tag Salvando" disabled></button>
126
- </span>
127
- ```
128
-
129
- Mockup: [laboratório do componente](../../mockup/feedback-actions.html#tag).