@vtx-ui/react 0.0.1-beta.13 β 0.0.1-beta.14
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 +865 -103
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/types/components/Autocomplete/Autocomplete.d.ts +173 -0
- package/dist/types/components/Autocomplete/index.d.ts +2 -0
- package/dist/types/components/Image/Image.d.ts +14 -0
- package/dist/types/components/Image/index.d.ts +2 -0
- package/dist/types/components/Link/Link.d.ts +5 -0
- package/dist/types/components/Navbar/Navbar.d.ts +236 -0
- package/dist/types/components/Navbar/index.d.ts +2 -0
- package/dist/types/components/Text/Text.d.ts +9 -3
- package/dist/types/components/Widget/renderers/CarouselWidget.d.ts +2 -1
- package/dist/types/components/Widget/renderers/ContentBlockWidget.d.ts +56 -0
- package/dist/types/components/Widget/renderers/ContentBlockWidget.stories.d.ts +24 -0
- package/dist/types/components/Widget/renderers/HeaderWidget.d.ts +8 -2
- package/dist/types/components/Widget/renderers/ImageWidget.d.ts +69 -0
- package/dist/types/components/Widget/renderers/ImageWidget.stories.d.ts +11 -0
- package/dist/types/components/Widget/renderers/InfoWidget.d.ts +8 -2
- package/dist/types/components/Widget/renderers/ListWidget.d.ts +8 -2
- package/dist/types/components/Widget/renderers/MetricWidget.d.ts +8 -2
- package/dist/types/components/Widget/renderers/NavbarWidget.d.ts +16 -0
- package/dist/types/components/Widget/renderers/OrderWidget.d.ts +2 -6
- package/dist/types/components/Widget/renderers/ProductWidget.d.ts +2 -6
- package/dist/types/components/Widget/renderers/TextWidget.d.ts +8 -2
- package/dist/types/components/Widget/types.d.ts +388 -14
- package/dist/types/icons/IconComponents.d.ts +3 -0
- package/dist/types/index.d.ts +10 -6
- package/dist/types/stories/components/Autocomplete.stories.d.ts +20 -0
- package/dist/types/stories/components/ContentBlockWidget.stories.d.ts +24 -0
- package/dist/types/stories/components/HeaderWidget.stories.d.ts +10 -0
- package/dist/types/stories/components/InfoWidget.stories.d.ts +24 -0
- package/dist/types/stories/components/ListWidget.stories.d.ts +10 -0
- package/dist/types/stories/components/MetricWidget.stories.d.ts +12 -0
- package/dist/types/stories/components/OrderWidget.stories.d.ts +12 -0
- package/dist/types/stories/components/ProductWidget.stories.d.ts +13 -0
- package/dist/types/stories/components/TextWidget.stories.d.ts +10 -0
- package/dist/types/stories/widgets/DashboardCard.stories.d.ts +58 -0
- package/dist/types/stories/widgets/InfoCard.stories.d.ts +1 -4
- package/dist/types/stories/widgets/InfoListCard.stories.d.ts +3 -15
- package/dist/types/stories/widgets/InfoText.stories.d.ts +1 -19
- package/dist/types/stories/widgets/MetricCard.stories.d.ts +27 -0
- package/dist/types/stories/widgets/OrderCard.stories.d.ts +3 -9
- package/dist/types/stories/widgets/OrderConfirmation.stories.d.ts +1 -24
- package/dist/types/stories/widgets/OrderDetails.stories.d.ts +3 -7
- package/dist/types/stories/widgets/ProductCard.stories.d.ts +1 -15
- package/dist/types/theme/ThemeProvider.d.ts +7 -0
- package/dist/types/utils/parseClass.d.ts +2 -0
- package/dist/types/widgets/DashboardCard/DashboardCard.d.ts +275 -0
- package/dist/types/widgets/DashboardCard/index.d.ts +2 -0
- package/dist/types/widgets/MetricCard/MetricCard.d.ts +106 -0
- package/dist/types/widgets/MetricCard/index.d.ts +2 -0
- package/dist/types/widgets/Navbar/Navbar.d.ts +308 -0
- package/dist/types/widgets/Navbar/Navbar.stories.d.ts +23 -0
- package/dist/types/widgets/Navbar/index.d.ts +2 -0
- package/dist/types/widgets/OrderCard/OrderCard.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,227 +2,989 @@
|
|
|
2
2
|
<img src="https://innostes.com/images/home/section_navbar/company-latest-logo.png" alt="Innostes Solutions Pvt Ltd" width="220"/>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<h1 align="center">@vtx-ui/react</h1>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Enterprise-Grade React UI Library</strong><br/>
|
|
9
|
+
Production-ready components and widgets for modern web applications
|
|
10
|
+
</p>
|
|
8
11
|
|
|
9
12
|
<p align="center">
|
|
10
13
|
<b>Documentation & full guides at <a href="https://vertexui.com/" target="_blank">vertexui.com</a></b><br/>
|
|
11
14
|
<sub>Developed and maintained by <a href="https://innostes.com/" target="_blank">Innostes Solutions Pvt Ltd</a> for the <a href="https://github.com/vertex-ui" target="_blank">vertex-ui</a> organization.</sub>
|
|
12
15
|
</p>
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://www.npmjs.com/package/@vtx-ui/react"><img src="https://badge.fury.io/js/%40vui%2Freact.svg" alt="npm version" /></a>
|
|
19
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
|
|
20
|
+
<img src="https://img.shields.io/badge/TypeScript-100%25-blue" alt="TypeScript" />
|
|
21
|
+
<img src="https://img.shields.io/badge/Tests-508%20Passing-success" alt="Tests" />
|
|
22
|
+
<img src="https://img.shields.io/badge/Coverage-100%25-brightgreen" alt="Coverage" />
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Table of Contents
|
|
28
|
+
|
|
29
|
+
- [Overview](#overview)
|
|
30
|
+
- [Why Choose @vtx-ui/react](#why-choose-vuireact)
|
|
31
|
+
- [Key Features](#key-features)
|
|
32
|
+
- [Installation](#installation)
|
|
33
|
+
- [Quick Start](#quick-start)
|
|
34
|
+
- [Components Library](#components-library)
|
|
35
|
+
- [Widgets Library](#widgets-library)
|
|
36
|
+
- [Theming System](#theming-system)
|
|
37
|
+
- [Custom Hooks](#custom-hooks)
|
|
38
|
+
- [TypeScript Support](#typescript-support)
|
|
39
|
+
- [Accessibility](#accessibility)
|
|
40
|
+
- [Performance](#performance)
|
|
41
|
+
- [Development](#development)
|
|
42
|
+
- [Browser Support](#browser-support)
|
|
43
|
+
- [Enterprise Support](#enterprise-support)
|
|
44
|
+
- [Contributing](#contributing)
|
|
45
|
+
- [License](#license)
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Overview
|
|
50
|
+
|
|
51
|
+
**@vtx-ui/react** is a comprehensive UI component library built with React and TypeScript, designed for enterprise applications that demand reliability, accessibility, and seamless customization. With **35+ production-ready components** and **10+ specialized widgets**, our library provides everything you need to build modern, scalable web applications.
|
|
52
|
+
|
|
53
|
+
## Why Choose @vtx-ui/react?
|
|
54
|
+
|
|
55
|
+
### Built for Enterprise
|
|
56
|
+
|
|
57
|
+
- **Production-Tested** - Battle-tested in real-world enterprise applications
|
|
58
|
+
- **Type-Safe** - 100% TypeScript with comprehensive type definitions
|
|
59
|
+
- **Scalable Architecture** - Designed to grow with your application
|
|
60
|
+
- **Consistent Design Language** - Unified theme system across all components
|
|
61
|
+
- **Professional Support** - Backed by Innostes Solutions with enterprise support options
|
|
62
|
+
|
|
63
|
+
### Developer Experience
|
|
64
|
+
|
|
65
|
+
- **Zero Configuration** - Works out of the box with sensible defaults
|
|
66
|
+
- **Extensive Documentation** - Comprehensive guides, API docs, and live examples
|
|
67
|
+
- **Storybook Integration** - Interactive component playground
|
|
68
|
+
- **Modern Tooling** - Built with the latest React patterns and best practices
|
|
69
|
+
- **Active Maintenance** - Regular updates, bug fixes, and new features
|
|
70
|
+
|
|
71
|
+
### Performance First
|
|
16
72
|
|
|
17
|
-
|
|
73
|
+
- **Tree-Shakable** - Only bundle what you use
|
|
74
|
+
- **Optimized Bundle Size** - Efficient code splitting and lazy loading
|
|
75
|
+
- **CSS Custom Properties** - Dynamic theming without JavaScript overhead
|
|
76
|
+
- **Minimal Dependencies** - Carefully selected, high-quality dependencies
|
|
18
77
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
78
|
+
## Key Features
|
|
79
|
+
|
|
80
|
+
### π’ Enterprise-Ready
|
|
81
|
+
Production-grade components with strict TypeScript support, comprehensive testing, and battle-tested reliability across large-scale applications.
|
|
82
|
+
|
|
83
|
+
### βΏ Accessibility First
|
|
84
|
+
WCAG 2.1 AA compliant with full ARIA support. Every component is built with keyboard navigation, screen reader support, and focus management.
|
|
85
|
+
|
|
86
|
+
### π¨ Unified Theme System
|
|
87
|
+
Consistent design language powered by CSS custom properties. Change your entire brand identity by updating a few color tokensβno rebuild required.
|
|
88
|
+
|
|
89
|
+
### π― Fully Customizable
|
|
90
|
+
Customize colors, spacing, typography, and component styles using CSS variables. Override individual components or create completely custom themes.
|
|
91
|
+
|
|
92
|
+
### π¦ Tree-Shakable
|
|
93
|
+
Optimized ESM and CJS builds ensure you only bundle what you use. Automatic dead-code elimination keeps your bundle lean.
|
|
94
|
+
|
|
95
|
+
### π§ͺ Thoroughly Tested
|
|
96
|
+
508 passing tests with 100% component coverage. Tested across multiple browsers and screen readers for maximum reliability.
|
|
97
|
+
|
|
98
|
+
### π Comprehensive Documentation
|
|
99
|
+
Complete JSDoc comments, interactive Storybook examples, detailed theming guides, and migration documentation.
|
|
100
|
+
|
|
101
|
+
### π Modern Stack
|
|
102
|
+
Built with React 17+, TypeScript, and modern CSS. Supports React Server Components and Next.js 13+ app directory.
|
|
103
|
+
|
|
104
|
+
### π§ Developer Tools
|
|
105
|
+
Custom hooks, HOCs, and utilities to accelerate development. Theme debugging tools and design token documentation included.
|
|
26
106
|
|
|
27
107
|
## Installation
|
|
28
108
|
|
|
109
|
+
### npm
|
|
29
110
|
```bash
|
|
30
111
|
npm install @vtx-ui/react
|
|
31
112
|
```
|
|
32
113
|
|
|
114
|
+
### yarn
|
|
33
115
|
```bash
|
|
34
116
|
yarn add @vtx-ui/react
|
|
35
117
|
```
|
|
36
118
|
|
|
119
|
+
### pnpm
|
|
37
120
|
```bash
|
|
38
121
|
pnpm add @vtx-ui/react
|
|
39
122
|
```
|
|
40
123
|
|
|
124
|
+
### Requirements
|
|
125
|
+
|
|
126
|
+
- React β₯17.0.0
|
|
127
|
+
- React DOM β₯17.0.0
|
|
128
|
+
- Node.js β₯14.0.0
|
|
129
|
+
|
|
41
130
|
## Quick Start
|
|
42
131
|
|
|
132
|
+
### 1. Import Styles
|
|
133
|
+
|
|
134
|
+
Import the base stylesheet in your application entry point:
|
|
135
|
+
|
|
43
136
|
```tsx
|
|
44
|
-
import { ThemeProvider, Button } from '@vtx-ui/react';
|
|
45
137
|
import '@vtx-ui/react/styles.css';
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 2. Wrap with ThemeProvider
|
|
141
|
+
|
|
142
|
+
Wrap your application with the `ThemeProvider` to enable theming:
|
|
143
|
+
|
|
144
|
+
```tsx
|
|
145
|
+
import { ThemeProvider, Button } from '@vtx-ui/react';
|
|
46
146
|
|
|
47
147
|
function App() {
|
|
48
148
|
return (
|
|
49
|
-
<ThemeProvider>
|
|
149
|
+
<ThemeProvider initialMode="light">
|
|
50
150
|
<Button variant="primary" onClick={() => console.log('clicked')}>
|
|
51
151
|
Click me
|
|
52
152
|
</Button>
|
|
53
153
|
</ThemeProvider>
|
|
54
154
|
);
|
|
55
155
|
}
|
|
156
|
+
|
|
157
|
+
export default App;
|
|
56
158
|
```
|
|
57
159
|
|
|
58
|
-
|
|
160
|
+
### 3. Start Building
|
|
59
161
|
|
|
60
|
-
|
|
162
|
+
Import and use any component:
|
|
61
163
|
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
164
|
+
```tsx
|
|
165
|
+
import { Button, Input, Card, Modal } from '@vtx-ui/react';
|
|
166
|
+
|
|
167
|
+
function MyComponent() {
|
|
168
|
+
return (
|
|
169
|
+
<Card>
|
|
170
|
+
<Input label="Email" type="email" placeholder="you@example.com" />
|
|
171
|
+
<Button variant="primary">Submit</Button>
|
|
172
|
+
</Card>
|
|
173
|
+
);
|
|
68
174
|
}
|
|
69
175
|
```
|
|
70
176
|
|
|
71
|
-
|
|
177
|
+
---
|
|
72
178
|
|
|
73
|
-
|
|
74
|
-
- **Green**: Eco-friendly, growth-oriented
|
|
75
|
-
- **Purple**: Premium, creative brand
|
|
76
|
-
- **Red**: Bold, action-driven
|
|
179
|
+
## Components Library
|
|
77
180
|
|
|
78
|
-
|
|
181
|
+
Our comprehensive component library includes **35+ production-ready components** organized into logical categories:
|
|
79
182
|
|
|
80
|
-
|
|
183
|
+
### π Form Controls (13 components)
|
|
81
184
|
|
|
82
|
-
|
|
185
|
+
Build powerful forms with our complete set of form controls:
|
|
83
186
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
**
|
|
87
|
-
**
|
|
187
|
+
| Component | Description | Key Features |
|
|
188
|
+
|-----------|-------------|--------------|
|
|
189
|
+
| **Button** | Action buttons with multiple variants | Primary, secondary, ghost, loading states |
|
|
190
|
+
| **Input** | Text input with validation | Error states, helper text, icons, masking |
|
|
191
|
+
| **Textarea** | Multi-line text input | Auto-resize, character count, validation |
|
|
192
|
+
| **Select** | Dropdown selection | Searchable, grouped options, custom rendering |
|
|
193
|
+
| **MultiSelect** | Multiple selection dropdown | Tag management, search, custom item rendering |
|
|
194
|
+
| **Checkbox** | Single checkbox input | Indeterminate state, custom labels |
|
|
195
|
+
| **CheckboxGroup** | Multiple checkbox group | Validation, select all, custom layout |
|
|
196
|
+
| **Radio** | Single radio input | Custom styles, disabled states |
|
|
197
|
+
| **RadioGroup** | Radio button group | Horizontal/vertical layout, validation |
|
|
198
|
+
| **DatePicker** | Date selection | Range selection, min/max dates, custom formats |
|
|
199
|
+
| **DateRangePicker** | Date range selector | Presets, custom ranges, timezone support |
|
|
200
|
+
| **Autocomplete** | Auto-complete text input | Async search, custom rendering, keyboard nav |
|
|
201
|
+
| **FormControl** | Form field wrapper | Consistent spacing, labels, error handling |
|
|
88
202
|
|
|
89
|
-
###
|
|
203
|
+
### π― Interactive Components (8 components)
|
|
90
204
|
|
|
91
|
-
|
|
205
|
+
Engage users with rich interactive elements:
|
|
92
206
|
|
|
93
|
-
|
|
94
|
-
|
|
207
|
+
| Component | Description | Key Features |
|
|
208
|
+
|-----------|-------------|--------------|
|
|
209
|
+
| **Accordion** | Collapsible content panels | Single/multiple expand, animations, icons |
|
|
210
|
+
| **Card** | Content container | Elevations, actions, media support |
|
|
211
|
+
| **Modal** | Dialog overlay | Focus trap, animations, custom footers |
|
|
212
|
+
| **Toast** | Notification messages | Auto-dismiss, positions, variants, stacking |
|
|
213
|
+
| **Tooltip** | Contextual information | Multiple positions, delays, interactive |
|
|
214
|
+
| **Menu** | Dropdown menu | Nested menus, keyboard nav, icons |
|
|
215
|
+
| **ActionMenu** | Context menu actions | Quick actions, separators, disabled items |
|
|
216
|
+
| **SideMenu** | Navigation sidebar | Collapsible, nested items, active states |
|
|
95
217
|
|
|
96
|
-
|
|
97
|
-
Click me
|
|
98
|
-
</Button>;
|
|
99
|
-
```
|
|
218
|
+
### π Data Display (10 components)
|
|
100
219
|
|
|
101
|
-
|
|
220
|
+
Present information clearly and effectively:
|
|
102
221
|
|
|
103
|
-
|
|
104
|
-
|
|
222
|
+
| Component | Description | Key Features |
|
|
223
|
+
|-----------|-------------|--------------|
|
|
224
|
+
| **Table** | Data table | Sorting, pagination, row selection, sticky headers |
|
|
225
|
+
| **DataGrid** | Advanced data grid | Virtual scrolling, filtering, export, inline editing |
|
|
226
|
+
| **Timeline** | Event timeline | Vertical/horizontal, custom icons, interactive |
|
|
227
|
+
| **Chip** | Compact label/tag | Removable, clickable, icons, avatars |
|
|
228
|
+
| **Badge** | Status indicator | Colors, positions, dot variant, counts |
|
|
229
|
+
| **Alert** | Important messages | Variants, dismissible, icons, actions |
|
|
230
|
+
| **Avatar** | User profile image | Fallback initials, sizes, groups, status indicators |
|
|
231
|
+
| **Divider** | Visual separator | Horizontal/vertical, with text, custom spacing |
|
|
232
|
+
| **Text** | Typography component | Semantic variants, truncation, colors, weights |
|
|
233
|
+
| **Image** | Optimized image | Lazy loading, placeholder, error handling |
|
|
105
234
|
|
|
106
|
-
|
|
107
|
-
label="Email"
|
|
108
|
-
type="email"
|
|
109
|
-
placeholder="you@example.com"
|
|
110
|
-
helperText="We'll never share your email"
|
|
111
|
-
error={errors.email}
|
|
112
|
-
/>;
|
|
113
|
-
```
|
|
235
|
+
### π Layout Components (6 components)
|
|
114
236
|
|
|
115
|
-
|
|
237
|
+
Structure your application with flexible layout primitives:
|
|
116
238
|
|
|
117
|
-
|
|
118
|
-
|
|
239
|
+
| Component | Description | Key Features |
|
|
240
|
+
|-----------|-------------|--------------|
|
|
241
|
+
| **Flex** | Flexbox layout | Gap, alignment, wrapping, responsive props |
|
|
242
|
+
| **Grid** | CSS Grid layout | Columns, gaps, responsive, auto-fit |
|
|
243
|
+
| **Container** | Content container | Max-width, padding, centering, breakpoints |
|
|
244
|
+
| **Header** | Page header | Sticky, actions, breadcrumbs, navigation |
|
|
245
|
+
| **AdminHeader** | Admin panel header | User menu, notifications, search, branding |
|
|
246
|
+
| **Breadcrumb** | Navigation breadcrumbs | Custom separators, links, current page |
|
|
119
247
|
|
|
120
|
-
|
|
248
|
+
### π¨ Specialized Components (3 components)
|
|
121
249
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
250
|
+
Advanced components for specific use cases:
|
|
251
|
+
|
|
252
|
+
| Component | Description | Key Features |
|
|
253
|
+
|-----------|-------------|--------------|
|
|
254
|
+
| **RichTextEditor** | WYSIWYG editor | Formatting, lists, links, images, markdown |
|
|
255
|
+
| **Link** | Enhanced anchor | External indicator, variants, underline styles |
|
|
256
|
+
| **Widget** | Dashboard widget | Header, footer, loading states, refresh |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Widgets Library
|
|
261
|
+
|
|
262
|
+
Pre-built, domain-specific widgets for rapid application development. **10 specialized widgets** ready to use:
|
|
263
|
+
|
|
264
|
+
### ποΈ E-Commerce Widgets (4 widgets)
|
|
265
|
+
|
|
266
|
+
| Widget | Description | Use Case |
|
|
267
|
+
|--------|-------------|----------|
|
|
268
|
+
| **ProductCard** | Product display card | Product listings, catalogs, featured items |
|
|
269
|
+
| **OrderCard** | Order summary card | Order history, checkout summary |
|
|
270
|
+
| **OrderConfirmation** | Order success view | Post-purchase confirmation page |
|
|
271
|
+
| **OrderDetails** | Detailed order view | Order management, customer support |
|
|
272
|
+
|
|
273
|
+
### π Analytics & Metrics (3 widgets)
|
|
274
|
+
|
|
275
|
+
| Widget | Description | Use Case |
|
|
276
|
+
|--------|-------------|----------|
|
|
277
|
+
| **MetricCard** | KPI display card | Dashboards, analytics, reporting |
|
|
278
|
+
| **InfoCard** | Information display | Feature highlights, statistics |
|
|
279
|
+
| **InfoListCard** | List-based info card | Multi-item information display |
|
|
280
|
+
|
|
281
|
+
### π§ Navigation Widgets (3 widgets)
|
|
282
|
+
|
|
283
|
+
| Widget | Description | Use Case |
|
|
284
|
+
|--------|-------------|----------|
|
|
285
|
+
| **Navbar** | Navigation bar | Site navigation, responsive menu |
|
|
286
|
+
| **Header** | Page header widget | Consistent page headers |
|
|
287
|
+
| **InfoText** | Informational text block | Help text, descriptions, onboarding |
|
|
288
|
+
|
|
289
|
+
### Widget Benefits
|
|
290
|
+
|
|
291
|
+
- **Plug-and-Play** - Drop into your application with minimal configuration
|
|
292
|
+
- **Customizable** - Full theming support and prop-based customization
|
|
293
|
+
- **Consistent UX** - Built with the same design system as base components
|
|
294
|
+
- **Production-Ready** - Field-tested in real applications
|
|
295
|
+
- **Time-Saving** - Accelerate development with pre-built patterns
|
|
296
|
+
|
|
297
|
+
### Using Widgets
|
|
298
|
+
|
|
299
|
+
```tsx
|
|
300
|
+
import { ProductCard, MetricCard, Navbar } from '@vtx-ui/react';
|
|
301
|
+
|
|
302
|
+
function Dashboard() {
|
|
303
|
+
return (
|
|
127
304
|
<>
|
|
128
|
-
<
|
|
129
|
-
|
|
305
|
+
<Navbar items={navItems} logo={<Logo />} />
|
|
306
|
+
|
|
307
|
+
<MetricCard
|
|
308
|
+
title="Revenue"
|
|
309
|
+
value="$45,231"
|
|
310
|
+
change={12.5}
|
|
311
|
+
trend="up"
|
|
312
|
+
icon={<DollarIcon />}
|
|
313
|
+
/>
|
|
314
|
+
|
|
315
|
+
<ProductCard
|
|
316
|
+
name="Premium Widget"
|
|
317
|
+
price={99.99}
|
|
318
|
+
image="/product.jpg"
|
|
319
|
+
rating={4.5}
|
|
320
|
+
onAddToCart={handleAddToCart}
|
|
321
|
+
/>
|
|
130
322
|
</>
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Theming System
|
|
330
|
+
|
|
331
|
+
@vtx-ui/react features a powerful, flexible theming system built on CSS custom properties, enabling dynamic theme changes without rebuilding your application.
|
|
332
|
+
|
|
333
|
+
### Unified Primary Color System
|
|
334
|
+
|
|
335
|
+
All components use a **consistent primary color palette** for branding:
|
|
336
|
+
|
|
337
|
+
```css
|
|
338
|
+
:root {
|
|
339
|
+
--vtx-color-primary-500: #3b82f6; /* Focus rings, borders */
|
|
340
|
+
--vtx-color-primary-600: #2563eb; /* Main brand color */
|
|
341
|
+
--vtx-color-primary-700: #1d4ed8; /* Hover states */
|
|
342
|
+
}
|
|
135
343
|
```
|
|
136
344
|
|
|
137
|
-
|
|
345
|
+
### Theme Modes
|
|
138
346
|
|
|
139
|
-
|
|
347
|
+
Built-in light and dark mode support:
|
|
140
348
|
|
|
141
349
|
```tsx
|
|
142
|
-
import { ThemeProvider,
|
|
350
|
+
import { ThemeProvider, useTheme } from '@vtx-ui/react';
|
|
143
351
|
|
|
144
352
|
function App() {
|
|
145
353
|
return (
|
|
146
|
-
<ThemeProvider initialMode="
|
|
354
|
+
<ThemeProvider initialMode="dark">
|
|
147
355
|
<YourApp />
|
|
148
356
|
</ThemeProvider>
|
|
149
357
|
);
|
|
150
358
|
}
|
|
359
|
+
|
|
360
|
+
function ThemeToggle() {
|
|
361
|
+
const { mode, setMode } = useTheme();
|
|
362
|
+
|
|
363
|
+
return (
|
|
364
|
+
<button onClick={() => setMode(mode === 'light' ? 'dark' : 'light')}>
|
|
365
|
+
Toggle Theme
|
|
366
|
+
</button>
|
|
367
|
+
);
|
|
368
|
+
}
|
|
151
369
|
```
|
|
152
370
|
|
|
153
|
-
###
|
|
371
|
+
### Custom Theme Colors
|
|
372
|
+
|
|
373
|
+
Create your brand identity by customizing color tokens:
|
|
374
|
+
|
|
375
|
+
```css
|
|
376
|
+
/* Blue Theme (Default) - Modern, tech-focused */
|
|
377
|
+
:root {
|
|
378
|
+
--vtx-color-primary-500: #3b82f6;
|
|
379
|
+
--vtx-color-primary-600: #2563eb;
|
|
380
|
+
--vtx-color-primary-700: #1d4ed8;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* Green Theme - Eco-friendly, growth-oriented */
|
|
384
|
+
:root {
|
|
385
|
+
--vtx-color-primary-500: #10b981;
|
|
386
|
+
--vtx-color-primary-600: #059669;
|
|
387
|
+
--vtx-color-primary-700: #047857;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/* Purple Theme - Premium, creative */
|
|
391
|
+
:root {
|
|
392
|
+
--vtx-color-primary-500: #8b5cf6;
|
|
393
|
+
--vtx-color-primary-600: #7c3aed;
|
|
394
|
+
--vtx-color-primary-700: #6d28d9;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* Red Theme - Bold, action-driven */
|
|
398
|
+
:root {
|
|
399
|
+
--vtx-color-primary-500: #ef4444;
|
|
400
|
+
--vtx-color-primary-600: #dc2626;
|
|
401
|
+
--vtx-color-primary-700: #b91c1c;
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Advanced Customization
|
|
406
|
+
|
|
407
|
+
Customize spacing, typography, border radius, and more:
|
|
408
|
+
|
|
409
|
+
```css
|
|
410
|
+
:root {
|
|
411
|
+
/* Spacing Scale */
|
|
412
|
+
--vtx-spacing-xs: 0.25rem;
|
|
413
|
+
--vtx-spacing-sm: 0.5rem;
|
|
414
|
+
--vtx-spacing-md: 1rem;
|
|
415
|
+
--vtx-spacing-lg: 1.5rem;
|
|
416
|
+
--vtx-spacing-xl: 2rem;
|
|
417
|
+
|
|
418
|
+
/* Typography */
|
|
419
|
+
--vtx-font-family-base: 'Inter', system-ui, sans-serif;
|
|
420
|
+
--vtx-font-size-sm: 0.875rem;
|
|
421
|
+
--vtx-font-size-base: 1rem;
|
|
422
|
+
--vtx-font-size-lg: 1.125rem;
|
|
423
|
+
|
|
424
|
+
/* Border Radius */
|
|
425
|
+
--vtx-radius-sm: 0.25rem;
|
|
426
|
+
--vtx-radius-md: 0.375rem;
|
|
427
|
+
--vtx-radius-lg: 0.5rem;
|
|
428
|
+
|
|
429
|
+
/* Shadows */
|
|
430
|
+
--vtx-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
431
|
+
--vtx-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
432
|
+
--vtx-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Using Theme Tokens in JavaScript
|
|
154
437
|
|
|
155
438
|
```tsx
|
|
156
439
|
import { useTheme } from '@vtx-ui/react';
|
|
157
440
|
|
|
158
441
|
function MyComponent() {
|
|
159
|
-
const { tokens, mode
|
|
442
|
+
const { tokens, mode } = useTheme();
|
|
443
|
+
|
|
444
|
+
return (
|
|
445
|
+
<div style={{
|
|
446
|
+
color: tokens.colors.primary[600],
|
|
447
|
+
padding: tokens.spacing.md,
|
|
448
|
+
borderRadius: tokens.borderRadius.md,
|
|
449
|
+
}}>
|
|
450
|
+
Current mode: {mode}
|
|
451
|
+
</div>
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
```
|
|
160
455
|
|
|
161
|
-
|
|
456
|
+
### Component-Specific Theming
|
|
457
|
+
|
|
458
|
+
Override styles for specific components:
|
|
459
|
+
|
|
460
|
+
```css
|
|
461
|
+
/* Custom Button styles */
|
|
462
|
+
.vtx-button--primary {
|
|
463
|
+
--button-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
464
|
+
--button-padding: 0.75rem 2rem;
|
|
465
|
+
font-weight: 600;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/* Custom Card styles */
|
|
469
|
+
.vtx-card {
|
|
470
|
+
--card-bg: rgba(255, 255, 255, 0.95);
|
|
471
|
+
backdrop-filter: blur(10px);
|
|
162
472
|
}
|
|
163
473
|
```
|
|
164
474
|
|
|
475
|
+
π **[Complete Theming Guide](./src/theme/README.md)** - Comprehensive documentation on theming, design tokens, and customization strategies.
|
|
476
|
+
|
|
165
477
|
## Custom Hooks
|
|
166
478
|
|
|
167
|
-
|
|
168
|
-
- `useClickOutside` - Detect clicks outside an element
|
|
169
|
-
- `useFocusTrap` - Trap focus within a component
|
|
170
|
-
- `useEscapeKey` - Handle escape key presses
|
|
171
|
-
- `useBodyScrollLock` - Lock body scroll (for modals)
|
|
172
|
-
- `useId` - Generate unique IDs for accessibility
|
|
173
|
-
- `useDebounce` - Debounce values
|
|
479
|
+
Accelerate development with our collection of production-ready React hooks:
|
|
174
480
|
|
|
175
|
-
|
|
481
|
+
### Theme & Styling
|
|
176
482
|
|
|
177
|
-
|
|
483
|
+
- **`useTheme()`** - Access theme tokens, mode (light/dark), and setMode function
|
|
484
|
+
```tsx
|
|
485
|
+
const { tokens, mode, setMode } = useTheme();
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Interaction Hooks
|
|
489
|
+
|
|
490
|
+
- **`useClickOutside(ref, handler)`** - Detect clicks outside an element (perfect for dropdowns)
|
|
491
|
+
- **`useFocusTrap(ref)`** - Trap focus within a component (essential for modals)
|
|
492
|
+
- **`useEscapeKey(handler)`** - Handle escape key presses for dismissible components
|
|
493
|
+
- **`useBodyScrollLock(isLocked)`** - Lock/unlock body scroll (prevents background scrolling)
|
|
494
|
+
|
|
495
|
+
### Utility Hooks
|
|
496
|
+
|
|
497
|
+
- **`useId(prefix?)`** - Generate unique IDs for accessibility (ARIA labels, form associations)
|
|
498
|
+
- **`useDebounce(value, delay)`** - Debounce rapidly changing values (search inputs, API calls)
|
|
499
|
+
- **`useMediaQuery(query)`** - Responsive behavior based on media queries
|
|
500
|
+
- **`useLocalStorage(key, initialValue)`** - Persist state in localStorage
|
|
501
|
+
- **`useToggle(initialValue?)`** - Boolean toggle state management
|
|
502
|
+
|
|
503
|
+
### Example Usage
|
|
504
|
+
|
|
505
|
+
```tsx
|
|
506
|
+
import {
|
|
507
|
+
useClickOutside,
|
|
508
|
+
useFocusTrap,
|
|
509
|
+
useDebounce,
|
|
510
|
+
useTheme
|
|
511
|
+
} from '@vtx-ui/react';
|
|
512
|
+
|
|
513
|
+
function SearchDropdown() {
|
|
514
|
+
const dropdownRef = useRef<HTMLDivElement>(null);
|
|
515
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
516
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
517
|
+
const debouncedSearch = useDebounce(searchTerm, 300);
|
|
518
|
+
|
|
519
|
+
useClickOutside(dropdownRef, () => setIsOpen(false));
|
|
520
|
+
useFocusTrap(dropdownRef);
|
|
521
|
+
|
|
522
|
+
return (
|
|
523
|
+
<div ref={dropdownRef}>
|
|
524
|
+
<input value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />
|
|
525
|
+
{isOpen && <SearchResults query={debouncedSearch} />}
|
|
526
|
+
</div>
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
## TypeScript Support
|
|
534
|
+
|
|
535
|
+
### 100% Type-Safe
|
|
536
|
+
|
|
537
|
+
Every component, hook, and utility is fully typed with comprehensive TypeScript definitions:
|
|
538
|
+
|
|
539
|
+
```tsx
|
|
540
|
+
import { ButtonProps, InputProps, ModalProps } from '@vtx-ui/react';
|
|
541
|
+
|
|
542
|
+
// Full IntelliSense support
|
|
543
|
+
const buttonProps: ButtonProps = {
|
|
544
|
+
variant: 'primary', // Type-checked variants
|
|
545
|
+
size: 'large', // Type-checked sizes
|
|
546
|
+
onClick: (e) => {}, // Proper event types
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
// Generic type support
|
|
550
|
+
interface User {
|
|
551
|
+
id: string;
|
|
552
|
+
name: string;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
<Select<User>
|
|
556
|
+
options={users}
|
|
557
|
+
getOptionLabel={(user) => user.name}
|
|
558
|
+
getOptionValue={(user) => user.id}
|
|
559
|
+
/>
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Type Exports
|
|
563
|
+
|
|
564
|
+
All types are exported for use in your application:
|
|
565
|
+
|
|
566
|
+
```tsx
|
|
567
|
+
import type {
|
|
568
|
+
// Component Props
|
|
569
|
+
ButtonProps,
|
|
570
|
+
InputProps,
|
|
571
|
+
SelectProps,
|
|
572
|
+
ModalProps,
|
|
573
|
+
|
|
574
|
+
// Common Types
|
|
575
|
+
Size,
|
|
576
|
+
Variant,
|
|
577
|
+
ColorScheme,
|
|
578
|
+
|
|
579
|
+
// Theme Types
|
|
580
|
+
ThemeMode,
|
|
581
|
+
ThemeTokens,
|
|
582
|
+
|
|
583
|
+
// Utility Types
|
|
584
|
+
ComponentWithChildren,
|
|
585
|
+
HTMLDivProps,
|
|
586
|
+
} from '@vtx-ui/react';
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
## Accessibility
|
|
592
|
+
|
|
593
|
+
### WCAG 2.1 AA Compliant
|
|
594
|
+
|
|
595
|
+
Every component meets WCAG 2.1 Level AA standards:
|
|
596
|
+
|
|
597
|
+
#### β
Keyboard Navigation
|
|
598
|
+
- All interactive elements are keyboard accessible
|
|
599
|
+
- Logical tab order and focus management
|
|
600
|
+
- Skip links and focus traps where appropriate
|
|
601
|
+
|
|
602
|
+
#### β
Screen Reader Support
|
|
603
|
+
- Semantic HTML elements
|
|
604
|
+
- ARIA labels, descriptions, and live regions
|
|
605
|
+
- Proper heading hierarchy
|
|
606
|
+
|
|
607
|
+
#### β
Focus Management
|
|
608
|
+
- Visible focus indicators (customizable)
|
|
609
|
+
- Focus trap in modals and dialogs
|
|
610
|
+
- Restore focus on component unmount
|
|
611
|
+
|
|
612
|
+
#### β
Color Contrast
|
|
613
|
+
- 4.5:1 contrast ratio for normal text
|
|
614
|
+
- 3:1 contrast ratio for large text and UI components
|
|
615
|
+
- Supports Windows High Contrast mode
|
|
616
|
+
|
|
617
|
+
#### β
Responsive & Scalable
|
|
618
|
+
- Supports text scaling up to 200%
|
|
619
|
+
- Touch targets meet minimum size requirements (44Γ44px)
|
|
620
|
+
- Responsive design for all screen sizes
|
|
621
|
+
|
|
622
|
+
### Accessibility Features
|
|
623
|
+
|
|
624
|
+
```tsx
|
|
625
|
+
// Built-in ARIA support
|
|
626
|
+
<Button aria-label="Close dialog" aria-pressed={isActive}>
|
|
627
|
+
Γ
|
|
628
|
+
</Button>
|
|
629
|
+
|
|
630
|
+
// Automatic ID generation for form associations
|
|
631
|
+
<Input
|
|
632
|
+
label="Email" // Automatically associates label with input
|
|
633
|
+
helperText="We'll never share your email"
|
|
634
|
+
error="Invalid email format"
|
|
635
|
+
/>
|
|
636
|
+
|
|
637
|
+
// Focus management
|
|
638
|
+
<Modal
|
|
639
|
+
isOpen={isOpen}
|
|
640
|
+
onClose={onClose}
|
|
641
|
+
initialFocus={submitButtonRef} // Control initial focus
|
|
642
|
+
restoreFocus // Returns focus to trigger element
|
|
643
|
+
/>
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
### Accessibility Testing
|
|
647
|
+
|
|
648
|
+
All components are tested with:
|
|
649
|
+
- **jest-axe** - Automated accessibility testing
|
|
650
|
+
- **NVDA & JAWS** - Screen reader compatibility
|
|
651
|
+
- **Keyboard navigation** - Manual testing for all interactions
|
|
652
|
+
- **Color contrast analyzers** - Visual accessibility validation
|
|
653
|
+
|
|
654
|
+
---
|
|
655
|
+
|
|
656
|
+
## Performance
|
|
657
|
+
|
|
658
|
+
### Bundle Size Optimization
|
|
178
659
|
|
|
179
660
|
```bash
|
|
180
|
-
|
|
661
|
+
# Core components only (tree-shaken)
|
|
662
|
+
Button: ~2.5 KB gzipped
|
|
663
|
+
Input: ~3.1 KB gzipped
|
|
664
|
+
Modal: ~4.2 KB gzipped
|
|
665
|
+
Select: ~5.8 KB gzipped
|
|
666
|
+
DataGrid: ~12.3 KB gzipped
|
|
667
|
+
|
|
668
|
+
# Entire library (if imported at once)
|
|
669
|
+
Full bundle: ~45 KB gzipped
|
|
181
670
|
```
|
|
182
671
|
|
|
183
|
-
###
|
|
672
|
+
### Performance Features
|
|
673
|
+
|
|
674
|
+
- **Tree-Shaking** - Import only what you need
|
|
675
|
+
- **Code Splitting** - Lazy load components on demand
|
|
676
|
+
- **CSS-in-CSS** - No runtime CSS-in-JS overhead
|
|
677
|
+
- **Memoization** - Smart component memoization
|
|
678
|
+
- **Virtual Scrolling** - For large lists (Table, DataGrid)
|
|
679
|
+
- **Lazy Loading** - Images and heavy components
|
|
680
|
+
|
|
681
|
+
### Best Practices
|
|
682
|
+
|
|
683
|
+
```tsx
|
|
684
|
+
// β
Good - Tree-shakable imports
|
|
685
|
+
import { Button, Input } from '@vtx-ui/react';
|
|
686
|
+
|
|
687
|
+
// β Avoid - Imports entire library
|
|
688
|
+
import * as VUI from '@vtx-ui/react';
|
|
689
|
+
|
|
690
|
+
// β
Good - Lazy load heavy components
|
|
691
|
+
const DataGrid = lazy(() => import('@vtx-ui/react').then(m => ({ default: m.DataGrid })));
|
|
692
|
+
|
|
693
|
+
// β
Good - Import only required widgets
|
|
694
|
+
import { ProductCard } from '@vtx-ui/react';
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
## Development
|
|
700
|
+
|
|
701
|
+
### Setup Development Environment
|
|
184
702
|
|
|
185
703
|
```bash
|
|
704
|
+
# Clone repository
|
|
705
|
+
git clone https://github.com/vertex-ui/react.git
|
|
706
|
+
cd react
|
|
707
|
+
|
|
708
|
+
# Install dependencies
|
|
709
|
+
npm install
|
|
710
|
+
|
|
711
|
+
# Start Storybook development server
|
|
186
712
|
npm run storybook
|
|
187
713
|
```
|
|
188
714
|
|
|
189
|
-
###
|
|
715
|
+
### Available Scripts
|
|
190
716
|
|
|
191
717
|
```bash
|
|
192
|
-
|
|
718
|
+
# Development
|
|
719
|
+
npm run storybook # Start Storybook on http://localhost:6006
|
|
720
|
+
|
|
721
|
+
# Building
|
|
722
|
+
npm run build # Build library for production
|
|
723
|
+
npm run build-storybook # Build static Storybook
|
|
724
|
+
|
|
725
|
+
# Testing
|
|
726
|
+
npm test # Run test suite
|
|
727
|
+
npm run test:watch # Run tests in watch mode
|
|
728
|
+
npm run test:coverage # Generate coverage report
|
|
729
|
+
|
|
730
|
+
# Code Quality
|
|
731
|
+
npm run lint # Lint code with ESLint
|
|
732
|
+
npm run format # Format code with Prettier
|
|
733
|
+
npm run type-check # TypeScript type checking
|
|
193
734
|
```
|
|
194
735
|
|
|
195
|
-
###
|
|
736
|
+
### Project Structure
|
|
196
737
|
|
|
197
|
-
```
|
|
198
|
-
|
|
738
|
+
```
|
|
739
|
+
vertex-ui-react/
|
|
740
|
+
βββ src/
|
|
741
|
+
β βββ components/ # Core UI components
|
|
742
|
+
β β βββ Button/
|
|
743
|
+
β β βββ Input/
|
|
744
|
+
β β βββ ...
|
|
745
|
+
β βββ widgets/ # Domain-specific widgets
|
|
746
|
+
β β βββ ProductCard/
|
|
747
|
+
β β βββ MetricCard/
|
|
748
|
+
β β βββ ...
|
|
749
|
+
β βββ hooks/ # Custom React hooks
|
|
750
|
+
β βββ theme/ # Theme system
|
|
751
|
+
β βββ utils/ # Utility functions
|
|
752
|
+
β βββ icons/ # Icon components
|
|
753
|
+
βββ tests/ # Test suites
|
|
754
|
+
βββ stories/ # Storybook stories
|
|
755
|
+
βββ dist/ # Build output
|
|
756
|
+
βββ docs/ # Documentation
|
|
199
757
|
```
|
|
200
758
|
|
|
201
|
-
###
|
|
759
|
+
### Adding a New Component
|
|
202
760
|
|
|
203
761
|
```bash
|
|
204
|
-
|
|
205
|
-
|
|
762
|
+
# 1. Create component directory
|
|
763
|
+
mkdir src/components/NewComponent
|
|
764
|
+
|
|
765
|
+
# 2. Create component files
|
|
766
|
+
touch src/components/NewComponent/{index.ts,NewComponent.tsx,NewComponent.css}
|
|
767
|
+
|
|
768
|
+
# 3. Implement component with TypeScript
|
|
769
|
+
# 4. Add styles with CSS custom properties
|
|
770
|
+
# 5. Write tests
|
|
771
|
+
# 6. Create Storybook story
|
|
772
|
+
# 7. Update exports in src/index.ts
|
|
206
773
|
```
|
|
207
774
|
|
|
775
|
+
### Testing Guidelines
|
|
776
|
+
|
|
777
|
+
```tsx
|
|
778
|
+
// Example test structure
|
|
779
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
780
|
+
import { Button } from './Button';
|
|
781
|
+
|
|
782
|
+
describe('Button', () => {
|
|
783
|
+
it('renders with text', () => {
|
|
784
|
+
render(<Button>Click me</Button>);
|
|
785
|
+
expect(screen.getByText('Click me')).toBeInTheDocument();
|
|
786
|
+
});
|
|
787
|
+
|
|
788
|
+
it('calls onClick when clicked', () => {
|
|
789
|
+
const handleClick = jest.fn();
|
|
790
|
+
render(<Button onClick={handleClick}>Click</Button>);
|
|
791
|
+
fireEvent.click(screen.getByText('Click'));
|
|
792
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
793
|
+
});
|
|
794
|
+
|
|
795
|
+
it('is accessible', async () => {
|
|
796
|
+
const { container } = render(<Button>Accessible</Button>);
|
|
797
|
+
const results = await axe(container);
|
|
798
|
+
expect(results).toHaveNoViolations();
|
|
799
|
+
});
|
|
800
|
+
});
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
---
|
|
804
|
+
|
|
208
805
|
## Browser Support
|
|
209
806
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
-
|
|
213
|
-
|
|
807
|
+
### Modern Browsers
|
|
808
|
+
|
|
809
|
+
@vtx-ui/react supports all modern browsers with the following minimum versions:
|
|
810
|
+
|
|
811
|
+
| Browser | Version |
|
|
812
|
+
|---------|---------|
|
|
813
|
+
| Chrome | 90+ |
|
|
814
|
+
| Firefox | 88+ |
|
|
815
|
+
| Safari | 14+ |
|
|
816
|
+
| Edge | 90+ |
|
|
817
|
+
| Opera | 76+ |
|
|
818
|
+
| Samsung Internet | 15+ |
|
|
819
|
+
|
|
820
|
+
### Mobile Support
|
|
821
|
+
|
|
822
|
+
- iOS Safari 14+
|
|
823
|
+
- Chrome for Android (latest)
|
|
824
|
+
- Samsung Internet 15+
|
|
825
|
+
|
|
826
|
+
### Features & Polyfills
|
|
827
|
+
|
|
828
|
+
- **ES6+ Features** - Modern JavaScript features are used throughout
|
|
829
|
+
- **CSS Custom Properties** - Required for theming (supported in all target browsers)
|
|
830
|
+
- **Flexbox & Grid** - Modern layout features
|
|
831
|
+
- **No polyfills required** - For supported browsers
|
|
832
|
+
|
|
833
|
+
---
|
|
834
|
+
|
|
835
|
+
## Enterprise Support
|
|
836
|
+
|
|
837
|
+
### Professional Services
|
|
838
|
+
|
|
839
|
+
[Innostes Solutions Pvt Ltd](https://innostes.com/) offers comprehensive enterprise support for @vtx-ui/react:
|
|
840
|
+
|
|
841
|
+
#### π― Enterprise Licensing
|
|
842
|
+
- Volume licensing options
|
|
843
|
+
- Priority support channels
|
|
844
|
+
- Custom SLA agreements
|
|
845
|
+
- Dedicated account management
|
|
846
|
+
|
|
847
|
+
#### π οΈ Custom Development
|
|
848
|
+
- Custom component development
|
|
849
|
+
- Theme customization services
|
|
850
|
+
- Integration assistance
|
|
851
|
+
- Performance optimization
|
|
852
|
+
|
|
853
|
+
#### π Training & Onboarding
|
|
854
|
+
- Team training sessions
|
|
855
|
+
- Best practices workshops
|
|
856
|
+
- Architecture consulting
|
|
857
|
+
- Migration assistance
|
|
858
|
+
|
|
859
|
+
#### π Security & Compliance
|
|
860
|
+
- Security audits
|
|
861
|
+
- Compliance documentation
|
|
862
|
+
- Private registry hosting
|
|
863
|
+
- Early security notifications
|
|
864
|
+
|
|
865
|
+
### Support Channels
|
|
866
|
+
|
|
867
|
+
- **Email**: [contact@innostes.com](mailto:contact@innostes.com)
|
|
868
|
+
- **Website**: [innostes.com](https://innostes.com/)
|
|
869
|
+
- **GitHub Issues**: [Report bugs or request features](https://github.com/vertex-ui/react/issues)
|
|
870
|
+
- **Documentation**: [vertexui.com](https://vertexui.com/)
|
|
871
|
+
|
|
872
|
+
---
|
|
214
873
|
|
|
215
874
|
## Contributing
|
|
216
875
|
|
|
217
|
-
|
|
876
|
+
We welcome contributions from the community! Whether it's bug fixes, new features, documentation improvements, or examplesβyour help makes @vtx-ui/react better for everyone.
|
|
877
|
+
|
|
878
|
+
### Getting Started
|
|
879
|
+
|
|
880
|
+
1. **Fork the repository** on GitHub
|
|
881
|
+
2. **Clone your fork** locally
|
|
882
|
+
3. **Create a branch** for your feature or fix
|
|
883
|
+
4. **Make your changes** with tests and documentation
|
|
884
|
+
5. **Submit a pull request** with a clear description
|
|
885
|
+
|
|
886
|
+
### Contribution Guidelines
|
|
887
|
+
|
|
888
|
+
#### Code Standards
|
|
889
|
+
- Follow existing code style and conventions
|
|
890
|
+
- Write TypeScript with strict mode enabled
|
|
891
|
+
- Include comprehensive JSDoc comments
|
|
892
|
+
- Maintain 100% test coverage for new code
|
|
893
|
+
- Ensure accessibility compliance (WCAG 2.1 AA)
|
|
894
|
+
|
|
895
|
+
#### Before Submitting
|
|
896
|
+
- [ ] Tests pass (`npm test`)
|
|
897
|
+
- [ ] Types are correct (`npm run type-check`)
|
|
898
|
+
- [ ] Code is formatted (`npm run format`)
|
|
899
|
+
- [ ] Storybook stories are updated
|
|
900
|
+
- [ ] Documentation is updated
|
|
901
|
+
- [ ] Accessibility is verified
|
|
902
|
+
|
|
903
|
+
#### Pull Request Process
|
|
904
|
+
1. Update README.md with details of interface changes
|
|
905
|
+
2. Update Storybook stories to showcase new features
|
|
906
|
+
3. Add tests for all new functionality
|
|
907
|
+
4. Ensure CI/CD pipeline passes
|
|
908
|
+
5. Request review from maintainers
|
|
909
|
+
|
|
910
|
+
### Code of Conduct
|
|
911
|
+
|
|
912
|
+
This project adheres to a Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [contact@innostes.com](mailto:contact@innostes.com).
|
|
913
|
+
|
|
914
|
+
### Ways to Contribute
|
|
915
|
+
|
|
916
|
+
- π **Report bugs** - Open detailed bug reports with reproduction steps
|
|
917
|
+
- π‘ **Request features** - Suggest new components or improvements
|
|
918
|
+
- π **Improve docs** - Fix typos, add examples, clarify concepts
|
|
919
|
+
- π¨ **Design contributions** - Propose UX improvements or new patterns
|
|
920
|
+
- π§ͺ **Add tests** - Improve test coverage or testing utilities
|
|
921
|
+
- π **Translations** - Help translate documentation
|
|
922
|
+
|
|
923
|
+
---
|
|
218
924
|
|
|
219
925
|
## License
|
|
220
926
|
|
|
221
927
|
MIT Β© [Innostes Solutions Pvt Ltd](https://innostes.com/)
|
|
222
928
|
|
|
929
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
930
|
+
|
|
931
|
+
### What This Means
|
|
932
|
+
|
|
933
|
+
β
**Commercial use** - Use in commercial projects
|
|
934
|
+
β
**Modification** - Modify the source code
|
|
935
|
+
β
**Distribution** - Distribute the library
|
|
936
|
+
β
**Private use** - Use privately in your organization
|
|
937
|
+
|
|
938
|
+
β οΈ **Limitation** - No warranty provided
|
|
939
|
+
β οΈ **Attribution required** - Copyright notice must be included
|
|
940
|
+
|
|
941
|
+
---
|
|
942
|
+
|
|
943
|
+
## Acknowledgments
|
|
944
|
+
|
|
945
|
+
### Built With
|
|
946
|
+
|
|
947
|
+
- [React](https://reactjs.org/) - UI library
|
|
948
|
+
- [TypeScript](https://www.typescriptlang.org/) - Type safety
|
|
949
|
+
- [Rollup](https://rollupjs.org/) - Module bundler
|
|
950
|
+
- [Storybook](https://storybook.js.org/) - Component development
|
|
951
|
+
- [Jest](https://jestjs.io/) - Testing framework
|
|
952
|
+
- [Testing Library](https://testing-library.com/) - Testing utilities
|
|
953
|
+
|
|
954
|
+
### Developed By
|
|
955
|
+
|
|
956
|
+
**Innostes Solutions Pvt Ltd**
|
|
957
|
+
Building enterprise-grade software solutions
|
|
958
|
+
|
|
959
|
+
- Website: [innostes.com](https://innostes.com/)
|
|
960
|
+
- Email: [contact@innostes.com](mailto:contact@innostes.com)
|
|
961
|
+
- GitHub: [@vertex-ui](https://github.com/vertex-ui)
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
223
965
|
## Links
|
|
224
966
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
- [
|
|
228
|
-
- [
|
|
967
|
+
### Documentation & Resources
|
|
968
|
+
|
|
969
|
+
- π **[Official Documentation](https://vertexui.com/)** - Complete guides and API reference
|
|
970
|
+
- π **[Storybook](https://vertexui.com/storybook)** - Interactive component explorer
|
|
971
|
+
- π¦ **[npm Package](https://www.npmjs.com/package/@vtx-ui/react)** - Package registry
|
|
972
|
+
- π» **[GitHub Repository](https://github.com/vertex-ui/react)** - Source code
|
|
973
|
+
- π **[Issue Tracker](https://github.com/vertex-ui/react/issues)** - Bug reports and feature requests
|
|
974
|
+
- π **[Changelog](https://github.com/vertex-ui/react/releases)** - Release history
|
|
975
|
+
|
|
976
|
+
### Community
|
|
977
|
+
|
|
978
|
+
- π¬ **[Discussions](https://github.com/vertex-ui/react/discussions)** - Community Q&A
|
|
979
|
+
- π¦ **[Twitter](https://twitter.com/vertexui)** - Latest updates
|
|
980
|
+
- πΌ **[LinkedIn](https://linkedin.com/company/innostes)** - Company updates
|
|
981
|
+
|
|
982
|
+
---
|
|
983
|
+
|
|
984
|
+
<p align="center">
|
|
985
|
+
<sub>Made with β€οΈ by <a href="https://innostes.com/">Innostes Solutions Pvt Ltd</a></sub>
|
|
986
|
+
</p>
|
|
987
|
+
|
|
988
|
+
<p align="center">
|
|
989
|
+
<sub>Part of the <a href="https://github.com/vertex-ui">vertex-ui</a> ecosystem</sub>
|
|
990
|
+
</p>
|