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 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, 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.6**, introduzimos a identidade visual **Cyber Goth**, nomes de componentes padronizados (API Limpa) e tokens semânticos de cor.
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
+ ## 🔮 Documentação & Playground
24
25
 
25
- ```bash
26
- npm install nocturna-ui
27
- ```
28
-
29
- ### Dependências
26
+ Explore o grimório digital com exemplos interativos:
30
27
 
31
- A biblioteca requer React e Framer Motion.
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
- ## 🩸 Setup Inicial
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
- export default function App({ children }) {
49
- return <ToastProvider>{children}</ToastProvider>;
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, Badge, useToast } from "nocturna-ui";
41
+ import { Button, Card, VStack, Text, Badge } from "nocturna-ui";
75
42
 
76
- export const Ritual = () => {
77
- const { toast } = useToast();
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
- return (
80
- <Card title="Protocolo de Rede" variant="secondary">
81
- <div className="flex gap-4 mb-4">
82
- <Badge variant="secondary">Online</Badge>
83
- <Badge variant="primary" styleType="solid">
84
- v2.4
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
- </div>
87
-
88
- <Button
89
- variant="accent"
90
- onClick={() =>
91
- toast({
92
- title: "Upload Iniciado",
93
- type: "success", // Automático: Usa cor secondary
94
- })
95
- }
96
- >
97
- Transferir Dados
53
+ </HStack>
54
+
55
+ <Button variant="accent" w="full" mt={4}>
56
+ Executar Diagnóstico
98
57
  </Button>
99
- </Card>
100
- );
101
- };
58
+ </VStack>
59
+ </Card>
60
+ );
102
61
  ```
103
62
 
104
63
  ---
105
64
 
106
- ## 📜 Uso via CDN (Vanilla JS)
65
+ ## 📜 Uso via CDN
107
66
 
108
- A biblioteca injeta uma ponte global `window.NocturnaUI` para uso sem bundlers.
67
+ Para prototipagem rápida sem bundlers:
109
68
 
110
69
  ```html
111
- <script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
112
- <script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
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
- ```bash
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
- Desenvolvido com 🖤 por **gothd**.
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
- export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
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 para controle de estado */
9
- id: string;
10
- /** 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 */
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
- interface BadgeProps 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
  */
@@ -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: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
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
- export interface ButtonProps 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
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: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
25
+ export declare const Button: PolymorphicComponent<ButtonProps>;
@@ -1,10 +1,12 @@
1
1
  import { default as React } from 'react';
2
- interface CardProps 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
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
- * Polimorfismo: Define qual elemento HTML raiz será renderizado.
25
- * Útil para semântica (ex: transformar em `section`, `article` ou `li`).
26
- * @default "div"
30
+ * Define a família da fonte da descrição.
31
+ * @default "sans"
27
32
  */
28
- as?: React.ElementType;
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: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
40
+ export declare const Card: PolymorphicComponent<CardProps>;
36
41
  export {};
@@ -1,15 +1,21 @@
1
1
  import { default as React } from 'react';
2
- interface CheckboxProps 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
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
- export interface InputProps 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
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
- export interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {
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: string;
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
- interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {
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
- export interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
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
- interface ScrollProps extends React.HTMLAttributes<HTMLDivElement> {
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
- * Altura máxima do container antes de ativar a rolagem.
15
- * Aceita valores CSS válidos (ex: "400px", "50vh", 300).
16
- * @default "400px"
15
+ * Define a direção da rolagem.
16
+ * @default "vertical"
17
17
  */
18
- maxHeight?: string | number;
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
- export interface RitualSelectOption {
3
- value: string;
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 "Select..."
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
- interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {
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: React.ForwardRefExoticComponent<SeparatorProps & React.RefAttributes<HTMLDivElement>>;
28
+ export declare const Separator: PolymorphicComponent<SeparatorProps>;
26
29
  export {};