nocturna-ui 0.0.4 → 0.0.6
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 +70 -101
- package/dist/components/Accordion.d.ts +23 -10
- package/dist/components/Badge.d.ts +26 -3
- package/dist/components/Button.d.ts +15 -4
- package/dist/components/Card.d.ts +30 -4
- package/dist/components/Checkbox.d.ts +16 -3
- package/dist/components/Input.d.ts +25 -4
- package/dist/components/Menu.d.ts +34 -13
- package/dist/components/Modal.d.ts +36 -4
- package/dist/components/Progress.d.ts +45 -4
- package/dist/components/Scroll.d.ts +24 -3
- package/dist/components/Select.d.ts +43 -6
- package/dist/components/Separator.d.ts +21 -3
- package/dist/components/Skeleton.d.ts +61 -8
- package/dist/components/Tabs.d.ts +27 -10
- package/dist/components/Toast.d.ts +27 -6
- package/dist/components/Tooltip.d.ts +26 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +17 -17
- package/dist/index.es.js +1548 -1392
- package/dist/index.umd.js +1 -1
- package/dist/providers/ToastProvider.d.ts +6 -3
- package/dist/style.css +1 -1
- package/package.json +18 -2
package/README.md
CHANGED
|
@@ -2,169 +2,138 @@
|
|
|
2
2
|
|
|
3
3
|
> **Primitivos góticos e brutalistas forjados para a web que não teme a escuridão.**
|
|
4
4
|
|
|
5
|
-
A **Nocturna UI** é uma biblioteca de componentes React focada em interfaces de alto contraste, tipografia serifada e estética minimalista
|
|
5
|
+
A **Nocturna UI** é uma biblioteca de componentes React focada em interfaces de alto contraste, tipografia serifada e estética minimalista.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Na **v0.0.6**, introduzimos a identidade visual **Cyber Goth**, nomes de componentes padronizados (API Limpa) e tokens semânticos de cor.
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/nocturna-ui)
|
|
10
|
+
[](https://github.com/gothd/nocturna-ui/actions)
|
|
11
|
+
[](https://codecov.io/gh/gothd/nocturna-ui)
|
|
8
12
|
|
|
9
13
|
---
|
|
10
14
|
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
| **CryptModal** | Modal com portal, trava de foco e suporte a tecla ESC. |
|
|
17
|
-
| **RitualSelect** | Select customizado com suporte total a navegação via teclado. |
|
|
18
|
-
| **AltarMenu** `Novo` | Menu dropdown acessível para ações e navegação. |
|
|
19
|
-
| **GrimoireAccordion** | Acordeão com animação de altura dinâmica via Framer Motion. |
|
|
20
|
-
| **SoulTabs** | Sistema de abas para organização de conteúdos densos. |
|
|
21
|
-
| **VeinInput** | Input de texto com labels integrados e validação visual. |
|
|
22
|
-
| **HexCheckbox** | Checkbox temático com animação de escala e ícone custom. |
|
|
23
|
-
| **OmenToast** `Novo` | Sistema de notificações (Toasts) via Hook ou Global. |
|
|
24
|
-
| **RuneTooltip** `Novo` | Tooltips informativos com posicionamento automático. |
|
|
25
|
-
| **VesselProgress** `Novo` | Barras de progresso (Valor ou Timer/Indeterminate). |
|
|
26
|
-
| **AbyssScroll** `Novo` | Container com scrollbar customizada cross-browser. |
|
|
27
|
-
| **SpectreSkeleton** `Novo` | Placeholders de carregamento (Avatar, Card). |
|
|
28
|
-
| **SigilBadge** | Emblemas para status e tags em versões Solid ou Outline. |
|
|
29
|
-
| **AbyssSeparator** | Divisor de seção com suporte a labels e sigilos. |
|
|
30
|
-
| **NocturnaCard** | Container clássico com sombras rígidas (hard shadows). |
|
|
15
|
+
## 🔮 Documentação Completa
|
|
16
|
+
|
|
17
|
+
Para ver os componentes em ação, tabelas de propriedades interativas e exemplos avançados, visite nosso Grimório Digital:
|
|
18
|
+
|
|
19
|
+
### [👉 Acessar Documentação (Playground)](https://gothd.github.io/nocturna-ui/)
|
|
31
20
|
|
|
32
21
|
---
|
|
33
22
|
|
|
34
23
|
## 🌑 Instalação
|
|
35
24
|
|
|
36
|
-
### 1. Instale o pacote
|
|
37
|
-
|
|
38
25
|
```bash
|
|
39
26
|
npm install nocturna-ui
|
|
40
27
|
```
|
|
41
28
|
|
|
42
|
-
###
|
|
29
|
+
### Dependências
|
|
43
30
|
|
|
44
|
-
|
|
31
|
+
A biblioteca requer React e Framer Motion.
|
|
45
32
|
|
|
46
33
|
```bash
|
|
47
34
|
npm install react react-dom framer-motion
|
|
48
35
|
```
|
|
49
36
|
|
|
50
|
-
|
|
37
|
+
---
|
|
51
38
|
|
|
52
|
-
|
|
39
|
+
## 🩸 Setup Inicial
|
|
53
40
|
|
|
54
|
-
|
|
41
|
+
Importe o CSS global e envolva sua aplicação no `ToastProvider` para habilitar o sistema de notificações.
|
|
55
42
|
|
|
56
43
|
```tsx
|
|
57
|
-
//
|
|
58
|
-
import {
|
|
59
|
-
import "nocturna-ui/
|
|
44
|
+
// No seu arquivo raiz (main.tsx ou App.tsx)
|
|
45
|
+
import { ToastProvider } from "nocturna-ui";
|
|
46
|
+
import "nocturna-ui/style.css"; // ⚠️ Importação vital dos estilos
|
|
60
47
|
|
|
61
48
|
export default function App({ children }) {
|
|
62
|
-
return <
|
|
49
|
+
return <ToastProvider>{children}</ToastProvider>;
|
|
63
50
|
}
|
|
64
51
|
```
|
|
65
52
|
|
|
66
53
|
---
|
|
67
54
|
|
|
68
|
-
##
|
|
55
|
+
## 🎨 Paleta Cyber Goth
|
|
69
56
|
|
|
70
|
-
|
|
57
|
+
A versão 0.0.6 introduz 5 variantes de cor principais que permeiam todos os componentes:
|
|
71
58
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
</div>
|
|
82
|
-
);
|
|
83
|
-
```
|
|
59
|
+
| Token | Cor (Hex) | Significado Semântico | Estética |
|
|
60
|
+
| ----------- | --------- | --------------------- | ------------- |
|
|
61
|
+
| `primary` | `#FFFFFF` | Padrão / Neutro | Bone White |
|
|
62
|
+
| `secondary` | `#00FF41` | Sucesso | Malware Green |
|
|
63
|
+
| `accent` | `#FF007F` | Destaque | Phantom Pink |
|
|
64
|
+
| `danger` | `#DC2626` | Erro / Perigo | Sanguine Red |
|
|
65
|
+
| `warning` | `#FFD700` | Alerta | Cyber Gold |
|
|
66
|
+
|
|
67
|
+
---
|
|
84
68
|
|
|
85
|
-
|
|
69
|
+
## 🕸️ Uso Básico
|
|
86
70
|
|
|
87
|
-
|
|
71
|
+
Componentes padronizados e tipados:
|
|
88
72
|
|
|
89
73
|
```tsx
|
|
90
|
-
import {
|
|
74
|
+
import { Button, Card, Badge, useToast } from "nocturna-ui";
|
|
91
75
|
|
|
92
|
-
export const
|
|
76
|
+
export const Ritual = () => {
|
|
93
77
|
const { toast } = useToast();
|
|
94
78
|
|
|
95
79
|
return (
|
|
96
|
-
<
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
80
|
+
<Card title="Protocolo de Rede" variant="secondary">
|
|
81
|
+
<div className="flex gap-4 mb-4">
|
|
82
|
+
<Badge variant="secondary">Online</Badge>
|
|
83
|
+
<Badge variant="primary" styleType="solid">
|
|
84
|
+
v2.4
|
|
85
|
+
</Badge>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<Button
|
|
89
|
+
variant="accent"
|
|
90
|
+
onClick={() =>
|
|
91
|
+
toast({
|
|
92
|
+
title: "Upload Iniciado",
|
|
93
|
+
type: "success", // Automático: Usa cor secondary
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
>
|
|
97
|
+
Transferir Dados
|
|
98
|
+
</Button>
|
|
99
|
+
</Card>
|
|
108
100
|
);
|
|
109
101
|
};
|
|
110
102
|
```
|
|
111
103
|
|
|
112
104
|
---
|
|
113
105
|
|
|
114
|
-
## 📜 Uso via CDN (Vanilla JS
|
|
106
|
+
## 📜 Uso via CDN (Vanilla JS)
|
|
115
107
|
|
|
116
|
-
A
|
|
117
|
-
|
|
118
|
-
**Ordem de Importação:**
|
|
108
|
+
A biblioteca injeta uma ponte global `window.NocturnaUI` para uso sem bundlers.
|
|
119
109
|
|
|
120
110
|
```html
|
|
121
111
|
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
122
112
|
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
123
|
-
|
|
124
113
|
<script src="https://unpkg.com/framer-motion@11/dist/framer-motion.js"></script>
|
|
125
114
|
|
|
126
|
-
<script src="https://unpkg.com/nocturna-ui@0.0.
|
|
127
|
-
<link
|
|
128
|
-
rel="stylesheet"
|
|
129
|
-
href="https://unpkg.com/nocturna-ui@0.0.4/dist/style.css"
|
|
130
|
-
/>
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Inicialização e Uso:**
|
|
115
|
+
<script src="https://unpkg.com/nocturna-ui@0.0.6/dist/index.umd.js"></script>
|
|
116
|
+
<link rel="stylesheet" href="https://unpkg.com/nocturna-ui@0.0.6/dist/style.css" />
|
|
134
117
|
|
|
135
|
-
```html
|
|
136
118
|
<div id="root"></div>
|
|
137
119
|
|
|
138
120
|
<script>
|
|
139
|
-
|
|
121
|
+
const { ToastProvider, Button } = window.NocturnaUI;
|
|
122
|
+
|
|
140
123
|
const root = ReactDOM.createRoot(document.getElementById("root"));
|
|
141
|
-
root.render(React.createElement(
|
|
142
|
-
|
|
143
|
-
// 2. Dispara Toasts via JavaScript Puro
|
|
144
|
-
function invocarMensagem() {
|
|
145
|
-
if (window.NocturnaUI && window.NocturnaUI.toaster) {
|
|
146
|
-
window.NocturnaUI.toaster.toast({
|
|
147
|
-
title: "Vanilla JS",
|
|
148
|
-
description: "O sistema de notificações funciona sem build steps.",
|
|
149
|
-
variant: "blood",
|
|
150
|
-
type: "warning",
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
}
|
|
124
|
+
root.render(React.createElement(ToastProvider));
|
|
154
125
|
</script>
|
|
155
|
-
|
|
156
|
-
<button onclick="invocarMensagem()">Testar Toast</button>
|
|
157
126
|
```
|
|
158
127
|
|
|
159
|
-
|
|
128
|
+
_Veja o [exemplo completo aqui](./examples/cdn/index.html)._
|
|
160
129
|
|
|
161
|
-
|
|
130
|
+
---
|
|
162
131
|
|
|
163
|
-
|
|
164
|
-
- **Tailwind CSS** - Estilização atômica encapsulada (sem conflitos de classe).
|
|
165
|
-
- **Framer Motion** - Animações de entrada e saída (Accordions, Modais, Toasts).
|
|
166
|
-
- **Lucide React** - Iconografia leve e consistente.
|
|
132
|
+
## 🧪 Desenvolvimento
|
|
167
133
|
|
|
168
|
-
|
|
134
|
+
```bash
|
|
135
|
+
npm test # Roda testes unitários
|
|
136
|
+
npm run test:coverage # Relatório detalhado
|
|
137
|
+
```
|
|
169
138
|
|
|
170
|
-
Desenvolvido com 🖤 por **gothd**.
|
|
139
|
+
Desenvolvido com 🖤 por **gothd**.
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Lista de seções do acordeão.
|
|
5
|
+
* Define o ID, título e conteúdo de cada painel.
|
|
6
|
+
*/
|
|
7
|
+
items: Array<{
|
|
8
|
+
/** Identificador único para controle de estado */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Texto do cabeçalho (sempre uppercase/serif) */
|
|
11
|
+
title: string;
|
|
12
|
+
/** Conteúdo a ser revelado (ReactNode) */
|
|
13
|
+
content: React.ReactNode;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Define a estética visual.
|
|
17
|
+
* @default "primary"
|
|
18
|
+
*/
|
|
19
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
6
20
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export declare const
|
|
12
|
-
export {};
|
|
21
|
+
/**
|
|
22
|
+
* Componente de Acordeão com animações de altura (Framer Motion) e estética brutalista.
|
|
23
|
+
* Possui bordas sobrepostas para criar um efeito de lista contínua.
|
|
24
|
+
*/
|
|
25
|
+
export declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
2
|
+
interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
/**
|
|
4
|
+
* O conteúdo do emblema (geralmente texto curto ou ícone).
|
|
5
|
+
*/
|
|
3
6
|
children: React.ReactNode;
|
|
4
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Define o tema de cores.
|
|
9
|
+
* @default "primary"
|
|
10
|
+
*/
|
|
11
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
12
|
+
/**
|
|
13
|
+
* Dimensões e escala de fonte do badge.
|
|
14
|
+
* - `sm`: Para contextos densos ou listas.
|
|
15
|
+
* - `md`: Tamanho padrão para labels independentes.
|
|
16
|
+
* @default "md"
|
|
17
|
+
*/
|
|
5
18
|
size?: "sm" | "md";
|
|
19
|
+
/**
|
|
20
|
+
* Estilo de preenchimento.
|
|
21
|
+
* - `outline`: Borda colorida, fundo transparente.
|
|
22
|
+
* - `solid`: Fundo preenchido, texto preto (exceto danger que pode ser branco).
|
|
23
|
+
* @default "outline"
|
|
24
|
+
*/
|
|
6
25
|
styleType?: "outline" | "solid";
|
|
7
26
|
}
|
|
8
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Componente de Badge (Emblema) para status, tags ou categorias.
|
|
29
|
+
* Utiliza tipografia serifada e uppercase para reforçar a estética gótica/brutalista.
|
|
30
|
+
*/
|
|
31
|
+
export declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
9
32
|
export {};
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
3
|
-
|
|
2
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o estilo visual do botão.
|
|
5
|
+
* @default "primary"
|
|
6
|
+
*/
|
|
7
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
8
|
+
/**
|
|
9
|
+
* Controla o tamanho e o padding.
|
|
10
|
+
* @default "md"
|
|
11
|
+
*/
|
|
4
12
|
size?: "sm" | "md" | "lg";
|
|
5
13
|
}
|
|
6
|
-
|
|
7
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Botão primário com estética brutalista.
|
|
16
|
+
* Utiliza sombras rígidas (hard shadows) e transições de alto contraste.
|
|
17
|
+
*/
|
|
18
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o tema visual do card.
|
|
5
|
+
* @default "primary"
|
|
6
|
+
*/
|
|
7
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
8
|
+
/**
|
|
9
|
+
* Título principal do card. Renderizado em uppercase e fonte serifada.
|
|
10
|
+
* Se omitido, o cabeçalho não será renderizado.
|
|
11
|
+
*/
|
|
12
|
+
title?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Texto de apoio renderizado logo abaixo do título em fonte sans-serif.
|
|
15
|
+
*/
|
|
5
16
|
description?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Controla a tag HTML usada para o título (acessibilidade).
|
|
19
|
+
* Permite ajustar a hierarquia semântica sem mudar o estilo visual.
|
|
20
|
+
* @default "h3"
|
|
21
|
+
*/
|
|
6
22
|
headingLevel?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
23
|
+
/**
|
|
24
|
+
* Polimorfismo: Define qual elemento HTML raiz será renderizado.
|
|
25
|
+
* Útil para semântica (ex: transformar em `section`, `article` ou `li`).
|
|
26
|
+
* @default "div"
|
|
27
|
+
*/
|
|
7
28
|
as?: React.ElementType;
|
|
8
29
|
}
|
|
9
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Container fundamental da Nocturna UI.
|
|
32
|
+
* Possui comportamento de Flex Column para garantir que o conteúdo ocupe a altura disponível,
|
|
33
|
+
* além de sombras rígidas (hard shadows) interativas no hover.
|
|
34
|
+
*/
|
|
35
|
+
export declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
36
|
export {};
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
2
|
+
interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
3
|
+
/**
|
|
4
|
+
* Texto opcional exibido ao lado do checkbox.
|
|
5
|
+
* Renderizado com tipografia sans-serif e uppercase.
|
|
6
|
+
*/
|
|
3
7
|
label?: string;
|
|
4
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Define o tema visual do componente.
|
|
10
|
+
* @default "primary"
|
|
11
|
+
*/
|
|
12
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
5
13
|
}
|
|
6
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Checkbox customizado com estética brutalista.
|
|
16
|
+
* Mantém acessibilidade total escondendo o input nativo (`sr-only`)
|
|
17
|
+
* mas preservando a navegabilidade via teclado e leitores de tela.
|
|
18
|
+
*/
|
|
19
|
+
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
7
20
|
export {};
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
3
|
-
|
|
2
|
+
export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o tema visual do input seguindo a paleta Cyber Goth.
|
|
5
|
+
* - `primary`: Bone White (Padrão)
|
|
6
|
+
* - `secondary`: Malware Green
|
|
7
|
+
* - `accent`: Phantom Pink
|
|
8
|
+
* - `danger`: Sanguine Red
|
|
9
|
+
* - `warning`: Cyber Gold
|
|
10
|
+
* @default "primary"
|
|
11
|
+
*/
|
|
12
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
13
|
+
/**
|
|
14
|
+
* Dimensões do input.
|
|
15
|
+
* - `sm`: Compacto (32px altura aprox).
|
|
16
|
+
* - `md`: Padrão (48px altura aprox).
|
|
17
|
+
* @default "md"
|
|
18
|
+
*/
|
|
4
19
|
size?: "sm" | "md";
|
|
20
|
+
/**
|
|
21
|
+
* Rótulo exibido acima do campo.
|
|
22
|
+
*/
|
|
5
23
|
label?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Mensagem de erro.
|
|
26
|
+
* Se existir, o input assume a cor `danger` automaticamente.
|
|
27
|
+
*/
|
|
6
28
|
error?: string;
|
|
7
29
|
}
|
|
8
|
-
export declare const
|
|
9
|
-
export {};
|
|
30
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,17 +1,38 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
export interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** Lista de itens do menu. */
|
|
4
|
+
items: Array<{
|
|
5
|
+
/** Identificador único do item. */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Texto do item. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Ícone opcional à esquerda. */
|
|
10
|
+
icon?: React.ReactNode;
|
|
11
|
+
/** Ação ao clicar. */
|
|
12
|
+
onClick: () => void;
|
|
13
|
+
/** Indica ação destrutiva. */
|
|
14
|
+
danger?: boolean;
|
|
15
|
+
/** Desabilita o item. */
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Define o tema visual do menu.
|
|
20
|
+
* @default "primary"
|
|
21
|
+
*/
|
|
22
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
23
|
+
/** Elemento gatilho opcional. Se omitido, usa ícone padrão. */
|
|
13
24
|
trigger?: React.ReactNode;
|
|
25
|
+
/** Alinhamento do dropdown. */
|
|
14
26
|
align?: "left" | "right";
|
|
15
27
|
}
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Menu Dropdown acessível.
|
|
30
|
+
*
|
|
31
|
+
* **Comportamento de Teclado:**
|
|
32
|
+
* - `Enter` / `Espaço`: Abre o menu (se focado no gatilho) ou ativa item.
|
|
33
|
+
* - `Setas (Cima/Baixo)`: Navega entre os itens e previne scroll da página.
|
|
34
|
+
* - `Home` / `End`: Vai para o primeiro ou último item.
|
|
35
|
+
* - `Esc`: Fecha o menu e retorna foco ao gatilho.
|
|
36
|
+
* - `Tab`: Fecha o menu e segue fluxo natural da página.
|
|
37
|
+
*/
|
|
38
|
+
export declare const Menu: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1,11 +1,43 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
2
|
+
interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Controla a visibilidade do modal.
|
|
5
|
+
* O componente é renderizado via React Portal no `document.body`.
|
|
6
|
+
*/
|
|
3
7
|
isOpen: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Função chamada quando o modal solicita fechamento.
|
|
10
|
+
* Disparada por: tecla ESC, clique no overlay ou clique no botão 'X'.
|
|
11
|
+
*/
|
|
4
12
|
onClose: () => void;
|
|
5
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Título principal do modal.
|
|
15
|
+
* Se fornecido, renderiza um `h2` padrão e configura `aria-labelledby`.
|
|
16
|
+
* Se omitido, você deve fornecer seu próprio cabeçalho dentro de `children` para acessibilidade visual.
|
|
17
|
+
*/
|
|
18
|
+
title?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Descrição opcional abaixo do título.
|
|
21
|
+
* Usada automaticamente para o atributo `aria-describedby`.
|
|
22
|
+
*/
|
|
6
23
|
description?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Conteúdo interno do modal.
|
|
26
|
+
*/
|
|
7
27
|
children?: React.ReactNode;
|
|
8
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Define o tema visual do modal.
|
|
30
|
+
* @default "primary"
|
|
31
|
+
*/
|
|
32
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
9
33
|
}
|
|
10
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Modal acessível com estética brutalista.
|
|
36
|
+
*
|
|
37
|
+
* **Features Automáticas:**
|
|
38
|
+
* - **Focus Trap:** Mantém o foco do teclado preso dentro do modal.
|
|
39
|
+
* - **Scroll Lock:** Impede a rolagem da página de fundo.
|
|
40
|
+
* - **Close on ESC:** Fecha ao pressionar Escape.
|
|
41
|
+
*/
|
|
42
|
+
export declare const Modal: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
43
|
export {};
|
|
@@ -1,13 +1,54 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
2
|
+
export interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Valor atual do progresso.
|
|
5
|
+
* Utilizado apenas quando `mode="value"`.
|
|
6
|
+
* @default 0
|
|
7
|
+
*/
|
|
3
8
|
value?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Valor máximo da escala.
|
|
11
|
+
* @default 100
|
|
12
|
+
*/
|
|
4
13
|
max?: number;
|
|
5
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Define o tema visual da barra.
|
|
16
|
+
* @default "primary"
|
|
17
|
+
*/
|
|
18
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
19
|
+
/**
|
|
20
|
+
* Rótulo exibido acima da barra.
|
|
21
|
+
* Renderizado em uppercase e fonte serifada.
|
|
22
|
+
*/
|
|
6
23
|
label?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Se verdadeiro, exibe a porcentagem numérica no lado direito do rótulo.
|
|
26
|
+
* Funciona apenas no modo `value`.
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
7
29
|
showValue?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Define o comportamento da barra.
|
|
32
|
+
* - `value`: Progresso manual controlado pela prop `value`.
|
|
33
|
+
* - `timer`: Barra decrescente automática baseada na `duration`.
|
|
34
|
+
* - `indeterminate`: Animação de "loading" infinito para estados de espera.
|
|
35
|
+
* @default "value"
|
|
36
|
+
*/
|
|
8
37
|
mode?: "value" | "timer" | "indeterminate";
|
|
38
|
+
/**
|
|
39
|
+
* Duração da animação em milissegundos.
|
|
40
|
+
* Utilizado apenas quando `mode="timer"`.
|
|
41
|
+
* @default 5000
|
|
42
|
+
*/
|
|
9
43
|
duration?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Pausa a animação do timer se verdadeiro.
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
10
48
|
paused?: boolean;
|
|
11
49
|
}
|
|
12
|
-
|
|
13
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Barra de progresso multifuncional com estética brutalista.
|
|
52
|
+
* Suporta exibição de valores percentuais, timers decrescentes e estados de carregamento indeterminado.
|
|
53
|
+
*/
|
|
54
|
+
export declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface
|
|
2
|
+
interface ScrollProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Conteúdo que será rolado.
|
|
5
|
+
* Deve exceder a altura definida em `maxHeight` para ativar a rolagem.
|
|
6
|
+
*/
|
|
3
7
|
children: React.ReactNode;
|
|
4
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Define o tema visual da barra de rolagem.
|
|
10
|
+
* @default "primary"
|
|
11
|
+
*/
|
|
12
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
13
|
+
/**
|
|
14
|
+
* Altura máxima do container antes de ativar a rolagem.
|
|
15
|
+
* Aceita valores CSS válidos (ex: "400px", "50vh", 300).
|
|
16
|
+
* @default "400px"
|
|
17
|
+
*/
|
|
5
18
|
maxHeight?: string | number;
|
|
6
19
|
}
|
|
7
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Container de rolagem com scrollbar customizada cross-browser (Webkit & Firefox).
|
|
22
|
+
*
|
|
23
|
+
* **Features:**
|
|
24
|
+
* - Acessível via teclado (`tabindex="0"` permite foco e uso das setas).
|
|
25
|
+
* - Estilização profunda de scrollbar para manter a imersão gótica.
|
|
26
|
+
* - Suporte a conteúdo dinâmico.
|
|
27
|
+
*/
|
|
28
|
+
export declare const Scroll: React.ForwardRefExoticComponent<ScrollProps & React.RefAttributes<HTMLDivElement>>;
|
|
8
29
|
export {};
|