auxalia-ui-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,456 @@
1
+ # Auxalia UI — `auxalia-ui`
2
+
3
+ A modern, accessible React component library built with **TypeScript**, **Radix UI**, and **Tailwind CSS v4**. Designed for seamless integration into large-scale projects.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/auxalia-ui)](https://www.npmjs.com/package/auxalia-ui)
6
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
7
+
8
+ ---
9
+
10
+ ## Table of Contents
11
+
12
+ - [Features](#features)
13
+ - [Requirements](#requirements)
14
+ - [Installation](#installation)
15
+ - [Setup](#setup)
16
+ - [Components](#components)
17
+ - [Tailwind Preset](#tailwind-preset)
18
+ - [Design Tokens](#design-tokens)
19
+ - [Development](#development)
20
+ - [License](#license)
21
+
22
+ ---
23
+
24
+ ## Features
25
+
26
+ - **Customizable** — CVA-powered variants for predictable, type-safe styling
27
+ - **Accessible** — Built on Radix UI primitives, WCAG compliant
28
+ - **Tree-Shakeable** — ESM + CJS dual output for optimal bundle size
29
+ - **Type-Safe** — Full TypeScript with strict types
30
+ - **Dark Mode** — All components support light/dark themes via CSS class
31
+ - **Tailwind v4** — Ships a Tailwind preset with Auxalia brand tokens
32
+ - **Storybook** — Interactive component explorer included
33
+
34
+ ---
35
+
36
+ ## Requirements
37
+
38
+ | Dependency | Version |
39
+ | ----------- | ------- |
40
+ | React | ^19.2.0 |
41
+ | react-dom | ^19.2.0 |
42
+ | tailwindcss | ^4.0.0 |
43
+
44
+ ---
45
+
46
+ ## Installation
47
+
48
+ ```bash
49
+ npm install auxalia-ui
50
+ ```
51
+
52
+ ---
53
+
54
+ ## Setup
55
+
56
+ ### 1. Import styles
57
+
58
+ In your app's entry CSS file:
59
+
60
+ ```css
61
+ @import 'auxalia-ui/styles.css';
62
+ ```
63
+
64
+ Or import the design tokens separately:
65
+
66
+ ```css
67
+ @import 'auxalia-ui/tokens.css';
68
+ ```
69
+
70
+ ### 2. Configure Tailwind v4
71
+
72
+ In your CSS config file (e.g. `app.css`):
73
+
74
+ ```css
75
+ @import 'tailwindcss';
76
+ @import 'auxalia-ui/tokens.css';
77
+ ```
78
+
79
+ Or use the Tailwind preset in your `tailwind.config.ts`:
80
+
81
+ ```ts
82
+ import auxaliaPreset from 'auxalia-ui/tailwind.preset';
83
+
84
+ export default {
85
+ presets: [auxaliaPreset],
86
+ };
87
+ ```
88
+
89
+ ### 3. Use components
90
+
91
+ ```tsx
92
+ import { Button } from 'auxalia-ui';
93
+
94
+ export default function App() {
95
+ return (
96
+ <Button variant="default" color="primary">
97
+ Click me
98
+ </Button>
99
+ );
100
+ }
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Components
106
+
107
+ ### Button
108
+
109
+ ```tsx
110
+ import { Button } from 'auxalia-ui';
111
+
112
+ <Button variant="default" color="primary" size="default">Save</Button>
113
+ <Button variant="outline" color="secondary">Cancel</Button>
114
+ <Button variant="ghost" color="destructive" size="sm">Delete</Button>
115
+ ```
116
+
117
+ | Prop | Type | Default |
118
+ | --------- | -------------------------------------------------------------------- | ----------- |
119
+ | `variant` | `'default' \| 'outline' \| 'ghost' \| 'link'` | `'default'` |
120
+ | `color` | `'default' \| 'primary' \| 'secondary' \| 'accent' \| 'destructive'` | `'primary'` |
121
+ | `size` | `'sm' \| 'default' \| 'lg' \| 'icon'` | `'default'` |
122
+ | `asChild` | `boolean` | `false` |
123
+
124
+ ---
125
+
126
+ ### Card
127
+
128
+ ```tsx
129
+ import { Card } from 'auxalia-ui';
130
+
131
+ <Card variant="default">Content</Card>
132
+ <Card variant="elevated">Elevated</Card>
133
+ <Card variant="outlined">Outlined</Card>
134
+ ```
135
+
136
+ | Prop | Type | Default |
137
+ | --------- | ------------------------------------------------------------------------------- | ----------- |
138
+ | `variant` | `'default' \| 'outlined' \| 'elevated' \| 'success' \| 'accent' \| 'secondary'` | `'default'` |
139
+
140
+ ---
141
+
142
+ ### Input
143
+
144
+ ```tsx
145
+ import { Input } from 'auxalia-ui';
146
+
147
+ <Input placeholder="Enter text..." />
148
+ <Input size="lg" variant="error" />
149
+ ```
150
+
151
+ | Prop | Type | Default |
152
+ | --------- | ---------------------- | ----------- |
153
+ | `variant` | `'default' \| 'error'` | `'default'` |
154
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
155
+
156
+ ---
157
+
158
+ ### Select
159
+
160
+ ```tsx
161
+ import {
162
+ Select,
163
+ SelectTrigger,
164
+ SelectValue,
165
+ SelectContent,
166
+ SelectItem,
167
+ } from 'auxalia-ui';
168
+
169
+ <Select>
170
+ <SelectTrigger variant="primary" size="md">
171
+ <SelectValue placeholder="Pick one" />
172
+ </SelectTrigger>
173
+ <SelectContent>
174
+ <SelectItem value="a">Option A</SelectItem>
175
+ <SelectItem value="b">Option B</SelectItem>
176
+ </SelectContent>
177
+ </Select>;
178
+ ```
179
+
180
+ **SelectTrigger variants:** `'default' | 'primary' | 'secondary' | 'accent' | 'destructive' | 'error'`
181
+
182
+ **SelectTrigger sizes:** `'sm' | 'md' | 'lg'`
183
+
184
+ **SelectItem variants:** `'default' | 'primary' | 'secondary' | 'accent' | 'destructive'`
185
+
186
+ ---
187
+
188
+ ### DropdownMenu
189
+
190
+ ```tsx
191
+ import {
192
+ DropdownMenu,
193
+ DropdownMenuTrigger,
194
+ DropdownMenuContent,
195
+ DropdownMenuItem,
196
+ DropdownMenuSeparator,
197
+ DropdownMenuLabel,
198
+ } from 'auxalia-ui';
199
+
200
+ <DropdownMenu>
201
+ <DropdownMenuTrigger>Open</DropdownMenuTrigger>
202
+ <DropdownMenuContent>
203
+ <DropdownMenuLabel>Actions</DropdownMenuLabel>
204
+ <DropdownMenuSeparator />
205
+ <DropdownMenuItem variant="default">Edit</DropdownMenuItem>
206
+ <DropdownMenuItem variant="destructive">Delete</DropdownMenuItem>
207
+ </DropdownMenuContent>
208
+ </DropdownMenu>;
209
+ ```
210
+
211
+ **DropdownMenuItem variants:** `'default' | 'primary' | 'secondary' | 'accent' | 'destructive'`
212
+
213
+ Also exports: `DropdownMenuCheckboxItem`, `DropdownMenuRadioItem`, `DropdownMenuRadioGroup`,
214
+ `DropdownMenuGroup`, `DropdownMenuSub`, `DropdownMenuSubTrigger`, `DropdownMenuSubContent`,
215
+ `DropdownMenuShortcut`, `DropdownMenuPortal`
216
+
217
+ ---
218
+
219
+ ### Tabs
220
+
221
+ ```tsx
222
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from 'auxalia-ui';
223
+
224
+ const [tab, setTab] = useState('overview');
225
+
226
+ <Tabs value={tab} onValueChange={setTab}>
227
+ <TabsList>
228
+ <TabsTrigger value="overview">Overview</TabsTrigger>
229
+ <TabsTrigger value="settings">Settings</TabsTrigger>
230
+ </TabsList>
231
+ <TabsContent value="overview">Overview content</TabsContent>
232
+ <TabsContent value="settings">Settings content</TabsContent>
233
+ </Tabs>;
234
+ ```
235
+
236
+ ---
237
+
238
+ ### Text
239
+
240
+ ```tsx
241
+ import { Text } from 'auxalia-ui';
242
+
243
+ <Text size="xl" align="center">
244
+ Hello World
245
+ </Text>;
246
+ ```
247
+
248
+ | Prop | Type | Default |
249
+ | ------- | ------------------------------------------------ | -------- |
250
+ | `size` | `'sm' \| 'md' \| 'lg' \| 'xl' \| '2xl' \| '3xl'` | `'md'` |
251
+ | `align` | `'left' \| 'center' \| 'right'` | `'left'` |
252
+
253
+ ---
254
+
255
+ ### Field (Form Wrapper)
256
+
257
+ ```tsx
258
+ import { Field, FieldLabel, FieldDescription, FieldError } from 'auxalia-ui';
259
+
260
+ <Field orientation="vertical">
261
+ <FieldLabel>Email</FieldLabel>
262
+ <Input type="email" />
263
+ <FieldDescription>We'll never share your email.</FieldDescription>
264
+ <FieldError errors={['Email is required']} />
265
+ </Field>;
266
+ ```
267
+
268
+ **Orientation:** `'vertical'` (default) | `'horizontal'` | `'responsive'`
269
+
270
+ Also exports: `FieldContent`, `FieldGroup`, `FieldSet`, `FieldLegend`, `FieldSeparator`, `FieldTitle`
271
+
272
+ ---
273
+
274
+ ### Tooltip
275
+
276
+ ```tsx
277
+ import { Tooltip, TooltipTrigger, TooltipContent } from 'auxalia-ui';
278
+
279
+ <Tooltip>
280
+ <TooltipTrigger>Hover me</TooltipTrigger>
281
+ <TooltipContent>Helpful hint</TooltipContent>
282
+ </Tooltip>;
283
+ ```
284
+
285
+ Also exports: `TooltipProvider`
286
+
287
+ ---
288
+
289
+ ### Popover
290
+
291
+ ```tsx
292
+ import { Popover, PopoverTrigger, PopoverContent } from 'auxalia-ui';
293
+
294
+ <Popover>
295
+ <PopoverTrigger>Open</PopoverTrigger>
296
+ <PopoverContent>Popover content here</PopoverContent>
297
+ </Popover>;
298
+ ```
299
+
300
+ Also exports: `PopoverAnchor`
301
+
302
+ ---
303
+
304
+ ### Pagination
305
+
306
+ ```tsx
307
+ import {
308
+ Pagination,
309
+ PaginationContent,
310
+ PaginationItem,
311
+ PaginationLink,
312
+ PaginationPrevious,
313
+ PaginationNext,
314
+ PaginationEllipsis,
315
+ } from 'auxalia-ui';
316
+
317
+ <Pagination>
318
+ <PaginationContent>
319
+ <PaginationItem>
320
+ <PaginationPrevious href="#" />
321
+ </PaginationItem>
322
+ <PaginationItem>
323
+ <PaginationLink href="#" isActive>
324
+ 1
325
+ </PaginationLink>
326
+ </PaginationItem>
327
+ <PaginationItem>
328
+ <PaginationLink href="#">2</PaginationLink>
329
+ </PaginationItem>
330
+ <PaginationItem>
331
+ <PaginationEllipsis />
332
+ </PaginationItem>
333
+ <PaginationItem>
334
+ <PaginationNext href="#" />
335
+ </PaginationItem>
336
+ </PaginationContent>
337
+ </Pagination>;
338
+ ```
339
+
340
+ ---
341
+
342
+ ### Collapsible
343
+
344
+ ```tsx
345
+ import {
346
+ CollapsibleRoot,
347
+ CollapsibleTrigger,
348
+ CollapsibleContent,
349
+ } from 'auxalia-ui';
350
+
351
+ <CollapsibleRoot>
352
+ <CollapsibleTrigger>Toggle</CollapsibleTrigger>
353
+ <CollapsibleContent>Hidden content</CollapsibleContent>
354
+ </CollapsibleRoot>;
355
+ ```
356
+
357
+ ---
358
+
359
+ ### Label
360
+
361
+ ```tsx
362
+ import { Label } from 'auxalia-ui';
363
+
364
+ <Label htmlFor="email">Email address</Label>;
365
+ ```
366
+
367
+ ---
368
+
369
+ ### TableView
370
+
371
+ A full-featured controlled data table with sorting, filtering, pagination, and search.
372
+
373
+ ```tsx
374
+ import { TableView } from 'auxalia-ui';
375
+ import type { TableField, TableConfig } from 'auxalia-ui';
376
+
377
+ const fields: TableField[] = [
378
+ { key: 'name', label: 'Name', sortable: true },
379
+ { key: 'email', label: 'Email' },
380
+ ];
381
+
382
+ <TableView
383
+ data={rows}
384
+ fields={fields}
385
+ config={config}
386
+ queryParams={queryParams}
387
+ onQueryChange={setQueryParams}
388
+ />;
389
+ ```
390
+
391
+ ---
392
+
393
+ ## Tailwind Preset
394
+
395
+ The preset includes the full Auxalia brand token system:
396
+
397
+ ```ts
398
+ import auxaliaPreset from 'auxalia-ui/tailwind.preset';
399
+
400
+ export default {
401
+ presets: [auxaliaPreset],
402
+ };
403
+ ```
404
+
405
+ **Brand colors available in Tailwind utilities:**
406
+
407
+ | Token | Value | Usage |
408
+ | ------------------ | ------------ | ----------------------- |
409
+ | `primary` | #A7D500 | Auxalia Green |
410
+ | `secondary` | #3e6897 | Auxalia Blue |
411
+ | `accent` | #0f868b | Auxalia Petrol |
412
+ | `destructive` | #dc2626 | Errors / danger |
413
+ | `auxalia-green-*` | 50–900 scale | Extended green palette |
414
+ | `auxalia-blue-*` | 50–900 scale | Extended blue palette |
415
+ | `auxalia-petrol-*` | 50–900 scale | Extended petrol palette |
416
+
417
+ **Dark mode:** configured via the `dark` class on the root element.
418
+
419
+ ---
420
+
421
+ ## Design Tokens
422
+
423
+ Tokens are exposed as CSS custom properties and can be used independently:
424
+
425
+ ```css
426
+ @import 'auxalia-ui/tokens.css';
427
+ ```
428
+
429
+ ```css
430
+ /* Example usage in your CSS */
431
+ .my-element {
432
+ color: rgb(var(--color-primary));
433
+ background: rgb(var(--color-surface));
434
+ }
435
+ ```
436
+
437
+ ---
438
+
439
+ ## Development
440
+
441
+ ```bash
442
+ # Install dependencies
443
+ npm install
444
+
445
+ # Run Storybook (port 6006)
446
+ npm run storybook
447
+
448
+ # Build static Storybook
449
+ npm run build-storybook
450
+ ```
451
+
452
+ ---
453
+
454
+ ## License
455
+
456
+ ISC — [Auxalia](https://github.com/Artur-Badalyan/auxalia-ui)
@@ -0,0 +1,165 @@
1
+ // src/tailwind.preset.ts
2
+ var auxaliaColors = {
3
+ // Primary Brand Color - Fresh Green
4
+ "auxalia-green": {
5
+ 50: "#f8fbf0",
6
+ 100: "#f0f7e1",
7
+ 200: "#ddf0c0",
8
+ 300: "#c3e88a",
9
+ 400: "#a7d500",
10
+ // Brand primary
11
+ 500: "#93b800",
12
+ 600: "#749400",
13
+ 700: "#5a7600",
14
+ 800: "#3d5000",
15
+ 900: "#1f2800"
16
+ },
17
+ // Secondary Brand Color - Dark Blue
18
+ "auxalia-blue": {
19
+ 50: "#f0f4f8",
20
+ 100: "#e0eaf3",
21
+ 200: "#c0d6e6",
22
+ 300: "#8fb3d1",
23
+ 400: "#5c8fb5",
24
+ 500: "#3e6897",
25
+ // Brand secondary
26
+ 600: "#2d5080",
27
+ 700: "#1f3860",
28
+ 800: "#142a47",
29
+ 900: "#0a1628"
30
+ },
31
+ // Accent - Petrol Green
32
+ "auxalia-petrol": {
33
+ 50: "#f0fbfc",
34
+ 100: "#dff8f9",
35
+ 200: "#bef1f3",
36
+ 300: "#7fe6eb",
37
+ 400: "#3fd9e1",
38
+ 500: "#0f868b",
39
+ // Auxalia petrol
40
+ 600: "#0a646b",
41
+ 700: "#064952",
42
+ 800: "#033539",
43
+ 900: "#011f22"
44
+ },
45
+ // Supporting Colors
46
+ "auxalia-orange": "#dc6b39",
47
+ "auxalia-yellow": "#cfd12d",
48
+ "auxalia-red": "#93383a",
49
+ "auxalia-cyan": "#abbfbd"
50
+ };
51
+ var preset = {
52
+ darkMode: "class",
53
+ theme: {
54
+ extend: {
55
+ fontFamily: {
56
+ display: ['"Weissenhof Grotesk"', '"Calibri"', "sans-serif"],
57
+ body: ['"Weissenhof Grotesk"', '"Calibri"', "sans-serif"]
58
+ },
59
+ colors: {
60
+ // Primary using Auxalia Green — RGB channels enable Tailwind opacity modifiers (e.g. bg-primary/20)
61
+ primary: "rgb(var(--color-primary) / <alpha-value>)",
62
+ "primary-foreground": "var(--color-primary-foreground)",
63
+ "primary-hover": "var(--color-primary-hover)",
64
+ // Secondary using Auxalia Blue
65
+ secondary: "rgb(var(--color-secondary) / <alpha-value>)",
66
+ "secondary-foreground": "var(--color-secondary-foreground)",
67
+ "secondary-hover": "var(--color-secondary-hover)",
68
+ // Accent using Auxalia Petrol
69
+ accent: "rgb(var(--color-accent) / <alpha-value>)",
70
+ "accent-foreground": "var(--color-accent-foreground)",
71
+ surface: "var(--color-surface)",
72
+ "surface-hover": "var(--color-surface-hover)",
73
+ "surface-foreground": "var(--color-surface-foreground)",
74
+ destructive: "rgb(var(--color-destructive) / <alpha-value>)",
75
+ "destructive-hover": "var(--color-destructive-hover)",
76
+ "destructive-foreground": "var(--color-destructive-foreground)",
77
+ // Auxalia specific colors for direct use
78
+ "auxalia-green": auxaliaColors["auxalia-green"],
79
+ "auxalia-blue": auxaliaColors["auxalia-blue"],
80
+ "auxalia-petrol": auxaliaColors["auxalia-petrol"]
81
+ },
82
+ textColor: {
83
+ primary: "var(--color-text)",
84
+ secondary: "var(--color-text-secondary)",
85
+ muted: "var(--color-text-muted)"
86
+ },
87
+ backgroundColor: {
88
+ hero: "var(--color-bg-hero)",
89
+ card: "var(--surface-card)",
90
+ cardHover: "var(--surface-card-hover)"
91
+ },
92
+ backgroundImage: {
93
+ "gradient-radial-green": "radial-gradient(circle at 20% 20%, rgba(167, 213, 0, 0.15), transparent 35%)",
94
+ "gradient-radial-blue": "radial-gradient(circle at 80% 0%, rgba(62, 104, 151, 0.1), transparent 40%)",
95
+ "gradient-glow": "linear-gradient(to bottom right, rgba(6, 182, 212, 0.1), transparent, rgba(255, 255, 255, 0.05))"
96
+ }
97
+ }
98
+ }
99
+ };
100
+ preset.safelist = [
101
+ // ─── Button: filled (default) ──────────────────────────────────────────────
102
+ "bg-primary",
103
+ "bg-secondary",
104
+ "bg-accent",
105
+ "bg-destructive",
106
+ "text-primary-foreground",
107
+ "text-secondary-foreground",
108
+ "text-accent-foreground",
109
+ "text-destructive-foreground",
110
+ "hover:bg-primary-hover",
111
+ "hover:bg-secondary-hover",
112
+ "hover:bg-destructive-hover",
113
+ "shadow-sm",
114
+ // ─── Button: outline ───────────────────────────────────────────────────────
115
+ "border-2",
116
+ "border-primary",
117
+ "border-secondary",
118
+ "border-accent",
119
+ "border-destructive",
120
+ "text-primary",
121
+ "text-secondary",
122
+ "text-accent",
123
+ "text-destructive",
124
+ "hover:bg-primary",
125
+ "hover:bg-secondary",
126
+ "hover:bg-accent",
127
+ "hover:bg-destructive",
128
+ "hover:text-primary-foreground",
129
+ "hover:text-secondary-foreground",
130
+ "hover:text-accent-foreground",
131
+ "hover:text-destructive-foreground",
132
+ "dark:border-primary",
133
+ "dark:text-primary",
134
+ // ─── Button: ghost ─────────────────────────────────────────────────────────
135
+ "hover:bg-primary/10",
136
+ "dark:hover:bg-primary/20",
137
+ "hover:bg-secondary/10",
138
+ "hover:bg-accent/10",
139
+ "hover:bg-destructive/10",
140
+ // ─── Button: link ──────────────────────────────────────────────────────────
141
+ "underline",
142
+ "hover:text-primary-hover",
143
+ "hover:text-secondary-hover",
144
+ // ─── Card: border opacity ──────────────────────────────────────────────────
145
+ "border-primary/10",
146
+ "border-primary/20",
147
+ "border-primary/30",
148
+ "border-primary/40",
149
+ "border-primary/50",
150
+ "hover:border-primary/20",
151
+ "hover:border-primary/50",
152
+ "dark:border-primary/20",
153
+ "dark:border-primary/40",
154
+ "border-accent/10",
155
+ // ─── Card: background opacity ──────────────────────────────────────────────
156
+ "bg-primary/10",
157
+ "bg-primary/20",
158
+ "hover:shadow-md",
159
+ "hover:shadow-xl"
160
+ ];
161
+ var tailwind_preset_default = preset;
162
+
163
+ export {
164
+ tailwind_preset_default
165
+ };