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,118 +0,0 @@
1
- # Layout avançado
2
-
3
- Três primitivas de layout CSS-only (Stack, Cluster, Sidebar), utilitários de
4
- posição sticky e utilitários de container query (`@container`) — para
5
- composições que os utilitários de grid/flex existentes (`.fs-row`/`.fs-col-*`,
6
- `.fs-u-d-flex`) não cobrem bem sozinhos. Exemplo funcional completo em
7
- [`mockup/foundations.html#layout`](../../mockup/foundations.html#layout).
8
-
9
- ## Stack
10
-
11
- Empilha os filhos diretos verticalmente com espaçamento consistente via
12
- `gap` (não `margin` — evita o problema de "o último filho não deve ter
13
- margin-bottom"):
14
-
15
- ```html
16
- <div class="fs-stack">
17
- <div>Item 1</div>
18
- <div>Item 2</div>
19
- <div>Item 3</div>
20
- </div>
21
- ```
22
-
23
- O espaçamento padrão vem do token `--fs-stack-gap` (`$spacers[3]`, `1rem`).
24
- Ajuste com uma classe `.fs-stack-gap-{0..5}` (mesma escala de
25
- `$spacers` usada nos utilitários `.fs-u-m*`/`.fs-u-p*`) ou redefinindo o token
26
- direto no elemento:
27
-
28
- ```html
29
- <div class="fs-stack fs-stack-gap-1">…</div>
30
- ```
31
-
32
- ## Cluster
33
-
34
- Agrupa itens horizontalmente com quebra de linha automática e espaçamento
35
- consistente nos dois eixos — para grupos de tags, botões ou badges que
36
- precisam "fluir" sem estourar o container:
37
-
38
- ```html
39
- <div class="fs-cluster">
40
- <span class="fs-tag">Frontend</span>
41
- <span class="fs-tag">CSS</span>
42
- <span class="fs-tag">Acessibilidade</span>
43
- </div>
44
- ```
45
-
46
- Gap ajustável do mesmo jeito que o Stack: `.fs-cluster-gap-{0..5}` ou
47
- `--fs-cluster-gap`.
48
-
49
- ## Sidebar
50
-
51
- Um lado com largura fixa (a "aside") e o outro preenchendo o espaço
52
- restante — quebra para empilhado quando o container fica estreito demais,
53
- sem media query (a técnica é puramente flexbox: `.fs-sidebar-content` tem
54
- `flex-basis: 0` e `min-width: 50%`, forçando a quebra quando não cabe ao
55
- lado da aside na largura disponível):
56
-
57
- ```html
58
- <div class="fs-sidebar">
59
- <aside class="fs-sidebar-aside">Menu lateral</aside>
60
- <div class="fs-sidebar-content">Conteúdo principal</div>
61
- </div>
62
- ```
63
-
64
- - Largura da aside: `--fs-sidebar-width` (padrão `16rem`), ou uma classe
65
- `.fs-sidebar-width-{sm,md,lg,xl,xxl,xxxl}` (reusa a escala de
66
- `$column-max-widths`, de 120px a 720px).
67
- - `.fs-sidebar-reverse` inverte a ordem visual (aside à direita).
68
- - Gap: `.fs-sidebar-gap-{0..5}` ou `--fs-sidebar-gap`.
69
-
70
- ## Sticky
71
-
72
- `.fs-u-sticky-top`/`.fs-u-sticky-bottom` (`position: sticky`) com offset
73
- configurável via `--fs-sticky-top`/`--fs-sticky-bottom` (padrão `0`) e
74
- `z-index: 1020` (mesma faixa numérica dos demais componentes de overlay —
75
- acima de conteúdo normal e do Dropdown, abaixo de Modal/Offcanvas):
76
-
77
- ```html
78
- <div style="overflow-y: auto; max-height: 300px;">
79
- <div class="fs-u-sticky-top">Cabeçalho fixo</div>
80
- <p>Conteúdo rolável…</p>
81
- </div>
82
- ```
83
-
84
- Um contêiner com scroll próprio (como no exemplo acima) precisa ser
85
- focável por teclado (`tabindex="0"`) se o conteúdo for maior que a área
86
- visível — sem isso, quem navega só por teclado não consegue rolar o
87
- conteúdo (regra `scrollable-region-focusable` do gate `axe` no CI).
88
-
89
- ## Container queries (`@container`)
90
-
91
- Reagem à largura do **container** mais próximo, não da viewport — útil
92
- para um componente que se comporta de forma diferente dependendo de onde é
93
- colocado (uma sidebar estreita vs. uma área de conteúdo larga), independente
94
- do tamanho da tela. Ative com `.fs-u-cq` no elemento pai:
95
-
96
- ```html
97
- <div class="fs-u-cq">
98
- <div class="fs-u-cq-md-d-flex fs-u-gap-2">
99
- <div>A</div>
100
- <div>B</div>
101
- </div>
102
- </div>
103
- ```
104
-
105
- - `.fs-u-cq` define `container-type: inline-size` — só aplique num elemento
106
- cuja largura você quer usar como referência (não precisa ser o `:root`).
107
- - Utilitários disponíveis: `.fs-u-cq-{sm,md,lg}-d-{none,block,inline-block,flex}`,
108
- seguindo os limiares `--fs-cq-sm` (320px), `--fs-cq-md` (480px),
109
- `--fs-cq-lg` (640px) — uma escala própria, mais compacta que a de
110
- viewport (`$breakpoints`), porque containers costumam ser bem menores
111
- que a tela inteira.
112
- - Os tokens `--fs-cq-*` em `:root` são só **informativos** (documentam os
113
- valores usados) — a condição de um `@container` exige um valor literal
114
- em tempo de build, não aceita `var()`; mudar o token em runtime não
115
- recalibra as regras já compiladas.
116
- - Complementam, não substituem, os utilitários de viewport existentes
117
- (`.fs-u-d-flex` etc.) — para a maioria dos casos, media query por viewport
118
- continua sendo a ferramenta certa.
@@ -1,48 +0,0 @@
1
- # Migração do Clarus para o Fokus Styles
2
-
3
- O Fokus Styles 2.0 renomeia integralmente a API pública do Clarus. Não há
4
- aliases: atualize todos os imports, seletores, atributos e acessos ao global
5
- JavaScript antes de remover o pacote anterior.
6
-
7
- | Clarus 1.x | Fokus Styles 2.0 |
8
- | --- | --- |
9
- | `clarus-css` | `fokus-styles` |
10
- | `clarus-icons` | `fokus-styles/icons` |
11
- | `clarus-react` | `fokus-styles/react` |
12
- | `clarus-cli` | `fokus-styles` com o comando `fokus` |
13
- | `.fs-*` | `.fs-*` |
14
- | `.u-*` | `.fs-u-*` |
15
- | `--fs-*` | `--fs-*` |
16
- | `data-fs*` | `data-fs*` |
17
- | `data-fs-brand` | `data-fs-brand` |
18
- | `window.Clarus` | `window.FokusStyles` |
19
- | `fs:*` | `fs:*` |
20
-
21
- ## Instalação
22
-
23
- ```bash
24
- npm uninstall clarus-css clarus-icons clarus-cli clarus-react
25
- npm install fokus-styles
26
- ```
27
-
28
- ## Exemplo
29
-
30
- ```html
31
- <button class="fs-btn fs-btn-primary" data-fs="modal" data-fs-target="#perfil">
32
- Abrir perfil
33
- </button>
34
-
35
- <script src="node_modules/fokus-styles/dist/js/fokus.min.js"></script>
36
- <script>
37
- document.addEventListener("fs:modal:shown", () => console.log("aberto"));
38
- </script>
39
- ```
40
-
41
- Para React, importe `ModalTrigger`, `ModalPanel`, `DropdownTrigger`,
42
- `DropdownMenu` e `TabList` de `fokus-styles/react`. Para ícones, importe do
43
- barrel `fokus-styles/icons` ou de um módulo individual como
44
- `fokus-styles/icons/check.js`.
45
-
46
- O codemod `scripts/migrate-fokus.mjs` ajuda a converter a versão anterior do
47
- framework. Execute-o primeiro com `--dry-run`, revise o diff e só então grave
48
- as alterações.
@@ -1,123 +0,0 @@
1
- # Guia de migração — vindo de outro framework CSS
2
-
3
- Este guia é para quem já usa **outro framework CSS de utilitários/componentes**
4
- (ex.: um framework baseado em classes utilitárias tipo `flex`/`gap-4`, ou um
5
- framework de componentes com prefixo `.btn`/`.card`/`.alert`) e quer migrar
6
- pro Fokus Styles. Ele mapeia os padrões de nomenclatura mais comuns do
7
- ecossistema pros equivalentes do FokusStyles — não é uma migração automatizada
8
- (classes e comportamento não são 1:1 em todo canto), mas cobre os casos mais
9
- frequentes.
10
-
11
- > Procurando pela migração de uma versão **antiga do FokusStyles** (rename da
12
- > API pública pra prefixo `fs-`) para a v1.0.0? Isso é
13
- > [`migration-v1.md`](migration-v1.md), um guia diferente.
14
-
15
- ## Como o FokusStyles nomeia as coisas
16
-
17
- Duas convenções fixas, sem exceção, ajudam a prever qualquer classe sem
18
- decorar a lista inteira:
19
-
20
- - **Componentes**: prefixo `fs-` (`.fs-btn`, `.fs-card`, `.fs-modal`).
21
- - **Utilitários** (uma propriedade CSS por classe): prefixo `fs-u-` (`.fs-u-d-flex`,
22
- `.fs-u-mt-3`, `.fs-u-text-center`).
23
-
24
- Responsividade é sempre um infixo de breakpoint antes do valor:
25
- `.fs-u-d{-sm|-md|-lg|-xl|-xxl}-flex`, `.fs-u-mt-lg-4` — nunca um prefixo diferente
26
- por breakpoint.
27
-
28
- ## Utilitários de layout (flexbox/grid/spacing)
29
-
30
- Framework baseados em classes utilitárias atômicas costumam usar nomes
31
- curtos sem prefixo (`flex`, `gap-4`, `p-2`) ou com prefixo de uma letra
32
- (`d-flex`, `mt-3`, já familiar a quem vem de um framework de componentes com
33
- utilitários auxiliares). O FokusStyles usa **nomes completos com prefixo `fs-u-`**,
34
- priorizando previsibilidade sobre brevidade:
35
-
36
- | Padrão comum no ecossistema | Fokus Styles | Observação |
37
- |---|---|---|
38
- | `flex` / `d-flex` | `.fs-u-d-flex` | Idem `.fs-u-d-block`, `.fs-u-d-none`, `.fs-u-d-inline-block`. |
39
- | `items-center` / `align-items-center` | `.fs-u-align-items-center` | Também `-start`/`-end`. |
40
- | `justify-between` / `justify-content-between` | `.fs-u-justify-content-between` | Também `-start`/`-center`/`-end`/`-around`. |
41
- | `gap-4` / `gap-3` (escala 0–5) | `.fs-u-gap-4` | Escala de espaçamento própria — ver [tokens](../reference/design-tokens.md) pro mapa `$spacers`; não é 1:1 numérico com a escala de outros frameworks. |
42
- | `m-4`, `mt-2`, `mx-auto` | `.fs-u-m-4`, `.fs-u-mt-2`, `.fs-u-mx-auto` | Mesmo padrão de abreviação (`m`/`mt`/`mr`/`mb`/`ml`/`mx`/`my`) já usado por frameworks de componentes com utilitários auxiliares — só troca o prefixo pra `fs-u-`. |
43
- | `p-4`, `px-3`, `py-2` | `.fs-u-p-4`, `.fs-u-px-3`, `.fs-u-py-2` | Idem acima, para padding. |
44
- | `text-center` | `.fs-u-text-center` | Também `-start`/`-end`. |
45
- | `font-bold` / `fw-bold` | `.fs-u-fw-bold` | Também `-regular`/`-medium`/`-semibold`. |
46
- | `text-lg` / `fs-5` | `.fs-u-fs-lg` | Escala nomeada (`xs`/`sm`/`md`/`lg`/`xl`/`h1`…`h6`), não numérica. |
47
- | `hidden` / `d-none` | `.fs-u-d-none` | Oculta via `display: none` (remove do layout e da árvore de acessibilidade). |
48
- | `invisible` | `.fs-u-invisible` | `visibility: hidden` — reserva o espaço no layout, ao contrário de `.fs-u-d-none`. |
49
- | `container` | `.fs-container` | Componente de layout, não utilitário — ver seção seguinte. |
50
- | `row` / `grid grid-cols-12` | `.fs-row` | Grid flexbox de 12 colunas, não CSS Grid. |
51
- | `col`, `col-6`, `col-md-4` | `.fs-col`, `.fs-col-6`, `.fs-col-md-4` | Mesma lógica de frações de 12 colunas com infixo de breakpoint. |
52
-
53
- Para stack/cluster/sidebar/sticky/container-queries (utilitários de layout
54
- mais recentes, sem equivalente direto e estabelecido em frameworks mais
55
- antigos), veja o guia dedicado
56
- [`layout-advanced.md`](layout-advanced.md) — não há "de onde migrar" porque
57
- são aditivos, não substituem nada que você já tinha.
58
-
59
- ## Componentes
60
-
61
- Frameworks de componentes tradicionalmente usam classes curtas sem prefixo
62
- (`.btn`, `.card`, `.alert`); frameworks só-utilitários normalmente não têm
63
- esse conceito (você compõe o visual de um botão a partir de utilitários) —
64
- o FokusStyles segue o primeiro modelo, com o prefixo `fs-` obrigatório em todos:
65
-
66
- | Padrão comum (framework de componentes) | Fokus Styles |
67
- |---|---|
68
- | `.btn`, `.btn.btn-primary` | `.fs-btn`, `.fs-btn.fs-btn-primary` |
69
- | `.btn-outline-primary` | `.fs-btn-outline-primary` |
70
- | `.btn-sm`, `.btn-lg` | `.fs-btn-sm`, `.fs-btn-lg` |
71
- | `.card`, `.card-header`, `.card-body`, `.card-footer` | `.fs-card`, `.fs-card-header`, `.fs-card-body`, `.fs-card-footer` |
72
- | `.alert.alert-danger` | `.fs-alert.fs-alert-danger` |
73
- | `.badge.bg-primary` / `.badge.badge-primary` | `.fs-badge.fs-badge-primary` |
74
- | `.table.table-striped` | `.fs-table.fs-table-striped` |
75
- | `.modal`, `.modal-dialog`, `.modal-body` | `.fs-modal`, `.fs-modal-dialog`, `.fs-modal-body` — ver [modal.md](../components/modal.md) pra diferenças de API JS |
76
- | `.dropdown-menu`, `.dropdown-item` | `.fs-dropdown-menu`, `.fs-dropdown-item` |
77
- | `.form-control` | `.fs-form-control` |
78
-
79
- Se você está migrando de um framework só-utilitários (sem classes de
80
- componente prontas), o ponto de partida é o oposto: em vez de recompor cada
81
- botão/card a partir de utilitários, procure o componente FokusStyles equivalente
82
- em [`docs/components/`](../components/) — geralmente é menos código, não
83
- mais.
84
-
85
- ## O que **não** migra 1:1
86
-
87
- - **API JavaScript**: nomes de método/evento são específicos do FokusStyles
88
- (`data-fs="modal"`, `FokusStyles.Modal.getInstance()`, eventos
89
- `fs:modal:shown`) — não há compatibilidade de API com nenhum outro
90
- framework. Veja a página de cada componente em
91
- [`docs/components/`](../components/) pra API completa.
92
- - **Escala de espaçamento/tipografia**: os valores numéricos
93
- (`fs-u-gap-4`, `fs-u-fs-lg`) seguem a escala própria do FokusStyles
94
- (`$spacers`/`$font-size-*`), não a de nenhum outro framework — não
95
- assuma que `gap-4` de outro lugar é visualmente idêntico a `.fs-u-gap-4`
96
- aqui, mesmo com o nome parecido.
97
- - **Grid**: `.fs-row`/`.fs-col-*` é flexbox de 12 colunas, não CSS Grid —
98
- se você vem de um framework CSS Grid nativo (`grid-cols-12`), o modelo
99
- mental de "colunas fluem e quebram linha" é diferente de "células fixas
100
- numa grade".
101
- - **Tema/dark mode**: o FokusStyles usa `data-theme="dark"` num ancestral
102
- (não uma classe `.dark` no `<html>`) — ver [`dark-mode.md`](dark-mode.md).
103
- - **Build/configuração**: não há arquivo de configuração JS central
104
- (customização é via variáveis Sass — `$primitives`, `$spacers` etc.) —
105
- ver [`scss-architecture.md`](../reference/scss-architecture.md).
106
-
107
- ## Checklist de migração
108
-
109
- 1. Troque classes de utilitário: adicione o prefixo `fs-u-` e expanda
110
- abreviações de uma letra pro nome completo mais próximo da tabela acima
111
- (`flex` → `fs-u-d-flex`, não existe atalho de uma letra no FokusStyles).
112
- 2. Troque classes de componente: adicione o prefixo `fs-` em todas
113
- (`.btn` → `.fs-btn`, incluindo variantes: `.btn-primary` → `.fs-btn-primary`).
114
- 3. Rode `npm run lint:scss` (se você também copiou SCSS customizado — o
115
- FokusStyles usa Stylelint com `stylelint-config-standard-scss`) e
116
- `npm run test:visual` (se tiver mockups próprios) pra pegar
117
- divergências visuais cedo.
118
- 4. Refaça a integração JS pelos `data-fs="*"`/`data-fs-target`/eventos
119
- `fs:*` — não existe camada de compatibilidade com a API de outro
120
- framework.
121
- 5. Revise a matriz de [suporte a navegadores](../reference/browser-support.md)
122
- se seu projeto anterior mirava um alvo diferente (ex.: IE11) — o FokusStyles
123
- não suporta IE11 e usa `@layer`/OKLCH nativamente.
@@ -1,63 +0,0 @@
1
- # Guia de migração para v1.0.0
2
-
3
- A v1.0.0 renomeia mecanicamente toda a API pública do Fokus Styles para evitar
4
- colisão com classes de terceiros na mesma página. É a única mudança
5
- breaking desta versão — nenhum componente foi removido ou teve
6
- comportamento alterado.
7
-
8
- Não mudam: o global `window.FokusStyles` e o nome do pacote npm `fokus-styles`.
9
-
10
- ## O que muda
11
-
12
- | Categoria | Antes | Depois | Exemplo |
13
- |---|---|---|---|
14
- | Classe de componente/layout | sem prefixo | `fs-` | `.btn` → `.fs-btn`, `.dropdown-menu` → `.fs-dropdown-menu`, `.container`/`.row`/`.col-*` → `.fs-container`/`.fs-row`/`.fs-col-*` |
15
- | Classe utilitária | sem prefixo | `fs-u-` | `.d-flex` → `.fs-u-d-flex`, `.mt-3` → `.fs-u-mt-3` |
16
- | Estado controlado por JS | variava | `is-*` | `.show` → `.is-open`, `.active` → `.is-active`, `.disabled` → `.is-disabled` |
17
- | Tokens CSS | `--fokus-*` | `--fs-*` | `--fokus-color-primary` → `--fs-color-primary` |
18
- | Atributo de auto-init | `data-fokus` | `data-fs` | `data-fokus="modal"` → `data-fs="modal"` |
19
- | Atributos de alvo/dispensa | `data-target`/`data-dismiss` | `data-fs-target`/`data-fs-dismiss` | `data-target="#foo"` → `data-fs-target="#foo"` |
20
- | Eventos DOM customizados | `fokus:*` | `fs:*` | `fokus:modal:shown` → `fs:modal:shown` |
21
-
22
- `.is-valid`/`.is-invalid` (validação de formulário) e `.is-dragover`
23
- (file-drop) já seguiam a convenção `is-*` antes da v1 — não mudam.
24
-
25
- ## Rodando o codemod
26
-
27
- O pacote inclui um codemod que aplica essas substituições em arquivos
28
- HTML/JS (`class="..."`, `data-fokus`/`data-target`/`data-dismiss`, tokens
29
- `--fokus-*` em `<style>`/JS, e strings de evento `fokus:*`):
30
-
31
- ```bash
32
- node node_modules/fokus-styles/scripts/migrate-v1.mjs caminho/para/seu/projeto --dry-run
33
- node node_modules/fokus-styles/scripts/migrate-v1.mjs caminho/para/seu/projeto
34
- ```
35
-
36
- - `--dry-run` só lista os arquivos que seriam alterados, sem escrever nada.
37
- - Sem `--dry-run`, sobrescreve os arquivos in-place — rode com o working
38
- tree do seu projeto limpo (git) para poder revisar o diff depois.
39
- - A substituição de classes é por correspondência **exata de token**: o
40
- codemod só troca tokens que batem com um nome antigo conhecido do FokusStyles
41
- (`scripts/migrate-v1-map.json`, ~1360 pares gerados diretamente da
42
- renomeação). Uma classe sua com o mesmo nome de uma classe antiga do
43
- FokusStyles (ex.: você também tinha uma `.card` própria) seria trocada por
44
- engano — **revise o diff antes de commitar**.
45
- - O codemod não cobre CSS que você escreveu contra o seletor antigo (ex.:
46
- `.btn { ... }` no seu próprio stylesheet, sobrescrevendo o FokusStyles) — isso
47
- precisa de ajuste manual, com a tabela acima como referência.
48
-
49
- ## Checklist de migração manual
50
-
51
- 1. Rode o codemod (acima) na sua base HTML/JS.
52
- 2. Busque no seu CSS por seletores que dependam das classes antigas do
53
- FokusStyles (não só sobre elas, mas herdando de `--fokus-*`) e atualize para
54
- os novos nomes/tokens.
55
- 3. Se você escuta os eventos customizados do FokusStyles
56
- (`addEventListener("fokus:...")`), confirme que o codemod pegou todas as
57
- strings — ele só reescreve literais entre aspas.
58
- 4. Rode sua suíte de testes/visual regression e confira manualmente os
59
- componentes interativos (modal, dropdown, tabs, offcanvas) — o
60
- comportamento não muda, só os seletores.
61
- 5. Se você customizava o framework via `--fokus-*` num stylesheet próprio
62
- (não gerado pelo codemod, por não estar em HTML/JS), atualize esses
63
- arquivos `.css` manualmente para `--fs-*`.
@@ -1,30 +0,0 @@
1
- # Utilitários de impressão
2
-
3
- Classes para ajustar o layout quando a página é impressa (`@media print`),
4
- sem exigir uma folha de estilos de impressão separada.
5
-
6
- ## Classes
7
-
8
- - `.fs-u-print-hide` — oculta o elemento só na impressão (`display: none`).
9
- Útil para navbars, botões de ação, sidebars de navegação.
10
- - `.fs-u-print-only` — oculta o elemento fora da impressão; ele só aparece no
11
- resultado impresso (ex.: um bloco com URL/data de geração do documento).
12
- - `.fs-u-print-block` / `.fs-u-print-inline` / `.fs-u-print-inline-block` — força um
13
- valor de `display` só na impressão, útil para reverter um `.fs-u-d-none` (ou
14
- outro `display` aplicado na tela) especificamente no documento impresso.
15
-
16
- ```html
17
- <header class="fs-u-print-hide">
18
- <nav>…</nav>
19
- </header>
20
-
21
- <div class="fs-u-print-only">Gerado em fokus-styles.dev — 2026-07-07</div>
22
- ```
23
-
24
- ## Notas
25
-
26
- - São utilitários de `display`, não uma folha de estilos de impressão
27
- completa — não alteram cor, quebra de página ou tamanho de fonte.
28
- - Combinam com os demais utilitários de `display` (`.fs-u-d-*`): a classe de
29
- impressão só atua dentro de `@media print`, então não conflita com o
30
- valor aplicado na tela.
@@ -1,28 +0,0 @@
1
- # RTL e preferências do sistema
2
-
3
- ## Visão geral
4
-
5
- O Fokus Styles 2.4 mantém os componentes em fluxo lógico e oferece o preset
6
- `fokus-styles/rtl.css` para documentos com `dir="rtl"`. O preset complementa
7
- a folha principal e preserva `margin-inline`, `padding-inline`, `inset-inline`
8
- e `border-inline-*`.
9
-
10
- ```html
11
- <html dir="rtl" data-fs-theme="auto">
12
- <link rel="stylesheet" href="fokus-styles/dist/css/fokus.css">
13
- <link rel="stylesheet" href="fokus-styles/dist/css/fokus-rtl.css">
14
- </html>
15
- ```
16
-
17
- ## Estados de sistema
18
-
19
- O framework respeita `prefers-reduced-motion`, `prefers-contrast: more`,
20
- `forced-colors: active` e `prefers-color-scheme`. Em alto contraste, bordas e
21
- foco passam a usar espessuras maiores; em forced colors, ações preservam
22
- `ButtonText` e o foco usa `Highlight`.
23
-
24
- ## A11y
25
-
26
- O atributo `dir` deve ser aplicado ao documento ou ao contêiner que define o
27
- fluxo de leitura. Use `dir="auto"` quando a direção do texto inserido não for
28
- conhecida.
@@ -1,140 +0,0 @@
1
- # Theming
2
-
3
- Toda a identidade visual do Fokus Styles é exposta via CSS Custom Properties
4
- (prefixo `--fs-*`) — customize redefinindo a variável no seu próprio CSS,
5
- sem fork e sem recompilar.
6
-
7
- ## As 3 camadas de tokens
8
-
9
- 1. **Primitivo** — valores Sass em tempo de compilação
10
- (`packages/fokus-core/scss/settings/`): `$color-blue-500`, `$radius-md`,
11
- `$spacers`. Não são emitidos como CSS diretamente; só existem para gerar
12
- as camadas seguintes.
13
- 2. **Semântico** — CSS Custom Properties nomeadas por papel, não por valor
14
- (`packages/fokus-core/scss/tokens/`): `--fs-color-primary`,
15
- `--fs-color-bg-surface`, `--fs-color-text-primary`,
16
- `--fs-color-border-default`. É aqui que você customiza na prática.
17
- 3. **Componente** — alguns componentes expõem tokens próprios, com fallback
18
- pra um token semântico (ex.: `.fs-btn` tem `--fs-btn-bg`/`--fs-btn-color`/
19
- `--fs-btn-border-color`) — permite sobrescrever **uma instância**
20
- específica sem afetar o resto:
21
-
22
- ```css
23
- .meu-botao-especial {
24
- --fs-btn-bg: #6d28d9;
25
- }
26
- ```
27
-
28
- Ver [`docs/reference/design-tokens.md`](../reference/design-tokens.md) para
29
- a lista completa de tokens e [`docs/reference/scss-architecture.md`](../reference/scss-architecture.md)
30
- para como as camadas se organizam em `@layer`.
31
-
32
- ## Customizando globalmente
33
-
34
- Redefina o token semântico em `:root` (afeta todos os componentes que o
35
- usam):
36
-
37
- ```css
38
- :root {
39
- --fs-color-primary: #6d28d9;
40
- --fs-radius-md: 10px;
41
- --fs-font-sans: "Inter", sans-serif;
42
- }
43
- ```
44
-
45
- Isso funciona em runtime, direto no CSS final — não precisa recompilar o
46
- Sass nem ter acesso ao código-fonte do framework.
47
-
48
- ## Cores: OKLCH com fallback automático
49
-
50
- Os primitivos de cor são gerados em [OKLCH](https://oklch.com/), calibrados
51
- para reproduzir o mesmo matiz do hex histórico do projeto (round-trip
52
- hex→oklch→hex). Cada token de cor é declarado duas vezes:
53
-
54
- ```css
55
- :root {
56
- --fs-color-primary: #1a61e6; /* fallback sRGB, todo navegador */
57
- }
58
-
59
- @supports (color: oklch(0% 0 0)) {
60
- :root {
61
- --fs-color-primary: oklch(53.6% 0.213 261.6deg); /* nativo, navegadores modernos */
62
- }
63
- }
64
- ```
65
-
66
- Navegadores sem suporte a `oklch()` ignoram o bloco `@supports` inteiro e
67
- ficam só com o fallback — sem quebra, sem polyfill. Se você **também**
68
- customiza uma cor em OKLCH, recomenda-se o mesmo padrão de dois valores
69
- (fallback + `@supports`) pelo mesmo motivo. Ver
70
- [`docs/reference/browser-support.md`](../reference/browser-support.md).
71
-
72
- ## Customizando via Sass
73
-
74
- Para quem compila o próprio bundle (em vez de sobrescrever CSS em runtime),
75
- os valores primitivos aceitam override na hora do `@use`:
76
-
77
- ```scss
78
- @use "fokus-styles/scss/fokus" with (
79
- $radius-md: 10px,
80
- $font-family-sans: "Inter", sans-serif
81
- );
82
- ```
83
-
84
- Qualquer variável marcada `!default` nos arquivos de
85
- `packages/fokus-core/scss/settings/` pode ser sobrescrita dessa forma.
86
-
87
- ## Escala de espaçamento e breakpoints
88
-
89
- `$spacers` (0–5, usado pelos utilitários `.fs-u-m*`/`.fs-u-p*`/`.fs-u-g*`) e
90
- `$breakpoints` (`xs`–`xxxl`, usado pelo grid e por todo utilitário
91
- responsivo `.fs-u-*-{breakpoint}`) também são customizáveis via Sass — não têm
92
- equivalente em CSS Custom Property, porque alimentam a geração de classes
93
- (nomes de classe fixos em `.css`, não podem reagir a uma variável em
94
- runtime). Ver [`docs/reference/design-tokens.md`](../reference/design-tokens.md).
95
-
96
- ## Multi-brand
97
-
98
- Além de `data-theme` (claro/escuro), o FokusStyles suporta `data-fs-brand="x"` para
99
- trocar a **cor de ação primária** em runtime, sem recompilar CSS — útil pra
100
- produtos white-label ou múltiplas marcas sobre o mesmo design system:
101
-
102
- ```html
103
- <html data-fs-brand="violet">
104
- ```
105
-
106
- ```html
107
- <html data-fs-brand="violet" data-theme="dark">
108
- ```
109
-
110
- Três presets vêm prontos em `packages/fokus-core/scss/themes/_brands.scss`,
111
- provando que a troca funciona combinada com claro e escuro:
112
-
113
- - `violet` — o mesmo tom do exemplo de customização acima.
114
- - `corporate` — azul-marinho sóbrio, para aplicações internas/B2B.
115
- - `vibrant` — laranja energético, para produtos de consumo/marketing.
116
-
117
- Só a cor de ação primária muda por marca — `secondary`/`success`/`warning`/
118
- `danger`/`info` continuam universais entre marcas, porque são semânticos
119
- (sucesso é sempre verde, erro sempre vermelho, independente de qual marca
120
- está ativa).
121
-
122
- Pra adicionar sua própria marca, siga o mesmo padrão do arquivo de exemplo:
123
- um bloco `[data-fs-brand="sua-marca"]` (mais o par `@supports` OKLCH e a
124
- combinação com `[data-theme="dark"]`) redefinindo `--fs-color-primary`,
125
- `--fs-alert-primary-bg`, `--fs-alert-primary-text` e
126
- `--fs-feedback-primary-bg`.
127
-
128
- **Limitação conhecida:** `.fs-btn-primary`/`.fs-badge-primary` (preenchimento
129
- sólido) calculam a cor do texto em tempo de build via `color-contrast()` a
130
- partir do primary **padrão** (azul) — não recalculam por marca. Escolha um
131
- primitivo de marca escuro o bastante pro texto branco continuar legível
132
- (como no exemplo `violet`), ou sobrescreva `--fs-btn-color`/`--fs-badge-color`
133
- manualmente se o primitivo da sua marca for muito claro. Rode
134
- `npm run contrast` depois de adicionar uma marca — o relatório já audita os
135
- pares `brand violet`/`brand corporate`/`brand vibrant` como referência
136
- (`scripts/contrast-report.scss`).
137
-
138
- ## Próximo passo
139
-
140
- [Dark mode](dark-mode.md) — como o tema escuro usa a mesma camada de tokens.
@@ -1,9 +0,0 @@
1
- # Utility API e configuração Sass
2
-
3
- O Fokus Styles oferece presets públicos em `fokus-styles/core`, `fokus-styles/components`,
4
- `fokus-styles/utilities` e `fokus-styles/themes`. O arquivo `fokus-styles/config` expõe o
5
- mapa `$fs-config` para entradas Sass customizadas.
6
-
7
- O mixin `fs-fluid-type()` usa `clamp()` para escalar valores entre dois limites sem exigir
8
- JavaScript. Classes utilitárias novas seguem o namespace `fs-u-*` e as classes existentes
9
- continuam válidas dentro da linha 2.x.
@@ -1,45 +0,0 @@
1
- # Prompt para planejar refinamentos de um componente
2
-
3
- Copie o texto abaixo e substitua os campos entre colchetes antes de usar.
4
-
5
- ```text
6
- Atue como responsável pelo planejamento técnico e de design do Fokus Styles.
7
-
8
- Quero criar um plano, sem implementar ainda, para o componente abaixo:
9
-
10
- ## Contexto do pedido 8011827-28.2026
11
-
12
- - Objetivo: [REFINAMENTO VISUAL DO COMPONENTE TOOLTIP;
13
- Sugira correções, alterações e implementações de códigos, funcionalidades de mudanças de visual para algo com maior qualidade, responsividade, acessibilidade, criatividade e usabilidade]
14
-
15
- Antes de propor o plano, investigue o repositório e use a documentação como fonte de verdade. Não presuma que o componente está isolado: determine suas dependências, impactos visuais, comportamentais, públicos e de manutenção.
16
-
17
- Leia, no mínimo, nesta ordem conforme forem aplicáveis:
18
-
19
- 1. `docs/README.md`, para entender o mapa e o contrato editorial da documentação;
20
- 2. a página de documentação do componente em `docs/components/` e as páginas dos componentes relacionados;
21
- 3. `docs/reference/definitions.md` e `docs/reference/stability.md`, para respeitar decisões e escopo já firmados;
22
- 4. `docs/reference/scss-architecture.md` e `docs/reference/design-tokens.md`, para preservar a arquitetura, as cascade layers, convenções e a hierarquia de tokens;
23
- 5. `docs/guides/accessibility.md`, a matriz de acessibilidade e o relatório de contraste quando o trabalho afetar interface, interação ou cores;
24
- 6. `CONTRIBUTING.md`, os mockups, exemplos, testes e o código-fonte efetivamente envolvidos.
25
-
26
- Localize o SCSS, JavaScript, documentação, laboratórios em `mockup/`, testes unitários, testes visuais e testes de acessibilidade do componente. Consulte também tokens e componentes relacionados quando houver acoplamento, padrões compartilhados ou risco de regressão.
27
-
28
- Priorize refinamento visual consistente com o sistema: use tokens semânticos e, quando cabível, tokens próprios do componente com fallback; não introduza valores soltos nem `!important`; preserve `@layer`, prefixos `.fs-*`, `.fs-u-*`, `.is-*`, `--fs-*` e as convenções de API. Avalie responsividade, estados padrão/hover/focus-visible/active/disabled/erro, temas claro e escuro, contraste, teclado, ARIA, foco e `prefers-reduced-motion`. Considere SemVer e compatibilidade pública ao sugerir mudanças de classes, atributos, tokens, eventos ou API JavaScript.
29
-
30
- Se faltarem informações que alterem materialmente o plano, você pode me fazer de **5 a 10 perguntas** antes de finalizá-lo. Para cada pergunta, apresente exatamente **5 alternativas**, incluindo uma alternativa recomendada identificada como **"Recomendada"** e acompanhada de uma explicação mais detalhada do motivo. Não faça perguntas apenas por formalidade: use-as para resolver incertezas reais de objetivo, escopo, prioridade, direção visual, compatibilidade ou critérios de aceite.
31
-
32
- Depois da investigação — e das minhas respostas, se houver perguntas — entregue um plano implementável, em português, sem modificar arquivos, com:
33
-
34
- 1. **Diagnóstico breve:** estado atual, causa/limitação e oportunidade identificada, citando arquivos e trechos relevantes.
35
- 2. **Decisões e escopo:** o que será feito, o que não será feito e as premissas adotadas.
36
- 3. **Plano passo a passo:** cada passo deve indicar arquivos prováveis, alteração concreta, justificativa, impacto em API/compatibilidade e dependências entre etapas.
37
- 4. **Direção visual e UX:** alterações propostas para hierarquia, espaçamento, tipografia, cor, elevação, responsividade e todos os estados aplicáveis; diferencie correções objetivas de sugestões opcionais.
38
- 5. **Acessibilidade e qualidade:** verificações de foco, teclado, ARIA, contraste, movimento reduzido e possíveis riscos.
39
- 6. **Testes e validação:** comandos e cenários específicos (unitário, build, lint, visual, a11y, contraste, documentação), proporcionais ao impacto.
40
- 7. **Documentação pós-implementação:** liste exatamente quais documentos devem ser corrigidos ou ampliados depois de implementar o plano — incluindo a página do componente, exemplos/mockups, tokens, guias, matriz de acessibilidade, changelog ou migração somente quando necessário — e descreva o conteúdo a atualizar. A implementação não estará concluída enquanto documentação, exemplos e testes afetados não refletirem o comportamento final.
41
- 8. **Riscos, alternativas e sugestões futuras:** riscos de regressão, trade-offs, alternativas descartadas e possíveis evoluções que devem ficar fora deste plano.
42
- 9. **Critérios de aceite:** resultados objetivos e verificáveis para considerar o trabalho concluído.
43
-
44
- Se o pedido contiver uma implementação nova, primeiro avalie se ela pode ser composta com recursos existentes e se é coerente com a direção de consolidação do projeto. Sinalize explicitamente qualquer necessidade de discussão prévia por contradizer uma decisão documentada ou por representar uma mudança breaking.
45
- ```