@vtx-ui/react 0.0.1-beta.1
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/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/components/Accordion/Accordion.d.ts +31 -0
- package/dist/components/Accordion/Accordion.examples.d.ts +3 -0
- package/dist/components/Accordion/AccordionItem.d.ts +5 -0
- package/dist/components/Accordion/index.d.ts +4 -0
- package/dist/components/Accordion/types.d.ts +98 -0
- package/dist/components/Alert/Alert.d.ts +119 -0
- package/dist/components/Alert/index.d.ts +3 -0
- package/dist/components/Avatar/Avatar.d.ts +63 -0
- package/dist/components/Avatar/index.d.ts +3 -0
- package/dist/components/Badge/Badge.d.ts +81 -0
- package/dist/components/Badge/index.d.ts +3 -0
- package/dist/components/Button/Button.d.ts +117 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Card/Card.d.ts +120 -0
- package/dist/components/Card/index.d.ts +3 -0
- package/dist/components/Checkbox/Checkbox.d.ts +114 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +121 -0
- package/dist/components/CheckboxGroup/index.d.ts +3 -0
- package/dist/components/Chip/Chip.d.ts +91 -0
- package/dist/components/Chip/index.d.ts +3 -0
- package/dist/components/Divider/Divider.d.ts +118 -0
- package/dist/components/Divider/index.d.ts +3 -0
- package/dist/components/Flex/Flex.d.ts +66 -0
- package/dist/components/Flex/index.d.ts +3 -0
- package/dist/components/Grid/Grid.d.ts +156 -0
- package/dist/components/Grid/index.d.ts +3 -0
- package/dist/components/Header/Header.d.ts +138 -0
- package/dist/components/Header/index.d.ts +3 -0
- package/dist/components/Input/Input.d.ts +129 -0
- package/dist/components/Input/index.d.ts +3 -0
- package/dist/components/Menu/Menu.d.ts +114 -0
- package/dist/components/Menu/index.d.ts +4 -0
- package/dist/components/Modal/Modal.d.ts +201 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/MultiSelect/MultiSelect.d.ts +190 -0
- package/dist/components/MultiSelect/index.d.ts +3 -0
- package/dist/components/Radio/Radio.d.ts +105 -0
- package/dist/components/Radio/index.d.ts +3 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +134 -0
- package/dist/components/RadioGroup/index.d.ts +3 -0
- package/dist/components/Select/Select.d.ts +169 -0
- package/dist/components/Select/index.d.ts +3 -0
- package/dist/components/SideMenu/SideMenu.d.ts +118 -0
- package/dist/components/SideMenu/index.d.ts +4 -0
- package/dist/components/Table/Table.d.ts +211 -0
- package/dist/components/Table/index.d.ts +3 -0
- package/dist/components/Text/Text.d.ts +160 -0
- package/dist/components/Text/index.d.ts +3 -0
- package/dist/components/Toast/Toast.d.ts +56 -0
- package/dist/components/Toast/ToastContainer.d.ts +6 -0
- package/dist/components/Toast/index.d.ts +5 -0
- package/dist/components/Toast/types.d.ts +148 -0
- package/dist/components/Toast/useToast.d.ts +34 -0
- package/dist/components/Tooltip/Tooltip.d.ts +108 -0
- package/dist/components/Tooltip/index.d.ts +3 -0
- package/dist/hooks/index.d.ts +85 -0
- package/dist/hooks/useTheme.d.ts +268 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +39 -0
- package/dist/theme/cssVariables.d.ts +9 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/tokens.d.ts +258 -0
- package/dist/types/components/Accordion/Accordion.d.ts +31 -0
- package/dist/types/components/Accordion/Accordion.examples.d.ts +3 -0
- package/dist/types/components/Accordion/AccordionItem.d.ts +5 -0
- package/dist/types/components/Accordion/index.d.ts +4 -0
- package/dist/types/components/Accordion/types.d.ts +98 -0
- package/dist/types/components/Alert/Alert.d.ts +119 -0
- package/dist/types/components/Alert/index.d.ts +3 -0
- package/dist/types/components/Avatar/Avatar.d.ts +63 -0
- package/dist/types/components/Avatar/index.d.ts +3 -0
- package/dist/types/components/Badge/Badge.d.ts +81 -0
- package/dist/types/components/Badge/index.d.ts +3 -0
- package/dist/types/components/Button/Button.d.ts +117 -0
- package/dist/types/components/Button/index.d.ts +3 -0
- package/dist/types/components/Card/Card.d.ts +120 -0
- package/dist/types/components/Card/index.d.ts +3 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts +114 -0
- package/dist/types/components/Checkbox/index.d.ts +3 -0
- package/dist/types/components/CheckboxGroup/CheckboxGroup.d.ts +121 -0
- package/dist/types/components/CheckboxGroup/index.d.ts +3 -0
- package/dist/types/components/Chip/Chip.d.ts +91 -0
- package/dist/types/components/Chip/index.d.ts +3 -0
- package/dist/types/components/Divider/Divider.d.ts +118 -0
- package/dist/types/components/Divider/index.d.ts +3 -0
- package/dist/types/components/Flex/Flex.d.ts +66 -0
- package/dist/types/components/Flex/index.d.ts +3 -0
- package/dist/types/components/Grid/Grid.d.ts +156 -0
- package/dist/types/components/Grid/index.d.ts +3 -0
- package/dist/types/components/Header/Header.d.ts +138 -0
- package/dist/types/components/Header/index.d.ts +3 -0
- package/dist/types/components/Input/Input.d.ts +129 -0
- package/dist/types/components/Input/index.d.ts +3 -0
- package/dist/types/components/Menu/Menu.d.ts +114 -0
- package/dist/types/components/Menu/index.d.ts +4 -0
- package/dist/types/components/Modal/Modal.d.ts +201 -0
- package/dist/types/components/Modal/index.d.ts +3 -0
- package/dist/types/components/MultiSelect/MultiSelect.d.ts +190 -0
- package/dist/types/components/MultiSelect/index.d.ts +3 -0
- package/dist/types/components/Radio/Radio.d.ts +105 -0
- package/dist/types/components/Radio/index.d.ts +3 -0
- package/dist/types/components/RadioGroup/RadioGroup.d.ts +134 -0
- package/dist/types/components/RadioGroup/index.d.ts +3 -0
- package/dist/types/components/Select/Select.d.ts +169 -0
- package/dist/types/components/Select/index.d.ts +3 -0
- package/dist/types/components/SideMenu/SideMenu.d.ts +118 -0
- package/dist/types/components/SideMenu/index.d.ts +4 -0
- package/dist/types/components/Table/Table.d.ts +211 -0
- package/dist/types/components/Table/index.d.ts +3 -0
- package/dist/types/components/Text/Text.d.ts +160 -0
- package/dist/types/components/Text/index.d.ts +3 -0
- package/dist/types/components/Toast/Toast.d.ts +56 -0
- package/dist/types/components/Toast/ToastContainer.d.ts +6 -0
- package/dist/types/components/Toast/index.d.ts +5 -0
- package/dist/types/components/Toast/types.d.ts +148 -0
- package/dist/types/components/Toast/useToast.d.ts +34 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +108 -0
- package/dist/types/components/Tooltip/index.d.ts +3 -0
- package/dist/types/hooks/index.d.ts +85 -0
- package/dist/types/hooks/useTheme.d.ts +268 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/theme/ThemeProvider.d.ts +39 -0
- package/dist/types/theme/cssVariables.d.ts +9 -0
- package/dist/types/theme/index.d.ts +6 -0
- package/dist/types/theme/tokens.d.ts +258 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Innostes Solutions Pvt Ltd
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://innostes.com/images/home/section_navbar/company-latest-logo.png" alt="Innostes Solutions Pvt Ltd" width="220"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# @vtx-ui/react
|
|
6
|
+
|
|
7
|
+
A production-ready React + TypeScript UI library with enterprise-grade components.
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<b>Documentation & full guides at <a href="https://vertexui.com/" target="_blank">vertexui.com</a></b><br/>
|
|
11
|
+
<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
|
+
</p>
|
|
13
|
+
|
|
14
|
+
[](https://www.npmjs.com/package/@vtx-ui/react)
|
|
15
|
+
[](https://opensource.org/licenses/MIT)
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
✨ **Enterprise-Ready** - Production-grade components with strict TypeScript support
|
|
20
|
+
♿ **Accessible** - WCAG 2.1 AA compliant with full ARIA support
|
|
21
|
+
🎨 **Unified Theme System** - Consistent primary color-based design across all 23 components
|
|
22
|
+
🎯 **Fully Customizable** - Change entire theme with CSS custom properties (no rebuild needed)
|
|
23
|
+
📦 **Tree-Shakable** - Optimized bundle size with ESM support
|
|
24
|
+
🧪 **Well Tested** - 508 passing tests with 100% component coverage
|
|
25
|
+
📚 **Documented** - Complete JSDoc comments, Storybook, and theming guides
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install @vtx-ui/react
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
yarn add @vtx-ui/react
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pnpm add @vtx-ui/react
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { ThemeProvider, Button } from '@vtx-ui/react';
|
|
45
|
+
import '@vtx-ui/react/styles.css';
|
|
46
|
+
|
|
47
|
+
function App() {
|
|
48
|
+
return (
|
|
49
|
+
<ThemeProvider>
|
|
50
|
+
<Button variant="primary" onClick={() => console.log('clicked')}>
|
|
51
|
+
Click me
|
|
52
|
+
</Button>
|
|
53
|
+
</ThemeProvider>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Theming
|
|
59
|
+
|
|
60
|
+
All components use a **unified primary color system** for consistent branding:
|
|
61
|
+
|
|
62
|
+
```css
|
|
63
|
+
/* Change the entire theme by updating primary color tokens */
|
|
64
|
+
:root {
|
|
65
|
+
--vtx-color-primary-500: #3b82f6; /* Focus rings, borders */
|
|
66
|
+
--vtx-color-primary-600: #2563eb; /* Main brand color */
|
|
67
|
+
--vtx-color-primary-700: #1d4ed8; /* Hover states */
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Examples:**
|
|
72
|
+
|
|
73
|
+
- **Blue (default)**: Modern, tech-focused
|
|
74
|
+
- **Green**: Eco-friendly, growth-oriented
|
|
75
|
+
- **Purple**: Premium, creative brand
|
|
76
|
+
- **Red**: Bold, action-driven
|
|
77
|
+
|
|
78
|
+
📖 **[Complete Theming Guide](./DESIGN_SYSTEM_THEMING.md)** - Learn how to customize colors, spacing, typography, and more.
|
|
79
|
+
|
|
80
|
+
## Components
|
|
81
|
+
|
|
82
|
+
### 23 Production-Ready Components
|
|
83
|
+
|
|
84
|
+
**Form Controls**: Button, Input, Select, MultiSelect, Checkbox, Radio, CheckboxGroup, RadioGroup
|
|
85
|
+
**Interactive**: Accordion, Card, Modal, Toast, Tooltip
|
|
86
|
+
**Display**: Chip, Badge, Alert, Table, Avatar, Divider, Text
|
|
87
|
+
**Layout**: Flex, Grid
|
|
88
|
+
|
|
89
|
+
### Example Usage
|
|
90
|
+
|
|
91
|
+
#### Button
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
import { Button } from '@vtx-ui/react';
|
|
95
|
+
|
|
96
|
+
<Button variant="primary" size="large" loading={false}>
|
|
97
|
+
Click me
|
|
98
|
+
</Button>;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### Input
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
import { Input } from '@vtx-ui/react';
|
|
105
|
+
|
|
106
|
+
<Input
|
|
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
|
+
```
|
|
114
|
+
|
|
115
|
+
#### Modal
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
import { Modal, Button } from '@vtx-ui/react';
|
|
119
|
+
|
|
120
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
121
|
+
|
|
122
|
+
<Modal
|
|
123
|
+
isOpen={isOpen}
|
|
124
|
+
onClose={() => setIsOpen(false)}
|
|
125
|
+
title="Confirm Action"
|
|
126
|
+
footer={
|
|
127
|
+
<>
|
|
128
|
+
<Button onClick={() => setIsOpen(false)}>Cancel</Button>
|
|
129
|
+
<Button variant="primary">Confirm</Button>
|
|
130
|
+
</>
|
|
131
|
+
}
|
|
132
|
+
>
|
|
133
|
+
<p>Are you sure you want to proceed?</p>
|
|
134
|
+
</Modal>;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Theming
|
|
138
|
+
|
|
139
|
+
The library uses a comprehensive design token system with CSS variables:
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import { ThemeProvider, tokens } from '@vtx-ui/react';
|
|
143
|
+
|
|
144
|
+
function App() {
|
|
145
|
+
return (
|
|
146
|
+
<ThemeProvider initialMode="light">
|
|
147
|
+
<YourApp />
|
|
148
|
+
</ThemeProvider>
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Using Theme Tokens
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
import { useTheme } from '@vtx-ui/react';
|
|
157
|
+
|
|
158
|
+
function MyComponent() {
|
|
159
|
+
const { tokens, mode, setMode } = useTheme();
|
|
160
|
+
|
|
161
|
+
return <div style={{ color: tokens.colors.primary[500] }}>Current mode: {mode}</div>;
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Custom Hooks
|
|
166
|
+
|
|
167
|
+
- `useTheme` - Access theme tokens and mode
|
|
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
|
|
174
|
+
|
|
175
|
+
## Development
|
|
176
|
+
|
|
177
|
+
### Install dependencies
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm install
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Start Storybook
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm run storybook
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Run tests
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm test
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Build library
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
npm run build
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Lint and format
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
npm run lint
|
|
205
|
+
npm run format
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Browser Support
|
|
209
|
+
|
|
210
|
+
- Chrome (latest)
|
|
211
|
+
- Firefox (latest)
|
|
212
|
+
- Safari (latest)
|
|
213
|
+
- Edge (latest)
|
|
214
|
+
|
|
215
|
+
## Contributing
|
|
216
|
+
|
|
217
|
+
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
|
|
218
|
+
|
|
219
|
+
## License
|
|
220
|
+
|
|
221
|
+
MIT © [Innostes Solutions Pvt Ltd](https://innostes.com/)
|
|
222
|
+
|
|
223
|
+
## Links
|
|
224
|
+
|
|
225
|
+
- [Documentation](https://vertexui.com/)
|
|
226
|
+
- [Storybook](https://vertexui.com/storybook)
|
|
227
|
+
- [npm](https://www.npmjs.com/package/@vtx-ui/react)
|
|
228
|
+
- [GitHub](https://github.com/vertex-ui/react)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AccordionProps } from "./types";
|
|
3
|
+
import './Accordion.css';
|
|
4
|
+
/**
|
|
5
|
+
* Accordion component - Collapsible content panels for presenting information in a limited space.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* Basic usage with items prop:
|
|
9
|
+
* ```tsx
|
|
10
|
+
* <Accordion
|
|
11
|
+
* items={[
|
|
12
|
+
* { id: 'item1', header: 'Section 1', children: <div>Content 1</div> },
|
|
13
|
+
* { id: 'item2', header: 'Section 2', children: <div>Content 2</div> },
|
|
14
|
+
* ]}
|
|
15
|
+
* />
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* Usage with AccordionItem children:
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <Accordion>
|
|
22
|
+
* <AccordionItem id="item1" header="Section 1">Content 1</AccordionItem>
|
|
23
|
+
* <AccordionItem id="item2" header="Section 2">Content 2</AccordionItem>
|
|
24
|
+
* </Accordion>
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
28
|
+
declare const _default: React.FC<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
export default _default;
|
|
30
|
+
export { Accordion };
|
|
31
|
+
export type { AccordionProps };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AccordionItemComponentProps, AccordionItemProps } from './types';
|
|
3
|
+
declare const _default: React.FC<AccordionItemComponentProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
export default _default;
|
|
5
|
+
export declare const AccordionItemWrapper: React.FC<AccordionItemProps>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as Accordion } from './Accordion';
|
|
2
|
+
export type { AccordionProps, AccordionItemProps, AccordionItemComponentProps } from './types';
|
|
3
|
+
export { Accordion as AccordionComponent } from './Accordion';
|
|
4
|
+
export { default as AccordionItem, AccordionItemWrapper } from './AccordionItem';
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface AccordionItemProps {
|
|
3
|
+
/** Unique identifier for the accordion item */
|
|
4
|
+
id: string;
|
|
5
|
+
/** The header content for the accordion item */
|
|
6
|
+
header: ReactNode;
|
|
7
|
+
/** The body content for the accordion item */
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
/** Whether this item is disabled */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** Custom class name for the accordion item */
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Loading state for this specific item */
|
|
14
|
+
loading?: boolean;
|
|
15
|
+
/** Status indicator for the item */
|
|
16
|
+
status?: 'default' | 'success' | 'warning' | 'error' | 'featured';
|
|
17
|
+
/** Custom icon for this specific item (overrides accordion-level icons) */
|
|
18
|
+
icon?: {
|
|
19
|
+
expanded?: React.ReactNode;
|
|
20
|
+
collapsed?: React.ReactNode;
|
|
21
|
+
};
|
|
22
|
+
/** Additional data attributes for testing or analytics */
|
|
23
|
+
dataTestId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AccordionProps {
|
|
26
|
+
/** Array of accordion items */
|
|
27
|
+
items?: AccordionItemProps[];
|
|
28
|
+
/** Children accordion items (alternative to items prop) */
|
|
29
|
+
children?: ReactNode;
|
|
30
|
+
/** Whether multiple items can be open at once */
|
|
31
|
+
allowMultiple?: boolean;
|
|
32
|
+
/** Default open items (controlled) */
|
|
33
|
+
defaultOpenItems?: string[];
|
|
34
|
+
/** Open items (uncontrolled) */
|
|
35
|
+
openItems?: string[];
|
|
36
|
+
/** Callback when items are toggled */
|
|
37
|
+
onToggle?: (openItems: string[]) => void;
|
|
38
|
+
/** Visual variant style of the accordion */
|
|
39
|
+
variant?: 'default' | 'bordered' | 'separated' | 'flush';
|
|
40
|
+
/** Size variant of the accordion */
|
|
41
|
+
size?: 'sm' | 'md' | 'lg';
|
|
42
|
+
/** Custom class name */
|
|
43
|
+
className?: string;
|
|
44
|
+
/** Custom styles */
|
|
45
|
+
style?: React.CSSProperties;
|
|
46
|
+
/** Whether to show chevron icons */
|
|
47
|
+
showChevron?: boolean;
|
|
48
|
+
/** Position of the chevron icon */
|
|
49
|
+
chevronPosition?: 'left' | 'right';
|
|
50
|
+
/** Custom icon for expanded state */
|
|
51
|
+
expandedIcon?: React.ReactNode;
|
|
52
|
+
/** Custom icon for collapsed state */
|
|
53
|
+
collapsedIcon?: React.ReactNode;
|
|
54
|
+
/** Icon type preset */
|
|
55
|
+
iconType?: 'chevron' | 'plus-minus' | 'custom';
|
|
56
|
+
/** Whether to show divider lines between items */
|
|
57
|
+
showDivider?: boolean;
|
|
58
|
+
/** Whether items are collapsible (can all be closed) */
|
|
59
|
+
collapsible?: boolean;
|
|
60
|
+
/** Loading state for the entire accordion */
|
|
61
|
+
loading?: boolean;
|
|
62
|
+
/** Disable all accordion interactions */
|
|
63
|
+
disabled?: boolean;
|
|
64
|
+
/** Spacing variant for compact or spacious layouts */
|
|
65
|
+
spacing?: 'compact' | 'default' | 'spacious';
|
|
66
|
+
/** Disable animations for better performance or accessibility */
|
|
67
|
+
disableAnimations?: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface AccordionItemComponentProps {
|
|
70
|
+
/** The accordion item data */
|
|
71
|
+
item: AccordionItemProps;
|
|
72
|
+
/** Whether this item is open */
|
|
73
|
+
isOpen: boolean;
|
|
74
|
+
/** Function to toggle this item */
|
|
75
|
+
onToggle: () => void;
|
|
76
|
+
/** Variant from parent accordion */
|
|
77
|
+
variant: AccordionProps['variant'];
|
|
78
|
+
/** Size from parent accordion */
|
|
79
|
+
size: AccordionProps['size'];
|
|
80
|
+
/** Whether to show chevron */
|
|
81
|
+
showChevron: boolean;
|
|
82
|
+
/** Chevron position */
|
|
83
|
+
chevronPosition: AccordionProps['chevronPosition'];
|
|
84
|
+
/** Custom icon for expanded state */
|
|
85
|
+
expandedIcon?: React.ReactNode;
|
|
86
|
+
/** Custom icon for collapsed state */
|
|
87
|
+
collapsedIcon?: React.ReactNode;
|
|
88
|
+
/** Icon type preset */
|
|
89
|
+
iconType?: AccordionProps['iconType'];
|
|
90
|
+
/** Loading state from parent accordion */
|
|
91
|
+
loading?: boolean;
|
|
92
|
+
/** Disabled state from parent accordion */
|
|
93
|
+
disabled?: boolean;
|
|
94
|
+
/** Spacing variant from parent accordion */
|
|
95
|
+
spacing?: AccordionProps['spacing'];
|
|
96
|
+
/** Disable animations */
|
|
97
|
+
disableAnimations?: boolean;
|
|
98
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './Alert.css';
|
|
3
|
+
export interface AlertProps {
|
|
4
|
+
/**
|
|
5
|
+
* Content of the alert (primary message, can be any ReactNode)
|
|
6
|
+
*/
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Alert title
|
|
10
|
+
*/
|
|
11
|
+
title?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Alert description - alternative to children for simple text
|
|
14
|
+
*/
|
|
15
|
+
description?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Visual variant of the alert
|
|
18
|
+
* @default 'info'
|
|
19
|
+
*/
|
|
20
|
+
variant?: 'success' | 'error' | 'warning' | 'info' | 'neutral';
|
|
21
|
+
/**
|
|
22
|
+
* Visual style of the alert
|
|
23
|
+
* @default 'subtle'
|
|
24
|
+
*/
|
|
25
|
+
alertStyle?: 'filled' | 'outlined' | 'subtle' | 'left-accent';
|
|
26
|
+
/** Size of the alert. Defaults to theme defaultSize or 'md'. */
|
|
27
|
+
size?: 'sm' | 'md' | 'lg';
|
|
28
|
+
/**
|
|
29
|
+
* Custom icon or false to hide icon
|
|
30
|
+
* If not provided, shows default icon based on variant
|
|
31
|
+
*/
|
|
32
|
+
icon?: React.ReactNode | false;
|
|
33
|
+
/**
|
|
34
|
+
* If true, shows close button
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
dismissible?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Callback fired when alert is dismissed
|
|
40
|
+
*/
|
|
41
|
+
onClose?: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* Action element (button or link) displayed on the right
|
|
44
|
+
*/
|
|
45
|
+
action?: React.ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* If true, alert takes full width of container
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
fullWidth?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Custom class name
|
|
53
|
+
*/
|
|
54
|
+
className?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Custom inline styles
|
|
57
|
+
*/
|
|
58
|
+
style?: React.CSSProperties;
|
|
59
|
+
/**
|
|
60
|
+
* Role attribute for accessibility
|
|
61
|
+
* @default 'alert'
|
|
62
|
+
*/
|
|
63
|
+
role?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Alert component - Displays important messages and notifications
|
|
67
|
+
*
|
|
68
|
+
* A flexible alert component supporting multiple variants, styles, and interactive features.
|
|
69
|
+
* Can display simple messages or complex content with titles, actions, and custom icons.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* Simple alert with children
|
|
73
|
+
* ```tsx
|
|
74
|
+
* <Alert variant="success">
|
|
75
|
+
* Your changes have been saved!
|
|
76
|
+
* </Alert>
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* Alert with title and description
|
|
81
|
+
* ```tsx
|
|
82
|
+
* <Alert
|
|
83
|
+
* variant="error"
|
|
84
|
+
* title="Error occurred"
|
|
85
|
+
* description="Unable to connect to the server."
|
|
86
|
+
* dismissible
|
|
87
|
+
* onClose={() => console.log('closed')}
|
|
88
|
+
* />
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* Alert with action button
|
|
93
|
+
* ```tsx
|
|
94
|
+
* <Alert
|
|
95
|
+
* variant="warning"
|
|
96
|
+
* title="Update available"
|
|
97
|
+
* style="left-accent"
|
|
98
|
+
* action={<Button size="small">Update Now</Button>}
|
|
99
|
+
* >
|
|
100
|
+
* A new version is available. Update to get the latest features.
|
|
101
|
+
* </Alert>
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* Alert with custom icon
|
|
106
|
+
* ```tsx
|
|
107
|
+
* <Alert
|
|
108
|
+
* variant="info"
|
|
109
|
+
* icon={<CustomIcon />}
|
|
110
|
+
* title="Custom notification"
|
|
111
|
+
* >
|
|
112
|
+
* This alert uses a custom icon.
|
|
113
|
+
* </Alert>
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
|
|
117
|
+
declare const _default: React.FC<AlertProps & React.RefAttributes<HTMLDivElement>>;
|
|
118
|
+
export default _default;
|
|
119
|
+
export { Alert };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { HTMLAttributes, ImgHTMLAttributes } from "react";
|
|
3
|
+
import './Avatar.css';
|
|
4
|
+
/**
|
|
5
|
+
* Avatar component - Displays user profile image, initials, or fallback
|
|
6
|
+
*
|
|
7
|
+
* The Avatar component supports images, fallback text, different sizes, shapes, and status indicators.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* Basic avatar with image
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Avatar src="https://randomuser.me/api/portraits/men/1.jpg" alt="John Doe" />
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* Avatar with fallback text
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <Avatar fallback="JD" />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* Different sizes
|
|
23
|
+
* ```tsx
|
|
24
|
+
* <Avatar src="..." size="small" />
|
|
25
|
+
* <Avatar src="..." size="large" />
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* Square shape
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <Avatar src="..." shape="square" />
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* Status indicator
|
|
36
|
+
* ```tsx
|
|
37
|
+
* <Avatar
|
|
38
|
+
* src="..."
|
|
39
|
+
* statusIndicator={<span style={{ background: 'green', borderRadius: '50%', width: 12, height: 12, display: 'inline-block' }} />}
|
|
40
|
+
* statusPosition="top-right"
|
|
41
|
+
* />
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
45
|
+
src?: string;
|
|
46
|
+
alt?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Size of the avatar
|
|
49
|
+
* @default theme.defaultSize or 'md'
|
|
50
|
+
*/
|
|
51
|
+
size?: 'sm' | 'md' | 'lg';
|
|
52
|
+
shape?: 'circle' | 'square';
|
|
53
|
+
fallback?: string;
|
|
54
|
+
onImageError?: (error: React.SyntheticEvent<HTMLImageElement, Event>) => void;
|
|
55
|
+
onImageLoad?: (event: React.SyntheticEvent<HTMLImageElement, Event>) => void;
|
|
56
|
+
imgProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'className' | 'onError' | 'onLoad'>;
|
|
57
|
+
statusIndicator?: React.ReactNode;
|
|
58
|
+
statusPosition?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
59
|
+
}
|
|
60
|
+
declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
|
|
61
|
+
declare const _default: React.FC<AvatarProps & React.RefAttributes<HTMLDivElement>>;
|
|
62
|
+
export default _default;
|
|
63
|
+
export { Avatar };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React, { HTMLAttributes } from 'react';
|
|
2
|
+
import './Badge.css';
|
|
3
|
+
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
4
|
+
/**
|
|
5
|
+
* Visual variant of the badge
|
|
6
|
+
* @default 'neutral'
|
|
7
|
+
*/
|
|
8
|
+
variant?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
9
|
+
/**
|
|
10
|
+
* Size of the badge
|
|
11
|
+
* @default 'medium'
|
|
12
|
+
*/
|
|
13
|
+
size?: 'small' | 'medium' | 'large';
|
|
14
|
+
/**
|
|
15
|
+
* If true, badge will be pill-shaped with rounded ends
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
pill?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* If true, displays a dot indicator before the content
|
|
21
|
+
* Useful for status indicators
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
dot?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* If true, displays the badge with an outline style instead of filled
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
outline?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum content length before truncation
|
|
32
|
+
* Useful for limiting badge text length
|
|
33
|
+
*/
|
|
34
|
+
maxLength?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Icon to display before the badge content
|
|
37
|
+
*/
|
|
38
|
+
icon?: React.ReactNode;
|
|
39
|
+
/**
|
|
40
|
+
* Badge content - text, numbers, or custom elements
|
|
41
|
+
*/
|
|
42
|
+
children: React.ReactNode;
|
|
43
|
+
/**
|
|
44
|
+
* Callback fired when badge is clicked
|
|
45
|
+
*/
|
|
46
|
+
onRemove?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Badge component - Small labels and indicators for status, counts, or categories
|
|
50
|
+
*
|
|
51
|
+
* A versatile badge component that can display status indicators, counts, tags, or any short text
|
|
52
|
+
* with various visual styles and customization options.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* Basic status badges
|
|
56
|
+
* ```tsx
|
|
57
|
+
* <Badge variant="success">Active</Badge>
|
|
58
|
+
* <Badge variant="error" dot>Error</Badge>
|
|
59
|
+
* <Badge variant="primary" pill>NEW</Badge>
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* With icon and outline
|
|
64
|
+
* ```tsx
|
|
65
|
+
* <Badge variant="info" icon={<InfoIcon />} outline>
|
|
66
|
+
* Information
|
|
67
|
+
* </Badge>
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* Removable badge
|
|
72
|
+
* ```tsx
|
|
73
|
+
* <Badge variant="primary" onRemove={(e) => handleRemove()}>
|
|
74
|
+
* Tag 1
|
|
75
|
+
* </Badge>
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
79
|
+
declare const _default: React.FC<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
80
|
+
export default _default;
|
|
81
|
+
export { Badge };
|