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.
- package/dist/css/components.css +561 -83
- package/dist/css/components.min.css +1 -1
- package/dist/css/fokus-components.css +561 -83
- package/dist/css/fokus-components.min.css +1 -1
- package/dist/css/fokus-rtl.css +697 -83
- package/dist/css/fokus-rtl.min.css +1 -1
- package/dist/css/fokus-utilities.css +136 -0
- package/dist/css/fokus-utilities.min.css +1 -1
- package/dist/css/fokus.css +996 -258
- package/dist/css/fokus.min.css +1 -1
- package/dist/css/forms.css +300 -176
- package/dist/css/forms.min.css +1 -1
- package/dist/css/helpers.css +136 -0
- package/dist/css/helpers.min.css +1 -1
- package/dist/js/fokus.js +270 -25
- package/dist/js/fokus.min.js +18 -18
- package/package.json +17 -15
- package/packages/fokus-components/scss/components/_alerts.scss +128 -6
- package/packages/fokus-components/scss/components/_badges.scss +26 -10
- package/packages/fokus-components/scss/components/_index.scss +1 -0
- package/packages/fokus-components/scss/components/_popover.scss +131 -21
- package/packages/fokus-components/scss/components/_responsive.scss +23 -0
- package/packages/fokus-components/scss/components/_tag.scss +37 -14
- package/packages/fokus-components/scss/components/_toasts.scss +156 -11
- package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
- package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
- package/packages/fokus-components/scss/forms/_forms.scss +16 -0
- package/packages/fokus-js/js/carousel.d.ts +4 -0
- package/packages/fokus-js/js/carousel.js +8 -0
- package/packages/fokus-js/js/core/positioning.js +18 -9
- package/packages/fokus-js/js/dropdown.d.ts +4 -0
- package/packages/fokus-js/js/dropdown.js +7 -0
- package/packages/fokus-js/js/popover.js +26 -1
- package/packages/fokus-js/js/tabs.d.ts +3 -0
- package/packages/fokus-js/js/tabs.js +5 -0
- package/packages/fokus-js/js/tag.js +17 -0
- package/packages/fokus-js/js/toast.js +77 -3
- package/packages/fokus-js/js/tooltip.d.ts +8 -1
- package/packages/fokus-js/js/tooltip.js +106 -13
- package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
- package/CHANGELOG.md +0 -910
- 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 -59
- package/docs/components/avatar.md +0 -13
- package/docs/components/badge.md +0 -82
- 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 -97
- 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 -105
- package/docs/components/progress.md +0 -126
- package/docs/components/radio.md +0 -70
- package/docs/components/range.md +0 -83
- package/docs/components/rating.md +0 -91
- package/docs/components/ratio.md +0 -13
- 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 -75
- package/docs/components/table.md +0 -90
- package/docs/components/tabs.md +0 -104
- package/docs/components/tag.md +0 -129
- package/docs/components/tile.md +0 -112
- package/docs/components/timeline.md +0 -78
- package/docs/components/toast.md +0 -95
- package/docs/components/tooltip.md +0 -77
- 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 -102
- 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 -50
- package/docs/reference/definitions.md +0 -864
- package/docs/reference/design-tokens.md +0 -194
- 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 -8
- 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 -41
- package/mockup/examples/badges-alerts.html +0 -77
- 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 -144
- 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/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 -105
- package/mockup/examples/theming.html +0 -68
- package/mockup/examples/tile.html +0 -107
- package/mockup/examples/timeline.html +0 -108
- 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,123 +0,0 @@
|
|
|
1
|
-
# Combobox / Autocomplete
|
|
2
|
-
|
|
3
|
-
Um `<input>` de texto com uma listbox de sugestões que filtra conforme o
|
|
4
|
-
usuário digita — diferente do [Select](select.md) (que troca a aparência
|
|
5
|
-
de um `<select>` inteiro), o Combobox é sempre texto livre com sugestões,
|
|
6
|
-
seguindo o padrão [WAI-ARIA Combobox (List Autocomplete)](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/).
|
|
7
|
-
Reusa `packages/fokus-js/js/core/positioning.js` (mesmo posicionamento do [Dropdown](dropdown.md))
|
|
8
|
-
e a classe `.fs-dropdown-menu`/`.fs-dropdown-item` para a listbox flutuante.
|
|
9
|
-
|
|
10
|
-
## Visão geral
|
|
11
|
-
|
|
12
|
-
```html
|
|
13
|
-
<div class="fs-combobox">
|
|
14
|
-
<input type="text" class="fs-form-control" data-fs="combobox" data-fs-target="#lista-frameworks" placeholder="Buscar framework…">
|
|
15
|
-
</div>
|
|
16
|
-
<ul class="fs-dropdown-menu fs-combobox-listbox" id="lista-frameworks">
|
|
17
|
-
<li class="fs-dropdown-item" data-value="bootstrap">Bootstrap</li>
|
|
18
|
-
<li class="fs-dropdown-item" data-value="tailwind">Tailwind CSS</li>
|
|
19
|
-
<li class="fs-dropdown-item is-disabled" data-fs-empty hidden>Nenhum resultado encontrado.</li>
|
|
20
|
-
</ul>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
O JS reanexa a listbox a `document.body` (igual ao Dropdown/Select — evita
|
|
24
|
-
recorte por `overflow: hidden` de um ancestral) e a posiciona relativa ao
|
|
25
|
-
input. O item com `data-fs-empty` é opcional, mas recomendado: o
|
|
26
|
-
componente alterna a visibilidade dele automaticamente quando nenhuma
|
|
27
|
-
opção corresponde à busca — o texto dele é escrito por você (o framework
|
|
28
|
-
não injeta texto/idioma).
|
|
29
|
-
|
|
30
|
-
## Anatomia
|
|
31
|
-
|
|
32
|
-
`.fs-combobox` (wrapper posicionador) > `input[role="combobox"]` +
|
|
33
|
-
`.fs-dropdown-menu.fs-combobox-listbox[role="listbox"]` > um ou mais
|
|
34
|
-
`.fs-dropdown-item[role="option"]`.
|
|
35
|
-
|
|
36
|
-
## Variações
|
|
37
|
-
|
|
38
|
-
- `data-value` em cada `.fs-dropdown-item` define o valor "de verdade"
|
|
39
|
-
(`instance.value`); sem ele, o valor é o texto visível do item.
|
|
40
|
-
- Item desabilitado: `.fs-dropdown-item.is-disabled` — ignorado por
|
|
41
|
-
teclado, mouse e pelo filtro de "opções selecionáveis".
|
|
42
|
-
- Item de "sem resultados": `.fs-dropdown-item.is-disabled[data-fs-empty]`,
|
|
43
|
-
`hidden` por padrão — visibilidade alternada automaticamente pelo JS.
|
|
44
|
-
|
|
45
|
-
## Estados
|
|
46
|
-
|
|
47
|
-
- Digitar filtra as opções por substring (case-insensitive) — as que não
|
|
48
|
-
correspondem recebem o atributo `hidden` (removidas da árvore de
|
|
49
|
-
acessibilidade junto, não só visualmente).
|
|
50
|
-
- Campo vazio mostra a lista completa (sem filtro).
|
|
51
|
-
- Opção destacada durante a navegação por teclado: `.is-active` (visual
|
|
52
|
-
idêntico ao item ativo do Dropdown/Select).
|
|
53
|
-
- Opção escolhida: `aria-selected="true"` (só nela; as demais voltam a
|
|
54
|
-
`"false"`).
|
|
55
|
-
|
|
56
|
-
## A11y
|
|
57
|
-
|
|
58
|
-
`role="combobox"` + `aria-autocomplete="list"` + `aria-controls` +
|
|
59
|
-
`aria-expanded` no input, `role="listbox"` na lista, `role="option"` +
|
|
60
|
-
`aria-selected` em cada item — todos aplicados automaticamente, com `id`
|
|
61
|
-
gerado para quem não tiver um. O foco **nunca sai do input**: a opção
|
|
62
|
-
destacada é comunicada via `aria-activedescendant` (não `focus()`), como o
|
|
63
|
-
padrão ARIA de combobox exige — por isso as opções não são elementos
|
|
64
|
-
focáveis (`<li>`/`<div>`, não `<button>`).
|
|
65
|
-
|
|
66
|
-
Teclado (com foco no input):
|
|
67
|
-
- `ArrowDown`/`ArrowUp`: abre a listbox (se fechada) ou move o destaque
|
|
68
|
-
entre as opções selecionáveis, com wrap.
|
|
69
|
-
- `Home`/`End`: vai pra primeira/última opção selecionável (listbox
|
|
70
|
-
aberta).
|
|
71
|
-
- `Enter`: seleciona a opção destacada (se houver e a listbox estiver
|
|
72
|
-
aberta) — preenche o input, fecha a listbox.
|
|
73
|
-
- `Escape`: fecha a listbox **sem** alterar o valor do input.
|
|
74
|
-
|
|
75
|
-
## API JS
|
|
76
|
-
|
|
77
|
-
Auto-init via `data-fs="combobox"` **no `<input>`**, com `data-fs-target`
|
|
78
|
-
apontando pro seletor da listbox (convenção idêntica ao Dropdown).
|
|
79
|
-
`Combobox.getInstance(inputEl)`.
|
|
80
|
-
|
|
81
|
-
| Método | Descrição |
|
|
82
|
-
|---|---|
|
|
83
|
-
| `show()` | Abre a listbox e posiciona relativa ao input. |
|
|
84
|
-
| `hide()` | Fecha a listbox, limpa o destaque e `aria-activedescendant`. |
|
|
85
|
-
| `toggle()` | Alterna. |
|
|
86
|
-
| `dispose()` | Fecha se aberto, remove listeners, desregistra a instância. |
|
|
87
|
-
|
|
88
|
-
| Propriedade | Descrição |
|
|
89
|
-
|---|---|
|
|
90
|
-
| `value` | Valor da opção selecionada (`data-value` do item, ou o texto visível se não houver). `null` até a primeira seleção. |
|
|
91
|
-
|
|
92
|
-
| Evento (no input) | Cancelável | Quando |
|
|
93
|
-
|---|---|---|
|
|
94
|
-
| `change` (nativo) | Não | Ao selecionar uma opção (clique ou `Enter`). |
|
|
95
|
-
| `fs:combobox:changed` | Não | Mesmo momento, com `event.detail.value`/`event.detail.label`. |
|
|
96
|
-
| `fs:combobox:shown` | Não | Depois de abrir a listbox. |
|
|
97
|
-
| `fs:combobox:hidden` | Não | Depois de fechar. |
|
|
98
|
-
|
|
99
|
-
## Tokens
|
|
100
|
-
|
|
101
|
-
Os mesmos do [Dropdown](dropdown.md) (`.fs-dropdown-menu`/`.fs-dropdown-item`)
|
|
102
|
-
e de [`.fs-form-control`](input.md) — sem tokens próprios. `.fs-combobox-listbox`
|
|
103
|
-
soma `max-height: 240px` + scroll interno para listas longas.
|
|
104
|
-
|
|
105
|
-
## Exemplo
|
|
106
|
-
|
|
107
|
-
```html
|
|
108
|
-
<div class="fs-combobox">
|
|
109
|
-
<input type="text" class="fs-form-control" id="cidade" data-fs="combobox" data-fs-target="#cidade-lista" placeholder="Buscar cidade…">
|
|
110
|
-
</div>
|
|
111
|
-
<ul class="fs-dropdown-menu fs-combobox-listbox" id="cidade-lista">
|
|
112
|
-
<li class="fs-dropdown-item" data-value="sp">São Paulo</li>
|
|
113
|
-
<li class="fs-dropdown-item" data-value="rj">Rio de Janeiro</li>
|
|
114
|
-
<li class="fs-dropdown-item is-disabled" data-fs-empty hidden>Nenhuma cidade encontrada.</li>
|
|
115
|
-
</ul>
|
|
116
|
-
<script>
|
|
117
|
-
document.getElementById("cidade").addEventListener("fs:combobox:changed", (e) => {
|
|
118
|
-
console.log("cidade escolhida:", e.detail.value);
|
|
119
|
-
});
|
|
120
|
-
</script>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Mockup: [laboratório do componente](../../mockup/forms.html#combobox).
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# Command Palette
|
|
2
|
-
|
|
3
|
-
Um diálogo de busca/comandos disparado por um botão ou por um atalho de
|
|
4
|
-
teclado global (ex.: `Ctrl+K`/`Cmd+K`) — combina o overlay/focus trap do
|
|
5
|
-
[Modal](modal.md) com o filtro/navegação por teclado do [Combobox](combobox.md).
|
|
6
|
-
Reusa `.fs-dropdown-item`/`.is-active`/`.is-disabled` (mesmas classes do
|
|
7
|
-
[Dropdown](dropdown.md)) para os itens da lista de comandos.
|
|
8
|
-
|
|
9
|
-
## Visão geral
|
|
10
|
-
|
|
11
|
-
```html
|
|
12
|
-
<button type="button" class="fs-btn" data-fs="command-palette" data-fs-target="#paleta" data-fs-shortcut="mod+k">
|
|
13
|
-
Comandos (Ctrl+K)
|
|
14
|
-
</button>
|
|
15
|
-
|
|
16
|
-
<div class="fs-command-palette" id="paleta">
|
|
17
|
-
<div class="fs-command-palette-dialog">
|
|
18
|
-
<input type="text" class="fs-command-palette-input" placeholder="Digite um comando…">
|
|
19
|
-
<ul class="fs-command-palette-list">
|
|
20
|
-
<li class="fs-dropdown-item" data-value="new-file">Novo arquivo</li>
|
|
21
|
-
<li class="fs-dropdown-item" data-value="open-settings">Abrir configurações</li>
|
|
22
|
-
<li class="fs-dropdown-item is-disabled" data-fs-empty hidden>Nenhum comando encontrado.</li>
|
|
23
|
-
</ul>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Auto-init em `data-fs="command-palette"` **no botão gatilho**, com
|
|
29
|
-
`data-fs-target` apontando pro painel (convenção idêntica ao Modal). O
|
|
30
|
-
painel não precisa estar pré-posicionado — é um overlay de tela cheia,
|
|
31
|
-
como o Modal. `data-fs-shortcut="mod+k"` é opcional: quando presente,
|
|
32
|
-
registra um atalho de teclado global (`mod` = Ctrl no Windows/Linux, Cmd
|
|
33
|
-
no Mac) que abre/fecha o painel de qualquer lugar da página, sem precisar
|
|
34
|
-
clicar no botão.
|
|
35
|
-
|
|
36
|
-
## Anatomia
|
|
37
|
-
|
|
38
|
-
`.fs-command-palette[role="dialog"]` > `.fs-command-palette-dialog` >
|
|
39
|
-
`input.fs-command-palette-input[role="combobox"]` +
|
|
40
|
-
`ul.fs-command-palette-list[role="listbox"]` > um ou mais
|
|
41
|
-
`li.fs-dropdown-item[role="option"]`.
|
|
42
|
-
|
|
43
|
-
## Variações
|
|
44
|
-
|
|
45
|
-
- `data-value` em cada `.fs-dropdown-item` define o valor "de verdade"
|
|
46
|
-
(`event.detail.value` no evento de seleção); sem ele, o valor é o texto
|
|
47
|
-
visível do item.
|
|
48
|
-
- Item desabilitado: `.fs-dropdown-item.is-disabled` — ignorado por
|
|
49
|
-
teclado, mouse e pelo filtro.
|
|
50
|
-
- Item de "sem resultados": `.fs-dropdown-item.is-disabled[data-fs-empty]`,
|
|
51
|
-
`hidden` por padrão — visibilidade alternada automaticamente pelo JS.
|
|
52
|
-
- `.fs-dropdown-header` agrupa comandos por seção, igual ao Dropdown.
|
|
53
|
-
- `data-fs-shortcut="mod+k"` (ou `options.shortcut` no construtor): aceita
|
|
54
|
-
combinações com `mod`/`shift`/`alt` + uma tecla, ex. `"mod+shift+p"`.
|
|
55
|
-
|
|
56
|
-
## Estados
|
|
57
|
-
|
|
58
|
-
- Ao abrir, o input é limpo e a lista completa (sem filtro) é exibida.
|
|
59
|
-
- Digitar filtra os itens por substring (case-insensitive) — os que não
|
|
60
|
-
correspondem recebem o atributo `hidden`.
|
|
61
|
-
- Primeiro item selecionável sempre começa destacado (`.is-active`),
|
|
62
|
-
pronto pra `Enter` imediato.
|
|
63
|
-
- Selecionar um item fecha o painel e devolve o foco ao gatilho.
|
|
64
|
-
|
|
65
|
-
## A11y
|
|
66
|
-
|
|
67
|
-
`role="dialog"` + `aria-modal="true"` no painel, `role="combobox"` +
|
|
68
|
-
`aria-autocomplete="list"` + `aria-controls`/`aria-expanded` no input,
|
|
69
|
-
`role="listbox"` na lista, `role="option"` + `aria-selected` em cada item.
|
|
70
|
-
Foco preso dentro do diálogo (`packages/fokus-js/js/core/focus.js`, mesmo mecanismo do
|
|
71
|
-
Modal) enquanto aberto; scroll da página travado
|
|
72
|
-
(`packages/fokus-js/js/core/overlay.js#lockScroll`). O foco **nunca sai do input** — a opção
|
|
73
|
-
destacada é comunicada via `aria-activedescendant`, como no Combobox.
|
|
74
|
-
|
|
75
|
-
Teclado (com foco no input, painel aberto):
|
|
76
|
-
- `ArrowDown`/`ArrowUp`: move o destaque entre os comandos visíveis, com
|
|
77
|
-
wrap.
|
|
78
|
-
- `Enter`: executa o comando destacado — dispara `fs:command-palette:selected`
|
|
79
|
-
e fecha.
|
|
80
|
-
- `Escape`: fecha o painel sem selecionar nada.
|
|
81
|
-
- `Tab`/`Shift+Tab`: preso dentro do diálogo (focus trap).
|
|
82
|
-
|
|
83
|
-
## API JS
|
|
84
|
-
|
|
85
|
-
Auto-init via `data-fs="command-palette"` no botão gatilho, com
|
|
86
|
-
`data-fs-target` apontando pro painel. `CommandPalette.getInstance(triggerEl)`.
|
|
87
|
-
|
|
88
|
-
| Método | Descrição |
|
|
89
|
-
|---|---|
|
|
90
|
-
| `show()` | Abre o painel, limpa o filtro e foca o input. |
|
|
91
|
-
| `hide()` | Fecha o painel, libera o scroll, devolve o foco ao gatilho. |
|
|
92
|
-
| `toggle()` | Alterna. |
|
|
93
|
-
| `dispose()` | Fecha se aberto, remove listeners (incluindo o atalho global, se houver), desregistra a instância. |
|
|
94
|
-
|
|
95
|
-
| Evento (no gatilho) | Cancelável | Quando |
|
|
96
|
-
|---|---|---|
|
|
97
|
-
| `fs:command-palette:selected` | Não | Ao selecionar um comando (clique ou `Enter`), com `event.detail.value`/`event.detail.label`. |
|
|
98
|
-
| `fs:command-palette:shown` | Não | Depois de abrir o painel. |
|
|
99
|
-
| `fs:command-palette:hidden` | Não | Depois de fechar. |
|
|
100
|
-
|
|
101
|
-
## Tokens
|
|
102
|
-
|
|
103
|
-
Os mesmos do [Modal](modal.md) (backdrop, `--fs-radius-md`,
|
|
104
|
-
`--fs-shadow-lg`) e do [Dropdown](dropdown.md) para os itens — sem tokens
|
|
105
|
-
próprios de cor.
|
|
106
|
-
|
|
107
|
-
## Exemplo
|
|
108
|
-
|
|
109
|
-
```html
|
|
110
|
-
<button type="button" class="fs-btn" id="abrir-paleta" data-fs="command-palette" data-fs-target="#paleta-exemplo" data-fs-shortcut="mod+k">
|
|
111
|
-
Comandos (Ctrl+K)
|
|
112
|
-
</button>
|
|
113
|
-
|
|
114
|
-
<div class="fs-command-palette" id="paleta-exemplo">
|
|
115
|
-
<div class="fs-command-palette-dialog">
|
|
116
|
-
<input type="text" class="fs-command-palette-input" placeholder="Digite um comando…">
|
|
117
|
-
<ul class="fs-command-palette-list">
|
|
118
|
-
<li class="fs-dropdown-item" data-value="new-file">Novo arquivo</li>
|
|
119
|
-
<li class="fs-dropdown-item" data-value="open-settings">Abrir configurações</li>
|
|
120
|
-
<li class="fs-dropdown-item is-disabled" data-fs-empty hidden>Nenhum comando encontrado.</li>
|
|
121
|
-
</ul>
|
|
122
|
-
</div>
|
|
123
|
-
</div>
|
|
124
|
-
<script>
|
|
125
|
-
document.getElementById("abrir-paleta").addEventListener("fs:command-palette:selected", (e) => {
|
|
126
|
-
console.log("comando executado:", e.detail.value);
|
|
127
|
-
});
|
|
128
|
-
</script>
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Mockup: [laboratório do componente](../../mockup/overlays-commands.html#command-palette).
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
# DataTable
|
|
2
|
-
|
|
3
|
-
Camada JS opcional sobre uma [Table](table.md) comum: ordenação por coluna,
|
|
4
|
-
filtro por texto e paginação client-side, tudo sobre a marcação `<table>`
|
|
5
|
-
semântica já existente — sem framework de dados, sem dependência externa.
|
|
6
|
-
Reusa `.fs-table` para a tabela, `.fs-pagination`/`.fs-page-link` para o
|
|
7
|
-
paginador (mesmas classes do [Pagination](pagination.md)) e
|
|
8
|
-
`.fs-empty-state` para a lista vazia.
|
|
9
|
-
|
|
10
|
-
## Visão geral
|
|
11
|
-
|
|
12
|
-
```html
|
|
13
|
-
<div class="fs-datatable" data-fs="datatable" data-fs-page-size="5">
|
|
14
|
-
<div class="fs-datatable-toolbar">
|
|
15
|
-
<input type="search" class="fs-form-control" data-fs-datatable-filter placeholder="Filtrar…">
|
|
16
|
-
</div>
|
|
17
|
-
<table class="fs-table fs-table-striped fs-table-hover">
|
|
18
|
-
<thead>
|
|
19
|
-
<tr>
|
|
20
|
-
<th scope="col" data-fs-sort="name">Nome</th>
|
|
21
|
-
<th scope="col" data-fs-sort="age">Idade</th>
|
|
22
|
-
</tr>
|
|
23
|
-
</thead>
|
|
24
|
-
<tbody>
|
|
25
|
-
<tr><td>Ana</td><td>35</td></tr>
|
|
26
|
-
<tr><td>Bruno</td><td>19</td></tr>
|
|
27
|
-
</tbody>
|
|
28
|
-
</table>
|
|
29
|
-
<div class="fs-empty-state" data-fs-datatable-empty hidden>
|
|
30
|
-
<p class="fs-empty-state-title">Nenhum resultado encontrado.</p>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Auto-init em `data-fs="datatable"`, colocado no `<div>` que envolve
|
|
36
|
-
toolbar/tabela/estados — não no `<table>` diretamente. O JS lê as linhas de
|
|
37
|
-
`<tbody>` uma vez na inicialização; se a tabela for repovoada por fora
|
|
38
|
-
(ex.: resposta de uma API), chame `instance.refresh()`.
|
|
39
|
-
|
|
40
|
-
## Anatomia
|
|
41
|
-
|
|
42
|
-
`.fs-datatable[data-fs="datatable"]` > opcionalmente `.fs-datatable-toolbar`
|
|
43
|
-
(com `input[data-fs-datatable-filter]`) + `table.fs-table` (com
|
|
44
|
-
`th[data-fs-sort]` no `<thead>`) + opcionalmente
|
|
45
|
-
`[data-fs-datatable-empty]`/`[data-fs-datatable-loading]`/`[data-fs-datatable-error]`
|
|
46
|
-
+ `nav[data-fs-datatable-pagination]` (criado automaticamente se ausente).
|
|
47
|
-
|
|
48
|
-
## Variações
|
|
49
|
-
|
|
50
|
-
- `data-fs-sort="chave"` num `<th>` o torna ordenável — o JS envolve o
|
|
51
|
-
conteúdo existente num `<button class="fs-datatable-sort-btn">`
|
|
52
|
-
automaticamente (não escreva o botão você mesmo).
|
|
53
|
-
- `data-fs-sort-type="number"`, `"currency"` ou `"date"` no `<th>` ativa
|
|
54
|
-
comparação tipada; sem o atributo, a ordenação usa texto. Combine com
|
|
55
|
-
`data-fs-sort-value` quando o valor exibido for formatado.
|
|
56
|
-
- `data-fs-sort-value` numa `<td>` define o valor usado pra ordenar aquela
|
|
57
|
-
célula, se for diferente do texto exibido (ex.: data ISO por trás de um
|
|
58
|
-
texto formatado, número por trás de um texto com símbolo).
|
|
59
|
-
- `data-fs-page-size="N"` no elemento raiz define quantas linhas por
|
|
60
|
-
página (padrão: 10).
|
|
61
|
-
- `[data-fs-datatable-filter]` — um `<input>` (dentro do elemento raiz)
|
|
62
|
-
que filtra por substring em qualquer célula da linha, case-insensitive.
|
|
63
|
-
- `[data-fs-datatable-empty]` — bloco (tipicamente `.fs-empty-state`)
|
|
64
|
-
mostrado no lugar da tabela quando o filtro não encontra nenhuma linha.
|
|
65
|
-
- `[data-fs-datatable-loading]` / `[data-fs-datatable-error]` — blocos
|
|
66
|
-
mostrados via `setLoading()`/`setError()` (ver API JS); nenhum dos dois é
|
|
67
|
-
obrigatório.
|
|
68
|
-
- `[data-fs-datatable-pagination]` — se você quiser controlar onde o
|
|
69
|
-
paginador aparece, forneça o elemento; senão o JS cria um `<nav>` e
|
|
70
|
-
anexa ao final do elemento raiz.
|
|
71
|
-
|
|
72
|
-
## Estados
|
|
73
|
-
|
|
74
|
-
- **Vazio**: filtro sem correspondências — tabela ocultada,
|
|
75
|
-
`[data-fs-datatable-empty]` exibido (se fornecido; sem ele, a tabela só
|
|
76
|
-
fica com zero linhas visíveis).
|
|
77
|
-
- **Carregando**: acionado por `instance.setLoading(true)` — tabela e
|
|
78
|
-
paginador ocultados, `[data-fs-datatable-loading]` exibido (tipicamente
|
|
79
|
-
linhas `.fs-skeleton-text`).
|
|
80
|
-
- **Erro**: acionado por `instance.setError("mensagem")` — tabela e
|
|
81
|
-
paginador ocultados, `[data-fs-datatable-error]` exibido, com o texto
|
|
82
|
-
escrito em `[data-fs-datatable-error-message]` dentro dele (se existir).
|
|
83
|
-
- Paginação: o `<nav>` só é exibido quando há mais de uma página.
|
|
84
|
-
|
|
85
|
-
## A11y
|
|
86
|
-
|
|
87
|
-
`aria-sort` (`"none"`/`"ascending"`/`"descending"`) em cada `<th>`
|
|
88
|
-
ordenável, atualizado a cada clique — o botão interno recebe o clique/foco
|
|
89
|
-
(padrão recomendado pelo
|
|
90
|
-
[WAI-ARIA Table Sort](https://www.w3.org/WAI/ARIA/apg/patterns/table/examples/sortable-table/),
|
|
91
|
-
`aria-sort` no `th`, ativação num elemento focável dentro dele). Células de
|
|
92
|
-
dados usam roving `tabindex` (uma célula visível por vez com `tabindex="0"`,
|
|
93
|
-
as demais `-1"`) pra navegação em grade sem tornar cada célula uma parada
|
|
94
|
-
extra no Tab da página.
|
|
95
|
-
|
|
96
|
-
Teclado (com foco numa célula do corpo da tabela):
|
|
97
|
-
- `ArrowRight`/`ArrowLeft`/`ArrowUp`/`ArrowDown`: move o foco pra célula
|
|
98
|
-
vizinha (não cruza limites da página visível).
|
|
99
|
-
- `Home`/`End`: primeira/última célula da linha atual.
|
|
100
|
-
- `Ctrl+Home`/`Ctrl+End`: primeira célula da tabela / última célula da
|
|
101
|
-
última linha visível.
|
|
102
|
-
|
|
103
|
-
Teclado (com foco no botão de ordenação do cabeçalho): `Enter`/`Espaço`
|
|
104
|
-
ativam nativamente (é um `<button>`), ciclando
|
|
105
|
-
ascendente → descendente → nenhuma.
|
|
106
|
-
|
|
107
|
-
## API JS
|
|
108
|
-
|
|
109
|
-
Auto-init via `data-fs="datatable"` no elemento raiz.
|
|
110
|
-
`DataTable.getInstance(rootEl)`.
|
|
111
|
-
|
|
112
|
-
| Método | Descrição |
|
|
113
|
-
|---|---|
|
|
114
|
-
| `sort(key, direction)` | Ordena pela coluna com `data-fs-sort="key"`. `direction`: `"asc"` \| `"desc"` \| `"none"`. |
|
|
115
|
-
| `filter(query)` | Filtra por substring (aplica também no input, se houver um). |
|
|
116
|
-
| `goToPage(page)` | Navega pra página (1-indexado, com clamp nos limites). |
|
|
117
|
-
| `refresh()` | Relê as linhas de `<tbody>` do zero — use após repovoar a tabela por fora. |
|
|
118
|
-
| `setLoading(bool)` | Alterna o estado de carregamento. |
|
|
119
|
-
| `setError(mensagem \| null)` | Mostra (com mensagem) ou limpa (`null`) o estado de erro. |
|
|
120
|
-
| `dispose()` | Remove listeners e desregistra a instância. |
|
|
121
|
-
|
|
122
|
-
| Propriedade | Descrição |
|
|
123
|
-
|---|---|
|
|
124
|
-
| `sortKey` / `sortDirection` | Coluna e direção de ordenação atuais (`sortDirection`: `"asc"` \| `"desc"` \| `"none"`). |
|
|
125
|
-
| `filterQuery` | Texto de filtro atual. |
|
|
126
|
-
| `currentPage` / `pageCount` | Página atual e total de páginas (considerando o filtro). |
|
|
127
|
-
| `rowCount` | Quantidade de linhas que correspondem ao filtro atual. |
|
|
128
|
-
| `pageSize` | Linhas por página (lido de `data-fs-page-size`, ou 10). |
|
|
129
|
-
|
|
130
|
-
| Evento (no elemento raiz) | Cancelável | Quando |
|
|
131
|
-
|---|---|---|
|
|
132
|
-
| `fs:datatable:sorted` | Não | Após ordenar, com `detail.key`/`detail.direction`. |
|
|
133
|
-
| `fs:datatable:filtered` | Não | Após filtrar, com `detail.query`/`detail.matched`. |
|
|
134
|
-
| `fs:datatable:paged` | Não | Após trocar de página, com `detail.page`/`detail.pageCount`. |
|
|
135
|
-
|
|
136
|
-
## Tokens
|
|
137
|
-
|
|
138
|
-
Reusa os tokens de [Table](table.md) e [Pagination](pagination.md) — sem
|
|
139
|
-
tokens próprios de cor. `.fs-datatable-sort-btn` usa
|
|
140
|
-
`var(--fs-color-muted)`/`var(--fs-color-text)` pro indicador de direção
|
|
141
|
-
(↕/↑/↓).
|
|
142
|
-
|
|
143
|
-
## Exemplo
|
|
144
|
-
|
|
145
|
-
```html
|
|
146
|
-
<div class="fs-datatable" data-fs="datatable" data-fs-page-size="3">
|
|
147
|
-
<div class="fs-datatable-toolbar">
|
|
148
|
-
<input type="search" class="fs-form-control" data-fs-datatable-filter placeholder="Filtrar por nome ou status…">
|
|
149
|
-
</div>
|
|
150
|
-
<table class="fs-table fs-table-striped">
|
|
151
|
-
<thead>
|
|
152
|
-
<tr>
|
|
153
|
-
<th scope="col" data-fs-sort="name">Nome</th>
|
|
154
|
-
<th scope="col" data-fs-sort="status">Status</th>
|
|
155
|
-
</tr>
|
|
156
|
-
</thead>
|
|
157
|
-
<tbody>
|
|
158
|
-
<tr><td>Ana</td><td>Ativo</td></tr>
|
|
159
|
-
<tr><td>Bruno</td><td>Inativo</td></tr>
|
|
160
|
-
</tbody>
|
|
161
|
-
</table>
|
|
162
|
-
<div class="fs-empty-state" data-fs-datatable-empty hidden>
|
|
163
|
-
<p class="fs-empty-state-title">Nenhum resultado encontrado.</p>
|
|
164
|
-
</div>
|
|
165
|
-
</div>
|
|
166
|
-
<script>
|
|
167
|
-
document.querySelector(".fs-datatable").addEventListener("fs:datatable:sorted", (e) => {
|
|
168
|
-
console.log("ordenado por", e.detail.key, e.detail.direction);
|
|
169
|
-
});
|
|
170
|
-
</script>
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Mockup: [laboratório do componente](../../mockup/content-data.html#datatable).
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# Datepicker / Timepicker
|
|
2
|
-
|
|
3
|
-
Duas abordagens complementares: **CSS-only**
|
|
4
|
-
(`<input type="date">`/`<input type="time">` nativo, só estilizado) para
|
|
5
|
-
quem quer o seletor do próprio sistema operacional/navegador, e um
|
|
6
|
-
**Datepicker JS customizado** (`.fs-datepicker`) para quando o design
|
|
7
|
-
precisa de controle total sobre a aparência do calendário — os nativos não
|
|
8
|
-
podem ser restilizados além de cor/borda/fonte do campo (o popup em si é
|
|
9
|
-
chrome do navegador, fora do alcance de CSS).
|
|
10
|
-
|
|
11
|
-
## Visão geral
|
|
12
|
-
|
|
13
|
-
### CSS-only (`<input type="date">`/`"time"`)
|
|
14
|
-
|
|
15
|
-
```html
|
|
16
|
-
<input type="date" class="fs-form-control">
|
|
17
|
-
<input type="time" class="fs-form-control">
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Herdam `.fs-form-control` normalmente (borda, fundo, foco). A única
|
|
21
|
-
correção específica do framework é o indicador nativo (ícone de
|
|
22
|
-
calendário/relógio) no tema escuro — por padrão o navegador desenha um
|
|
23
|
-
ícone escuro fixo, invisível sobre `--fs-color-surface` escuro; o FokusStyles
|
|
24
|
-
aplica `filter: invert(1)` nele sob `[data-theme="dark"]`.
|
|
25
|
-
|
|
26
|
-
### Datepicker customizado (JS)
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<div class="fs-datepicker">
|
|
30
|
-
<input type="text" class="fs-form-control" data-fs="datepicker" data-fs-target="#dp-entrega" placeholder="dd/mm/aaaa">
|
|
31
|
-
</div>
|
|
32
|
-
<div id="dp-entrega"></div>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
O elemento apontado por `data-fs-target` é o painel do calendário — fica
|
|
36
|
-
vazio no HTML, o JS constrói o cabeçalho (mês/ano + navegação) e a grade de
|
|
37
|
-
dias dinamicamente a cada abertura/troca de mês. Se o `<input>` já tiver um
|
|
38
|
-
valor em `dd/mm/aaaa` (formato de exibição, pt-BR), o Datepicker abre no mês
|
|
39
|
-
correspondente com o dia já marcado como selecionado.
|
|
40
|
-
|
|
41
|
-
## Anatomia
|
|
42
|
-
|
|
43
|
-
`.fs-datepicker` (wrapper posicionador) > `input[role="combobox"]` +
|
|
44
|
-
`.fs-datepicker-panel` (reanexado a `document.body`, posicionado via
|
|
45
|
-
`packages/fokus-js/js/core/positioning.js`) > `.fs-datepicker-header` (`.fs-datepicker-nav` ×2 +
|
|
46
|
-
`.fs-datepicker-title`) + `.fs-datepicker-grid[role="grid"]` (uma
|
|
47
|
-
`.fs-datepicker-week[role="row"]` por semana, cada uma com 7
|
|
48
|
-
`.fs-datepicker-day[role="gridcell"]`).
|
|
49
|
-
|
|
50
|
-
## Variações
|
|
51
|
-
|
|
52
|
-
- Dias fora do mês corrente (preenchendo a primeira/última semana):
|
|
53
|
-
`.fs-datepicker-day.is-outside`.
|
|
54
|
-
- Sem suporte a `min`/`max` (intervalo de datas permitido) nesta versão —
|
|
55
|
-
todo dia é selecionável.
|
|
56
|
-
|
|
57
|
-
## Estados
|
|
58
|
-
|
|
59
|
-
- `.is-today`: contorno sutil no dia atual.
|
|
60
|
-
- `.is-selected`: preenchimento sólido na cor de ação primária (mesmo
|
|
61
|
-
`color-contrast()` dos demais preenchimentos sólidos do framework).
|
|
62
|
-
- `:disabled`: dia desabilitado (não gerado automaticamente hoje — para uso
|
|
63
|
-
manual caso você desabilite dias específicos via JS próprio).
|
|
64
|
-
|
|
65
|
-
## A11y
|
|
66
|
-
|
|
67
|
-
Segue o padrão [WAI-ARIA Date Picker Dialog](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/)
|
|
68
|
-
adaptado (sem o modal — o painel é um popup não-modal, mesma filosofia do
|
|
69
|
-
[Combobox](combobox.md)/[Dropdown](dropdown.md)):
|
|
70
|
-
|
|
71
|
-
- `role="combobox"` + `aria-haspopup="grid"` + `aria-expanded` +
|
|
72
|
-
`aria-controls` no input — `aria-expanded` só é permitido em roles como
|
|
73
|
-
`combobox`/`button`, por isso o `role="combobox"` é necessário mesmo o
|
|
74
|
-
input não filtrando nada (diferente do Combobox de verdade).
|
|
75
|
-
- `role="grid"`/`role="row"`/`role="gridcell"` na grade — ao contrário do
|
|
76
|
-
Combobox, os dias **são** focáveis de verdade (roving `tabindex`: só o
|
|
77
|
-
dia selecionado/hoje/primeiro do mês tem `tabindex="0"`).
|
|
78
|
-
- Teclado (com o painel aberto):
|
|
79
|
-
- `ArrowDown`/`ArrowUp` com foco no input: abre o painel (se fechado) e
|
|
80
|
-
move o foco pro dia tabável — sem isso, as setas não teriam efeito
|
|
81
|
-
nenhum vindas do input.
|
|
82
|
-
- `ArrowRight`/`ArrowLeft`: dia seguinte/anterior (cruza mês).
|
|
83
|
-
- `ArrowDown`/`ArrowUp` com foco num dia: mesma semana, ±7 dias.
|
|
84
|
-
- `Home`/`End`: primeiro/último dia da semana atual.
|
|
85
|
-
- `PageDown`/`PageUp`: mês seguinte/anterior. `Shift+PageDown`/
|
|
86
|
-
`Shift+PageUp`: ano seguinte/anterior.
|
|
87
|
-
- `Enter`/`Space`: seleciona o dia com foco.
|
|
88
|
-
- `Escape`: fecha o painel sem alterar o valor do input, devolve o foco
|
|
89
|
-
a ele.
|
|
90
|
-
- Título do mês/ano (`aria-live="polite"`) anuncia a troca ao navegar.
|
|
91
|
-
|
|
92
|
-
## API JS
|
|
93
|
-
|
|
94
|
-
Auto-init via `data-fs="datepicker"` **no `<input>`**, com `data-fs-target`
|
|
95
|
-
apontando pro painel (convenção idêntica ao Dropdown/Combobox).
|
|
96
|
-
`Datepicker.getInstance(inputEl)`.
|
|
97
|
-
|
|
98
|
-
| Método | Descrição |
|
|
99
|
-
|---|---|
|
|
100
|
-
| `show()` | Abre o painel, renderiza o mês do valor atual (ou o mês corrente). |
|
|
101
|
-
| `hide()` | Fecha o painel. |
|
|
102
|
-
| `toggle()` | Alterna. |
|
|
103
|
-
| `dispose()` | Fecha se aberto, remove listeners, desregistra a instância. |
|
|
104
|
-
|
|
105
|
-
| Propriedade | Descrição |
|
|
106
|
-
|---|---|
|
|
107
|
-
| `value` | Data selecionada em ISO (`aaaa-mm-dd`), `null` até a primeira seleção. |
|
|
108
|
-
|
|
109
|
-
| Evento (no input) | Cancelável | Quando |
|
|
110
|
-
|---|---|---|
|
|
111
|
-
| `change` (nativo) | Não | Ao selecionar um dia (clique ou `Enter`/`Space`). |
|
|
112
|
-
| `fs:datepicker:changed` | Não | Mesmo momento, com `event.detail.value` (ISO) e `event.detail.date` (`Date`). |
|
|
113
|
-
| `fs:datepicker:shown` | Não | Depois de abrir o painel. |
|
|
114
|
-
| `fs:datepicker:hidden` | Não | Depois de fechar. |
|
|
115
|
-
|
|
116
|
-
## Tokens
|
|
117
|
-
|
|
118
|
-
Reusa `--fs-color-border`/`-surface`/`-text`/`-muted`/`-primary`,
|
|
119
|
-
`--fs-radius-sm`/`-md` e `--fs-shadow-md` — sem tokens próprios.
|
|
120
|
-
|
|
121
|
-
## Exemplo
|
|
122
|
-
|
|
123
|
-
```html
|
|
124
|
-
<div class="fs-datepicker">
|
|
125
|
-
<input type="text" class="fs-form-control" id="entrega" data-fs="datepicker" data-fs-target="#entrega-painel" placeholder="dd/mm/aaaa">
|
|
126
|
-
</div>
|
|
127
|
-
<div id="entrega-painel"></div>
|
|
128
|
-
<script>
|
|
129
|
-
document.getElementById("entrega").addEventListener("fs:datepicker:changed", (e) => {
|
|
130
|
-
console.log("data escolhida:", e.detail.value); // "2026-07-20"
|
|
131
|
-
});
|
|
132
|
-
</script>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Mockup: [laboratório do componente](../../mockup/forms.html#datepicker) (inclui o
|
|
136
|
-
Datepicker customizado e os `<input type="date">`/`"time"` nativos lado a
|
|
137
|
-
lado).
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Divider
|
|
2
|
-
|
|
3
|
-
Linha divisória, 100% CSS — traço simples ou com rótulo centralizado.
|
|
4
|
-
|
|
5
|
-
## Visão geral
|
|
6
|
-
|
|
7
|
-
```html
|
|
8
|
-
<hr class="fs-divider">
|
|
9
|
-
|
|
10
|
-
<div class="fs-divider"><span class="fs-divider-label">ou</span></div>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Anatomia
|
|
14
|
-
|
|
15
|
-
Duas formas, conforme o elemento:
|
|
16
|
-
|
|
17
|
-
- `<hr class="fs-divider">` — traço simples, uma linha (`<hr>` não aceita
|
|
18
|
-
filhos).
|
|
19
|
-
- `<div class="fs-divider">` com `.fs-divider-label` dentro — texto
|
|
20
|
-
centralizado, flanqueado por duas linhas desenhadas via
|
|
21
|
-
`::before`/`::after` (precisa ser `<div>`, não `<hr>`, por causa do
|
|
22
|
-
filho).
|
|
23
|
-
|
|
24
|
-
## Variações
|
|
25
|
-
|
|
26
|
-
Nenhuma — sem cor, tamanho ou orientação alternativa.
|
|
27
|
-
|
|
28
|
-
## Estados
|
|
29
|
-
|
|
30
|
-
Nenhum — elemento estático.
|
|
31
|
-
|
|
32
|
-
## A11y
|
|
33
|
-
|
|
34
|
-
`<hr>` já tem `role="separator"` implícito. Na variante com `<div>`, se a
|
|
35
|
-
separação for só visual (não estrutural), não precisa de role extra; se
|
|
36
|
-
divide seções de conteúdo distintas, considere `role="separator"`
|
|
37
|
-
explícito.
|
|
38
|
-
|
|
39
|
-
## API JS
|
|
40
|
-
|
|
41
|
-
Nenhuma — 100% CSS.
|
|
42
|
-
|
|
43
|
-
## Tokens
|
|
44
|
-
|
|
45
|
-
`--fs-color-border`, `--fs-color-muted` (texto do label).
|
|
46
|
-
|
|
47
|
-
## Exemplo
|
|
48
|
-
|
|
49
|
-
```html
|
|
50
|
-
<p>Conteúdo acima.</p>
|
|
51
|
-
<hr class="fs-divider">
|
|
52
|
-
<p>Conteúdo abaixo.</p>
|
|
53
|
-
|
|
54
|
-
<div class="fs-divider"><span class="fs-divider-label">ou entre com</span></div>
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Mockup: [laboratório do componente](../../mockup/foundations.html#divider).
|