@e-burgos/tucu-ui 1.0.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 +1113 -0
- package/components/auth/forget-password-form.d.ts +16 -0
- package/components/auth/index.d.ts +4 -0
- package/components/auth/reset-pin-form.d.ts +18 -0
- package/components/auth/sign-in-form.d.ts +18 -0
- package/components/auth/sign-up-form.d.ts +21 -0
- package/components/blockchain/coin-card.d.ts +17 -0
- package/components/blockchain/coin-info-card.d.ts +15 -0
- package/components/blockchain/coin-listbox.d.ts +14 -0
- package/components/blockchain/collection-card.d.ts +19 -0
- package/components/blockchain/collection-select-list.d.ts +11 -0
- package/components/blockchain/currency-swap-icons.d.ts +7 -0
- package/components/blockchain/index.d.ts +9 -0
- package/components/blockchain/live-price-feed.d.ts +24 -0
- package/components/blockchain/nft-grid.d.ts +11 -0
- package/components/blockchain/transaction-info.d.ts +7 -0
- package/components/buttons/button/button-drip.d.ts +12 -0
- package/components/buttons/button/button-loader.d.ts +9 -0
- package/components/buttons/button/index.d.ts +23 -0
- package/components/buttons/hamburger.d.ts +6 -0
- package/components/buttons/index.d.ts +6 -0
- package/components/buttons/topup-button.d.ts +8 -0
- package/components/cards/author-card.d.ts +7 -0
- package/components/cards/card-container.d.ts +7 -0
- package/components/cards/card-title.d.ts +9 -0
- package/components/cards/index.d.ts +5 -0
- package/components/cards/panel-action-card.d.ts +16 -0
- package/components/cards/panel-card.d.ts +8 -0
- package/components/carousel/carousel-cards.d.ts +19 -0
- package/components/carousel/carousel-component.d.ts +41 -0
- package/components/carousel/carousel-image.d.ts +18 -0
- package/components/carousel/index.d.ts +3 -0
- package/components/common/avatar.d.ts +12 -0
- package/components/common/badge.d.ts +8 -0
- package/components/common/collapse.d.ts +7 -0
- package/components/common/index.d.ts +7 -0
- package/components/common/menu-item.d.ts +21 -0
- package/components/common/scrollbar-native.d.ts +14 -0
- package/components/common/scrollbar.d.ts +14 -0
- package/components/common/skeleton.d.ts +6 -0
- package/components/dialog/drawer-container.d.ts +8 -0
- package/components/dialog/drawer.d.ts +19 -0
- package/components/dialog/index.d.ts +5 -0
- package/components/dialog/modal.d.ts +21 -0
- package/components/dialog/sidebar-menu.d.ts +13 -0
- package/components/dialog/sidebar.d.ts +12 -0
- package/components/forms/checkbox.d.ts +38 -0
- package/components/forms/field-error-text.d.ts +19 -0
- package/components/forms/field-helper-text.d.ts +18 -0
- package/components/forms/file-input.d.ts +8 -0
- package/components/forms/form-system/example/error-container-example.d.ts +3 -0
- package/components/forms/form-system/example/form-example.d.ts +3 -0
- package/components/forms/form-system/example/form-methods-example.d.ts +3 -0
- package/components/forms/form-system/example/validations.d.ts +14 -0
- package/components/forms/form-system/form-field.d.ts +14 -0
- package/components/forms/form-system/form.d.ts +13 -0
- package/components/forms/form-system/hook-form.d.ts +3 -0
- package/components/forms/form-system/index.d.ts +10 -0
- package/components/forms/form-system/types/dependencies.type.d.ts +11 -0
- package/components/forms/form-system/types/extend-react-hook-form.type.d.ts +16 -0
- package/components/forms/form-system/types/index.d.ts +3 -0
- package/components/forms/form-system/types/validations.type.d.ts +9 -0
- package/components/forms/index.d.ts +17 -0
- package/components/forms/input-label.d.ts +9 -0
- package/components/forms/input-searcher.d.ts +7 -0
- package/components/forms/input-select.d.ts +24 -0
- package/components/forms/input-switch.d.ts +13 -0
- package/components/forms/input.d.ts +14 -0
- package/components/forms/pin-code.d.ts +97 -0
- package/components/forms/radio-group.d.ts +56 -0
- package/components/forms/radio.d.ts +87 -0
- package/components/forms/textarea.d.ts +10 -0
- package/components/forms/toggle-bar.d.ts +9 -0
- package/components/forms/uploader-two.d.ts +44 -0
- package/components/forms/uploader.d.ts +2 -0
- package/components/icons/arrow-link-icon.d.ts +1 -0
- package/components/icons/arrow-right.d.ts +1 -0
- package/components/icons/arrow-up.d.ts +1 -0
- package/components/icons/bitcoin.d.ts +1 -0
- package/components/icons/bnb.d.ts +1 -0
- package/components/icons/book.d.ts +1 -0
- package/components/icons/brands/facebook.d.ts +1 -0
- package/components/icons/brands/github.d.ts +1 -0
- package/components/icons/brands/instagram.d.ts +1 -0
- package/components/icons/brands/telegram.d.ts +1 -0
- package/components/icons/brands/twitter.d.ts +1 -0
- package/components/icons/calendar-icon.d.ts +1 -0
- package/components/icons/cardano.d.ts +1 -0
- package/components/icons/check.d.ts +1 -0
- package/components/icons/checkmark.d.ts +1 -0
- package/components/icons/chevron-down.d.ts +1 -0
- package/components/icons/chevron-forward.d.ts +1 -0
- package/components/icons/chevron-right.d.ts +1 -0
- package/components/icons/classic-layout-icon.d.ts +1 -0
- package/components/icons/close.d.ts +1 -0
- package/components/icons/compact-grid.d.ts +1 -0
- package/components/icons/compass.d.ts +1 -0
- package/components/icons/copy.d.ts +1 -0
- package/components/icons/disk.d.ts +1 -0
- package/components/icons/document.d.ts +1 -0
- package/components/icons/doge.d.ts +1 -0
- package/components/icons/dots-icon.d.ts +1 -0
- package/components/icons/ethereum-dark.d.ts +1 -0
- package/components/icons/ethereum.d.ts +1 -0
- package/components/icons/exchange.d.ts +1 -0
- package/components/icons/export-icon.d.ts +1 -0
- package/components/icons/external-link.d.ts +1 -0
- package/components/icons/eye.d.ts +1 -0
- package/components/icons/eyeslash.d.ts +1 -0
- package/components/icons/farm.d.ts +1 -0
- package/components/icons/flash.d.ts +1 -0
- package/components/icons/flow.d.ts +1 -0
- package/components/icons/gas-icon.d.ts +1 -0
- package/components/icons/guide-icon.d.ts +1 -0
- package/components/icons/history.d.ts +1 -0
- package/components/icons/home.d.ts +1 -0
- package/components/icons/horizontal-three-dots.d.ts +1 -0
- package/components/icons/icon-us-flag.d.ts +1 -0
- package/components/icons/index.d.ts +97 -0
- package/components/icons/info-circle.d.ts +1 -0
- package/components/icons/info-icon.d.ts +1 -0
- package/components/icons/left-align.d.ts +1 -0
- package/components/icons/level-icon.d.ts +1 -0
- package/components/icons/link-icon.d.ts +1 -0
- package/components/icons/live-pricing.d.ts +1 -0
- package/components/icons/lock-icon.d.ts +1 -0
- package/components/icons/long-arrow-left.d.ts +1 -0
- package/components/icons/long-arrow-right.d.ts +1 -0
- package/components/icons/long-arrow-up.d.ts +1 -0
- package/components/icons/loop-icon.d.ts +1 -0
- package/components/icons/lucide-react/index.d.ts +1 -0
- package/components/icons/media-play-icon.d.ts +1 -0
- package/components/icons/menu-icon.d.ts +2 -0
- package/components/icons/minimal-layout-icon.d.ts +1 -0
- package/components/icons/modern-layout-icon.d.ts +1 -0
- package/components/icons/moon.d.ts +1 -0
- package/components/icons/more-icon.d.ts +1 -0
- package/components/icons/normal-grid.d.ts +1 -0
- package/components/icons/option.d.ts +1 -0
- package/components/icons/play-icon.d.ts +1 -0
- package/components/icons/plus-circle.d.ts +1 -0
- package/components/icons/plus.d.ts +1 -0
- package/components/icons/pool.d.ts +1 -0
- package/components/icons/power.d.ts +1 -0
- package/components/icons/profile.d.ts +1 -0
- package/components/icons/question-icon.d.ts +1 -0
- package/components/icons/question-solid-icon.d.ts +1 -0
- package/components/icons/range-icon.d.ts +1 -0
- package/components/icons/refresh.d.ts +1 -0
- package/components/icons/retro-layout-icon.d.ts +1 -0
- package/components/icons/right-align.d.ts +1 -0
- package/components/icons/sand-clock.d.ts +1 -0
- package/components/icons/search.d.ts +1 -0
- package/components/icons/shut-down-icon.d.ts +1 -0
- package/components/icons/spike-bar.d.ts +1 -0
- package/components/icons/star-fill.d.ts +1 -0
- package/components/icons/star.d.ts +1 -0
- package/components/icons/sun.d.ts +1 -0
- package/components/icons/swap-icon.d.ts +1 -0
- package/components/icons/tag-icon.d.ts +1 -0
- package/components/icons/tag.d.ts +1 -0
- package/components/icons/tether.d.ts +1 -0
- package/components/icons/trading-bot-icon.d.ts +1 -0
- package/components/icons/trend-arrow-down-icon.d.ts +1 -0
- package/components/icons/trend-arrow-up-icon.d.ts +1 -0
- package/components/icons/tucu.d.ts +1 -0
- package/components/icons/unlocked.d.ts +1 -0
- package/components/icons/upload.d.ts +1 -0
- package/components/icons/usdc.d.ts +1 -0
- package/components/icons/verified-icon.d.ts +1 -0
- package/components/icons/verified.d.ts +1 -0
- package/components/icons/vertical-three-dots.d.ts +1 -0
- package/components/icons/vote-icon.d.ts +1 -0
- package/components/icons/warning.d.ts +1 -0
- package/components/index.d.ts +16 -0
- package/components/layouts/authentication/layout.d.ts +5 -0
- package/components/layouts/classic/layout.d.ts +16 -0
- package/components/layouts/header/header.d.ts +16 -0
- package/components/layouts/menus/collapsible-menu.d.ts +3 -0
- package/components/layouts/menus/expandable-sidebar.d.ts +8 -0
- package/components/layouts/menus/minimal-nav-menu.d.ts +5 -0
- package/components/layouts/minimal/layout.d.ts +24 -0
- package/components/layouts/root-layout.d.ts +18 -0
- package/components/links/active-link.d.ts +7 -0
- package/components/links/anchor-link.d.ts +3 -0
- package/components/links/index.d.ts +2 -0
- package/components/loaders/index.d.ts +3 -0
- package/components/loaders/loader.d.ts +20 -0
- package/components/loaders/progressbar.d.ts +64 -0
- package/components/loaders/spinner.d.ts +15 -0
- package/components/logos/index.d.ts +2 -0
- package/components/logos/logo-theme.d.ts +5 -0
- package/components/logos/logo.d.ts +13 -0
- package/components/notifications/alert.d.ts +12 -0
- package/components/notifications/index.d.ts +3 -0
- package/components/notifications/notification-card.d.ts +14 -0
- package/components/notifications/toast.d.ts +3 -0
- package/components/tabs/index.d.ts +3 -0
- package/components/tabs/param-tab.d.ts +13 -0
- package/components/tabs/tab-select.d.ts +10 -0
- package/components/tabs/tab.d.ts +20 -0
- package/components/typography/index.d.ts +39 -0
- package/components/utils/code-block.d.ts +8 -0
- package/components/utils/image.d.ts +16 -0
- package/components/utils/index.d.ts +5 -0
- package/components/utils/reveal-content.d.ts +6 -0
- package/components/utils/scroll-to-top.d.ts +5 -0
- package/components/utils/test-brand-classes.d.ts +1 -0
- package/hooks/index.d.ts +13 -0
- package/hooks/use-breakpoint.d.ts +1 -0
- package/hooks/use-click-away.d.ts +1 -0
- package/hooks/use-copy-to-clipboard.d.ts +1 -0
- package/hooks/use-element-size.d.ts +9 -0
- package/hooks/use-event-listener.d.ts +7 -0
- package/hooks/use-grid-switcher.d.ts +6 -0
- package/hooks/use-is-mobile.d.ts +4 -0
- package/hooks/use-is-mounted.d.ts +1 -0
- package/hooks/use-lock-body-scroll.d.ts +1 -0
- package/hooks/use-measure.d.ts +1 -0
- package/hooks/use-scrollable-slider.d.ts +7 -0
- package/hooks/use-toast-store.d.ts +17 -0
- package/hooks/use-window-scroll.d.ts +1 -0
- package/index.css +1 -0
- package/index.d.ts +10 -0
- package/index.js +133 -0
- package/index.mjs +44201 -0
- package/libs/framer-motion/fade-in-bottom.d.ts +18 -0
- package/libs/index.d.ts +3 -0
- package/libs/local-storage/index.d.ts +7 -0
- package/libs/range-map.d.ts +1 -0
- package/lucide-react/index.d.ts +1 -0
- package/package.json +76 -0
- package/react-router-dom/index.d.ts +1 -0
- package/storybook/components/StoryContainer.d.ts +6 -0
- package/storybook/components/pages/Accessibility.d.ts +1 -0
- package/storybook/components/pages/Introduction.d.ts +1 -0
- package/storybook/hooks/useDummy.d.ts +34 -0
- package/swiper-react/index.d.ts +2 -0
- package/themes/components/pages/not-found.d.ts +2 -0
- package/themes/components/theme-provider/app-routes.d.ts +17 -0
- package/themes/components/theme-provider/index.d.ts +26 -0
- package/themes/components/theme-provider/settings-button.d.ts +2 -0
- package/themes/components/theme-provider/settings-drawer.d.ts +3 -0
- package/themes/config.d.ts +106 -0
- package/themes/index.d.ts +9 -0
- package/themes/use-direction.d.ts +1 -0
- package/themes/use-theme-color.d.ts +10 -0
- package/themes/use-theme.d.ts +83 -0
package/README.md
ADDED
|
@@ -0,0 +1,1113 @@
|
|
|
1
|
+
# Tucu UI
|
|
2
|
+
|
|
3
|
+
A modern, comprehensive React component library built with TypeScript, Tailwind CSS, and designed for creating production-ready web applications with **automatic layout generation**, **powerful form systems**, and **specialized blockchain components**.
|
|
4
|
+
|
|
5
|
+
## 🌟 Storybook & Documentation
|
|
6
|
+
|
|
7
|
+
- **📚 [Live Documentation](https://main--683712ba90eaad206f988c65.chromatic.com/?path=/docs/1-documentation-1-introduction--documentation)** - Complete component documentation
|
|
8
|
+
- **🎨 [Interactive Storybook](https://main--683712ba90eaad206f988c65.chromatic.com/)** - Explore components in action
|
|
9
|
+
- **🔧 [Component Examples](https://main--683712ba90eaad206f988c65.chromatic.com/?path=/story/ui-components-buttons-button--default)** - See all variations and use cases
|
|
10
|
+
|
|
11
|
+
## 🚀 Key Features
|
|
12
|
+
|
|
13
|
+
### **🎨 Automatic Layout Generation**
|
|
14
|
+
|
|
15
|
+
Complete application layouts with minimal configuration via ThemeProvider - no manual layout coding required.
|
|
16
|
+
|
|
17
|
+
### **📝 Advanced Form System**
|
|
18
|
+
|
|
19
|
+
Centralized validation powered by React Hook Form with built-in error handling and accessibility.
|
|
20
|
+
|
|
21
|
+
### **🪙 Blockchain-Ready Components**
|
|
22
|
+
|
|
23
|
+
Specialized components for DeFi applications, NFT marketplaces, and crypto wallets.
|
|
24
|
+
|
|
25
|
+
### **🎭 Advanced Theming System**
|
|
26
|
+
|
|
27
|
+
26+ color presets including modern colors (Bufus Blue, Coral, Mint, Lavender), secondary/accent color support, dark/light mode, RTL support, and persistent user preferences. Dynamic color system with CSS variables for brand, secondary, accent, and semantic colors.
|
|
28
|
+
|
|
29
|
+
### **🎯 5000+ Icons Integrated**
|
|
30
|
+
|
|
31
|
+
Complete Lucide React integration + 97+ custom-designed icons including blockchain/crypto icons, layout controls, social brands, and specialized UI elements.
|
|
32
|
+
|
|
33
|
+
### **♿ Accessibility First**
|
|
34
|
+
|
|
35
|
+
WCAG 2.1 AA compliant components with proper ARIA attributes and keyboard navigation.
|
|
36
|
+
|
|
37
|
+
### **📱 Mobile-First Responsive**
|
|
38
|
+
|
|
39
|
+
Responsive design across all components with support for ultra-wide displays (up to 4K).
|
|
40
|
+
|
|
41
|
+
### **🌐 Integrated Routing**
|
|
42
|
+
|
|
43
|
+
Built-in React Router integration for seamless SPA development.
|
|
44
|
+
|
|
45
|
+
### **🎨 Tailwind CSS v4 Complete Integration**
|
|
46
|
+
|
|
47
|
+
Full Tailwind CSS v4 implementation with 15 comprehensive utility categories automatically available:
|
|
48
|
+
|
|
49
|
+
- **Layout & Positioning**: Aspect ratio, display, position, z-index, overflow
|
|
50
|
+
- **Sizing**: Width, height, max/min dimensions with arbitrary values
|
|
51
|
+
- **Spacing**: Padding, margin, gap with responsive breakpoints
|
|
52
|
+
- **Typography**: Font families, sizes, weights, spacing, colors, decoration
|
|
53
|
+
- **Flexbox & Grid**: Complete layout system with all properties
|
|
54
|
+
- **Background**: Colors, gradients, images, positioning, attachment, repeat, size
|
|
55
|
+
- **Borders**: Radius, width, colors, styles, outlines, offsets
|
|
56
|
+
- **Effects**: Shadows, opacity, blend modes, box-shadow utilities
|
|
57
|
+
- **Filters**: Blur, brightness, contrast, grayscale, hue-rotate, invert, saturate, sepia
|
|
58
|
+
- **Tables**: Layout, border spacing, border collapse, caption side
|
|
59
|
+
- **Transitions & Animation**: Properties, duration, timing, delay, animation classes
|
|
60
|
+
- **Transforms**: Backface visibility, perspective, rotate, scale, skew, translate
|
|
61
|
+
- **Interactivity**: Cursors, scroll behavior, snap, touch actions, user select, will-change
|
|
62
|
+
- **SVG**: Fill, stroke, stroke-width utilities
|
|
63
|
+
- **Accessibility**: Forced-color-adjust utilities
|
|
64
|
+
|
|
65
|
+
All utilities are configured through optimized `@source inline()` directives for maximum performance.
|
|
66
|
+
|
|
67
|
+
## 🔧 Core Technology Stack
|
|
68
|
+
|
|
69
|
+
Built on industry-leading libraries for maximum reliability:
|
|
70
|
+
|
|
71
|
+
- **[React 18+](https://react.dev/)** - Modern React with hooks and concurrent features
|
|
72
|
+
- **[TypeScript](https://www.typescriptlang.org/)** - Full type safety and excellent DX
|
|
73
|
+
- **[Tailwind CSS v4](https://tailwindcss.com/)** - Complete Tailwind v4 integration included with all utilities pre-configured
|
|
74
|
+
- **[React Hook Form](https://react-hook-form.com/)** - Performant form handling and validation
|
|
75
|
+
- **[Zustand](https://zustand-demo.pmnd.rs/)** - Lightweight state management for theming
|
|
76
|
+
- **[Lucide React](https://lucide.dev/)** - Beautiful, consistent icon library
|
|
77
|
+
- **[Framer Motion](https://www.framer.com/motion/)** - Smooth animations and transitions
|
|
78
|
+
- **[Recharts](https://recharts.org/)** - Composable charting library for data visualization
|
|
79
|
+
- **[Swiper](https://swiperjs.com/)** - Modern mobile touch slider
|
|
80
|
+
- **[React Dropzone](https://react-dropzone.js.org/)** - Simple HTML5 drag-drop zone
|
|
81
|
+
|
|
82
|
+
## 📦 Installation
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm install @e-burgos/tucu-ui
|
|
86
|
+
|
|
87
|
+
// or with pnpm
|
|
88
|
+
|
|
89
|
+
pnpm install @e-burgos/tucu-ui
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Import Tucu UI Styles
|
|
93
|
+
|
|
94
|
+
Add the following import to your main CSS file (usually `index.css` or `main.css`) to include all Tucu UI styles and Tailwind CSS utilities:
|
|
95
|
+
|
|
96
|
+
```css
|
|
97
|
+
@import '@e-burgos/tucu-ui/styles';
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Note:** Tucu UI includes a complete Tailwind CSS v4 setup with all utilities pre-configured. No additional Tailwind CSS installation or configuration is required.
|
|
101
|
+
|
|
102
|
+
### Advanced Color Customization
|
|
103
|
+
|
|
104
|
+
Tucu UI supports advanced color theming with multiple color layers:
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
:root {
|
|
108
|
+
--color-brand: #0184bf; /* Primary brand color */
|
|
109
|
+
--color-secondary: #00d6f2; /* Secondary color */
|
|
110
|
+
--color-accent: #f26522; /* Accent color */
|
|
111
|
+
--color-dark: #0d1321; /* Dark theme background */
|
|
112
|
+
--color-light: #fcfcfc; /* Light theme background */
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Available color presets include: Green, Black, Blue, Red, Purple, Orange, Rose, Pink, Yellow, Lime, Teal, Cyan, Navy, Maroon, Brown, Gray, Silver, Gold, Coral, Salmon, Chocolate, Tan, Beige, Mint, Lavender, Violet, Bufus, BufusBlue, BufusDark, BufusAccent, ThemeLight, ThemeDark.
|
|
117
|
+
|
|
118
|
+
## 🎯 Quick Start
|
|
119
|
+
|
|
120
|
+
### 1. **Basic Component Usage**
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
import { Button, Card, Input, Alert } from '@e-burgos/tucu-ui';
|
|
124
|
+
|
|
125
|
+
function App() {
|
|
126
|
+
return (
|
|
127
|
+
<Card className="p-6">
|
|
128
|
+
<h2 className="text-2xl font-bold mb-4">Welcome to Tucu UI</h2>
|
|
129
|
+
<Input placeholder="Enter your name" className="mb-4" />
|
|
130
|
+
<Button size="large" className="w-full">
|
|
131
|
+
Get Started
|
|
132
|
+
</Button>
|
|
133
|
+
<Alert variant="success" className="mt-4">
|
|
134
|
+
You're ready to build amazing UIs!
|
|
135
|
+
</Alert>
|
|
136
|
+
</Card>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 2. **Complete App with Auto-Generated Layout**
|
|
142
|
+
|
|
143
|
+
```tsx
|
|
144
|
+
import { ThemeProvider, LucideIcons } from '@e-burgos/tucu-ui';
|
|
145
|
+
|
|
146
|
+
const menuItems = [
|
|
147
|
+
{
|
|
148
|
+
name: 'Dashboard',
|
|
149
|
+
href: '/',
|
|
150
|
+
icon: <LucideIcons.Home />,
|
|
151
|
+
component: <DashboardPage />,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'Analytics',
|
|
155
|
+
href: '/analytics',
|
|
156
|
+
icon: <LucideIcons.BarChart3 />,
|
|
157
|
+
component: <AnalyticsPage />,
|
|
158
|
+
dropdownItems: [
|
|
159
|
+
{
|
|
160
|
+
name: 'Reports',
|
|
161
|
+
href: '/analytics/reports',
|
|
162
|
+
component: <ReportsPage />,
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: 'Insights',
|
|
166
|
+
href: '/analytics/insights',
|
|
167
|
+
component: <InsightsPage />,
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'Settings',
|
|
173
|
+
href: '/settings',
|
|
174
|
+
icon: <LucideIcons.Settings />,
|
|
175
|
+
component: <SettingsPage />,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'Profile',
|
|
179
|
+
href: '/profile',
|
|
180
|
+
icon: <LucideIcons.User />,
|
|
181
|
+
component: <ProfilePage />,
|
|
182
|
+
hide: true,
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
|
|
186
|
+
function App() {
|
|
187
|
+
return (
|
|
188
|
+
<ThemeProvider
|
|
189
|
+
// Layout Configuration
|
|
190
|
+
layout="minimal" // 'classic' | 'minimal' | 'none'
|
|
191
|
+
menuItems={menuItems}
|
|
192
|
+
logo={{ name: 'My', secondName: 'App' }}
|
|
193
|
+
// Theme Configuration
|
|
194
|
+
brandColor="Blue" // Available: 'Green' | 'Black' | 'Blue' | 'Red' | 'Purple' | 'Orange' | 'Rose' | 'Pink' | 'Yellow' | 'Lime' | 'Teal' | 'Cyan' | 'Navy' | 'Maroon' | 'Brown' | 'Gray' | 'Silver' | 'Gold' | 'Coral' | 'Salmon'
|
|
195
|
+
mode="light" // 'light' | 'dark'
|
|
196
|
+
// Advanced Color Customization
|
|
197
|
+
customPaletteColor={{
|
|
198
|
+
primary: '#0184bf', // Custom hex color for brand
|
|
199
|
+
secondary: '#00d6f2', // Custom hex color for secondary
|
|
200
|
+
accent: '#f26522', // Custom hex color for accent
|
|
201
|
+
dark: '#0d1321', // Custom hex color for dark mode background
|
|
202
|
+
light: '#fcfcfc', // Custom hex color for light mode background
|
|
203
|
+
}}
|
|
204
|
+
// UI Customization
|
|
205
|
+
showSettings={true} // Show/hide settings panel button
|
|
206
|
+
rightButton={<UserMenu />} // Custom component for top-right area
|
|
207
|
+
headerClassName="custom-header" // Custom CSS classes for header
|
|
208
|
+
contentClassName="custom-content" // Custom CSS classes for content area
|
|
209
|
+
className="custom-layout" // Custom CSS classes for entire layout
|
|
210
|
+
fullWidth={false} // Enable/disable full width layout
|
|
211
|
+
// Advanced Configuration
|
|
212
|
+
withRouterProvider={true} // Enable/disable automatic React Router setup
|
|
213
|
+
customRoutes={<CustomRoutes />} // Custom React Router Routes element
|
|
214
|
+
settingActions={{
|
|
215
|
+
disabledPreset: false, // Disable color preset selector
|
|
216
|
+
disabledLayout: false, // Disable layout selector
|
|
217
|
+
disabledMode: false, // Disable dark/light mode toggle
|
|
218
|
+
disabledDirection: false, // Disable RTL/LTR direction toggle
|
|
219
|
+
}}
|
|
220
|
+
/>
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### **ThemeProvider Props Reference**
|
|
226
|
+
|
|
227
|
+
| Prop | Type | Default | Description |
|
|
228
|
+
| ------------------------------ | ------------------------------------- | ----------- | --------------------------------------------------------------------------------- |
|
|
229
|
+
| `layout` | `'classic' \| 'minimal' \| 'none'` | `'minimal'` | Layout type: Classic (sidebar), Minimal (horizontal nav), None (no layout) |
|
|
230
|
+
| `menuItems` | `AppRoutesMenuItem[]` | Required | Navigation menu items with routing configuration |
|
|
231
|
+
| `logo` | `{name: string, secondName?: string}` | - | Application logo configuration |
|
|
232
|
+
| `brandColor` | `PresetColorType` | - | Primary brand color preset (auto-disabled if `customPaletteColor.primary` is set) |
|
|
233
|
+
| `mode` | `'light' \| 'dark'` | `'light'` | Initial theme mode |
|
|
234
|
+
| `customPaletteColor` | `object` | - | Advanced color customization |
|
|
235
|
+
| `customPaletteColor.primary` | `string \| PresetColorType` | - | Custom primary/brand color (hex or preset) |
|
|
236
|
+
| `customPaletteColor.secondary` | `string \| PresetColorType` | - | Custom secondary color (hex or preset) |
|
|
237
|
+
| `customPaletteColor.accent` | `string \| PresetColorType` | - | Custom accent color (hex or preset) |
|
|
238
|
+
| `customPaletteColor.dark` | `string \| PresetColorType` | - | Custom dark mode background color |
|
|
239
|
+
| `customPaletteColor.light` | `string \| PresetColorType` | - | Custom light mode background color |
|
|
240
|
+
| `showSettings` | `boolean` | `false` | Display settings panel toggle button |
|
|
241
|
+
| `rightButton` | `React.ReactNode` | - | Custom component for top-right header area |
|
|
242
|
+
| `headerClassName` | `string` | - | Custom CSS classes for header container |
|
|
243
|
+
| `contentClassName` | `string` | - | Custom CSS classes for main content area |
|
|
244
|
+
| `className` | `string` | - | Custom CSS classes for entire layout |
|
|
245
|
+
| `fullWidth` | `boolean` | `false` | Enable full-width layout (removes max-width constraints) |
|
|
246
|
+
| `withRouterProvider` | `boolean` | `true` | Enable automatic React Router setup |
|
|
247
|
+
| `customRoutes` | `ReactElement<typeof Routes>` | - | Custom React Router Routes element |
|
|
248
|
+
| `settingActions` | `ISettingAction` | - | Control which settings are disabled in the settings panel |
|
|
249
|
+
|
|
250
|
+
### **useTheme Hook - Complete API**
|
|
251
|
+
|
|
252
|
+
The `useTheme` hook provides full programmatic control over the theme system:
|
|
253
|
+
|
|
254
|
+
```tsx
|
|
255
|
+
import { useTheme } from '@e-burgos/tucu-ui';
|
|
256
|
+
|
|
257
|
+
function ThemeControls() {
|
|
258
|
+
const {
|
|
259
|
+
// Current State
|
|
260
|
+
mode, // 'light' | 'dark'
|
|
261
|
+
layout, // 'classic' | 'minimal' | 'none'
|
|
262
|
+
direction, // 'ltr' | 'rtl'
|
|
263
|
+
preset, // Current primary color preset
|
|
264
|
+
secondaryPreset, // Current secondary color preset
|
|
265
|
+
accentPreset, // Current accent color preset
|
|
266
|
+
darkPreset, // Current dark theme preset
|
|
267
|
+
lightPreset, // Current light theme preset
|
|
268
|
+
logo, // Current logo configuration
|
|
269
|
+
isSettingsOpen, // Settings panel open state
|
|
270
|
+
showSettings, // Settings button visibility
|
|
271
|
+
settingActions, // Current settings configuration
|
|
272
|
+
|
|
273
|
+
// State Setters
|
|
274
|
+
setMode, // (mode: 'light' | 'dark') => void
|
|
275
|
+
setLayout, // (layout: 'classic' | 'minimal' | 'none') => void
|
|
276
|
+
setDirection, // (direction: 'ltr' | 'rtl') => void
|
|
277
|
+
setPreset, // (preset: IThemeItem) => void
|
|
278
|
+
setSecondaryPreset, // (secondaryPreset: IThemeItem) => void
|
|
279
|
+
setAccentPreset, // (accentPreset: IThemeItem) => void
|
|
280
|
+
setDarkPreset, // (darkPreset: IThemeItem) => void
|
|
281
|
+
setLightPreset, // (lightPreset: IThemeItem) => void
|
|
282
|
+
setLogo, // (logo: LogoType) => void
|
|
283
|
+
setIsSettingsOpen, // (isOpen: boolean) => void
|
|
284
|
+
setShowSettings, // (show: boolean) => void
|
|
285
|
+
setSettingActions, // (actions: ISettingAction) => void
|
|
286
|
+
restoreDefaultColors, // () => void - Reset all colors to defaults
|
|
287
|
+
} = useTheme();
|
|
288
|
+
|
|
289
|
+
return (
|
|
290
|
+
<div>
|
|
291
|
+
{/* Theme Mode Controls */}
|
|
292
|
+
<button onClick={() => setMode(mode === 'light' ? 'dark' : 'light')}>Toggle to {mode === 'light' ? 'Dark' : 'Light'} Mode</button>
|
|
293
|
+
|
|
294
|
+
{/* Layout Controls */}
|
|
295
|
+
<button onClick={() => setLayout('classic')}>Classic Layout</button>
|
|
296
|
+
<button onClick={() => setLayout('minimal')}>Minimal Layout</button>
|
|
297
|
+
<button onClick={() => setLayout('none')}>No Layout</button>
|
|
298
|
+
|
|
299
|
+
{/* Direction Controls */}
|
|
300
|
+
<button onClick={() => setDirection(direction === 'ltr' ? 'rtl' : 'ltr')}>Switch to {direction === 'ltr' ? 'RTL' : 'LTR'}</button>
|
|
301
|
+
|
|
302
|
+
{/* Color Controls */}
|
|
303
|
+
<button onClick={() => setPreset({ label: 'Purple', value: '#9370DB' })}>Purple Theme</button>
|
|
304
|
+
|
|
305
|
+
<button onClick={() => setSecondaryPreset({ label: 'Blue', value: '#3B82F6' })}>Blue Secondary</button>
|
|
306
|
+
|
|
307
|
+
{/* Settings Panel Controls */}
|
|
308
|
+
<button onClick={() => setIsSettingsOpen(!isSettingsOpen)}>{isSettingsOpen ? 'Close' : 'Open'} Settings</button>
|
|
309
|
+
|
|
310
|
+
<button onClick={() => setShowSettings(!showSettings)}>{showSettings ? 'Hide' : 'Show'} Settings Button</button>
|
|
311
|
+
|
|
312
|
+
{/* Reset Colors */}
|
|
313
|
+
<button onClick={restoreDefaultColors}>Reset to Default Colors</button>
|
|
314
|
+
</div>
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### **Menu Items Structure**
|
|
320
|
+
|
|
321
|
+
```tsx
|
|
322
|
+
interface AppRoutesMenuItem {
|
|
323
|
+
name: string; // Display name
|
|
324
|
+
href: string; // Navigation URL path
|
|
325
|
+
icon?: React.ReactNode; // Optional icon component
|
|
326
|
+
component: JSX.Element; // Page component to render
|
|
327
|
+
dropdownItems?: AppRoutesMenuItem[]; // Nested submenu items
|
|
328
|
+
hide?: boolean; // Hide from navigation (default: false)
|
|
329
|
+
onClick?: () => void; // Optional click handler
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### **Available Color Presets**
|
|
334
|
+
|
|
335
|
+
Tucu UI includes 26+ built-in color presets:
|
|
336
|
+
|
|
337
|
+
**Basic Colors:** Green, Black, Blue, Red, Purple, Orange, Rose, Pink, Yellow, Lime, Teal, Cyan
|
|
338
|
+
|
|
339
|
+
**Extended Colors:** Navy, Maroon, Brown, Gray, Silver, Gold, Coral, Salmon
|
|
340
|
+
|
|
341
|
+
**Advanced Colors:** BufusBlue, Bufus, BufusAccent, BufusDark, ThemeLight, ThemeDark
|
|
342
|
+
|
|
343
|
+
### **Theme Persistence**
|
|
344
|
+
|
|
345
|
+
All theme settings (colors, layout, mode, direction) are automatically persisted to localStorage and restored on app reload.
|
|
346
|
+
|
|
347
|
+
**That's it!** Your complete application with routing, navigation, theming, and responsive design is ready.
|
|
348
|
+
|
|
349
|
+
## 🎨 Layout System
|
|
350
|
+
|
|
351
|
+
### **Three Layout Types**
|
|
352
|
+
|
|
353
|
+
#### **1. Classic Layout** - Traditional Dashboard
|
|
354
|
+
|
|
355
|
+
- Fixed sidebar with expandable navigation
|
|
356
|
+
- Header with logo and actions
|
|
357
|
+
- Perfect for admin panels and complex applications
|
|
358
|
+
|
|
359
|
+
#### **2. Minimal Layout** - Modern & Clean
|
|
360
|
+
|
|
361
|
+
- Horizontal navigation bar
|
|
362
|
+
- Backdrop blur effects
|
|
363
|
+
- Ideal for content-focused applications
|
|
364
|
+
|
|
365
|
+
#### **3. None Layout** - Maximum Flexibility
|
|
366
|
+
|
|
367
|
+
- No predefined layout structure
|
|
368
|
+
- Perfect for auth pages and custom designs
|
|
369
|
+
|
|
370
|
+
### **Automatic Features**
|
|
371
|
+
|
|
372
|
+
- ✅ **Responsive Design** - Mobile drawer, tablet adaptations
|
|
373
|
+
- ✅ **Dark/Light Mode** - Automatic theme switching
|
|
374
|
+
- ✅ **RTL Support** - Full right-to-left language support
|
|
375
|
+
- ✅ **Brand Colors** - 6 predefined color presets
|
|
376
|
+
- ✅ **Settings Panel** - Built-in user customization
|
|
377
|
+
- ✅ **Routing Integration** - Automatic route generation
|
|
378
|
+
|
|
379
|
+
### **Theme Management**
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
import { useTheme } from '@e-burgos/tucu-ui';
|
|
383
|
+
|
|
384
|
+
function ThemeControls() {
|
|
385
|
+
const {
|
|
386
|
+
mode, // 'light' | 'dark'
|
|
387
|
+
layout, // 'classic' | 'minimal' | 'none'
|
|
388
|
+
direction, // 'ltr' | 'rtl'
|
|
389
|
+
preset, // Current color preset
|
|
390
|
+
setMode,
|
|
391
|
+
setLayout,
|
|
392
|
+
setPreset,
|
|
393
|
+
} = useTheme();
|
|
394
|
+
|
|
395
|
+
return (
|
|
396
|
+
<div>
|
|
397
|
+
<button onClick={() => setMode(mode === 'light' ? 'dark' : 'light')}>Toggle {mode === 'light' ? 'Dark' : 'Light'} Mode</button>
|
|
398
|
+
|
|
399
|
+
<button onClick={() => setLayout('classic')}>Switch to Classic Layout</button>
|
|
400
|
+
|
|
401
|
+
<button onClick={() => setPreset({ label: 'Purple', value: '#9370DB' })}>Purple Theme</button>
|
|
402
|
+
</div>
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## 📝 Advanced Form System
|
|
408
|
+
|
|
409
|
+
### **Comprehensive Form Components**
|
|
410
|
+
|
|
411
|
+
```tsx
|
|
412
|
+
import { Form, FormField, Input, Textarea, Checkbox, RadioGroup, InputSelect, PinCode, FileInput, Button } from '@e-burgos/tucu-ui';
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### **Centralized Validation**
|
|
416
|
+
|
|
417
|
+
```tsx
|
|
418
|
+
interface UserFormData {
|
|
419
|
+
email: string;
|
|
420
|
+
password: string;
|
|
421
|
+
country: string;
|
|
422
|
+
newsletter: boolean;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function UserRegistrationForm() {
|
|
426
|
+
const handleSubmit = (data: UserFormData) => {
|
|
427
|
+
console.log('Form submitted:', data);
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
return (
|
|
431
|
+
<Form<UserFormData>
|
|
432
|
+
onSubmit={handleSubmit}
|
|
433
|
+
useFormProps={{
|
|
434
|
+
defaultValues: {
|
|
435
|
+
email: '',
|
|
436
|
+
password: '',
|
|
437
|
+
country: '',
|
|
438
|
+
newsletter: false,
|
|
439
|
+
},
|
|
440
|
+
mode: 'onChange',
|
|
441
|
+
}}
|
|
442
|
+
>
|
|
443
|
+
<FormField<UserFormData>
|
|
444
|
+
name="email"
|
|
445
|
+
label="Email Address"
|
|
446
|
+
rules={{
|
|
447
|
+
required: 'Email is required',
|
|
448
|
+
pattern: {
|
|
449
|
+
value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
|
|
450
|
+
message: 'Invalid email address',
|
|
451
|
+
},
|
|
452
|
+
}}
|
|
453
|
+
>
|
|
454
|
+
<Input type="email" placeholder="Enter your email" />
|
|
455
|
+
</FormField>
|
|
456
|
+
|
|
457
|
+
<FormField<UserFormData>
|
|
458
|
+
name="password"
|
|
459
|
+
label="Password"
|
|
460
|
+
rules={{
|
|
461
|
+
required: 'Password is required',
|
|
462
|
+
minLength: {
|
|
463
|
+
value: 8,
|
|
464
|
+
message: 'Password must be at least 8 characters',
|
|
465
|
+
},
|
|
466
|
+
}}
|
|
467
|
+
>
|
|
468
|
+
<Input type="password" placeholder="Enter your password" />
|
|
469
|
+
</FormField>
|
|
470
|
+
|
|
471
|
+
<FormField<UserFormData> name="country" label="Country">
|
|
472
|
+
<InputSelect
|
|
473
|
+
options={[
|
|
474
|
+
{ name: 'United States', value: 'us' },
|
|
475
|
+
{ name: 'Canada', value: 'ca' },
|
|
476
|
+
{ name: 'Mexico', value: 'mx' },
|
|
477
|
+
]}
|
|
478
|
+
/>
|
|
479
|
+
</FormField>
|
|
480
|
+
|
|
481
|
+
<FormField<UserFormData> name="newsletter" label="Newsletter Subscription">
|
|
482
|
+
<Checkbox>Subscribe to our newsletter</Checkbox>
|
|
483
|
+
</FormField>
|
|
484
|
+
|
|
485
|
+
<Button type="submit" size="large" className="w-full">
|
|
486
|
+
Create Account
|
|
487
|
+
</Button>
|
|
488
|
+
</Form>
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### **Specialized Form Components**
|
|
494
|
+
|
|
495
|
+
```tsx
|
|
496
|
+
// PIN Code Input
|
|
497
|
+
<FormField name="verificationCode" label="Verification Code">
|
|
498
|
+
<PinCode length={6} type="number" placeholder="-" />
|
|
499
|
+
</FormField>
|
|
500
|
+
|
|
501
|
+
// File Upload with Drag & Drop
|
|
502
|
+
<FormField name="documents" label="Upload Documents">
|
|
503
|
+
<FileInput
|
|
504
|
+
multiple
|
|
505
|
+
accept="imgAndPdf"
|
|
506
|
+
placeholderText="Drop files here or click to upload"
|
|
507
|
+
/>
|
|
508
|
+
</FormField>
|
|
509
|
+
|
|
510
|
+
// Radio Button Groups
|
|
511
|
+
<FormField name="subscription" label="Choose Plan">
|
|
512
|
+
<RadioGroup
|
|
513
|
+
options={[
|
|
514
|
+
{ value: 'basic', label: 'Basic - $9/month' },
|
|
515
|
+
{ value: 'pro', label: 'Pro - $29/month' },
|
|
516
|
+
{ value: 'enterprise', label: 'Enterprise - $99/month' },
|
|
517
|
+
]}
|
|
518
|
+
direction="vertical"
|
|
519
|
+
/>
|
|
520
|
+
</FormField>
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
## 🪙 Blockchain & DeFi Components
|
|
524
|
+
|
|
525
|
+
### **Cryptocurrency Components**
|
|
526
|
+
|
|
527
|
+
```tsx
|
|
528
|
+
import { CoinCard, CoinInfoCard, LivePriceFeed, TransactionInfo, CurrencySwapIcons } from '@e-burgos/tucu-ui';
|
|
529
|
+
|
|
530
|
+
function CryptoPortfolio() {
|
|
531
|
+
return (
|
|
532
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
533
|
+
{/* Portfolio Balance Cards */}
|
|
534
|
+
<CoinCard name="Bitcoin" symbol="BTC" logo="/icons/bitcoin.svg" balance="1.25" usdBalance="45,000" change="+5.2%" isChangePositive={true} color="#FDEDD4" />
|
|
535
|
+
|
|
536
|
+
{/* Live Price Feed with Chart */}
|
|
537
|
+
<LivePriceFeed name="Ethereum" symbol="ETH" icon={<EthereumIcon />} balance="10.5" usdBalance="33,600" change="+2.8%" isChangePositive={true} prices={priceHistory} />
|
|
538
|
+
|
|
539
|
+
{/* Transaction Details */}
|
|
540
|
+
<div className="space-y-3">
|
|
541
|
+
<TransactionInfo label="Gas Fee" value="0.002 ETH" />
|
|
542
|
+
<TransactionInfo label="Network" value="Ethereum Mainnet" />
|
|
543
|
+
<TransactionInfo label="Status" value="Confirmed" />
|
|
544
|
+
</div>
|
|
545
|
+
</div>
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
### **NFT Components**
|
|
551
|
+
|
|
552
|
+
```tsx
|
|
553
|
+
import { NFTGrid, CollectionCard } from '@e-burgos/tucu-ui';
|
|
554
|
+
|
|
555
|
+
function NFTGallery() {
|
|
556
|
+
return (
|
|
557
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
558
|
+
<NFTGrid author="CryptoArtist" authorImage="/avatars/artist.jpg" image="/nfts/artwork-123.jpg" name="Digital Masterpiece #123" collection="Abstract Collection" price="2.5 ETH" />
|
|
559
|
+
|
|
560
|
+
<CollectionCard
|
|
561
|
+
item={{
|
|
562
|
+
name: 'BAYC',
|
|
563
|
+
title: 'Bored Ape Yacht Club',
|
|
564
|
+
cover_image: '/collections/bayc.jpg',
|
|
565
|
+
number_of_artwork: 10000,
|
|
566
|
+
user: { name: 'Yuga Labs', avatar: '/avatars/yuga.jpg' },
|
|
567
|
+
}}
|
|
568
|
+
/>
|
|
569
|
+
</div>
|
|
570
|
+
);
|
|
571
|
+
}
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
## 🎯 Complete Icon System
|
|
575
|
+
|
|
576
|
+
### **5000+ Lucide Icons**
|
|
577
|
+
|
|
578
|
+
```tsx
|
|
579
|
+
import { LucideIcons } from '@e-burgos/tucu-ui';
|
|
580
|
+
|
|
581
|
+
function IconShowcase() {
|
|
582
|
+
return (
|
|
583
|
+
<div className="flex gap-4">
|
|
584
|
+
{/* Navigation Icons */}
|
|
585
|
+
<LucideIcons.Home className="w-6 h-6" />
|
|
586
|
+
<LucideIcons.Settings className="w-6 h-6" />
|
|
587
|
+
<LucideIcons.User className="w-6 h-6" />
|
|
588
|
+
|
|
589
|
+
{/* Action Icons */}
|
|
590
|
+
<LucideIcons.Plus className="w-6 h-6 text-green-500" />
|
|
591
|
+
<LucideIcons.Trash2 className="w-6 h-6 text-red-500" />
|
|
592
|
+
<LucideIcons.Edit className="w-6 h-6 text-blue-500" />
|
|
593
|
+
|
|
594
|
+
{/* Communication Icons */}
|
|
595
|
+
<LucideIcons.Mail className="w-6 h-6" />
|
|
596
|
+
<LucideIcons.Phone className="w-6 h-6" />
|
|
597
|
+
<LucideIcons.MessageCircle className="w-6 h-6" />
|
|
598
|
+
</div>
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### **97+ Custom Icons**
|
|
604
|
+
|
|
605
|
+
```tsx
|
|
606
|
+
import {
|
|
607
|
+
// Blockchain/Crypto
|
|
608
|
+
Bitcoin,
|
|
609
|
+
Ethereum,
|
|
610
|
+
Cardano,
|
|
611
|
+
Bnb,
|
|
612
|
+
Doge,
|
|
613
|
+
Tether,
|
|
614
|
+
Usdc,
|
|
615
|
+
|
|
616
|
+
// Layout Controls
|
|
617
|
+
ClassicLayoutIcon,
|
|
618
|
+
MinimalLayoutIcon,
|
|
619
|
+
ModernLayoutIcon,
|
|
620
|
+
RetroLayoutIcon,
|
|
621
|
+
|
|
622
|
+
// Navigation & UI
|
|
623
|
+
HomeIcon,
|
|
624
|
+
SearchIcon,
|
|
625
|
+
MenuIcon,
|
|
626
|
+
Close,
|
|
627
|
+
ArrowRight,
|
|
628
|
+
ArrowUp,
|
|
629
|
+
ArrowLinkIcon,
|
|
630
|
+
|
|
631
|
+
// Social Brands
|
|
632
|
+
Facebook,
|
|
633
|
+
Twitter,
|
|
634
|
+
Instagram,
|
|
635
|
+
Github,
|
|
636
|
+
Telegram,
|
|
637
|
+
|
|
638
|
+
// DeFi & Trading
|
|
639
|
+
SwapIcon,
|
|
640
|
+
ExchangeIcon,
|
|
641
|
+
TradingBotIcon,
|
|
642
|
+
Farm,
|
|
643
|
+
Pool,
|
|
644
|
+
VoteIcon,
|
|
645
|
+
GasIcon,
|
|
646
|
+
LivePricing,
|
|
647
|
+
|
|
648
|
+
// Status & Feedback
|
|
649
|
+
Check,
|
|
650
|
+
Checkmark,
|
|
651
|
+
Warning,
|
|
652
|
+
InfoIcon,
|
|
653
|
+
InfoCircle,
|
|
654
|
+
QuestionIcon,
|
|
655
|
+
VerifiedIcon,
|
|
656
|
+
Verified,
|
|
657
|
+
|
|
658
|
+
// Actions & Controls
|
|
659
|
+
Plus,
|
|
660
|
+
PlusCircle,
|
|
661
|
+
Edit,
|
|
662
|
+
Trash2,
|
|
663
|
+
Copy,
|
|
664
|
+
Upload,
|
|
665
|
+
Download,
|
|
666
|
+
ExportIcon,
|
|
667
|
+
Refresh,
|
|
668
|
+
Power,
|
|
669
|
+
ShutDownIcon,
|
|
670
|
+
Unlock,
|
|
671
|
+
LockIcon,
|
|
672
|
+
|
|
673
|
+
// Media & Content
|
|
674
|
+
PlayIcon,
|
|
675
|
+
MediaPlayIcon,
|
|
676
|
+
Book,
|
|
677
|
+
Document,
|
|
678
|
+
CalendarIcon,
|
|
679
|
+
Tag,
|
|
680
|
+
TagIcon,
|
|
681
|
+
|
|
682
|
+
// Data Visualization
|
|
683
|
+
SpikeBar,
|
|
684
|
+
TrendArrowUpIcon,
|
|
685
|
+
TrendArrowDownIcon,
|
|
686
|
+
BarChart3,
|
|
687
|
+
|
|
688
|
+
// Layout & Design
|
|
689
|
+
Grid3X3,
|
|
690
|
+
CompactGrid,
|
|
691
|
+
NormalGrid,
|
|
692
|
+
LeftAlign,
|
|
693
|
+
RightAlign,
|
|
694
|
+
DotsIcon,
|
|
695
|
+
HorizontalThreeDots,
|
|
696
|
+
VerticalThreeDots,
|
|
697
|
+
|
|
698
|
+
// Specialty
|
|
699
|
+
Tucu,
|
|
700
|
+
Compass,
|
|
701
|
+
Flash,
|
|
702
|
+
Flow,
|
|
703
|
+
LevelIcon,
|
|
704
|
+
SandClock,
|
|
705
|
+
Star,
|
|
706
|
+
StarFill,
|
|
707
|
+
} from '@e-burgos/tucu-ui';
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
## 🔧 UI Components Library
|
|
711
|
+
|
|
712
|
+
### **Layout & Navigation**
|
|
713
|
+
|
|
714
|
+
```tsx
|
|
715
|
+
import { Modal, Drawer, CardContainer, PanelActionCard } from '@e-burgos/tucu-ui';
|
|
716
|
+
|
|
717
|
+
// Modal with Accessibility
|
|
718
|
+
<Modal
|
|
719
|
+
isOpen={isOpen}
|
|
720
|
+
setIsOpen={setIsOpen}
|
|
721
|
+
text={{
|
|
722
|
+
title: 'Confirm Action',
|
|
723
|
+
content: 'Are you sure you want to proceed?',
|
|
724
|
+
button: 'Confirm',
|
|
725
|
+
backButton: 'Cancel',
|
|
726
|
+
}}
|
|
727
|
+
onSubmit={handleConfirm}
|
|
728
|
+
/>
|
|
729
|
+
|
|
730
|
+
// Responsive Drawer
|
|
731
|
+
<Drawer
|
|
732
|
+
type="sidebar-menu"
|
|
733
|
+
isOpen={isDrawerOpen}
|
|
734
|
+
setIsOpen={setIsDrawerOpen}
|
|
735
|
+
menuItems={menuItems}
|
|
736
|
+
position="left"
|
|
737
|
+
/>
|
|
738
|
+
|
|
739
|
+
// Action Cards
|
|
740
|
+
<PanelActionCard
|
|
741
|
+
title="User Settings"
|
|
742
|
+
actions={[
|
|
743
|
+
{ label: 'Save', onClick: handleSave },
|
|
744
|
+
{ label: 'Cancel', variant: 'ghost', onClick: handleCancel },
|
|
745
|
+
]}
|
|
746
|
+
>
|
|
747
|
+
<UserSettingsForm />
|
|
748
|
+
</PanelActionCard>
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
### **Feedback Components**
|
|
752
|
+
|
|
753
|
+
```tsx
|
|
754
|
+
import { Alert, Toast, useToast } from '@e-burgos/tucu-ui';
|
|
755
|
+
|
|
756
|
+
// Alert Messages
|
|
757
|
+
<Alert variant="success" dismissible>
|
|
758
|
+
Your changes have been saved successfully!
|
|
759
|
+
</Alert>
|
|
760
|
+
|
|
761
|
+
<Alert variant="warning">
|
|
762
|
+
Your session will expire in 5 minutes.
|
|
763
|
+
</Alert>
|
|
764
|
+
|
|
765
|
+
// Toast Notifications
|
|
766
|
+
function ToastExample() {
|
|
767
|
+
const { toast } = useToast();
|
|
768
|
+
|
|
769
|
+
const showToast = () => {
|
|
770
|
+
toast({
|
|
771
|
+
title: 'Success!',
|
|
772
|
+
message: 'Your profile has been updated',
|
|
773
|
+
variant: 'success',
|
|
774
|
+
});
|
|
775
|
+
};
|
|
776
|
+
|
|
777
|
+
return <Button onClick={showToast}>Show Toast</Button>;
|
|
778
|
+
}
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
## 🎣 Utility Hooks
|
|
782
|
+
|
|
783
|
+
```tsx
|
|
784
|
+
import { useBreakpoint, useIsMobile, useCopyToClipboard, useClickAway, useElementSize, useLockBodyScroll } from '@e-burgos/tucu-ui';
|
|
785
|
+
|
|
786
|
+
function UtilityExample() {
|
|
787
|
+
const breakpoint = useBreakpoint();
|
|
788
|
+
const isMobile = useIsMobile();
|
|
789
|
+
const [copiedText, copy] = useCopyToClipboard();
|
|
790
|
+
|
|
791
|
+
return (
|
|
792
|
+
<div>
|
|
793
|
+
<p>Current breakpoint: {breakpoint}</p>
|
|
794
|
+
{isMobile && <MobileOnlyComponent />}
|
|
795
|
+
|
|
796
|
+
<button onClick={() => copy('Hello World!')}>{copiedText ? 'Copied!' : 'Copy Text'}</button>
|
|
797
|
+
</div>
|
|
798
|
+
);
|
|
799
|
+
}
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
## 🚀 Ready-to-Use Authentication
|
|
803
|
+
|
|
804
|
+
```tsx
|
|
805
|
+
import { SignInForm, SignUpForm, ForgetPasswordForm, ResetPinForm } from '@e-burgos/tucu-ui';
|
|
806
|
+
|
|
807
|
+
// Complete authentication flow
|
|
808
|
+
function AuthPages() {
|
|
809
|
+
return (
|
|
810
|
+
<ThemeProvider layout="none" menuItems={[]}>
|
|
811
|
+
<div className="min-h-screen flex items-center justify-center">
|
|
812
|
+
{/* Sign In with validation */}
|
|
813
|
+
<SignInForm forgetPasswordPath="/forgot-password" />
|
|
814
|
+
|
|
815
|
+
{/* Sign Up with terms */}
|
|
816
|
+
<SignUpForm />
|
|
817
|
+
|
|
818
|
+
{/* Password Reset */}
|
|
819
|
+
<ForgetPasswordForm onSubmit={handlePasswordReset} resetPinPath="/reset-pin" />
|
|
820
|
+
</div>
|
|
821
|
+
</ThemeProvider>
|
|
822
|
+
);
|
|
823
|
+
}
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
## 📚 Complete Examples
|
|
827
|
+
|
|
828
|
+
### **Introduction & Documentation Pages**
|
|
829
|
+
|
|
830
|
+
Tucu UI includes comprehensive documentation pages to help you get started:
|
|
831
|
+
|
|
832
|
+
- **Introduction** - Overview and getting started guide
|
|
833
|
+
- **TailwindV4** - Complete Tailwind CSS v4 integration guide with 15 utility categories
|
|
834
|
+
- **Features** - Explore all available features and utilities
|
|
835
|
+
- **Components** - Component library overview and usage patterns
|
|
836
|
+
- **Theming Guide** - Advanced theming and customization options
|
|
837
|
+
- **Design System** - Visual design principles and guidelines
|
|
838
|
+
- **Colors** - Complete color palette and theming system
|
|
839
|
+
- **Layout System** - Responsive layout patterns and techniques
|
|
840
|
+
- **Icons System** - Icon library and usage guidelines
|
|
841
|
+
- **Accessibility** - Accessibility features and WCAG compliance
|
|
842
|
+
- **Hooks Utilities** - Custom React hooks for common patterns
|
|
843
|
+
|
|
844
|
+
### **15 Tailwind CSS v4 Utility Documentation Pages**
|
|
845
|
+
|
|
846
|
+
Comprehensive documentation for all Tailwind utilities:
|
|
847
|
+
|
|
848
|
+
- **Layout Utilities** - Aspect ratio, display, position, z-index, overflow
|
|
849
|
+
- **Flexbox & Grid Utilities** - Complete layout system documentation
|
|
850
|
+
- **Background Utilities** - Colors, gradients, images, positioning
|
|
851
|
+
- **Borders Utilities** - Radius, width, colors, styles, outlines
|
|
852
|
+
- **Typography Utilities** - Fonts, sizes, weights, spacing, colors
|
|
853
|
+
- **Effects Utilities** - Shadows, opacity, blend modes
|
|
854
|
+
- **Filters Utilities** - Blur, brightness, contrast, and more
|
|
855
|
+
- **Tables Utilities** - Layout, spacing, display properties
|
|
856
|
+
- **Transitions & Animations** - Smooth animations and transitions
|
|
857
|
+
- **Transforms Utilities** - Rotate, scale, skew, translate
|
|
858
|
+
- **Interactivity Utilities** - Cursors, scroll, touch actions
|
|
859
|
+
- **SVG Utilities** - Fill, stroke, stroke-width
|
|
860
|
+
- **Accessibility Utilities** - Screen reader and focus utilities
|
|
861
|
+
|
|
862
|
+
### **Modern Dashboard**
|
|
863
|
+
|
|
864
|
+
```tsx
|
|
865
|
+
import { ThemeProvider, LucideIcons, useTheme } from '@e-burgos/tucu-ui';
|
|
866
|
+
|
|
867
|
+
const dashboardMenuItems = [
|
|
868
|
+
{
|
|
869
|
+
name: 'Overview',
|
|
870
|
+
href: '/',
|
|
871
|
+
icon: <LucideIcons.LayoutDashboard />,
|
|
872
|
+
component: <OverviewPage />,
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
name: 'Analytics',
|
|
876
|
+
href: '/analytics',
|
|
877
|
+
icon: <LucideIcons.BarChart3 />,
|
|
878
|
+
component: <AnalyticsPage />,
|
|
879
|
+
dropdownItems: [
|
|
880
|
+
{
|
|
881
|
+
name: 'Reports',
|
|
882
|
+
href: '/analytics/reports',
|
|
883
|
+
component: <ReportsPage />,
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
name: 'Real-time',
|
|
887
|
+
href: '/analytics/realtime',
|
|
888
|
+
component: <RealtimePage />,
|
|
889
|
+
},
|
|
890
|
+
],
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
name: 'Users',
|
|
894
|
+
href: '/users',
|
|
895
|
+
icon: <LucideIcons.Users />,
|
|
896
|
+
component: <UsersPage />,
|
|
897
|
+
},
|
|
898
|
+
];
|
|
899
|
+
|
|
900
|
+
function Dashboard() {
|
|
901
|
+
return (
|
|
902
|
+
<ThemeProvider
|
|
903
|
+
layout="classic"
|
|
904
|
+
menuItems={dashboardMenuItems}
|
|
905
|
+
logo={{ name: 'Admin', secondName: 'Panel' }}
|
|
906
|
+
brandColor="BufusBlue" // New advanced color preset
|
|
907
|
+
showSettings={true}
|
|
908
|
+
rightButton={<UserProfileMenu />}
|
|
909
|
+
/>
|
|
910
|
+
);
|
|
911
|
+
}
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
### **DeFi Application**
|
|
915
|
+
|
|
916
|
+
```tsx
|
|
917
|
+
import { ThemeProvider, CoinCard, LivePriceFeed, LucideIcons } from '@e-burgos/tucu-ui';
|
|
918
|
+
|
|
919
|
+
const defiMenuItems = [
|
|
920
|
+
{
|
|
921
|
+
name: 'Portfolio',
|
|
922
|
+
href: '/',
|
|
923
|
+
icon: <LucideIcons.Wallet />,
|
|
924
|
+
component: <PortfolioPage />,
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
name: 'Swap',
|
|
928
|
+
href: '/swap',
|
|
929
|
+
icon: <LucideIcons.ArrowLeftRight />,
|
|
930
|
+
component: <SwapPage />,
|
|
931
|
+
},
|
|
932
|
+
{
|
|
933
|
+
name: 'Staking',
|
|
934
|
+
href: '/staking',
|
|
935
|
+
icon: <LucideIcons.Coins />,
|
|
936
|
+
component: <StakingPage />,
|
|
937
|
+
},
|
|
938
|
+
];
|
|
939
|
+
|
|
940
|
+
function DeFiApp() {
|
|
941
|
+
return <ThemeProvider layout="minimal" menuItems={defiMenuItems} logo={{ name: 'DeFi', secondName: 'Portfolio' }} brandColor="Green" rightButton={<WalletConnector />} />;
|
|
942
|
+
}
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
### **E-commerce Platform**
|
|
946
|
+
|
|
947
|
+
```tsx
|
|
948
|
+
import { ThemeProvider, LucideIcons, Form, FormField, Input } from '@e-burgos/tucu-ui';
|
|
949
|
+
|
|
950
|
+
const ecommerceMenuItems = [
|
|
951
|
+
{
|
|
952
|
+
name: 'Products',
|
|
953
|
+
href: '/products',
|
|
954
|
+
icon: <LucideIcons.Package />,
|
|
955
|
+
component: <ProductsPage />,
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
name: 'Orders',
|
|
959
|
+
href: '/orders',
|
|
960
|
+
icon: <LucideIcons.ShoppingCart />,
|
|
961
|
+
component: <OrdersPage />,
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
name: 'Customers',
|
|
965
|
+
href: '/customers',
|
|
966
|
+
icon: <LucideIcons.Users />,
|
|
967
|
+
component: <CustomersPage />,
|
|
968
|
+
},
|
|
969
|
+
];
|
|
970
|
+
|
|
971
|
+
function EcommerceAdmin() {
|
|
972
|
+
return <ThemeProvider layout="classic" menuItems={ecommerceMenuItems} logo={{ name: 'Shop', secondName: 'Admin' }} brandColor="Purple" showSettings={true} />;
|
|
973
|
+
}
|
|
974
|
+
```
|
|
975
|
+
|
|
976
|
+
## 🎨 Customization & Theming
|
|
977
|
+
|
|
978
|
+
### **Advanced Color System**
|
|
979
|
+
|
|
980
|
+
Tucu UI supports a multi-layered color system with 26+ presets:
|
|
981
|
+
|
|
982
|
+
```tsx
|
|
983
|
+
<ThemeProvider
|
|
984
|
+
brandColor="BufusBlue" // Primary brand color
|
|
985
|
+
secondaryColor="Bufus" // Secondary color for accents
|
|
986
|
+
accentColor="BufusAccent" // Accent color for highlights
|
|
987
|
+
darkColor="ThemeDark" // Dark theme base color
|
|
988
|
+
lightColor="ThemeLight" // Light theme base color
|
|
989
|
+
// ... other options
|
|
990
|
+
/>
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
### **CSS Custom Properties**
|
|
994
|
+
|
|
995
|
+
```css
|
|
996
|
+
:root {
|
|
997
|
+
--color-brand: #0184bf; /* Primary brand color */
|
|
998
|
+
--color-secondary: #00d6f2; /* Secondary color */
|
|
999
|
+
--color-accent: #f26522; /* Accent color */
|
|
1000
|
+
--color-dark: #0d1321; /* Dark theme background */
|
|
1001
|
+
--color-light: #fcfcfc; /* Light theme background */
|
|
1002
|
+
--color-body: var(--color-light);
|
|
1003
|
+
--color-sidebar-body: #f8fafc;
|
|
1004
|
+
--color-light-dark: #171e2e;
|
|
1005
|
+
--color-dark-light: #f8fafc;
|
|
1006
|
+
|
|
1007
|
+
/* Dynamic color mixing */
|
|
1008
|
+
--color-muted: color-mix(in oklab, var(--color-brand) 50%, transparent);
|
|
1009
|
+
--color-success: var(--color-emerald-500);
|
|
1010
|
+
--color-warning: var(--color-orange-500);
|
|
1011
|
+
--color-error: var(--color-red-500);
|
|
1012
|
+
--color-info: var(--color-blue-500);
|
|
1013
|
+
}
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
### **Extending Tailwind Configuration**
|
|
1017
|
+
|
|
1018
|
+
```js
|
|
1019
|
+
// tailwind.config.js
|
|
1020
|
+
module.exports = {
|
|
1021
|
+
content: ['./src/**/*.{js,ts,jsx,tsx}', './node_modules/@e-burgos/tucu-ui/**/*.{js,ts,jsx,tsx}'],
|
|
1022
|
+
theme: {
|
|
1023
|
+
extend: {
|
|
1024
|
+
colors: {
|
|
1025
|
+
brand: {
|
|
1026
|
+
DEFAULT: 'rgb(var(--color-brand) / <alpha-value>)',
|
|
1027
|
+
50: '#eff6ff',
|
|
1028
|
+
// ... more shades
|
|
1029
|
+
},
|
|
1030
|
+
},
|
|
1031
|
+
spacing: {
|
|
1032
|
+
13: '3.375rem', // Custom spacing used by Tucu UI
|
|
1033
|
+
},
|
|
1034
|
+
},
|
|
1035
|
+
},
|
|
1036
|
+
};
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
## ♿ Accessibility Features
|
|
1040
|
+
|
|
1041
|
+
Tucu UI is built with accessibility in mind:
|
|
1042
|
+
|
|
1043
|
+
- ✅ **WCAG 2.1 AA Compliance** - Meeting accessibility standards
|
|
1044
|
+
- ✅ **Keyboard Navigation** - Full keyboard support across components
|
|
1045
|
+
- ✅ **Screen Reader Support** - Proper ARIA attributes and semantic HTML
|
|
1046
|
+
- ✅ **Focus Management** - Visible focus indicators and logical tab order
|
|
1047
|
+
- ✅ **Color Contrast** - Sufficient contrast ratios in all themes
|
|
1048
|
+
- ✅ **Motion Preferences** - Respects user's motion preferences
|
|
1049
|
+
|
|
1050
|
+
## 🔧 Development & Contributing
|
|
1051
|
+
|
|
1052
|
+
### **Development Setup**
|
|
1053
|
+
|
|
1054
|
+
```bash
|
|
1055
|
+
# Clone the repository
|
|
1056
|
+
git clone <repository-url>
|
|
1057
|
+
|
|
1058
|
+
# Install dependencies
|
|
1059
|
+
npm install
|
|
1060
|
+
|
|
1061
|
+
# Run Storybook for development
|
|
1062
|
+
npm run @e-burgos/tucu-ui
|
|
1063
|
+
|
|
1064
|
+
# Build the library
|
|
1065
|
+
npm run @e-burgos/tucu-ui:build
|
|
1066
|
+
|
|
1067
|
+
# Run tests
|
|
1068
|
+
npm test
|
|
1069
|
+
```
|
|
1070
|
+
|
|
1071
|
+
### **Nx Monorepo Structure**
|
|
1072
|
+
|
|
1073
|
+
```
|
|
1074
|
+
@e-burgos/tucu-ui/
|
|
1075
|
+
├── apps/
|
|
1076
|
+
│ └── demo/ # Demo application
|
|
1077
|
+
├── ui/
|
|
1078
|
+
│ └── tucu-ui/ # Main library
|
|
1079
|
+
│ ├── src/
|
|
1080
|
+
│ │ ├── components/ # All UI components
|
|
1081
|
+
│ │ ├── hooks/ # Utility hooks
|
|
1082
|
+
│ │ ├── themes/ # Theme system
|
|
1083
|
+
│ │ └── storybook/ # Documentation
|
|
1084
|
+
│ └── package.json
|
|
1085
|
+
└── nx.json # Nx configuration
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
## 📄 License
|
|
1089
|
+
|
|
1090
|
+
MIT License - feel free to use in your projects!
|
|
1091
|
+
|
|
1092
|
+
## 🤝 Contributing
|
|
1093
|
+
|
|
1094
|
+
Contributions are welcome! Please:
|
|
1095
|
+
|
|
1096
|
+
1. **Fork the repository**
|
|
1097
|
+
2. **Create a feature branch**
|
|
1098
|
+
3. **Add tests for new features**
|
|
1099
|
+
4. **Update documentation**
|
|
1100
|
+
5. **Submit a pull request**
|
|
1101
|
+
|
|
1102
|
+
## 🌐 Community & Support
|
|
1103
|
+
|
|
1104
|
+
- **📚 [Documentation](https://main--683712ba90eaad206f988c65.chromatic.com/?path=/docs/1-documentation-1-introduction--documentation)** - Complete guides and examples
|
|
1105
|
+
- **🎨 [Storybook](https://main--683712ba90eaad206f988c65.chromatic.com/)** - Interactive component explorer
|
|
1106
|
+
- **🐛 [Issues](https://github.com/e-burgos/tucu-ui/issues)** - Report bugs and request features
|
|
1107
|
+
- **💬 [Discussions](https://github.com/e-burgos/tucu-ui/discussions)** - Community support and ideas
|
|
1108
|
+
|
|
1109
|
+
---
|
|
1110
|
+
|
|
1111
|
+
**Tucu UI** - Build beautiful, accessible, and production-ready React applications with confidence.
|
|
1112
|
+
|
|
1113
|
+
_Perfect for dashboards, e-commerce platforms, DeFi applications, and any modern web application that demands quality and consistency._
|