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 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, tipografia serifada e estética minimalista.
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.5**, introduzimos o sistema de **Aliases**, permitindo importações mais limpas (ex: `Button` ao invés de `VoidButton`), e melhoramos a cobertura de testes.
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
- [![NPM Version](https://img.shields.io/npm/v/nocturna-ui?color=000000&label=npm&style=flat-square)](https://www.npmjs.com/package/nocturna-ui)
9
+ [![NPM Version](https://img.shields.io/npm/v/nocturna-ui?color=ff007f&label=v0.1.0&style=flat-square)](https://www.npmjs.com/package/nocturna-ui)
10
10
  [![Tests](https://github.com/gothd/nocturna-ui/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/gothd/nocturna-ui/actions)
11
11
  [![Coverage](https://img.shields.io/codecov/c/github/gothd/nocturna-ui?style=flat-square&color=white)](https://codecov.io/gh/gothd/nocturna-ui)
12
12
 
13
13
  ---
14
14
 
15
- ## 🔮 Documentação Completa
15
+ ## Novidades da v0.1.0
16
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/)
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
- ## 🌑 Instalação
24
-
25
- ```bash
26
- npm install nocturna-ui
27
- ```
28
-
29
- ### Dependências
24
+ ## 🔮 Documentação & Playground
30
25
 
31
- A biblioteca requer React e Framer Motion.
26
+ Explore o grimório digital com exemplos interativos:
32
27
 
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
- ## 🩸 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
32
+ ## 🌑 Instalação
47
33
 
48
- export default function App({ children }) {
49
- return <OmenToastProvider>{children}</OmenToastProvider>;
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, 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
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
- </Card>
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 (Vanilla JS)
65
+ ## 📜 Uso via CDN
101
66
 
102
- A biblioteca injeta uma ponte global `window.NocturnaUI` para uso sem bundlers.
67
+ Para prototipagem rápida sem bundlers:
103
68
 
104
69
  ```html
105
- <script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
106
- <script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
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 de uso completo pela CDN, com o ToastProvider](./examples/cdn/index.html)._
74
+ ## _Veja o [exemplo completo aqui](./examples/cdn/index.html)._
127
75
 
128
- ---
76
+ ## 🤝 Contribuição
129
77
 
130
- ## 🧪 Desenvolvimento
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
- Desenvolvido com 🖤 por **gothd**.
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
- export interface GrimoireAccordionItem {
3
- id: string;
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 para controle de estado */
14
- id: string;
15
- /** Texto do cabeçalho (sempre uppercase/serif) */
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
- * - `void`: Monocromático (Borda Branca).
23
- * - `blood`: Tons de vermelho sangue (Borda Vermelha).
24
- * @default "void"
19
+ * @default "primary"
25
20
  */
26
- variant?: "void" | "blood";
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 GrimoireAccordion: ({ items, variant, className, ...props }: GrimoireAccordionProps) => import("react/jsx-runtime").JSX.Element;
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
- interface SigilBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
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
- * - `void`: Padrão monocromático (Preto/Branco).
10
- * - `blood`: Tema agressivo (Vermelho/Preto) para erros ou destaques críticos.
11
- * @default "void"
11
+ * @default "primary"
12
12
  */
13
- variant?: "void" | "blood";
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 com fundo transparente/preto.
24
- * - `solid`: Fundo preenchido com a cor da variante.
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 SigilBadge: React.ForwardRefExoticComponent<SigilBadgeProps & React.RefAttributes<HTMLSpanElement>>;
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
- interface VoidButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
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
- * - `void`: Estilo padrão preto e branco.
6
- * - `blood`: Estilo vermelho escuro para ações perigosas ou destaque.
7
- * @default "void"
7
+ * @default "primary"
8
8
  */
9
- variant?: "void" | "blood";
9
+ variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
10
10
  /**
11
- * Controla o tamanho e o padding do botão.
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
- * O botão primário da Nocturna UI.
18
- * Utiliza sombras rígidas e transições brutas.
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 VoidButton: React.ForwardRefExoticComponent<VoidButtonProps & React.RefAttributes<HTMLButtonElement>>;
21
- export {};
25
+ export declare const Button: PolymorphicComponent<ButtonProps>;
@@ -1,12 +1,12 @@
1
1
  import { default as React } from 'react';
2
- interface NocturnaCardProps extends React.HTMLAttributes<HTMLDivElement> {
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
- * - `void`: Borda branca e sombra branca no hover.
6
- * - `blood`: Borda vermelha escura e sombra avermelhada no hover.
7
- * @default "void"
7
+ * @default "primary"
8
8
  */
9
- variant?: "void" | "blood";
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
- * Polimorfismo: Define qual elemento HTML raiz será renderizado.
27
- * Útil para semântica (ex: transformar em `section`, `article` ou `li`).
28
- * @default "div"
30
+ * Define a família da fonte da descrição.
31
+ * @default "sans"
29
32
  */
30
- as?: React.ElementType;
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 NocturnaCard: React.ForwardRefExoticComponent<NocturnaCardProps & React.RefAttributes<HTMLDivElement>>;
40
+ export declare const Card: PolymorphicComponent<CardProps>;
38
41
  export {};
@@ -1,22 +1,26 @@
1
1
  import { default as React } from 'react';
2
- interface HexCheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type"> {
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
- * - `void`: Padrão monocromático (Borda Branca / Check Preto).
11
- * - `blood`: Tema vermelho escuro (Borda Vermelha / Check Branco).
12
- * @default "void"
11
+ * @default "primary"
13
12
  */
14
- variant?: "void" | "blood";
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 HexCheckbox: React.ForwardRefExoticComponent<HexCheckboxProps & React.RefAttributes<HTMLInputElement>>;
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
- interface VeinInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
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
- * - `void`: Padrão monocromático (Borda Branca).
6
- * - `blood`: Tema vermelho escuro (Borda Vermelha e Texto Vermelho).
7
- * @default "void"
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?: "void" | "blood";
14
+ variant?: "primary" | "secondary" | "accent" | "danger" | "warning" | "ghost";
10
15
  /**
11
- * Dimensões do input (altura e padding).
12
- * - `sm`: Compacto para formulários densos.
13
- * - `md`: Tamanho padrão para legibilidade.
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
- * Texto do rótulo exibido acima do campo.
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 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
+ * 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
- 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> {
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: string;
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 (vermelho). */
14
+ /** Indica ação destrutiva. */
28
15
  danger?: boolean;
29
16
  /** Desabilita o item. */
30
17
  disabled?: boolean;
31
18
  }>;
32
- /** Tema visual: 'void' (Padrão) ou 'blood' (Crítico). */
33
- variant?: "void" | "blood";
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 AltarMenu: React.ForwardRefExoticComponent<AltarMenuProps & React.RefAttributes<HTMLButtonElement>>;
50
- export {};
39
+ export declare const Menu: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<HTMLButtonElement>>;