raft-ui 0.0.7 → 0.0.9
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/CHANGELOG.md +15 -2
- package/dist/{button-CJqMhTPQ.mjs → button-jUlaK4eN.mjs} +112 -11
- package/dist/{index-CpGciYPW.d.mts → index-lPUAF7fl.d.mts} +2 -2
- package/dist/index.d.mts +367 -2
- package/dist/index.mjs +624 -13
- package/dist/styles.css +80 -4
- package/dist/wip.d.mts +76 -140
- package/dist/wip.mjs +161 -314
- package/package.json +4 -2
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { a as useThemeFamily, c as tv, i as useTheme, n as buttonVariants, o as ThemeContext, r as Spinner, s as ThemeStateContext, t as Button } from "./button-CJqMhTPQ.mjs";
|
|
2
1
|
import { cn } from "./cn.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { a as useThemeFamily, c as tv, i as useTheme, n as buttonVariants, o as ThemeContext, r as Spinner, s as ThemeStateContext, t as Button } from "./button-jUlaK4eN.mjs";
|
|
3
|
+
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
4
|
+
import { AlertTriangle, Check, CheckCircle2, ChevronDown, Copy, Info, Minus, X } from "lucide-react";
|
|
5
|
+
import { createContext, use, useCallback, useContext, useEffect, useId, useMemo, useState, useSyncExternalStore } from "react";
|
|
4
6
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
5
7
|
import { useRender } from "@base-ui/react/use-render";
|
|
6
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { useClipboard } from "foxact/use-clipboard";
|
|
7
10
|
import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
|
|
8
|
-
import { AlertTriangle, Check, CheckCircle2, ChevronDown, Info, Minus, X } from "lucide-react";
|
|
9
11
|
import { Avatar as Avatar$1, ContextMenu as ContextMenu$1 } from "@base-ui/react";
|
|
10
12
|
import { Menu } from "@base-ui/react/menu";
|
|
11
13
|
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
@@ -16,10 +18,500 @@ import { Combobox as Combobox$1 } from "@base-ui/react/combobox";
|
|
|
16
18
|
import { Select as Select$1 } from "@base-ui/react/select";
|
|
17
19
|
import { Radio } from "@base-ui/react/radio";
|
|
18
20
|
import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
|
|
21
|
+
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
19
22
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
20
23
|
import { DndContext, PointerSensor, TouchSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
|
|
21
24
|
import { SortableContext, arrayMove, horizontalListSortingStrategy, useSortable } from "@dnd-kit/sortable";
|
|
22
25
|
import { Separator as Separator$1 } from "@base-ui/react/separator";
|
|
26
|
+
//#region src/components/alert-dialog/alert-dialog.tsx
|
|
27
|
+
const alertDialog = tv({
|
|
28
|
+
slots: {
|
|
29
|
+
overlay: [
|
|
30
|
+
"fixed inset-0 z-50",
|
|
31
|
+
"transition-opacity duration-150 ease-out",
|
|
32
|
+
"data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
|
|
33
|
+
],
|
|
34
|
+
content: [
|
|
35
|
+
"fixed top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] max-w-[408px] -translate-x-1/2 -translate-y-1/2",
|
|
36
|
+
"origin-center transform-gpu outline-none transition-[opacity,transform] duration-150 ease-out",
|
|
37
|
+
"data-[starting-style]:scale-[.98] data-[starting-style]:opacity-0",
|
|
38
|
+
"data-[ending-style]:opacity-0"
|
|
39
|
+
],
|
|
40
|
+
header: ["grid grid-cols-[minmax(0,1fr)_max-content] items-center gap-3 min-w-0"],
|
|
41
|
+
body: ["min-w-0"],
|
|
42
|
+
footer: ["flex items-center justify-end gap-3"],
|
|
43
|
+
title: ["m-0 min-w-0 text-foreground-strong"],
|
|
44
|
+
description: ["m-0 text-foreground-muted"]
|
|
45
|
+
},
|
|
46
|
+
variants: { theme: {
|
|
47
|
+
brutal: {
|
|
48
|
+
overlay: ["bg-layer-backdrop"],
|
|
49
|
+
content: ["gap-4 border-2 border-line-strong bg-layer-panel px-6 py-4 shadow-xl"],
|
|
50
|
+
body: ["py-2 font-medium"],
|
|
51
|
+
title: ["font-heading text-lg leading-none font-bold uppercase"],
|
|
52
|
+
description: ["font-sans text-sm leading-5 text-foreground/60"]
|
|
53
|
+
},
|
|
54
|
+
elegant: {
|
|
55
|
+
overlay: ["bg-layer-backdrop backdrop-blur-[2px]"],
|
|
56
|
+
content: ["overflow-clip rounded-lg bg-layer-popover shadow-xl"],
|
|
57
|
+
header: ["border-b border-line-subtle bg-black/[0.02] px-5 py-3"],
|
|
58
|
+
body: ["px-6 py-5"],
|
|
59
|
+
footer: ["border-t border-line-subtle bg-black/[0.015] px-5 py-3"],
|
|
60
|
+
title: ["font-sans text-sm leading-5 font-medium tracking-[-0.005em]"],
|
|
61
|
+
description: ["font-sans text-sm leading-5 text-[oklch(0.48_0_0)] dark:text-[oklch(0.76_0_0)]"]
|
|
62
|
+
}
|
|
63
|
+
} }
|
|
64
|
+
});
|
|
65
|
+
function AlertDialog(props) {
|
|
66
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
67
|
+
"data-slot": "alert-dialog",
|
|
68
|
+
...props
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function AlertDialogTrigger(props) {
|
|
72
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
73
|
+
"data-slot": "alert-dialog-trigger",
|
|
74
|
+
...props
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function AlertDialogPortal(props) {
|
|
78
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
79
|
+
"data-slot": "alert-dialog-portal",
|
|
80
|
+
...props
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function AlertDialogClose({ className, variant, size, children, ...props }) {
|
|
84
|
+
const isBrutal = useThemeFamily() === "brutal";
|
|
85
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
86
|
+
"data-slot": "alert-dialog-close",
|
|
87
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
88
|
+
variant: variant ?? (isBrutal ? "outline" : "ghost"),
|
|
89
|
+
size: size ?? (isBrutal ? "icon-md" : "icon-sm"),
|
|
90
|
+
"aria-label": "Close",
|
|
91
|
+
className: isBrutal ? className : cn("p-0 text-foreground-placeholder hover:border-transparent hover:bg-transparent hover:text-foreground", className)
|
|
92
|
+
}),
|
|
93
|
+
...props,
|
|
94
|
+
children: children ?? /* @__PURE__ */ jsx(X, { className: isBrutal ? "size-5" : "size-4" })
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function AlertDialogOverlay({ className, ...props }) {
|
|
98
|
+
const theme = useThemeFamily();
|
|
99
|
+
const { overlay } = alertDialog({ theme });
|
|
100
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
101
|
+
"data-slot": "alert-dialog-overlay",
|
|
102
|
+
"data-theme": theme,
|
|
103
|
+
className: overlay({ className }),
|
|
104
|
+
...props
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function AlertDialogContent({ className, children, portalProps, overlay, ...props }) {
|
|
108
|
+
const theme = useThemeFamily();
|
|
109
|
+
const { resolvedMode } = useTheme();
|
|
110
|
+
const { content } = alertDialog({ theme });
|
|
111
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, {
|
|
112
|
+
...portalProps,
|
|
113
|
+
children: [overlay === false ? null : /* @__PURE__ */ jsx(AlertDialogOverlay, { ...overlay }), /* @__PURE__ */ jsx(Dialog$1.Popup, {
|
|
114
|
+
"data-slot": "alert-dialog-content",
|
|
115
|
+
"data-theme": theme,
|
|
116
|
+
className: cn(content({ className }), resolvedMode === "dark" && "dark"),
|
|
117
|
+
...props,
|
|
118
|
+
role: "alertdialog",
|
|
119
|
+
children
|
|
120
|
+
})]
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
124
|
+
const { header } = alertDialog({ theme: useThemeFamily() });
|
|
125
|
+
return /* @__PURE__ */ jsx("div", {
|
|
126
|
+
"data-slot": "alert-dialog-header",
|
|
127
|
+
className: header({ className }),
|
|
128
|
+
...props
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function AlertDialogBody({ className, ...props }) {
|
|
132
|
+
const { body } = alertDialog({ theme: useThemeFamily() });
|
|
133
|
+
return /* @__PURE__ */ jsx("div", {
|
|
134
|
+
"data-slot": "alert-dialog-body",
|
|
135
|
+
className: body({ className }),
|
|
136
|
+
...props
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
140
|
+
const { footer } = alertDialog({ theme: useThemeFamily() });
|
|
141
|
+
return /* @__PURE__ */ jsx("div", {
|
|
142
|
+
"data-slot": "alert-dialog-footer",
|
|
143
|
+
className: footer({ className }),
|
|
144
|
+
...props
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function AlertDialogTitle({ className, ...props }) {
|
|
148
|
+
const { title } = alertDialog({ theme: useThemeFamily() });
|
|
149
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
150
|
+
"data-slot": "alert-dialog-title",
|
|
151
|
+
className: title({ className }),
|
|
152
|
+
...props
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function AlertDialogDescription({ className, ...props }) {
|
|
156
|
+
const { description } = alertDialog({ theme: useThemeFamily() });
|
|
157
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
158
|
+
"data-slot": "alert-dialog-description",
|
|
159
|
+
className: description({ className }),
|
|
160
|
+
...props
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function AlertDialogAction(props) {
|
|
164
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
165
|
+
"data-slot": "alert-dialog-action",
|
|
166
|
+
...props
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function AlertDialogCancel({ className, variant = "outline", size = "sm", ...props }) {
|
|
170
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
171
|
+
"data-slot": "alert-dialog-cancel",
|
|
172
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
173
|
+
className,
|
|
174
|
+
variant,
|
|
175
|
+
size
|
|
176
|
+
}),
|
|
177
|
+
...props
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//#endregion
|
|
181
|
+
//#region src/components/dialog/dialog.tsx
|
|
182
|
+
const dialog = tv({
|
|
183
|
+
slots: {
|
|
184
|
+
overlay: [
|
|
185
|
+
"fixed inset-0 z-50",
|
|
186
|
+
"transition-opacity duration-150 ease-out",
|
|
187
|
+
"data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
|
|
188
|
+
],
|
|
189
|
+
content: [
|
|
190
|
+
"fixed top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2",
|
|
191
|
+
"origin-center transform-gpu outline-none transition-[opacity,transform] duration-150 ease-out",
|
|
192
|
+
"data-[starting-style]:scale-[.98] data-[starting-style]:opacity-0",
|
|
193
|
+
"data-[ending-style]:opacity-0"
|
|
194
|
+
],
|
|
195
|
+
header: ["grid grid-cols-[minmax(0,1fr)_max-content] items-center gap-3 min-w-0"],
|
|
196
|
+
body: ["min-w-0"],
|
|
197
|
+
footer: ["flex items-center justify-end gap-3"],
|
|
198
|
+
title: ["m-0 min-w-0 text-foreground-strong"],
|
|
199
|
+
description: ["m-0 text-foreground-muted"]
|
|
200
|
+
},
|
|
201
|
+
variants: { theme: {
|
|
202
|
+
brutal: {
|
|
203
|
+
overlay: ["bg-layer-backdrop"],
|
|
204
|
+
content: ["gap-4 border-2 border-line-strong bg-layer-panel px-6 py-4 shadow-xl"],
|
|
205
|
+
body: ["py-2 font-medium"],
|
|
206
|
+
title: ["font-heading text-lg leading-none font-bold uppercase"],
|
|
207
|
+
description: ["font-sans text-sm leading-5 text-foreground/60"]
|
|
208
|
+
},
|
|
209
|
+
elegant: {
|
|
210
|
+
overlay: ["bg-layer-backdrop backdrop-blur-[2px]"],
|
|
211
|
+
content: ["overflow-clip rounded-lg bg-layer-popover shadow-xl"],
|
|
212
|
+
header: ["border-b border-line-subtle bg-black/[0.02] px-6 py-3"],
|
|
213
|
+
body: ["px-6 py-5"],
|
|
214
|
+
footer: ["border-t border-line-subtle bg-black/[0.015] px-6 py-3"],
|
|
215
|
+
title: ["font-sans text-sm leading-5 font-medium tracking-[-0.005em]"],
|
|
216
|
+
description: ["font-sans text-sm leading-5 text-[oklch(0.48_0_0)] dark:text-[oklch(0.76_0_0)]"]
|
|
217
|
+
}
|
|
218
|
+
} }
|
|
219
|
+
});
|
|
220
|
+
function Dialog(props) {
|
|
221
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
222
|
+
"data-slot": "dialog",
|
|
223
|
+
...props
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
function DialogTrigger(props) {
|
|
227
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
228
|
+
"data-slot": "dialog-trigger",
|
|
229
|
+
...props
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
function DialogPortal(props) {
|
|
233
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
234
|
+
"data-slot": "dialog-portal",
|
|
235
|
+
...props
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
function DialogOverlay({ className, ...props }) {
|
|
239
|
+
const theme = useThemeFamily();
|
|
240
|
+
const { overlay } = dialog({ theme });
|
|
241
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
242
|
+
"data-slot": "dialog-overlay",
|
|
243
|
+
"data-theme": theme,
|
|
244
|
+
className: overlay({ className }),
|
|
245
|
+
...props
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function DialogContent({ className, children, portalProps, overlay, ...props }) {
|
|
249
|
+
const theme = useThemeFamily();
|
|
250
|
+
const { resolvedMode } = useTheme();
|
|
251
|
+
const { content } = dialog({ theme });
|
|
252
|
+
return /* @__PURE__ */ jsxs(DialogPortal, {
|
|
253
|
+
...portalProps,
|
|
254
|
+
children: [overlay === false ? null : /* @__PURE__ */ jsx(DialogOverlay, { ...overlay }), /* @__PURE__ */ jsx(Dialog$1.Popup, {
|
|
255
|
+
"data-slot": "dialog-content",
|
|
256
|
+
"data-theme": theme,
|
|
257
|
+
className: cn(content({ className }), resolvedMode === "dark" && "dark"),
|
|
258
|
+
...props,
|
|
259
|
+
children
|
|
260
|
+
})]
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function DialogClose({ className, variant, size, children, render, ...props }) {
|
|
264
|
+
const isBrutal = useThemeFamily() === "brutal";
|
|
265
|
+
if (render) return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
266
|
+
"data-slot": "dialog-close",
|
|
267
|
+
render,
|
|
268
|
+
...props,
|
|
269
|
+
children
|
|
270
|
+
});
|
|
271
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
272
|
+
"data-slot": "dialog-close",
|
|
273
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
274
|
+
variant: variant ?? (isBrutal ? "outline" : "ghost"),
|
|
275
|
+
size: size ?? (isBrutal ? "icon-md" : "icon-sm"),
|
|
276
|
+
"aria-label": "Close",
|
|
277
|
+
className: isBrutal ? className : cn("p-0 text-foreground-placeholder hover:border-transparent hover:bg-transparent hover:text-foreground", className)
|
|
278
|
+
}),
|
|
279
|
+
...props,
|
|
280
|
+
children: children ?? /* @__PURE__ */ jsx(X, { className: isBrutal ? "size-5" : "size-4" })
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
function DialogHeader({ className, ...props }) {
|
|
284
|
+
const { header } = dialog({ theme: useThemeFamily() });
|
|
285
|
+
return /* @__PURE__ */ jsx("div", {
|
|
286
|
+
"data-slot": "dialog-header",
|
|
287
|
+
className: header({ className }),
|
|
288
|
+
...props
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function DialogBody({ className, ...props }) {
|
|
292
|
+
const { body } = dialog({ theme: useThemeFamily() });
|
|
293
|
+
return /* @__PURE__ */ jsx("div", {
|
|
294
|
+
"data-slot": "dialog-body",
|
|
295
|
+
className: body({ className }),
|
|
296
|
+
...props
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function DialogFooter({ className, ...props }) {
|
|
300
|
+
const { footer } = dialog({ theme: useThemeFamily() });
|
|
301
|
+
return /* @__PURE__ */ jsx("div", {
|
|
302
|
+
"data-slot": "dialog-footer",
|
|
303
|
+
className: footer({ className }),
|
|
304
|
+
...props
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function DialogTitle({ className, ...props }) {
|
|
308
|
+
const { title } = dialog({ theme: useThemeFamily() });
|
|
309
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
310
|
+
"data-slot": "dialog-title",
|
|
311
|
+
className: title({ className }),
|
|
312
|
+
...props
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
function DialogDescription({ className, ...props }) {
|
|
316
|
+
const { description } = dialog({ theme: useThemeFamily() });
|
|
317
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
318
|
+
"data-slot": "dialog-description",
|
|
319
|
+
className: description({ className }),
|
|
320
|
+
...props
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
//#endregion
|
|
324
|
+
//#region src/components/copyable-code/copyable-code.tsx
|
|
325
|
+
const copyableCode = tv({
|
|
326
|
+
slots: {
|
|
327
|
+
root: ["group/copyable-code flex w-full min-w-0 items-center gap-2"],
|
|
328
|
+
code: ["min-w-0 flex-1 font-mono text-xs"],
|
|
329
|
+
codeInner: ["block w-full min-w-0 max-w-full break-all"],
|
|
330
|
+
action: [
|
|
331
|
+
"shrink-0",
|
|
332
|
+
"[&_[data-slot=button]]:transition-[color,background-color,box-shadow]",
|
|
333
|
+
"[&_[data-slot=button]]:duration-150 [&_[data-slot=button]]:ease-out"
|
|
334
|
+
],
|
|
335
|
+
iconSwap: [
|
|
336
|
+
"relative inline-grid size-3",
|
|
337
|
+
"[&_[data-slot=copyable-code-icon]]:col-start-1 [&_[data-slot=copyable-code-icon]]:row-start-1",
|
|
338
|
+
"[&_[data-slot=copyable-code-icon]]:origin-center",
|
|
339
|
+
"[&_[data-slot=copyable-code-icon]]:transition-[opacity,filter,scale]",
|
|
340
|
+
"[&_[data-slot=copyable-code-icon]]:duration-[170ms]",
|
|
341
|
+
"[&_[data-slot=copyable-code-icon]]:ease-[cubic-bezier(0.16,1,0.3,1)]",
|
|
342
|
+
"[&_[data-slot=copyable-code-icon]]:will-change-[opacity,filter,scale]",
|
|
343
|
+
"motion-reduce:[&_[data-slot=copyable-code-icon]]:transition-none",
|
|
344
|
+
"data-[state=idle]:[&_[data-icon=copy]]:scale-100 data-[state=idle]:[&_[data-icon=copy]]:opacity-100 data-[state=idle]:[&_[data-icon=copy]]:blur-0",
|
|
345
|
+
"data-[state=idle]:[&_[data-icon=check]]:scale-[0.72] data-[state=idle]:[&_[data-icon=check]]:opacity-0 data-[state=idle]:[&_[data-icon=check]]:blur-[1px]",
|
|
346
|
+
"data-[state=copied]:[&_[data-icon=check]]:scale-100 data-[state=copied]:[&_[data-icon=check]]:opacity-100 data-[state=copied]:[&_[data-icon=check]]:blur-0",
|
|
347
|
+
"data-[state=copied]:[&_[data-icon=copy]]:scale-[0.72] data-[state=copied]:[&_[data-icon=copy]]:opacity-0 data-[state=copied]:[&_[data-icon=copy]]:blur-[1px]"
|
|
348
|
+
]
|
|
349
|
+
},
|
|
350
|
+
variants: {
|
|
351
|
+
theme: {
|
|
352
|
+
brutal: {
|
|
353
|
+
code: ["border-2 border-line-strong bg-black text-[oklch(0.88_0.18_132)] shadow-sm"],
|
|
354
|
+
codeInner: "break-all"
|
|
355
|
+
},
|
|
356
|
+
elegant: {
|
|
357
|
+
code: [
|
|
358
|
+
"bg-[oklch(0.988_0.002_286)] text-[oklch(0.45_0.04_74)]",
|
|
359
|
+
"shadow-[0_0_0_0.5px_oklch(0_0_0_/_0.22)]",
|
|
360
|
+
"dark:bg-layer-panel dark:text-[oklch(0.82_0.06_90)] dark:shadow-[0_0_0_0.5px_oklch(1_0_0_/_0.16)]"
|
|
361
|
+
],
|
|
362
|
+
codeInner: ["border-x border-dashed border-[oklch(0_0_0_/_0.12)] bg-white px-1", "dark:border-[oklch(1_0_0_/_0.14)] dark:bg-layer-popover"],
|
|
363
|
+
action: [
|
|
364
|
+
"[&_[data-slot=button]]:text-foreground-muted",
|
|
365
|
+
"[&_[data-slot=button]]:shadow-none",
|
|
366
|
+
"[&_[data-slot=button]]:hover:bg-transparent [&_[data-slot=button]]:hover:text-foreground-strong [&_[data-slot=button]]:hover:before:bg-transparent"
|
|
367
|
+
]
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
size: {
|
|
371
|
+
sm: { code: "px-3 py-1.5 leading-5" },
|
|
372
|
+
md: { code: "px-3 py-2 leading-5" }
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
defaultVariants: { size: "md" },
|
|
376
|
+
compoundVariants: [{
|
|
377
|
+
theme: "elegant",
|
|
378
|
+
size: "sm",
|
|
379
|
+
class: {
|
|
380
|
+
code: "px-2 py-0",
|
|
381
|
+
codeInner: "py-1.5 leading-5"
|
|
382
|
+
}
|
|
383
|
+
}, {
|
|
384
|
+
theme: "elegant",
|
|
385
|
+
size: "md",
|
|
386
|
+
class: {
|
|
387
|
+
code: "px-2 py-0",
|
|
388
|
+
codeInner: "py-2 leading-5"
|
|
389
|
+
}
|
|
390
|
+
}]
|
|
391
|
+
});
|
|
392
|
+
const CopyableCodeContext = createContext(null);
|
|
393
|
+
function useCopyableCode(part) {
|
|
394
|
+
const context = useContext(CopyableCodeContext);
|
|
395
|
+
if (!context) throw new Error(`${part} must be used inside CopyableCode.Root.`);
|
|
396
|
+
return context;
|
|
397
|
+
}
|
|
398
|
+
function CopyableCodeRoot({ copied, onCopy, size = "md", className, ...props }) {
|
|
399
|
+
const { root } = copyableCode({
|
|
400
|
+
theme: useThemeFamily(),
|
|
401
|
+
size
|
|
402
|
+
});
|
|
403
|
+
const { copied: clipboardCopied, copy } = useClipboard({ timeout: 1400 });
|
|
404
|
+
const effectiveCopied = copied ?? clipboardCopied;
|
|
405
|
+
const copyValue = useCallback(async (value) => {
|
|
406
|
+
await copy(value);
|
|
407
|
+
await onCopy?.(value);
|
|
408
|
+
}, [copy, onCopy]);
|
|
409
|
+
const context = useMemo(() => ({
|
|
410
|
+
copied: effectiveCopied,
|
|
411
|
+
copyValue,
|
|
412
|
+
size
|
|
413
|
+
}), [
|
|
414
|
+
copyValue,
|
|
415
|
+
effectiveCopied,
|
|
416
|
+
size
|
|
417
|
+
]);
|
|
418
|
+
return /* @__PURE__ */ jsx(CopyableCodeContext.Provider, {
|
|
419
|
+
value: context,
|
|
420
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
421
|
+
"data-slot": "copyable-code",
|
|
422
|
+
"data-size": size,
|
|
423
|
+
"data-state": effectiveCopied ? "copied" : "idle",
|
|
424
|
+
className: root({ className }),
|
|
425
|
+
...props
|
|
426
|
+
})
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
function CopyableCodeCode({ children, className, truncate, ...props }) {
|
|
430
|
+
const { size } = useCopyableCode("CopyableCode.Code");
|
|
431
|
+
const { code, codeInner } = copyableCode({
|
|
432
|
+
theme: useThemeFamily(),
|
|
433
|
+
size
|
|
434
|
+
});
|
|
435
|
+
const scrollClassName = "overflow-x-auto overflow-y-hidden break-normal whitespace-nowrap text-clip [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
|
|
436
|
+
return /* @__PURE__ */ jsx("code", {
|
|
437
|
+
"data-slot": "copyable-code-code",
|
|
438
|
+
"data-truncate": truncate ? "true" : void 0,
|
|
439
|
+
className: code({ className }),
|
|
440
|
+
...props,
|
|
441
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
442
|
+
"data-slot": "copyable-code-code-inner",
|
|
443
|
+
className: codeInner({ className: [truncate && scrollClassName] }),
|
|
444
|
+
children
|
|
445
|
+
})
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
function CopyableCodeAction({ ariaLabel = "Copy code", children, buttonClassName, className, copiedAriaLabel = "Copied code", onClick, size, variant, ...props }) {
|
|
449
|
+
const { copied, copyValue } = useCopyableCode("CopyableCode.Action");
|
|
450
|
+
const theme = useThemeFamily();
|
|
451
|
+
const { action } = copyableCode({ theme });
|
|
452
|
+
const accessibleLabel = copied ? copiedAriaLabel : ariaLabel;
|
|
453
|
+
const buttonSize = size ?? (theme === "elegant" ? "icon-xs" : "icon-sm");
|
|
454
|
+
const buttonVariant = variant ?? (theme === "elegant" ? "ghost" : "outline");
|
|
455
|
+
const handleClick = async (event) => {
|
|
456
|
+
await copyValue(event.currentTarget.closest("[data-slot=\"copyable-code\"]")?.querySelector("[data-slot=\"copyable-code-code\"]")?.textContent ?? "");
|
|
457
|
+
onClick?.(event);
|
|
458
|
+
};
|
|
459
|
+
return /* @__PURE__ */ jsx("span", {
|
|
460
|
+
"data-slot": "copyable-code-action",
|
|
461
|
+
className: action({ className }),
|
|
462
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
463
|
+
type: "button",
|
|
464
|
+
variant: buttonVariant,
|
|
465
|
+
size: buttonSize,
|
|
466
|
+
"aria-label": accessibleLabel,
|
|
467
|
+
"aria-live": "polite",
|
|
468
|
+
onClick: handleClick,
|
|
469
|
+
className: buttonClassName,
|
|
470
|
+
...props,
|
|
471
|
+
children: typeof children === "function" ? children({ copied }) : children ?? /* @__PURE__ */ jsx(CopyableCodeActionIcon, { copied })
|
|
472
|
+
})
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
function CopyableCodeActionIcon({ copied }) {
|
|
476
|
+
const { iconSwap } = copyableCode();
|
|
477
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
478
|
+
"data-slot": "copyable-code-icon-swap",
|
|
479
|
+
"data-state": copied ? "copied" : "idle",
|
|
480
|
+
className: iconSwap(),
|
|
481
|
+
"aria-hidden": true,
|
|
482
|
+
children: [/* @__PURE__ */ jsx(Copy, {
|
|
483
|
+
"data-slot": "copyable-code-icon",
|
|
484
|
+
"data-icon": "copy",
|
|
485
|
+
className: "size-3",
|
|
486
|
+
strokeWidth: 1.75
|
|
487
|
+
}), /* @__PURE__ */ jsx(Check, {
|
|
488
|
+
"data-slot": "copyable-code-icon",
|
|
489
|
+
"data-icon": "check",
|
|
490
|
+
className: "size-3",
|
|
491
|
+
strokeWidth: 1.75
|
|
492
|
+
})]
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
function CopyableCodePreset({ actionClassName, ariaLabel, codeClassName, children, copiedAriaLabel, truncate, ...props }) {
|
|
496
|
+
return /* @__PURE__ */ jsxs(CopyableCodeRoot, {
|
|
497
|
+
...props,
|
|
498
|
+
children: [/* @__PURE__ */ jsx(CopyableCodeCode, {
|
|
499
|
+
className: codeClassName,
|
|
500
|
+
truncate,
|
|
501
|
+
children
|
|
502
|
+
}), /* @__PURE__ */ jsx(CopyableCodeAction, {
|
|
503
|
+
ariaLabel,
|
|
504
|
+
className: actionClassName,
|
|
505
|
+
copiedAriaLabel
|
|
506
|
+
})]
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
const CopyableCode = Object.assign(CopyableCodePreset, {
|
|
510
|
+
Action: CopyableCodeAction,
|
|
511
|
+
Code: CopyableCodeCode,
|
|
512
|
+
Root: CopyableCodeRoot
|
|
513
|
+
});
|
|
514
|
+
//#endregion
|
|
23
515
|
//#region src/components/checkbox/checkbox-indicator.tsx
|
|
24
516
|
const checkboxIndicator = tv({
|
|
25
517
|
slots: { root: [
|
|
@@ -1477,7 +1969,7 @@ const popover = tv({
|
|
|
1477
1969
|
description: ["text-xs leading-5 text-foreground-muted"],
|
|
1478
1970
|
close: ["text-[11px] font-medium tracking-[-0.005em]", "text-foreground-muted transition-colors duration-150 hover:text-foreground-strong"],
|
|
1479
1971
|
arrow: ["border-l border-t border-line-muted bg-layer-popover"],
|
|
1480
|
-
backdrop: ["bg-
|
|
1972
|
+
backdrop: ["bg-layer-backdrop backdrop-blur-[2px]"]
|
|
1481
1973
|
}
|
|
1482
1974
|
} }
|
|
1483
1975
|
});
|
|
@@ -1594,9 +2086,11 @@ function PopoverArrow({ className, ...props }) {
|
|
|
1594
2086
|
});
|
|
1595
2087
|
}
|
|
1596
2088
|
function PopoverBackdrop({ className, ...props }) {
|
|
1597
|
-
const
|
|
2089
|
+
const theme = useThemeFamily();
|
|
2090
|
+
const { backdrop } = popover({ theme });
|
|
1598
2091
|
return /* @__PURE__ */ jsx(Popover$1.Backdrop, {
|
|
1599
2092
|
"data-slot": "popover-backdrop",
|
|
2093
|
+
"data-theme": theme,
|
|
1600
2094
|
className: backdrop({ className }),
|
|
1601
2095
|
...props
|
|
1602
2096
|
});
|
|
@@ -2751,6 +3245,114 @@ function RadioGroupItem({ appearance = "default", className, children, ...props
|
|
|
2751
3245
|
});
|
|
2752
3246
|
}
|
|
2753
3247
|
//#endregion
|
|
3248
|
+
//#region src/components/switch/switch.tsx
|
|
3249
|
+
const switchRecipe = tv({
|
|
3250
|
+
slots: {
|
|
3251
|
+
root: [
|
|
3252
|
+
"group/switch relative inline-flex shrink-0 touch-manipulation items-center outline-none",
|
|
3253
|
+
"transition-[background-color,box-shadow,transform] duration-[180ms] ease-out",
|
|
3254
|
+
"motion-reduce:transition-none",
|
|
3255
|
+
"not-data-[disabled]:cursor-pointer",
|
|
3256
|
+
"data-[disabled]:cursor-not-allowed data-[disabled]:active:scale-100",
|
|
3257
|
+
"after:absolute after:-inset-x-3 after:-inset-y-2 after:content-['']"
|
|
3258
|
+
],
|
|
3259
|
+
thumb: [
|
|
3260
|
+
"pointer-events-none block",
|
|
3261
|
+
"transition-transform duration-[180ms] ease-out",
|
|
3262
|
+
"motion-reduce:transition-none"
|
|
3263
|
+
]
|
|
3264
|
+
},
|
|
3265
|
+
variants: {
|
|
3266
|
+
theme: {
|
|
3267
|
+
brutal: {
|
|
3268
|
+
root: [
|
|
3269
|
+
"rounded-none border-[2.5px] border-line-strong bg-layer-panel",
|
|
3270
|
+
"hover:bg-layer-panel data-[checked]:bg-primary-400",
|
|
3271
|
+
"data-[checked]:hover:bg-primary-400",
|
|
3272
|
+
"data-[disabled]:border-line-muted data-[disabled]:bg-layer-panel data-[disabled]:opacity-50 data-[disabled]:hover:bg-layer-panel",
|
|
3273
|
+
"data-[checked]:data-[disabled]:border-line-muted data-[checked]:data-[disabled]:bg-primary-400",
|
|
3274
|
+
"focus-visible:ring-2 focus-visible:ring-line-focus focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
3275
|
+
"active:scale-[0.98] motion-reduce:active:scale-100"
|
|
3276
|
+
],
|
|
3277
|
+
thumb: [
|
|
3278
|
+
"rounded-none bg-line-strong shadow-none",
|
|
3279
|
+
"data-[checked]:bg-line-strong",
|
|
3280
|
+
"data-[disabled]:bg-line-muted",
|
|
3281
|
+
"data-[checked]:data-[disabled]:bg-line-subtle"
|
|
3282
|
+
]
|
|
3283
|
+
},
|
|
3284
|
+
elegant: {
|
|
3285
|
+
root: [
|
|
3286
|
+
"rounded-full bg-foreground/[0.12]",
|
|
3287
|
+
"shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.05),0_1px_1.5px_-1px_oklch(0_0_0_/_0.08)]",
|
|
3288
|
+
"hover:bg-foreground/[0.16]",
|
|
3289
|
+
"data-[checked]:bg-foreground-strong data-[checked]:shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.12),0_1px_1.5px_-1px_oklch(0_0_0_/_0.12)]",
|
|
3290
|
+
"data-[checked]:hover:bg-foreground-strong",
|
|
3291
|
+
"data-[disabled]:bg-layer-panel data-[disabled]:shadow-[inset_0_0_0_1px_var(--line-subtle)]",
|
|
3292
|
+
"data-[checked]:data-[disabled]:bg-layer-panel data-[checked]:data-[disabled]:shadow-[inset_0_0_0_1px_var(--line-subtle)]",
|
|
3293
|
+
"focus-visible:ring-2 focus-visible:ring-line-focus focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
3294
|
+
"active:scale-[0.96] motion-reduce:active:scale-100"
|
|
3295
|
+
],
|
|
3296
|
+
thumb: [
|
|
3297
|
+
"rounded-full bg-layer-popover",
|
|
3298
|
+
"shadow-[0_1px_1.5px_-0.5px_oklch(0_0_0_/_0.18),0_0_0_1px_oklch(0_0_0_/_0.04)]",
|
|
3299
|
+
"data-[disabled]:bg-[oklch(0.88_0.004_286)] data-[disabled]:shadow-none",
|
|
3300
|
+
"data-[checked]:data-[disabled]:bg-[oklch(0.88_0.004_286)]"
|
|
3301
|
+
]
|
|
3302
|
+
}
|
|
3303
|
+
},
|
|
3304
|
+
size: {
|
|
3305
|
+
sm: {
|
|
3306
|
+
root: "h-4 w-7 p-0.5",
|
|
3307
|
+
thumb: "size-3 data-[checked]:translate-x-3"
|
|
3308
|
+
},
|
|
3309
|
+
md: {
|
|
3310
|
+
root: "h-5 w-9 p-0.5",
|
|
3311
|
+
thumb: "size-4 data-[checked]:translate-x-4"
|
|
3312
|
+
}
|
|
3313
|
+
}
|
|
3314
|
+
},
|
|
3315
|
+
compoundVariants: [{
|
|
3316
|
+
theme: "brutal",
|
|
3317
|
+
size: "sm",
|
|
3318
|
+
class: {
|
|
3319
|
+
root: "h-5 w-9 p-0",
|
|
3320
|
+
thumb: "size-3.5 translate-x-px data-[checked]:translate-x-4"
|
|
3321
|
+
}
|
|
3322
|
+
}, {
|
|
3323
|
+
theme: "brutal",
|
|
3324
|
+
size: "md",
|
|
3325
|
+
class: {
|
|
3326
|
+
root: "h-6 w-11 p-0",
|
|
3327
|
+
thumb: "size-[18px] translate-x-px data-[checked]:translate-x-5"
|
|
3328
|
+
}
|
|
3329
|
+
}],
|
|
3330
|
+
defaultVariants: { size: "sm" }
|
|
3331
|
+
});
|
|
3332
|
+
function Switch({ size, className, children, ...props }) {
|
|
3333
|
+
const { root } = switchRecipe({
|
|
3334
|
+
theme: useThemeFamily(),
|
|
3335
|
+
size
|
|
3336
|
+
});
|
|
3337
|
+
return /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
3338
|
+
"data-slot": "switch",
|
|
3339
|
+
className: root({ className }),
|
|
3340
|
+
...props,
|
|
3341
|
+
children: children ?? /* @__PURE__ */ jsx(SwitchThumb, { size })
|
|
3342
|
+
});
|
|
3343
|
+
}
|
|
3344
|
+
function SwitchThumb({ size, className, ...props }) {
|
|
3345
|
+
const { thumb } = switchRecipe({
|
|
3346
|
+
theme: useThemeFamily(),
|
|
3347
|
+
size
|
|
3348
|
+
});
|
|
3349
|
+
return /* @__PURE__ */ jsx(Switch$1.Thumb, {
|
|
3350
|
+
"data-slot": "switch-thumb",
|
|
3351
|
+
className: thumb({ className }),
|
|
3352
|
+
...props
|
|
3353
|
+
});
|
|
3354
|
+
}
|
|
3355
|
+
//#endregion
|
|
2754
3356
|
//#region src/components/segmented-control/segmented-control.tsx
|
|
2755
3357
|
const segmentedControl = tv({
|
|
2756
3358
|
slots: {
|
|
@@ -3494,12 +4096,15 @@ const banner = tv({
|
|
|
3494
4096
|
"group/banner grid grid-cols-[0_minmax(0,1fr)] items-start border-2 border-line-strong",
|
|
3495
4097
|
"has-[>[data-slot=banner-action]]:grid-cols-[0_minmax(0,1fr)_auto]",
|
|
3496
4098
|
"has-[>svg]:grid-cols-[18px_minmax(0,1fr)]",
|
|
4099
|
+
"has-[>[data-slot=status]]:grid-cols-[auto_minmax(0,1fr)]",
|
|
3497
4100
|
"[&:has(>svg):has(>[data-slot=banner-action])]:grid-cols-[18px_minmax(0,1fr)_auto]",
|
|
4101
|
+
"[&:has(>[data-slot=status]):has(>[data-slot=banner-action])]:grid-cols-[auto_minmax(0,1fr)_auto]",
|
|
3498
4102
|
"[&>svg]:col-start-1 [&>svg]:row-span-2 [&>svg]:mt-0.5",
|
|
3499
|
-
"[&>svg]:size-[18px] [&>svg]:shrink-0 [&>svg]:text-foreground-strong"
|
|
4103
|
+
"[&>svg]:size-[18px] [&>svg]:shrink-0 [&>svg]:text-foreground-strong",
|
|
4104
|
+
"[&>[data-slot=status]]:col-start-1 [&>[data-slot=status]]:row-start-1 [&>[data-slot=status]]:row-span-2 [&>[data-slot=status]]:self-center"
|
|
3500
4105
|
],
|
|
3501
4106
|
title: ["col-start-2 mb-0.5 text-sm font-bold text-foreground-strong", "group-data-[size=sm]/banner:text-xs"],
|
|
3502
|
-
description: ["col-start-2 min-w-0 text-sm text-foreground-strong", "group-data-[size=sm]/banner:text-xs"],
|
|
4107
|
+
description: ["col-start-2 min-w-0 text-sm font-semibold text-foreground-strong", "group-data-[size=sm]/banner:text-xs"],
|
|
3503
4108
|
action: ["col-start-3 row-span-2 row-start-1 shrink-0"]
|
|
3504
4109
|
},
|
|
3505
4110
|
elegant: {
|
|
@@ -3508,16 +4113,20 @@ const banner = tv({
|
|
|
3508
4113
|
"text-[0.8125rem] leading-5 tracking-[-0.005em] text-foreground-strong",
|
|
3509
4114
|
"grid-cols-[minmax(0,1fr)]",
|
|
3510
4115
|
"has-[>svg]:grid-cols-[auto_minmax(0,1fr)]",
|
|
4116
|
+
"has-[>[data-slot=status]]:grid-cols-[auto_minmax(0,1fr)]",
|
|
3511
4117
|
"has-[>[data-slot=banner-action]]:grid-cols-[minmax(0,1fr)_auto]",
|
|
3512
4118
|
"has-[>svg]:has-[>[data-slot=banner-action]]:grid-cols-[auto_minmax(0,1fr)_auto]",
|
|
4119
|
+
"has-[>[data-slot=status]]:has-[>[data-slot=banner-action]]:grid-cols-[auto_minmax(0,1fr)_auto]",
|
|
3513
4120
|
"has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:items-start",
|
|
3514
4121
|
"has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:grid-rows-[auto_auto]",
|
|
3515
4122
|
"has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:gap-y-1",
|
|
3516
|
-
"[&>svg]:col-start-1 [&>svg]:row-start-1 [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:self-center"
|
|
4123
|
+
"[&>svg]:col-start-1 [&>svg]:row-start-1 [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:self-center",
|
|
4124
|
+
"[&>[data-slot=status]]:col-start-1 [&>[data-slot=status]]:row-start-1 [&>[data-slot=status]]:self-center"
|
|
3517
4125
|
],
|
|
3518
4126
|
title: [
|
|
3519
4127
|
"col-start-1 row-start-1 flex h-5 min-w-0 items-center text-[0.84375rem] font-medium leading-5 text-foreground-strong",
|
|
3520
4128
|
"group-has-[>svg]/banner:col-start-2",
|
|
4129
|
+
"group-has-[>[data-slot=status]]/banner:col-start-2",
|
|
3521
4130
|
"group-data-[size=sm]/banner:h-4 group-data-[size=sm]/banner:text-[0.8125rem] group-data-[size=sm]/banner:leading-4",
|
|
3522
4131
|
"group-data-[size=lg]/banner:h-6 group-data-[size=lg]/banner:text-[0.90625rem] group-data-[size=lg]/banner:leading-6",
|
|
3523
4132
|
"group-data-[status=warning]/banner:text-[oklch(0.476_0.114_61.907)]"
|
|
@@ -3525,6 +4134,7 @@ const banner = tv({
|
|
|
3525
4134
|
description: [
|
|
3526
4135
|
"col-start-1 row-start-1 min-w-0 font-normal leading-4 text-foreground-muted",
|
|
3527
4136
|
"group-has-[>svg]/banner:col-start-2",
|
|
4137
|
+
"group-has-[>[data-slot=status]]/banner:col-start-2",
|
|
3528
4138
|
"group-has-[>[data-slot=banner-title]]/banner:row-start-2",
|
|
3529
4139
|
"group-data-[size=sm]/banner:text-xs group-data-[size=sm]/banner:leading-4",
|
|
3530
4140
|
"group-data-[size=lg]/banner:text-[0.875rem] group-data-[size=lg]/banner:leading-5",
|
|
@@ -3533,6 +4143,7 @@ const banner = tv({
|
|
|
3533
4143
|
action: [
|
|
3534
4144
|
"col-start-2 row-start-1 flex h-5 shrink-0 items-center gap-2",
|
|
3535
4145
|
"group-has-[>svg]/banner:col-start-3",
|
|
4146
|
+
"group-has-[>[data-slot=status]]/banner:col-start-3",
|
|
3536
4147
|
"group-has-[>[data-slot=banner-title]+[data-slot=banner-description]]/banner:row-span-2",
|
|
3537
4148
|
"[&>button:has(svg):last-child]:size-5 [&>button:has(svg):last-child]:min-h-5 [&>button:has(svg):last-child]:min-w-5",
|
|
3538
4149
|
"[&>button:has(svg):last-child]:rounded-sm",
|
|
@@ -3585,7 +4196,7 @@ const banner = tv({
|
|
|
3585
4196
|
{
|
|
3586
4197
|
theme: "brutal",
|
|
3587
4198
|
status: "warning",
|
|
3588
|
-
class: { root: "bg-
|
|
4199
|
+
class: { root: "bg-brutal-yellow/30" }
|
|
3589
4200
|
},
|
|
3590
4201
|
{
|
|
3591
4202
|
theme: "brutal",
|
|
@@ -3600,17 +4211,17 @@ const banner = tv({
|
|
|
3600
4211
|
{
|
|
3601
4212
|
theme: "brutal",
|
|
3602
4213
|
size: "sm",
|
|
3603
|
-
class: { root: "gap-y-0 p-2 has-[>svg]:gap-x-2 has-[>[data-slot=banner-action]]:gap-x-2" }
|
|
4214
|
+
class: { root: "gap-y-0 p-2 has-[>svg]:gap-x-2 has-[>[data-slot=banner-action]]:gap-x-2 has-[>[data-slot=status]]:gap-x-1.5" }
|
|
3604
4215
|
},
|
|
3605
4216
|
{
|
|
3606
4217
|
theme: "brutal",
|
|
3607
4218
|
size: "md",
|
|
3608
|
-
class: { root: "gap-y-0 p-3 has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3" }
|
|
4219
|
+
class: { root: "gap-y-0 p-3 has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3 has-[>[data-slot=status]]:gap-x-2" }
|
|
3609
4220
|
},
|
|
3610
4221
|
{
|
|
3611
4222
|
theme: "brutal",
|
|
3612
4223
|
size: "lg",
|
|
3613
|
-
class: { root: "gap-y-0 p-4 shadow-sm has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3" }
|
|
4224
|
+
class: { root: "gap-y-0 p-4 shadow-sm has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3 has-[>[data-slot=status]]:gap-x-2" }
|
|
3614
4225
|
},
|
|
3615
4226
|
{
|
|
3616
4227
|
theme: "elegant",
|
|
@@ -4591,4 +5202,4 @@ function ThemeProvider({ theme, defaultTheme = "brutal", onThemeChange, mode, de
|
|
|
4591
5202
|
});
|
|
4592
5203
|
}
|
|
4593
5204
|
//#endregion
|
|
4594
|
-
export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Banner, BannerAction, BannerDescription, BannerTitle, Button, Checkbox, Combobox, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxControl, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxHeader, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxRow, ComboboxSeparator, ComboboxTrigger, ComboboxTriggerIndicator, ComboboxValue, ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSubmenu, ContextMenuSubmenuTrigger, ContextMenuTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemIndicator, DropdownMenuContent, DropdownMenuItem, DropdownMenuItemCount, DropdownMenuLabel, DropdownMenuPopup, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRadioItemIndicator, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateContent, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupInput, Kbd, KbdGroup, Label, LabelAsterisk, LabelOptional, LabelSub, NotificationCenter, NotificationCenterActionButton, NotificationCenterCount, NotificationCenterEmptyState, NotificationCenterHeader, NotificationCenterItem, NotificationCenterItemActions, NotificationCenterItemBody, NotificationCenterItemContent, NotificationCenterItemIcon, NotificationCenterItemRow, NotificationCenterItemTitle, NotificationCenterList, NotificationCenterPopup, NotificationCenterScroller, NotificationCenterTitle, NotificationCenterTrigger, Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverPopup, PopoverPortal, PopoverSeparator, PopoverTitle, PopoverTrigger, PopoverViewport, RadioGroup, RadioGroupIndicator, RadioGroupItem, SegmentedControl, SegmentedControlCount, SegmentedControlItem, SegmentedControlLabel, Select, SelectArrow, SelectContent, SelectGroup, SelectGroupLabel, SelectIcon, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectList, SelectPopup, SelectPortal, SelectScrollDownArrow, SelectScrollUpArrow, SelectSeparator, SelectTrigger, SelectValue, Separator, SortableTabsList, SortableTabsTab, Spinner, Status, Tabs, TabsBackground, TabsIndicator, TabsLabel, TabsList, TabsPanel, TabsTab, Text, TextHeading, TextMono, TextSans, Textarea, TextareaCounter, TextareaGroup, ThemeProvider, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, buttonVariants, cn, useOrderedTabs, useTheme, useThemeFamily };
|
|
5205
|
+
export { AlertDialog, AlertDialogAction, AlertDialogBody, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Banner, BannerAction, BannerDescription, BannerTitle, Button, Checkbox, Combobox, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxControl, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxHeader, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxRow, ComboboxSeparator, ComboboxTrigger, ComboboxTriggerIndicator, ComboboxValue, ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSubmenu, ContextMenuSubmenuTrigger, ContextMenuTrigger, CopyableCode, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemIndicator, DropdownMenuContent, DropdownMenuItem, DropdownMenuItemCount, DropdownMenuLabel, DropdownMenuPopup, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRadioItemIndicator, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateContent, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupInput, Kbd, KbdGroup, Label, LabelAsterisk, LabelOptional, LabelSub, NotificationCenter, NotificationCenterActionButton, NotificationCenterCount, NotificationCenterEmptyState, NotificationCenterHeader, NotificationCenterItem, NotificationCenterItemActions, NotificationCenterItemBody, NotificationCenterItemContent, NotificationCenterItemIcon, NotificationCenterItemRow, NotificationCenterItemTitle, NotificationCenterList, NotificationCenterPopup, NotificationCenterScroller, NotificationCenterTitle, NotificationCenterTrigger, Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverPopup, PopoverPortal, PopoverSeparator, PopoverTitle, PopoverTrigger, PopoverViewport, RadioGroup, RadioGroupIndicator, RadioGroupItem, SegmentedControl, SegmentedControlCount, SegmentedControlItem, SegmentedControlLabel, Select, SelectArrow, SelectContent, SelectGroup, SelectGroupLabel, SelectIcon, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectList, SelectPopup, SelectPortal, SelectScrollDownArrow, SelectScrollUpArrow, SelectSeparator, SelectTrigger, SelectValue, Separator, SortableTabsList, SortableTabsTab, Spinner, Status, Switch, SwitchThumb, Tabs, TabsBackground, TabsIndicator, TabsLabel, TabsList, TabsPanel, TabsTab, Text, TextHeading, TextMono, TextSans, Textarea, TextareaCounter, TextareaGroup, ThemeProvider, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, buttonVariants, cn, useOrderedTabs, useTheme, useThemeFamily };
|