leira-ui 1.1.0 → 1.2.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
@@ -20,6 +20,11 @@
20
20
  <img src="https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript" alt="TypeScript" />
21
21
  </p>
22
22
 
23
+ <p align="center">
24
+ <a href="https://github.com/citylightsnewer/leira-ui"><img src="https://img.shields.io/badge/GitHub-Repositorio-181717?logo=github" alt="GitHub" /></a>
25
+ <a href="https://ko-fi.com/leira_qc"><img src="https://img.shields.io/badge/Ko--fi-Donar-FF5E5B?logo=kofi" alt="Ko-fi" /></a>
26
+ </p>
27
+
23
28
  ---
24
29
 
25
30
  ## 📸 Vista Previa
@@ -44,35 +49,29 @@
44
49
 
45
50
  ## 📦 Instalación
46
51
 
47
- ### Opción 1: Paquete NPM (Recomendado)
48
-
49
52
  ```bash
50
- npm install leira-ui
53
+ npm install leira-ui lucide-react
51
54
  ```
52
55
 
53
56
  ```bash
54
- pnpm add leira-ui
57
+ pnpm add leira-ui lucide-react
55
58
  ```
56
59
 
57
60
  ```bash
58
- yarn add leira-ui
61
+ yarn add leira-ui lucide-react
59
62
  ```
60
63
 
