@lp-labs/ui-components 0.0.0-stage → 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.
Files changed (244) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.md +256 -2
  4. package/dist/cjs/components/Accordion.d.ts +78 -0
  5. package/dist/cjs/components/Accordion.js +78 -0
  6. package/dist/cjs/components/AdvancedComponents.d.ts +353 -0
  7. package/dist/cjs/components/AdvancedComponents.js +353 -0
  8. package/dist/cjs/components/Alert.d.ts +102 -0
  9. package/dist/cjs/components/Alert.js +102 -0
  10. package/dist/cjs/components/Avatar.d.ts +89 -0
  11. package/dist/cjs/components/Avatar.js +89 -0
  12. package/dist/cjs/components/Badge.d.ts +57 -0
  13. package/dist/cjs/components/Badge.js +57 -0
  14. package/dist/cjs/components/Breadcrumb.d.ts +50 -0
  15. package/dist/cjs/components/Breadcrumb.js +50 -0
  16. package/dist/cjs/components/Button.d.ts +77 -0
  17. package/dist/cjs/components/Button.js +77 -0
  18. package/dist/cjs/components/ButtonVariants.d.ts +261 -0
  19. package/dist/cjs/components/ButtonVariants.js +261 -0
  20. package/dist/cjs/components/Card.d.ts +56 -0
  21. package/dist/cjs/components/Card.js +56 -0
  22. package/dist/cjs/components/CardVariants.d.ts +267 -0
  23. package/dist/cjs/components/CardVariants.js +267 -0
  24. package/dist/cjs/components/Checkbox.d.ts +50 -0
  25. package/dist/cjs/components/Checkbox.js +50 -0
  26. package/dist/cjs/components/Chip.d.ts +104 -0
  27. package/dist/cjs/components/Chip.js +104 -0
  28. package/dist/cjs/components/DataDisplayComponents.d.ts +275 -0
  29. package/dist/cjs/components/DataDisplayComponents.js +275 -0
  30. package/dist/cjs/components/Divider.d.ts +77 -0
  31. package/dist/cjs/components/Divider.js +77 -0
  32. package/dist/cjs/components/Drawer.d.ts +142 -0
  33. package/dist/cjs/components/Drawer.js +142 -0
  34. package/dist/cjs/components/Dropdown.d.ts +139 -0
  35. package/dist/cjs/components/Dropdown.js +139 -0
  36. package/dist/cjs/components/Form.d.ts +41 -0
  37. package/dist/cjs/components/Form.js +41 -0
  38. package/dist/cjs/components/FormGroup.d.ts +58 -0
  39. package/dist/cjs/components/FormGroup.js +58 -0
  40. package/dist/cjs/components/FormInputVariants.d.ts +298 -0
  41. package/dist/cjs/components/FormInputVariants.js +298 -0
  42. package/dist/cjs/components/Image.d.ts +106 -0
  43. package/dist/cjs/components/Image.js +106 -0
  44. package/dist/cjs/components/Input.d.ts +65 -0
  45. package/dist/cjs/components/Input.js +65 -0
  46. package/dist/cjs/components/LayoutComponents.d.ts +258 -0
  47. package/dist/cjs/components/LayoutComponents.js +258 -0
  48. package/dist/cjs/components/Link.d.ts +71 -0
  49. package/dist/cjs/components/Link.js +71 -0
  50. package/dist/cjs/components/LoadingFeedbackComponents.d.ts +230 -0
  51. package/dist/cjs/components/LoadingFeedbackComponents.js +230 -0
  52. package/dist/cjs/components/Menu.d.ts +167 -0
  53. package/dist/cjs/components/Menu.js +167 -0
  54. package/dist/cjs/components/Modal.d.ts +145 -0
  55. package/dist/cjs/components/Modal.js +145 -0
  56. package/dist/cjs/components/ModalTypes.d.ts +288 -0
  57. package/dist/cjs/components/ModalTypes.js +288 -0
  58. package/dist/cjs/components/Navbar.d.ts +181 -0
  59. package/dist/cjs/components/Navbar.js +181 -0
  60. package/dist/cjs/components/NavigationComponents.d.ts +276 -0
  61. package/dist/cjs/components/NavigationComponents.js +276 -0
  62. package/dist/cjs/components/Pagination.d.ts +94 -0
  63. package/dist/cjs/components/Pagination.js +94 -0
  64. package/dist/cjs/components/Popover.d.ts +108 -0
  65. package/dist/cjs/components/Popover.js +108 -0
  66. package/dist/cjs/components/Progress.d.ts +68 -0
  67. package/dist/cjs/components/Progress.js +68 -0
  68. package/dist/cjs/components/Radio.d.ts +93 -0
  69. package/dist/cjs/components/Radio.js +93 -0
  70. package/dist/cjs/components/Rating.d.ts +82 -0
  71. package/dist/cjs/components/Rating.js +82 -0
  72. package/dist/cjs/components/Select.d.ts +74 -0
  73. package/dist/cjs/components/Select.js +74 -0
  74. package/dist/cjs/components/Sidebar.d.ts +174 -0
  75. package/dist/cjs/components/Sidebar.js +174 -0
  76. package/dist/cjs/components/Skeleton.d.ts +57 -0
  77. package/dist/cjs/components/Skeleton.js +57 -0
  78. package/dist/cjs/components/Slider.d.ts +64 -0
  79. package/dist/cjs/components/Slider.js +64 -0
  80. package/dist/cjs/components/Spinner.d.ts +70 -0
  81. package/dist/cjs/components/Spinner.js +70 -0
  82. package/dist/cjs/components/Stack.d.ts +75 -0
  83. package/dist/cjs/components/Stack.js +75 -0
  84. package/dist/cjs/components/Stepper.d.ts +150 -0
  85. package/dist/cjs/components/Stepper.js +150 -0
  86. package/dist/cjs/components/Table.d.ts +173 -0
  87. package/dist/cjs/components/Table.js +173 -0
  88. package/dist/cjs/components/Tabs.d.ts +104 -0
  89. package/dist/cjs/components/Tabs.js +104 -0
  90. package/dist/cjs/components/Tag.d.ts +74 -0
  91. package/dist/cjs/components/Tag.js +74 -0
  92. package/dist/cjs/components/Textarea.d.ts +75 -0
  93. package/dist/cjs/components/Textarea.js +75 -0
  94. package/dist/cjs/components/Timeline.d.ts +124 -0
  95. package/dist/cjs/components/Timeline.js +124 -0
  96. package/dist/cjs/components/Toast.d.ts +155 -0
  97. package/dist/cjs/components/Toast.js +155 -0
  98. package/dist/cjs/components/Toggle.d.ts +75 -0
  99. package/dist/cjs/components/Toggle.js +75 -0
  100. package/dist/cjs/components/Tooltip.d.ts +80 -0
  101. package/dist/cjs/components/Tooltip.js +80 -0
  102. package/dist/cjs/components/TypographyComponents.d.ts +265 -0
  103. package/dist/cjs/components/TypographyComponents.js +265 -0
  104. package/dist/cjs/components/UtilityComponents.d.ts +345 -0
  105. package/dist/cjs/components/UtilityComponents.js +345 -0
  106. package/dist/cjs/components/Video.d.ts +82 -0
  107. package/dist/cjs/components/Video.js +82 -0
  108. package/dist/cjs/components/index.d.ts +311 -0
  109. package/dist/cjs/components/index.js +311 -0
  110. package/dist/cjs/index.d.ts +5 -0
  111. package/dist/cjs/index.js +5 -0
  112. package/dist/cjs/styles/main.css +493 -0
  113. package/dist/cjs/theme/ThemeProvider.d.ts +185 -0
  114. package/dist/cjs/theme/ThemeProvider.js +185 -0
  115. package/dist/cjs/theme/index.d.ts +2 -0
  116. package/dist/cjs/theme/index.js +2 -0
  117. package/dist/cjs/utilities/classNames.d.ts +200 -0
  118. package/dist/cjs/utilities/classNames.js +200 -0
  119. package/dist/cjs/utilities/index.d.ts +3 -0
  120. package/dist/cjs/utilities/index.js +3 -0
  121. package/dist/cjs/utilities/styles.d.ts +94 -0
  122. package/dist/cjs/utilities/styles.js +94 -0
  123. package/dist/esm/components/Accordion.d.ts +78 -0
  124. package/dist/esm/components/Accordion.js +78 -0
  125. package/dist/esm/components/AdvancedComponents.d.ts +353 -0
  126. package/dist/esm/components/AdvancedComponents.js +353 -0
  127. package/dist/esm/components/Alert.d.ts +102 -0
  128. package/dist/esm/components/Alert.js +102 -0
  129. package/dist/esm/components/Avatar.d.ts +89 -0
  130. package/dist/esm/components/Avatar.js +89 -0
  131. package/dist/esm/components/Badge.d.ts +57 -0
  132. package/dist/esm/components/Badge.js +57 -0
  133. package/dist/esm/components/Breadcrumb.d.ts +50 -0
  134. package/dist/esm/components/Breadcrumb.js +50 -0
  135. package/dist/esm/components/Button.d.ts +77 -0
  136. package/dist/esm/components/Button.js +77 -0
  137. package/dist/esm/components/ButtonVariants.d.ts +261 -0
  138. package/dist/esm/components/ButtonVariants.js +261 -0
  139. package/dist/esm/components/Card.d.ts +56 -0
  140. package/dist/esm/components/Card.js +56 -0
  141. package/dist/esm/components/CardVariants.d.ts +267 -0
  142. package/dist/esm/components/CardVariants.js +267 -0
  143. package/dist/esm/components/Checkbox.d.ts +50 -0
  144. package/dist/esm/components/Checkbox.js +50 -0
  145. package/dist/esm/components/Chip.d.ts +104 -0
  146. package/dist/esm/components/Chip.js +104 -0
  147. package/dist/esm/components/DataDisplayComponents.d.ts +275 -0
  148. package/dist/esm/components/DataDisplayComponents.js +275 -0
  149. package/dist/esm/components/Divider.d.ts +77 -0
  150. package/dist/esm/components/Divider.js +77 -0
  151. package/dist/esm/components/Drawer.d.ts +142 -0
  152. package/dist/esm/components/Drawer.js +142 -0
  153. package/dist/esm/components/Dropdown.d.ts +139 -0
  154. package/dist/esm/components/Dropdown.js +139 -0
  155. package/dist/esm/components/Form.d.ts +41 -0
  156. package/dist/esm/components/Form.js +41 -0
  157. package/dist/esm/components/FormGroup.d.ts +58 -0
  158. package/dist/esm/components/FormGroup.js +58 -0
  159. package/dist/esm/components/FormInputVariants.d.ts +298 -0
  160. package/dist/esm/components/FormInputVariants.js +298 -0
  161. package/dist/esm/components/Image.d.ts +106 -0
  162. package/dist/esm/components/Image.js +106 -0
  163. package/dist/esm/components/Input.d.ts +65 -0
  164. package/dist/esm/components/Input.js +65 -0
  165. package/dist/esm/components/LayoutComponents.d.ts +258 -0
  166. package/dist/esm/components/LayoutComponents.js +258 -0
  167. package/dist/esm/components/Link.d.ts +71 -0
  168. package/dist/esm/components/Link.js +71 -0
  169. package/dist/esm/components/LoadingFeedbackComponents.d.ts +230 -0
  170. package/dist/esm/components/LoadingFeedbackComponents.js +230 -0
  171. package/dist/esm/components/Menu.d.ts +167 -0
  172. package/dist/esm/components/Menu.js +167 -0
  173. package/dist/esm/components/Modal.d.ts +145 -0
  174. package/dist/esm/components/Modal.js +145 -0
  175. package/dist/esm/components/ModalTypes.d.ts +288 -0
  176. package/dist/esm/components/ModalTypes.js +288 -0
  177. package/dist/esm/components/Navbar.d.ts +181 -0
  178. package/dist/esm/components/Navbar.js +181 -0
  179. package/dist/esm/components/NavigationComponents.d.ts +276 -0
  180. package/dist/esm/components/NavigationComponents.js +276 -0
  181. package/dist/esm/components/Pagination.d.ts +94 -0
  182. package/dist/esm/components/Pagination.js +94 -0
  183. package/dist/esm/components/Popover.d.ts +108 -0
  184. package/dist/esm/components/Popover.js +108 -0
  185. package/dist/esm/components/Progress.d.ts +68 -0
  186. package/dist/esm/components/Progress.js +68 -0
  187. package/dist/esm/components/Radio.d.ts +93 -0
  188. package/dist/esm/components/Radio.js +93 -0
  189. package/dist/esm/components/Rating.d.ts +82 -0
  190. package/dist/esm/components/Rating.js +82 -0
  191. package/dist/esm/components/Select.d.ts +74 -0
  192. package/dist/esm/components/Select.js +74 -0
  193. package/dist/esm/components/Sidebar.d.ts +174 -0
  194. package/dist/esm/components/Sidebar.js +174 -0
  195. package/dist/esm/components/Skeleton.d.ts +57 -0
  196. package/dist/esm/components/Skeleton.js +57 -0
  197. package/dist/esm/components/Slider.d.ts +64 -0
  198. package/dist/esm/components/Slider.js +64 -0
  199. package/dist/esm/components/Spinner.d.ts +70 -0
  200. package/dist/esm/components/Spinner.js +70 -0
  201. package/dist/esm/components/Stack.d.ts +75 -0
  202. package/dist/esm/components/Stack.js +75 -0
  203. package/dist/esm/components/Stepper.d.ts +150 -0
  204. package/dist/esm/components/Stepper.js +150 -0
  205. package/dist/esm/components/Table.d.ts +173 -0
  206. package/dist/esm/components/Table.js +173 -0
  207. package/dist/esm/components/Tabs.d.ts +104 -0
  208. package/dist/esm/components/Tabs.js +104 -0
  209. package/dist/esm/components/Tag.d.ts +74 -0
  210. package/dist/esm/components/Tag.js +74 -0
  211. package/dist/esm/components/Textarea.d.ts +75 -0
  212. package/dist/esm/components/Textarea.js +75 -0
  213. package/dist/esm/components/Timeline.d.ts +124 -0
  214. package/dist/esm/components/Timeline.js +124 -0
  215. package/dist/esm/components/Toast.d.ts +155 -0
  216. package/dist/esm/components/Toast.js +155 -0
  217. package/dist/esm/components/Toggle.d.ts +75 -0
  218. package/dist/esm/components/Toggle.js +75 -0
  219. package/dist/esm/components/Tooltip.d.ts +80 -0
  220. package/dist/esm/components/Tooltip.js +80 -0
  221. package/dist/esm/components/TypographyComponents.d.ts +265 -0
  222. package/dist/esm/components/TypographyComponents.js +265 -0
  223. package/dist/esm/components/UtilityComponents.d.ts +345 -0
  224. package/dist/esm/components/UtilityComponents.js +345 -0
  225. package/dist/esm/components/Video.d.ts +82 -0
  226. package/dist/esm/components/Video.js +82 -0
  227. package/dist/esm/components/index.d.ts +311 -0
  228. package/dist/esm/components/index.js +311 -0
  229. package/dist/esm/index.d.ts +5 -0
  230. package/dist/esm/index.js +5 -0
  231. package/dist/esm/styles/main.css +493 -0
  232. package/dist/esm/theme/ThemeProvider.d.ts +185 -0
  233. package/dist/esm/theme/ThemeProvider.js +185 -0
  234. package/dist/esm/theme/index.d.ts +2 -0
  235. package/dist/esm/theme/index.js +2 -0
  236. package/dist/esm/utilities/classNames.d.ts +200 -0
  237. package/dist/esm/utilities/classNames.js +200 -0
  238. package/dist/esm/utilities/index.d.ts +3 -0
  239. package/dist/esm/utilities/index.js +3 -0
  240. package/dist/esm/utilities/styles.d.ts +94 -0
  241. package/dist/esm/utilities/styles.js +94 -0
  242. package/dist/styles/main.css +493 -0
  243. package/package.json +124 -6
  244. package/src/styles/main.css +493 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,41 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.0.0] - 2024-11-06
