automoby-kit 1.0.69 → 1.0.71

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 CHANGED
@@ -1,312 +1,312 @@
1
- # Automoby Kit
2
-
3
- A comprehensive React UI component library built with TypeScript and Tailwind CSS - created in war 2025.
4
-
5
- ![npm version](https://img.shields.io/badge/version-1.0.64-blue.svg)
6
- ![TypeScript](https://img.shields.io/badge/TypeScript-5.8.3-blue)
7
- ![React](https://img.shields.io/badge/React-19.1.0-blue)
8
-
9
- ## ✨ Features
10
-
11
- - 🎨 **15+ Production-Ready Components** - Comprehensive UI library for modern React applications
12
- - 📱 **Mobile-First Design** - Built-in mobile detection and responsive behavior
13
- - 🎯 **TypeScript Native** - Full type safety with complete TypeScript definitions
14
- - 🌳 **Tree-Shakeable** - Import only what you need for optimal bundle size
15
- - 🎨 **Tailwind CSS** - Styled with Tailwind for easy customization
16
- - ♿ **Accessible** - ARIA-compliant components following best practices
17
- - 🚀 **Modern React 19** - Built for the latest React features
18
-
19
- ## 🚀 Installation
20
-
21
- ```bash
22
- npm install automoby-kit
23
- ```
24
-
25
- ### Peer Dependencies
26
-
27
- Make sure you have these installed:
28
-
29
- ```bash
30
- npm install react react-dom clsx lucide-react tailwindcss ua-parser-js
31
- ```
32
-
33
- ## 📦 Usage
34
-
35
- ### Import All Components
36
-
37
- ```typescript
38
- import {
39
- Button,
40
- Typography,
41
- Input,
42
- Tabs,
43
- Dialog,
44
- Select
45
- } from 'automoby-kit';
46
-
47
- function App() {
48
- return (
49
- <div>
50
- <Typography variant="h1">Welcome to Automoby Kit</Typography>
51
- <Button variant="primary" size="lg">
52
- Click me!
53
- </Button>
54
- <Input placeholder="Enter text..." />
55
- </div>
56
- );
57
- }
58
- ```
59
-
60
- ### Import Individual Components (Tree-Shaking)
61
-
62
- For better bundle optimization, import components individually:
63
-
64
- ```typescript
65
- import { Button } from 'automoby-kit/Button';
66
- import { Typography } from 'automoby-kit/Typography';
67
- import { Input } from 'automoby-kit/Input';
68
-
69
- function App() {
70
- return (
71
- <div>
72
- <Typography variant="h1">Optimized Bundle</Typography>
73
- <Button variant="primary">Click me!</Button>
74
- <Input placeholder="Type here..." />
75
- </div>
76
- );
77
- }
78
- ```
79
-
80
- ## 🧩 Available Components
81
-
82
- ### Form Components
83
- - **Input** - Advanced input fields with label, error states, and various types
84
- - **Select** - Dropdown select with keyboard navigation and accessibility
85
- - **RadioGroup** - Radio button groups with customizable options
86
-
87
- ### Navigation Components
88
- - **Breadcrumb** - Navigation breadcrumbs for showing page hierarchy
89
- - **Menu** - Context menus and dropdowns with nested support
90
- - **Tabs** - Tabbed interfaces for organizing content
91
- - **Pagination** - Page navigation with mobile and desktop variants
92
-
93
- ### Display Components
94
- - **Typography** - Text rendering with various heading and body styles
95
- - **Button** - Interactive buttons with multiple variants and sizes
96
- - **Chips** - Tag-like elements for categories or filters
97
- - **Divider** - Visual separators for content sections
98
- - **Accordion** - Collapsible content sections
99
-
100
- ### Overlay Components
101
- - **Dialog** - Modal dialogs with customizable content and actions
102
- - **Drawer** - Slide-out panels from any direction
103
- - **Backdrop** - Overlay backgrounds for modals
104
-
105
- ## 🏗️ TypeScript Support
106
-
107
- All components come with full TypeScript support and exported types:
108
-
109
- ```typescript
110
- import {
111
- ButtonProps,
112
- ButtonVariant,
113
- ButtonSize,
114
- TypographyProps,
115
- TypographyVariant,
116
- InputProps,
117
- DialogProps,
118
- SelectProps,
119
- SelectOption
120
- } from 'automoby-kit';
121
-
122
- // Use types in your components
123
- const MyButton: React.FC<ButtonProps> = (props) => {
124
- return <Button {...props} />;
125
- };
126
-
127
- // Define variants with type safety
128
- const variant: ButtonVariant = 'primary';
129
- const size: ButtonSize = 'lg';
130
- ```
131
-
132
- ## 📱 Mobile Context
133
-
134
- The library includes a mobile detection context for responsive behavior:
135
-
136
- ```typescript
137
- import { MobileProvider, useMobile } from 'automoby-kit';
138
-
139
- function App() {
140
- return (
141
- <MobileProvider userAgent={navigator.userAgent}>
142
- <MyComponent />
143
- </MobileProvider>
144
- );
145
- }
146
-
147
- function MyComponent() {
148
- const isMobile = useMobile();
149
-
150
- return (
151
- <div>
152
- {isMobile ? (
153
- <p>Mobile View</p>
154
- ) : (
155
- <p>Desktop View</p>
156
- )}
157
- </div>
158
- );
159
- }
160
- ```
161
-
162
- ## 🎨 Component Examples
163
-
164
- ### Dialog
165
-
166
- ```typescript
167
- import { Dialog, DialogButton } from 'automoby-kit';
168
- import { useState } from 'react';
169
-
170
- function MyDialog() {
171
- const [isOpen, setIsOpen] = useState(false);
172
-
173
- return (
174
- <Dialog
175
- isOpen={isOpen}
176
- onClose={() => setIsOpen(false)}
177
- title="Confirm Action"
178
- content={<p>Are you sure you want to proceed?</p>}
179
- buttons={
180
- <>
181
- <DialogButton variant="primary" onClick={() => setIsOpen(false)}>
182
- Confirm
183
- </DialogButton>
184
- <DialogButton variant="secondary" onClick={() => setIsOpen(false)}>
185
- Cancel
186
- </DialogButton>
187
- </>
188
- }
189
- />
190
- );
191
- }
192
- ```
193
-
194
- ### Select
195
-
196
- ```typescript
197
- import { Select } from 'automoby-kit';
198
-
199
- function MySelect() {
200
- const options = [
201
- { value: '1', label: 'Option 1' },
202
- { value: '2', label: 'Option 2' },
203
- { value: '3', label: 'Option 3' },
204
- ];
205
-
206
- return (
207
- <Select
208
- label="Choose an option"
209
- placeholder="Select..."
210
- options={options}
211
- onChange={(value) => console.log('Selected:', value)}
212
- />
213
- );
214
- }
215
- ```
216
-
217
- ### Pagination
218
-
219
- ```typescript
220
- import { Pagination } from 'automoby-kit';
221
-
222
- function MyPagination() {
223
- return (
224
- <Pagination
225
- currentPage={1}
226
- totalPages={10}
227
- onPageChange={(page) => console.log('Page:', page)}
228
- />
229
- );
230
- }
231
- ```
232
-
233
- ## 🎯 Available Exports
234
-
235
- ### Components
236
- `Button`, `Typography`, `Input`, `Tabs`, `Drawer`, `Backdrop`, `Breadcrumb`, `Pagination`, `Accordion`, `Divider`, `RadioGroup`, `Chips`, `Menu`, `Dialog`, `DialogButton`, `Select`
237
-
238
- ### Context Providers
239
- `MobileProvider`, `useMobile`
240
-
241
- ### Utilities
242
- `cn` (classname utility from `automoby-kit/utils`)
243
-
244
- ### Types
245
- All component props and variants are exported for TypeScript users.
246
-
247
- ## 🛠️ Peer Dependencies
248
-
249
- ```json
250
- {
251
- "react": "^19.1.0",
252
- "react-dom": "^19.1.0",
253
- "clsx": "^2.1.1",
254
- "lucide-react": "^0.522.0",
255
- "tailwindcss": "^4.1.10",
256
- "typescript": "^5.8.3",
257
- "ua-parser-js": "^2.0.4"
258
- }
259
- ```
260
-
261
- ## 📦 Bundle Formats
262
-
263
- This package ships with multiple bundle formats:
264
-
265
- - **ESM** - `dist/esm` - ES Modules for modern bundlers
266
- - **CommonJS** - `dist/cjs` - CommonJS for Node.js compatibility
267
- - **TypeScript Definitions** - `dist/types` - Complete type definitions
268
-
269
- ## 🔧 Configuration
270
-
271
- If you're using Next.js 13+, add 'use client' directive when needed (automatically handled in pre-built bundles):
272
-
273
- ```typescript
274
- 'use client';
275
-
276
- import { Button } from 'automoby-kit';
277
- ```
278
-
279
- ## 🌟 Why Automoby Kit?
280
-
281
- - **Battle-Tested** - Built during production demands
282
- - **Developer Experience** - Intuitive API with excellent TypeScript support
283
- - **Performance** - Optimized bundle size with tree-shaking support
284
- - **Modern Stack** - Built with latest React 19 and TypeScript 5.8
285
- - **Accessible** - WCAG compliant components
286
- - **Customizable** - Easy to theme with Tailwind CSS
287
-
288
- ## 🆘 Support
289
-
290
- If you encounter any issues:
291
-
292
- 1. Check the [GitHub issues](https://github.com/yourusername/automoby-kit/issues)
293
- 2. Submit a detailed issue report
294
- 3. Provide a minimal reproduction example
295
-
296
- ## 👥 Authors
297
-
298
- - **Ghazal Kordi** - Co-creator
299
- - **Alireza Mirzaee** - Co-creator
300
-
301
- ## 📄 License
302
-
303
- ISC
304
-
305
- ## 🔄 Version History
306
-
307
- - **1.0.64** - Current stable release
308
- - **1.0.0** - Initial release
309
-
310
- ---
311
-
1
+ # Automoby Kit
2
+
3
+ A comprehensive React UI component library built with TypeScript and Tailwind CSS - created in war 2025.
4
+
5
+ ![npm version](https://img.shields.io/badge/version-1.0.64-blue.svg)
6
+ ![TypeScript](https://img.shields.io/badge/TypeScript-5.8.3-blue)
7
+ ![React](https://img.shields.io/badge/React-19.1.0-blue)
8
+
9
+ ## ✨ Features
10
+
11
+ - 🎨 **15+ Production-Ready Components** - Comprehensive UI library for modern React applications
12
+ - 📱 **Mobile-First Design** - Built-in mobile detection and responsive behavior
13
+ - 🎯 **TypeScript Native** - Full type safety with complete TypeScript definitions
14
+ - 🌳 **Tree-Shakeable** - Import only what you need for optimal bundle size
15
+ - 🎨 **Tailwind CSS** - Styled with Tailwind for easy customization
16
+ - ♿ **Accessible** - ARIA-compliant components following best practices
17
+ - 🚀 **Modern React 19** - Built for the latest React features
18
+
19
+ ## 🚀 Installation
20
+
21
+ ```bash
22
+ npm install automoby-kit
23
+ ```
24
+
25
+ ### Peer Dependencies
26
+
27
+ Make sure you have these installed:
28
+
29
+ ```bash
30
+ npm install react react-dom clsx lucide-react tailwindcss ua-parser-js
31
+ ```
32
+
33
+ ## 📦 Usage
34
+
35
+ ### Import All Components
36
+
37
+ ```typescript
38
+ import {
39
+ Button,
40
+ Typography,
41
+ Input,
42
+ Tabs,
43
+ Dialog,
44
+ Select
45
+ } from 'automoby-kit';
46
+
47
+ function App() {
48
+ return (
49
+ <div>
50
+ <Typography variant="h1">Welcome to Automoby Kit</Typography>
51
+ <Button variant="primary" size="lg">
52
+ Click me!
53
+ </Button>
54
+ <Input placeholder="Enter text..." />
55
+ </div>
56
+ );
57
+ }
58
+ ```
59
+
60
+ ### Import Individual Components (Tree-Shaking)
61
+
62
+ For better bundle optimization, import components individually:
63
+
64
+ ```typescript
65
+ import { Button } from 'automoby-kit/Button';
66
+ import { Typography } from 'automoby-kit/Typography';
67
+ import { Input } from 'automoby-kit/Input';
68
+
69
+ function App() {
70
+ return (
71
+ <div>
72
+ <Typography variant="h1">Optimized Bundle</Typography>
73
+ <Button variant="primary">Click me!</Button>
74
+ <Input placeholder="Type here..." />
75
+ </div>
76
+ );
77
+ }
78
+ ```
79
+
80
+ ## 🧩 Available Components
81
+
82
+ ### Form Components
83
+ - **Input** - Advanced input fields with label, error states, and various types
84
+ - **Select** - Dropdown select with keyboard navigation and accessibility
85
+ - **RadioGroup** - Radio button groups with customizable options
86
+
87
+ ### Navigation Components
88
+ - **Breadcrumb** - Navigation breadcrumbs for showing page hierarchy
89
+ - **Menu** - Context menus and dropdowns with nested support
90
+ - **Tabs** - Tabbed interfaces for organizing content
91
+ - **Pagination** - Page navigation with mobile and desktop variants
92
+
93
+ ### Display Components
94
+ - **Typography** - Text rendering with various heading and body styles
95
+ - **Button** - Interactive buttons with multiple variants and sizes
96
+ - **Chips** - Tag-like elements for categories or filters
97
+ - **Divider** - Visual separators for content sections
98
+ - **Accordion** - Collapsible content sections
99
+
100
+ ### Overlay Components
101
+ - **Dialog** - Modal dialogs with customizable content and actions
102
+ - **Drawer** - Slide-out panels from any direction
103
+ - **Backdrop** - Overlay backgrounds for modals
104
+
105
+ ## 🏗️ TypeScript Support
106
+
107
+ All components come with full TypeScript support and exported types:
108
+
109
+ ```typescript
110
+ import {
111
+ ButtonProps,
112
+ ButtonVariant,
113
+ ButtonSize,
114
+ TypographyProps,
115
+ TypographyVariant,
116
+ InputProps,
117
+ DialogProps,
118
+ SelectProps,
119
+ SelectOption
120
+ } from 'automoby-kit';
121
+
122
+ // Use types in your components
123
+ const MyButton: React.FC<ButtonProps> = (props) => {
124
+ return <Button {...props} />;
125
+ };
126
+
127
+ // Define variants with type safety
128
+ const variant: ButtonVariant = 'primary';
129
+ const size: ButtonSize = 'lg';
130
+ ```
131
+
132
+ ## 📱 Mobile Context
133
+
134
+ The library includes a mobile detection context for responsive behavior:
135
+
136
+ ```typescript
137
+ import { MobileProvider, useMobile } from 'automoby-kit';
138
+
139
+ function App() {
140
+ return (
141
+ <MobileProvider userAgent={navigator.userAgent}>
142
+ <MyComponent />
143
+ </MobileProvider>
144
+ );
145
+ }
146
+
147
+ function MyComponent() {
148
+ const isMobile = useMobile();
149
+
150
+ return (
151
+ <div>
152
+ {isMobile ? (
153
+ <p>Mobile View</p>
154
+ ) : (
155
+ <p>Desktop View</p>
156
+ )}
157
+ </div>
158
+ );
159
+ }
160
+ ```
161
+
162
+ ## 🎨 Component Examples
163
+
164
+ ### Dialog
165
+
166
+ ```typescript
167
+ import { Dialog, DialogButton } from 'automoby-kit';
168
+ import { useState } from 'react';
169
+
170
+ function MyDialog() {
171
+ const [isOpen, setIsOpen] = useState(false);
172
+
173
+ return (
174
+ <Dialog
175
+ isOpen={isOpen}
176
+ onClose={() => setIsOpen(false)}
177
+ title="Confirm Action"
178
+ content={<p>Are you sure you want to proceed?</p>}
179
+ buttons={
180
+ <>
181
+ <DialogButton variant="primary" onClick={() => setIsOpen(false)}>
182
+ Confirm
183
+ </DialogButton>
184
+ <DialogButton variant="secondary" onClick={() => setIsOpen(false)}>
185
+ Cancel
186
+ </DialogButton>
187
+ </>
188
+ }
189
+ />
190
+ );
191
+ }
192
+ ```
193
+
194
+ ### Select
195
+
196
+ ```typescript
197
+ import { Select } from 'automoby-kit';
198
+
199
+ function MySelect() {
200
+ const options = [
201
+ { value: '1', label: 'Option 1' },
202
+ { value: '2', label: 'Option 2' },
203
+ { value: '3', label: 'Option 3' },
204
+ ];
205
+
206
+ return (
207
+ <Select
208
+ label="Choose an option"
209
+ placeholder="Select..."
210
+ options={options}
211
+ onChange={(value) => console.log('Selected:', value)}
212
+ />
213
+ );
214
+ }
215
+ ```
216
+
217
+ ### Pagination
218
+
219
+ ```typescript
220
+ import { Pagination } from 'automoby-kit';
221
+
222
+ function MyPagination() {
223
+ return (
224
+ <Pagination
225
+ currentPage={1}
226
+ totalPages={10}
227
+ onPageChange={(page) => console.log('Page:', page)}
228
+ />
229
+ );
230
+ }
231
+ ```
232
+
233
+ ## 🎯 Available Exports
234
+
235
+ ### Components
236
+ `Button`, `Typography`, `Input`, `Tabs`, `Drawer`, `Backdrop`, `Breadcrumb`, `Pagination`, `Accordion`, `Divider`, `RadioGroup`, `Chips`, `Menu`, `Dialog`, `DialogButton`, `Select`
237
+
238
+ ### Context Providers
239
+ `MobileProvider`, `useMobile`
240
+
241
+ ### Utilities
242
+ `cn` (classname utility from `automoby-kit/utils`)
243
+
244
+ ### Types
245
+ All component props and variants are exported for TypeScript users.
246
+
247
+ ## 🛠️ Peer Dependencies
248
+
249
+ ```json
250
+ {
251
+ "react": "^19.1.0",
252
+ "react-dom": "^19.1.0",
253
+ "clsx": "^2.1.1",
254
+ "lucide-react": "^0.522.0",
255
+ "tailwindcss": "^4.1.10",
256
+ "typescript": "^5.8.3",
257
+ "ua-parser-js": "^2.0.4"
258
+ }
259
+ ```
260
+
261
+ ## 📦 Bundle Formats
262
+
263
+ This package ships with multiple bundle formats:
264
+
265
+ - **ESM** - `dist/esm` - ES Modules for modern bundlers
266
+ - **CommonJS** - `dist/cjs` - CommonJS for Node.js compatibility
267
+ - **TypeScript Definitions** - `dist/types` - Complete type definitions
268
+
269
+ ## 🔧 Configuration
270
+
271
+ If you're using Next.js 13+, add 'use client' directive when needed (automatically handled in pre-built bundles):
272
+
273
+ ```typescript
274
+ 'use client';
275
+
276
+ import { Button } from 'automoby-kit';
277
+ ```
278
+
279
+ ## 🌟 Why Automoby Kit?
280
+
281
+ - **Battle-Tested** - Built during production demands
282
+ - **Developer Experience** - Intuitive API with excellent TypeScript support
283
+ - **Performance** - Optimized bundle size with tree-shaking support
284
+ - **Modern Stack** - Built with latest React 19 and TypeScript 5.8
285
+ - **Accessible** - WCAG compliant components
286
+ - **Customizable** - Easy to theme with Tailwind CSS
287
+
288
+ ## 🆘 Support
289
+
290
+ If you encounter any issues:
291
+
292
+ 1. Check the [GitHub issues](https://github.com/yourusername/automoby-kit/issues)
293
+ 2. Submit a detailed issue report
294
+ 3. Provide a minimal reproduction example
295
+
296
+ ## 👥 Authors
297
+
298
+ - **Ghazal Kordi** - Co-creator
299
+ - **Alireza Mirzaee** - Co-creator
300
+
301
+ ## 📄 License
302
+
303
+ ISC
304
+
305
+ ## 🔄 Version History
306
+
307
+ - **1.0.64** - Current stable release
308
+ - **1.0.0** - Initial release
309
+
310
+ ---
311
+
312
312
  Built with ❤️ in 2025
@@ -1 +1 @@
1
- "use client";"use strict";var e=require("react/jsx-runtime"),r=require("react"),i=require("./utils.js"),n=require("./contexts.js"),t=require("./Typography.js"),a=require("./chunks/chevron-left-Do__K6cA.js");require("./chunks/createLucideIcon-BqJVOzoK.js");const s=r.forwardRef(({items:r,className:s,isMobile:l},o)=>{const c=n.useMobile(),u=l??c;return e.jsx("nav",{ref:o,className:i("flex items-center",u?"gap-1 px-4 py-2.5":"gap-3 pr-1 pt-3 pb-4 pl-0",s),"aria-label":"Breadcrumb navigation",children:e.jsx("ol",{className:"flex items-center gap-inherit",children:r.map((n,s)=>{const l=s===r.length-1,o=!l&&!!n.onClick,c=`${n.label}-${s}`,d=n.component??(!l&&n.href?"a":"span"),h=o&&!n.href;return e.jsxs("li",{className:"flex items-center gap-inherit",children:[e.jsx(d,{className:i("whitespace-nowrap text-neutral-main",o?"cursor-pointer hover:text-neutral-dark transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded-sm":void 0),role:h?"button":void 0,tabIndex:h?0:void 0,"aria-current":l?"page":void 0,"aria-label":l?`Current page: ${n.label}`:void 0,title:n.title,href:l?void 0:n.href,onClick:o?e=>((e,i,n)=>{i!==r.length-1&&e.onClick&&(e.href||n.preventDefault(),e.onClick())})(n,s,e):void 0,onKeyDown:h?e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n.onClick&&n.onClick())}:void 0,children:e.jsx(t.Typography,{variant:u?"body-t-medium":"body-s-medium",children:n.label})}),!l&&e.jsx(a.ChevronLeft,{className:i("text-neutral-main flex-shrink-0",u?"w-2.5 h-2.5":"w-3 h-3"),"aria-hidden":"true"})]},c)})})})});s.displayName="Breadcrumb",exports.Breadcrumb=s;
1
+ "use client";"use strict";var e=require("react/jsx-runtime"),r=require("react"),i=require("./utils.js"),n=require("./contexts.js"),t=require("./Typography.js"),a=require("./chunks/chevron-left-Do__K6cA.js");require("./chunks/createLucideIcon-BqJVOzoK.js");const s=r.forwardRef(({items:r,className:s,isMobile:l,allowLastItemAsLink:o=!1},c)=>{const u=n.useMobile(),d=l??u;return e.jsx("nav",{ref:c,className:i("flex items-center",d?"gap-1 px-4 py-2.5":"gap-3 pr-1 pt-3 pb-4 pl-0",s),"aria-label":"Breadcrumb navigation",children:e.jsx("ol",{className:"flex items-center gap-inherit",children:r.map((n,s)=>{const l=s===r.length-1,c=(o||!l)&&!!n.onClick,u=`${n.label}-${s}`,h=n.component??(!o&&l||!n.href?"span":"a"),p=c&&!n.href;return e.jsxs("li",{className:"flex items-center gap-inherit",children:[e.jsx(h,{className:i("whitespace-nowrap text-neutral-main",c?"cursor-pointer hover:text-neutral-dark transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded-sm":void 0),role:p?"button":void 0,tabIndex:p?0:void 0,"aria-current":l&&!o?"page":void 0,"aria-label":l&&!o?`Current page: ${n.label}`:void 0,title:n.title,href:o||!l?n.href:void 0,onClick:c?e=>((e,i,n)=>{(i!==r.length-1||o)&&e.onClick&&(e.href||n.preventDefault(),e.onClick())})(n,s,e):void 0,onKeyDown:p?e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n.onClick&&n.onClick())}:void 0,children:e.jsx(t.Typography,{variant:d?"body-t-medium":"body-s-medium",children:n.label})}),!l&&e.jsx(a.ChevronLeft,{className:i("text-neutral-main flex-shrink-0",d?"w-2.5 h-2.5":"w-3 h-3"),"aria-hidden":"true"})]},u)})})})});s.displayName="Breadcrumb",exports.Breadcrumb=s;
@@ -1 +1 @@
1
- "use client";"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("react-dom"),l=require("./utils.js"),n=require("./contexts.js");const o=t.forwardRef(({children:o,direction:a="bottom",fullScreen:u=!1,isOpen:s=!1,onClose:i,className:d,isMobile:c,keepMounted:f,...b},m)=>{const[h,w]=t.useState(!1),x=n.useMobile(),p=c??x,y=t.useRef(null),v=t.useRef(null);t.useEffect(()=>{w(!0)},[]),t.useEffect(()=>{const handleEscape=e=>{"Escape"===e.key&&s&&i&&i()};return s&&(document.addEventListener("keydown",handleEscape),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",handleEscape),document.body.style.overflow="auto"}},[s,i]);const g=l("fixed inset-0 z-[10000000001] transition-all duration-300",{"bg-neutral-darker/50 backdrop-blur-sm":s,"bg-transparent pointer-events-none":!s,"hidden invisible absolute inset-0":f&&!h}),k=l("fixed bg-white shadow-2xl transition-all duration-300 ease-out overflow-auto",(()=>{switch(a){case"top":return"top-0 left-0 right-0";case"bottom":default:return"bottom-0 left-0 right-0";case"left":return"top-0 left-0 bottom-0";case"right":return"top-0 right-0 bottom-0"}})(),(()=>{const e="top"===a||"bottom"===a;return u?"w-full h-full":e?"w-full max-h-[90vh]":"h-full max-w-[90vw]"})(),(()=>{if(!s)switch(a){case"top":return"-translate-y-full";case"bottom":default:return"translate-y-full";case"left":return"-translate-x-full";case"right":return"translate-x-full"}return"translate-x-0 translate-y-0"})(),{"rounded-t-2xl":"bottom"===a&&!u,"rounded-b-2xl":"top"===a&&!u,"rounded-r-2xl":"left"===a&&!u,"rounded-l-2xl":"right"===a&&!u,"p-6":!p,"p-4":p},d),E=e.jsx("div",{ref:y,className:g,onClick:e=>{!u&&i&&y.current&&e.target===y.current&&i()},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||!u&&i&&y.current&&e.target===y.current&&i()},tabIndex:-1,role:"button","aria-label":"Close drawer","aria-hidden":!s,children:e.jsx("div",{ref:m||v,className:k,role:"dialog","aria-modal":"true","aria-label":"Drawer",...b,children:o})});return f||h?f&&!h?E:s?r.createPortal(E,document.body):null:null});o.displayName="Drawer",exports.Drawer=o;
1
+ "use client";"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("react-dom"),n=require("./utils.js"),l=require("./contexts.js");const o=t.forwardRef(({children:o,direction:a="bottom",fullScreen:u=!1,isOpen:s=!1,onClose:i,className:d,isMobile:c,keepMounted:f,zIndex:b,...m},h)=>{const[w,x]=t.useState(!1),p=l.useMobile(),y=c??p,v=t.useRef(null),g=t.useRef(null);t.useEffect(()=>{x(!0)},[]),t.useEffect(()=>{const handleEscape=e=>{"Escape"===e.key&&s&&i&&i()};return s&&(document.addEventListener("keydown",handleEscape),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",handleEscape),document.body.style.overflow="auto"}},[s,i]);const k=n("fixed inset-0 transition-all duration-300",`z-[${b??"10000000001"}]`),E=n(k,{"bg-neutral-darker/50 backdrop-blur-sm":s,"bg-transparent pointer-events-none":!s,"hidden invisible absolute inset-0":f&&!w}),j=n("fixed bg-white shadow-2xl transition-all duration-300 ease-out overflow-auto",(()=>{switch(a){case"top":return"top-0 left-0 right-0";case"bottom":default:return"bottom-0 left-0 right-0";case"left":return"top-0 left-0 bottom-0";case"right":return"top-0 right-0 bottom-0"}})(),(()=>{const e="top"===a||"bottom"===a;return u?"w-full h-full":e?"w-full max-h-[90vh]":"h-full max-w-[90vw]"})(),(()=>{if(!s)switch(a){case"top":return"-translate-y-full";case"bottom":default:return"translate-y-full";case"left":return"-translate-x-full";case"right":return"translate-x-full"}return"translate-x-0 translate-y-0"})(),{"rounded-t-2xl":"bottom"===a&&!u,"rounded-b-2xl":"top"===a&&!u,"rounded-r-2xl":"left"===a&&!u,"rounded-l-2xl":"right"===a&&!u,"p-6":!y,"p-4":y},d),q=e.jsx("div",{ref:v,className:E,onClick:e=>{!u&&i&&v.current&&e.target===v.current&&i()},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||!u&&i&&v.current&&e.target===v.current&&i()},tabIndex:-1,role:"button","aria-label":"Close drawer","aria-hidden":!s,children:e.jsx("div",{ref:h||g,className:j,role:"dialog","aria-modal":"true","aria-label":"Drawer",...m,children:o})});return f||w?f&&!w?q:s?r.createPortal(q,document.body):null:null});o.displayName="Drawer",exports.Drawer=o;
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as r}from"react/jsx-runtime";import t from"react";import i from"./utils.js";import{useMobile as n}from"./contexts.js";import{Typography as o}from"./Typography.js";import{C as a}from"./chunks/chevron-left-4HSuTes3.js";import"./chunks/createLucideIcon-DGp0SoUT.js";const l=t.forwardRef(({items:t,className:l,isMobile:s},c)=>{const m=n(),p=s??m;return e("nav",{ref:c,className:i("flex items-center",p?"gap-1 px-4 py-2.5":"gap-3 pr-1 pt-3 pb-4 pl-0",l),"aria-label":"Breadcrumb navigation",children:e("ol",{className:"flex items-center gap-inherit",children:t.map((n,l)=>{const s=l===t.length-1,c=!s&&!!n.onClick,m=`${n.label}-${l}`,u=n.component??(!s&&n.href?"a":"span"),d=c&&!n.href;return r("li",{className:"flex items-center gap-inherit",children:[e(u,{className:i("whitespace-nowrap text-neutral-main",c?"cursor-pointer hover:text-neutral-dark transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded-sm":void 0),role:d?"button":void 0,tabIndex:d?0:void 0,"aria-current":s?"page":void 0,"aria-label":s?`Current page: ${n.label}`:void 0,title:n.title,href:s?void 0:n.href,onClick:c?e=>((e,r,i)=>{r!==t.length-1&&e.onClick&&(e.href||i.preventDefault(),e.onClick())})(n,l,e):void 0,onKeyDown:d?e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n.onClick&&n.onClick())}:void 0,children:e(o,{variant:p?"body-t-medium":"body-s-medium",children:n.label})}),!s&&e(a,{className:i("text-neutral-main flex-shrink-0",p?"w-2.5 h-2.5":"w-3 h-3"),"aria-hidden":"true"})]},m)})})})});l.displayName="Breadcrumb";export{l as Breadcrumb};
1
+ "use client";import{jsx as e,jsxs as r}from"react/jsx-runtime";import t from"react";import i from"./utils.js";import{useMobile as n}from"./contexts.js";import{Typography as a}from"./Typography.js";import{C as o}from"./chunks/chevron-left-4HSuTes3.js";import"./chunks/createLucideIcon-DGp0SoUT.js";const l=t.forwardRef(({items:t,className:l,isMobile:s,allowLastItemAsLink:c=!1},m)=>{const p=n(),u=s??p;return e("nav",{ref:m,className:i("flex items-center",u?"gap-1 px-4 py-2.5":"gap-3 pr-1 pt-3 pb-4 pl-0",l),"aria-label":"Breadcrumb navigation",children:e("ol",{className:"flex items-center gap-inherit",children:t.map((n,l)=>{const s=l===t.length-1,m=(c||!s)&&!!n.onClick,p=`${n.label}-${l}`,d=n.component??(!c&&s||!n.href?"span":"a"),f=m&&!n.href;return r("li",{className:"flex items-center gap-inherit",children:[e(d,{className:i("whitespace-nowrap text-neutral-main",m?"cursor-pointer hover:text-neutral-dark transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded-sm":void 0),role:f?"button":void 0,tabIndex:f?0:void 0,"aria-current":s&&!c?"page":void 0,"aria-label":s&&!c?`Current page: ${n.label}`:void 0,title:n.title,href:c||!s?n.href:void 0,onClick:m?e=>((e,r,i)=>{(r!==t.length-1||c)&&e.onClick&&(e.href||i.preventDefault(),e.onClick())})(n,l,e):void 0,onKeyDown:f?e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n.onClick&&n.onClick())}:void 0,children:e(a,{variant:u?"body-t-medium":"body-s-medium",children:n.label})}),!s&&e(o,{className:i("text-neutral-main flex-shrink-0",u?"w-2.5 h-2.5":"w-3 h-3"),"aria-hidden":"true"})]},p)})})})});l.displayName="Breadcrumb";export{l as Breadcrumb};
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import e,{useState as r,useRef as o,useEffect as n}from"react";import{createPortal as l}from"react-dom";import a from"./utils.js";import{useMobile as i}from"./contexts.js";const s=e.forwardRef(({children:e,direction:s="bottom",fullScreen:u=!1,isOpen:d=!1,onClose:c,className:m,isMobile:f,keepMounted:b,...p},h)=>{const[w,x]=r(!1),y=i(),g=f??y,v=o(null),k=o(null);n(()=>{x(!0)},[]),n(()=>{const handleEscape=t=>{"Escape"===t.key&&d&&c&&c()};return d&&(document.addEventListener("keydown",handleEscape),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",handleEscape),document.body.style.overflow="auto"}},[d,c]);const E=a("fixed inset-0 z-[10000000001] transition-all duration-300",{"bg-neutral-darker/50 backdrop-blur-sm":d,"bg-transparent pointer-events-none":!d,"hidden invisible absolute inset-0":b&&!w}),N=a("fixed bg-white shadow-2xl transition-all duration-300 ease-out overflow-auto",(()=>{switch(s){case"top":return"top-0 left-0 right-0";case"bottom":default:return"bottom-0 left-0 right-0";case"left":return"top-0 left-0 bottom-0";case"right":return"top-0 right-0 bottom-0"}})(),(()=>{const t="top"===s||"bottom"===s;return u?"w-full h-full":t?"w-full max-h-[90vh]":"h-full max-w-[90vw]"})(),(()=>{if(!d)switch(s){case"top":return"-translate-y-full";case"bottom":default:return"translate-y-full";case"left":return"-translate-x-full";case"right":return"translate-x-full"}return"translate-x-0 translate-y-0"})(),{"rounded-t-2xl":"bottom"===s&&!u,"rounded-b-2xl":"top"===s&&!u,"rounded-r-2xl":"left"===s&&!u,"rounded-l-2xl":"right"===s&&!u,"p-6":!g,"p-4":g},m),j=t("div",{ref:v,className:E,onClick:t=>{!u&&c&&v.current&&t.target===v.current&&c()},onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||!u&&c&&v.current&&t.target===v.current&&c()},tabIndex:-1,role:"button","aria-label":"Close drawer","aria-hidden":!d,children:t("div",{ref:h||k,className:N,role:"dialog","aria-modal":"true","aria-label":"Drawer",...p,children:e})});return b||w?b&&!w?j:d?l(j,document.body):null:null});s.displayName="Drawer";export{s as Drawer};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import t,{useState as r,useRef as o,useEffect as n}from"react";import{createPortal as l}from"react-dom";import a from"./utils.js";import{useMobile as i}from"./contexts.js";const s=t.forwardRef(({children:t,direction:s="bottom",fullScreen:u=!1,isOpen:d=!1,onClose:c,className:m,isMobile:f,keepMounted:b,zIndex:p,...h},w)=>{const[x,y]=r(!1),g=i(),v=f??g,k=o(null),E=o(null);n(()=>{y(!0)},[]),n(()=>{const handleEscape=e=>{"Escape"===e.key&&d&&c&&c()};return d&&(document.addEventListener("keydown",handleEscape),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",handleEscape),document.body.style.overflow="auto"}},[d,c]);const N=a("fixed inset-0 transition-all duration-300",`z-[${p??"10000000001"}]`),j=a(N,{"bg-neutral-darker/50 backdrop-blur-sm":d,"bg-transparent pointer-events-none":!d,"hidden invisible absolute inset-0":b&&!x}),C=a("fixed bg-white shadow-2xl transition-all duration-300 ease-out overflow-auto",(()=>{switch(s){case"top":return"top-0 left-0 right-0";case"bottom":default:return"bottom-0 left-0 right-0";case"left":return"top-0 left-0 bottom-0";case"right":return"top-0 right-0 bottom-0"}})(),(()=>{const e="top"===s||"bottom"===s;return u?"w-full h-full":e?"w-full max-h-[90vh]":"h-full max-w-[90vw]"})(),(()=>{if(!d)switch(s){case"top":return"-translate-y-full";case"bottom":default:return"translate-y-full";case"left":return"-translate-x-full";case"right":return"translate-x-full"}return"translate-x-0 translate-y-0"})(),{"rounded-t-2xl":"bottom"===s&&!u,"rounded-b-2xl":"top"===s&&!u,"rounded-r-2xl":"left"===s&&!u,"rounded-l-2xl":"right"===s&&!u,"p-6":!v,"p-4":v},m),D=e("div",{ref:k,className:j,onClick:e=>{!u&&c&&k.current&&e.target===k.current&&c()},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||!u&&c&&k.current&&e.target===k.current&&c()},tabIndex:-1,role:"button","aria-label":"Close drawer","aria-hidden":!d,children:e("div",{ref:w||E,className:C,role:"dialog","aria-modal":"true","aria-label":"Drawer",...h,children:t})});return b||x?b&&!x?D:d?l(D,document.body):null:null});s.displayName="Drawer";export{s as Drawer};
@@ -6,12 +6,12 @@ import { Typography } from './Typography.js';
6
6
  import { C as ChevronLeft } from './chevron-left-Ck6O99eF.js';
