nocturna-ui 0.0.3 → 0.0.5

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