leira-ui 1.0.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 +62 -69
- package/dist-lib/Carousel.d.ts +11 -0
- package/dist-lib/Footer.d.ts +52 -0
- package/dist-lib/Menu.d.ts +45 -0
- package/dist-lib/index.d.ts +4 -1
- package/dist-lib/leira-ui.css +1 -0
- package/dist-lib/leira-ui.es.js +814 -327
- package/dist-lib/leira-ui.es.js.map +1 -1
- package/dist-lib/leira-ui.umd.js +65 -36
- package/dist-lib/leira-ui.umd.js.map +1 -1
- package/dist-lib/styles.css +77 -0
- package/package.json +8 -4
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.
|
|
68
|
+
### 1. Importa los estilos en tu archivo principal (main.tsx o App.tsx)
|
|
70
69
|
|
|
71
|
-
```
|
|
72
|
-
|
|
70
|
+
```tsx
|
|
71
|
+
import 'leira-ui/styles.css'
|
|
73
72
|
```
|
|
74
73
|
|
|
75
|
-
### 2.
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
| `
|
|
101
|
-
| `Input` | Campos de entrada con validación e iconos |
|
|
102
|
-
| `Textarea` | Área de texto con validación |
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
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
|
package/dist-lib/Carousel.d.ts
CHANGED
|
@@ -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 {};
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import './styles.css';
|
|
1
2
|
export { Card, CardHeader, CardBody, CardFooter, ImageCard } from './Card';
|
|
2
3
|
export { Button } from './Button';
|
|
3
4
|
export { Input, Textarea } from './Input';
|
|
@@ -7,6 +8,8 @@ export { Spinner, Skeleton } from './Spinner';
|
|
|
7
8
|
export { Tooltip } from './Tooltip';
|
|
8
9
|
export { Tabs } from './Tabs';
|
|
9
10
|
export { Accordion } from './Accordion';
|
|
11
|
+
export { Navbar, DropdownMenu, Sidebar, Breadcrumb } from './Menu';
|
|
12
|
+
export { SimpleFooter, MultiColumnFooter, CenteredFooter, NewsletterFooter } from './Footer';
|
|
10
13
|
export { Badge } from './Badge';
|
|
11
|
-
export { Carousel, ImageCarousel, CardCarousel, TestimonialCarousel } from './Carousel';
|
|
14
|
+
export { Carousel, ImageCarousel, CardCarousel, TestimonialCarousel, CoverflowCarousel } from './Carousel';
|
|
12
15
|
export type { ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes } from 'react';
|
|
@@ -0,0 +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}@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}
|