nocturna-ui 0.0.3 → 0.0.5
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 +106 -39
- package/dist/components/Accordion.d.ts +23 -2
- package/dist/components/Badge.d.ts +26 -1
- package/dist/components/Button.d.ts +15 -1
- package/dist/components/Card.d.ts +32 -2
- package/dist/components/Checkbox.d.ts +16 -1
- package/dist/components/Input.d.ts +29 -2
- package/dist/components/Menu.d.ts +50 -0
- package/dist/components/Modal.d.ts +36 -2
- package/dist/components/Progress.d.ts +57 -0
- package/dist/components/Scroll.d.ts +31 -0
- package/dist/components/Select.d.ts +44 -4
- package/dist/components/Separator.d.ts +22 -1
- package/dist/components/Skeleton.d.ts +72 -0
- package/dist/components/Tabs.d.ts +29 -4
- package/dist/components/Toast.d.ts +36 -0
- package/dist/components/Tooltip.d.ts +34 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +18 -10
- package/dist/index.es.js +1761 -1047
- package/dist/index.umd.js +1 -1
- package/dist/providers/ToastProvider.d.ts +22 -0
- package/dist/style.css +1 -1
- package/dist/types/window.d.ts +9 -0
- package/package.json +18 -2
package/README.md
CHANGED
|
@@ -2,69 +2,136 @@
|
|
|
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.5**, introduzimos o sistema de **Aliases**, permitindo importações mais limpas (ex: `Button` ao invés de `VoidButton`), e melhoramos a cobertura de testes.
|
|
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
|
-
##
|
|
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/)
|
|
20
|
+
|
|
21
|
+
---
|
|
12
22
|
|
|
13
|
-
|
|
14
|
-
| :-------------------- | :------------------------------------------------------------ |
|
|
15
|
-
| **VoidButton** | Botão brutalista com suporte a tamanhos sm/md/lg. |
|
|
16
|
-
| **CryptModal** | Modal com portal e trava de foco para acessibilidade. |
|
|
17
|
-
| **RitualSelect** | Select customizado com suporte total a navegação via teclado. |
|
|
18
|
-
| **GrimoireAccordion** | Acordeão com animação de altura dinâmica via Framer Motion. |
|
|
19
|
-
| **SoulTabs** | Sistema de abas para organização de conteúdos densos. |
|
|
20
|
-
| **VeinInput** | Input de texto com estados de erro e animação de pulso. |
|
|
21
|
-
| **HexCheckbox** | Checkbox temático com animação de escala. |
|
|
22
|
-
| **AbyssSeparator** | Divisor de seção com suporte a labels e sigilos. |
|
|
23
|
-
| **SigilBadge** | Emblemas para status e tags em versões Solid ou Outline. |
|
|
24
|
-
| **NocturnaCard** | Container clássico com sombras rígidas (hard shadows). |
|
|
23
|
+
## 🌑 Instalação
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
```bash
|
|
26
|
+
npm install nocturna-ui
|
|
27
|
+
```
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
### Dependências
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
- **React-DOM** (^18.0.0)
|
|
32
|
-
- **Framer Motion** (^11.0.0)
|
|
31
|
+
A biblioteca requer React e Framer Motion.
|
|
33
32
|
|
|
34
33
|
```bash
|
|
35
34
|
npm install react react-dom framer-motion
|
|
36
35
|
```
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🩸 Setup Inicial
|
|
40
|
+
|
|
41
|
+
Para que os componentes funcionem corretamente, você deve importar o CSS global e envolver sua aplicação no `OmenToastProvider` (mesmo que não use notificações imediatamente, ele configura contextos globais).
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
// No seu arquivo raiz (main.tsx ou App.tsx)
|
|
45
|
+
import { OmenToastProvider } from "nocturna-ui";
|
|
46
|
+
import "nocturna-ui/style.css"; // ⚠️ Importação vital dos estilos
|
|
47
|
+
|
|
48
|
+
export default function App({ children }) {
|
|
49
|
+
return <OmenToastProvider>{children}</OmenToastProvider>;
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🕸️ Uso Básico (Aliases)
|
|
39
56
|
|
|
40
|
-
|
|
57
|
+
Você não precisa mais decorar nomes místicos como `VoidButton` ou `CryptModal`. Utilize os Aliases funcionais:
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { Button, Card, Badge, useToast } from "nocturna-ui";
|
|
61
|
+
|
|
62
|
+
export const Ritual = () => {
|
|
63
|
+
const { toast } = useToast();
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<Card title="Invocação">
|
|
67
|
+
<div className="flex gap-4 mb-4">
|
|
68
|
+
<Badge variant="blood">Status: Pendente</Badge>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<Button
|
|
72
|
+
variant="void"
|
|
73
|
+
onClick={() => toast({ title: "Pacto Realizado", type: "success" })}
|
|
74
|
+
>
|
|
75
|
+
Confirmar
|
|
76
|
+
</Button>
|
|
77
|
+
</Card>
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Tabela de Aliases
|
|
83
|
+
|
|
84
|
+
| Alias | Componente Original | Função |
|
|
85
|
+
| ---------- | ------------------- | -------------------- |
|
|
86
|
+
| `Button` | `VoidButton` | Ações principais |
|
|
87
|
+
| `Input` | `VeinInput` | Entrada de dados |
|
|
88
|
+
| `Select` | `RitualSelect` | Seleção acessível |
|
|
89
|
+
| `Modal` | `CryptModal` | Diálogos e alertas |
|
|
90
|
+
| `Toast` | `OmenToast` | Notificações |
|
|
91
|
+
| `Menu` | `AltarMenu` | Dropdowns |
|
|
92
|
+
| `Tabs` | `SoulTabs` | Navegação em abas |
|
|
93
|
+
| `Card` | `NocturnaCard` | Container estrutural |
|
|
94
|
+
| `Skeleton` | `SpectreSkeleton` | Estados de loading |
|
|
95
|
+
|
|
96
|
+
_Consulte a [documentação completa](https://gothd.github.io/nocturna-ui/) para a lista total de props e variantes._
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 📜 Uso via CDN (Vanilla JS)
|
|
101
|
+
|
|
102
|
+
A biblioteca injeta uma ponte global `window.NocturnaUI` para uso sem bundlers.
|
|
41
103
|
|
|
42
104
|
```html
|
|
43
105
|
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
44
106
|
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
45
|
-
|
|
46
107
|
<script src="https://unpkg.com/framer-motion@11/dist/framer-motion.js"></script>
|
|
47
108
|
|
|
48
|
-
<script src="https://unpkg.com/nocturna-ui@0.0.
|
|
49
|
-
|
|
109
|
+
<script src="https://unpkg.com/nocturna-ui@0.0.5/dist/index.umd.js"></script>
|
|
110
|
+
<link
|
|
111
|
+
rel="stylesheet"
|
|
112
|
+
href="https://unpkg.com/nocturna-ui@0.0.5/dist/style.css"
|
|
113
|
+
/>
|
|
50
114
|
|
|
51
|
-
|
|
115
|
+
<div id="root"></div>
|
|
52
116
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
```
|
|
117
|
+
<script>
|
|
118
|
+
const { ToastProvider, Button } = window.NocturnaUI;
|
|
56
119
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
export const Ritual = () => (
|
|
62
|
-
<VoidButton variant="blood" size="lg">
|
|
63
|
-
Iniciar Invocação
|
|
64
|
-
</VoidButton>
|
|
65
|
-
);
|
|
120
|
+
// Renderização manual necessária em Vanilla JS
|
|
121
|
+
const root = ReactDOM.createRoot(document.getElementById("root"));
|
|
122
|
+
root.render(React.createElement(ToastProvider));
|
|
123
|
+
</script>
|
|
66
124
|
```
|
|
67
125
|
|
|
126
|
+
_Veja o [exemplo de uso completo pela CDN, com o ToastProvider](./examples/cdn/index.html)._
|
|
127
|
+
|
|
68
128
|
---
|
|
69
129
|
|
|
70
|
-
|
|
130
|
+
## 🧪 Desenvolvimento
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm test # Roda testes unitários
|
|
134
|
+
npm run test:coverage # Relatório de cobertura
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Desenvolvido com 🖤 por **gothd**.
|
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface GrimoireAccordionItem {
|
|
2
|
+
export interface GrimoireAccordionItem {
|
|
3
3
|
id: string;
|
|
4
4
|
title: string;
|
|
5
5
|
content: React.ReactNode;
|
|
6
6
|
}
|
|
7
7
|
interface GrimoireAccordionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Lista de seções do acordeão.
|
|
10
|
+
* Define o ID, título e conteúdo de cada painel.
|
|
11
|
+
*/
|
|
12
|
+
items: Array<{
|
|
13
|
+
/** Identificador único para controle de estado */
|
|
14
|
+
id: string;
|
|
15
|
+
/** Texto do cabeçalho (sempre uppercase/serif) */
|
|
16
|
+
title: string;
|
|
17
|
+
/** Conteúdo a ser revelado (ReactNode) */
|
|
18
|
+
content: React.ReactNode;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Define a estética visual.
|
|
22
|
+
* - `void`: Monocromático (Borda Branca).
|
|
23
|
+
* - `blood`: Tons de vermelho sangue (Borda Vermelha).
|
|
24
|
+
* @default "void"
|
|
25
|
+
*/
|
|
9
26
|
variant?: "void" | "blood";
|
|
10
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Componente de Acordeão com animações de altura (Framer Motion) e estética brutalista.
|
|
30
|
+
* Possui bordas sobrepostas para criar um efeito de lista contínua.
|
|
31
|
+
*/
|
|
11
32
|
export declare const GrimoireAccordion: ({ items, variant, className, ...props }: GrimoireAccordionProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
33
|
export {};
|
|
@@ -1,9 +1,34 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface SigilBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
/**
|
|
4
|
+
* O conteúdo do emblema (geralmente texto curto ou ícone).
|
|
5
|
+
*/
|
|
3
6
|
children: React.ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Define o tema de cores.
|
|
9
|
+
* - `void`: Padrão monocromático (Preto/Branco).
|
|
10
|
+
* - `blood`: Tema agressivo (Vermelho/Preto) para erros ou destaques críticos.
|
|
11
|
+
* @default "void"
|
|
12
|
+
*/
|
|
4
13
|
variant?: "void" | "blood";
|
|
14
|
+
/**
|
|
15
|
+
* Dimensões e escala de fonte do badge.
|
|
16
|
+
* - `sm`: Para contextos densos ou listas.
|
|
17
|
+
* - `md`: Tamanho padrão para labels independentes.
|
|
18
|
+
* @default "md"
|
|
19
|
+
*/
|
|
5
20
|
size?: "sm" | "md";
|
|
21
|
+
/**
|
|
22
|
+
* Estilo de preenchimento.
|
|
23
|
+
* - `outline`: Borda colorida com fundo transparente/preto.
|
|
24
|
+
* - `solid`: Fundo preenchido com a cor da variante.
|
|
25
|
+
* @default "outline"
|
|
26
|
+
*/
|
|
6
27
|
styleType?: "outline" | "solid";
|
|
7
28
|
}
|
|
8
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Componente de Badge (Emblema) para status, tags ou categorias.
|
|
31
|
+
* Utiliza tipografia serifada e uppercase para reforçar a estética gótica/brutalista.
|
|
32
|
+
*/
|
|
33
|
+
export declare const SigilBadge: React.ForwardRefExoticComponent<SigilBadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
9
34
|
export {};
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface VoidButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o estilo visual do botão.
|
|
5
|
+
* - `void`: Estilo padrão preto e branco.
|
|
6
|
+
* - `blood`: Estilo vermelho escuro para ações perigosas ou destaque.
|
|
7
|
+
* @default "void"
|
|
8
|
+
*/
|
|
3
9
|
variant?: "void" | "blood";
|
|
10
|
+
/**
|
|
11
|
+
* Controla o tamanho e o padding do botão.
|
|
12
|
+
* @default "md"
|
|
13
|
+
*/
|
|
4
14
|
size?: "sm" | "md" | "lg";
|
|
5
15
|
}
|
|
6
|
-
|
|
16
|
+
/**
|
|
17
|
+
* O botão primário da Nocturna UI.
|
|
18
|
+
* Utiliza sombras rígidas e transições brutas.
|
|
19
|
+
*/
|
|
20
|
+
export declare const VoidButton: React.ForwardRefExoticComponent<VoidButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
21
|
export {};
|
|
@@ -1,8 +1,38 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface NocturnaCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o tema visual do card.
|
|
5
|
+
* - `void`: Borda branca e sombra branca no hover.
|
|
6
|
+
* - `blood`: Borda vermelha escura e sombra avermelhada no hover.
|
|
7
|
+
* @default "void"
|
|
8
|
+
*/
|
|
3
9
|
variant?: "void" | "blood";
|
|
4
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Título principal do card. Renderizado em uppercase e fonte serifada.
|
|
12
|
+
* Se omitido, o cabeçalho não será renderizado.
|
|
13
|
+
*/
|
|
14
|
+
title?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Texto de apoio renderizado logo abaixo do título em fonte sans-serif.
|
|
17
|
+
*/
|
|
5
18
|
description?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Controla a tag HTML usada para o título (acessibilidade).
|
|
21
|
+
* Permite ajustar a hierarquia semântica sem mudar o estilo visual.
|
|
22
|
+
* @default "h3"
|
|
23
|
+
*/
|
|
24
|
+
headingLevel?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
25
|
+
/**
|
|
26
|
+
* Polimorfismo: Define qual elemento HTML raiz será renderizado.
|
|
27
|
+
* Útil para semântica (ex: transformar em `section`, `article` ou `li`).
|
|
28
|
+
* @default "div"
|
|
29
|
+
*/
|
|
30
|
+
as?: React.ElementType;
|
|
6
31
|
}
|
|
7
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Container fundamental da Nocturna UI.
|
|
34
|
+
* Possui comportamento de Flex Column para garantir que o conteúdo ocupe a altura disponível,
|
|
35
|
+
* além de sombras rígidas (hard shadows) interativas no hover.
|
|
36
|
+
*/
|
|
37
|
+
export declare const NocturnaCard: React.ForwardRefExoticComponent<NocturnaCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
8
38
|
export {};
|
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface HexCheckboxProps 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;
|
|
8
|
+
/**
|
|
9
|
+
* Define o tema visual do componente.
|
|
10
|
+
* - `void`: Padrão monocromático (Borda Branca / Check Preto).
|
|
11
|
+
* - `blood`: Tema vermelho escuro (Borda Vermelha / Check Branco).
|
|
12
|
+
* @default "void"
|
|
13
|
+
*/
|
|
4
14
|
variant?: "void" | "blood";
|
|
5
15
|
}
|
|
6
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Checkbox customizado com estética brutalista.
|
|
18
|
+
* Mantém acessibilidade total escondendo o input nativo (`sr-only`)
|
|
19
|
+
* mas preservando a navegabilidade via teclado e leitores de tela.
|
|
20
|
+
*/
|
|
21
|
+
export declare const HexCheckbox: React.ForwardRefExoticComponent<HexCheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
7
22
|
export {};
|
|
@@ -1,10 +1,37 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface VeinInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o tema visual do input.
|
|
5
|
+
* - `void`: Padrão monocromático (Borda Branca).
|
|
6
|
+
* - `blood`: Tema vermelho escuro (Borda Vermelha e Texto Vermelho).
|
|
7
|
+
* @default "void"
|
|
8
|
+
*/
|
|
3
9
|
variant?: "void" | "blood";
|
|
10
|
+
/**
|
|
11
|
+
* Dimensões do input (altura e padding).
|
|
12
|
+
* - `sm`: Compacto para formulários densos.
|
|
13
|
+
* - `md`: Tamanho padrão para legibilidade.
|
|
14
|
+
* @default "md"
|
|
15
|
+
*/
|
|
4
16
|
size?: "sm" | "md";
|
|
17
|
+
/**
|
|
18
|
+
* Texto do rótulo exibido acima do campo.
|
|
19
|
+
* Automaticamente vinculado ao input via `htmlFor` e `id`.
|
|
20
|
+
*/
|
|
5
21
|
label?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Mensagem de erro.
|
|
24
|
+
* Se fornecido:
|
|
25
|
+
* 1. Altera a cor da borda para vermelho.
|
|
26
|
+
* 2. Exibe a mensagem abaixo do input.
|
|
27
|
+
* 3. Adiciona `aria-invalid="true"` e vincula a mensagem via `aria-describedby` para leitores de tela.
|
|
28
|
+
*/
|
|
6
29
|
error?: string;
|
|
7
|
-
inputSize?: React.InputHTMLAttributes<HTMLInputElement>["size"];
|
|
8
30
|
}
|
|
9
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Campo de entrada de texto com estética brutalista.
|
|
33
|
+
* Prioriza acessibilidade automática (vínculo label-input e tratamento de erros ARIA).
|
|
34
|
+
* O foco gera uma sombra rígida (hard shadow) característica da Nocturna UI.
|
|
35
|
+
*/
|
|
36
|
+
export declare const VeinInput: React.ForwardRefExoticComponent<VeinInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
10
37
|
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface AltarMenuItem {
|
|
3
|
+
/** Identificador único do item. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Texto do item. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Ícone opcional à esquerda. */
|
|
8
|
+
icon?: React.ReactNode;
|
|
9
|
+
/** Ação ao clicar. */
|
|
10
|
+
onClick: () => void;
|
|
11
|
+
/** Indica ação destrutiva (vermelho). */
|
|
12
|
+
danger?: boolean;
|
|
13
|
+
/** Desabilita o item. */
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
interface AltarMenuProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
17
|
+
/** Lista de itens do menu. */
|
|
18
|
+
items: Array<{
|
|
19
|
+
/** Identificador único do item. */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Texto do item. */
|
|
22
|
+
label: string;
|
|
23
|
+
/** Ícone opcional à esquerda. */
|
|
24
|
+
icon?: React.ReactNode;
|
|
25
|
+
/** Ação ao clicar. */
|
|
26
|
+
onClick: () => void;
|
|
27
|
+
/** Indica ação destrutiva (vermelho). */
|
|
28
|
+
danger?: boolean;
|
|
29
|
+
/** Desabilita o item. */
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
/** Tema visual: 'void' (Padrão) ou 'blood' (Crítico). */
|
|
33
|
+
variant?: "void" | "blood";
|
|
34
|
+
/** Elemento gatilho opcional. Se omitido, usa ícone padrão. */
|
|
35
|
+
trigger?: React.ReactNode;
|
|
36
|
+
/** Alinhamento do dropdown. */
|
|
37
|
+
align?: "left" | "right";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Menu Dropdown acessível.
|
|
41
|
+
*
|
|
42
|
+
* **Comportamento de Teclado:**
|
|
43
|
+
* - `Enter` / `Espaço`: Abre o menu (se focado no gatilho) ou ativa item.
|
|
44
|
+
* - `Setas (Cima/Baixo)`: Navega entre os itens e previne scroll da página.
|
|
45
|
+
* - `Home` / `End`: Vai para o primeiro ou último item.
|
|
46
|
+
* - `Esc`: Fecha o menu e retorna foco ao gatilho.
|
|
47
|
+
* - `Tab`: Fecha o menu e segue fluxo natural da página.
|
|
48
|
+
*/
|
|
49
|
+
export declare const AltarMenu: React.ForwardRefExoticComponent<AltarMenuProps & React.RefAttributes<HTMLButtonElement>>;
|
|
50
|
+
export {};
|
|
@@ -1,11 +1,45 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface CryptModalProps 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;
|
|
28
|
+
/**
|
|
29
|
+
* Define o tema visual.
|
|
30
|
+
* - `void`: Monocromático (Borda Branca).
|
|
31
|
+
* - `blood`: Tema de alerta/erro (Borda Vermelha).
|
|
32
|
+
* @default "void"
|
|
33
|
+
*/
|
|
8
34
|
variant?: "void" | "blood";
|
|
9
35
|
}
|
|
10
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Modal acessível com estética brutalista (Crypt).
|
|
38
|
+
*
|
|
39
|
+
* **Features Automáticas:**
|
|
40
|
+
* - **Focus Trap:** Mantém o foco do teclado preso dentro do modal.
|
|
41
|
+
* - **Scroll Lock:** Impede a rolagem da página de fundo.
|
|
42
|
+
* - **Close on ESC:** Fecha ao pressionar Escape.
|
|
43
|
+
*/
|
|
44
|
+
export declare const CryptModal: React.ForwardRefExoticComponent<CryptModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
45
|
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface VesselProgressProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Valor atual do progresso.
|
|
5
|
+
* Utilizado apenas quando `mode="value"`.
|
|
6
|
+
* @default 0
|
|
7
|
+
*/
|
|
8
|
+
value?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Valor máximo da escala.
|
|
11
|
+
* @default 100
|
|
12
|
+
*/
|
|
13
|
+
max?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Define o tema visual da barra.
|
|
16
|
+
* - `void`: Padrão monocromático (Branco).
|
|
17
|
+
* - `blood`: Tema de perigo/erro (Vermelho Escuro).
|
|
18
|
+
* @default "void"
|
|
19
|
+
*/
|
|
20
|
+
variant?: "void" | "blood";
|
|
21
|
+
/**
|
|
22
|
+
* Rótulo exibido acima da barra.
|
|
23
|
+
* Renderizado em uppercase e fonte serifada.
|
|
24
|
+
*/
|
|
25
|
+
label?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Se verdadeiro, exibe a porcentagem numérica no lado direito do rótulo.
|
|
28
|
+
* Funciona apenas no modo `value`.
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
showValue?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Define o comportamento da barra.
|
|
34
|
+
* - `value`: Progresso manual controlado pela prop `value`.
|
|
35
|
+
* - `timer`: Barra decrescente automática baseada na `duration`.
|
|
36
|
+
* - `indeterminate`: Animação de "loading" infinito para estados de espera.
|
|
37
|
+
* @default "value"
|
|
38
|
+
*/
|
|
39
|
+
mode?: "value" | "timer" | "indeterminate";
|
|
40
|
+
/**
|
|
41
|
+
* Duração da animação em milissegundos.
|
|
42
|
+
* Utilizado apenas quando `mode="timer"`.
|
|
43
|
+
* @default 5000
|
|
44
|
+
*/
|
|
45
|
+
duration?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Pausa a animação do timer se verdadeiro.
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
paused?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Barra de progresso multifuncional com estética brutalista.
|
|
54
|
+
* Suporta exibição de valores percentuais, timers decrescentes e estados de carregamento indeterminado.
|
|
55
|
+
*/
|
|
56
|
+
export declare const VesselProgress: React.ForwardRefExoticComponent<VesselProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface AbyssScrollProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Conteúdo que será rolado.
|
|
5
|
+
* Deve exceder a altura definida em `maxHeight` para ativar a rolagem.
|
|
6
|
+
*/
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Define o tema visual da barra de rolagem.
|
|
10
|
+
* - `void`: Trilho escuro com polegar (thumb) branco.
|
|
11
|
+
* - `blood`: Trilho e polegar em tons de vermelho sangue.
|
|
12
|
+
* @default "void"
|
|
13
|
+
*/
|
|
14
|
+
variant?: "void" | "blood";
|
|
15
|
+
/**
|
|
16
|
+
* Altura máxima do container antes de ativar a rolagem.
|
|
17
|
+
* Aceita valores CSS válidos (ex: "400px", "50vh", 300).
|
|
18
|
+
* @default "400px"
|
|
19
|
+
*/
|
|
20
|
+
maxHeight?: string | number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Container de rolagem com scrollbar customizada cross-browser (Webkit & Firefox).
|
|
24
|
+
*
|
|
25
|
+
* **Features:**
|
|
26
|
+
* - Acessível via teclado (`tabindex="0"` permite foco e uso das setas).
|
|
27
|
+
* - Estilização profunda de scrollbar para manter a imersão gótica.
|
|
28
|
+
* - Suporte a conteúdo dinâmico.
|
|
29
|
+
*/
|
|
30
|
+
export declare const AbyssScroll: React.ForwardRefExoticComponent<AbyssScrollProps & React.RefAttributes<HTMLDivElement>>;
|
|
31
|
+
export {};
|
|
@@ -1,16 +1,56 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
interface RitualSelectOption {
|
|
2
|
+
export interface RitualSelectOption {
|
|
3
3
|
value: string;
|
|
4
4
|
label: string;
|
|
5
5
|
}
|
|
6
|
-
interface RitualSelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
7
|
-
|
|
6
|
+
interface RitualSelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "value"> {
|
|
7
|
+
/**
|
|
8
|
+
* Lista de opções disponíveis para seleção.
|
|
9
|
+
*/
|
|
10
|
+
options: Array<{
|
|
11
|
+
/** Valor único da opção (enviado no onChange). */
|
|
12
|
+
value: string;
|
|
13
|
+
/** Texto exibido para o usuário. */
|
|
14
|
+
label: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Valor atual selecionado (Componente Controlado).
|
|
18
|
+
* Deve corresponder ao `value` de uma das opções.
|
|
19
|
+
*/
|
|
8
20
|
value?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Callback disparado quando uma opção é selecionada.
|
|
23
|
+
* Retorna apenas o `value` da opção (string).
|
|
24
|
+
*/
|
|
9
25
|
onChange?: (value: string) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Texto exibido quando nenhum valor está selecionado.
|
|
28
|
+
* @default "Select..."
|
|
29
|
+
*/
|
|
10
30
|
placeholder?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Rótulo opcional exibido acima do select.
|
|
33
|
+
*/
|
|
11
34
|
label?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Define o tema visual.
|
|
37
|
+
* - `void`: Padrão monocromático.
|
|
38
|
+
* - `blood`: Tema avermelhado (Erro/Alerta).
|
|
39
|
+
* @default "void"
|
|
40
|
+
*/
|
|
12
41
|
variant?: "void" | "blood";
|
|
42
|
+
/**
|
|
43
|
+
* Altura do componente.
|
|
44
|
+
* - `sm`: Compacto (32px).
|
|
45
|
+
* - `md`: Padrão (48px).
|
|
46
|
+
* - `lg`: Expandido (64px).
|
|
47
|
+
* @default "md"
|
|
48
|
+
*/
|
|
13
49
|
size?: "sm" | "md" | "lg";
|
|
14
50
|
}
|
|
15
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Select customizado (Combobox) com suporte a navegação por teclado e estética brutalista.
|
|
53
|
+
* Substitui o `<select>` nativo para permitir estilização profunda do dropdown.
|
|
54
|
+
*/
|
|
55
|
+
export declare const RitualSelect: React.ForwardRefExoticComponent<RitualSelectProps & React.RefAttributes<HTMLButtonElement>>;
|
|
16
56
|
export {};
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface AbyssSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Define o tema visual das linhas e do texto.
|
|
5
|
+
* - `void`: Linhas brancas (Padrão).
|
|
6
|
+
* - `blood`: Linhas vermelho-sangue (Para áreas de perigo ou destaque).
|
|
7
|
+
* @default "void"
|
|
8
|
+
*/
|
|
3
9
|
variant?: "void" | "blood";
|
|
10
|
+
/**
|
|
11
|
+
* Texto opcional exibido no centro do separador.
|
|
12
|
+
* As linhas se ajustam automaticamente ao redor do texto.
|
|
13
|
+
* Renderizado em uppercase e com espaçamento de letras estendido.
|
|
14
|
+
*/
|
|
4
15
|
label?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Polimorfismo: Permite alterar o elemento HTML raiz.
|
|
18
|
+
* Útil para semântica (ex: renderizar como `li` em listas ou `hr` estilizado).
|
|
19
|
+
* @default "div"
|
|
20
|
+
*/
|
|
21
|
+
as?: React.ElementType;
|
|
5
22
|
}
|
|
6
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Divisor visual com estética brutalista.
|
|
25
|
+
* Cria uma linha horizontal (ou duas, se houver rótulo) para separar seções de conteúdo.
|
|
26
|
+
*/
|
|
27
|
+
export declare const AbyssSeparator: React.ForwardRefExoticComponent<AbyssSeparatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
28
|
export {};
|