nocturna-ui 0.0.5 → 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 +42 -99
- package/dist/components/Accordion.d.ts +10 -16
- package/dist/components/Badge.d.ts +8 -8
- package/dist/components/Box.d.ts +11 -0
- package/dist/components/Button.d.ts +14 -10
- package/dist/components/Card.d.ts +13 -10
- package/dist/components/Checkbox.d.ts +11 -7
- package/dist/components/Flex.d.ts +36 -0
- package/dist/components/Grid.d.ts +47 -0
- package/dist/components/Heading.d.ts +21 -0
- package/dist/components/Input.d.ts +25 -22
- package/dist/components/Menu.d.ts +11 -22
- package/dist/components/Modal.d.ts +11 -8
- package/dist/components/Progress.d.ts +5 -7
- package/dist/components/Scroll.d.ts +12 -10
- package/dist/components/Select.d.ts +6 -12
- package/dist/components/Separator.d.ts +13 -12
- package/dist/components/SimpleGrid.d.ts +29 -0
- package/dist/components/Skeleton.d.ts +13 -24
- package/dist/components/Stack.d.ts +37 -0
- package/dist/components/Tabs.d.ts +39 -14
- package/dist/components/Text.d.ts +13 -0
- package/dist/components/Toast.d.ts +6 -7
- package/dist/components/Tooltip.d.ts +10 -6
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +24 -17
- package/dist/index.es.js +2265 -1492
- package/dist/index.umd.js +1 -1
- package/dist/providers/ToastProvider.d.ts +1 -1
- package/dist/style.css +1 -1
- package/dist/types/polymorphic.d.ts +12 -0
- package/dist/utils/system.d.ts +92 -0
- package/dist/utils/tokens.d.ts +130 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,136 +2,79 @@
|
|
|
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
|
|
5
|
+
A **Nocturna UI** é uma biblioteca de componentes React focada em interfaces de alto contraste e DX (Developer Experience) superior.
|
|
6
6
|
|
|
7
|
-
Na **v0.0
|
|
7
|
+
Na versão **v0.1.0**, apresentamos a **System Props Engine** e os **Layout Primitives**, eliminando a necessidade de arquivos CSS externos para a maioria dos casos de uso.
|
|
8
8
|
|
|
9
|
-
[](https://www.npmjs.com/package/nocturna-ui)
|
|
10
10
|
[](https://github.com/gothd/nocturna-ui/actions)
|
|
11
11
|
[](https://codecov.io/gh/gothd/nocturna-ui)
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## ✨ Novidades da v0.1.0
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
- **System Props Engine:** Controle margens (`m`, `p`), cores (`bg`, `color`), tipografia e layout diretamente nas props dos componentes.
|
|
18
|
+
- **Layout Primitives:** Novos componentes `Box`, `Stack`, `HStack`, `VStack`, `Grid` e `SimpleGrid`.
|
|
19
|
+
- **Polymorphic Components:** Use a prop `as` para alterar a tag HTML semântica (ex: `as="section"`, `as="a"`) mantendo os estilos.
|
|
20
|
+
- **Engine de Design Tokens:** Integração profunda com tokens de espaçamento e cores do tema Cyber Goth.
|
|
20
21
|
|
|
21
22
|
---
|
|
22
23
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npm install nocturna-ui
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Dependências
|
|
24
|
+
## 🔮 Documentação & Playground
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
Explore o grimório digital com exemplos interativos:
|
|
32
27
|
|
|
33
|
-
|
|
34
|
-
npm install react react-dom framer-motion
|
|
35
|
-
```
|
|
28
|
+
### [👉 Acessar Documentação (Playground)](https://gothd.github.io/nocturna-ui/)
|
|
36
29
|
|
|
37
30
|
---
|
|
38
31
|
|
|
39
|
-
##
|
|
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
|
|
32
|
+
## 🌑 Instalação
|
|
47
33
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
34
|
+
```bash
|
|
35
|
+
npm install nocturna-ui
|
|
51
36
|
```
|
|
52
37
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
## 🕸️ Uso Básico (Aliases)
|
|
56
|
-
|
|
57
|
-
Você não precisa mais decorar nomes místicos como `VoidButton` ou `CryptModal`. Utilize os Aliases funcionais:
|
|
38
|
+
### Exemplo Rápido
|
|
58
39
|
|
|
59
40
|
```tsx
|
|
60
|
-
import { Button, Card,
|
|
61
|
-
|
|
62
|
-
export const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<
|
|
68
|
-
<Badge variant="
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
>
|
|
75
|
-
|
|
41
|
+
import { Button, Card, VStack, Text, Badge } from "nocturna-ui";
|
|
42
|
+
|
|
43
|
+
export const App = () => (
|
|
44
|
+
<Card title="Status do Sistema" variant="secondary" w="350px">
|
|
45
|
+
<VStack gap={4}>
|
|
46
|
+
<Text color="zinc-400">Todos os sistemas operacionais.</Text>
|
|
47
|
+
|
|
48
|
+
<HStack justify="between" w="full">
|
|
49
|
+
<Badge variant="primary">v0.1.0</Badge>
|
|
50
|
+
<Badge variant="secondary" styleType="solid">
|
|
51
|
+
ONLINE
|
|
52
|
+
</Badge>
|
|
53
|
+
</HStack>
|
|
54
|
+
|
|
55
|
+
<Button variant="accent" w="full" mt={4}>
|
|
56
|
+
Executar Diagnóstico
|
|
76
57
|
</Button>
|
|
77
|
-
</
|
|
78
|
-
|
|
79
|
-
|
|
58
|
+
</VStack>
|
|
59
|
+
</Card>
|
|
60
|
+
);
|
|
80
61
|
```
|
|
81
62
|
|
|
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
63
|
---
|
|
99
64
|
|
|
100
|
-
## 📜 Uso via CDN
|
|
65
|
+
## 📜 Uso via CDN
|
|
101
66
|
|
|
102
|
-
|
|
67
|
+
Para prototipagem rápida sem bundlers:
|
|
103
68
|
|
|
104
69
|
```html
|
|
105
|
-
<script src="https://unpkg.com/
|
|
106
|
-
<
|
|
107
|
-
<script src="https://unpkg.com/framer-motion@11/dist/framer-motion.js"></script>
|
|
108
|
-
|
|
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
|
-
/>
|
|
114
|
-
|
|
115
|
-
<div id="root"></div>
|
|
116
|
-
|
|
117
|
-
<script>
|
|
118
|
-
const { ToastProvider, Button } = window.NocturnaUI;
|
|
119
|
-
|
|
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>
|
|
70
|
+
<script src="https://unpkg.com/nocturna-ui@0.1.0/dist/index.umd.js"></script>
|
|
71
|
+
<link rel="stylesheet" href="https://unpkg.com/nocturna-ui@0.1.0/dist/style.css" />
|
|
124
72
|
```
|
|
125
73
|
|
|
126
|
-
_Veja o [exemplo
|
|
74
|
+
## _Veja o [exemplo completo aqui](./examples/cdn/index.html)._
|
|
127
75
|
|
|
128
|
-
|
|
76
|
+
## 🤝 Contribuição
|
|
129
77
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
npm test # Roda testes unitários
|
|
134
|
-
npm run test:coverage # Relatório de cobertura
|
|
135
|
-
```
|
|
78
|
+
Forks e Pull Requests são bem-vindos. Consulte o guia de contribuição para começar.
|
|
136
79
|
|
|
137
|
-
|
|
80
|
+
**Licença ISC** • Criado por [Ruan Oliveira Sena](https://github.com/gothd)
|
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
title: string;
|
|
5
|
-
content: React.ReactNode;
|
|
6
|
-
}
|
|
7
|
-
interface GrimoireAccordionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface AccordionProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
8
4
|
/**
|
|
9
5
|
* Lista de seções do acordeão.
|
|
10
|
-
* Define o ID, título e conteúdo de cada painel.
|
|
11
6
|
*/
|
|
12
7
|
items: Array<{
|
|
13
|
-
/** Identificador único
|
|
14
|
-
id
|
|
15
|
-
/** Texto do cabeçalho
|
|
8
|
+
/** Identificador único do item. Se omitido, será gerado pelo índice. */
|
|
9
|
+
id?: string;
|
|
10
|
+
/** Texto do cabeçalho */
|
|
16
11
|
title: string;
|
|
17
12
|
/** Conteúdo a ser revelado (ReactNode) */
|
|
18
13
|
content: React.ReactNode;
|
|
19
14
|
}>;
|
|
15
|
+
/** Permite múltiplas seções abertas ao mesmo tempo */
|
|
16
|
+
allowMultiple?: boolean;
|
|
20
17
|
/**
|
|
21
18
|
* Define a estética visual.
|
|
22
|
-
*
|
|
23
|
-
* - `blood`: Tons de vermelho sangue (Borda Vermelha).
|
|
24
|
-
* @default "void"
|
|
19
|
+
* @default "primary"
|
|
25
20
|
*/
|
|
26
|
-
variant?: "
|
|
21
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
27
22
|
}
|
|
28
23
|
/**
|
|
29
24
|
* Componente de Acordeão com animações de altura (Framer Motion) e estética brutalista.
|
|
30
25
|
* Possui bordas sobrepostas para criar um efeito de lista contínua.
|
|
31
26
|
*/
|
|
32
|
-
export declare const
|
|
33
|
-
export {};
|
|
27
|
+
export declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
3
|
+
import { SystemProps } from '../utils/system';
|
|
4
|
+
interface BadgeProps extends SystemProps, Omit<React.HTMLAttributes<HTMLSpanElement>, "color"> {
|
|
3
5
|
/**
|
|
4
6
|
* O conteúdo do emblema (geralmente texto curto ou ícone).
|
|
5
7
|
*/
|
|
6
8
|
children: React.ReactNode;
|
|
7
9
|
/**
|
|
8
10
|
* Define o tema de cores.
|
|
9
|
-
*
|
|
10
|
-
* - `blood`: Tema agressivo (Vermelho/Preto) para erros ou destaques críticos.
|
|
11
|
-
* @default "void"
|
|
11
|
+
* @default "primary"
|
|
12
12
|
*/
|
|
13
|
-
variant?: "
|
|
13
|
+
variant?: "primary" | "secondary" | "accent" | "ghost" | "danger" | "warning";
|
|
14
14
|
/**
|
|
15
15
|
* Dimensões e escala de fonte do badge.
|
|
16
16
|
* - `sm`: Para contextos densos ou listas.
|
|
@@ -20,8 +20,8 @@ interface SigilBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
20
20
|
size?: "sm" | "md";
|
|
21
21
|
/**
|
|
22
22
|
* Estilo de preenchimento.
|
|
23
|
-
* - `outline`: Borda colorida
|
|
24
|
-
* - `solid`: Fundo preenchido
|
|
23
|
+
* - `outline`: Borda colorida, fundo transparente.
|
|
24
|
+
* - `solid`: Fundo preenchido, texto preto (exceto danger que pode ser branco).
|
|
25
25
|
* @default "outline"
|
|
26
26
|
*/
|
|
27
27
|
styleType?: "outline" | "solid";
|
|
@@ -30,5 +30,5 @@ interface SigilBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
30
30
|
* Componente de Badge (Emblema) para status, tags ou categorias.
|
|
31
31
|
* Utiliza tipografia serifada e uppercase para reforçar a estética gótica/brutalista.
|
|
32
32
|
*/
|
|
33
|
-
export declare const
|
|
33
|
+
export declare const Badge: PolymorphicComponent<BadgeProps>;
|
|
34
34
|
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
3
|
+
import { SystemProps } from '../utils/system';
|
|
4
|
+
export interface BoxProps extends SystemProps, Omit<React.HTMLAttributes<HTMLElement>, "color"> {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* **Box** é o átomo fundamental da Nocturna UI.
|
|
8
|
+
* Ele mapeia props de estilo diretamente para estilos inline, garantindo que o design
|
|
9
|
+
* funcione independente da configuração de CSS do projeto consumidor.
|
|
10
|
+
*/
|
|
11
|
+
export declare const Box: PolymorphicComponent<BoxProps>;
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
import { PolymorphicComponent } from 'src/types/polymorphic';
|
|
4
|
+
export interface ButtonProps extends SystemProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color"> {
|
|
3
5
|
/**
|
|
4
6
|
* Define o estilo visual do botão.
|
|
5
|
-
*
|
|
6
|
-
* - `blood`: Estilo vermelho escuro para ações perigosas ou destaque.
|
|
7
|
-
* @default "void"
|
|
7
|
+
* @default "primary"
|
|
8
8
|
*/
|
|
9
|
-
variant?: "
|
|
9
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
10
10
|
/**
|
|
11
|
-
* Controla o tamanho e o padding
|
|
11
|
+
* Controla o tamanho e o padding.
|
|
12
12
|
* @default "md"
|
|
13
13
|
*/
|
|
14
14
|
size?: "sm" | "md" | "lg";
|
|
15
|
+
/**
|
|
16
|
+
* Define o estado de loading.
|
|
17
|
+
* @default false
|
|
18
|
+
*/
|
|
19
|
+
isLoading?: boolean;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
18
|
-
* Utiliza sombras rígidas e transições
|
|
22
|
+
* Botão primário com estética brutalista.
|
|
23
|
+
* Utiliza sombras rígidas (hard shadows) e transições de alto contraste.
|
|
19
24
|
*/
|
|
20
|
-
export declare const
|
|
21
|
-
export {};
|
|
25
|
+
export declare const Button: PolymorphicComponent<ButtonProps>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
3
|
+
import { SystemProps } from '../utils/system';
|
|
4
|
+
interface CardProps extends SystemProps, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
5
|
/**
|
|
4
6
|
* Define o tema visual do card.
|
|
5
|
-
*
|
|
6
|
-
* - `blood`: Borda vermelha escura e sombra avermelhada no hover.
|
|
7
|
-
* @default "void"
|
|
7
|
+
* @default "primary"
|
|
8
8
|
*/
|
|
9
|
-
variant?: "
|
|
9
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
10
10
|
/**
|
|
11
11
|
* Título principal do card. Renderizado em uppercase e fonte serifada.
|
|
12
12
|
* Se omitido, o cabeçalho não será renderizado.
|
|
@@ -16,6 +16,10 @@ interface NocturnaCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
16
16
|
* Texto de apoio renderizado logo abaixo do título em fonte sans-serif.
|
|
17
17
|
*/
|
|
18
18
|
description?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Conteúdo opcional renderizado na base do card.
|
|
21
|
+
*/
|
|
22
|
+
footer?: React.ReactNode;
|
|
19
23
|
/**
|
|
20
24
|
* Controla a tag HTML usada para o título (acessibilidade).
|
|
21
25
|
* Permite ajustar a hierarquia semântica sem mudar o estilo visual.
|
|
@@ -23,16 +27,15 @@ interface NocturnaCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
23
27
|
*/
|
|
24
28
|
headingLevel?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
25
29
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @default "div"
|
|
30
|
+
* Define a família da fonte da descrição.
|
|
31
|
+
* @default "sans"
|
|
29
32
|
*/
|
|
30
|
-
|
|
33
|
+
descriptionFontFamily?: SystemProps["fontFamily"];
|
|
31
34
|
}
|
|
32
35
|
/**
|
|
33
36
|
* Container fundamental da Nocturna UI.
|
|
34
37
|
* Possui comportamento de Flex Column para garantir que o conteúdo ocupe a altura disponível,
|
|
35
38
|
* além de sombras rígidas (hard shadows) interativas no hover.
|
|
36
39
|
*/
|
|
37
|
-
export declare const
|
|
40
|
+
export declare const Card: PolymorphicComponent<CardProps>;
|
|
38
41
|
export {};
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
interface CheckboxProps extends Omit<SystemProps, "as">, Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "width" | "height" | "color"> {
|
|
3
4
|
/**
|
|
4
5
|
* Texto opcional exibido ao lado do checkbox.
|
|
5
|
-
* Renderizado com tipografia sans-serif e uppercase.
|
|
6
|
+
* Renderizado com tipografia sans-serif e uppercase por padrão.
|
|
6
7
|
*/
|
|
7
8
|
label?: string;
|
|
8
9
|
/**
|
|
9
10
|
* Define o tema visual do componente.
|
|
10
|
-
*
|
|
11
|
-
* - `blood`: Tema vermelho escuro (Borda Vermelha / Check Branco).
|
|
12
|
-
* @default "void"
|
|
11
|
+
* @default "primary"
|
|
13
12
|
*/
|
|
14
|
-
variant?: "
|
|
13
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
14
|
+
/**
|
|
15
|
+
* Se verdadeiro, o checkbox fica desabilitado e com aparência esmaecida.
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
disabled?: boolean;
|
|
15
19
|
}
|
|
16
20
|
/**
|
|
17
21
|
* Checkbox customizado com estética brutalista.
|
|
18
22
|
* Mantém acessibilidade total escondendo o input nativo (`sr-only`)
|
|
19
23
|
* mas preservando a navegabilidade via teclado e leitores de tela.
|
|
20
24
|
*/
|
|
21
|
-
export declare const
|
|
25
|
+
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
22
26
|
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
2
|
+
import { BoxProps } from './Box';
|
|
3
|
+
export interface FlexProps extends BoxProps {
|
|
4
|
+
/**
|
|
5
|
+
* Direção do eixo flexível.
|
|
6
|
+
* @default "row"
|
|
7
|
+
*/
|
|
8
|
+
direction?: "row" | "column" | "row-reverse" | "column-reverse";
|
|
9
|
+
/**
|
|
10
|
+
* Alinhamento dos itens no eixo cruzado (align-items).
|
|
11
|
+
* @default "stretch"
|
|
12
|
+
*/
|
|
13
|
+
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
14
|
+
/**
|
|
15
|
+
* Distribuição dos itens no eixo principal (justify-content).
|
|
16
|
+
* @default "start"
|
|
17
|
+
*/
|
|
18
|
+
justify?: "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
19
|
+
/**
|
|
20
|
+
* Comportamento de quebra de linha (flex-wrap).
|
|
21
|
+
* @default "nowrap"
|
|
22
|
+
*/
|
|
23
|
+
wrap?: "nowrap" | "wrap" | "wrap-reverse";
|
|
24
|
+
/**
|
|
25
|
+
* Espaçamento entre os itens (gap).
|
|
26
|
+
* Aceita números (escala tailwind) ou strings arbitrárias.
|
|
27
|
+
*/
|
|
28
|
+
gap?: number | string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* **Flex** é um container de layout flexível.
|
|
32
|
+
*
|
|
33
|
+
* Facilita o alinhamento e distribuição de espaço entre itens de forma responsiva.
|
|
34
|
+
* Substitui a necessidade de escrever classes repetitivas como `flex items-center justify-between`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const Flex: PolymorphicComponent<FlexProps>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
2
|
+
import { BoxProps } from './Box';
|
|
3
|
+
export interface GridProps extends BoxProps {
|
|
4
|
+
/**
|
|
5
|
+
* Define as colunas do grid (grid-template-columns).
|
|
6
|
+
* @example templateColumns="repeat(3, 1fr)"
|
|
7
|
+
*/
|
|
8
|
+
templateColumns?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Define as linhas do grid (grid-template-rows).
|
|
11
|
+
* @example templateRows="200px 1fr"
|
|
12
|
+
*/
|
|
13
|
+
templateRows?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Espaçamento entre itens (Gap).
|
|
16
|
+
* Aceita tokens numéricos da escala ou valores CSS.
|
|
17
|
+
*/
|
|
18
|
+
gap?: number | string;
|
|
19
|
+
/** Espaçamento vertical entre linhas. */
|
|
20
|
+
rowGap?: number | string;
|
|
21
|
+
/** Espaçamento horizontal entre colunas. */
|
|
22
|
+
columnGap?: number | string;
|
|
23
|
+
/**
|
|
24
|
+
* Fluxo automático do grid.
|
|
25
|
+
* @default "row"
|
|
26
|
+
*/
|
|
27
|
+
autoFlow?: "row" | "column" | "row dense" | "column dense";
|
|
28
|
+
/**
|
|
29
|
+
* Alinhamento dos itens no eixo do bloco (align-items).
|
|
30
|
+
*/
|
|
31
|
+
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
32
|
+
/**
|
|
33
|
+
* Alinhamento dos itens no eixo da linha (justify-items).
|
|
34
|
+
*/
|
|
35
|
+
justify?: "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
36
|
+
/**
|
|
37
|
+
* Aplica o tema visual Cyber Goth ao container.
|
|
38
|
+
* Útil para criar "painéis de grade" contidos.
|
|
39
|
+
*/
|
|
40
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* **Grid** é um container de layout bidimensional.
|
|
44
|
+
* * Permite posicionar itens em linhas e colunas com precisão.
|
|
45
|
+
* Suporta tokens de espaçamento e variantes visuais da Nocturna UI.
|
|
46
|
+
*/
|
|
47
|
+
export declare const Grid: PolymorphicComponent<GridProps>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
2
|
+
import { TextProps } from './Text';
|
|
3
|
+
export interface HeadingProps extends TextProps {
|
|
4
|
+
/**
|
|
5
|
+
* Nível hierárquico do título.
|
|
6
|
+
* Afeta o tamanho da fonte e a tag HTML padrão.
|
|
7
|
+
* @default "h2"
|
|
8
|
+
*/
|
|
9
|
+
level?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
10
|
+
/**
|
|
11
|
+
* Se verdadeiro, transforma o texto em caixa alta.
|
|
12
|
+
* @default true
|
|
13
|
+
*/
|
|
14
|
+
uppercase?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Componente para títulos e cabeçalhos.
|
|
18
|
+
* Impõe a tipografia **Serifada** (Playfair Display) e **Uppercase** por padrão,
|
|
19
|
+
* alinhado com a identidade Cyber Goth da Nocturna UI.
|
|
20
|
+
*/
|
|
21
|
+
export declare const Heading: PolymorphicComponent<HeadingProps>;
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface InputProps extends Omit<SystemProps, "as">, Omit<React.InputHTMLAttributes<HTMLInputElement>, "color" | "size" | "width" | "height"> {
|
|
3
4
|
/**
|
|
4
|
-
* Define o tema visual do input.
|
|
5
|
-
* - `
|
|
6
|
-
* - `
|
|
7
|
-
*
|
|
5
|
+
* Define o tema visual do input seguindo a paleta Cyber Goth.
|
|
6
|
+
* - `primary`: Bone White (Padrão)
|
|
7
|
+
* - `secondary`: Malware Green
|
|
8
|
+
* - `accent`: Phantom Pink
|
|
9
|
+
* - `danger`: Sanguine Red
|
|
10
|
+
* - `warning`: Cyber Gold
|
|
11
|
+
* - `ghost`: Stealth Mode (Sem bordas, fundo sutil)
|
|
12
|
+
* @default "primary"
|
|
8
13
|
*/
|
|
9
|
-
variant?: "
|
|
14
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
10
15
|
/**
|
|
11
|
-
* Dimensões do input
|
|
12
|
-
* - `sm`: Compacto
|
|
13
|
-
* - `md`:
|
|
16
|
+
* Dimensões do input.
|
|
17
|
+
* - `sm`: Compacto (32px altura aprox).
|
|
18
|
+
* - `md`: Padrão (48px altura aprox).
|
|
14
19
|
* @default "md"
|
|
15
20
|
*/
|
|
16
21
|
size?: "sm" | "md";
|
|
17
22
|
/**
|
|
18
|
-
*
|
|
19
|
-
* Automaticamente vinculado ao input via `htmlFor` e `id`.
|
|
23
|
+
* Rótulo exibido acima do campo.
|
|
20
24
|
*/
|
|
21
25
|
label?: string;
|
|
22
26
|
/**
|
|
23
27
|
* Mensagem de erro.
|
|
24
|
-
* Se
|
|
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
|
+
* Se existir, o input assume a cor `danger` automaticamente.
|
|
28
29
|
*/
|
|
29
30
|
error?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Ícone opcional exibido no lado esquerdo do campo.
|
|
33
|
+
*/
|
|
34
|
+
leftIcon?: React.ReactNode;
|
|
35
|
+
/**
|
|
36
|
+
* Ícone opcional exibido no lado direito do campo.
|
|
37
|
+
*/
|
|
38
|
+
rightIcon?: React.ReactNode;
|
|
30
39
|
}
|
|
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>>;
|
|
37
|
-
export {};
|
|
40
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,36 +1,26 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
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> {
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface MenuProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLButtonElement>, "color"> {
|
|
17
4
|
/** Lista de itens do menu. */
|
|
18
5
|
items: Array<{
|
|
19
|
-
/** Identificador único do item. */
|
|
20
|
-
id
|
|
6
|
+
/** Identificador único do item. Se omitido, será gerado pelo índice. */
|
|
7
|
+
id?: string;
|
|
21
8
|
/** Texto do item. */
|
|
22
9
|
label: string;
|
|
23
10
|
/** Ícone opcional à esquerda. */
|
|
24
11
|
icon?: React.ReactNode;
|
|
25
12
|
/** Ação ao clicar. */
|
|
26
13
|
onClick: () => void;
|
|
27
|
-
/** Indica ação destrutiva
|
|
14
|
+
/** Indica ação destrutiva. */
|
|
28
15
|
danger?: boolean;
|
|
29
16
|
/** Desabilita o item. */
|
|
30
17
|
disabled?: boolean;
|
|
31
18
|
}>;
|
|
32
|
-
/**
|
|
33
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Define o tema visual do menu.
|
|
21
|
+
* @default "primary"
|
|
22
|
+
*/
|
|
23
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
34
24
|
/** Elemento gatilho opcional. Se omitido, usa ícone padrão. */
|
|
35
25
|
trigger?: React.ReactNode;
|
|
36
26
|
/** Alinhamento do dropdown. */
|
|
@@ -46,5 +36,4 @@ interface AltarMenuProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
46
36
|
* - `Esc`: Fecha o menu e retorna foco ao gatilho.
|
|
47
37
|
* - `Tab`: Fecha o menu e segue fluxo natural da página.
|
|
48
38
|
*/
|
|
49
|
-
export declare const
|
|
50
|
-
export {};
|
|
39
|
+
export declare const Menu: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<HTMLButtonElement>>;
|