61
- ### Opción 2: Copiar y Pegar
62
-
63
- Visita la [documentación](https://leira-ui.vercel.app) y copia el código de cada componente directamente a tu proyecto.
64
-
65
64
  ---
66
65
 
67
66
  ## ⚡ Inicio Rápido
68
67
 
69
- ### 1. Instala las dependencias
68
+ ### 1. Importa los estilos en tu archivo principal (main.tsx o App.tsx)
70
69
 
71
- ```bash
72
- npm install leira-ui lucide-react
70
+ ```tsx
71
+ import 'leira-ui/styles.css'
73
72
  ```
74
73
 
75
- ### 2. Importa y usa los componentes
74
+ ### 2. Usa los componentes
76
75
 
77
76
  ```tsx
78
77
  import { Button, Card, CardBody, Input, Alert } from 'leira-ui'
@@ -94,20 +93,55 @@ function App() {
94
93
 
95
94
  ## 🧩 Componentes Disponibles
96
95
 
97
- | Componente | Descripción | Requiere lucide-react |
98
- |------------|-------------|:---------------------:|
99
- | `Button` | Botones con variantes, tamaños y estados de carga | ❌ |
100
- | `Card` | Tarjetas con header, body, footer y hover effects | |
101
- | `Input` | Campos de entrada con validación e iconos | ❌ |
102
- | `Textarea` | Área de texto con validación | ❌ |
103
- | `Alert` | Alertas de notificación con variantes | ✅ |
104
- | `Modal` | Modales con animaciones | ✅ |
105
- | `Badge` | Etiquetas y badges con estilos | ❌ |
106
- | `Tabs` | Pestañas con estilos pill y underline | ❌ |
107
- | `Accordion` | Acordeones colapsables con animaciones | |
108
- | `Tooltip` | Tooltips con posicionamiento flexible | ❌ |
109
- | `Spinner` | Indicadores de carga y skeletons | ❌ |
110
- | `Carousel` | Carruseles de imágenes, cards y testimonios | ✅ |
96
+ ### Formularios
97
+ | Componente | Descripción |
98
+ |------------|-------------|
99
+ | `Button` | Botones con variantes, tamaños y estados de carga |
100
+ | `Input` | Campos de entrada con validación e iconos |
101
+ | `Textarea` | Área de texto con validación |
102
+
103
+ ### Layout
104
+ | Componente | Descripción |
105
+ |------------|-------------|
106
+ | `Card` | Tarjetas con header, body, footer y hover effects |
107
+ | `ImageCard` | Cards con imagen destacada |
108
+
109
+ ### Navegación
110
+ | Componente | Descripción |
111
+ |------------|-------------|
112
+ | `Navbar` | Barra de navegación responsive con dropdowns |
113
+ | `Sidebar` | Menú lateral colapsable |
114
+ | `DropdownMenu` | Menú desplegable |
115
+ | `Breadcrumb` | Navegación de migas de pan |
116
+ | `Tabs` | Pestañas con estilos pill y underline |
117
+
118
+ ### Feedback
119
+ | Componente | Descripción |
120
+ |------------|-------------|
121
+ | `Alert` | Alertas de notificación con variantes |
122
+ | `Modal` | Modales con animaciones |
123
+ | `Tooltip` | Tooltips con posicionamiento flexible |
124
+ | `Spinner` | Indicadores de carga |
125
+ | `Skeleton` | Placeholders de carga |
126
+
127
+ ### Secciones
128
+ | Componente | Descripción |
129
+ |------------|-------------|
130
+ | `SimpleFooter` | Footer minimalista |
131
+ | `MultiColumnFooter` | Footer con múltiples columnas |
132
+ | `CenteredFooter` | Footer centrado |
133
+ | `NewsletterFooter` | Footer con suscripción |
134
+
135
+ ### Data Display
136
+ | Componente | Descripción |
137
+ |------------|-------------|
138
+ | `Badge` | Etiquetas y badges con estilos |
139
+ | `Accordion` | Acordeones colapsables con animaciones |
140
+ | `Carousel` | Carrusel básico |
141
+ | `ImageCarousel` | Carrusel de imágenes |
142
+ | `CardCarousel` | Carrusel de cards |
143
+ | `CoverflowCarousel` | Carrusel 3D con perspectiva |
144
+ | `TestimonialCarousel` | Carrusel de testimonios |
111
145
 
112
146
  ---
113
147
 
@@ -117,17 +151,11 @@ Visita nuestra documentación completa con ejemplos interactivos:
117
151
 
118
152
  🔗 **[leira-ui.vercel.app](https://leira-ui.vercel.app)**
119
153
 
120
- En la documentación encontrarás:
121
- - ✅ Ejemplos interactivos de cada componente
122
- - ✅ Código completo para copiar
123
- - ✅ Guía de instalación paso a paso
124
- - ✅ Props y variantes de cada componente
125
-
126
154
  ---
127
155
 
128
156
  ## 🎨 Personalización
129
157
 
130
- Los componentes usan variables CSS que puedes personalizar en tu proyecto:
158
+ Los componentes usan variables CSS que puedes personalizar:
131
159
 
132
160
  ```css
133
161
  :root {
@@ -157,47 +185,12 @@ pnpm install
157
185
  # Iniciar servidor de desarrollo
158
186
  pnpm dev
159
187
 
160
- # Build documentación (Vercel)
161
- pnpm build
162
-
163
188
  # Build paquete NPM
164
189
  pnpm build:lib
165
190
  ```
166
191
 
167
192
  ---
168
193
 
169
- ## 📁 Estructura del Proyecto
170
-
171
- ```
172
- leira-ui/
173
- ├── src/
174
- │ ├── components/
175
- │ │ ├── ui/ # 📦 Componentes (NPM)
176
- │ │ │ ├── Button.tsx
177
- │ │ │ ├── Card.tsx
178
- │ │ │ ├── Input.tsx
179
- │ │ │ └── ...
180
- │ │ └── docs/ # 🌐 Solo documentación
181
- │ └── pages/ # 🌐 Páginas de docs
182
- ├── dist/ # Build Vercel
183
- ├── dist-lib/ # Build NPM
184
- └── package.json
185
- ```
186
-
187
- ---
188
-
189
- ## 🤝 Contribuir
190
-
191
- ¡Las contribuciones son bienvenidas! Si tienes ideas para nuevos componentes o mejoras:
192
-
193
- 1. Haz fork del repositorio
194
- 2. Crea una rama (`git checkout -b feature/nuevo-componente`)
195
- 3. Haz commit de tus cambios (`git commit -m 'Agregar nuevo componente'`)
196
- 4. Push a la rama (`git push origin feature/nuevo-componente`)
197
- 5. Abre un Pull Request
198
-
199
- ---
200
-
201
194
  ## 📄 Licencia
202
195
 
203
196
  MIT © Leira UI
@@ -50,4 +50,15 @@ interface TestimonialCarouselProps {
50
50
  className?: string;
51
51
  }
52
52
  export declare function TestimonialCarousel({ testimonials, autoPlay, interval, className }: TestimonialCarouselProps): import("react/jsx-runtime").JSX.Element;
53
+ interface CoverflowCarouselProps {
54
+ images: Array<{
55
+ src: string;
56
+ alt: string;
57
+ caption?: string;
58
+ }>;
59
+ autoPlay?: boolean;
60
+ interval?: number;
61
+ className?: string;
62
+ }
63
+ export declare function CoverflowCarousel({ images, autoPlay, interval, className }: CoverflowCarouselProps): import("react/jsx-runtime").JSX.Element;
53
64
  export {};
@@ -0,0 +1,52 @@
1
+ import { type ReactNode } from 'react';
2
+ interface FooterLink {
3
+ label: string;
4
+ href: string;
5
+ }
6
+ interface FooterSection {
7
+ title: string;
8
+ links: FooterLink[];
9
+ }
10
+ interface SocialLink {
11
+ icon: ReactNode;
12
+ href: string;
13
+ label: string;
14
+ }
15
+ interface SimpleFooterProps {
16
+ logo?: ReactNode;
17
+ copyright?: string;
18
+ links?: FooterLink[];
19
+ className?: string;
20
+ }
21
+ export declare function SimpleFooter({ logo, copyright, links, className }: SimpleFooterProps): import("react/jsx-runtime").JSX.Element;
22
+ interface MultiColumnFooterProps {
23
+ logo?: ReactNode;
24
+ description?: string;
25
+ sections: FooterSection[];
26
+ socialLinks?: SocialLink[];
27
+ copyright?: string;
28
+ className?: string;
29
+ }
30
+ export declare function MultiColumnFooter({ logo, description, sections, socialLinks, copyright, className }: MultiColumnFooterProps): import("react/jsx-runtime").JSX.Element;
31
+ interface CenteredFooterProps {
32
+ logo?: ReactNode;
33
+ tagline?: string;
34
+ links?: FooterLink[];
35
+ socialLinks?: SocialLink[];
36
+ copyright?: string;
37
+ className?: string;
38
+ }
39
+ export declare function CenteredFooter({ logo, tagline, links, socialLinks, copyright, className }: CenteredFooterProps): import("react/jsx-runtime").JSX.Element;
40
+ interface NewsletterFooterProps {
41
+ logo?: ReactNode;
42
+ title?: string;
43
+ description?: string;
44
+ inputPlaceholder?: string;
45
+ buttonText?: string;
46
+ onSubmit?: (email: string) => void;
47
+ sections?: FooterSection[];
48
+ copyright?: string;
49
+ className?: string;
50
+ }
51
+ export declare function NewsletterFooter({ logo, title, description, inputPlaceholder, buttonText, onSubmit, sections, copyright, className }: NewsletterFooterProps): import("react/jsx-runtime").JSX.Element;
52
+ export {};
@@ -0,0 +1,45 @@
1
+ import { type ReactNode } from 'react';
2
+ interface MenuItem {
3
+ id: string;
4
+ label: string;
5
+ href?: string;
6
+ icon?: ReactNode;
7
+ onClick?: () => void;
8
+ children?: MenuItem[];
9
+ disabled?: boolean;
10
+ }
11
+ interface NavbarProps {
12
+ logo?: ReactNode;
13
+ items: MenuItem[];
14
+ variant?: 'default' | 'transparent' | 'bordered';
15
+ sticky?: boolean;
16
+ className?: string;
17
+ actions?: ReactNode;
18
+ }
19
+ interface DropdownMenuProps {
20
+ trigger: ReactNode;
21
+ items: MenuItem[];
22
+ position?: 'left' | 'right';
23
+ className?: string;
24
+ }
25
+ export declare function Navbar({ logo, items, variant, sticky, className, actions }: NavbarProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare function DropdownMenu({ trigger, items, position, className }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
27
+ interface SidebarProps {
28
+ items: MenuItem[];
29
+ header?: ReactNode;
30
+ footer?: ReactNode;
31
+ collapsed?: boolean;
32
+ className?: string;
33
+ }
34
+ export declare function Sidebar({ items, header, footer, collapsed, className }: SidebarProps): import("react/jsx-runtime").JSX.Element;
35
+ interface BreadcrumbItem {
36
+ label: string;
37
+ href?: string;
38
+ }
39
+ interface BreadcrumbProps {
40
+ items: BreadcrumbItem[];
41
+ separator?: ReactNode;
42
+ className?: string;
43
+ }
44
+ export declare function Breadcrumb({ items, separator, className }: BreadcrumbProps): import("react/jsx-runtime").JSX.Element;
45
+ export {};
@@ -8,6 +8,8 @@ export { Spinner, Skeleton } from './Spinner';
8
8
  export { Tooltip } from './Tooltip';
9
9
  export { Tabs } from './Tabs';
10
10
  export { Accordion } from './Accordion';
11
+ export { Navbar, DropdownMenu, Sidebar, Breadcrumb } from './Menu';
12
+ export { SimpleFooter, MultiColumnFooter, CenteredFooter, NewsletterFooter } from './Footer';
11
13
  export { Badge } from './Badge';
12
- export { Carousel, ImageCarousel, CardCarousel, TestimonialCarousel } from './Carousel';
14
+ export { Carousel, ImageCarousel, CardCarousel, TestimonialCarousel, CoverflowCarousel } from './Carousel';
13
15
  export type { ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes } from 'react';
@@ -1 +1 @@
1
- :root{--bg-primary: #0a0a0f;--bg-secondary: #12121a;--bg-card: #16161f;--bg-hover: #1e1e2a;--text-primary: #ffffff;--text-secondary: #a0a0b0;--text-muted: #666680;--border-color: #2a2a3a}.gradient-text{background:linear-gradient(135deg,#8b5cf6,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}@keyframes fade-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.animate-scale-in{animation:scale-in .2s ease-out}
1
+ :root{--bg-primary: #0a0a0f;--bg-secondary: #12121a;--bg-card: #16161f;--bg-hover: #1e1e2a;--text-primary: #ffffff;--text-secondary: #a0a0b0;--text-muted: #666680;--border-color: #2a2a3a}.gradient-text{background:linear-gradient(135deg,#8b5cf6,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}@keyframes fade-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.animate-scale-in{animation:scale-in .2s ease-out}@keyframes slide-in-right{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.animate-slide-in-right{animation:slide-in-right .3s ease-out}