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,112 +0,0 @@
1
- # Tile
2
-
3
- Linha compacta ícone + título/subtítulo + ações, para listas de
4
- opções/configurações/itens (sinergia visual com
5
- [Notification Center](notification-center.md) e [Empty State](empty-state.md)).
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <div class="fs-tile">
11
- <div class="fs-tile-icon" aria-hidden="true">
12
- <svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="M10 9H8"/><path d="M16 13H8"/><path d="M16 17H8"/></svg>
13
- </div>
14
- <div class="fs-tile-body">
15
- <p class="fs-tile-title">Relatório mensal.pdf</p>
16
- <p class="fs-tile-subtitle">2.4 MB · Atualizado há 2h</p>
17
- </div>
18
- <div class="fs-tile-actions">
19
- <button type="button" class="fs-btn fs-btn-sm">Abrir</button>
20
- </div>
21
- </div>
22
- ```
23
-
24
- ## Anatomia
25
-
26
- `.fs-tile` > `.fs-tile-icon` (ícone SVG — [`fokus-styles/icons`](../guides/icons.md)
27
- recomendado — ou imagem, largura fixa) +
28
- `.fs-tile-body` (`.fs-tile-title` + `.fs-tile-subtitle`, opcional, ambos
29
- truncam com reticências se não couberem) + `.fs-tile-actions` (opcional —
30
- botões, switch, badge).
31
-
32
- ## Variações
33
-
34
- - **Ações à direita** (padrão) ou **embaixo**: adicione
35
- `.fs-tile-actions-bottom` no `.fs-tile` para `.fs-tile-actions` quebrar
36
- para uma segunda linha, alinhada à direita.
37
- - **Clicável**: `.fs-tile-clickable` + [`.fs-stretched-link`](card.md#fs-card-clickable)
38
- num link dentro do `.fs-tile-body` — o tile inteiro fica clicável/focável
39
- sem aninhar um `<a>` ao redor de tudo.
40
- - **Tamanho**: `.fs-tile-sm`, `.fs-tile-lg`; sem sufixo = padrão.
41
-
42
- ```html
43
- <div class="fs-tile fs-tile-actions-bottom">
44
- <div class="fs-tile-icon" aria-hidden="true">
45
- <svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>
46
- </div>
47
- <div class="fs-tile-body">
48
- <p class="fs-tile-title">Plano expira em 3 dias</p>
49
- </div>
50
- <div class="fs-tile-actions">
51
- <button type="button" class="fs-btn fs-btn-outline-secondary fs-btn-sm">Depois</button>
52
- <button type="button" class="fs-btn fs-btn-primary fs-btn-sm">Renovar</button>
53
- </div>
54
- </div>
55
-
56
- <div class="fs-tile fs-tile-clickable">
57
- <div class="fs-tile-icon" aria-hidden="true">
58
- <svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
59
- </div>
60
- <div class="fs-tile-body">
61
- <p class="fs-tile-title"><a href="/perfil" class="fs-stretched-link">Jorge Reis</a></p>
62
- <p class="fs-tile-subtitle">Ver perfil</p>
63
- </div>
64
- </div>
65
- ```
66
-
67
- ## Estados
68
-
69
- Nenhum próprio — hover/focus da variante clicável reusa o mesmo padrão do
70
- [Card clicável](card.md#fs-card-clickable) (`:hover`/`:focus-within`, borda
71
- + sombra).
72
-
73
- ## A11y
74
-
75
- - Título/subtítulo truncados (`text-overflow: ellipsis`) escondem texto
76
- visualmente, mas o conteúdo continua no DOM/acessível — se o truncamento
77
- for crítico, considere `title="..."` no elemento pra tooltip nativo.
78
- - Na variante clicável, o link dentro de `.fs-tile-body` é o elemento
79
- focável real — o `::after` do stretched-link só expande a área de
80
- clique, não tira o foco do link.
81
-
82
- ## API JS
83
-
84
- Nenhuma — 100% CSS.
85
-
86
- ## Tokens
87
-
88
- Sem tokens de componente próprios — usa `--fs-color-border`,
89
- `--fs-color-surface`, `--fs-color-bg-subtle` (ícone), `--fs-color-text`,
90
- `--fs-color-muted`, `--fs-radius-md`, `--fs-shadow-sm` (hover clicável).
91
-
92
- ## Exemplo
93
-
94
- ```html
95
- <div class="fs-tile">
96
- <div class="fs-tile-icon" aria-hidden="true">
97
- <svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"/><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/></svg>
98
- </div>
99
- <div class="fs-tile-body">
100
- <p class="fs-tile-title">Tema escuro</p>
101
- <p class="fs-tile-subtitle">Alterna a aparência da interface</p>
102
- </div>
103
- <div class="fs-tile-actions">
104
- <div class="fs-switch">
105
- <input type="checkbox" class="fs-switch-input" id="tile-theme" checked aria-label="Ativar tema escuro">
106
- <label for="tile-theme" class="fs-switch-label"></label>
107
- </div>
108
- </div>
109
- </div>
110
- ```
111
-
112
- Mockup: [laboratório do componente](../../mockup/content-data.html#tile).
@@ -1,78 +0,0 @@
1
- # Timeline
2
-
3
- Linha do tempo de eventos — 100% CSS, com marcadores conectados e estados
4
- por item (pendente/ativo/concluído/falhou).
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <ol class="fs-timeline">
10
- <li class="fs-timeline-item fs-timeline-completed">
11
- <div class="fs-timeline-marker"></div>
12
- <div class="fs-timeline-content">
13
- <p class="fs-timeline-title">Pedido criado</p>
14
- <p class="fs-timeline-text">Seu pedido foi registrado.</p>
15
- <span class="fs-timeline-time">10:32</span>
16
- </div>
17
- </li>
18
- <li class="fs-timeline-item fs-timeline-active">
19
- <div class="fs-timeline-marker"></div>
20
- <div class="fs-timeline-content">
21
- <p class="fs-timeline-title">Em preparação</p>
22
- </div>
23
- </li>
24
- <li class="fs-timeline-item">
25
- <div class="fs-timeline-marker"></div>
26
- <div class="fs-timeline-content">
27
- <p class="fs-timeline-title">Enviado</p>
28
- </div>
29
- </li>
30
- </ol>
31
- ```
32
-
33
- ## Anatomia
34
-
35
- `<ol class="fs-timeline">` > `.fs-timeline-item` (um por evento) >
36
- `.fs-timeline-marker` (círculo) + `.fs-timeline-content` >
37
- `.fs-timeline-title` + `.fs-timeline-text` (opcional) +
38
- `.fs-timeline-time` (opcional). O conector entre marcadores é desenhado
39
- via `::before` — não insira manualmente.
40
-
41
- ## Variações
42
-
43
- `.fs-timeline-horizontal` no `<ol>` — inverte o eixo (itens em colunas,
44
- marcador no topo, conector na horizontal).
45
-
46
- ## Estados
47
-
48
- Cada `.fs-timeline-item` aceita uma destas classes (mesma lógica visual do
49
- [Stepper](stepper.md) — controle manual, sem JS):
50
-
51
- | Classe | Efeito |
52
- |---|---|
53
- | (nenhuma) | Pendente — marcador vazio, conector cinza. |
54
- | `.fs-timeline-active` | Em andamento — marcador preenchido na cor primária. |
55
- | `.fs-timeline-completed` | Concluído — marcador com check verde; o conector seguinte também fica verde (indica progresso). |
56
- | `.fs-timeline-failed` | Falhou — marcador e título em vermelho. |
57
-
58
- ## A11y
59
-
60
- Use `<ol>` (ordem cronológica importa) — já no exemplo. Sem JS, sem
61
- interação por teclado própria; se os itens forem clicáveis (ex.: expandir
62
- detalhes), essa interação é sua responsabilidade.
63
-
64
- ## API JS
65
-
66
- Nenhuma — 100% CSS. Estados são classes que você controla pela sua
67
- aplicação.
68
-
69
- ## Tokens
70
-
71
- `--fs-color-border` (conector/marcador padrão), `--fs-color-primary`
72
- (ativo), `--fs-color-success` (concluído), `--fs-color-danger` (falhou),
73
- `--fs-color-text`, `--fs-color-muted`.
74
-
75
- ## Exemplo
76
-
77
- Ver acima (Visão geral) — mockup completo com as duas orientações em
78
- [`mockup/content-data.html#timeline`](../../mockup/content-data.html#timeline).
@@ -1,95 +0,0 @@
1
- # Toast
2
-
3
- Notificação temporária, empilhada num canto da tela, com dispensa manual
4
- ou automática por tempo. Base do [Notification Center](notification-center.md).
5
-
6
- ## Visão geral
7
-
8
- ```html
9
- <button type="button" class="fs-btn fs-btn-primary" id="btn-toast">Mostrar toast</button>
10
-
11
- <div class="fs-toast-container">
12
- <div class="fs-toast fs-toast-success" data-fs="toast" id="meuToast" data-delay="4000">
13
- <div class="fs-toast-header">
14
- <span>Sucesso</span>
15
- <button type="button" class="fs-btn-close" data-fs-dismiss="toast" aria-label="Fechar"></button>
16
- </div>
17
- <div class="fs-toast-body">Operação concluída com sucesso.</div>
18
- </div>
19
- </div>
20
- ```
21
-
22
- ```js
23
- document.getElementById("btn-toast").addEventListener("click", () => {
24
- FokusStyles.Toast.getInstance(document.getElementById("meuToast")).show();
25
- });
26
- ```
27
-
28
- Ao contrário de Modal/Offcanvas, o Toast **não** abre sozinho ao clicar num
29
- gatilho com `data-fs-target` — ele é mostrado programaticamente via
30
- `.show()`, porque geralmente é disparado por um evento da sua aplicação
31
- (sucesso de uma requisição, etc.), não diretamente por um clique.
32
-
33
- ## Anatomia
34
-
35
- `.fs-toast-container` (posição fixa num canto — um só por página,
36
- compartilhado por todos os toasts) > `.fs-toast` (`data-fs="toast"`) >
37
- `.fs-toast-header` (título + `.fs-btn-close`) + `.fs-toast-body`.
38
-
39
- ## Variações
40
-
41
- Cor: `.fs-toast-{primary|secondary|success|warning|danger|info}` no
42
- `.fs-toast` — tinge só o header.
43
-
44
- ## Estados
45
-
46
- `.is-open` — controlado pelo JS (o toast começa com `display: none`
47
- inline até a primeira `show()`).
48
-
49
- - `data-delay` (ms, padrão `4000`) — tempo até auto-esconder.
50
- - `data-autohide="false"` — desativa o auto-esconder; só fecha pelo
51
- `.fs-btn-close` ou `.hide()` programático.
52
-
53
- ## A11y
54
-
55
- `role="status"` + `aria-live="polite"` aplicados automaticamente — leitor
56
- de tela anuncia o conteúdo ao aparecer, sem interromper o que está sendo
57
- lido (diferente de `aria-live="assertive"`, que interromperia).
58
-
59
- ## API JS
60
-
61
- Auto-init via `data-fs="toast"` (registra a instância, mas **não** mostra
62
- automaticamente). `Toast.getInstance(el)`.
63
-
64
- | Método | Descrição |
65
- |---|---|
66
- | `show()` | Mostra (anima expansão), inicia o temporizador de auto-esconder se `autohide` estiver ativo. |
67
- | `hide()` | Esconde (anima recolhimento), cancela o temporizador. |
68
- | `toggle()` | Alterna. |
69
- | `dispose()` | Cancela o temporizador, remove listeners, desregistra a instância. |
70
-
71
- | Evento | Cancelável | Quando |
72
- |---|---|---|
73
- | `fs:toast:shown` | Não | Depois que a animação de mostrar termina. |
74
- | `fs:toast:hidden` | Não | Depois que a animação de esconder termina (inclusive auto-hide). |
75
-
76
- ## Tokens
77
-
78
- `--fs-color-border`, `--fs-color-surface`, `--fs-alert-{nome}-bg`/`-text`
79
- (header colorido), `--fs-radius-md`, `--fs-shadow-md`.
80
-
81
- ## Exemplo
82
-
83
- ```html
84
- <div class="fs-toast-container">
85
- <div class="fs-toast fs-toast-danger" data-fs="toast" id="erroToast" data-autohide="false">
86
- <div class="fs-toast-header">
87
- <span>Erro</span>
88
- <button type="button" class="fs-btn-close" data-fs-dismiss="toast" aria-label="Fechar"></button>
89
- </div>
90
- <div class="fs-toast-body">Falha ao salvar. Tente novamente.</div>
91
- </div>
92
- </div>
93
- ```
94
-
95
- Mockup: [laboratório do componente](../../mockup/overlays-commands.html#toast).
@@ -1,77 +0,0 @@
1
- # Tooltip
2
-
3
- Rótulo curto que aparece ao passar o mouse ou focar um elemento —
4
- substitui o `title` nativo do navegador (lento, sem estilo, inacessível a
5
- teclado em alguns navegadores).
6
-
7
- ## Visão geral
8
-
9
- ```html
10
- <button type="button" class="fs-btn" data-fs="tooltip" title="Copiar para a área de transferência">
11
- Copiar
12
- </button>
13
- ```
14
-
15
- O texto vem do atributo `title` (ou `data-title`) — o JS o remove do DOM
16
- na inicialização (pra não duplicar com o tooltip nativo do navegador) e o
17
- recria como conteúdo do tooltip.
18
-
19
- ## Anatomia
20
-
21
- Gerado inteiramente pelo JS: `.fs-tooltip` (`role="tooltip"`) >
22
- `.fs-tooltip-arrow` + `.fs-tooltip-inner` (texto). Não escreva essa
23
- marcação manualmente — só o elemento de referência com `title`/`data-fs="tooltip"`.
24
-
25
- ## Variações
26
-
27
- `data-placement` (`top` — padrão, `bottom`, `left`, `right`) no elemento
28
- de referência. Reposiciona automaticamente se não couber.
29
-
30
- ```html
31
- <button class="fs-btn" data-fs="tooltip" data-placement="right" title="Mais opções">⋮</button>
32
- ```
33
-
34
- ## Estados
35
-
36
- `.is-open` — controlado pelo JS ao mostrar/esconder; não defina
37
- manualmente.
38
-
39
- ## A11y
40
-
41
- O JS aplica `aria-describedby` no elemento de referência, apontando pro
42
- `id` do tooltip — leitor de tela anuncia o conteúdo ao focar o elemento.
43
- Mostra em `mouseenter`/`focus`, esconde em `mouseleave`/`blur`/`Escape` —
44
- funciona por mouse e por teclado igualmente (ao contrário do `title`
45
- nativo, que só mostra no hover).
46
-
47
- ## API JS
48
-
49
- Auto-init via `data-fs="tooltip"` **ou** instanciação manual
50
- (`new FokusStyles.Tooltip(el, { title, placement })` — útil quando o texto vem
51
- de outro lugar, não de um atributo estático; é assim que
52
- [Breadcrumb](breadcrumb.md) anexa tooltips a labels truncados).
53
- `Tooltip.getInstance(el)`.
54
-
55
- | Método | Descrição |
56
- |---|---|
57
- | `show()` | Mostra o tooltip, posicionado relativo à referência. |
58
- | `hide()` | Esconde. |
59
- | `toggle()` | Alterna. |
60
- | `dispose()` | Remove listeners, `aria-describedby` e o elemento do tooltip do DOM; desregistra a instância. |
61
-
62
- | Evento (no elemento de referência) | Cancelável | Quando |
63
- |---|---|---|
64
- | `fs:tooltip:shown` | Não | Depois de mostrar. |
65
- | `fs:tooltip:hidden` | Não | Depois de esconder. |
66
-
67
- ## Tokens
68
-
69
- `--fs-tooltip-bg`, `--fs-tooltip-text`, `--fs-radius-sm`.
70
-
71
- ## Exemplo
72
-
73
- ```html
74
- <button type="button" class="fs-btn-close" data-fs="tooltip" title="Fechar" aria-label="Fechar"></button>
75
- ```
76
-
77
- Mockup: [laboratório do componente](../../mockup/overlays-commands.html#tooltip).
@@ -1,118 +0,0 @@
1
- # Tree View
2
-
3
- Lista hierárquica navegável (arquivos, categorias, organogramas), seguindo
4
- o padrão [WAI-ARIA Tree View](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/).
5
- Marcação nativa `<ul>`/`<li>` aninhada — o JS só adiciona os papéis ARIA,
6
- o botão de expandir/colapsar e a navegação por teclado.
7
-
8
- ## Visão geral
9
-
10
- ```html
11
- <ul class="fs-tree" data-fs="tree-view">
12
- <li>
13
- <span class="fs-tree-label">src</span>
14
- <ul>
15
- <li><span class="fs-tree-label">index.js</span></li>
16
- <li>
17
- <span class="fs-tree-label">components</span>
18
- <ul>
19
- <li><span class="fs-tree-label">Button.js</span></li>
20
- </ul>
21
- </li>
22
- </ul>
23
- </li>
24
- <li><span class="fs-tree-label">README.md</span></li>
25
- </ul>
26
- ```
27
-
28
- Cada `<li>` precisa de um `<span class="fs-tree-label">` como filho direto
29
- (o texto do nó) — nós com filhos somam um `<ul>`/`<ol>` aninhado logo
30
- depois do label. O JS injeta automaticamente o `.fs-tree-toggle` (a seta)
31
- dentro do label de cada nó que tiver filhos; nós-folha não recebem seta.
32
-
33
- ## Anatomia
34
-
35
- `ul.fs-tree[role="tree"]` > `li[role="treeitem"]` (recursivo) >
36
- `span.fs-tree-label` (com `.fs-tree-toggle` auto-injetado se houver
37
- filhos) + opcionalmente `ul[role="group"]` (o próximo nível).
38
-
39
- ## Variações
40
-
41
- - `data-value` num `<li>` define o valor "de verdade" reportado em
42
- `fs:tree:selected` (`event.detail.value`); sem ele, o valor é o texto
43
- visível do nó.
44
- - `aria-expanded="true"` pré-existente num `<li>` com filhos abre esse
45
- ramo já expandido na renderização inicial (por padrão, todo ramo nasce
46
- colapsado).
47
-
48
- ## Estados
49
-
50
- - Colapsado (padrão) / expandido (`aria-expanded="true"` no `<li>`,
51
- `hidden` removido do `<ul>` filho) — alternado por clique na
52
- label/seta ou por teclado.
53
- - Selecionado: `aria-selected="true"` (só no nó mais recente; os demais
54
- voltam a `"false"`) — clicar num nó com filhos expande/colapsa **e**
55
- seleciona ao mesmo tempo (como um explorador de arquivos).
56
-
57
- ## A11y
58
-
59
- `role="tree"` na raiz, `role="treeitem"` em cada `<li>`, `role="group"` no
60
- `<ul>`/`<ol>` aninhado, `aria-expanded` nos nós com filhos. Roving
61
- `tabindex`: só o nó tabulável atual tem `tabindex="0"`; os demais (visíveis)
62
- ficam em `"-1"` — nós dentro de um ramo colapsado não são alcançáveis por
63
- Tab. `aria-selected` reflete a seleção atual.
64
-
65
- Teclado (com foco num nó da árvore):
66
- - `ArrowDown`/`ArrowUp`: move o foco pro próximo/anterior nó **visível**
67
- (não desce em ramos colapsados).
68
- - `ArrowRight`: nó fechado → expande (foco não se move); nó já aberto →
69
- move o foco pro primeiro filho; folha → sem efeito.
70
- - `ArrowLeft`: nó aberto → colapsa; nó fechado ou folha → move o foco pro
71
- nó pai.
72
- - `Home`/`End`: primeiro/último nó visível da árvore inteira.
73
- - `Enter`/`Espaço`: alterna expansão (se houver filhos) e seleciona o nó.
74
-
75
- ## API JS
76
-
77
- Auto-init via `data-fs="tree-view"` na raiz (`<ul>`/`<ol>`).
78
- `TreeView.getInstance(rootEl)`.
79
-
80
- | Método | Descrição |
81
- |---|---|
82
- | `expand(item)` | Expande o `<li>` informado (sem efeito se já expandido ou sem filhos). |
83
- | `collapse(item)` | Colapsa o `<li>` informado. |
84
- | `toggle(item)` | Alterna expandido/colapsado. |
85
- | `select(item)` | Marca `aria-selected="true"` no `<li>` informado (e `"false"` nos demais), dispara `fs:tree:selected`. |
86
- | `dispose()` | Remove listeners e desregistra a instância. |
87
-
88
- | Evento (na raiz) | Cancelável | Quando |
89
- |---|---|---|
90
- | `fs:tree:expanded` | Não | Após expandir um nó, com `event.detail.item`. |
91
- | `fs:tree:collapsed` | Não | Após colapsar um nó, com `event.detail.item`. |
92
- | `fs:tree:selected` | Não | Após selecionar um nó, com `event.detail.value`/`event.detail.item`. |
93
-
94
- ## Tokens
95
-
96
- `--fs-color-text`, `--fs-color-subtle` (hover da label),
97
- `--fs-color-primary` (nó selecionado, com `color-contrast()` pro texto),
98
- `--fs-radius-sm`.
99
-
100
- ## Exemplo
101
-
102
- ```html
103
- <ul class="fs-tree" data-fs="tree-view" aria-label="Arquivos do projeto">
104
- <li>
105
- <span class="fs-tree-label">src</span>
106
- <ul>
107
- <li><span class="fs-tree-label">index.js</span></li>
108
- </ul>
109
- </li>
110
- </ul>
111
- <script>
112
- document.querySelector(".fs-tree").addEventListener("fs:tree:selected", (e) => {
113
- console.log("selecionado:", e.detail.value);
114
- });
115
- </script>
116
- ```
117
-
118
- Mockup: [laboratório do componente](../../mockup/navigation-disclosure.html#tree-view).
@@ -1,18 +0,0 @@
1
- # Contribuindo
2
-
3
- O guia de contribuição vive na raiz do repositório —
4
- [`CONTRIBUTING.md`](../../CONTRIBUTING.md) — para o GitHub linkar
5
- automaticamente em issues/PRs. Cobre:
6
-
7
- - Pré-requisitos e setup local.
8
- - Scripts (`build`, `lint`, `test`, `test:visual`, `test:a11y`, `contrast`,
9
- `size`, `docs:check`).
10
- - Convenções de SCSS e o fluxo pra criar um componente novo.
11
- - Contrato editorial: cada componente precisa manter implementação, exemplo,
12
- documentação, testes e acessibilidade alinhados.
13
- - Semver e política de depreciação.
14
- - Checklist de Pull Request.
15
-
16
- Ver também: [Código de Conduta](../../CODE_OF_CONDUCT.md),
17
- [templates de issue](../../.github/ISSUE_TEMPLATE/) e o
18
- [template de Pull Request](../../.github/PULL_REQUEST_TEMPLATE.md).
@@ -1,70 +0,0 @@
1
- # Instalação
2
-
3
- ## Via npm
4
-
5
- ```bash
6
- npm install fokus-styles
7
- ```
8
-
9
- ## Via CDN
10
-
11
- Sem instalar nada, direto do jsDelivr ou unpkg:
12
-
13
- ```html
14
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fokus-styles/dist/css/fokus.css">
15
- <script src="https://cdn.jsdelivr.net/npm/fokus-styles/dist/js/fokus.js"></script>
16
- ```
17
-
18
- Troque `fokus.css`/`fokus.js` por `fokus.min.css`/`fokus.min.js` para as
19
- versões minificadas em produção.
20
-
21
- ## Fontes self-hosted
22
-
23
- Plus Jakarta Sans (sans) e Source Code Pro (mono) são distribuídas à parte,
24
- em `fonts.css`, para não forçar o download das fontes em quem prefere usar
25
- as próprias. Inclua **antes** do CSS principal:
26
-
27
- ```html
28
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fokus-styles/dist/css/fonts.css">
29
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fokus-styles/dist/css/fokus.css">
30
- ```
31
-
32
- Sem `fonts.css`, a tipografia cai no fallback `sans-serif`/`monospace` do
33
- sistema — nada quebra, só muda a fonte.
34
-
35
- ## Distribuições disponíveis
36
-
37
- O pacote publica o bundle completo (`fokus.css`) e distribuições granulares,
38
- para quem não precisa do framework inteiro:
39
-
40
- | Arquivo | Conteúdo |
41
- |---|---|
42
- | `dist/css/fokus.css` | Bundle completo: tokens, reset, layout, forms, components, utilities, tema escuro. |
43
- | `dist/css/layout.css` | Só grid/containers (+ tokens/reset/tema). |
44
- | `dist/css/forms.css` | Só formulários (+ tokens/reset/tema). |
45
- | `dist/css/components.css` | Só componentes prontos (+ tokens/reset/tema). |
46
- | `dist/css/helpers.css` | Só utilitários atômicos (+ tokens/reset/tema). |
47
- | `dist/css/fonts.css` | Só os `@font-face` self-hosted (opcional, ver acima). |
48
- | `dist/js/fokus.js` | Todo o JavaScript dos componentes interativos, IIFE global `FokusStyles`. |
49
-
50
- Cada distribuição CSS granular já inclui tokens, reset e tema escuro
51
- completos — pode ser usada isoladamente sem quebrar variáveis ou dark mode.
52
-
53
- ## Import via Sass
54
-
55
- Para compilar com suas próprias variáveis Sass (sobrescrever antes de
56
- compilar, em vez de sobrescrever CSS Custom Properties depois):
57
-
58
- ```scss
59
- @use "fokus-styles/scss/fokus" with (
60
- $radius-md: 10px
61
- );
62
- ```
63
-
64
- Ver [`docs/reference/scss-architecture.md`](../reference/scss-architecture.md)
65
- para a lista completa de variáveis e a organização dos módulos.
66
-
67
- ## Próximo passo
68
-
69
- [Formas de uso](usage.md) — como inicializar componentes interativos e a
70
- convenção de nomenclatura de classes.
@@ -1,105 +0,0 @@
1
- # Formas de uso
2
-
3
- ## Convenção de nomenclatura
4
-
5
- | Prefixo | Papel | Exemplo |
6
- |---|---|---|
7
- | `.fs-*` | Componente (estrutura/aparência) | `.fs-btn`, `.fs-card`, `.fs-modal` |
8
- | `.fs-u-*` | Utilitário atômico | `.fs-u-d-flex`, `.fs-u-mt-3`, `.fs-u-gx-2` |
9
- | `.is-*` | Estado, controlado por você ou por JS | `.is-active`, `.is-disabled`, `.is-open` |
10
- | `--fs-*` | Token CSS (Custom Property) | `--fs-color-primary`, `--fs-radius-md` |
11
- | `data-fs` | Auto-init de componente interativo | `data-fs="modal"` |
12
- | `data-fs-target`/`data-fs-dismiss` | Alvo/dispensa de componente interativo | `data-fs-target="#meuModal"` |
13
- | `fs:*` | Evento DOM customizado disparado por um componente | `fs:modal:shown` |
14
-
15
- Essa separação existe para o framework nunca colidir com classes de outras
16
- bibliotecas/CSS na mesma página — ver
17
- [`docs/reference/scss-architecture.md`](../reference/scss-architecture.md#cascade-layers-layer)
18
- para como isso se reflete em cascade layers.
19
-
20
- ## Auto-init de componentes interativos
21
-
22
- Todo componente que precisa de JavaScript se inicializa sozinho ao carregar
23
- a página, a partir do atributo `data-fs="<nome>"` no elemento raiz — não é
24
- preciso chamar `new FokusStyles.Algo(...)` manualmente:
25
-
26
- ```html
27
- <button type="button" class="fs-btn" data-fs-target="#meuModal">Abrir</button>
28
-
29
- <div class="fs-modal" data-fs="modal" id="meuModal">
30
- <div class="fs-modal-dialog">
31
- <div class="fs-modal-content">
32
- <div class="fs-modal-body">Conteúdo.</div>
33
- </div>
34
- </div>
35
- </div>
36
-
37
- <script src="dist/js/fokus.js"></script>
38
- ```
39
-
40
- O auto-init roda em `DOMContentLoaded` (ou imediatamente, se o script for
41
- carregado depois que o DOM já terminou) e é idempotente — chamar de novo não
42
- cria uma segunda instância no mesmo elemento.
43
-
44
- ## API comum aos componentes interativos
45
-
46
- A maioria segue a mesma forma, acessível via `getInstance()`:
47
-
48
- ```js
49
- const modal = FokusStyles.Modal.getInstance(document.getElementById("meuModal"));
50
- modal.show();
51
- modal.hide();
52
- modal.toggle();
53
- modal.dispose(); // remove listeners e o registro da instância
54
- ```
55
-
56
- - `getInstance(el)` — retorna a instância já criada para aquele elemento
57
- (`undefined` se não houver, ou se `data-fs` nunca esteve presente e você
58
- precisa instanciar manualmente com `new FokusStyles.Nome(el)`).
59
- - `show()`/`hide()`/`toggle()` — nem todo componente tem os três (ex.:
60
- Tabs usa `show(tabEl)` para trocar a aba ativa; Tag só tem `dismiss()`).
61
- Ver a página de cada componente em [Componentes](../README.md#componentes)
62
- para a API exata.
63
- - `dispose()` — remove os listeners e desregistra a instância; o elemento
64
- em si não é removido do DOM (exceto onde a própria natureza do componente
65
- implica remoção, como `Tag.dismiss()`).
66
-
67
- Uma exceção à regra: **Alert Dialog** não usa `data-fs`/`getInstance()` — é
68
- 100% programático, via `FokusStyles.confirm({ title, message, ... })`, que
69
- retorna uma Promise. Ver
70
- [`../components/alert-dialog.md`](../components/alert-dialog.md).
71
-
72
- ## Eventos
73
-
74
- Componentes disparam eventos DOM customizados, no padrão
75
- `fs:<componente>:<ação>` (particípio: `shown`/`hidden`/`changed`...),
76
- sempre com `bubbles: true` — escute no documento ou em qualquer ancestral:
77
-
78
- ```js
79
- document.addEventListener("fs:modal:shown", (event) => {
80
- console.log("modal aberto:", event.target);
81
- });
82
- ```
83
-
84
- Alguns eventos são **canceláveis** (`cancelable: true`) — chamar
85
- `event.preventDefault()` no handler impede a ação (ex.: `fs:tag:dismissed`
86
- cancela a remoção da tag). A documentação de cada componente lista quais
87
- eventos existem e se são canceláveis.
88
-
89
- ## Import via ES modules
90
-
91
- Além do bundle IIFE (`dist/js/fokus.js`, global `FokusStyles`), os módulos
92
- individuais são importáveis via `fokus-styles/js/*`:
93
-
94
- ```js
95
- import { Modal } from "fokus-styles/js/modal.js";
96
- ```
97
-
98
- Útil para bundlers que fazem tree-shaking — importar só o que usa em vez do
99
- JS inteiro.
100
-
101
- ## Próximo passo
102
-
103
- [Componentes](../README.md#componentes) — catálogo completo, ou
104
- [Theming](../guides/theming.md) para customizar cores/tipografia/raio sem
105
- fork.