orbital-ds 0.1.1 → 0.2.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/contract.json +38 -0
- package/dist/styles.css +89 -9
- package/dist/themes/zyro.css +189 -0
- package/dist/ui/accordion.d.ts +9 -0
- package/dist/ui/accordion.js +79 -0
- package/dist/ui/alert-dialog.d.ts +23 -0
- package/dist/ui/alert-dialog.js +173 -0
- package/dist/ui/alert.d.ts +13 -0
- package/dist/ui/alert.js +77 -0
- package/dist/ui/aspect-ratio.d.ts +7 -0
- package/dist/ui/aspect-ratio.js +22 -0
- package/dist/ui/attachment.d.ts +26 -0
- package/dist/ui/attachment.js +197 -0
- package/dist/ui/avatar.js +1 -1
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/badge.js +1 -1
- package/dist/ui/bubble.d.ts +19 -0
- package/dist/ui/bubble.js +115 -0
- package/dist/ui/button-group.d.ts +15 -0
- package/dist/ui/button-group.js +82 -0
- package/dist/ui/button.d.ts +5 -3
- package/dist/ui/button.js +9 -6
- package/dist/ui/calendar.d.ts +15 -0
- package/dist/ui/calendar.js +190 -0
- package/dist/ui/card.js +4 -4
- package/dist/ui/carousel.d.ts +33 -0
- package/dist/ui/carousel.js +199 -0
- package/dist/ui/checkbox.js +1 -1
- package/dist/ui/combobox.d.ts +26 -0
- package/dist/ui/combobox.js +281 -0
- package/dist/ui/command.d.ts +22 -0
- package/dist/ui/command.js +183 -0
- package/dist/ui/context-menu.d.ts +31 -0
- package/dist/ui/context-menu.js +242 -0
- package/dist/ui/dialog.js +2 -2
- package/dist/ui/direction.d.ts +1 -0
- package/dist/ui/direction.js +8 -0
- package/dist/ui/drawer.d.ts +18 -0
- package/dist/ui/drawer.js +208 -0
- package/dist/ui/dropdown-menu.d.ts +1 -1
- package/dist/ui/dropdown-menu.js +13 -9
- package/dist/ui/empty.d.ts +15 -0
- package/dist/ui/empty.js +102 -0
- package/dist/ui/field.d.ts +28 -0
- package/dist/ui/field.js +217 -0
- package/dist/ui/hover-card.d.ts +8 -0
- package/dist/ui/hover-card.js +45 -0
- package/dist/ui/input-group.d.ts +22 -0
- package/dist/ui/input-group.js +145 -0
- package/dist/ui/input-otp.d.ts +13 -0
- package/dist/ui/input-otp.js +82 -0
- package/dist/ui/input.js +1 -1
- package/dist/ui/item.d.ts +26 -0
- package/dist/ui/item.js +195 -0
- package/dist/ui/kbd.d.ts +6 -0
- package/dist/ui/kbd.js +29 -0
- package/dist/ui/marker.d.ts +13 -0
- package/dist/ui/marker.js +71 -0
- package/dist/ui/menubar.d.ts +31 -0
- package/dist/ui/menubar.js +259 -0
- package/dist/ui/message-scroller.d.ts +16 -0
- package/dist/ui/message-scroller.js +120 -0
- package/dist/ui/message.d.ts +12 -0
- package/dist/ui/message.js +90 -0
- package/dist/ui/native-select.d.ts +10 -0
- package/dist/ui/native-select.js +63 -0
- package/dist/ui/navigation-menu.d.ts +15 -0
- package/dist/ui/navigation-menu.js +162 -0
- package/dist/ui/pagination.d.ts +22 -0
- package/dist/ui/pagination.js +128 -0
- package/dist/ui/popover.js +2 -2
- package/dist/ui/questionnaire.d.ts +24 -0
- package/dist/ui/questionnaire.js +331 -0
- package/dist/ui/radio-group.d.ts +8 -0
- package/dist/ui/radio-group.js +39 -0
- package/dist/ui/resizable.d.ts +10 -0
- package/dist/ui/resizable.js +46 -0
- package/dist/ui/scroll-area.js +1 -1
- package/dist/ui/select.js +5 -5
- package/dist/ui/sheet.js +4 -4
- package/dist/ui/sidebar.js +4 -4
- package/dist/ui/slider.d.ts +6 -0
- package/dist/ui/slider.js +53 -0
- package/dist/ui/spinner.d.ts +5 -0
- package/dist/ui/spinner.js +9 -0
- package/dist/ui/switch.d.ts +8 -0
- package/dist/ui/switch.js +32 -0
- package/dist/ui/table.js +2 -2
- package/dist/ui/tabs.js +1 -1
- package/dist/ui/textarea.js +1 -1
- package/dist/ui/toast.d.ts +19 -0
- package/dist/ui/toast.js +193 -0
- package/dist/ui/toggle-group.d.ts +14 -0
- package/dist/ui/toggle-group.js +77 -0
- package/dist/ui/toggle.d.ts +12 -0
- package/dist/ui/toggle.js +43 -0
- package/dist/ui/tooltip.js +3 -3
- package/docs/CONTRACT.md +113 -0
- package/package.json +133 -95
- package/scripts/doctor.mjs +142 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Questionnaire as QuestionnairePrimitive } from "@shadcn/react/questionnaire";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
import { buttonVariants } from "./button";
|
|
6
|
+
import { CheckIcon } from "lucide-react";
|
|
7
|
+
function Questionnaire({
|
|
8
|
+
className,
|
|
9
|
+
...props
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
QuestionnairePrimitive.Root,
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "questionnaire",
|
|
15
|
+
className: cn("flex w-full min-w-0 flex-col gap-6", className),
|
|
16
|
+
...props
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
function QuestionnaireProgress({
|
|
21
|
+
className,
|
|
22
|
+
...props
|
|
23
|
+
}) {
|
|
24
|
+
return /* @__PURE__ */ jsx(
|
|
25
|
+
QuestionnairePrimitive.Progress,
|
|
26
|
+
{
|
|
27
|
+
"data-slot": "questionnaire-progress",
|
|
28
|
+
className: cn(
|
|
29
|
+
"min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums",
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...props
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
function QuestionnaireItem({
|
|
37
|
+
className,
|
|
38
|
+
...props
|
|
39
|
+
}) {
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
QuestionnairePrimitive.Item,
|
|
42
|
+
{
|
|
43
|
+
"data-slot": "questionnaire-item",
|
|
44
|
+
className: cn(
|
|
45
|
+
"flex min-w-0 flex-col gap-5 border-0 p-0 outline-none",
|
|
46
|
+
className
|
|
47
|
+
),
|
|
48
|
+
...props
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function QuestionnaireTitle({
|
|
53
|
+
className,
|
|
54
|
+
...props
|
|
55
|
+
}) {
|
|
56
|
+
return /* @__PURE__ */ jsx(
|
|
57
|
+
QuestionnairePrimitive.Title,
|
|
58
|
+
{
|
|
59
|
+
"data-slot": "questionnaire-title",
|
|
60
|
+
className: cn(
|
|
61
|
+
"text-base font-semibold text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-5",
|
|
62
|
+
className
|
|
63
|
+
),
|
|
64
|
+
...props
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function QuestionnaireDescription({
|
|
69
|
+
className,
|
|
70
|
+
...props
|
|
71
|
+
}) {
|
|
72
|
+
return /* @__PURE__ */ jsx(
|
|
73
|
+
QuestionnairePrimitive.Description,
|
|
74
|
+
{
|
|
75
|
+
"data-slot": "questionnaire-description",
|
|
76
|
+
className: cn("text-sm text-pretty text-muted-foreground", className),
|
|
77
|
+
...props
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function QuestionnaireChoices({
|
|
82
|
+
className,
|
|
83
|
+
...props
|
|
84
|
+
}) {
|
|
85
|
+
return /* @__PURE__ */ jsx(
|
|
86
|
+
QuestionnairePrimitive.Choices,
|
|
87
|
+
{
|
|
88
|
+
"data-slot": "questionnaire-choices",
|
|
89
|
+
className: cn(
|
|
90
|
+
"group/questionnaire-choices grid min-w-0 gap-3",
|
|
91
|
+
className
|
|
92
|
+
),
|
|
93
|
+
...props
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
function QuestionnaireChoice({
|
|
98
|
+
children,
|
|
99
|
+
className,
|
|
100
|
+
...props
|
|
101
|
+
}) {
|
|
102
|
+
return /* @__PURE__ */ jsxs(
|
|
103
|
+
QuestionnairePrimitive.Choice,
|
|
104
|
+
{
|
|
105
|
+
"data-slot": "questionnaire-choice",
|
|
106
|
+
className: cn(
|
|
107
|
+
"group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-3 rounded-control border border-input px-4 py-3.5 text-start text-sm transition-colors outline-none select-none hover:bg-input/40 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-(length:--ds-ring-width) has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive data-checked:border-primary/40 data-checked:bg-primary/10",
|
|
108
|
+
"data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
109
|
+
className
|
|
110
|
+
),
|
|
111
|
+
...props,
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ jsx(
|
|
114
|
+
QuestionnairePrimitive.ChoiceInput,
|
|
115
|
+
{
|
|
116
|
+
"data-slot": "questionnaire-choice-input",
|
|
117
|
+
className: "absolute inset-0 z-(--ds-z-raised) size-full cursor-pointer opacity-0"
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ jsxs(
|
|
121
|
+
"span",
|
|
122
|
+
{
|
|
123
|
+
"aria-hidden": "true",
|
|
124
|
+
"data-slot": "questionnaire-choice-indicator",
|
|
125
|
+
className: "pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[6px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary",
|
|
126
|
+
children: [
|
|
127
|
+
/* @__PURE__ */ jsx(
|
|
128
|
+
"span",
|
|
129
|
+
{
|
|
130
|
+
"data-slot": "questionnaire-choice-indicator-dot",
|
|
131
|
+
className: "hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
/* @__PURE__ */ jsx(CheckIcon, { "data-slot": "questionnaire-choice-indicator-check", className: "hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block" })
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
QuestionnairePrimitive.ChoiceLabel,
|
|
140
|
+
{
|
|
141
|
+
"data-slot": "questionnaire-choice-label",
|
|
142
|
+
className: "flex min-w-0 flex-1 flex-col gap-1 leading-snug",
|
|
143
|
+
children
|
|
144
|
+
}
|
|
145
|
+
),
|
|
146
|
+
/* @__PURE__ */ jsx(
|
|
147
|
+
QuestionnairePrimitive.ChoiceShortcut,
|
|
148
|
+
{
|
|
149
|
+
"data-slot": "questionnaire-choice-shortcut",
|
|
150
|
+
className: "pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-full border border-input bg-background/80 font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex"
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
function QuestionnaireChoiceDescription({
|
|
158
|
+
className,
|
|
159
|
+
...props
|
|
160
|
+
}) {
|
|
161
|
+
return /* @__PURE__ */ jsx(
|
|
162
|
+
"span",
|
|
163
|
+
{
|
|
164
|
+
"data-slot": "questionnaire-choice-description",
|
|
165
|
+
className: cn("text-muted-foreground", className),
|
|
166
|
+
...props
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
function QuestionnaireInput({
|
|
171
|
+
className,
|
|
172
|
+
...props
|
|
173
|
+
}) {
|
|
174
|
+
return /* @__PURE__ */ jsx(
|
|
175
|
+
"div",
|
|
176
|
+
{
|
|
177
|
+
"data-slot": "questionnaire-input-wrapper",
|
|
178
|
+
className: "group/questionnaire-input relative w-full min-w-0",
|
|
179
|
+
children: /* @__PURE__ */ jsx(
|
|
180
|
+
QuestionnairePrimitive.Input,
|
|
181
|
+
{
|
|
182
|
+
"data-slot": "questionnaire-input",
|
|
183
|
+
className: cn(
|
|
184
|
+
"h-9 min-h-11 w-full min-w-0 rounded-control border border-input bg-input/30 px-3 py-1 text-base transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-(length:--ds-ring-width) focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-(length:--ds-ring-width) aria-invalid:ring-destructive/20 sm:min-h-0 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
|
185
|
+
"selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground",
|
|
186
|
+
className
|
|
187
|
+
),
|
|
188
|
+
...props
|
|
189
|
+
}
|
|
190
|
+
)
|
|
191
|
+
}
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
function QuestionnaireError({
|
|
195
|
+
className,
|
|
196
|
+
...props
|
|
197
|
+
}) {
|
|
198
|
+
return /* @__PURE__ */ jsx(
|
|
199
|
+
QuestionnairePrimitive.Error,
|
|
200
|
+
{
|
|
201
|
+
"data-slot": "questionnaire-error",
|
|
202
|
+
className: cn("mt-2 text-sm text-destructive", className),
|
|
203
|
+
...props
|
|
204
|
+
}
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
function QuestionnaireActions({
|
|
208
|
+
className,
|
|
209
|
+
...props
|
|
210
|
+
}) {
|
|
211
|
+
return /* @__PURE__ */ jsx(
|
|
212
|
+
"div",
|
|
213
|
+
{
|
|
214
|
+
"data-slot": "questionnaire-actions",
|
|
215
|
+
className: cn(
|
|
216
|
+
"grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-9",
|
|
217
|
+
className
|
|
218
|
+
),
|
|
219
|
+
...props
|
|
220
|
+
}
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
function QuestionnairePrevious({
|
|
224
|
+
children,
|
|
225
|
+
className,
|
|
226
|
+
size = "default",
|
|
227
|
+
variant = "outline",
|
|
228
|
+
...props
|
|
229
|
+
}) {
|
|
230
|
+
return /* @__PURE__ */ jsx(
|
|
231
|
+
QuestionnairePrimitive.Previous,
|
|
232
|
+
{
|
|
233
|
+
"data-slot": "questionnaire-previous",
|
|
234
|
+
"data-size": size,
|
|
235
|
+
"data-variant": variant,
|
|
236
|
+
className: cn(
|
|
237
|
+
buttonVariants({ size, variant }),
|
|
238
|
+
"col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0",
|
|
239
|
+
className
|
|
240
|
+
),
|
|
241
|
+
...props,
|
|
242
|
+
children: children ?? "Previous"
|
|
243
|
+
}
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
function QuestionnaireSkip({
|
|
247
|
+
children,
|
|
248
|
+
className,
|
|
249
|
+
size = "default",
|
|
250
|
+
variant = "outline",
|
|
251
|
+
...props
|
|
252
|
+
}) {
|
|
253
|
+
return /* @__PURE__ */ jsx(
|
|
254
|
+
QuestionnairePrimitive.Skip,
|
|
255
|
+
{
|
|
256
|
+
"data-slot": "questionnaire-skip",
|
|
257
|
+
"data-size": size,
|
|
258
|
+
"data-variant": variant,
|
|
259
|
+
className: cn(
|
|
260
|
+
buttonVariants({ size, variant }),
|
|
261
|
+
"col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0",
|
|
262
|
+
className
|
|
263
|
+
),
|
|
264
|
+
...props,
|
|
265
|
+
children: children ?? "Skip"
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
function QuestionnaireNext({
|
|
270
|
+
children,
|
|
271
|
+
className,
|
|
272
|
+
size = "default",
|
|
273
|
+
variant = "default",
|
|
274
|
+
...props
|
|
275
|
+
}) {
|
|
276
|
+
return /* @__PURE__ */ jsx(
|
|
277
|
+
QuestionnairePrimitive.Next,
|
|
278
|
+
{
|
|
279
|
+
"data-slot": "questionnaire-next",
|
|
280
|
+
"data-size": size,
|
|
281
|
+
"data-variant": variant,
|
|
282
|
+
className: cn(
|
|
283
|
+
buttonVariants({ size, variant }),
|
|
284
|
+
"col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0",
|
|
285
|
+
className
|
|
286
|
+
),
|
|
287
|
+
...props,
|
|
288
|
+
children: children ?? "Next"
|
|
289
|
+
}
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
function QuestionnaireSubmit({
|
|
293
|
+
children,
|
|
294
|
+
className,
|
|
295
|
+
size = "default",
|
|
296
|
+
variant = "default",
|
|
297
|
+
...props
|
|
298
|
+
}) {
|
|
299
|
+
return /* @__PURE__ */ jsx(
|
|
300
|
+
QuestionnairePrimitive.Submit,
|
|
301
|
+
{
|
|
302
|
+
"data-slot": "questionnaire-submit",
|
|
303
|
+
"data-size": size,
|
|
304
|
+
"data-variant": variant,
|
|
305
|
+
className: cn(
|
|
306
|
+
buttonVariants({ size, variant }),
|
|
307
|
+
"col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0",
|
|
308
|
+
className
|
|
309
|
+
),
|
|
310
|
+
...props,
|
|
311
|
+
children: children ?? "Submit"
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
export {
|
|
316
|
+
Questionnaire,
|
|
317
|
+
QuestionnaireActions,
|
|
318
|
+
QuestionnaireChoice,
|
|
319
|
+
QuestionnaireChoiceDescription,
|
|
320
|
+
QuestionnaireChoices,
|
|
321
|
+
QuestionnaireDescription,
|
|
322
|
+
QuestionnaireError,
|
|
323
|
+
QuestionnaireInput,
|
|
324
|
+
QuestionnaireItem,
|
|
325
|
+
QuestionnaireNext,
|
|
326
|
+
QuestionnairePrevious,
|
|
327
|
+
QuestionnaireProgress,
|
|
328
|
+
QuestionnaireSkip,
|
|
329
|
+
QuestionnaireSubmit,
|
|
330
|
+
QuestionnaireTitle
|
|
331
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Radio } from '@base-ui/react/radio';
|
|
3
|
+
import { RadioGroup as RadioGroup$1 } from '@base-ui/react/radio-group';
|
|
4
|
+
|
|
5
|
+
declare function RadioGroup({ className, ...props }: RadioGroup$1.Props): React.JSX.Element;
|
|
6
|
+
declare function RadioGroupItem({ className, ...props }: Radio.Root.Props): React.JSX.Element;
|
|
7
|
+
|
|
8
|
+
export { RadioGroup, RadioGroupItem };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
3
|
+
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
function RadioGroup({ className, ...props }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
RadioGroupPrimitive,
|
|
8
|
+
{
|
|
9
|
+
"data-slot": "radio-group",
|
|
10
|
+
className: cn("grid w-full gap-3", className),
|
|
11
|
+
...props
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
function RadioGroupItem({ className, ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(
|
|
17
|
+
RadioPrimitive.Root,
|
|
18
|
+
{
|
|
19
|
+
"data-slot": "radio-group-item",
|
|
20
|
+
className: cn(
|
|
21
|
+
"group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
...props,
|
|
25
|
+
children: /* @__PURE__ */ jsx(
|
|
26
|
+
RadioPrimitive.Indicator,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "radio-group-indicator",
|
|
29
|
+
className: "flex size-4 items-center justify-center",
|
|
30
|
+
children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
RadioGroup,
|
|
38
|
+
RadioGroupItem
|
|
39
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
3
|
+
|
|
4
|
+
declare function ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps): React.JSX.Element;
|
|
5
|
+
declare function ResizablePanel({ ...props }: ResizablePrimitive.PanelProps): React.JSX.Element;
|
|
6
|
+
declare function ResizableHandle({ withHandle, className, ...props }: ResizablePrimitive.SeparatorProps & {
|
|
7
|
+
withHandle?: boolean;
|
|
8
|
+
}): React.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
import * as ResizablePrimitive from "react-resizable-panels";
|
|
5
|
+
function ResizablePanelGroup({
|
|
6
|
+
className,
|
|
7
|
+
...props
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
ResizablePrimitive.Group,
|
|
11
|
+
{
|
|
12
|
+
"data-slot": "resizable-panel-group",
|
|
13
|
+
className: cn(
|
|
14
|
+
"flex h-full w-full aria-[orientation=vertical]:flex-col",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
...props
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
function ResizablePanel({ ...props }) {
|
|
22
|
+
return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
|
|
23
|
+
}
|
|
24
|
+
function ResizableHandle({
|
|
25
|
+
withHandle,
|
|
26
|
+
className,
|
|
27
|
+
...props
|
|
28
|
+
}) {
|
|
29
|
+
return /* @__PURE__ */ jsx(
|
|
30
|
+
ResizablePrimitive.Separator,
|
|
31
|
+
{
|
|
32
|
+
"data-slot": "resizable-handle",
|
|
33
|
+
className: cn(
|
|
34
|
+
"relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90",
|
|
35
|
+
className
|
|
36
|
+
),
|
|
37
|
+
...props,
|
|
38
|
+
children: withHandle && /* @__PURE__ */ jsx("div", { className: "z-(--ds-z-raised) flex h-6 w-1 shrink-0 rounded-lg bg-border" })
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
ResizableHandle,
|
|
44
|
+
ResizablePanel,
|
|
45
|
+
ResizablePanelGroup
|
|
46
|
+
};
|
package/dist/ui/scroll-area.js
CHANGED
|
@@ -17,7 +17,7 @@ function ScrollArea({
|
|
|
17
17
|
ScrollAreaPrimitive.Viewport,
|
|
18
18
|
{
|
|
19
19
|
"data-slot": "scroll-area-viewport",
|
|
20
|
-
className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-(length:--ring-width) focus-visible:ring-ring/50 focus-visible:outline-1",
|
|
20
|
+
className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-(length:--ds-ring-width) focus-visible:ring-ring/50 focus-visible:outline-1",
|
|
21
21
|
children
|
|
22
22
|
}
|
|
23
23
|
),
|
package/dist/ui/select.js
CHANGED
|
@@ -28,7 +28,7 @@ function SelectTrigger({
|
|
|
28
28
|
"data-slot": "select-trigger",
|
|
29
29
|
"data-size": size,
|
|
30
30
|
className: cn(
|
|
31
|
-
"flex w-fit items-center justify-between gap-1.5 rounded-control shadow-control border border-input bg-input/30 px-
|
|
31
|
+
"flex w-fit items-center justify-between gap-1.5 rounded-control shadow-control border border-input bg-input/30 px-(--ds-field-px) py-2 text-sm whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-(length:--ds-ring-width) focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-(length:--ds-ring-width) aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-(--ds-control-h-md) data-[size=sm]:h-(--ds-control-h-sm) *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
32
32
|
className
|
|
33
33
|
),
|
|
34
34
|
...props,
|
|
@@ -60,7 +60,7 @@ function SelectContent({
|
|
|
60
60
|
alignItemWithTrigger,
|
|
61
61
|
align,
|
|
62
62
|
className: cn(
|
|
63
|
-
"z-(--z-overlay)",
|
|
63
|
+
"z-(--ds-z-overlay)",
|
|
64
64
|
!alignItemWithTrigger && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1"
|
|
65
65
|
),
|
|
66
66
|
children: /* @__PURE__ */ jsxs(
|
|
@@ -69,7 +69,7 @@ function SelectContent({
|
|
|
69
69
|
"data-slot": "select-content",
|
|
70
70
|
"data-align-trigger": alignItemWithTrigger,
|
|
71
71
|
className: cn(
|
|
72
|
-
"relative z-(--z-overlay) max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-2xl bg-popover text-popover-foreground shadow-popover ring-1 ring-foreground/5 duration-(--motion-fast) data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
72
|
+
"relative z-(--ds-z-overlay) max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-2xl bg-popover text-popover-foreground shadow-popover ring-1 ring-foreground/5 duration-(--ds-motion-fast) data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
73
73
|
className
|
|
74
74
|
),
|
|
75
75
|
...props,
|
|
@@ -152,7 +152,7 @@ function SelectScrollUpButton({
|
|
|
152
152
|
{
|
|
153
153
|
"data-slot": "select-scroll-up-button",
|
|
154
154
|
className: cn(
|
|
155
|
-
"z-(--z-raised) flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
|
|
155
|
+
"z-(--ds-z-raised) flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
|
|
156
156
|
className
|
|
157
157
|
),
|
|
158
158
|
...props,
|
|
@@ -169,7 +169,7 @@ function SelectScrollDownButton({
|
|
|
169
169
|
{
|
|
170
170
|
"data-slot": "select-scroll-down-button",
|
|
171
171
|
className: cn(
|
|
172
|
-
"z-(--z-raised) flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
|
|
172
|
+
"z-(--ds-z-raised) flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
|
|
173
173
|
className
|
|
174
174
|
),
|
|
175
175
|
...props,
|
package/dist/ui/sheet.js
CHANGED
|
@@ -22,7 +22,7 @@ function SheetOverlay({ className, ...props }) {
|
|
|
22
22
|
{
|
|
23
23
|
"data-slot": "sheet-overlay",
|
|
24
24
|
className: cn(
|
|
25
|
-
"fixed inset-0 z-(--z-overlay) bg-scrim duration-(--motion-fast) supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
25
|
+
"fixed inset-0 z-(--ds-z-overlay) bg-scrim duration-(--ds-motion-fast) supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
26
26
|
className
|
|
27
27
|
),
|
|
28
28
|
...props
|
|
@@ -44,7 +44,7 @@ function SheetContent({
|
|
|
44
44
|
"data-slot": "sheet-content",
|
|
45
45
|
"data-side": side,
|
|
46
46
|
className: cn(
|
|
47
|
-
"fixed z-(--z-overlay) flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-overlay transition duration-(--motion-base) ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",
|
|
47
|
+
"fixed z-(--ds-z-overlay) flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-overlay transition duration-(--ds-motion-base) ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",
|
|
48
48
|
className
|
|
49
49
|
),
|
|
50
50
|
...props,
|
|
@@ -78,7 +78,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
78
78
|
"div",
|
|
79
79
|
{
|
|
80
80
|
"data-slot": "sheet-header",
|
|
81
|
-
className: cn("flex flex-col gap-1.5 p-
|
|
81
|
+
className: cn("flex flex-col gap-1.5 p-(--ds-overlay-p)", className),
|
|
82
82
|
...props
|
|
83
83
|
}
|
|
84
84
|
);
|
|
@@ -88,7 +88,7 @@ function SheetFooter({ className, ...props }) {
|
|
|
88
88
|
"div",
|
|
89
89
|
{
|
|
90
90
|
"data-slot": "sheet-footer",
|
|
91
|
-
className: cn("mt-auto flex flex-col gap-2 p-
|
|
91
|
+
className: cn("mt-auto flex flex-col gap-2 p-(--ds-overlay-p)", className),
|
|
92
92
|
...props
|
|
93
93
|
}
|
|
94
94
|
);
|
package/dist/ui/sidebar.js
CHANGED
|
@@ -167,7 +167,7 @@ function Sidebar({
|
|
|
167
167
|
{
|
|
168
168
|
"data-slot": "sidebar-gap",
|
|
169
169
|
className: cn(
|
|
170
|
-
"relative w-(--sidebar-width) bg-transparent transition-[width] duration-(--motion-base) ease-linear",
|
|
170
|
+
"relative w-(--sidebar-width) bg-transparent transition-[width] duration-(--ds-motion-base) ease-linear",
|
|
171
171
|
"group-data-[collapsible=offcanvas]:w-0",
|
|
172
172
|
"group-data-[side=right]:rotate-180",
|
|
173
173
|
variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
|
|
@@ -180,7 +180,7 @@ function Sidebar({
|
|
|
180
180
|
"data-slot": "sidebar-container",
|
|
181
181
|
"data-side": side,
|
|
182
182
|
className: cn(
|
|
183
|
-
"fixed inset-y-0 z-(--z-raised) hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-(--motion-base) ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
|
|
183
|
+
"fixed inset-y-0 z-(--ds-z-raised) hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-(--ds-motion-base) ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
|
|
184
184
|
// Adjust the padding for floating and inset variants.
|
|
185
185
|
variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
|
|
186
186
|
className
|
|
@@ -239,7 +239,7 @@ function SidebarRail({ className, ...props }) {
|
|
|
239
239
|
onClick: toggleSidebar,
|
|
240
240
|
title: "Toggle Sidebar",
|
|
241
241
|
className: cn(
|
|
242
|
-
"absolute inset-y-0 z-(--z-sticky) hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
|
|
242
|
+
"absolute inset-y-0 z-(--ds-z-sticky) hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
|
|
243
243
|
"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
|
|
244
244
|
"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
|
|
245
245
|
"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar",
|
|
@@ -353,7 +353,7 @@ function SidebarGroupLabel({
|
|
|
353
353
|
{
|
|
354
354
|
"data-sidebar": "group-label",
|
|
355
355
|
className: cn(
|
|
356
|
-
"flex h-8 shrink-0 items-center rounded-md px-3 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-(--motion-base) ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
356
|
+
"flex h-8 shrink-0 items-center rounded-md px-3 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-(--ds-motion-base) ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
357
357
|
className
|
|
358
358
|
)
|
|
359
359
|
},
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Slider as SliderPrimitive } from "@base-ui/react/slider";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
function Slider({
|
|
5
|
+
className,
|
|
6
|
+
defaultValue,
|
|
7
|
+
value,
|
|
8
|
+
min = 0,
|
|
9
|
+
max = 100,
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
const _values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max];
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
SliderPrimitive.Root,
|
|
15
|
+
{
|
|
16
|
+
className: cn("data-horizontal:w-full data-vertical:h-full", className),
|
|
17
|
+
"data-slot": "slider",
|
|
18
|
+
defaultValue,
|
|
19
|
+
value,
|
|
20
|
+
min,
|
|
21
|
+
max,
|
|
22
|
+
thumbAlignment: "edge",
|
|
23
|
+
...props,
|
|
24
|
+
children: /* @__PURE__ */ jsxs(SliderPrimitive.Control, { className: "relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col", children: [
|
|
25
|
+
/* @__PURE__ */ jsx(
|
|
26
|
+
SliderPrimitive.Track,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "slider-track",
|
|
29
|
+
className: "relative grow overflow-hidden rounded-control bg-muted select-none data-horizontal:h-3 data-horizontal:w-full data-vertical:h-full data-vertical:w-3",
|
|
30
|
+
children: /* @__PURE__ */ jsx(
|
|
31
|
+
SliderPrimitive.Indicator,
|
|
32
|
+
{
|
|
33
|
+
"data-slot": "slider-range",
|
|
34
|
+
className: "bg-primary select-none data-horizontal:h-full data-vertical:w-full"
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(
|
|
40
|
+
SliderPrimitive.Thumb,
|
|
41
|
+
{
|
|
42
|
+
"data-slot": "slider-thumb",
|
|
43
|
+
className: "block size-4 shrink-0 rounded-control border border-primary bg-primary-foreground shadow-raised ring-ring/50 transition-colors select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
|
|
44
|
+
},
|
|
45
|
+
index
|
|
46
|
+
))
|
|
47
|
+
] })
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
Slider
|
|
53
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils";
|
|
3
|
+
import { Loader2Icon } from "lucide-react";
|
|
4
|
+
function Spinner({ className, ...props }) {
|
|
5
|
+
return /* @__PURE__ */ jsx(Loader2Icon, { "data-slot": "spinner", role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
Spinner
|
|
9
|
+
};
|