7
7
  import './createLucideIcon-D-q73LTT.js';
8
8
 
9
- const Breadcrumb = React.forwardRef(({ items, className, isMobile }, ref) => {
9
+ const Breadcrumb = React.forwardRef(({ items, className, isMobile, allowLastItemAsLink = false }, ref) => {
10
10
  const detectedIsMobile = useMobile();
11
11
  const actualIsMobile = isMobile ?? detectedIsMobile;
12
12
  const handleItemClick = (item, index, e) => {
13
- // Don't make the last item (current page) clickable
14
- if (index === items.length - 1)
13
+ // Don't make the last item (current page) clickable unless explicitly allowed
14
+ if (index === items.length - 1 && !allowLastItemAsLink)
15
15
  return;
16
16
  if (item.onClick) {
17
17
  // If there is no href, we fully handle the click
@@ -27,15 +27,18 @@ const Breadcrumb = React.forwardRef(({ items, className, isMobile }, ref) => {
27
27
  // Responsive gap and padding based on mobile state
28
28
  actualIsMobile ? 'gap-1 px-4 py-2.5' : 'gap-3 pr-1 pt-3 pb-4 pl-0', className), "aria-label": "Breadcrumb navigation", children: jsx("ol", { className: "flex items-center gap-inherit", children: items.map((item, index) => {
29
29
  const isLast = index === items.length - 1;
30
- const isClickable = !isLast && !!item.onClick;
30
+ const isClickable = (allowLastItemAsLink || !isLast) && !!item.onClick;
31
31
  const itemKey = `${item.label}-${index}`;
32
- const ItemElement = item.component ?? (!isLast && item.href ? 'a' : 'span');
32
+ const ItemElement = item.component ??
33
+ ((allowLastItemAsLink || !isLast) && item.href ? 'a' : 'span');
33
34
  const isButtonLike = isClickable && !item.href;
34
35
  return (jsxs("li", { className: "flex items-center gap-inherit", children: [jsx(ItemElement, { className: cn('whitespace-nowrap text-neutral-main', isClickable
35
36
  ? 'cursor-pointer hover:text-neutral-dark transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded-sm'
36
37
  : undefined),
37
38
  // Accessibility only for non-link button-like behavior
38
- role: isButtonLike ? 'button' : undefined, tabIndex: isButtonLike ? 0 : undefined, "aria-current": isLast ? 'page' : undefined, "aria-label": isLast ? `Current page: ${item.label}` : undefined, title: item.title, href: !isLast ? item.href : undefined, onClick: isClickable
39
+ role: isButtonLike ? 'button' : undefined, tabIndex: isButtonLike ? 0 : undefined, "aria-current": isLast && !allowLastItemAsLink ? 'page' : undefined, "aria-label": isLast && !allowLastItemAsLink
40
+ ? `Current page: ${item.label}`
41
+ : undefined, title: item.title, href: allowLastItemAsLink || !isLast ? item.href : undefined, onClick: isClickable
39
42
  ? (e) => handleItemClick(item, index, e)
40
43
  : undefined, onKeyDown: isButtonLike
41
44
  ? (e) => {
@@ -4,7 +4,7 @@ import { createPortal } from 'react-dom';
4
4
  import cn from './utils.js';
5
5
  import { useMobile } from './contexts.js';
6
6
 
7
- const Drawer = React.forwardRef(({ children, direction = 'bottom', fullScreen = false, isOpen = false, onClose, className, isMobile, keepMounted, ...props }, ref) => {
7
+ const Drawer = React.forwardRef(({ children, direction = 'bottom', fullScreen = false, isOpen = false, onClose, className, isMobile, keepMounted, zIndex, ...props }, ref) => {
8
8
  const [isClient, setIsClient] = useState(false);
9
9
  const detectedIsMobile = useMobile();
10
10
  const actualIsMobile = isMobile ?? detectedIsMobile;
@@ -91,7 +91,10 @@ const Drawer = React.forwardRef(({ children, direction = 'bottom', fullScreen =
91
91
  }
92
92
  return 'h-full max-w-[90vw]';
93
93
  };
94
- const baseOverlayClasses = 'fixed inset-0 z-[10000000001] transition-all duration-300';
94
+ const defaultZIndex = '10000000001';
95
+ const zIndexValue = zIndex ?? defaultZIndex;
96
+ const zIndexClass = `z-[${zIndexValue}]`;
97
+ const baseOverlayClasses = cn('fixed inset-0 transition-all duration-300', zIndexClass);
95
98
  const baseDrawerClasses = 'fixed bg-white shadow-2xl transition-all duration-300 ease-out overflow-auto';
96
99
  const overlayClasses = cn(baseOverlayClasses, {
97
100
  'bg-neutral-darker/50 backdrop-blur-sm': isOpen,
@@ -16,6 +16,12 @@ export interface BreadcrumbProps {
16
16
  * Whether the component is in mobile mode (optional, auto-detected if not provided)
17
17
  */
18
18
  isMobile?: boolean;
19
+ /**
20
+ * Whether the last item should be allowed to be a link (default: false)
21
+ * When true, the last item can be clickable if it has onClick or href
22
+ * When false, the last item is always non-clickable (current page behavior)
23
+ */
24
+ allowLastItemAsLink?: boolean;
19
25
  }
20
26
  declare const Breadcrumb: React.ForwardRefExoticComponent<BreadcrumbProps & React.RefAttributes<HTMLElement>>;
21
27
  export { Breadcrumb };
@@ -33,6 +33,13 @@ declare const _default: {
33
33
  };
34
34
  description: string;
35
35
  };
36
+ allowLastItemAsLink: {
37
+ name: string;
38
+ control: {
39
+ type: string;
40
+ };
41
+ description: string;
42
+ };
36
43
  };
37
44
  args: {
38
45
  items: ({
@@ -47,6 +54,7 @@ declare const _default: {
47
54
  onClick?: undefined;
48
55
  })[];
49
56
  isMobile: boolean;
57
+ allowLastItemAsLink: boolean;
50
58
  };
51
59
  };
52
60
  export default _default;
@@ -220,3 +228,31 @@ export declare const WithCustomComponent: {
220
228
  })[];
221
229
  };
222
230
  };
231
+ export declare const LastItemAsLink: {
232
+ (args: StoryArgs): import("react/jsx-runtime").JSX.Element;
233
+ storyName: string;
234
+ args: {
235
+ allowLastItemAsLink: boolean;
236
+ items: {
237
+ label: string;
238
+ href: string;
239
+ onClick: () => void;
240
+ }[];
241
+ };
242
+ };
243
+ export declare const LastItemWithoutLink: {
244
+ (args: StoryArgs): import("react/jsx-runtime").JSX.Element;
245
+ storyName: string;
246
+ args: {
247
+ allowLastItemAsLink: boolean;
248
+ items: {
249
+ label: string;
250
+ href: string;
251
+ onClick: () => void;
252
+ }[];
253
+ };
254
+ };
255
+ export declare const LastItemLinkComparison: {
256
+ (): import("react/jsx-runtime").JSX.Element;
257
+ storyName: string;
258
+ };
@@ -16,6 +16,10 @@ export type DrawerProps = {
16
16
  * This allows SSR rendering but keeps it visually hidden until opened.
17
17
  */
18
18
  keepMounted?: boolean;
19
+ /**
20
+ * Custom z-index value for the overlay. Defaults to 10000000001.
21
+ */
22
+ zIndex?: number | string;
19
23
  };
20
24
  declare const Drawer: React.ForwardRefExoticComponent<DrawerProps & React.RefAttributes<HTMLDivElement>>;
21
25
  export { Drawer };
@@ -47,6 +47,13 @@ declare const _default: {
47
47
  };
48
48
  description: string;
49
49
  };
50
+ zIndex: {
51
+ name: string;
52
+ control: {
53
+ type: string;
54
+ };
55
+ description: string;
56
+ };
50
57
  children: {
51
58
  table: {
52
59
  disable: boolean;
package/package.json CHANGED
@@ -1,176 +1,176 @@
1
- {
2
- "name": "automoby-kit",
3
- "version": "1.0.69",
4
- "description": "A comprehensive React UI component library - created in war 2025",
5
- "main": "dist/cjs/index.js",
6
- "module": "dist/esm/index.js",
7
- "types": "dist/types/index.d.ts",
8
- "files": [
9
- "dist"
10
- ],
11
- "exports": {
12
- ".": {
13
- "import": "./dist/esm/index.js",
14
- "require": "./dist/cjs/index.js",
15
- "types": "./dist/types/index.d.ts"
16
- },
17
- "./Typography": {
18
- "import": "./dist/esm/Typography.js",
19
- "require": "./dist/cjs/Typography.js",
20
- "types": "./dist/types/components/Typography/Typography.d.ts"
21
- },
22
- "./Button": {
23
- "import": "./dist/esm/Button.js",
24
- "require": "./dist/cjs/Button.js",
25
- "types": "./dist/types/components/Button/Button.d.ts"
26
- },
27
- "./Input": {
28
- "import": "./dist/esm/Input.js",
29
- "require": "./dist/cjs/Input.js",
30
- "types": "./dist/types/components/Input/Input.d.ts"
31
- },
32
- "./Tabs": {
33
- "import": "./dist/esm/Tabs.js",
34
- "require": "./dist/cjs/Tabs.js",
35
- "types": "./dist/types/components/Tabs/Tabs.d.ts"
36
- },
37
- "./Drawer": {
38
- "import": "./dist/esm/Drawer.js",
39
- "require": "./dist/cjs/Drawer.js",
40
- "types": "./dist/types/components/Drawer/Drawer.d.ts"
41
- },
42
- "./Backdrop": {
43
- "import": "./dist/esm/Backdrop.js",
44
- "require": "./dist/cjs/Backdrop.js",
45
- "types": "./dist/types/components/Backdrop/Backdrop.d.ts"
46
- },
47
- "./Breadcrumb": {
48
- "import": "./dist/esm/Breadcrumb.js",
49
- "require": "./dist/cjs/Breadcrumb.js",
50
- "types": "./dist/types/components/Breadcrumb/Breadcrumb.d.ts"
51
- },
52
- "./Pagination": {
53
- "import": "./dist/esm/Pagination.js",
54
- "require": "./dist/cjs/Pagination.js",
55
- "types": "./dist/types/components/Pagination/Pagination.d.ts"
56
- },
57
- "./Accordion": {
58
- "import": "./dist/esm/Accordion.js",
59
- "require": "./dist/cjs/Accordion.js",
60
- "types": "./dist/types/components/Accordion/Accordion.d.ts"
61
- },
62
- "./Divider": {
63
- "import": "./dist/esm/Divider.js",
64
- "require": "./dist/cjs/Divider.js",
65
- "types": "./dist/types/components/Divider/Divider.d.ts"
66
- },
67
- "./RadioGroup": {
68
- "import": "./dist/esm/RadioGroup.js",
69
- "require": "./dist/cjs/RadioGroup.js",
70
- "types": "./dist/types/components/RadioGroup/RadioGroup.d.ts"
71
- },
72
- "./Chips": {
73
- "import": "./dist/esm/Chips.js",
74
- "require": "./dist/cjs/Chips.js",
75
- "types": "./dist/types/components/Chips/Chips.d.ts"
76
- },
77
- "./Menu": {
78
- "import": "./dist/esm/Menu.js",
79
- "require": "./dist/cjs/Menu.js",
80
- "types": "./dist/types/components/Menu/Menu.d.ts"
81
- },
82
- "./contexts": {
83
- "import": "./dist/esm/contexts.js",
84
- "require": "./dist/cjs/contexts.js",
85
- "types": "./dist/types/contexts/index.d.ts"
86
- },
87
- "./utils": {
88
- "import": "./dist/esm/utils.js",
89
- "require": "./dist/cjs/utils.js",
90
- "types": "./dist/types/utils/cn.d.ts"
91
- }
92
- },
93
- "keywords": [
94
- "react",
95
- "ui",
96
- "components",
97
- "typescript",
98
- "tailwind",
99
- "kit"
100
- ],
101
- "scripts": {
102
- "test": "echo \"Error: no test specified\" && exit 1",
103
- "lint": "eslint \"src/**/*.{js,ts,jsx,tsx}\" --fix",
104
- "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
105
- "check-format": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
106
- "check-lint": "eslint \"src/**/*.{js,ts,jsx,tsx}\"",
107
- "check-types": "tsc --noEmit",
108
- "prepare": "husky",
109
- "prepublishOnly": "npm run build",
110
- "storybook": "storybook dev -p 6006",
111
- "storybook:dev": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=true storybook dev -p 6006 \"",
112
- "storybook:dev:mobile": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=true storybook dev -p 6006 \"",
113
- "storybook:dev:desktop": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=false storybook dev -p 6006 \"",
114
- "build-storybook": "storybook build",
115
- "build:storybook:css:watch": "npx @tailwindcss/cli -i ./.storybook/tailwind.css -o ./tailwind-build/tailwind.build.css --watch",
116
- "build:storybook:css": "npx @tailwindcss/cli -i ./.storybook/tailwind.css -o ./tailwind-build/tailwind.build.css",
117
- "clean": "rimraf dist",
118
- "build": "npm run clean && rollup -c"
119
- },
120
- "author": "Ghazal_kordi Alireza_mirzaee",
121
- "license": "ISC",
122
- "peerDependencies": {
123
- "clsx": "^2.1.1",
124
- "lucide-react": "^0.522.0",
125
- "react": "^19.1.0",
126
- "react-dom": "^19.1.0",
127
- "tailwindcss": "^4.1.10",
128
- "typescript": "^5.8.3",
129
- "ua-parser-js": "^2.0.4"
130
- },
131
- "devDependencies": {
132
- "@rollup/plugin-alias": "^5.1.1",
133
- "@rollup/plugin-commonjs": "^28.0.6",
134
- "@rollup/plugin-node-resolve": "^16.0.1",
135
- "@rollup/plugin-terser": "^0.4.4",
136
- "@rollup/plugin-typescript": "^12.1.3",
137
- "@storybook/addon-docs": "^9.0.6",
138
- "@storybook/addon-onboarding": "^9.0.6",
139
- "@storybook/react-vite": "^9.0.6",
140
- "@tailwindcss/cli": "^4.1.10",
141
- "@tailwindcss/postcss": "^4.1.10",
142
- "@types/node": "^24.0.3",
143
- "@types/react": "^19.1.4",
144
- "@types/react-dom": "^19.1.5",
145
- "@types/ua-parser-js": "^0.7.39",
146
- "@typescript-eslint/eslint-plugin": "^7.18.0",
147
- "@typescript-eslint/parser": "^7.18.0",
148
- "autoprefixer": "^10.4.21",
149
- "clsx": "^2.1.1",
150
- "concurrently": "^9.2.0",
151
- "cross-env": "^7.0.3",
152
- "eslint": "^8.57.0",
153
- "eslint-config-airbnb": "^19.0.4",
154
- "eslint-config-airbnb-typescript": "^18.0.0",
155
- "eslint-config-prettier": "^10.1.5",
156
- "eslint-import-resolver-typescript": "^4.4.3",
157
- "eslint-plugin-import": "^2.32.0",
158
- "eslint-plugin-jsx-a11y": "^6.10.2",
159
- "eslint-plugin-prettier": "^5.5.0",
160
- "eslint-plugin-react": "^7.37.5",
161
- "eslint-plugin-storybook": "^9.0.6",
162
- "husky": "^9.1.7",
163
- "lucide-react": "^0.522.0",
164
- "prettier": "^3.5.3",
165
- "react": "^19.1.0",
166
- "react-dom": "^19.1.0",
167
- "rimraf": "^6.0.1",
168
- "rollup": "^4.44.0",
169
- "serve": "^14.2.4",
170
- "storybook": "^9.0.6",
171
- "tailwind-merge": "^3.3.1",
172
- "tailwindcss": "^4.1.10",
173
- "typescript": "^5.8.3",
174
- "ua-parser-js": "^2.0.4"
175
- }
176
- }
1
+ {
2
+ "name": "automoby-kit",
3
+ "version": "1.0.71",
4
+ "description": "A comprehensive React UI component library - created in war 2025",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/esm/index.js",
14
+ "require": "./dist/cjs/index.js",
15
+ "types": "./dist/types/index.d.ts"
16
+ },
17
+ "./Typography": {
18
+ "import": "./dist/esm/Typography.js",
19
+ "require": "./dist/cjs/Typography.js",
20
+ "types": "./dist/types/components/Typography/Typography.d.ts"
21
+ },
22
+ "./Button": {
23
+ "import": "./dist/esm/Button.js",
24
+ "require": "./dist/cjs/Button.js",
25
+ "types": "./dist/types/components/Button/Button.d.ts"
26
+ },
27
+ "./Input": {
28
+ "import": "./dist/esm/Input.js",
29
+ "require": "./dist/cjs/Input.js",
30
+ "types": "./dist/types/components/Input/Input.d.ts"
31
+ },
32
+ "./Tabs": {
33
+ "import": "./dist/esm/Tabs.js",
34
+ "require": "./dist/cjs/Tabs.js",
35
+ "types": "./dist/types/components/Tabs/Tabs.d.ts"
36
+ },
37
+ "./Drawer": {
38
+ "import": "./dist/esm/Drawer.js",
39
+ "require": "./dist/cjs/Drawer.js",
40
+ "types": "./dist/types/components/Drawer/Drawer.d.ts"
41
+ },
42
+ "./Backdrop": {
43
+ "import": "./dist/esm/Backdrop.js",
44
+ "require": "./dist/cjs/Backdrop.js",
45
+ "types": "./dist/types/components/Backdrop/Backdrop.d.ts"
46
+ },
47
+ "./Breadcrumb": {
48
+ "import": "./dist/esm/Breadcrumb.js",
49
+ "require": "./dist/cjs/Breadcrumb.js",
50
+ "types": "./dist/types/components/Breadcrumb/Breadcrumb.d.ts"
51
+ },
52
+ "./Pagination": {
53
+ "import": "./dist/esm/Pagination.js",
54
+ "require": "./dist/cjs/Pagination.js",
55
+ "types": "./dist/types/components/Pagination/Pagination.d.ts"
56
+ },
57
+ "./Accordion": {
58
+ "import": "./dist/esm/Accordion.js",
59
+ "require": "./dist/cjs/Accordion.js",
60
+ "types": "./dist/types/components/Accordion/Accordion.d.ts"
61
+ },
62
+ "./Divider": {
63
+ "import": "./dist/esm/Divider.js",
64
+ "require": "./dist/cjs/Divider.js",
65
+ "types": "./dist/types/components/Divider/Divider.d.ts"
66
+ },
67
+ "./RadioGroup": {
68
+ "import": "./dist/esm/RadioGroup.js",
69
+ "require": "./dist/cjs/RadioGroup.js",
70
+ "types": "./dist/types/components/RadioGroup/RadioGroup.d.ts"
71
+ },
72
+ "./Chips": {
73
+ "import": "./dist/esm/Chips.js",
74
+ "require": "./dist/cjs/Chips.js",
75
+ "types": "./dist/types/components/Chips/Chips.d.ts"
76
+ },
77
+ "./Menu": {
78
+ "import": "./dist/esm/Menu.js",
79
+ "require": "./dist/cjs/Menu.js",
80
+ "types": "./dist/types/components/Menu/Menu.d.ts"
81
+ },
82
+ "./contexts": {
83
+ "import": "./dist/esm/contexts.js",
84
+ "require": "./dist/cjs/contexts.js",
85
+ "types": "./dist/types/contexts/index.d.ts"
86
+ },
87
+ "./utils": {
88
+ "import": "./dist/esm/utils.js",
89
+ "require": "./dist/cjs/utils.js",
90
+ "types": "./dist/types/utils/cn.d.ts"
91
+ }
92
+ },
93
+ "keywords": [
94
+ "react",
95
+ "ui",
96
+ "components",
97
+ "typescript",
98
+ "tailwind",
99
+ "kit"
100
+ ],
101
+ "scripts": {
102
+ "test": "echo \"Error: no test specified\" && exit 1",
103
+ "lint": "eslint \"src/**/*.{js,ts,jsx,tsx}\" --fix",
104
+ "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
105
+ "check-format": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
106
+ "check-lint": "eslint \"src/**/*.{js,ts,jsx,tsx}\"",
107
+ "check-types": "tsc --noEmit",
108
+ "prepare": "husky",
109
+ "prepublishOnly": "npm run build",
110
+ "storybook": "storybook dev -p 6006",
111
+ "storybook:dev": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=true storybook dev -p 6006 \"",
112
+ "storybook:dev:mobile": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=true storybook dev -p 6006 \"",
113
+ "storybook:dev:desktop": "concurrently \"npm:build:storybook:css:watch\" \"cross-env STORYBOOK_FORCE_MOBILE=false storybook dev -p 6006 \"",
114
+ "build-storybook": "storybook build",
115
+ "build:storybook:css:watch": "npx @tailwindcss/cli -i ./.storybook/tailwind.css -o ./tailwind-build/tailwind.build.css --watch",
116
+ "build:storybook:css": "npx @tailwindcss/cli -i ./.storybook/tailwind.css -o ./tailwind-build/tailwind.build.css",
117
+ "clean": "rimraf dist",
118
+ "build": "npm run clean && rollup -c"
119
+ },
120
+ "author": "Ghazal_kordi Alireza_mirzaee",
121
+ "license": "ISC",
122
+ "peerDependencies": {
123
+ "clsx": "^2.1.1",
124
+ "lucide-react": "^0.522.0",
125
+ "react": "^19.1.0",
126
+ "react-dom": "^19.1.0",
127
+ "tailwindcss": "^4.1.10",
128
+ "typescript": "^5.8.3",
129
+ "ua-parser-js": "^2.0.4"
130
+ },
131
+ "devDependencies": {
132
+ "@rollup/plugin-alias": "^5.1.1",
133
+ "@rollup/plugin-commonjs": "^28.0.6",
134
+ "@rollup/plugin-node-resolve": "^16.0.1",
135
+ "@rollup/plugin-terser": "^0.4.4",
136
+ "@rollup/plugin-typescript": "^12.1.3",
137
+ "@storybook/addon-docs": "^9.0.6",
138
+ "@storybook/addon-onboarding": "^9.0.6",
139
+ "@storybook/react-vite": "^9.0.6",
140
+ "@tailwindcss/cli": "^4.1.10",
141
+ "@tailwindcss/postcss": "^4.1.10",
142
+ "@types/node": "^24.0.3",
143
+ "@types/react": "^19.1.4",
144
+ "@types/react-dom": "^19.1.5",
145
+ "@types/ua-parser-js": "^0.7.39",
146
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
147
+ "@typescript-eslint/parser": "^7.18.0",
148
+ "autoprefixer": "^10.4.21",
149
+ "clsx": "^2.1.1",
150
+ "concurrently": "^9.2.0",
151
+ "cross-env": "^7.0.3",
152
+ "eslint": "^8.57.0",
153
+ "eslint-config-airbnb": "^19.0.4",
154
+ "eslint-config-airbnb-typescript": "^18.0.0",
155
+ "eslint-config-prettier": "^10.1.5",
156
+ "eslint-import-resolver-typescript": "^4.4.3",
157
+ "eslint-plugin-import": "^2.32.0",
158
+ "eslint-plugin-jsx-a11y": "^6.10.2",
159
+ "eslint-plugin-prettier": "^5.5.0",
160
+ "eslint-plugin-react": "^7.37.5",
161
+ "eslint-plugin-storybook": "^9.0.6",
162
+ "husky": "^9.1.7",
163
+ "lucide-react": "^0.522.0",
164
+ "prettier": "^3.5.3",
165
+ "react": "^19.1.0",
166
+ "react-dom": "^19.1.0",
167
+ "rimraf": "^6.0.1",
168
+ "rollup": "^4.44.0",
169
+ "serve": "^14.2.4",
170
+ "storybook": "^9.0.6",
171
+ "tailwind-merge": "^3.3.1",
172
+ "tailwindcss": "^4.1.10",
173
+ "typescript": "^5.8.3",
174
+ "ua-parser-js": "^2.0.4"
175
+ }
176
+ }