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.
- package/package.json +17 -15
- package/CHANGELOG.md +0 -940
- package/dist/css/components.css.map +0 -1
- package/dist/css/components.min.css.map +0 -1
- package/dist/css/fokus-components.css.map +0 -1
- package/dist/css/fokus-components.min.css.map +0 -1
- package/dist/css/fokus-core.css.map +0 -1
- package/dist/css/fokus-core.min.css.map +0 -1
- package/dist/css/fokus-dark.css.map +0 -1
- package/dist/css/fokus-dark.min.css.map +0 -1
- package/dist/css/fokus-rtl.css.map +0 -1
- package/dist/css/fokus-rtl.min.css.map +0 -1
- package/dist/css/fokus-utilities.css.map +0 -1
- package/dist/css/fokus-utilities.min.css.map +0 -1
- package/dist/css/fokus.css.map +0 -1
- package/dist/css/fokus.min.css.map +0 -1
- package/dist/css/fonts.css.map +0 -1
- package/dist/css/fonts.min.css.map +0 -1
- package/dist/css/forms.css.map +0 -1
- package/dist/css/forms.min.css.map +0 -1
- package/dist/css/helpers.css.map +0 -1
- package/dist/css/helpers.min.css.map +0 -1
- package/dist/css/layout.css.map +0 -1
- package/dist/css/layout.min.css.map +0 -1
- package/dist/js/fokus.js.map +0 -7
- package/dist/js/fokus.min.js.map +0 -7
- package/docs/README.md +0 -86
- package/docs/comparison.md +0 -124
- package/docs/components/accordion.md +0 -104
- package/docs/components/alert-dialog.md +0 -99
- package/docs/components/alert.md +0 -104
- package/docs/components/avatar.md +0 -13
- package/docs/components/badge.md +0 -101
- package/docs/components/breadcrumb.md +0 -93
- package/docs/components/button-group.md +0 -13
- package/docs/components/button.md +0 -98
- package/docs/components/card.md +0 -111
- package/docs/components/carousel.md +0 -167
- package/docs/components/checkbox.md +0 -110
- package/docs/components/close-button.md +0 -13
- package/docs/components/code.md +0 -13
- package/docs/components/collapse.md +0 -78
- package/docs/components/combobox.md +0 -123
- package/docs/components/command-palette.md +0 -131
- package/docs/components/datatable.md +0 -173
- package/docs/components/datepicker.md +0 -137
- package/docs/components/divider.md +0 -57
- package/docs/components/dropdown.md +0 -103
- package/docs/components/empty-state.md +0 -65
- package/docs/components/file-upload-advanced.md +0 -116
- package/docs/components/file-upload.md +0 -93
- package/docs/components/icon-link.md +0 -13
- package/docs/components/input-group.md +0 -73
- package/docs/components/input.md +0 -90
- package/docs/components/list-group.md +0 -13
- package/docs/components/modal.md +0 -120
- package/docs/components/navbar.md +0 -74
- package/docs/components/nested-menu.md +0 -90
- package/docs/components/notification-center.md +0 -116
- package/docs/components/offcanvas.md +0 -102
- package/docs/components/pagination.md +0 -145
- package/docs/components/placeholder.md +0 -13
- package/docs/components/popover.md +0 -118
- package/docs/components/progress.md +0 -126
- package/docs/components/radio.md +0 -80
- package/docs/components/range.md +0 -83
- package/docs/components/rating.md +0 -91
- package/docs/components/ratio.md +0 -13
- package/docs/components/responsive.md +0 -19
- package/docs/components/scrollspy.md +0 -13
- package/docs/components/segmented-control.md +0 -82
- package/docs/components/select.md +0 -89
- package/docs/components/skeleton.md +0 -70
- package/docs/components/stepper.md +0 -107
- package/docs/components/switch.md +0 -97
- package/docs/components/table.md +0 -90
- package/docs/components/tabs.md +0 -104
- package/docs/components/tag.md +0 -144
- package/docs/components/tile.md +0 -112
- package/docs/components/timeline.md +0 -78
- package/docs/components/toast.md +0 -108
- package/docs/components/tooltip.md +0 -113
- package/docs/components/tree-view.md +0 -118
- package/docs/contributing/contributing.md +0 -18
- package/docs/getting-started/installation.md +0 -70
- package/docs/getting-started/usage.md +0 -105
- package/docs/guides/accessibility.md +0 -109
- package/docs/guides/charts.md +0 -73
- package/docs/guides/dark-mode.md +0 -90
- package/docs/guides/icons.md +0 -99
- package/docs/guides/javascript-api.md +0 -9
- package/docs/guides/layout-advanced.md +0 -118
- package/docs/guides/migration-clarus-to-fokus.md +0 -48
- package/docs/guides/migration-external.md +0 -123
- package/docs/guides/migration-v1.md +0 -63
- package/docs/guides/print.md +0 -30
- package/docs/guides/rtl-and-system-preferences.md +0 -28
- package/docs/guides/theming.md +0 -140
- package/docs/guides/utility-api.md +0 -9
- package/docs/prompts/prompt-plan.md +0 -45
- package/docs/reference/accessibility-matrix.md +0 -77
- package/docs/reference/browser-support.md +0 -75
- package/docs/reference/contrast-report.md +0 -54
- package/docs/reference/definitions.md +0 -868
- package/docs/reference/design-tokens.md +0 -208
- package/docs/reference/scss-architecture.md +0 -227
- package/docs/reference/size-baseline.json +0 -34
- package/docs/reference/stability.md +0 -89
- package/docs/showcase.md +0 -25
- package/mockup/README.md +0 -41
- package/mockup/assets/carousel-planning.png +0 -0
- package/mockup/assets/carousel-workspace.png +0 -0
- package/mockup/assets/example-theme.css +0 -19
- package/mockup/assets/example-theme.js +0 -11
- package/mockup/assets/showcase-contracts.js +0 -84
- package/mockup/assets/showcase.css +0 -91
- package/mockup/assets/showcase.js +0 -724
- package/mockup/content-data.html +0 -9
- package/mockup/examples/accordion-tabs-toast.html +0 -149
- package/mockup/examples/alert-dialog.html +0 -84
- package/mockup/examples/alerts.html +0 -115
- package/mockup/examples/badges-alerts.html +0 -109
- package/mockup/examples/buttons.html +0 -58
- package/mockup/examples/cards.html +0 -132
- package/mockup/examples/carousel.html +0 -126
- package/mockup/examples/charts.html +0 -102
- package/mockup/examples/check-radio-switch.html +0 -620
- package/mockup/examples/collapse.html +0 -69
- package/mockup/examples/combobox.html +0 -60
- package/mockup/examples/command-palette.html +0 -64
- package/mockup/examples/datatable.html +0 -113
- package/mockup/examples/datepicker.html +0 -62
- package/mockup/examples/divider.html +0 -45
- package/mockup/examples/dropdown-tooltip.html +0 -77
- package/mockup/examples/empty-state.html +0 -56
- package/mockup/examples/file-drop.html +0 -74
- package/mockup/examples/file-upload-advanced.html +0 -68
- package/mockup/examples/forms-advanced.html +0 -77
- package/mockup/examples/hover-card.html +0 -86
- package/mockup/examples/icons.html +0 -157
- package/mockup/examples/input-group.html +0 -74
- package/mockup/examples/js-foundation.html +0 -215
- package/mockup/examples/layout.html +0 -134
- package/mockup/examples/modal-select.html +0 -127
- package/mockup/examples/nested-menu.html +0 -73
- package/mockup/examples/notification-center.html +0 -86
- package/mockup/examples/offcanvas-popover.html +0 -133
- package/mockup/examples/pagination-breadcrumbs.html +0 -92
- package/mockup/examples/popover.html +0 -81
- package/mockup/examples/range.html +0 -69
- package/mockup/examples/rating.html +0 -103
- package/mockup/examples/segmented-control.html +0 -96
- package/mockup/examples/skeletons.html +0 -82
- package/mockup/examples/spinner-progress.html +0 -130
- package/mockup/examples/stepper.html +0 -119
- package/mockup/examples/tables-navbar.html +0 -89
- package/mockup/examples/tag.html +0 -115
- package/mockup/examples/theming.html +0 -68
- package/mockup/examples/tile.html +0 -107
- package/mockup/examples/timeline.html +0 -108
- package/mockup/examples/toast.html +0 -113
- package/mockup/examples/tooltip.html +0 -68
- package/mockup/examples/tree-view.html +0 -68
- package/mockup/feedback-actions.html +0 -9
- package/mockup/forms.html +0 -13
- package/mockup/foundations.html +0 -7
- package/mockup/kitchen-sink.html +0 -696
- package/mockup/navigation-disclosure.html +0 -11
- package/mockup/overlays-commands.html +0 -12
- package/mockup/templates/README.md +0 -20
- package/mockup/templates/admin.html +0 -334
- package/mockup/templates/auth.html +0 -234
- package/mockup/templates/dashboard.html +0 -442
- package/mockup/templates/landing.html +0 -397
- package/packages/fokus-icons/package.json +0 -46
- package/scripts/migrate-fokus-map.json +0 -1366
- package/scripts/migrate-fokus.mjs +0 -97
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Matriz de acessibilidade por componente
|
|
2
|
-
|
|
3
|
-
Resumo rápido do que cada componente cobre em teclado, ARIA e gestão de foco.
|
|
4
|
-
O detalhe completo (com exemplos) está na seção "A11y" da página de cada
|
|
5
|
-
componente em [Componentes](../README.md#componentes); os padrões
|
|
6
|
-
compartilhados entre vários componentes (foco visível, focus trap,
|
|
7
|
-
`prefers-reduced-motion` etc.) estão no [guia de acessibilidade](../guides/accessibility.md).
|
|
8
|
-
|
|
9
|
-
Todo laboratório em `mockup/*.html` roda no gate `npm run test:a11y` em tema
|
|
10
|
-
claro e escuro. As fontes executáveis em `mockup/examples/*.html` também são
|
|
11
|
-
verificadas por axe-core via
|
|
12
|
-
Playwright, regras WCAG 2.1 A/AA) no CI — um componente só é considerado
|
|
13
|
-
"coberto" abaixo se aparecer em algum mockup testado. Contraste de cor é verificado em dois níveis complementares:
|
|
14
|
-
pares de token conhecidos (`npm run contrast`, ver
|
|
15
|
-
[contrast-report.md](contrast-report.md)) e, de forma mais abrangente, texto
|
|
16
|
-
renderizado de fato nos mockups (via o gate axe).
|
|
17
|
-
|
|
18
|
-
| Componente | Teclado | ARIA | Gestão de foco | Contraste AA | Coberto por axe (CI) |
|
|
19
|
-
|---|---|---|---|---|---|
|
|
20
|
-
| [Accordion](../components/accordion.md) | Nativo (`<button>`) | Automático | — | ✓ | Sim |
|
|
21
|
-
| [Alert Dialog](../components/alert-dialog.md) | Herdado do Modal | Herdado do Modal | Focus trap + devolve ao gatilho | ✓ | Sim |
|
|
22
|
-
| [Alert](../components/alert.md) | Nativo quando houver link/botão | Manual (`role="alert"`/`"status"`) | Nenhuma automática | ✓ | Sim |
|
|
23
|
-
| [Badge](../components/badge.md) | N/A (decorativo) | N/A | — | ✓ | Sim |
|
|
24
|
-
| [Breadcrumb](../components/breadcrumb.md) | Nativo (links) | Manual (`<nav aria-label>`) | — | ✓ | Sim |
|
|
25
|
-
| [Button](../components/button.md) | Nativo | Manual (`aria-label` em só-ícone) | Foco visível padrão | ✓ | Sim |
|
|
26
|
-
| [Card](../components/card.md) | Nativo (stretched-link) | — | Foco no link real | ✓ | Sim |
|
|
27
|
-
| [Carousel](../components/carousel.md) | Automático (setas/Home/End e arraste) | Automático (`aria-hidden`, `aria-current`, toggle) | Recebe foco no contêiner; autoplay pausável | ✓ | Sim |
|
|
28
|
-
| [Checkbox](../components/checkbox.md) | Nativo (Space) | Nativo + `aria-describedby` manual | Foco visível no controle | ✓ | Sim |
|
|
29
|
-
| [Collapse](../components/collapse.md) | Nativo (gatilho) | Automático | — | ✓ | Sim |
|
|
30
|
-
| [Divider](../components/divider.md) | N/A | Implícito (`<hr>`) | — | ✓ | Sim |
|
|
31
|
-
| [Dropdown](../components/dropdown.md) | Automático (setas/Escape) | Automático | Primeiro item ao abrir; devolve ao gatilho | ✓ | Sim |
|
|
32
|
-
| [Empty State](../components/empty-state.md) | N/A | Manual (`aria-live` opcional) | — | ✓ | Sim |
|
|
33
|
-
| [File Upload](../components/file-upload.md) | Nativo | Nativo | — | ✓ | Sim |
|
|
34
|
-
| [Input / Select estático](../components/input.md) | Nativo | Manual (`for`/`id`, `aria-describedby`) | — | ✓ | Sim |
|
|
35
|
-
| [Input Group](../components/input-group.md) | Nativo | Manual (`aria-describedby` no addon) | — | ✓ | Sim |
|
|
36
|
-
| [Modal](../components/modal.md) | Nativo dentro do trap | Automático (`role="dialog"`) | Focus trap; devolve ao gatilho | ✓ | Sim |
|
|
37
|
-
| [Navbar](../components/navbar.md) | Nativo | Manual (`<nav aria-label>`) | — | ✓ | Sim |
|
|
38
|
-
| [Nested Menu](../components/nested-menu.md) | Automático (setas, Escape por nível) | Automático | Move foco entre níveis | ✓ | Sim |
|
|
39
|
-
| [Notification Center](../components/notification-center.md) | Automático (Escape) | Automático | Devolve ao gatilho | ✓ | Sim |
|
|
40
|
-
| [Offcanvas](../components/offcanvas.md) | Nativo dentro do trap | Automático (`role="dialog"`) | Focus trap; devolve ao gatilho | ✓ | Sim |
|
|
41
|
-
| [Pagination](../components/pagination.md) | Nativo (links) | Manual (`<nav aria-label>`, `aria-current`) | — | ✓ | Sim |
|
|
42
|
-
| [Popover](../components/popover.md) | Automático (Escape) | Automático | Devolve ao gatilho | ✓ | Sim |
|
|
43
|
-
| [Spinner / Progress](../components/progress.md) | N/A | Manual (`role`+`aria-label`/`aria-valuenow`) | — | ✓ | Sim |
|
|
44
|
-
| [Radio](../components/radio.md) | Nativo (setas no grupo) | Nativo + `fieldset/legend` manual | Foco visível no controle | ✓ | Sim |
|
|
45
|
-
| [Rating](../components/rating.md) | Nativo (setas no grupo) | Manual (`aria-label` por estrela) | — | ✓ | Sim |
|
|
46
|
-
| [Segmented Control](../components/segmented-control.md) | Nativo (setas no grupo) | Nativo | — | ✓ | Sim |
|
|
47
|
-
| [Select (custom)](../components/select.md) | Herdado do Dropdown | Automático (`role="listbox"`) | Herdado do Dropdown | ✓ | Sim |
|
|
48
|
-
| [Skeleton](../components/skeleton.md) | N/A | Manual (`aria-busy` opcional) | — | ✓ | Sim |
|
|
49
|
-
| [Stepper](../components/stepper.md) | Automático (passos clicáveis) | Automático (`aria-current="step"`) | — | ✓ | Sim |
|
|
50
|
-
| [Switch](../components/switch.md) | Nativo (Space) | Checkbox nativo; nome manual sem texto | Foco visível no trilho | ✓ | Sim |
|
|
51
|
-
| [Table](../components/table.md) | Nativo | Manual (`scope`, `<caption>`) | — | ✓ | Sim |
|
|
52
|
-
| [Tabs](../components/tabs.md) | Automático (roving tabindex) | Automático (`role="tab"`/`"tabpanel"`) | — | ✓ | Sim |
|
|
53
|
-
| [Tag](../components/tag.md) | Nativo (botão de fechar) | Manual (`aria-label` descritivo, `aria-busy`) | Foco preservado/transferido após dismiss | ✓ | Sim |
|
|
54
|
-
| [Tile](../components/tile.md) | Nativo (link real) | — | Foco no link, não no `::after` | ✓ | Sim |
|
|
55
|
-
| [Timeline](../components/timeline.md) | N/A (sem interação própria) | — | — | ✓ | Sim |
|
|
56
|
-
| [Toast](../components/toast.md) | Nativo em fechamento e ações | Automático (`role="status"`, `aria-live="polite"`) | Nenhuma automática; pausa em foco/hover | ✓ | Sim |
|
|
57
|
-
| [Tooltip](../components/tooltip.md) | Nativo (`focus`/`blur`, ponteiro e Escape) | Automático (`role="tooltip"`, `aria-describedby`) | Nenhuma; foco permanece no gatilho | ✓ | Sim |
|
|
58
|
-
|
|
59
|
-
## Legenda
|
|
60
|
-
|
|
61
|
-
- **Nativo**: comportamento do elemento HTML nativo (`button`, `input`,
|
|
62
|
-
links), sem JS do framework.
|
|
63
|
-
- **Automático**: o JS do FokusStyles aplica/atualiza o atributo ou o
|
|
64
|
-
comportamento de teclado ao inicializar — nada a fazer no HTML.
|
|
65
|
-
- **Manual**: precisa ser adicionado por quem usa o componente (o framework
|
|
66
|
-
não infere texto/contexto).
|
|
67
|
-
- **N/A**: componente não interativo por padrão.
|
|
68
|
-
|
|
69
|
-
## Processo
|
|
70
|
-
|
|
71
|
-
- Toda contribuição de componente novo segue o checklist de acessibilidade
|
|
72
|
-
do [guia de contribuição](../contributing/contributing.md) antes do merge.
|
|
73
|
-
- O gate `npm run test:a11y` roda no CI a cada PR (ver
|
|
74
|
-
[.github/workflows/ci.yml](../../.github/workflows/ci.yml)); uma
|
|
75
|
-
regressão de contraste, nome acessível ou papel ARIA quebra o build.
|
|
76
|
-
- Esta tabela é mantida manualmente — ao adicionar/alterar teclado, ARIA ou
|
|
77
|
-
foco de um componente, atualize a linha correspondente na mesma PR.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Suporte a navegadores
|
|
2
|
-
|
|
3
|
-
O Fokus Styles mira um alvo **moderno com fallback progressivo**: as duas
|
|
4
|
-
últimas versões dos navegadores principais, com piso mínimo garantido em
|
|
5
|
-
**Safari/iOS Safari 16.4**. Não há suporte a Internet Explorer.
|
|
6
|
-
|
|
7
|
-
## Alvo (`.browserslistrc`)
|
|
8
|
-
|
|
9
|
-
```text
|
|
10
|
-
last 2 Chrome versions
|
|
11
|
-
last 2 Edge versions
|
|
12
|
-
last 2 Firefox versions
|
|
13
|
-
Firefox ESR
|
|
14
|
-
last 2 Safari versions
|
|
15
|
-
Safari >= 16.4
|
|
16
|
-
last 2 iOS versions
|
|
17
|
-
iOS >= 16.4
|
|
18
|
-
not dead
|
|
19
|
-
not IE 11
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Esse alvo alimenta o Autoprefixer no build (`scripts/build.mjs`), então
|
|
23
|
-
prefixos são adicionados automaticamente apenas onde o alvo ainda exige.
|
|
24
|
-
|
|
25
|
-
## Por que Safari 16.4 é o piso
|
|
26
|
-
|
|
27
|
-
É a versão mínima com suporte estável a todos os recursos usados pela base
|
|
28
|
-
do framework — `@layer` (Safari 16.4) e `color-mix()`/OKLCH (Safari 16.4)
|
|
29
|
-
são os dois recursos que fixam esse piso; sem eles, o piso seria mais baixo.
|
|
30
|
-
|
|
31
|
-
## Matriz de compatibilidade por feature
|
|
32
|
-
|
|
33
|
-
Diferente do alvo geral acima (que é sobre *quais navegadores testamos*),
|
|
34
|
-
esta tabela é sobre *o que acontece em navegadores fora do alvo* —
|
|
35
|
-
navegador mínimo com suporte nativo e o comportamento de fallback
|
|
36
|
-
documentado (não "quebra silenciosamente") para cada recurso moderno
|
|
37
|
-
usado no CSS/JS do framework.
|
|
38
|
-
|
|
39
|
-
| Feature | Uso no FokusStyles | Suporte nativo mínimo | Comportamento sem suporte |
|
|
40
|
-
|---|---|---|---|
|
|
41
|
-
| `@layer` (cascade layers) | Organiza `reset/tokens/base/layout/components/utilities/overrides` (`packages/fokus-core/scss/tokens/_root.scss:8`; ver [scss-architecture.md](scss-architecture.md)) | Safari 16.4, Chrome 99, Firefox 97, Edge 99 | Todas as regras caem para a cascata padrão (ordem de origem + especificidade). Como o SCSS já é organizado na mesma ordem lógica das camadas, a degradação visual é mínima — sem garantia formal de paridade pixel-a-pixel, mas sem quebra funcional. |
|
|
42
|
-
| `color-mix()` / `oklch()` | Tokens de cor gerados em OKLCH, dentro de um bloco `@supports (color: oklch(0% 0 0))` (`packages/fokus-core/scss/tokens/_root.scss:73`); usado também nos temas `data-theme="dark"` e `data-fs-brand="*"` | Safari 16.4, Chrome 111, Firefox 113, Edge 111 | `@supports` faz a detecção — navegadores sem suporte simplesmente ignoram o bloco OKLCH inteiro e usam os valores hex sRGB declarados antes dele (mesmas cores, aproximação visual, não pixel-perfect). Não é uma feature isolada: é o mecanismo de fallback de **todos** os tokens de cor do framework. |
|
|
43
|
-
| `@container` (container queries) | Utilitários opt-in `.fs-u-cq`/`.fs-u-cq-{sm,md,lg}-d-*` (`packages/fokus-utilities/scss/utilities/_container-queries.scss`); ver [layout-advanced.md](../guides/layout-advanced.md) | Safari 16.0, Chrome 105, Firefox 110, Edge 105 | Sem suporte, o `@container` inteiro é ignorado pelo navegador — os elementos permanecem no `display` padrão do HTML (ex.: `<div>` como `block`), sem a responsividade condicionada à largura do container. Como é opt-in (só afeta quem usa `.fs-u-cq-*`), não há regressão em quem não usa esses utilitários. |
|
|
44
|
-
| Propriedades customizadas (`--fs-*`) | Tokens em todas as camadas (cor, espaçamento, raio, sombra, tipografia) | Suportado desde 2017 em todos os navegadores principais (abaixo do piso Safari 16.4) | Não relevante ao alvo atual — nenhum navegador do alvo (`.browserslistrc`) carece desse suporte. |
|
|
45
|
-
| `:focus-visible` | Anel de foco acessível (mixin `focus-ring`, `packages/fokus-core/scss/tools/_mixins.scss`), usado em botões, inputs, itens de menu/tree, etc. | Safari 15.4, Chrome 86, Firefox 85, Edge 86 (abaixo do piso Safari 16.4) | Não relevante ao alvo atual pelo mesmo motivo — mas caso um navegador não suporte, o seletor inteiro é ignorado (sem erro), só o anel de foco customizado some; o `outline` nativo do navegador permanece como fallback funcional (não visual). |
|
|
46
|
-
| `prefers-reduced-motion` | Desliga animações de skeleton/carousel/transições (`packages/fokus-js/js/core/transition.js`, `_skeleton.scss`) | Suportado desde 2019 em todos os navegadores principais (abaixo do piso Safari 16.4) | Não relevante ao alvo atual. Em navegadores sem suporte à media query, a regra é ignorada e as animações continuam ativas por padrão (comportamento seguro: anima por padrão, só desliga quando o recurso E a preferência do usuário existem). |
|
|
47
|
-
|
|
48
|
-
### Recursos considerados, mas não usados hoje
|
|
49
|
-
|
|
50
|
-
Para não deixar dúvida sobre lacunas silenciosas: `:has()` e
|
|
51
|
-
`@custom-media` (as duas features citadas com mais frequência ao lado de
|
|
52
|
-
`@container`/`color-mix()` em discussões sobre CSS moderno) **não são
|
|
53
|
-
usadas em nenhuma linha do framework atualmente** — não há necessidade
|
|
54
|
-
técnica identificada até a v1.0.0. Se/quando entrarem, esta tabela ganha
|
|
55
|
-
uma linha nova no mesmo formato antes do merge.
|
|
56
|
-
|
|
57
|
-
## Fallback progressivo (resumo)
|
|
58
|
-
|
|
59
|
-
- **Cores**: OKLCH com fallback em hex sRGB via `@supports` (ver tabela
|
|
60
|
-
acima) — nunca "quebra", só perde precisão de mistura de cor.
|
|
61
|
-
- **`@layer`**: degrada para cascata padrão, sem garantia formal de
|
|
62
|
-
paridade visual mas sem quebra funcional.
|
|
63
|
-
- **`@container`**: opt-in; sem suporte, os elementos ficam no `display`
|
|
64
|
-
HTML padrão.
|
|
65
|
-
- Sem polyfills: o projeto não inclui polyfills de CSS; navegadores fora
|
|
66
|
-
do alvo (`.browserslistrc`) devem ser tratados como não suportados, não
|
|
67
|
-
como "degradados".
|
|
68
|
-
|
|
69
|
-
## Testes
|
|
70
|
-
|
|
71
|
-
A regressão visual (`npm run test:visual`, Playwright + Chromium) cobre o
|
|
72
|
-
navegador mais permissivo do alvo. Não há cobertura automatizada de
|
|
73
|
-
Safari/Firefox no momento — mudanças que dependem de recursos recentes
|
|
74
|
-
(a tabela acima) devem ser verificadas manualmente nesses engines antes
|
|
75
|
-
do release.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# Relatório de contraste
|
|
2
|
-
|
|
3
|
-
`npm run contrast` audita a razão de contraste WCAG dos pares
|
|
4
|
-
texto/fundo emitidos pelos tokens (`packages/fokus-core/scss/tokens/_root.scss`,
|
|
5
|
-
`packages/fokus-core/scss/themes/_dark.scss`), nos temas claro e escuro:
|
|
6
|
-
texto base sobre superfície, botões sólidos e alerts, nas seis cores de tema
|
|
7
|
-
(`primary`/`secondary`/`success`/`warning`/`danger`/`info`).
|
|
8
|
-
|
|
9
|
-
## Como rodar
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm run contrast
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Cada linha reporta a razão calculada e se atinge AA (WCAG 2.1 SC 1.4.3/1.4.11)
|
|
16
|
-
e AAA:
|
|
17
|
-
|
|
18
|
-
- **4.5:1** — mínimo AA para texto normal (corpo de alert, texto base).
|
|
19
|
-
- **3:1** — mínimo AA para texto grande/negrito e componentes de UI (usado
|
|
20
|
-
para o texto de botões sólidos, que é sempre bold/UI, não corpo de leitura).
|
|
21
|
-
- **7:1** — AAA, opcional.
|
|
22
|
-
|
|
23
|
-
Checkbox, Radio e Switch reutilizam esses tokens semânticos para bordas,
|
|
24
|
-
superfícies, estados de ação e validação. O relatório visual dos laboratórios
|
|
25
|
-
também deve ser executado após qualquer ajuste nos tokens locais dos controles.
|
|
26
|
-
|
|
27
|
-
`npm run contrast -- --strict` sai com código de erro se algum par ficar
|
|
28
|
-
abaixo do mínimo AA — é o comando rodado pelo gate `contrast:check` do CI
|
|
29
|
-
(`.github/workflows/ci.yml`).
|
|
30
|
-
|
|
31
|
-
## Por que o tema escuro precisa de pesos próprios
|
|
32
|
-
|
|
33
|
-
O texto de um botão sólido (`.fs-btn-primary` etc.) é decidido uma vez, em
|
|
34
|
-
tempo de build, por `color-contrast()` (branco ou preto, o que der mais
|
|
35
|
-
contraste contra a cor sólida no **tema claro**) e gravado como valor
|
|
36
|
-
estático em `--fs-btn-color`. Ele não é recalculado por tema. O fundo, por
|
|
37
|
-
outro lado, muda no escuro (`--fs-color-{nome}` é misturado em direção ao
|
|
38
|
-
branco). Isso significa que uma cor de texto escolhida para o fundo claro
|
|
39
|
-
pode ficar com contraste ruim contra o fundo (mais claro) do tema escuro — é
|
|
40
|
-
exatamente esse cenário que o relatório cobre nas linhas `dark: btn-* text
|
|
41
|
-
(light)/bg(dark)`.
|
|
42
|
-
|
|
43
|
-
Da mesma forma, os pesos de mistura de `--fs-alert-*-bg`/`-text` no escuro
|
|
44
|
-
(`$dark-alert-bg-weight`/`$dark-alert-text-weight` em `themes/_dark.scss`)
|
|
45
|
-
foram ajustados a partir do relatório — os pesos "óbvios" (mistura simétrica)
|
|
46
|
-
davam ~4.0–4.3:1 em quatro das seis cores, abaixo do mínimo AA de 4.5:1. Se
|
|
47
|
-
você alterar esses pesos, ou os pesos de `$dark-color-weights`, rode
|
|
48
|
-
`npm run contrast` de novo antes de commitar.
|
|
49
|
-
|
|
50
|
-
## Última execução
|
|
51
|
-
|
|
52
|
-
29 pares checados, 0 abaixo do mínimo AA (ver `npm run contrast` para os
|
|
53
|
-
valores atuais — este arquivo documenta o processo, não os números, que
|
|
54
|
-
mudam a cada ajuste de token).
|