@fracui/styleguide 0.0.0-stage → 0.1.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/README.md +314 -2
- package/dist/components/accordion.d.ts +19 -0
- package/dist/components/alert-dialog.d.ts +20 -0
- package/dist/components/alert.d.ts +8 -0
- package/dist/components/avatar.d.ts +36 -0
- package/dist/components/badge.d.ts +19 -0
- package/dist/components/breadcrumb.d.ts +35 -0
- package/dist/components/button-switch.d.ts +16 -0
- package/dist/components/button.d.ts +31 -0
- package/dist/components/calendar.d.ts +26 -0
- package/dist/components/card.d.ts +23 -0
- package/dist/components/checkbox.d.ts +16 -0
- package/dist/components/context-menu.d.ts +32 -0
- package/dist/components/data-table.d.ts +28 -0
- package/dist/components/date-picker.d.ts +16 -0
- package/dist/components/dialog.d.ts +36 -0
- package/dist/components/dropdown-menu.d.ts +39 -0
- package/dist/components/empty.d.ts +25 -0
- package/dist/components/fab.d.ts +26 -0
- package/dist/components/form-field.d.ts +35 -0
- package/dist/components/input.d.ts +29 -0
- package/dist/components/label.d.ts +5 -0
- package/dist/components/marker.d.ts +42 -0
- package/dist/components/model-legend.d.ts +48 -0
- package/dist/components/monitoring-status.d.ts +24 -0
- package/dist/components/navbar.d.ts +27 -0
- package/dist/components/pagination.d.ts +39 -0
- package/dist/components/password-input.d.ts +24 -0
- package/dist/components/player.d.ts +27 -0
- package/dist/components/popover.d.ts +21 -0
- package/dist/components/progress.d.ts +10 -0
- package/dist/components/radio-group.d.ts +24 -0
- package/dist/components/scroll-area.d.ts +11 -0
- package/dist/components/search-bar.d.ts +26 -0
- package/dist/components/select.d.ts +27 -0
- package/dist/components/separator.d.ts +12 -0
- package/dist/components/sheet.d.ts +42 -0
- package/dist/components/sidebar.d.ts +52 -0
- package/dist/components/sonner.d.ts +21 -0
- package/dist/components/spinner.d.ts +16 -0
- package/dist/components/switch.d.ts +12 -0
- package/dist/components/table.d.ts +35 -0
- package/dist/components/tabs.d.ts +23 -0
- package/dist/components/tag.d.ts +51 -0
- package/dist/components/textarea.d.ts +11 -0
- package/dist/components/tooltip.d.ts +16 -0
- package/dist/fonts.css +33 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/icons/create-icon.d.ts +21 -0
- package/dist/icons/icons.d.ts +401 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons-DIjjoCNK.js +3646 -0
- package/dist/icons-DIjjoCNK.js.map +1 -0
- package/dist/icons-DOPTdi6L.cjs +2 -0
- package/dist/icons-DOPTdi6L.cjs.map +1 -0
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.js +201 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +69 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +15823 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +6 -0
- package/dist/logos/create-logo.d.ts +27 -0
- package/dist/styles.css +1 -0
- package/dist/system/jsx-runtime-shim.d.ts +39 -0
- package/dist/tailwind-preset.cjs +2 -0
- package/dist/tailwind-preset.cjs.map +1 -0
- package/dist/tailwind-preset.d.ts +3 -0
- package/dist/tailwind-preset.js +318 -0
- package/dist/tailwind-preset.js.map +1 -0
- package/dist/tokens/colors.d.ts +347 -0
- package/dist/tokens/elevation.d.ts +87 -0
- package/dist/tokens/grid.d.ts +170 -0
- package/dist/tokens/index.d.ts +5 -0
- package/dist/tokens/theme.d.ts +129 -0
- package/dist/tokens/typography.d.ts +213 -0
- package/dist/tokens.cjs +2 -0
- package/dist/tokens.cjs.map +1 -0
- package/dist/tokens.js +577 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +135 -4
package/README.md
CHANGED
|
@@ -1,3 +1,315 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @fracui/styleguide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Biblioteca de componentes da Fractal: componentes React sobre Radix UI,
|
|
4
|
+
tokens de design e um preset do Tailwind, para uso compartilhado entre os
|
|
5
|
+
aplicativos do SIGA (`siga-app`, `dams-app`, `siga-app-resop`) em uma
|
|
6
|
+
arquitetura single-spa.
|
|
7
|
+
|
|
8
|
+
Os tokens e os componentes vêm do arquivo do Figma **Design System —
|
|
9
|
+
2026**. Onde algo foi derivado em vez de extraído, isso está anotado no
|
|
10
|
+
comentário do próprio componente ou token.
|
|
11
|
+
|
|
12
|
+
## Instalação
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
yarn add @fracui/styleguide
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Este repositório usa **yarn** (yarn.lock é o único lockfile versionado).
|
|
19
|
+
Instalar com outro gerenciador gera uma árvore de dependências diferente
|
|
20
|
+
da que o CI valida.
|
|
21
|
+
|
|
22
|
+
Dependências de par (o app precisa tê-las):
|
|
23
|
+
|
|
24
|
+
| Pacote | Versão |
|
|
25
|
+
| ------------- | --------------------- |
|
|
26
|
+
| `react` | `^18.0.0 \|\| ^19.0.0` |
|
|
27
|
+
| `react-dom` | `^18.0.0 \|\| ^19.0.0` |
|
|
28
|
+
| `tailwindcss` | `^3.4.0` |
|
|
29
|
+
|
|
30
|
+
## Configuração
|
|
31
|
+
|
|
32
|
+
São três passos, e pular qualquer um deles quebra de um jeito específico
|
|
33
|
+
— a tabela no fim desta seção diz qual.
|
|
34
|
+
|
|
35
|
+
**1. Estenda o preset** no `tailwind.config.ts` do app:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import fracuiPreset from "@fracui/styleguide/tailwind-preset";
|
|
39
|
+
|
|
40
|
+
export default {
|
|
41
|
+
presets: [fracuiPreset],
|
|
42
|
+
content: [
|
|
43
|
+
"./index.html",
|
|
44
|
+
"./src/**/*.{ts,tsx}",
|
|
45
|
+
// Sem esta linha, o Tailwind remove as classes usadas DENTRO dos
|
|
46
|
+
// componentes da biblioteca, porque não as vê no seu código.
|
|
47
|
+
"./node_modules/@fracui/styleguide/dist/**/*.js",
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**2. Importe o CSS** uma única vez, na raiz do app:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import "@fracui/styleguide/styles.css";
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Ele declara as variáveis CSS que o preset referencia. O preset sozinho
|
|
59
|
+
gera classes como `bg-primary`, mas elas apontam para `hsl(var(--primary))`
|
|
60
|
+
— sem o CSS, a variável não existe.
|
|
61
|
+
|
|
62
|
+
**3. Importe as fontes** (opcional):
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import "@fracui/styleguide/fonts.css";
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Roboto e Rubik auto-hospedadas, subset latino. É import separado porque
|
|
69
|
+
parte dos apps já serve as fontes pelo shell do single-spa e receberia uma
|
|
70
|
+
segunda cópia.
|
|
71
|
+
|
|
72
|
+
| Passo esquecido | Sintoma |
|
|
73
|
+
| --------------- | ---------------------------------------------------- |
|
|
74
|
+
| Preset | `bg-primary` e afins não existem |
|
|
75
|
+
| `content` | Componentes renderizam sem estilo nenhum |
|
|
76
|
+
| `styles.css` | Componentes renderizam sem cor (variáveis indefinidas) |
|
|
77
|
+
| `fonts.css` | Tipografia cai para a fonte do sistema |
|
|
78
|
+
|
|
79
|
+
## Uso
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
import { Button, Input, Label, WaterDropIcon } from "@fracui/styleguide";
|
|
83
|
+
|
|
84
|
+
export function Filtro() {
|
|
85
|
+
return (
|
|
86
|
+
<form className="flex items-end gap-3">
|
|
87
|
+
<div className="space-y-1.5">
|
|
88
|
+
<Label htmlFor="estacao">Estação</Label>
|
|
89
|
+
<Input id="estacao" placeholder="Buscar por nome" />
|
|
90
|
+
</div>
|
|
91
|
+
<Button>
|
|
92
|
+
<WaterDropIcon />
|
|
93
|
+
Filtrar
|
|
94
|
+
</Button>
|
|
95
|
+
</form>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Pontos de entrada
|
|
101
|
+
|
|
102
|
+
| Import | Conteúdo |
|
|
103
|
+
| ----------------------------------- | ---------------------------------------- |
|
|
104
|
+
| `@fracui/styleguide` | Componentes, ícones e utilitários |
|
|
105
|
+
| `@fracui/styleguide/icons` | Só os 195 ícones |
|
|
106
|
+
| `@fracui/styleguide/tokens` | Tokens em TypeScript (cores, tipografia, elevação, malha) |
|
|
107
|
+
| `@fracui/styleguide/tailwind-preset` | Preset do Tailwind |
|
|
108
|
+
| `@fracui/styleguide/styles.css` | Variáveis CSS dos temas |
|
|
109
|
+
| `@fracui/styleguide/fonts.css` | Roboto e Rubik auto-hospedadas |
|
|
110
|
+
|
|
111
|
+
## Tokens
|
|
112
|
+
|
|
113
|
+
Use sempre o token semântico, não a escala primitiva: é ele que troca
|
|
114
|
+
entre os temas. `bg-blue-dark` fica azul-escuro no tema escuro também;
|
|
115
|
+
`bg-primary` se adapta.
|
|
116
|
+
|
|
117
|
+
**Semânticos** — `background`, `foreground`, `card`, `popover`, `primary`,
|
|
118
|
+
`secondary`, `muted`, `accent`, `destructive`, `border`, `input`, `ring`,
|
|
119
|
+
`disabled`. Cada um com o par `-foreground` onde faz sentido.
|
|
120
|
+
|
|
121
|
+
**Marca** — `brand`, `brand-medium`, `brand-light` (azul institucional) e
|
|
122
|
+
`brand-secondary` e variações (verde). Separados de `primary` porque o
|
|
123
|
+
`primary` do contrato shadcn é o azul *interativo* (`#3D76CC`), enquanto o
|
|
124
|
+
institucional é o `#142C50`.
|
|
125
|
+
|
|
126
|
+
**Feedback** — cada estado tem um trio coordenado, como no Figma:
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<div className="bg-error-bg text-error-text">
|
|
130
|
+
<WarningIcon className="text-error-icon" />
|
|
131
|
+
Falha ao sincronizar
|
|
132
|
+
</div>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Disponíveis para `error`, `alert`, `warning`, `success` e `info`.
|
|
136
|
+
|
|
137
|
+
**Escalas primitivas** — `blue-1..5`, `blue-{light,medium,dark}`, o mesmo
|
|
138
|
+
para `green`, mais `gray-*`, `subtitle-*` (legendas de mapa) e `alpha-*`
|
|
139
|
+
(pretos transparentes). Não mudam com o tema.
|
|
140
|
+
|
|
141
|
+
**Tipografia** — `text-h1` a `text-h5`, `text-subtitle-1/2`,
|
|
142
|
+
`text-body-1/2`, `text-body-allcaps`, `text-button`, `text-caption`,
|
|
143
|
+
`text-link`. Cada uma já traz tamanho, entrelinha e tracking do Figma.
|
|
144
|
+
|
|
145
|
+
**Elevação** — `shadow-{down,up,left,right}-{1,4,8}` e as variantes azuis
|
|
146
|
+
`shadow-blue-*`. A direção importa: um painel que entra pela direita
|
|
147
|
+
projeta sombra para a esquerda.
|
|
148
|
+
|
|
149
|
+
**Raios** — `rounded-xs` (4px), `sm`/`md`/`lg` derivados de `--radius`,
|
|
150
|
+
`rounded-xl` (12px), `2xl` (16px), `3xl` (30px), `4xl` (40px) e
|
|
151
|
+
`rounded-pill`.
|
|
152
|
+
|
|
153
|
+
## Tema escuro
|
|
154
|
+
|
|
155
|
+
Aplique a classe `dark` em um ancestral — normalmente `<html>`:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
document.documentElement.classList.toggle("dark", escuro);
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Todos os tokens semânticos trocam sozinhos. Os valores de feedback no tema
|
|
162
|
+
escuro são **derivados**, não especificados pelo design: trocam os papéis
|
|
163
|
+
de texto e fundo mantendo o ícone. Ver `darkBrand` em
|
|
164
|
+
`src/tokens/theme.ts`.
|
|
165
|
+
|
|
166
|
+
## Ícones
|
|
167
|
+
|
|
168
|
+
195 ícones exportados do Figma. Herdam a cor do texto e aceitam `size` em
|
|
169
|
+
pixels:
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
<WaterDropIcon size={20} className="text-info-icon" />
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Sem `title`, o ícone é decorativo e fica `aria-hidden` — o correto quando
|
|
176
|
+
há texto ao lado. Com `title`, vira `role="img"` e é anunciado por leitores
|
|
177
|
+
de tela:
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
<WaterDropIcon title="Precipitação acumulada" />
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Para reexportar depois de atualizar os SVGs em `src/icons/svg`:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
yarn icons:build
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Desenvolvimento
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
yarn storybook # catálogo em localhost:6006
|
|
193
|
+
yarn dev # playground em localhost:5173
|
|
194
|
+
yarn build # gera dist/
|
|
195
|
+
yarn typecheck
|
|
196
|
+
yarn lint
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Regressão visual
|
|
200
|
+
|
|
201
|
+
Cada story vira duas imagens de referência — tema claro e escuro — em
|
|
202
|
+
`__snapshots__/`. Elas são versionadas: são a fonte da verdade da
|
|
203
|
+
comparação, e o CI falha se qualquer componente mudar de aparência sem
|
|
204
|
+
que a referência tenha sido atualizada de propósito.
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
yarn test:visual # compara com as referências
|
|
208
|
+
yarn test:visual:update # aceita as mudanças e regrava
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Os testes rodam dentro do container oficial do Playwright, a mesma imagem
|
|
212
|
+
usada no CI. **Isso não é conveniência:** a renderização de fonte difere
|
|
213
|
+
entre macOS e Linux, e uma referência gerada direto na máquina falharia no
|
|
214
|
+
CI por antialiasing, não por regressão real. Por isso não existe caminho
|
|
215
|
+
que rode fora do Docker.
|
|
216
|
+
|
|
217
|
+
Quando um teste falha, as imagens de diferença ficam em
|
|
218
|
+
`__snapshots__/<tema>/__diff_output__/` (e viram artefato do workflow no
|
|
219
|
+
CI). Elas não são versionadas.
|
|
220
|
+
|
|
221
|
+
Ao adicionar um componente, basta criar a story: a cobertura visual vem
|
|
222
|
+
junto, sem configuração adicional.
|
|
223
|
+
|
|
224
|
+
A mesma suíte roda o **axe** em cada story, verificando rótulos, papéis e
|
|
225
|
+
nomes acessíveis. As regras de contraste ficam desligadas ali porque têm
|
|
226
|
+
verificação própria (ver abaixo). Quando uma regra precisa ser desligada
|
|
227
|
+
para um caso específico, declare junto da story, com o motivo:
|
|
228
|
+
|
|
229
|
+
```ts
|
|
230
|
+
export const MinhaStory: Story = {
|
|
231
|
+
parameters: { a11y: { disabledRules: ["aria-hidden-focus"] } },
|
|
232
|
+
// ...
|
|
233
|
+
};
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Duas regras para as stories não ficarem instáveis: nada de recurso
|
|
237
|
+
externo (imagem por URL faz o snapshot depender da rede) e nada de valor
|
|
238
|
+
que mude entre execuções (data de hoje, número aleatório).
|
|
239
|
+
|
|
240
|
+
## Contraste
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
yarn test:contrast
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Compara todos os pares de token que os componentes usam com o WCAG 2.1 AA
|
|
247
|
+
— 4.5:1 para texto, 3:1 para limites de componentes de interface.
|
|
248
|
+
|
|
249
|
+
Existe porque contraste é a única propriedade visual que a regressão
|
|
250
|
+
visual **não** pega: um snapshot só acusa mudança, e um par ilegível que
|
|
251
|
+
nasceu ilegível continua passando para sempre.
|
|
252
|
+
|
|
253
|
+
As falhas conhecidas estão em `EXCECOES`, dentro de
|
|
254
|
+
`scripts/check-contrast.mjs`, cada uma com o motivo. O teste falha nos dois
|
|
255
|
+
sentidos: quando aparece uma falha nova, e quando uma exceção deixa de ser
|
|
256
|
+
necessária — assim a lista não vira depósito de dívida esquecida.
|
|
257
|
+
|
|
258
|
+
## API pública
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
yarn test:exports
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Verifica que todo componente em `src/components` chega a `src/index.ts`.
|
|
265
|
+
|
|
266
|
+
Existe porque nada mais pega essa falha: as stories importam de
|
|
267
|
+
`@/components/x`, não do pacote, então um componente pode ficar de fora do
|
|
268
|
+
índice e ainda assim passar por build, tipos, lint, regressão visual e
|
|
269
|
+
axe — funcionando no Storybook e invisível para quem instala a
|
|
270
|
+
biblioteca.
|
|
271
|
+
|
|
272
|
+
## Integração contínua
|
|
273
|
+
|
|
274
|
+
`bitbucket-pipelines.yml` roda em todo pull request e em push na `master`,
|
|
275
|
+
em dois passos paralelos:
|
|
276
|
+
|
|
277
|
+
- **Verificação** — tipos, lint, build, contraste dos tokens e API pública.
|
|
278
|
+
- **Regressão visual** — Storybook compilado e comparado com as 236
|
|
279
|
+
imagens de referência, na imagem oficial do Playwright.
|
|
280
|
+
|
|
281
|
+
A tag da imagem do Playwright é fixa no YAML, porque o Bitbucket não
|
|
282
|
+
aceita imagem dinâmica. O primeiro comando do passo confere a tag contra a
|
|
283
|
+
versão de `playwright-core` no `yarn.lock`: se divergirem, a falha diz o
|
|
284
|
+
que atualizar, em vez de aparecer como diferença de antialiasing nas
|
|
285
|
+
imagens.
|
|
286
|
+
|
|
287
|
+
## Migração
|
|
288
|
+
|
|
289
|
+
São dois documentos, para dois problemas diferentes:
|
|
290
|
+
|
|
291
|
+
- [MIGRATION.md](MIGRATION.md) — para um app que **já consome**
|
|
292
|
+
`@fracui/styleguide` e vai atualizar. Trata da mudança incompatível dos
|
|
293
|
+
tokens: o que muda é a aparência, mais um punhado de exports.
|
|
294
|
+
- [MIGRACAO-SIGA-UTIL.md](MIGRACAO-SIGA-UTIL.md) — para trocar o
|
|
295
|
+
`@fractal-mfe/styleguide` (repositório `siga-util-styleguide`) por esta
|
|
296
|
+
biblioteca. Inventário dos 594 arquivos consumidores, mapa dos 49
|
|
297
|
+
componentes antigos, o problema dos ícones e o que o React 19 exige.
|
|
298
|
+
- [PLANO-IMPLEMENTACAO.md](PLANO-IMPLEMENTACAO.md) — a sequência de
|
|
299
|
+
execução dessa troca: 6 fases por classe de símbolo, ordem entre os
|
|
300
|
+
apps e estimativa.
|
|
301
|
+
|
|
302
|
+
## Limitações conhecidas
|
|
303
|
+
|
|
304
|
+
- **Logos e cursores** não estão na biblioteca: o export dos 16 logos de
|
|
305
|
+
produto e dos 4 cursores esbarrou no rate limit da API do Figma.
|
|
306
|
+
- **`empty` e `scroll-area`** não têm contraparte no Figma; usam a
|
|
307
|
+
tipografia e os tokens do sistema, mas o desenho é do shadcn.
|
|
308
|
+
- **`combo box`** não foi extraído: os nós ficaram além da profundidade
|
|
309
|
+
que a API do Figma aceitou antes do rate limit. É o único componente do
|
|
310
|
+
`siga-util-styleguide` (`input-autocomplete`) sem substituto aqui — ver
|
|
311
|
+
[MIGRACAO-SIGA-UTIL.md](MIGRACAO-SIGA-UTIL.md).
|
|
312
|
+
- **Limites de componentes** não atingem os 3:1 do WCAG 1.4.11 em nenhum
|
|
313
|
+
dos dois temas — a paleta do Figma não tem um tom intermediário que
|
|
314
|
+
alcance. Pendente de decisão do design; ver as exceções em
|
|
315
|
+
`scripts/check-contrast.mjs`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
|
3
|
+
/**
|
|
4
|
+
* Acordeão, conforme o conjunto de acordeões do Figma
|
|
5
|
+
* "Design System - 2026" (página "↳ Acordeões").
|
|
6
|
+
*
|
|
7
|
+
* O gatilho tem 56px de altura, 16px de padding, raio de 8px e 16px de
|
|
8
|
+
* gap até a seta. A borda de 2px é transparente em repouso e aparece nos
|
|
9
|
+
* estados — `blue.1` no hover e `blue.2` quando aberto — pelo mesmo
|
|
10
|
+
* motivo dos campos: se ela só existisse no hover, a linha saltaria.
|
|
11
|
+
*
|
|
12
|
+
* O conjunto está nomeado como `Component 1` no Figma, um dos 15 sem nome
|
|
13
|
+
* próprio no arquivo.
|
|
14
|
+
*/
|
|
15
|
+
declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
|
|
16
|
+
declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
+
declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
3
|
+
declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
|
|
4
|
+
declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
|
|
6
|
+
declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
declare const AlertDialogHeader: {
|
|
9
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
declare const AlertDialogFooter: {
|
|
13
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
14
|
+
displayName: string;
|
|
15
|
+
};
|
|
16
|
+
declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
17
|
+
declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
18
|
+
declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
19
|
+
declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
4
|
+
variant?: "default" | "destructive" | "success" | "warning" | "info" | null | undefined;
|
|
5
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
|
|
6
|
+
declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
7
|
+
declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
8
|
+
export { Alert, AlertTitle, AlertDescription };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
|
4
|
+
/**
|
|
5
|
+
* Avatar, conforme os conjuntos `Image avatars`, `Letter avatars` e
|
|
6
|
+
* `Icon avatars` do Figma "Design System - 2026" (página "↳ Avatar").
|
|
7
|
+
*
|
|
8
|
+
* Os três conjuntos compartilham as mesmas três medidas — 24, 40 e 56px —
|
|
9
|
+
* e mudam só o conteúdo, então aqui é um componente com a prop `size` em
|
|
10
|
+
* vez de três componentes.
|
|
11
|
+
*
|
|
12
|
+
* A tipografia das iniciais acompanha o tamanho:
|
|
13
|
+
*
|
|
14
|
+
* | Tamanho | Estilo do Figma |
|
|
15
|
+
* | ------- | ------------------------ |
|
|
16
|
+
* | 24px | `roboto/medium/caption` |
|
|
17
|
+
* | 40px | `roboto/medium/subtitle 1` |
|
|
18
|
+
* | 56px | `roboto/medium/h5` |
|
|
19
|
+
*
|
|
20
|
+
* As cores de fundo vêm da paleta de legendas (`subtitle`/`subtitleLight`
|
|
21
|
+
* em `colors.ts`) — o Figma usa tons diferentes por avatar para
|
|
22
|
+
* diferenciar pessoas, e não uma cor fixa. Passe a cor via `className`.
|
|
23
|
+
*
|
|
24
|
+
* ATENÇÃO: há mais dois conjuntos chamados `Image avatars` no arquivo que
|
|
25
|
+
* não são avatares — são etiquetas de modelo (ECMWF, GFS, CFS). Colisão
|
|
26
|
+
* de nome no Figma; não estão implementados aqui.
|
|
27
|
+
*/
|
|
28
|
+
declare const avatarVariants: (props?: ({
|
|
29
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
30
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
31
|
+
declare const Avatar: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
|
|
32
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
33
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
|
|
34
|
+
declare const AvatarImage: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React.RefAttributes<HTMLImageElement>, "ref"> & React.RefAttributes<HTMLImageElement>>;
|
|
35
|
+
declare const AvatarFallback: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
36
|
+
export { Avatar, AvatarImage, AvatarFallback, avatarVariants };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Etiqueta, conforme o conjunto `Tags` do Figma "Design System - 2026"
|
|
5
|
+
* (página "↳ Tags").
|
|
6
|
+
*
|
|
7
|
+
* O conjunto do Figma tem 44 variantes em quatro eixos (Category, Degree,
|
|
8
|
+
* State, Type). Aqui está coberto o eixo Category no tipo `Filled` e
|
|
9
|
+
* `Outline`; os eixos Degree e State, mais o botão de remover, entram com
|
|
10
|
+
* o componente `Tag` dedicado na próxima fase — o `Badge` existe para o
|
|
11
|
+
* contrato do shadcn e não comporta todos os eixos.
|
|
12
|
+
*/
|
|
13
|
+
declare const badgeVariants: (props?: ({
|
|
14
|
+
variant?: "default" | "outline" | "destructive" | "secondary" | "success" | "warning" | null | undefined;
|
|
15
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
16
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
17
|
+
}
|
|
18
|
+
declare function Badge({ className, variant, ...props }: BadgeProps): React.JSX.Element;
|
|
19
|
+
export { Badge, badgeVariants };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Trilha de navegação, conforme o conjunto `Breadcrumbs` do Figma
|
|
4
|
+
* "Design System - 2026" (página "↳ Breadcrumbs e Paginação").
|
|
5
|
+
*
|
|
6
|
+
* Tipografia `roboto/regular/body 1` com 4px de gap. Os níveis anteriores
|
|
7
|
+
* usam `gray` e a página atual usa `primary` — é a cor que marca onde
|
|
8
|
+
* você está, já que não há diferença de peso.
|
|
9
|
+
*
|
|
10
|
+
* O separador é o caractere `/`, e não um ícone: é assim no design.
|
|
11
|
+
*
|
|
12
|
+
* ATENÇÃO: o `#999999` dos níveis anteriores atinge 2.85:1 sobre branco,
|
|
13
|
+
* abaixo dos 4.5:1 do WCAG para texto. Como são links, a falha é mais
|
|
14
|
+
* séria do que em texto decorativo. Mantido fiel ao Figma; a correção
|
|
15
|
+
* depende de decisão do design, junto das outras registradas em
|
|
16
|
+
* `scripts/check-contrast.mjs`.
|
|
17
|
+
*/
|
|
18
|
+
declare const Breadcrumb: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
19
|
+
declare const BreadcrumbList: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>, "ref"> & React.RefAttributes<HTMLOListElement>>;
|
|
20
|
+
declare const BreadcrumbItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & React.RefAttributes<HTMLLIElement>>;
|
|
21
|
+
declare const BreadcrumbLink: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & {
|
|
22
|
+
asChild?: boolean;
|
|
23
|
+
} & React.RefAttributes<HTMLAnchorElement>>;
|
|
24
|
+
/** Último item da trilha: é a página atual, então não é link. */
|
|
25
|
+
declare const BreadcrumbPage: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
26
|
+
declare const BreadcrumbSeparator: {
|
|
27
|
+
({ children, className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
/** Para trilhas longas, no lugar dos níveis omitidos. */
|
|
31
|
+
declare const BreadcrumbEllipsis: {
|
|
32
|
+
({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
33
|
+
displayName: string;
|
|
34
|
+
};
|
|
35
|
+
export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis, };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as TogglePrimitive from "@radix-ui/react-toggle";
|
|
3
|
+
/**
|
|
4
|
+
* Botão alternador, conforme o conjunto `Button Switch` do Figma
|
|
5
|
+
* "Design System - 2026" (página "↳ Botões").
|
|
6
|
+
*
|
|
7
|
+
* 32px com raio de 8px. Desligado é branco com ícone `gray.medium`;
|
|
8
|
+
* ligado inverte para o azul interativo com ícone branco.
|
|
9
|
+
*
|
|
10
|
+
* Diferente do `Switch`, que representa uma preferência ligada ou
|
|
11
|
+
* desligada, este alterna uma ferramenta — a camada do mapa que está
|
|
12
|
+
* ativa, o modo de desenho. Por isso é um botão de ícone com estado, e
|
|
13
|
+
* não um controle deslizante.
|
|
14
|
+
*/
|
|
15
|
+
declare const ButtonSwitch: React.ForwardRefExoticComponent<Omit<TogglePrimitive.ToggleProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
16
|
+
export { ButtonSwitch };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Botão, conforme o conjunto `ButtonFlat` do Figma "Design System - 2026"
|
|
5
|
+
* (página "↳ Botões").
|
|
6
|
+
*
|
|
7
|
+
* O design nomeia as variantes por cor — `primary`, `secundary`,
|
|
8
|
+
* `terciário` — mas os nomes do shadcn (`default`, `outline`, `ghost`)
|
|
9
|
+
* foram mantidos porque já são consumidos pelos apps e por outros
|
|
10
|
+
* componentes desta biblioteca. O mapeamento é:
|
|
11
|
+
*
|
|
12
|
+
* | Figma | Aqui |
|
|
13
|
+
* | ----------- | ----------- |
|
|
14
|
+
* | primary | `default` |
|
|
15
|
+
* | secundary | `outline` |
|
|
16
|
+
* | terciário | `ghost` |
|
|
17
|
+
* | Link | `link` |
|
|
18
|
+
*
|
|
19
|
+
* As três cores do azul institucional formam a progressão de estados do
|
|
20
|
+
* botão primário: `blue.light` em repouso, `blue.medium` no hover e
|
|
21
|
+
* `blue.dark` no foco.
|
|
22
|
+
*/
|
|
23
|
+
declare const buttonVariants: (props?: ({
|
|
24
|
+
variant?: "default" | "link" | "outline" | "ghost" | "destructive" | "secondary" | null | undefined;
|
|
25
|
+
size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
|
|
26
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
27
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
28
|
+
asChild?: boolean;
|
|
29
|
+
}
|
|
30
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
export { Button, buttonVariants };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DayPicker } from 'react-day-picker';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export type CalendarProps = React.ComponentProps<typeof DayPicker>;
|
|
4
|
+
/**
|
|
5
|
+
* Calendário, conforme o conjunto `Elementos data picker` do Figma
|
|
6
|
+
* "Design System - 2026" (página "↳ Seletor de data").
|
|
7
|
+
*
|
|
8
|
+
* A célula de dia tem 38×30px, padding 8/12, raio de 8px e tipografia
|
|
9
|
+
* `roboto/regular/caption`. Os cinco estados especificados:
|
|
10
|
+
*
|
|
11
|
+
* | Figma | Aqui | Visual |
|
|
12
|
+
* | -------- | ---------------- | ----------------------------- |
|
|
13
|
+
* | Default | dia do mês | transparente, `gray.mediumDark` |
|
|
14
|
+
* | Hover | `:hover` | fundo `blue.1` |
|
|
15
|
+
* | Selected | `day_selected` | fundo `blue.dark`, texto branco |
|
|
16
|
+
* | Ghost | `day_outside` | texto `gray` |
|
|
17
|
+
* | Disabled | `day_disabled` | texto desabilitado |
|
|
18
|
+
*
|
|
19
|
+
* O dia selecionado usa `blue.dark` (#142C50), e não o `primary`
|
|
20
|
+
* interativo — é a única superfície de seleção do design que faz isso.
|
|
21
|
+
*/
|
|
22
|
+
declare function Calendar({ className, classNames, showOutsideDays, ...props }: CalendarProps): React.JSX.Element;
|
|
23
|
+
declare namespace Calendar {
|
|
24
|
+
var displayName: string;
|
|
25
|
+
}
|
|
26
|
+
export { Calendar };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Cartão, conforme os frames da página "↳ Cards" do Figma
|
|
4
|
+
* "Design System - 2026".
|
|
5
|
+
*
|
|
6
|
+
* ATENÇÃO: essa página não tem componentes — são frames estáticos. A
|
|
7
|
+
* geometria abaixo foi extraída da assinatura que se repete 8 vezes
|
|
8
|
+
* (fundo do card, raio 12px, padding 20px, empilhamento vertical com 20px
|
|
9
|
+
* de gap, sombra `azul/centralizado 2 - light`), o que é consistente o
|
|
10
|
+
* bastante para tratar como especificação. Os estados de interação, esses
|
|
11
|
+
* o design não define — o cartão aqui é estático por isso.
|
|
12
|
+
*
|
|
13
|
+
* O padding de 20px vive no `Card`, e não em cada sub-bloco como no
|
|
14
|
+
* shadcn: no Figma o container é um auto-layout único com gap, então
|
|
15
|
+
* `CardHeader`/`CardContent`/`CardFooter` não repetem padding.
|
|
16
|
+
*/
|
|
17
|
+
declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
20
|
+
declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
21
|
+
declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
3
|
+
/**
|
|
4
|
+
* Caixa de seleção, conforme o conjunto `Basics_checkboxes` do Figma
|
|
5
|
+
* "Design System - 2026" (página "↳ Checkbox - Radio - Switch").
|
|
6
|
+
*
|
|
7
|
+
* O design desenha uma caixa de 18px dentro de uma área de 24px, e usa o
|
|
8
|
+
* espaço restante como halo nos estados hover e focused. Aqui o halo é um
|
|
9
|
+
* `ring` com offset, o que evita um elemento extra só para decoração.
|
|
10
|
+
*
|
|
11
|
+
* As três variações do Figma — `deselected`, `selected` e `indeterminate`
|
|
12
|
+
* — correspondem aos três estados do Radix (`unchecked`, `checked`,
|
|
13
|
+
* `indeterminate`).
|
|
14
|
+
*/
|
|
15
|
+
declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
16
|
+
export { Checkbox };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
3
|
+
/**
|
|
4
|
+
* Menu de contexto. Compartilha o visual do `DropdownMenu` — no Figma os
|
|
5
|
+
* dois saem dos mesmos conjuntos `Select_dropdown` (painel) e
|
|
6
|
+
* `Dropdown frames` (itens), mudando apenas o gatilho.
|
|
7
|
+
*/
|
|
8
|
+
declare const ContextMenu: React.FC<ContextMenuPrimitive.ContextMenuProps>;
|
|
9
|
+
declare const ContextMenuTrigger: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
10
|
+
declare const ContextMenuGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
declare const ContextMenuPortal: React.FC<ContextMenuPrimitive.ContextMenuPortalProps>;
|
|
12
|
+
declare const ContextMenuSub: React.FC<ContextMenuPrimitive.ContextMenuSubProps>;
|
|
13
|
+
declare const ContextMenuRadioGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
+
declare const ContextMenuSubTrigger: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
15
|
+
inset?: boolean;
|
|
16
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
+
declare const ContextMenuSubContent: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
declare const ContextMenuContent: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
declare const ContextMenuItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
20
|
+
inset?: boolean;
|
|
21
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
declare const ContextMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
declare const ContextMenuRadioItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
24
|
+
declare const ContextMenuLabel: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
25
|
+
inset?: boolean;
|
|
26
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
27
|
+
declare const ContextMenuSeparator: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
28
|
+
declare const ContextMenuShortcut: {
|
|
29
|
+
({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
export { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, ContextMenuPortal, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuRadioGroup, };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Column, ColumnDef } from '@tanstack/react-table';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export interface DataTableProps<TData, TValue> {
|
|
4
|
+
columns: ColumnDef<TData, TValue>[];
|
|
5
|
+
data: TData[];
|
|
6
|
+
/** Coluna usada para o campo de busca/filtro exibido acima da tabela. */
|
|
7
|
+
searchKey?: string;
|
|
8
|
+
searchPlaceholder?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* DataTable: wrapper genérico sobre @tanstack/react-table com Table,
|
|
12
|
+
* ordenação por coluna, filtro simples e paginação embutida.
|
|
13
|
+
* Não é um primitivo do Radix — é o padrão de "data table" do shadcn/ui.
|
|
14
|
+
*/
|
|
15
|
+
declare function DataTable<TData, TValue>({ columns, data, searchKey, searchPlaceholder, }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
16
|
+
declare namespace DataTable {
|
|
17
|
+
var displayName: string;
|
|
18
|
+
}
|
|
19
|
+
/** Cabeçalho de coluna clicável para ordenar (usar em `ColumnDef.header`). */
|
|
20
|
+
declare function DataTableColumnHeader<TData, TValue>({ column, title, className, }: {
|
|
21
|
+
column: Column<TData, TValue>;
|
|
22
|
+
title: string;
|
|
23
|
+
className?: string;
|
|
24
|
+
}): React.JSX.Element;
|
|
25
|
+
declare namespace DataTableColumnHeader {
|
|
26
|
+
var displayName: string;
|
|
27
|
+
}
|
|
28
|
+
export { DataTable, DataTableColumnHeader };
|