@ataraui/ataraui-react 0.2.0 → 0.3.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 +148 -17
- package/dist/index.d.mts +51 -1
- package/dist/index.d.ts +51 -1
- package/dist/index.js +256 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +252 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,23 +47,73 @@ Add the source and theme tokens to your `globals.css`:
|
|
|
47
47
|
## Usage
|
|
48
48
|
|
|
49
49
|
```tsx
|
|
50
|
-
import {
|
|
50
|
+
import {
|
|
51
|
+
Button,
|
|
52
|
+
Input,
|
|
53
|
+
Badge,
|
|
54
|
+
Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter,
|
|
55
|
+
Avatar,
|
|
56
|
+
Separator,
|
|
57
|
+
Spinner,
|
|
58
|
+
Select,
|
|
59
|
+
Checkbox,
|
|
60
|
+
RadioGroup,
|
|
61
|
+
Switch,
|
|
62
|
+
} from '@ataraui/ataraui-react'
|
|
51
63
|
|
|
52
64
|
export default function Page() {
|
|
53
65
|
return (
|
|
54
66
|
<div>
|
|
55
67
|
<Badge variant="default">New</Badge>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
68
|
+
|
|
69
|
+
<Input label="Email" placeholder="you@example.com" hint="We will never spam you." />
|
|
70
|
+
|
|
71
|
+
<Button variant="primary" size="md">Ship it</Button>
|
|
72
|
+
<Button variant="outline" isLoading>Loading...</Button>
|
|
73
|
+
|
|
74
|
+
<Card variant="elevated">
|
|
75
|
+
<CardHeader>
|
|
76
|
+
<CardTitle>Card Title</CardTitle>
|
|
77
|
+
<CardDescription>Card description here.</CardDescription>
|
|
78
|
+
</CardHeader>
|
|
79
|
+
<CardContent>Content goes here.</CardContent>
|
|
80
|
+
<CardFooter>
|
|
81
|
+
<Button variant="primary" size="sm">Confirm</Button>
|
|
82
|
+
<Button variant="ghost" size="sm">Cancel</Button>
|
|
83
|
+
</CardFooter>
|
|
84
|
+
</Card>
|
|
85
|
+
|
|
86
|
+
<Avatar src="https://github.com/ryo.png" alt="Ryo" size="md" />
|
|
87
|
+
<Avatar fallback="Ryo Kurniawan" size="md" />
|
|
88
|
+
|
|
89
|
+
<Separator />
|
|
90
|
+
<Separator label="OR" />
|
|
91
|
+
|
|
92
|
+
<Spinner size="md" />
|
|
93
|
+
<Spinner size="md" label="Loading data..." />
|
|
94
|
+
|
|
95
|
+
<Select
|
|
96
|
+
label="Country"
|
|
97
|
+
placeholder="Select a country..."
|
|
98
|
+
options={[
|
|
99
|
+
{ value: 'id', label: 'Indonesia' },
|
|
100
|
+
{ value: 'sg', label: 'Singapore' },
|
|
101
|
+
]}
|
|
60
102
|
/>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
103
|
+
|
|
104
|
+
<Checkbox label="Accept terms" />
|
|
105
|
+
<Checkbox label="Remember me" description="Stay logged in for 30 days." />
|
|
106
|
+
|
|
107
|
+
<RadioGroup
|
|
108
|
+
name="plan"
|
|
109
|
+
label="Billing Plan"
|
|
110
|
+
options={[
|
|
111
|
+
{ value: 'monthly', label: 'Monthly' },
|
|
112
|
+
{ value: 'yearly', label: 'Yearly' },
|
|
113
|
+
]}
|
|
114
|
+
/>
|
|
115
|
+
|
|
116
|
+
<Switch label="Notifications" description="Receive email notifications." />
|
|
67
117
|
</div>
|
|
68
118
|
)
|
|
69
119
|
}
|
|
@@ -73,9 +123,17 @@ export default function Page() {
|
|
|
73
123
|
|
|
74
124
|
| Component | Variants | Status |
|
|
75
125
|
|-----------|----------|--------|
|
|
76
|
-
| `Button`
|
|
77
|
-
| `Input`
|
|
78
|
-
| `Badge`
|
|
126
|
+
| `Button` | `primary` `secondary` `outline` `ghost` `destructive` | ✅ Ready |
|
|
127
|
+
| `Input` | `default` `error` | ✅ Ready |
|
|
128
|
+
| `Badge` | `default` `secondary` `outline` `success` `warning` `destructive` | ✅ Ready |
|
|
129
|
+
| `Card` | `elevated` `outlined` `ghost` | ✅ Ready |
|
|
130
|
+
| `Avatar` | — | ✅ Ready |
|
|
131
|
+
| `Separator` | `horizontal` `vertical` | ✅ Ready |
|
|
132
|
+
| `Spinner` | — | ✅ Ready |
|
|
133
|
+
| `Select` | `default` `error` | ✅ Ready |
|
|
134
|
+
| `Checkbox` | — | ✅ Ready |
|
|
135
|
+
| `RadioGroup` | `vertical` `horizontal` | ✅ Ready |
|
|
136
|
+
| `Switch` | — | ✅ Ready |
|
|
79
137
|
|
|
80
138
|
## Button Props
|
|
81
139
|
|
|
@@ -94,6 +152,79 @@ export default function Page() {
|
|
|
94
152
|
| `hint` | `string` | Helper text displayed below the input |
|
|
95
153
|
| `inputSize` | `sm` \| `md` \| `lg` | Input height size |
|
|
96
154
|
|
|
155
|
+
## Card Props
|
|
156
|
+
|
|
157
|
+
| Prop | Type | Default | Description |
|
|
158
|
+
|------|------|---------|-------------|
|
|
159
|
+
| `variant` | `elevated` \| `outlined` \| `ghost` | `elevated` | Visual style |
|
|
160
|
+
| `padding` | `none` \| `sm` \| `md` \| `lg` | `md` | Inner padding |
|
|
161
|
+
|
|
162
|
+
## Avatar Props
|
|
163
|
+
|
|
164
|
+
| Prop | Type | Default | Description |
|
|
165
|
+
|------|------|---------|-------------|
|
|
166
|
+
| `src` | `string` | — | Image URL |
|
|
167
|
+
| `alt` | `string` | — | Image alt text |
|
|
168
|
+
| `fallback` | `string` | — | Name for initials fallback |
|
|
169
|
+
| `size` | `xs` \| `sm` \| `md` \| `lg` \| `xl` | `md` | Avatar size |
|
|
170
|
+
|
|
171
|
+
## Separator Props
|
|
172
|
+
|
|
173
|
+
| Prop | Type | Default | Description |
|
|
174
|
+
|------|------|---------|-------------|
|
|
175
|
+
| `orientation` | `horizontal` \| `vertical` | `horizontal` | Direction |
|
|
176
|
+
| `label` | `string` | — | Text label in the middle |
|
|
177
|
+
|
|
178
|
+
## Spinner Props
|
|
179
|
+
|
|
180
|
+
| Prop | Type | Default | Description |
|
|
181
|
+
|------|------|---------|-------------|
|
|
182
|
+
| `size` | `xs` \| `sm` \| `md` \| `lg` \| `xl` | `md` | Spinner size |
|
|
183
|
+
| `label` | `string` | — | Text label below spinner |
|
|
184
|
+
|
|
185
|
+
## Select Props
|
|
186
|
+
|
|
187
|
+
| Prop | Type | Description |
|
|
188
|
+
|------|------|-------------|
|
|
189
|
+
| `label` | `string` | Label displayed above the select |
|
|
190
|
+
| `error` | `string` | Error message (also triggers error state) |
|
|
191
|
+
| `hint` | `string` | Helper text displayed below the select |
|
|
192
|
+
| `placeholder` | `string` | Placeholder option text |
|
|
193
|
+
| `options` | `SelectOption[]` | Array of `{ value, label, disabled? }` |
|
|
194
|
+
| `selectSize` | `sm` \| `md` \| `lg` | Select height size |
|
|
195
|
+
|
|
196
|
+
## Checkbox Props
|
|
197
|
+
|
|
198
|
+
| Prop | Type | Description |
|
|
199
|
+
|------|------|-------------|
|
|
200
|
+
| `label` | `string` | Label displayed next to the checkbox |
|
|
201
|
+
| `description` | `string` | Helper text below the label |
|
|
202
|
+
| `error` | `string` | Error message below the checkbox |
|
|
203
|
+
|
|
204
|
+
## RadioGroup Props
|
|
205
|
+
|
|
206
|
+
| Prop | Type | Default | Description |
|
|
207
|
+
|------|------|---------|-------------|
|
|
208
|
+
| `name` | `string` | — | Input group name (required) |
|
|
209
|
+
| `options` | `RadioOption[]` | — | Array of `{ value, label, description?, disabled? }` |
|
|
210
|
+
| `value` | `string` | — | Controlled value |
|
|
211
|
+
| `onChange` | `(value: string) => void` | — | Change handler |
|
|
212
|
+
| `label` | `string` | — | Group label |
|
|
213
|
+
| `orientation` | `vertical` \| `horizontal` | `vertical` | Layout direction |
|
|
214
|
+
| `error` | `string` | — | Error message |
|
|
215
|
+
| `hint` | `string` | — | Helper text |
|
|
216
|
+
|
|
217
|
+
## Switch Props
|
|
218
|
+
|
|
219
|
+
| Prop | Type | Description |
|
|
220
|
+
|------|------|-------------|
|
|
221
|
+
| `label` | `string` | Label displayed next to the switch |
|
|
222
|
+
| `description` | `string` | Helper text below the label |
|
|
223
|
+
| `error` | `string` | Error message below the switch |
|
|
224
|
+
| `checked` | `boolean` | Controlled checked state |
|
|
225
|
+
| `defaultChecked` | `boolean` | Default checked state (uncontrolled) |
|
|
226
|
+
| `onChange` | `ChangeEventHandler` | Change handler |
|
|
227
|
+
|
|
97
228
|
## Development
|
|
98
229
|
|
|
99
230
|
```bash
|
|
@@ -124,12 +255,12 @@ npm publish
|
|
|
124
255
|
| Version | Components | Category |
|
|
125
256
|
|---------|-----------|----------|
|
|
126
257
|
| **v0.1.0** ✅ | `Button` `Input` `Badge` | Core + Tailwind v4 |
|
|
127
|
-
| **v0.2.0** | `Card` `Avatar` `Separator` `Spinner` | Layout primitives |
|
|
128
|
-
| **v0.3.0** | `Select` `Checkbox` `Radio` `Switch` | Form components |
|
|
258
|
+
| **v0.2.0** ✅ | `Card` `Avatar` `Separator` `Spinner` | Layout primitives |
|
|
259
|
+
| **v0.3.0** ✅ | `Select` `Checkbox` `Radio` `Switch` | Form components |
|
|
129
260
|
| **v0.4.0** | `Modal/Dialog` `Drawer` `Tooltip` `Popover` | Overlay components |
|
|
130
261
|
| **v0.5.0** | `Toast/Alert` `Progress` `Skeleton` | Feedback components |
|
|
131
262
|
| **v0.6.0** | `Table` `Tabs` `Accordion` | Data display |
|
|
132
|
-
| **v0.7.0** | Dark mode
|
|
263
|
+
| **v0.7.0** | Dark mode · Storybook docs | DX improvements |
|
|
133
264
|
| **v0.8.0** | `Navbar` `Sidebar` `Breadcrumb` | Navigation |
|
|
134
265
|
| **v0.9.0** | `DatePicker` `Combobox` `FileUpload` | Advanced inputs |
|
|
135
266
|
| **v1.0.0** 🎯 | API stable · Full docs · A11y tested · ataraui.com live | Stable release |
|
package/dist/index.d.mts
CHANGED
|
@@ -140,4 +140,54 @@ interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement>, VariantPro
|
|
|
140
140
|
}
|
|
141
141
|
declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
declare const selectVariants: (props?: ({
|
|
144
|
+
state?: "default" | "error" | null | undefined;
|
|
145
|
+
selectSize?: "sm" | "md" | "lg" | null | undefined;
|
|
146
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
147
|
+
interface SelectOption {
|
|
148
|
+
value: string;
|
|
149
|
+
label: string;
|
|
150
|
+
disabled?: boolean;
|
|
151
|
+
}
|
|
152
|
+
interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'>, VariantProps<typeof selectVariants> {
|
|
153
|
+
label?: string;
|
|
154
|
+
error?: string;
|
|
155
|
+
hint?: string;
|
|
156
|
+
placeholder?: string;
|
|
157
|
+
options?: SelectOption[];
|
|
158
|
+
}
|
|
159
|
+
declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
|
|
160
|
+
|
|
161
|
+
interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
162
|
+
label?: string;
|
|
163
|
+
description?: string;
|
|
164
|
+
error?: string;
|
|
165
|
+
}
|
|
166
|
+
declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
167
|
+
|
|
168
|
+
interface RadioOption {
|
|
169
|
+
value: string;
|
|
170
|
+
label: string;
|
|
171
|
+
description?: string;
|
|
172
|
+
disabled?: boolean;
|
|
173
|
+
}
|
|
174
|
+
interface RadioGroupProps {
|
|
175
|
+
options: RadioOption[];
|
|
176
|
+
value?: string;
|
|
177
|
+
onChange?: (value: string) => void;
|
|
178
|
+
name: string;
|
|
179
|
+
label?: string;
|
|
180
|
+
error?: string;
|
|
181
|
+
hint?: string;
|
|
182
|
+
orientation?: "vertical" | "horizontal";
|
|
183
|
+
}
|
|
184
|
+
declare const RadioGroup: React.FC<RadioGroupProps>;
|
|
185
|
+
|
|
186
|
+
interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
|
|
187
|
+
label?: string;
|
|
188
|
+
description?: string;
|
|
189
|
+
error?: string;
|
|
190
|
+
}
|
|
191
|
+
declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLInputElement>>;
|
|
192
|
+
|
|
193
|
+
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, Input, type InputProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Separator, type SeparatorProps, Spinner, type SpinnerProps, Switch, type SwitchProps, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, fontSize, inputVariants, radius, selectVariants, separatorVariants, spinnerVariants };
|
package/dist/index.d.ts
CHANGED
|
@@ -140,4 +140,54 @@ interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement>, VariantPro
|
|
|
140
140
|
}
|
|
141
141
|
declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
declare const selectVariants: (props?: ({
|
|
144
|
+
state?: "default" | "error" | null | undefined;
|
|
145
|
+
selectSize?: "sm" | "md" | "lg" | null | undefined;
|
|
146
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
147
|
+
interface SelectOption {
|
|
148
|
+
value: string;
|
|
149
|
+
label: string;
|
|
150
|
+
disabled?: boolean;
|
|
151
|
+
}
|
|
152
|
+
interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'>, VariantProps<typeof selectVariants> {
|
|
153
|
+
label?: string;
|
|
154
|
+
error?: string;
|
|
155
|
+
hint?: string;
|
|
156
|
+
placeholder?: string;
|
|
157
|
+
options?: SelectOption[];
|
|
158
|
+
}
|
|
159
|
+
declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
|
|
160
|
+
|
|
161
|
+
interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
162
|
+
label?: string;
|
|
163
|
+
description?: string;
|
|
164
|
+
error?: string;
|
|
165
|
+
}
|
|
166
|
+
declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
167
|
+
|
|
168
|
+
interface RadioOption {
|
|
169
|
+
value: string;
|
|
170
|
+
label: string;
|
|
171
|
+
description?: string;
|
|
172
|
+
disabled?: boolean;
|
|
173
|
+
}
|
|
174
|
+
interface RadioGroupProps {
|
|
175
|
+
options: RadioOption[];
|
|
176
|
+
value?: string;
|
|
177
|
+
onChange?: (value: string) => void;
|
|
178
|
+
name: string;
|
|
179
|
+
label?: string;
|
|
180
|
+
error?: string;
|
|
181
|
+
hint?: string;
|
|
182
|
+
orientation?: "vertical" | "horizontal";
|
|
183
|
+
}
|
|
184
|
+
declare const RadioGroup: React.FC<RadioGroupProps>;
|
|
185
|
+
|
|
186
|
+
interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
|
|
187
|
+
label?: string;
|
|
188
|
+
description?: string;
|
|
189
|
+
error?: string;
|
|
190
|
+
}
|
|
191
|
+
declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLInputElement>>;
|
|
192
|
+
|
|
193
|
+
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, Input, type InputProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Separator, type SeparatorProps, Spinner, type SpinnerProps, Switch, type SwitchProps, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, fontSize, inputVariants, radius, selectVariants, separatorVariants, spinnerVariants };
|
package/dist/index.js
CHANGED
|
@@ -341,6 +341,257 @@ var Spinner = React3__default.default.forwardRef(
|
|
|
341
341
|
] })
|
|
342
342
|
);
|
|
343
343
|
Spinner.displayName = "Spinner";
|
|
344
|
+
var selectVariants = classVarianceAuthority.cva(
|
|
345
|
+
"w-full appearance-none bg-white border rounded-(--radius-md) px-3 py-2 text-sm transition-colors cursor-pointer focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)",
|
|
346
|
+
{
|
|
347
|
+
variants: {
|
|
348
|
+
state: {
|
|
349
|
+
default: "border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20",
|
|
350
|
+
error: "border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20"
|
|
351
|
+
},
|
|
352
|
+
selectSize: {
|
|
353
|
+
sm: "h-8 text-xs pr-8",
|
|
354
|
+
md: "h-10 text-sm pr-8",
|
|
355
|
+
lg: "h-12 text-base pr-10"
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
defaultVariants: {
|
|
359
|
+
state: "default",
|
|
360
|
+
selectSize: "md"
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
);
|
|
364
|
+
var Select = React3__default.default.forwardRef(
|
|
365
|
+
({ className, label, error, hint, placeholder, options, selectSize, id, children, ...props }, ref) => {
|
|
366
|
+
const selectId = id != null ? id : label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-");
|
|
367
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5 w-full", children: [
|
|
368
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: selectId, className: "text-sm font-medium text-(--color-neutral-700)", children: label }),
|
|
369
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
370
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
371
|
+
"select",
|
|
372
|
+
{
|
|
373
|
+
ref,
|
|
374
|
+
id: selectId,
|
|
375
|
+
className: cn(selectVariants({ state: error ? "error" : "default", selectSize }), className),
|
|
376
|
+
...props,
|
|
377
|
+
children: [
|
|
378
|
+
placeholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, children: placeholder }),
|
|
379
|
+
options ? options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value)) : children
|
|
380
|
+
]
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
384
|
+
"svg",
|
|
385
|
+
{
|
|
386
|
+
className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-(--color-neutral-400)",
|
|
387
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
388
|
+
viewBox: "0 0 24 24",
|
|
389
|
+
fill: "none",
|
|
390
|
+
stroke: "currentColor",
|
|
391
|
+
strokeWidth: "2",
|
|
392
|
+
strokeLinecap: "round",
|
|
393
|
+
strokeLinejoin: "round",
|
|
394
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 9 6 6 6-6" })
|
|
395
|
+
}
|
|
396
|
+
)
|
|
397
|
+
] }),
|
|
398
|
+
hint && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-neutral-500)", children: hint }),
|
|
399
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-danger-500)", children: error })
|
|
400
|
+
] });
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
Select.displayName = "Select";
|
|
404
|
+
var Checkbox = React3__default.default.forwardRef(
|
|
405
|
+
({ className, label, description, error, id, disabled, ...props }, ref) => {
|
|
406
|
+
const checkboxId = id != null ? id : label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-");
|
|
407
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
408
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2.5", children: [
|
|
409
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
410
|
+
"input",
|
|
411
|
+
{
|
|
412
|
+
ref,
|
|
413
|
+
type: "checkbox",
|
|
414
|
+
id: checkboxId,
|
|
415
|
+
disabled,
|
|
416
|
+
className: cn(
|
|
417
|
+
"h-4 w-4 shrink-0 mt-0.5 rounded-(--radius-sm) border cursor-pointer transition-colors appearance-none",
|
|
418
|
+
"border-(--color-neutral-300) bg-white",
|
|
419
|
+
"checked:bg-(--color-primary-500) checked:border-(--color-primary-500)",
|
|
420
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20",
|
|
421
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
422
|
+
error && "border-(--color-danger-500)",
|
|
423
|
+
className
|
|
424
|
+
),
|
|
425
|
+
style: {
|
|
426
|
+
backgroundImage: `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`,
|
|
427
|
+
backgroundRepeat: "no-repeat",
|
|
428
|
+
backgroundPosition: "center"
|
|
429
|
+
},
|
|
430
|
+
...props
|
|
431
|
+
}
|
|
432
|
+
),
|
|
433
|
+
(label || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
434
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
435
|
+
"label",
|
|
436
|
+
{
|
|
437
|
+
htmlFor: checkboxId,
|
|
438
|
+
className: cn(
|
|
439
|
+
"text-sm font-medium cursor-pointer text-(--color-neutral-900)",
|
|
440
|
+
disabled && "cursor-not-allowed opacity-50"
|
|
441
|
+
),
|
|
442
|
+
children: label
|
|
443
|
+
}
|
|
444
|
+
),
|
|
445
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-neutral-500)", children: description })
|
|
446
|
+
] })
|
|
447
|
+
] }),
|
|
448
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-danger-500) ml-6", children: error })
|
|
449
|
+
] });
|
|
450
|
+
}
|
|
451
|
+
);
|
|
452
|
+
Checkbox.displayName = "Checkbox";
|
|
453
|
+
var RadioGroup = ({
|
|
454
|
+
options,
|
|
455
|
+
value,
|
|
456
|
+
onChange,
|
|
457
|
+
name,
|
|
458
|
+
label,
|
|
459
|
+
error,
|
|
460
|
+
hint,
|
|
461
|
+
orientation = "vertical"
|
|
462
|
+
}) => {
|
|
463
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
464
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-(--color-neutral-700)", children: label }),
|
|
465
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
466
|
+
"div",
|
|
467
|
+
{
|
|
468
|
+
className: cn(
|
|
469
|
+
"flex gap-3",
|
|
470
|
+
orientation === "vertical" ? "flex-col" : "flex-row flex-wrap"
|
|
471
|
+
),
|
|
472
|
+
children: options.map((option) => {
|
|
473
|
+
const optionId = `${name}-${option.value}`;
|
|
474
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2.5", children: [
|
|
475
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
476
|
+
"input",
|
|
477
|
+
{
|
|
478
|
+
type: "radio",
|
|
479
|
+
id: optionId,
|
|
480
|
+
name,
|
|
481
|
+
value: option.value,
|
|
482
|
+
checked: value === option.value,
|
|
483
|
+
disabled: option.disabled,
|
|
484
|
+
onChange: () => onChange == null ? void 0 : onChange(option.value),
|
|
485
|
+
className: cn(
|
|
486
|
+
"h-4 w-4 shrink-0 mt-0.5 cursor-pointer appearance-none rounded-full border-2 transition-colors",
|
|
487
|
+
"border-(--color-neutral-300) bg-white",
|
|
488
|
+
"checked:border-(--color-primary-500) checked:bg-(--color-primary-500)",
|
|
489
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20",
|
|
490
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
491
|
+
error && "border-(--color-danger-500)"
|
|
492
|
+
),
|
|
493
|
+
style: {
|
|
494
|
+
backgroundImage: value === option.value ? `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")` : "none",
|
|
495
|
+
backgroundRepeat: "no-repeat",
|
|
496
|
+
backgroundPosition: "center"
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
),
|
|
500
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
501
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
502
|
+
"label",
|
|
503
|
+
{
|
|
504
|
+
htmlFor: optionId,
|
|
505
|
+
className: cn(
|
|
506
|
+
"text-sm font-medium cursor-pointer text-(--color-neutral-900)",
|
|
507
|
+
option.disabled && "cursor-not-allowed opacity-50"
|
|
508
|
+
),
|
|
509
|
+
children: option.label
|
|
510
|
+
}
|
|
511
|
+
),
|
|
512
|
+
option.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-neutral-500)", children: option.description })
|
|
513
|
+
] })
|
|
514
|
+
] }, option.value);
|
|
515
|
+
})
|
|
516
|
+
}
|
|
517
|
+
),
|
|
518
|
+
hint && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-neutral-500)", children: hint }),
|
|
519
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-danger-500)", children: error })
|
|
520
|
+
] });
|
|
521
|
+
};
|
|
522
|
+
RadioGroup.displayName = "RadioGroup";
|
|
523
|
+
var Switch = React3__default.default.forwardRef(
|
|
524
|
+
({ className, label, description, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {
|
|
525
|
+
const switchId = id != null ? id : `switch-${Math.random().toString(36).slice(2, 9)}`;
|
|
526
|
+
const [internalChecked, setInternalChecked] = React3__default.default.useState(
|
|
527
|
+
defaultChecked != null ? defaultChecked : false
|
|
528
|
+
);
|
|
529
|
+
const isControlled = checked !== void 0;
|
|
530
|
+
const isChecked = isControlled ? checked : internalChecked;
|
|
531
|
+
const handleChange = (e) => {
|
|
532
|
+
if (!isControlled) setInternalChecked(e.target.checked);
|
|
533
|
+
onChange == null ? void 0 : onChange(e);
|
|
534
|
+
};
|
|
535
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
536
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
537
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative inline-flex shrink-0 mt-0.5", children: [
|
|
538
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
539
|
+
"input",
|
|
540
|
+
{
|
|
541
|
+
ref,
|
|
542
|
+
type: "checkbox",
|
|
543
|
+
role: "switch",
|
|
544
|
+
id: switchId,
|
|
545
|
+
disabled,
|
|
546
|
+
checked: isChecked,
|
|
547
|
+
onChange: handleChange,
|
|
548
|
+
className: "sr-only peer",
|
|
549
|
+
...props
|
|
550
|
+
}
|
|
551
|
+
),
|
|
552
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
553
|
+
"label",
|
|
554
|
+
{
|
|
555
|
+
htmlFor: switchId,
|
|
556
|
+
className: cn(
|
|
557
|
+
"relative flex h-5 w-9 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors",
|
|
558
|
+
"bg-(--color-neutral-200) peer-checked:bg-(--color-primary-500)",
|
|
559
|
+
"peer-focus-visible:ring-2 peer-focus-visible:ring-(--color-primary-500)/20",
|
|
560
|
+
"peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
561
|
+
error && "ring-2 ring-(--color-danger-500)/20",
|
|
562
|
+
className
|
|
563
|
+
),
|
|
564
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
565
|
+
"span",
|
|
566
|
+
{
|
|
567
|
+
className: "pointer-events-none block h-3.5 w-3.5 rounded-full bg-white shadow transition-transform",
|
|
568
|
+
style: {
|
|
569
|
+
transform: isChecked ? "translateX(18px)" : "translateX(2px)"
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
)
|
|
573
|
+
}
|
|
574
|
+
)
|
|
575
|
+
] }),
|
|
576
|
+
(label || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
577
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
578
|
+
"span",
|
|
579
|
+
{
|
|
580
|
+
className: cn(
|
|
581
|
+
"text-sm font-medium text-(--color-neutral-900)",
|
|
582
|
+
disabled && "opacity-50"
|
|
583
|
+
),
|
|
584
|
+
children: label
|
|
585
|
+
}
|
|
586
|
+
),
|
|
587
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-neutral-500)", children: description })
|
|
588
|
+
] })
|
|
589
|
+
] }),
|
|
590
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-(--color-danger-500) ml-12", children: error })
|
|
591
|
+
] });
|
|
592
|
+
}
|
|
593
|
+
);
|
|
594
|
+
Switch.displayName = "Switch";
|
|
344
595
|
|
|
345
596
|
exports.Avatar = Avatar;
|
|
346
597
|
exports.Badge = Badge;
|
|
@@ -351,9 +602,13 @@ exports.CardDescription = CardDescription;
|
|
|
351
602
|
exports.CardFooter = CardFooter;
|
|
352
603
|
exports.CardHeader = CardHeader;
|
|
353
604
|
exports.CardTitle = CardTitle;
|
|
605
|
+
exports.Checkbox = Checkbox;
|
|
354
606
|
exports.Input = Input;
|
|
607
|
+
exports.RadioGroup = RadioGroup;
|
|
608
|
+
exports.Select = Select;
|
|
355
609
|
exports.Separator = Separator;
|
|
356
610
|
exports.Spinner = Spinner;
|
|
611
|
+
exports.Switch = Switch;
|
|
357
612
|
exports.avatarVariants = avatarVariants;
|
|
358
613
|
exports.badgeVariants = badgeVariants;
|
|
359
614
|
exports.buttonVariants = buttonVariants;
|
|
@@ -363,6 +618,7 @@ exports.colors = colors;
|
|
|
363
618
|
exports.fontSize = fontSize;
|
|
364
619
|
exports.inputVariants = inputVariants;
|
|
365
620
|
exports.radius = radius;
|
|
621
|
+
exports.selectVariants = selectVariants;
|
|
366
622
|
exports.separatorVariants = separatorVariants;
|
|
367
623
|
exports.spinnerVariants = spinnerVariants;
|
|
368
624
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/tokens/index.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Separator/Separator.tsx","../src/components/Spinner/Spinner.tsx"],"names":["twMerge","clsx","cva","React","jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","export const colors = {\n primary: {\n 50: '#FFF4EE',\n 100: '#FFE0CC',\n 200: '#FFBF99',\n 300: '#F08050',\n 400: '#D4602A',\n 500: '#C2440A',\n 600: '#A03808',\n 700: '#8F2F06',\n 800: '#5C1C03',\n 900: '#2E0D01',\n },\n neutral: {\n 50: '#f9f7f5',\n 100: '#f0ece7',\n 200: '#ddd6cc',\n 300: '#c5bab0',\n 400: '#a89b8e',\n 500: '#8a7d72',\n 600: '#6f6358',\n 700: '#564d45',\n 800: '#3c3630',\n 900: '#252019',\n },\n danger: {\n 500: '#ef4444',\n 600: '#dc2626',\n },\n success: {\n 500: '#22c55e',\n 600: '#16a34a',\n },\n warning: {\n 500: '#f59e0b',\n 600: '#d97706',\n },\n} as const\n\nexport const radius = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl':'1rem',\n full: '9999px',\n} as const\n\nexport const fontSize = {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n} as const","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary: 'bg-(--color-primary-500) text-white hover:bg-(--color-primary-600) focus-visible:ring-(--color-primary-500)',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-900) hover:bg-(--color-neutral-200)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500) bg-transparent hover:bg-(--color-primary-50)',\n ghost: 'text-(--color-neutral-700) hover:bg-(--color-neutral-100)',\n destructive: 'bg-(--color-danger-500) text-white hover:bg-(--color-danger-600)',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-(--radius-md) gap-1.5',\n md: 'h-10 px-4 text-sm rounded-(--radius-md) gap-2',\n lg: 'h-12 px-6 text-base rounded-(--radius-lg) gap-2',\n icon: 'h-10 w-10 rounded-(--radius-md)',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n isLoading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, isLoading, children, disabled, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8z\" />\n </svg>\n )}\n {children}\n </button>\n )\n)\nButton.displayName = 'Button'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const inputVariants = cva(\n 'w-full px-3 py-2 text-sm bg-white border rounded-(--radius-md) transition-colors placeholder:text-(--color-neutral-400) focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n inputSize: {\n sm: 'h-8 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n hint?: string\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, hint, id, inputSize, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(inputVariants({ state: error ? 'error' : 'default', inputSize }), className)}\n {...props}\n />\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nInput.displayName = 'Input'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center rounded-full font-medium',\n {\n variants: {\n variant: {\n default: 'bg-(--color-primary-500) text-white',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-700)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500)',\n success: 'bg-(--color-success-500)/10 text-(--color-success-600)',\n warning: 'bg-(--color-warning-500)/10 text-(--color-warning-600)',\n destructive: 'bg-(--color-danger-500)/10 text-(--color-danger-600)',\n },\n size: {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = ({ className, variant, size, ...props }: BadgeProps) => (\n <span className={cn(badgeVariants({ variant, size }), className)} {...props} />\n)\nBadge.displayName = 'Badge'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const cardVariants = cva(\n 'rounded-(--radius-lg) bg-white text-(--color-neutral-900)',\n {\n variants: {\n variant: {\n elevated: 'shadow-md',\n outlined: 'border border-(--color-neutral-200)',\n ghost: 'bg-(--color-neutral-50)',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n variant: 'elevated',\n padding: 'md',\n },\n }\n)\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, padding, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, padding }), className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\n// ─── Sub-components ───────────────────────────────────────\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold text-(--color-neutral-900)', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-(--color-neutral-500)', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-(--color-neutral-700)', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 mt-4', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const avatarVariants = cva(\n 'relative inline-flex items-center justify-center shrink-0 overflow-hidden rounded-full bg-(--color-neutral-200)',\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n src?: string\n alt?: string\n fallback?: string\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, src, alt, fallback, ...props }, ref) => {\n const [imgError, setImgError] = React.useState(false)\n\n const initials = fallback\n ?.split(' ')\n .map((word) => word[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n\n return (\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n >\n {src && !imgError ? (\n <img\n src={src}\n alt={alt ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n />\n ) : initials ? (\n <span className=\"font-medium text-(--color-neutral-700) select-none\">\n {initials}\n </span>\n ) : (\n <svg\n className=\"h-[60%] w-[60%] text-(--color-neutral-400)\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const separatorVariants = cva(\n 'shrink-0 bg-(--color-neutral-200)',\n {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n)\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n label?: string\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ className, orientation, label, ...props }, ref) => {\n if (label && orientation !== 'vertical') {\n return (\n <div ref={ref} className={cn('flex items-center gap-3', className)} {...props}>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n <span className=\"text-xs text-(--color-neutral-400) font-medium select-none\">\n {label}\n </span>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation ?? 'horizontal'}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = 'Separator'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const spinnerVariants = cva(\n 'animate-spin rounded-full border-2 border-(--color-neutral-200) border-t-(--color-primary-500)',\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof spinnerVariants> {\n label?: string\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label, ...props }, ref) => (\n <span ref={ref} role=\"status\" className={cn('inline-flex flex-col items-center gap-2', className)} {...props}>\n <span className={cn(spinnerVariants({ size }))} />\n {label && (\n <span className=\"text-sm text-(--color-neutral-500)\">{label}</span>\n )}\n <span className=\"sr-only\">{label ?? 'Loading...'}</span>\n </span>\n )\n)\nSpinner.displayName = 'Spinner'"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/tokens/index.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Separator/Separator.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Select/Select.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.tsx"],"names":["twMerge","clsx","cva","React","jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","export const colors = {\n primary: {\n 50: '#FFF4EE',\n 100: '#FFE0CC',\n 200: '#FFBF99',\n 300: '#F08050',\n 400: '#D4602A',\n 500: '#C2440A',\n 600: '#A03808',\n 700: '#8F2F06',\n 800: '#5C1C03',\n 900: '#2E0D01',\n },\n neutral: {\n 50: '#f9f7f5',\n 100: '#f0ece7',\n 200: '#ddd6cc',\n 300: '#c5bab0',\n 400: '#a89b8e',\n 500: '#8a7d72',\n 600: '#6f6358',\n 700: '#564d45',\n 800: '#3c3630',\n 900: '#252019',\n },\n danger: {\n 500: '#ef4444',\n 600: '#dc2626',\n },\n success: {\n 500: '#22c55e',\n 600: '#16a34a',\n },\n warning: {\n 500: '#f59e0b',\n 600: '#d97706',\n },\n} as const\n\nexport const radius = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl':'1rem',\n full: '9999px',\n} as const\n\nexport const fontSize = {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n} as const","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary: 'bg-(--color-primary-500) text-white hover:bg-(--color-primary-600) focus-visible:ring-(--color-primary-500)',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-900) hover:bg-(--color-neutral-200)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500) bg-transparent hover:bg-(--color-primary-50)',\n ghost: 'text-(--color-neutral-700) hover:bg-(--color-neutral-100)',\n destructive: 'bg-(--color-danger-500) text-white hover:bg-(--color-danger-600)',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-(--radius-md) gap-1.5',\n md: 'h-10 px-4 text-sm rounded-(--radius-md) gap-2',\n lg: 'h-12 px-6 text-base rounded-(--radius-lg) gap-2',\n icon: 'h-10 w-10 rounded-(--radius-md)',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n isLoading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, isLoading, children, disabled, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8z\" />\n </svg>\n )}\n {children}\n </button>\n )\n)\nButton.displayName = 'Button'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const inputVariants = cva(\n 'w-full px-3 py-2 text-sm bg-white border rounded-(--radius-md) transition-colors placeholder:text-(--color-neutral-400) focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n inputSize: {\n sm: 'h-8 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n hint?: string\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, hint, id, inputSize, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(inputVariants({ state: error ? 'error' : 'default', inputSize }), className)}\n {...props}\n />\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nInput.displayName = 'Input'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center rounded-full font-medium',\n {\n variants: {\n variant: {\n default: 'bg-(--color-primary-500) text-white',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-700)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500)',\n success: 'bg-(--color-success-500)/10 text-(--color-success-600)',\n warning: 'bg-(--color-warning-500)/10 text-(--color-warning-600)',\n destructive: 'bg-(--color-danger-500)/10 text-(--color-danger-600)',\n },\n size: {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = ({ className, variant, size, ...props }: BadgeProps) => (\n <span className={cn(badgeVariants({ variant, size }), className)} {...props} />\n)\nBadge.displayName = 'Badge'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const cardVariants = cva(\n 'rounded-(--radius-lg) bg-white text-(--color-neutral-900)',\n {\n variants: {\n variant: {\n elevated: 'shadow-md',\n outlined: 'border border-(--color-neutral-200)',\n ghost: 'bg-(--color-neutral-50)',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n variant: 'elevated',\n padding: 'md',\n },\n }\n)\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, padding, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, padding }), className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\n// ─── Sub-components ───────────────────────────────────────\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold text-(--color-neutral-900)', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-(--color-neutral-500)', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-(--color-neutral-700)', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 mt-4', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const avatarVariants = cva(\n 'relative inline-flex items-center justify-center shrink-0 overflow-hidden rounded-full bg-(--color-neutral-200)',\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n src?: string\n alt?: string\n fallback?: string\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, src, alt, fallback, ...props }, ref) => {\n const [imgError, setImgError] = React.useState(false)\n\n const initials = fallback\n ?.split(' ')\n .map((word) => word[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n\n return (\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n >\n {src && !imgError ? (\n <img\n src={src}\n alt={alt ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n />\n ) : initials ? (\n <span className=\"font-medium text-(--color-neutral-700) select-none\">\n {initials}\n </span>\n ) : (\n <svg\n className=\"h-[60%] w-[60%] text-(--color-neutral-400)\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const separatorVariants = cva(\n 'shrink-0 bg-(--color-neutral-200)',\n {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n)\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n label?: string\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ className, orientation, label, ...props }, ref) => {\n if (label && orientation !== 'vertical') {\n return (\n <div ref={ref} className={cn('flex items-center gap-3', className)} {...props}>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n <span className=\"text-xs text-(--color-neutral-400) font-medium select-none\">\n {label}\n </span>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation ?? 'horizontal'}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = 'Separator'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const spinnerVariants = cva(\n 'animate-spin rounded-full border-2 border-(--color-neutral-200) border-t-(--color-primary-500)',\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof spinnerVariants> {\n label?: string\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label, ...props }, ref) => (\n <span ref={ref} role=\"status\" className={cn('inline-flex flex-col items-center gap-2', className)} {...props}>\n <span className={cn(spinnerVariants({ size }))} />\n {label && (\n <span className=\"text-sm text-(--color-neutral-500)\">{label}</span>\n )}\n <span className=\"sr-only\">{label ?? 'Loading...'}</span>\n </span>\n )\n)\nSpinner.displayName = 'Spinner'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const selectVariants = cva(\n 'w-full appearance-none bg-white border rounded-(--radius-md) px-3 py-2 text-sm transition-colors cursor-pointer focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n selectSize: {\n sm: 'h-8 text-xs pr-8',\n md: 'h-10 text-sm pr-8',\n lg: 'h-12 text-base pr-10',\n },\n },\n defaultVariants: {\n state: 'default',\n selectSize: 'md',\n },\n }\n)\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'>,\n VariantProps<typeof selectVariants> {\n label?: string\n error?: string\n hint?: string\n placeholder?: string\n options?: SelectOption[]\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, label, error, hint, placeholder, options, selectSize, id, children, ...props }, ref) => {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n ref={ref}\n id={selectId}\n className={cn(selectVariants({ state: error ? 'error' : 'default', selectSize }), className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n <svg\n className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-(--color-neutral-400)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nSelect.displayName = 'Select'","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n description?: string;\n error?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, description, error, id, disabled, ...props }, ref) => {\n const checkboxId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-start gap-2.5\">\n <input\n ref={ref}\n type=\"checkbox\"\n id={checkboxId}\n disabled={disabled}\n className={cn(\n \"h-4 w-4 shrink-0 mt-0.5 rounded-(--radius-sm) border cursor-pointer transition-colors appearance-none\",\n \"border-(--color-neutral-300) bg-white\",\n \"checked:bg-(--color-primary-500) checked:border-(--color-primary-500)\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-(--color-danger-500)\",\n className,\n )}\n style={{\n backgroundImage: `url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label\n htmlFor={checkboxId}\n className={cn(\n \"text-sm font-medium cursor-pointer text-(--color-neutral-900)\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-(--color-neutral-500)\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-(--color-danger-500) ml-6\">{error}</p>\n )}\n </div>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n options: RadioOption[];\n value?: string;\n onChange?: (value: string) => void;\n name: string;\n label?: string;\n error?: string;\n hint?: string;\n orientation?: \"vertical\" | \"horizontal\";\n}\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n options,\n value,\n onChange,\n name,\n label,\n error,\n hint,\n orientation = \"vertical\",\n}) => {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <span className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </span>\n )}\n <div\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n )}\n >\n {options.map((option) => {\n const optionId = `${name}-${option.value}`;\n return (\n <div key={option.value} className=\"flex items-start gap-2.5\">\n <input\n type=\"radio\"\n id={optionId}\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={option.disabled}\n onChange={() => onChange?.(option.value)}\n className={cn(\n \"h-4 w-4 shrink-0 mt-0.5 cursor-pointer appearance-none rounded-full border-2 transition-colors\",\n \"border-(--color-neutral-300) bg-white\",\n \"checked:border-(--color-primary-500) checked:bg-(--color-primary-500)\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-(--color-danger-500)\",\n )}\n style={{\n backgroundImage:\n value === option.value\n ? `url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")`\n : \"none\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }}\n />\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={optionId}\n className={cn(\n \"text-sm font-medium cursor-pointer text-(--color-neutral-900)\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {option.label}\n </label>\n {option.description && (\n <p className=\"text-xs text-(--color-neutral-500)\">\n {option.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n {hint && !error && (\n <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>\n )}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n );\n};\nRadioGroup.displayName = \"RadioGroup\";\n","import React from 'react'\nimport { cn } from '../../utils/cn'\n\nexport interface SwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string\n description?: string\n error?: string\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, description, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\n const switchId = id ?? `switch-${Math.random().toString(36).slice(2, 9)}`\n\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n )\n\n const isControlled = checked !== undefined\n const isChecked = isControlled ? checked : internalChecked\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalChecked(e.target.checked)\n onChange?.(e)\n }\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-start gap-3\">\n <div className=\"relative inline-flex shrink-0 mt-0.5\">\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n id={switchId}\n disabled={disabled}\n checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <label\n htmlFor={switchId}\n className={cn(\n 'relative flex h-5 w-9 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors',\n 'bg-(--color-neutral-200) peer-checked:bg-(--color-primary-500)',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-(--color-primary-500)/20',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n error && 'ring-2 ring-(--color-danger-500)/20',\n className\n )}\n >\n <span\n className=\"pointer-events-none block h-3.5 w-3.5 rounded-full bg-white shadow transition-transform\"\n style={{\n transform: isChecked ? 'translateX(18px)' : 'translateX(2px)',\n }}\n />\n </label>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <span\n className={cn(\n 'text-sm font-medium text-(--color-neutral-900)',\n disabled && 'opacity-50',\n )}\n >\n {label}\n </span>\n )}\n {description && (\n <p className=\"text-xs text-(--color-neutral-500)\">{description}</p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-(--color-danger-500) ml-12\">{error}</p>\n )}\n </div>\n )\n }\n)\nSwitch.displayName = 'Switch'"]}
|
package/dist/index.mjs
CHANGED
|
@@ -335,7 +335,258 @@ var Spinner = React3.forwardRef(
|
|
|
335
335
|
] })
|
|
336
336
|
);
|
|
337
337
|
Spinner.displayName = "Spinner";
|
|
338
|
+
var selectVariants = cva(
|
|
339
|
+
"w-full appearance-none bg-white border rounded-(--radius-md) px-3 py-2 text-sm transition-colors cursor-pointer focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)",
|
|
340
|
+
{
|
|
341
|
+
variants: {
|
|
342
|
+
state: {
|
|
343
|
+
default: "border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20",
|
|
344
|
+
error: "border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20"
|
|
345
|
+
},
|
|
346
|
+
selectSize: {
|
|
347
|
+
sm: "h-8 text-xs pr-8",
|
|
348
|
+
md: "h-10 text-sm pr-8",
|
|
349
|
+
lg: "h-12 text-base pr-10"
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
defaultVariants: {
|
|
353
|
+
state: "default",
|
|
354
|
+
selectSize: "md"
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
);
|
|
358
|
+
var Select = React3.forwardRef(
|
|
359
|
+
({ className, label, error, hint, placeholder, options, selectSize, id, children, ...props }, ref) => {
|
|
360
|
+
const selectId = id != null ? id : label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-");
|
|
361
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 w-full", children: [
|
|
362
|
+
label && /* @__PURE__ */ jsx("label", { htmlFor: selectId, className: "text-sm font-medium text-(--color-neutral-700)", children: label }),
|
|
363
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
364
|
+
/* @__PURE__ */ jsxs(
|
|
365
|
+
"select",
|
|
366
|
+
{
|
|
367
|
+
ref,
|
|
368
|
+
id: selectId,
|
|
369
|
+
className: cn(selectVariants({ state: error ? "error" : "default", selectSize }), className),
|
|
370
|
+
...props,
|
|
371
|
+
children: [
|
|
372
|
+
placeholder && /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: placeholder }),
|
|
373
|
+
options ? options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value)) : children
|
|
374
|
+
]
|
|
375
|
+
}
|
|
376
|
+
),
|
|
377
|
+
/* @__PURE__ */ jsx(
|
|
378
|
+
"svg",
|
|
379
|
+
{
|
|
380
|
+
className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-(--color-neutral-400)",
|
|
381
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
382
|
+
viewBox: "0 0 24 24",
|
|
383
|
+
fill: "none",
|
|
384
|
+
stroke: "currentColor",
|
|
385
|
+
strokeWidth: "2",
|
|
386
|
+
strokeLinecap: "round",
|
|
387
|
+
strokeLinejoin: "round",
|
|
388
|
+
children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
|
|
389
|
+
}
|
|
390
|
+
)
|
|
391
|
+
] }),
|
|
392
|
+
hint && !error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-neutral-500)", children: hint }),
|
|
393
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-danger-500)", children: error })
|
|
394
|
+
] });
|
|
395
|
+
}
|
|
396
|
+
);
|
|
397
|
+
Select.displayName = "Select";
|
|
398
|
+
var Checkbox = React3.forwardRef(
|
|
399
|
+
({ className, label, description, error, id, disabled, ...props }, ref) => {
|
|
400
|
+
const checkboxId = id != null ? id : label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-");
|
|
401
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
402
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5", children: [
|
|
403
|
+
/* @__PURE__ */ jsx(
|
|
404
|
+
"input",
|
|
405
|
+
{
|
|
406
|
+
ref,
|
|
407
|
+
type: "checkbox",
|
|
408
|
+
id: checkboxId,
|
|
409
|
+
disabled,
|
|
410
|
+
className: cn(
|
|
411
|
+
"h-4 w-4 shrink-0 mt-0.5 rounded-(--radius-sm) border cursor-pointer transition-colors appearance-none",
|
|
412
|
+
"border-(--color-neutral-300) bg-white",
|
|
413
|
+
"checked:bg-(--color-primary-500) checked:border-(--color-primary-500)",
|
|
414
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20",
|
|
415
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
416
|
+
error && "border-(--color-danger-500)",
|
|
417
|
+
className
|
|
418
|
+
),
|
|
419
|
+
style: {
|
|
420
|
+
backgroundImage: `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`,
|
|
421
|
+
backgroundRepeat: "no-repeat",
|
|
422
|
+
backgroundPosition: "center"
|
|
423
|
+
},
|
|
424
|
+
...props
|
|
425
|
+
}
|
|
426
|
+
),
|
|
427
|
+
(label || description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
428
|
+
label && /* @__PURE__ */ jsx(
|
|
429
|
+
"label",
|
|
430
|
+
{
|
|
431
|
+
htmlFor: checkboxId,
|
|
432
|
+
className: cn(
|
|
433
|
+
"text-sm font-medium cursor-pointer text-(--color-neutral-900)",
|
|
434
|
+
disabled && "cursor-not-allowed opacity-50"
|
|
435
|
+
),
|
|
436
|
+
children: label
|
|
437
|
+
}
|
|
438
|
+
),
|
|
439
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-neutral-500)", children: description })
|
|
440
|
+
] })
|
|
441
|
+
] }),
|
|
442
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-danger-500) ml-6", children: error })
|
|
443
|
+
] });
|
|
444
|
+
}
|
|
445
|
+
);
|
|
446
|
+
Checkbox.displayName = "Checkbox";
|
|
447
|
+
var RadioGroup = ({
|
|
448
|
+
options,
|
|
449
|
+
value,
|
|
450
|
+
onChange,
|
|
451
|
+
name,
|
|
452
|
+
label,
|
|
453
|
+
error,
|
|
454
|
+
hint,
|
|
455
|
+
orientation = "vertical"
|
|
456
|
+
}) => {
|
|
457
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
458
|
+
label && /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-(--color-neutral-700)", children: label }),
|
|
459
|
+
/* @__PURE__ */ jsx(
|
|
460
|
+
"div",
|
|
461
|
+
{
|
|
462
|
+
className: cn(
|
|
463
|
+
"flex gap-3",
|
|
464
|
+
orientation === "vertical" ? "flex-col" : "flex-row flex-wrap"
|
|
465
|
+
),
|
|
466
|
+
children: options.map((option) => {
|
|
467
|
+
const optionId = `${name}-${option.value}`;
|
|
468
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5", children: [
|
|
469
|
+
/* @__PURE__ */ jsx(
|
|
470
|
+
"input",
|
|
471
|
+
{
|
|
472
|
+
type: "radio",
|
|
473
|
+
id: optionId,
|
|
474
|
+
name,
|
|
475
|
+
value: option.value,
|
|
476
|
+
checked: value === option.value,
|
|
477
|
+
disabled: option.disabled,
|
|
478
|
+
onChange: () => onChange == null ? void 0 : onChange(option.value),
|
|
479
|
+
className: cn(
|
|
480
|
+
"h-4 w-4 shrink-0 mt-0.5 cursor-pointer appearance-none rounded-full border-2 transition-colors",
|
|
481
|
+
"border-(--color-neutral-300) bg-white",
|
|
482
|
+
"checked:border-(--color-primary-500) checked:bg-(--color-primary-500)",
|
|
483
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20",
|
|
484
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
485
|
+
error && "border-(--color-danger-500)"
|
|
486
|
+
),
|
|
487
|
+
style: {
|
|
488
|
+
backgroundImage: value === option.value ? `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")` : "none",
|
|
489
|
+
backgroundRepeat: "no-repeat",
|
|
490
|
+
backgroundPosition: "center"
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
),
|
|
494
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
495
|
+
/* @__PURE__ */ jsx(
|
|
496
|
+
"label",
|
|
497
|
+
{
|
|
498
|
+
htmlFor: optionId,
|
|
499
|
+
className: cn(
|
|
500
|
+
"text-sm font-medium cursor-pointer text-(--color-neutral-900)",
|
|
501
|
+
option.disabled && "cursor-not-allowed opacity-50"
|
|
502
|
+
),
|
|
503
|
+
children: option.label
|
|
504
|
+
}
|
|
505
|
+
),
|
|
506
|
+
option.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-neutral-500)", children: option.description })
|
|
507
|
+
] })
|
|
508
|
+
] }, option.value);
|
|
509
|
+
})
|
|
510
|
+
}
|
|
511
|
+
),
|
|
512
|
+
hint && !error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-neutral-500)", children: hint }),
|
|
513
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-danger-500)", children: error })
|
|
514
|
+
] });
|
|
515
|
+
};
|
|
516
|
+
RadioGroup.displayName = "RadioGroup";
|
|
517
|
+
var Switch = React3.forwardRef(
|
|
518
|
+
({ className, label, description, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {
|
|
519
|
+
const switchId = id != null ? id : `switch-${Math.random().toString(36).slice(2, 9)}`;
|
|
520
|
+
const [internalChecked, setInternalChecked] = React3.useState(
|
|
521
|
+
defaultChecked != null ? defaultChecked : false
|
|
522
|
+
);
|
|
523
|
+
const isControlled = checked !== void 0;
|
|
524
|
+
const isChecked = isControlled ? checked : internalChecked;
|
|
525
|
+
const handleChange = (e) => {
|
|
526
|
+
if (!isControlled) setInternalChecked(e.target.checked);
|
|
527
|
+
onChange == null ? void 0 : onChange(e);
|
|
528
|
+
};
|
|
529
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
530
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
531
|
+
/* @__PURE__ */ jsxs("div", { className: "relative inline-flex shrink-0 mt-0.5", children: [
|
|
532
|
+
/* @__PURE__ */ jsx(
|
|
533
|
+
"input",
|
|
534
|
+
{
|
|
535
|
+
ref,
|
|
536
|
+
type: "checkbox",
|
|
537
|
+
role: "switch",
|
|
538
|
+
id: switchId,
|
|
539
|
+
disabled,
|
|
540
|
+
checked: isChecked,
|
|
541
|
+
onChange: handleChange,
|
|
542
|
+
className: "sr-only peer",
|
|
543
|
+
...props
|
|
544
|
+
}
|
|
545
|
+
),
|
|
546
|
+
/* @__PURE__ */ jsx(
|
|
547
|
+
"label",
|
|
548
|
+
{
|
|
549
|
+
htmlFor: switchId,
|
|
550
|
+
className: cn(
|
|
551
|
+
"relative flex h-5 w-9 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors",
|
|
552
|
+
"bg-(--color-neutral-200) peer-checked:bg-(--color-primary-500)",
|
|
553
|
+
"peer-focus-visible:ring-2 peer-focus-visible:ring-(--color-primary-500)/20",
|
|
554
|
+
"peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
555
|
+
error && "ring-2 ring-(--color-danger-500)/20",
|
|
556
|
+
className
|
|
557
|
+
),
|
|
558
|
+
children: /* @__PURE__ */ jsx(
|
|
559
|
+
"span",
|
|
560
|
+
{
|
|
561
|
+
className: "pointer-events-none block h-3.5 w-3.5 rounded-full bg-white shadow transition-transform",
|
|
562
|
+
style: {
|
|
563
|
+
transform: isChecked ? "translateX(18px)" : "translateX(2px)"
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
)
|
|
567
|
+
}
|
|
568
|
+
)
|
|
569
|
+
] }),
|
|
570
|
+
(label || description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
571
|
+
label && /* @__PURE__ */ jsx(
|
|
572
|
+
"span",
|
|
573
|
+
{
|
|
574
|
+
className: cn(
|
|
575
|
+
"text-sm font-medium text-(--color-neutral-900)",
|
|
576
|
+
disabled && "opacity-50"
|
|
577
|
+
),
|
|
578
|
+
children: label
|
|
579
|
+
}
|
|
580
|
+
),
|
|
581
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-neutral-500)", children: description })
|
|
582
|
+
] })
|
|
583
|
+
] }),
|
|
584
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-xs text-(--color-danger-500) ml-12", children: error })
|
|
585
|
+
] });
|
|
586
|
+
}
|
|
587
|
+
);
|
|
588
|
+
Switch.displayName = "Switch";
|
|
338
589
|
|
|
339
|
-
export { Avatar, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Input, Separator, Spinner, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, fontSize, inputVariants, radius, separatorVariants, spinnerVariants };
|
|
590
|
+
export { Avatar, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Input, RadioGroup, Select, Separator, Spinner, Switch, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, fontSize, inputVariants, radius, selectVariants, separatorVariants, spinnerVariants };
|
|
340
591
|
//# sourceMappingURL=index.mjs.map
|
|
341
592
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/tokens/index.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Separator/Separator.tsx","../src/components/Spinner/Spinner.tsx"],"names":["React","cva","jsxs","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACLO,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS;AAAA,IACP,EAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA;AAET;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,GAAA;AAAA,EACN,EAAA,EAAM,SAAA;AAAA,EACN,EAAA,EAAM,UAAA;AAAA,EACN,EAAA,EAAM,QAAA;AAAA,EACN,EAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM;AACR;AAEO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAM,CAAC,SAAA,EAAY,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,EACzC,IAAM,CAAC,UAAA,EAAY,EAAE,UAAA,EAAY,WAAW,CAAA;AAAA,EAC5C,MAAM,CAAC,MAAA,EAAY,EAAE,UAAA,EAAY,UAAU,CAAA;AAAA,EAC3C,IAAM,CAAC,UAAA,EAAY,EAAE,UAAA,EAAY,WAAW,CAAA;AAAA,EAC5C,IAAM,CAAC,SAAA,EAAY,EAAE,UAAA,EAAY,WAAW;AAC9C;ACnDO,IAAM,cAAA,GAAiB,GAAA;AAAA,EAC5B,oMAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAa,6GAAA;AAAA,QACb,SAAA,EAAa,oFAAA;AAAA,QACb,OAAA,EAAa,6GAAA;AAAA,QACb,KAAA,EAAa,2DAAA;AAAA,QACb,WAAA,EAAa;AAAA,OACf;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAM,gDAAA;AAAA,QACN,EAAA,EAAM,+CAAA;AAAA,QACN,EAAA,EAAM,iDAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAQO,IAAM,SAASA,MAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACtE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,UAAU,QAAA,IAAY,SAAA;AAAA,MACrB,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACC,IAAA,CAAC,SAAI,SAAA,EAAU,sBAAA,EAAuB,OAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAC3F,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,YAAA,EAAa,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,CAAA;AAAA,8BAC3F,MAAA,EAAA,EAAK,SAAA,EAAU,cAAa,IAAA,EAAK,cAAA,EAAe,GAAE,sBAAA,EAAuB;AAAA,SAAA,EAC5E,CAAA;AAAA,QAED;AAAA;AAAA;AAAA;AAGP;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACjDd,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EAC3B,0OAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,gIAAA;AAAA,QACT,KAAA,EAAS;AAAA,OACX;AAAA,MACA,SAAA,EAAW;AAAA,QACT,EAAA,EAAI,cAAA;AAAA,QACJ,EAAA,EAAI,cAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW;AAAA;AACb;AAEJ;AAUO,IAAM,QAAQD,MAAAA,CAAM,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnE,IAAA,MAAM,OAAA,GAAU,EAAA,IAAA,IAAA,GAAA,EAAA,GAAM,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,EAAA,CAAc,QAAQ,MAAA,EAAQ,GAAA,CAAA;AAC3D,IAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCC,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAS,OAAA,EAAS,SAAA,EAAU,kDAChC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBAEFA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,EAAA,EAAI,OAAA;AAAA,UACJ,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,GAAQ,OAAA,GAAU,SAAA,EAAW,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA;AAAA,UACxF,GAAG;AAAA;AAAA,OACN;AAAA,MACC,IAAA,IAAQ,CAAC,KAAA,oBAASA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MAC1E,yBAASA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACpE,CAAA;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;ACnDb,IAAM,aAAA,GAAgBF,GAAAA;AAAA,EAC3B,mDAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAa,qCAAA;AAAA,QACb,SAAA,EAAa,qDAAA;AAAA,QACb,OAAA,EAAa,gEAAA;AAAA,QACb,OAAA,EAAa,wDAAA;AAAA,QACb,OAAA,EAAa,wDAAA;AAAA,QACb,WAAA,EAAa;AAAA,OACf;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAMO,IAAM,KAAA,GAAQ,CAAC,EAAE,SAAA,EAAW,SAAS,IAAA,EAAM,GAAG,KAAA,EAAM,qBACzDE,GAAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE/E,KAAA,CAAM,WAAA,GAAc,OAAA;AC/Bb,IAAM,YAAA,GAAeF,GAAAA;AAAA,EAC1B,2DAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,QAAA,EAAU,WAAA;AAAA,QACV,QAAA,EAAU,qCAAA;AAAA,QACV,KAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,EAAA;AAAA,QACN,EAAA,EAAM,KAAA;AAAA,QACN,EAAA,EAAM,KAAA;AAAA,QACN,EAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX;AAEJ;AAMO,IAAM,OAAOD,MAAAA,CAAM,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1CG,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,YAAA,CAAa,EAAE,SAAS,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAIZ,IAAM,aAAaH,MAAAA,CAAM,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBG,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,8BAA8B,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEtF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAElB,IAAM,YAAYH,MAAAA,CAAM,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBG,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAU,SAAA,EAAW,EAAA,CAAG,oDAAoD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE3G;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAEjB,IAAM,kBAAkBH,MAAAA,CAAM,UAAA;AAAA,EACnC,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBG,GAAAA,CAAC,GAAA,EAAA,EAAE,KAAU,SAAA,EAAW,EAAA,CAAG,sCAAsC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE5F;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAEvB,IAAM,cAAcH,MAAAA,CAAM,UAAA;AAAA,EAC/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBG,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,sCAAsC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE9F;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAEnB,IAAM,aAAaH,MAAAA,CAAM,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBG,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,gCAAgC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAExF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;ACzElB,IAAM,cAAA,GAAiBF,GAAAA;AAAA,EAC5B,iHAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,iBAAA;AAAA,QACJ,EAAA,EAAI,iBAAA;AAAA,QACJ,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAUO,IAAM,SAASD,MAAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,GAAA,EAAK,KAAK,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1D,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,MAAAA,CAAM,SAAS,KAAK,CAAA;AAEpD,IAAA,MAAM,QAAA,GAAW,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CACb,KAAA,CAAM,GAAA,CAAA,CACP,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,CAAC,CAAA,CAAA,CACpB,KAAA,CAAM,CAAA,EAAG,CAAA,CAAA,CACT,KAAK,EAAA,CAAA,CACL,WAAA,EAAA;AAEH,IAAA,uBACEG,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAW,EAAA,CAAG,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,QAChD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,GAAA,IAAO,CAAC,QAAA,mBACPA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,EAAA;AAAA,YACZ,SAAA,EAAU,4BAAA;AAAA,YACV,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI;AAAA;AAAA,SACjC,GACE,2BACFA,GAAAA,CAAC,UAAK,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA,QAAA,EACH,CAAA,mBAEAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,4CAAA;AAAA,YACV,IAAA,EAAK,cAAA;AAAA,YACL,OAAA,EAAQ,WAAA;AAAA,YAER,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8IAAA,EAA+I;AAAA;AAAA;AACzJ;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACnEd,IAAM,iBAAA,GAAoBF,GAAAA;AAAA,EAC/B,mCAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,UAAA,EAAY,aAAA;AAAA,QACZ,QAAA,EAAY;AAAA;AACd,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAQO,IAAM,YAAYD,MAAAA,CAAM,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AACpD,IAAA,IAAI,KAAA,IAAS,gBAAgB,UAAA,EAAY;AACvC,MAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,GAAG,yBAAA,EAA2B,SAAS,CAAA,EAAI,GAAG,KAAA,EACtE,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,wBACtDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EAAuC;AAAA,OAAA,EACxD,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,WAAA;AAAA,QACL,oBAAkB,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,YAAA;AAAA,QACjC,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,QAC1D,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AC9CjB,IAAM,eAAA,GAAkBF,GAAAA;AAAA,EAC7B,gGAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAQO,IAAM,UAAUD,MAAAA,CAAM,UAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,OAAO,GAAG,KAAA,IAAS,GAAA,qBACrCE,KAAC,MAAA,EAAA,EAAK,GAAA,EAAU,MAAK,QAAA,EAAS,SAAA,EAAW,GAAG,yCAAA,EAA2C,SAAS,CAAA,EAAI,GAAG,KAAA,EACrG,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,gBAAgB,EAAE,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA;AAAA,IAC/C,yBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAE9DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,kCAAS,YAAA,EAAa;AAAA,GAAA,EACnD;AAEJ;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","export const colors = {\n primary: {\n 50: '#FFF4EE',\n 100: '#FFE0CC',\n 200: '#FFBF99',\n 300: '#F08050',\n 400: '#D4602A',\n 500: '#C2440A',\n 600: '#A03808',\n 700: '#8F2F06',\n 800: '#5C1C03',\n 900: '#2E0D01',\n },\n neutral: {\n 50: '#f9f7f5',\n 100: '#f0ece7',\n 200: '#ddd6cc',\n 300: '#c5bab0',\n 400: '#a89b8e',\n 500: '#8a7d72',\n 600: '#6f6358',\n 700: '#564d45',\n 800: '#3c3630',\n 900: '#252019',\n },\n danger: {\n 500: '#ef4444',\n 600: '#dc2626',\n },\n success: {\n 500: '#22c55e',\n 600: '#16a34a',\n },\n warning: {\n 500: '#f59e0b',\n 600: '#d97706',\n },\n} as const\n\nexport const radius = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl':'1rem',\n full: '9999px',\n} as const\n\nexport const fontSize = {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n} as const","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary: 'bg-(--color-primary-500) text-white hover:bg-(--color-primary-600) focus-visible:ring-(--color-primary-500)',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-900) hover:bg-(--color-neutral-200)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500) bg-transparent hover:bg-(--color-primary-50)',\n ghost: 'text-(--color-neutral-700) hover:bg-(--color-neutral-100)',\n destructive: 'bg-(--color-danger-500) text-white hover:bg-(--color-danger-600)',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-(--radius-md) gap-1.5',\n md: 'h-10 px-4 text-sm rounded-(--radius-md) gap-2',\n lg: 'h-12 px-6 text-base rounded-(--radius-lg) gap-2',\n icon: 'h-10 w-10 rounded-(--radius-md)',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n isLoading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, isLoading, children, disabled, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8z\" />\n </svg>\n )}\n {children}\n </button>\n )\n)\nButton.displayName = 'Button'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const inputVariants = cva(\n 'w-full px-3 py-2 text-sm bg-white border rounded-(--radius-md) transition-colors placeholder:text-(--color-neutral-400) focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n inputSize: {\n sm: 'h-8 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n hint?: string\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, hint, id, inputSize, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(inputVariants({ state: error ? 'error' : 'default', inputSize }), className)}\n {...props}\n />\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nInput.displayName = 'Input'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center rounded-full font-medium',\n {\n variants: {\n variant: {\n default: 'bg-(--color-primary-500) text-white',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-700)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500)',\n success: 'bg-(--color-success-500)/10 text-(--color-success-600)',\n warning: 'bg-(--color-warning-500)/10 text-(--color-warning-600)',\n destructive: 'bg-(--color-danger-500)/10 text-(--color-danger-600)',\n },\n size: {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = ({ className, variant, size, ...props }: BadgeProps) => (\n <span className={cn(badgeVariants({ variant, size }), className)} {...props} />\n)\nBadge.displayName = 'Badge'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const cardVariants = cva(\n 'rounded-(--radius-lg) bg-white text-(--color-neutral-900)',\n {\n variants: {\n variant: {\n elevated: 'shadow-md',\n outlined: 'border border-(--color-neutral-200)',\n ghost: 'bg-(--color-neutral-50)',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n variant: 'elevated',\n padding: 'md',\n },\n }\n)\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, padding, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, padding }), className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\n// ─── Sub-components ───────────────────────────────────────\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold text-(--color-neutral-900)', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-(--color-neutral-500)', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-(--color-neutral-700)', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 mt-4', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const avatarVariants = cva(\n 'relative inline-flex items-center justify-center shrink-0 overflow-hidden rounded-full bg-(--color-neutral-200)',\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n src?: string\n alt?: string\n fallback?: string\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, src, alt, fallback, ...props }, ref) => {\n const [imgError, setImgError] = React.useState(false)\n\n const initials = fallback\n ?.split(' ')\n .map((word) => word[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n\n return (\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n >\n {src && !imgError ? (\n <img\n src={src}\n alt={alt ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n />\n ) : initials ? (\n <span className=\"font-medium text-(--color-neutral-700) select-none\">\n {initials}\n </span>\n ) : (\n <svg\n className=\"h-[60%] w-[60%] text-(--color-neutral-400)\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const separatorVariants = cva(\n 'shrink-0 bg-(--color-neutral-200)',\n {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n)\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n label?: string\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ className, orientation, label, ...props }, ref) => {\n if (label && orientation !== 'vertical') {\n return (\n <div ref={ref} className={cn('flex items-center gap-3', className)} {...props}>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n <span className=\"text-xs text-(--color-neutral-400) font-medium select-none\">\n {label}\n </span>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation ?? 'horizontal'}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = 'Separator'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const spinnerVariants = cva(\n 'animate-spin rounded-full border-2 border-(--color-neutral-200) border-t-(--color-primary-500)',\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof spinnerVariants> {\n label?: string\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label, ...props }, ref) => (\n <span ref={ref} role=\"status\" className={cn('inline-flex flex-col items-center gap-2', className)} {...props}>\n <span className={cn(spinnerVariants({ size }))} />\n {label && (\n <span className=\"text-sm text-(--color-neutral-500)\">{label}</span>\n )}\n <span className=\"sr-only\">{label ?? 'Loading...'}</span>\n </span>\n )\n)\nSpinner.displayName = 'Spinner'"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/tokens/index.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Separator/Separator.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Select/Select.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.tsx"],"names":["React","cva","jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","export const colors = {\n primary: {\n 50: '#FFF4EE',\n 100: '#FFE0CC',\n 200: '#FFBF99',\n 300: '#F08050',\n 400: '#D4602A',\n 500: '#C2440A',\n 600: '#A03808',\n 700: '#8F2F06',\n 800: '#5C1C03',\n 900: '#2E0D01',\n },\n neutral: {\n 50: '#f9f7f5',\n 100: '#f0ece7',\n 200: '#ddd6cc',\n 300: '#c5bab0',\n 400: '#a89b8e',\n 500: '#8a7d72',\n 600: '#6f6358',\n 700: '#564d45',\n 800: '#3c3630',\n 900: '#252019',\n },\n danger: {\n 500: '#ef4444',\n 600: '#dc2626',\n },\n success: {\n 500: '#22c55e',\n 600: '#16a34a',\n },\n warning: {\n 500: '#f59e0b',\n 600: '#d97706',\n },\n} as const\n\nexport const radius = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl':'1rem',\n full: '9999px',\n} as const\n\nexport const fontSize = {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n} as const","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary: 'bg-(--color-primary-500) text-white hover:bg-(--color-primary-600) focus-visible:ring-(--color-primary-500)',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-900) hover:bg-(--color-neutral-200)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500) bg-transparent hover:bg-(--color-primary-50)',\n ghost: 'text-(--color-neutral-700) hover:bg-(--color-neutral-100)',\n destructive: 'bg-(--color-danger-500) text-white hover:bg-(--color-danger-600)',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-(--radius-md) gap-1.5',\n md: 'h-10 px-4 text-sm rounded-(--radius-md) gap-2',\n lg: 'h-12 px-6 text-base rounded-(--radius-lg) gap-2',\n icon: 'h-10 w-10 rounded-(--radius-md)',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n isLoading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, isLoading, children, disabled, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8z\" />\n </svg>\n )}\n {children}\n </button>\n )\n)\nButton.displayName = 'Button'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const inputVariants = cva(\n 'w-full px-3 py-2 text-sm bg-white border rounded-(--radius-md) transition-colors placeholder:text-(--color-neutral-400) focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n inputSize: {\n sm: 'h-8 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n hint?: string\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, hint, id, inputSize, ...props }, ref) => {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(inputVariants({ state: error ? 'error' : 'default', inputSize }), className)}\n {...props}\n />\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nInput.displayName = 'Input'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center rounded-full font-medium',\n {\n variants: {\n variant: {\n default: 'bg-(--color-primary-500) text-white',\n secondary: 'bg-(--color-neutral-100) text-(--color-neutral-700)',\n outline: 'border border-(--color-primary-500) text-(--color-primary-500)',\n success: 'bg-(--color-success-500)/10 text-(--color-success-600)',\n warning: 'bg-(--color-warning-500)/10 text-(--color-warning-600)',\n destructive: 'bg-(--color-danger-500)/10 text-(--color-danger-600)',\n },\n size: {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = ({ className, variant, size, ...props }: BadgeProps) => (\n <span className={cn(badgeVariants({ variant, size }), className)} {...props} />\n)\nBadge.displayName = 'Badge'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const cardVariants = cva(\n 'rounded-(--radius-lg) bg-white text-(--color-neutral-900)',\n {\n variants: {\n variant: {\n elevated: 'shadow-md',\n outlined: 'border border-(--color-neutral-200)',\n ghost: 'bg-(--color-neutral-50)',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n variant: 'elevated',\n padding: 'md',\n },\n }\n)\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, padding, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, padding }), className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\n// ─── Sub-components ───────────────────────────────────────\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold text-(--color-neutral-900)', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-(--color-neutral-500)', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-(--color-neutral-700)', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 mt-4', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const avatarVariants = cva(\n 'relative inline-flex items-center justify-center shrink-0 overflow-hidden rounded-full bg-(--color-neutral-200)',\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n src?: string\n alt?: string\n fallback?: string\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, src, alt, fallback, ...props }, ref) => {\n const [imgError, setImgError] = React.useState(false)\n\n const initials = fallback\n ?.split(' ')\n .map((word) => word[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n\n return (\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n >\n {src && !imgError ? (\n <img\n src={src}\n alt={alt ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n />\n ) : initials ? (\n <span className=\"font-medium text-(--color-neutral-700) select-none\">\n {initials}\n </span>\n ) : (\n <svg\n className=\"h-[60%] w-[60%] text-(--color-neutral-400)\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const separatorVariants = cva(\n 'shrink-0 bg-(--color-neutral-200)',\n {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n)\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n label?: string\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ className, orientation, label, ...props }, ref) => {\n if (label && orientation !== 'vertical') {\n return (\n <div ref={ref} className={cn('flex items-center gap-3', className)} {...props}>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n <span className=\"text-xs text-(--color-neutral-400) font-medium select-none\">\n {label}\n </span>\n <div className=\"h-px flex-1 bg-(--color-neutral-200)\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation ?? 'horizontal'}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n }\n)\nSeparator.displayName = 'Separator'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const spinnerVariants = cva(\n 'animate-spin rounded-full border-2 border-(--color-neutral-200) border-t-(--color-primary-500)',\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n)\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof spinnerVariants> {\n label?: string\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label, ...props }, ref) => (\n <span ref={ref} role=\"status\" className={cn('inline-flex flex-col items-center gap-2', className)} {...props}>\n <span className={cn(spinnerVariants({ size }))} />\n {label && (\n <span className=\"text-sm text-(--color-neutral-500)\">{label}</span>\n )}\n <span className=\"sr-only\">{label ?? 'Loading...'}</span>\n </span>\n )\n)\nSpinner.displayName = 'Spinner'","import React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../utils/cn'\n\nexport const selectVariants = cva(\n 'w-full appearance-none bg-white border rounded-(--radius-md) px-3 py-2 text-sm transition-colors cursor-pointer focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-(--color-neutral-50)',\n {\n variants: {\n state: {\n default: 'border-(--color-neutral-300) text-(--color-neutral-900) focus:border-(--color-primary-500) focus:ring-(--color-primary-500)/20',\n error: 'border-(--color-danger-500) text-(--color-neutral-900) focus:border-(--color-danger-500) focus:ring-(--color-danger-500)/20',\n },\n selectSize: {\n sm: 'h-8 text-xs pr-8',\n md: 'h-10 text-sm pr-8',\n lg: 'h-12 text-base pr-10',\n },\n },\n defaultVariants: {\n state: 'default',\n selectSize: 'md',\n },\n }\n)\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'>,\n VariantProps<typeof selectVariants> {\n label?: string\n error?: string\n hint?: string\n placeholder?: string\n options?: SelectOption[]\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, label, error, hint, placeholder, options, selectSize, id, children, ...props }, ref) => {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, '-')\n\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n ref={ref}\n id={selectId}\n className={cn(selectVariants({ state: error ? 'error' : 'default', selectSize }), className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n <svg\n className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-(--color-neutral-400)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n {hint && !error && <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n )\n }\n)\nSelect.displayName = 'Select'","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n description?: string;\n error?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, description, error, id, disabled, ...props }, ref) => {\n const checkboxId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-start gap-2.5\">\n <input\n ref={ref}\n type=\"checkbox\"\n id={checkboxId}\n disabled={disabled}\n className={cn(\n \"h-4 w-4 shrink-0 mt-0.5 rounded-(--radius-sm) border cursor-pointer transition-colors appearance-none\",\n \"border-(--color-neutral-300) bg-white\",\n \"checked:bg-(--color-primary-500) checked:border-(--color-primary-500)\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-(--color-danger-500)\",\n className,\n )}\n style={{\n backgroundImage: `url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label\n htmlFor={checkboxId}\n className={cn(\n \"text-sm font-medium cursor-pointer text-(--color-neutral-900)\",\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-(--color-neutral-500)\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-(--color-danger-500) ml-6\">{error}</p>\n )}\n </div>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n options: RadioOption[];\n value?: string;\n onChange?: (value: string) => void;\n name: string;\n label?: string;\n error?: string;\n hint?: string;\n orientation?: \"vertical\" | \"horizontal\";\n}\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n options,\n value,\n onChange,\n name,\n label,\n error,\n hint,\n orientation = \"vertical\",\n}) => {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <span className=\"text-sm font-medium text-(--color-neutral-700)\">\n {label}\n </span>\n )}\n <div\n className={cn(\n \"flex gap-3\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n )}\n >\n {options.map((option) => {\n const optionId = `${name}-${option.value}`;\n return (\n <div key={option.value} className=\"flex items-start gap-2.5\">\n <input\n type=\"radio\"\n id={optionId}\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={option.disabled}\n onChange={() => onChange?.(option.value)}\n className={cn(\n \"h-4 w-4 shrink-0 mt-0.5 cursor-pointer appearance-none rounded-full border-2 transition-colors\",\n \"border-(--color-neutral-300) bg-white\",\n \"checked:border-(--color-primary-500) checked:bg-(--color-primary-500)\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-primary-500)/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-(--color-danger-500)\",\n )}\n style={{\n backgroundImage:\n value === option.value\n ? `url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")`\n : \"none\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }}\n />\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={optionId}\n className={cn(\n \"text-sm font-medium cursor-pointer text-(--color-neutral-900)\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {option.label}\n </label>\n {option.description && (\n <p className=\"text-xs text-(--color-neutral-500)\">\n {option.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n {hint && !error && (\n <p className=\"text-xs text-(--color-neutral-500)\">{hint}</p>\n )}\n {error && <p className=\"text-xs text-(--color-danger-500)\">{error}</p>}\n </div>\n );\n};\nRadioGroup.displayName = \"RadioGroup\";\n","import React from 'react'\nimport { cn } from '../../utils/cn'\n\nexport interface SwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string\n description?: string\n error?: string\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, description, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\n const switchId = id ?? `switch-${Math.random().toString(36).slice(2, 9)}`\n\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n )\n\n const isControlled = checked !== undefined\n const isChecked = isControlled ? checked : internalChecked\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalChecked(e.target.checked)\n onChange?.(e)\n }\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-start gap-3\">\n <div className=\"relative inline-flex shrink-0 mt-0.5\">\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n id={switchId}\n disabled={disabled}\n checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <label\n htmlFor={switchId}\n className={cn(\n 'relative flex h-5 w-9 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors',\n 'bg-(--color-neutral-200) peer-checked:bg-(--color-primary-500)',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-(--color-primary-500)/20',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n error && 'ring-2 ring-(--color-danger-500)/20',\n className\n )}\n >\n <span\n className=\"pointer-events-none block h-3.5 w-3.5 rounded-full bg-white shadow transition-transform\"\n style={{\n transform: isChecked ? 'translateX(18px)' : 'translateX(2px)',\n }}\n />\n </label>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <span\n className={cn(\n 'text-sm font-medium text-(--color-neutral-900)',\n disabled && 'opacity-50',\n )}\n >\n {label}\n </span>\n )}\n {description && (\n <p className=\"text-xs text-(--color-neutral-500)\">{description}</p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-(--color-danger-500) ml-12\">{error}</p>\n )}\n </div>\n )\n }\n)\nSwitch.displayName = 'Switch'"]}
|