nocturna-ui 0.0.6 → 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 +39 -98
- package/dist/components/Accordion.d.ts +8 -6
- package/dist/components/Badge.d.ts +5 -3
- package/dist/components/Box.d.ts +11 -0
- package/dist/components/Button.d.ts +10 -3
- package/dist/components/Card.d.ts +12 -7
- package/dist/components/Checkbox.d.ts +9 -3
- 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 +12 -2
- package/dist/components/Menu.d.ts +5 -4
- package/dist/components/Modal.d.ts +7 -2
- package/dist/components/Progress.d.ts +2 -1
- package/dist/components/Scroll.d.ts +9 -5
- package/dist/components/Select.d.ts +4 -7
- package/dist/components/Separator.d.ts +11 -8
- package/dist/components/SimpleGrid.d.ts +29 -0
- package/dist/components/Skeleton.d.ts +7 -16
- package/dist/components/Stack.d.ts +37 -0
- package/dist/components/Tabs.d.ts +37 -4
- package/dist/components/Text.d.ts +13 -0
- package/dist/components/Toast.d.ts +2 -1
- package/dist/components/Tooltip.d.ts +7 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.es.js +1888 -1228
- package/dist/index.umd.js +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,138 +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
|
+
## 🔮 Documentação & Playground
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
npm install nocturna-ui
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Dependências
|
|
26
|
+
Explore o grimório digital com exemplos interativos:
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```bash
|
|
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
|
-
Importe o CSS global e envolva sua aplicação no `ToastProvider` para habilitar o sistema de notificações.
|
|
42
|
-
|
|
43
|
-
```tsx
|
|
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
|
|
32
|
+
## 🌑 Instalação
|
|
47
33
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
34
|
+
```bash
|
|
35
|
+
npm install nocturna-ui
|
|
51
36
|
```
|
|
52
37
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
## 🎨 Paleta Cyber Goth
|
|
56
|
-
|
|
57
|
-
A versão 0.0.6 introduz 5 variantes de cor principais que permeiam todos os componentes:
|
|
58
|
-
|
|
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
|
-
---
|
|
68
|
-
|
|
69
|
-
## 🕸️ Uso Básico
|
|
70
|
-
|
|
71
|
-
Componentes padronizados e tipados:
|
|
38
|
+
### Exemplo Rápido
|
|
72
39
|
|
|
73
40
|
```tsx
|
|
74
|
-
import { Button, Card,
|
|
41
|
+
import { Button, Card, VStack, Text, Badge } from "nocturna-ui";
|
|
75
42
|
|
|
76
|
-
export const
|
|
77
|
-
|
|
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>
|
|
78
47
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
<Badge variant="primary" styleType="solid">
|
|
84
|
-
v2.4
|
|
48
|
+
<HStack justify="between" w="full">
|
|
49
|
+
<Badge variant="primary">v0.1.0</Badge>
|
|
50
|
+
<Badge variant="secondary" styleType="solid">
|
|
51
|
+
ONLINE
|
|
85
52
|
</Badge>
|
|
86
|
-
</
|
|
87
|
-
|
|
88
|
-
<Button
|
|
89
|
-
|
|
90
|
-
onClick={() =>
|
|
91
|
-
toast({
|
|
92
|
-
title: "Upload Iniciado",
|
|
93
|
-
type: "success", // Automático: Usa cor secondary
|
|
94
|
-
})
|
|
95
|
-
}
|
|
96
|
-
>
|
|
97
|
-
Transferir Dados
|
|
53
|
+
</HStack>
|
|
54
|
+
|
|
55
|
+
<Button variant="accent" w="full" mt={4}>
|
|
56
|
+
Executar Diagnóstico
|
|
98
57
|
</Button>
|
|
99
|
-
</
|
|
100
|
-
|
|
101
|
-
|
|
58
|
+
</VStack>
|
|
59
|
+
</Card>
|
|
60
|
+
);
|
|
102
61
|
```
|
|
103
62
|
|
|
104
63
|
---
|
|
105
64
|
|
|
106
|
-
## 📜 Uso via CDN
|
|
65
|
+
## 📜 Uso via CDN
|
|
107
66
|
|
|
108
|
-
|
|
67
|
+
Para prototipagem rápida sem bundlers:
|
|
109
68
|
|
|
110
69
|
```html
|
|
111
|
-
<script src="https://unpkg.com/
|
|
112
|
-
<
|
|
113
|
-
<script src="https://unpkg.com/framer-motion@11/dist/framer-motion.js"></script>
|
|
114
|
-
|
|
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" />
|
|
117
|
-
|
|
118
|
-
<div id="root"></div>
|
|
119
|
-
|
|
120
|
-
<script>
|
|
121
|
-
const { ToastProvider, Button } = window.NocturnaUI;
|
|
122
|
-
|
|
123
|
-
const root = ReactDOM.createRoot(document.getElementById("root"));
|
|
124
|
-
root.render(React.createElement(ToastProvider));
|
|
125
|
-
</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" />
|
|
126
72
|
```
|
|
127
73
|
|
|
128
|
-
_Veja o [exemplo completo aqui](./examples/cdn/index.html)._
|
|
74
|
+
## _Veja o [exemplo completo aqui](./examples/cdn/index.html)._
|
|
129
75
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
## 🧪 Desenvolvimento
|
|
76
|
+
## 🤝 Contribuição
|
|
133
77
|
|
|
134
|
-
|
|
135
|
-
npm test # Roda testes unitários
|
|
136
|
-
npm run test:coverage # Relatório detalhado
|
|
137
|
-
```
|
|
78
|
+
Forks e Pull Requests são bem-vindos. Consulte o guia de contribuição para começar.
|
|
138
79
|
|
|
139
|
-
|
|
80
|
+
**Licença ISC** • Criado por [Ruan Oliveira Sena](https://github.com/gothd)
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface AccordionProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
4
|
/**
|
|
4
5
|
* Lista de seções do acordeão.
|
|
5
|
-
* Define o ID, título e conteúdo de cada painel.
|
|
6
6
|
*/
|
|
7
7
|
items: Array<{
|
|
8
|
-
/** Identificador único
|
|
9
|
-
id
|
|
10
|
-
/** Texto do cabeçalho
|
|
8
|
+
/** Identificador único do item. Se omitido, será gerado pelo índice. */
|
|
9
|
+
id?: string;
|
|
10
|
+
/** Texto do cabeçalho */
|
|
11
11
|
title: string;
|
|
12
12
|
/** Conteúdo a ser revelado (ReactNode) */
|
|
13
13
|
content: React.ReactNode;
|
|
14
14
|
}>;
|
|
15
|
+
/** Permite múltiplas seções abertas ao mesmo tempo */
|
|
16
|
+
allowMultiple?: boolean;
|
|
15
17
|
/**
|
|
16
18
|
* Define a estética visual.
|
|
17
19
|
* @default "primary"
|
|
18
20
|
*/
|
|
19
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
21
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Componente de Acordeão com animações de altura (Framer Motion) e estética brutalista.
|
|
@@ -1,5 +1,7 @@
|
|
|
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
|
*/
|
|
@@ -8,7 +10,7 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
8
10
|
* Define o tema de cores.
|
|
9
11
|
* @default "primary"
|
|
10
12
|
*/
|
|
11
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
13
|
+
variant?: "primary" | "secondary" | "accent" | "ghost" | "danger" | "warning";
|
|
12
14
|
/**
|
|
13
15
|
* Dimensões e escala de fonte do badge.
|
|
14
16
|
* - `sm`: Para contextos densos ou listas.
|
|
@@ -28,5 +30,5 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
28
30
|
* Componente de Badge (Emblema) para status, tags ou categorias.
|
|
29
31
|
* Utiliza tipografia serifada e uppercase para reforçar a estética gótica/brutalista.
|
|
30
32
|
*/
|
|
31
|
-
export declare const Badge:
|
|
33
|
+
export declare const Badge: PolymorphicComponent<BadgeProps>;
|
|
32
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,18 +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
7
|
* @default "primary"
|
|
6
8
|
*/
|
|
7
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
9
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
8
10
|
/**
|
|
9
11
|
* Controla o tamanho e o padding.
|
|
10
12
|
* @default "md"
|
|
11
13
|
*/
|
|
12
14
|
size?: "sm" | "md" | "lg";
|
|
15
|
+
/**
|
|
16
|
+
* Define o estado de loading.
|
|
17
|
+
* @default false
|
|
18
|
+
*/
|
|
19
|
+
isLoading?: boolean;
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
15
22
|
* Botão primário com estética brutalista.
|
|
16
23
|
* Utiliza sombras rígidas (hard shadows) e transições de alto contraste.
|
|
17
24
|
*/
|
|
18
|
-
export declare const Button:
|
|
25
|
+
export declare const Button: PolymorphicComponent<ButtonProps>;
|
|
@@ -1,10 +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
7
|
* @default "primary"
|
|
6
8
|
*/
|
|
7
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
9
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
8
10
|
/**
|
|
9
11
|
* Título principal do card. Renderizado em uppercase e fonte serifada.
|
|
10
12
|
* Se omitido, o cabeçalho não será renderizado.
|
|
@@ -14,6 +16,10 @@ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
14
16
|
* Texto de apoio renderizado logo abaixo do título em fonte sans-serif.
|
|
15
17
|
*/
|
|
16
18
|
description?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Conteúdo opcional renderizado na base do card.
|
|
21
|
+
*/
|
|
22
|
+
footer?: React.ReactNode;
|
|
17
23
|
/**
|
|
18
24
|
* Controla a tag HTML usada para o título (acessibilidade).
|
|
19
25
|
* Permite ajustar a hierarquia semântica sem mudar o estilo visual.
|
|
@@ -21,16 +27,15 @@ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
21
27
|
*/
|
|
22
28
|
headingLevel?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
23
29
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @default "div"
|
|
30
|
+
* Define a família da fonte da descrição.
|
|
31
|
+
* @default "sans"
|
|
27
32
|
*/
|
|
28
|
-
|
|
33
|
+
descriptionFontFamily?: SystemProps["fontFamily"];
|
|
29
34
|
}
|
|
30
35
|
/**
|
|
31
36
|
* Container fundamental da Nocturna UI.
|
|
32
37
|
* Possui comportamento de Flex Column para garantir que o conteúdo ocupe a altura disponível,
|
|
33
38
|
* além de sombras rígidas (hard shadows) interativas no hover.
|
|
34
39
|
*/
|
|
35
|
-
export declare const Card:
|
|
40
|
+
export declare const Card: PolymorphicComponent<CardProps>;
|
|
36
41
|
export {};
|
|
@@ -1,15 +1,21 @@
|
|
|
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
|
* @default "primary"
|
|
11
12
|
*/
|
|
12
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
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;
|
|
13
19
|
}
|
|
14
20
|
/**
|
|
15
21
|
* Checkbox customizado com estética brutalista.
|
|
@@ -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,5 +1,6 @@
|
|
|
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
5
|
* Define o tema visual do input seguindo a paleta Cyber Goth.
|
|
5
6
|
* - `primary`: Bone White (Padrão)
|
|
@@ -7,9 +8,10 @@ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
|
|
|
7
8
|
* - `accent`: Phantom Pink
|
|
8
9
|
* - `danger`: Sanguine Red
|
|
9
10
|
* - `warning`: Cyber Gold
|
|
11
|
+
* - `ghost`: Stealth Mode (Sem bordas, fundo sutil)
|
|
10
12
|
* @default "primary"
|
|
11
13
|
*/
|
|
12
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
14
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
13
15
|
/**
|
|
14
16
|
* Dimensões do input.
|
|
15
17
|
* - `sm`: Compacto (32px altura aprox).
|
|
@@ -26,5 +28,13 @@ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
|
|
|
26
28
|
* Se existir, o input assume a cor `danger` automaticamente.
|
|
27
29
|
*/
|
|
28
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;
|
|
29
39
|
}
|
|
30
40
|
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface MenuProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLButtonElement>, "color"> {
|
|
3
4
|
/** Lista de itens do menu. */
|
|
4
5
|
items: Array<{
|
|
5
|
-
/** Identificador único do item. */
|
|
6
|
-
id
|
|
6
|
+
/** Identificador único do item. Se omitido, será gerado pelo índice. */
|
|
7
|
+
id?: string;
|
|
7
8
|
/** Texto do item. */
|
|
8
9
|
label: string;
|
|
9
10
|
/** Ícone opcional à esquerda. */
|
|
@@ -19,7 +20,7 @@ export interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
19
20
|
* Define o tema visual do menu.
|
|
20
21
|
* @default "primary"
|
|
21
22
|
*/
|
|
22
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
23
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
23
24
|
/** Elemento gatilho opcional. Se omitido, usa ícone padrão. */
|
|
24
25
|
trigger?: React.ReactNode;
|
|
25
26
|
/** Alinhamento do dropdown. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
interface ModalProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
4
|
/**
|
|
4
5
|
* Controla a visibilidade do modal.
|
|
5
6
|
* O componente é renderizado via React Portal no `document.body`.
|
|
@@ -29,7 +30,11 @@ interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
29
30
|
* Define o tema visual do modal.
|
|
30
31
|
* @default "primary"
|
|
31
32
|
*/
|
|
32
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
33
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
34
|
+
/** Define a largura máxima do modal.
|
|
35
|
+
* @default "md"
|
|
36
|
+
*/
|
|
37
|
+
size?: "sm" | "md" | "lg" | "xl" | "full";
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
35
40
|
* Modal acessível com estética brutalista.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface ProgressProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
4
|
/**
|
|
4
5
|
* Valor atual do progresso.
|
|
5
6
|
* Utilizado apenas quando `mode="value"`.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
interface ScrollProps extends Omit<SystemProps, "as">, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
4
|
/**
|
|
4
5
|
* Conteúdo que será rolado.
|
|
5
6
|
* Deve exceder a altura definida em `maxHeight` para ativar a rolagem.
|
|
@@ -11,11 +12,14 @@ interface ScrollProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
11
12
|
*/
|
|
12
13
|
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @default "400px"
|
|
15
|
+
* Define a direção da rolagem.
|
|
16
|
+
* @default "vertical"
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
orientation?: "vertical" | "horizontal" | "both";
|
|
19
|
+
/**
|
|
20
|
+
* Se verdadeiro, oculta visualmente a barra de rolagem mantendo a funcionalidade.
|
|
21
|
+
*/
|
|
22
|
+
hideScrollbar?: boolean;
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
25
|
* Container de rolagem com scrollbar customizada cross-browser (Webkit & Firefox).
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
label: string;
|
|
5
|
-
}
|
|
6
|
-
export interface SelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "value"> {
|
|
2
|
+
import { SystemProps } from '../utils/system';
|
|
3
|
+
export interface SelectProps extends Omit<SystemProps, "as">, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange" | "value" | "color"> {
|
|
7
4
|
/**
|
|
8
5
|
* Lista de opções disponíveis para seleção.
|
|
9
6
|
*/
|
|
@@ -25,7 +22,7 @@ export interface SelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonE
|
|
|
25
22
|
onChange?: (value: string) => void;
|
|
26
23
|
/**
|
|
27
24
|
* Texto exibido quando nenhum valor está selecionado.
|
|
28
|
-
* @default "
|
|
25
|
+
* @default "Selecionar..."
|
|
29
26
|
*/
|
|
30
27
|
placeholder?: string;
|
|
31
28
|
/**
|
|
@@ -36,7 +33,7 @@ export interface SelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonE
|
|
|
36
33
|
* Define o tema visual.
|
|
37
34
|
* @default "primary"
|
|
38
35
|
*/
|
|
39
|
-
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
36
|
+
variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
|
|
40
37
|
/**
|
|
41
38
|
* Altura do componente.
|
|
42
39
|
* - `sm`: Compacto (32px).
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
2
|
+
import { PolymorphicComponent } from '../types/polymorphic';
|
|
3
|
+
import { SystemProps } from '../utils/system';
|
|
4
|
+
interface SeparatorProps extends SystemProps, Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
3
5
|
/**
|
|
4
6
|
* Define o tema visual das linhas e do texto.
|
|
5
7
|
* @default "primary"
|
|
6
8
|
*/
|
|
7
9
|
variant?: "primary" | "secondary" | "accent" | "danger" | "warning";
|
|
10
|
+
/**
|
|
11
|
+
* Orientação do separador.
|
|
12
|
+
* - `horizontal`: Cria uma linha de largura total (padrão).
|
|
13
|
+
* - `vertical`: Cria uma linha de altura total (útil em Flex rows).
|
|
14
|
+
* @default "horizontal"
|
|
15
|
+
*/
|
|
16
|
+
orientation?: "horizontal" | "vertical";
|
|
8
17
|
/**
|
|
9
18
|
* Texto opcional exibido no centro do separador.
|
|
10
19
|
* As linhas se ajustam automaticamente ao redor do texto.
|
|
11
20
|
* Renderizado em uppercase e com espaçamento de letras estendido.
|
|
12
21
|
*/
|
|
13
22
|
label?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Polimorfismo: Permite alterar o elemento HTML raiz.
|
|
16
|
-
* Útil para semântica (ex: renderizar como `li` em listas ou `hr` estilizado).
|
|
17
|
-
* @default "div"
|
|
18
|
-
*/
|
|
19
|
-
as?: React.ElementType;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
25
|
* Divisor visual com estética brutalista.
|
|
23
26
|
* Cria uma linha horizontal (ou duas, se houver rótulo) para separar seções de conteúdo.
|
|
24
27
|
*/
|
|
25
|
-
export declare const Separator:
|
|
28
|
+
export declare const Separator: PolymorphicComponent<SeparatorProps>;
|
|
26
29
|
export {};
|