9
+
10
+ ### Added
11
+
12
+ - Initial release of @lp-labs/ui-components
13
+ - Pre-built React components:
14
+ - Button (multiple variants: primary, secondary, danger, ghost)
15
+ - Card (with elevation and padding options)
16
+ - Input (with validation states and help text)
17
+ - Modal (with header, body, and footer sub-components)
18
+ - Badge (with multiple variants and sizes)
19
+ - Alert (with success, warning, danger, info variants)
20
+ - Dropdown (with menu items and dividers)
21
+ - Navbar (with brand, navigation, and toggle components)
22
+ - Comprehensive theming system with CSS variables
23
+ - Utility-first class names and helper functions
24
+ - CSS-in-JS style utilities
25
+ - Full TypeScript support with type definitions
26
+ - Comprehensive CSS stylesheet with animations and responsive utilities
27
+ - Accessible components following WCAG 2.1 AA standards
28
+ - Dark mode theme support
29
+ - Responsive design utilities
30
+ - ESM and CommonJS distribution formats
31
+
32
+ ### Features
33
+
34
+ - 🎨 Pre-built Components - Ready-to-use React components
35
+ - ⚙️ Utility Classes - Flexible utility-first approach
36
+ - 🎭 Theming System - CSS variables and theme provider
37
+ - ♿ Accessibility - WCAG 2.1 AA compliant
38
+ - 📦 Tree-shakeable - Only pay for what you use
39
+ - 🔄 Type-safe - Full TypeScript support
40
+ - 📱 Responsive - Mobile-first design
41
+ - ✨ Dark Mode - Built-in theme switching
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Libin Prasanth
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 CHANGED
@@ -1,3 +1,257 @@
1
- # Temporary Holding Version
1
+ # @lp-labs/ui-components
2
+
3
+ A comprehensive hybrid UI component library with built-in components, utilities, and theming support. Designed for React applications with a focus on accessibility, customization, and developer experience.
4
+
5
+ ## Features
6
+
7
+ - 🎨 **Pre-built Components** - Ready-to-use components (Button, Card, Input, Modal, Navbar, Badge, Alert, Dropdown, etc.)
8
+ - ⚙️ **Utility Classes** - Flexible utility-first approach for fine-grained control
9
+ - 🎭 **Theming System** - Powerful customization with CSS variables and theme provider
10
+ - ♿ **Accessible** - WCAG 2.1 AA compliant components
11
+ - 📦 **Tree-shakeable** - Only pay for what you use
12
+ - 🔄 **Framework Agnostic Core** - Utilities work anywhere, React components for React
13
+ - 📱 **Responsive** - Mobile-first design approach
14
+ - ✨ **TypeScript** - Full type safety and intellisense
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @lp-labs/ui-components
20
+ ```
21
+
22
+ ## Quick Start
23
+
24
+ ### Using Components
25
+
26
+ ```jsx
27
+ import { Button, Card, Input } from '@lp-labs/ui-components/components';
28
+
29
+ export function App() {
30
+ return (
31
+ <Card>
32
+ <h2>Welcome</h2>
33
+ <Input placeholder="Enter your name" />
34
+ <Button variant="primary">Submit</Button>
35
+ </Card>
36
+ );
37
+ }
38
+ ```
39
+
40
+ ### Using Utilities
41
+
42
+ ```jsx
43
+ import { cn, spacing, colors } from '@lp-labs/ui-components/utilities';
44
+
45
+ export function MyComponent() {
46
+ return (
47
+ <div className={cn(
48
+ spacing.padding.medium,
49
+ colors.background.light,
50
+ 'rounded-lg'
51
+ )}>
52
+ Content
53
+ </div>
54
+ );
55
+ }
56
+ ```
57
+
58
+ ### Using Theme
59
+
60
+ ```jsx
61
+ import { ThemeProvider, useTheme } from '@lp-labs/ui-components/theme';
62
+
63
+ export function App() {
64
+ return (
65
+ <ThemeProvider theme="dark">
66
+ <YourApp />
67
+ </ThemeProvider>
68
+ );
69
+ }
70
+
71
+ function MyComponent() {
72
+ const { colors, spacing } = useTheme();
73
+ return <div style={{ color: colors.primary }}>{/* ... */}</div>;
74
+ }
75
+ ```
76
+
77
+ ## Available Components
78
+
79
+ ### Core Components
80
+
81
+ - **Button** - Interactive button with multiple variants and sizes
82
+ - **Card** - Container component with elevation support
83
+ - **Input** - Text input with validation states
84
+ - **Modal** - Dialog component with backdrop
85
+ - **Navbar** - Navigation bar with responsive menu
86
+ - **Badge** - Label component for status and categories
87
+ - **Alert** - Notification/alert component
88
+ - **Dropdown** - Dropdown menu component
89
+
90
+ ### Additional Components
91
+
92
+ - **Tabs** - Tab navigation
93
+ - **Progress** - Progress indicator
94
+ - **Spinner** - Loading spinner
95
+ - **Tooltip** - Hover tooltips
96
+ - **Checkbox** - Checkbox input
97
+ - **Radio** - Radio button input
98
+ - **Select** - Dropdown select
99
+ - **Textarea** - Multi-line input
100
+
101
+ ## Styling Approaches
102
+
103
+ ### CSS Modules (Recommended)
104
+
105
+ ```jsx
106
+ import styles from '@lp-labs/ui-components/styles';
107
+ import { Button } from '@lp-labs/ui-components/components';
108
+ ```
109
+
110
+ ### CSS Classes
111
+
112
+ ```jsx
113
+ import '@lp-labs/ui-components/styles';
114
+ import { Button } from '@lp-labs/ui-components/components';
115
+ ```
116
+
117
+ ### Utilities Only
118
+
119
+ ```jsx
120
+ import { cn, spacing, colors, typography } from '@lp-labs/ui-components/utilities';
121
+ ```
122
+
123
+ ## Theming
124
+
125
+ ### Built-in Themes
126
+
127
+ - **light** - Light color scheme
128
+ - **dark** - Dark color scheme
129
+ - **auto** - Follows system preference
130
+
131
+ ### Custom Theme
132
+
133
+ ```jsx
134
+ import { ThemeProvider } from '@lp-labs/ui-components/theme';
135
+
136
+ const customTheme = {
137
+ colors: {
138
+ primary: '#007bff',
139
+ secondary: '#6c757d',
140
+ // ...
141
+ },
142
+ spacing: {
143
+ xs: '4px',
144
+ sm: '8px',
145
+ md: '16px',
146
+ lg: '24px',
147
+ xl: '32px',
148
+ },
149
+ };
150
+
151
+ export function App() {
152
+ return (
153
+ <ThemeProvider theme={customTheme}>
154
+ <YourApp />
155
+ </ThemeProvider>
156
+ );
157
+ }
158
+ ```
159
+
160
+ ## Configuration
161
+
162
+ ### CSS Variables
163
+
164
+ The library exposes all theme values as CSS variables:
165
+
166
+ ```css
167
+ :root {
168
+ --color-primary: #007bff;
169
+ --color-secondary: #6c757d;
170
+ --spacing-xs: 4px;
171
+ --spacing-sm: 8px;
172
+ /* ... more variables ... */
173
+ }
174
+ ```
175
+
176
+ ### Customization
177
+
178
+ Override CSS variables in your application:
179
+
180
+ ```css
181
+ :root {
182
+ --color-primary: #ff0000;
183
+ --spacing-base: 8px;
184
+ }
185
+ ```
186
+
187
+ ## API Documentation
188
+
189
+ ### Button
190
+
191
+ ```jsx
192
+ <Button
193
+ variant="primary" // 'primary' | 'secondary' | 'danger' | 'ghost'
194
+ size="md" // 'sm' | 'md' | 'lg'
195
+ disabled={false}
196
+ onClick={handleClick}
197
+ >
198
+ Click me
199
+ </Button>
200
+ ```
201
+
202
+ ### Card
203
+
204
+ ```jsx
205
+ <Card
206
+ elevation="md" // 'none' | 'sm' | 'md' | 'lg'
207
+ padding="md" // 'sm' | 'md' | 'lg'
208
+ border={true}
209
+ >
210
+ Card content
211
+ </Card>
212
+ ```
213
+
214
+ ### Input
215
+
216
+ ```jsx
217
+ <Input
218
+ type="text"
219
+ placeholder="Enter text"
220
+ value={value}
221
+ onChange={handleChange}
222
+ error={false}
223
+ disabled={false}
224
+ />
225
+ ```
226
+
227
+ ### Modal
228
+
229
+ ```jsx
230
+ <Modal open={isOpen} onClose={handleClose}>
231
+ <Modal.Header>Title</Modal.Header>
232
+ <Modal.Body>Content</Modal.Body>
233
+ <Modal.Footer>
234
+ <Button>Cancel</Button>
235
+ <Button variant="primary">Confirm</Button>
236
+ </Modal.Footer>
237
+ </Modal>
238
+ ```
239
+
240
+ ## Browser Support
241
+
242
+ - Chrome/Edge: Latest 2 versions
243
+ - Firefox: Latest 2 versions
244
+ - Safari: Latest 2 versions
245
+ - Mobile browsers: Latest versions
246
+
247
+ ## Contributing
248
+
249
+ Contributions are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
2
250
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
251
+ ## Support
252
+
253
+ If this library is useful to you, consider supporting its maintenance with a [donation via PayPal](https://www.paypal.me/LibinPrasanth).
254
+
255
+ ## Author
256
+
257
+ Created by [Libin Prasanth](https://www.linkedin.com/in/libinprasanth/). Connect on LinkedIn for updates and discussion.
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { cn } from '../utilities/classNames';
3
+
4
+ export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ items: Array<{
6
+ id: string;
7
+ title: string;
8
+ content: React.ReactNode;
9
+ }>;
10
+ allowMultiple?: boolean;
11
+ }
12
+
13
+ export const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(
14
+ (
15
+ {
16
+ items,
17
+ allowMultiple = false,
18
+ className,
19
+ ...props
20
+ },
21
+ ref,
22
+ ) => {
23
+ const [openItems, setOpenItems] = React.useState<Set<string>>(new Set());
24
+
25
+ const toggleItem = (id: string) => {
26
+ const newOpen = new Set(openItems);
27
+ if (newOpen.has(id)) {
28
+ newOpen.delete(id);
29
+ } else {
30
+ if (!allowMultiple) {
31
+ newOpen.clear();
32
+ }
33
+ newOpen.add(id);
34
+ }
35
+ setOpenItems(newOpen);
36
+ };
37
+
38
+ return (
39
+ <div ref={ref} className={cn('border border-gray-200 rounded-lg', className)} {...props}>
40
+ {items.map((item, index) => (
41
+ <div
42
+ key={item.id}
43
+ className={cn(
44
+ 'border-b border-gray-200',
45
+ index === items.length - 1 && 'border-b-0',
46
+ )}
47
+ >
48
+ <button
49
+ onClick={() => toggleItem(item.id)}
50
+ className="w-full px-4 py-4 text-left font-medium hover:bg-gray-50 flex justify-between items-center transition-colors"
51
+ aria-expanded={openItems.has(item.id)}
52
+ >
53
+ {item.title}
54
+ <svg
55
+ className={cn(
56
+ 'w-5 h-5 transition-transform',
57
+ openItems.has(item.id) && 'transform rotate-180',
58
+ )}
59
+ fill="none"
60
+ stroke="currentColor"
61
+ viewBox="0 0 24 24"
62
+ >
63
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" />
64
+ </svg>
65
+ </button>
66
+ {openItems.has(item.id) && (
67
+ <div className="px-4 py-4 text-gray-700 border-t border-gray-200">
68
+ {item.content}
69
+ </div>
70
+ )}
71
+ </div>
72
+ ))}
73
+ </div>
74
+ );
75
+ },
76
+ );
77
+
78
+ Accordion.displayName = 'Accordion';
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { cn } from '../utilities/classNames';
3
+
4
+ export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ items: Array<{
6
+ id: string;
7
+ title: string;
8
+ content: React.ReactNode;
9
+ }>;
10
+ allowMultiple?: boolean;
11
+ }
12
+
13
+ export const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(
14
+ (
15
+ {
16
+ items,
17
+ allowMultiple = false,
18
+ className,
19
+ ...props
20
+ },
21
+ ref,
22
+ ) => {
23
+ const [openItems, setOpenItems] = React.useState<Set<string>>(new Set());
24
+
25
+ const toggleItem = (id: string) => {
26
+ const newOpen = new Set(openItems);
27
+ if (newOpen.has(id)) {
28
+ newOpen.delete(id);
29
+ } else {
30
+ if (!allowMultiple) {
31
+ newOpen.clear();
32
+ }
33
+ newOpen.add(id);
34
+ }
35
+ setOpenItems(newOpen);
36
+ };
37
+
38
+ return (
39
+ <div ref={ref} className={cn('border border-gray-200 rounded-lg', className)} {...props}>
40
+ {items.map((item, index) => (
41
+ <div
42
+ key={item.id}
43
+ className={cn(
44
+ 'border-b border-gray-200',
45
+ index === items.length - 1 && 'border-b-0',
46
+ )}
47
+ >
48
+ <button
49
+ onClick={() => toggleItem(item.id)}
50
+ className="w-full px-4 py-4 text-left font-medium hover:bg-gray-50 flex justify-between items-center transition-colors"
51
+ aria-expanded={openItems.has(item.id)}
52
+ >
53
+ {item.title}
54
+ <svg
55
+ className={cn(
56
+ 'w-5 h-5 transition-transform',
57
+ openItems.has(item.id) && 'transform rotate-180',
58
+ )}
59
+ fill="none"
60
+ stroke="currentColor"
61
+ viewBox="0 0 24 24"
62
+ >
63
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" />
64
+ </svg>
65
+ </button>
66
+ {openItems.has(item.id) && (
67
+ <div className="px-4 py-4 text-gray-700 border-t border-gray-200">
68
+ {item.content}
69
+ </div>
70
+ )}
71
+ </div>
72
+ ))}
73
+ </div>
74
+ );
75
+ },
76
+ );
77
+
78
+ Accordion.displayName = 'Accordion';