import { Button as ButtonPrimitive } from "@base-ui/react/button"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "cn"
const buttonVariants = cva(
"cn-button group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
{
variants: {
variant: {
default: "cn-button-variant-default",
outline: "cn-button-variant-outline",
secondary: "cn-button-variant-secondary",
ghost: "cn-button-variant-ghost",
destructive: "cn-button-variant-destructive",
link: "cn-button-variant-link",
},
size: {
default: "cn-button-size-default",
xs: "cn-button-size-xs",
sm: "cn-button-size-sm",
lg: "cn-button-size-lg",
icon: "cn-button-size-icon",
"icon-xs": "cn-button-size-icon-xs",
"icon-sm": "cn-button-size-icon-sm",
"icon-lg": "cn-button-size-icon-lg",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
function Button({
className,
variant = "default",
size = "default",
...props
}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {
return (
<ButtonPrimitive
data-slot="button"
className={cn(buttonVariants({ variant, size, className }))}
{...props}
/>
)
}
export { Button, buttonVariants }
Model selector with tier badges
By Sean Hello
Try the interaction, copy the React source files, or download the complete example.
About Model selector with tier badges
Model selector with tier badges is an animated React and Tailwind CSS button by Sean Hello. Try the interaction, copy the React source, or download the example with creator credit.
- Effects and categories
- Hover effects, Animated
- Using this example
- Copy a TSX file or download the original source and standalone demo. Test keyboard focus, motion and contrast in your own project.
Usage, Tailwind and licensing questions
Read the source files
registry-reui/bases/base/components/button-group/c-button-group-41.tsx
"use client"
import { useState } from "react"
import { Badge } from "@/registry-reui/bases/base/reui/badge"
import { cn } from "cn"
import { Button } from "@/registry/bases/base/ui/button"
import { ButtonGroup } from "@/registry/bases/base/ui/button-group"
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/registry/bases/base/ui/tooltip"
const models = [
{
id: "gpt4o",
label: "GPT-4o",
badge: "Fast",
badgeVariant: "success-light" as const,
tooltip: "128k context, fastest response",
icon: (
<ImportedZapIcon
aria-hidden="true"
/>
),
},
{
id: "claude",
label: "Claude",
badge: "Pro",
badgeVariant: "info-light" as const,
tooltip: "200k context, best for analysis",
icon: (
<ImportedBrainIcon
aria-hidden="true"
/>
),
},
{
id: "gemini",
label: "Gemini",
badge: "Preview",
badgeVariant: "warning-light" as const,
tooltip: "1M context, experimental",
icon: (
<ImportedFlaskConicalIcon
aria-hidden="true"
/>
),
},
]
export default function Pattern() {
const [active, setActive] = useState("claude")
return (
<ButtonGroup>
{models.map((model) => (
<Tooltip key={model.id}>
<TooltipTrigger
render={
<Button
variant="outline"
className={cn(active === model.id ? "bg-muted" : "")}
onClick={() => setActive(model.id)}
>
{model.icon}
{model.label}
<Badge variant={model.badgeVariant} size="xs">
{model.badge}
</Badge>
</Button>
}
/>
<TooltipContent>{model.tooltip}</TooltipContent>
</Tooltip>
))}
</ButtonGroup>
)
}
import {ZapIcon as ImportedZapIcon,BrainIcon as ImportedBrainIcon,FlaskConicalIcon as ImportedFlaskConicalIcon} from "lucide-react";
registry-reui/bases/base/reui/badge.tsx
import { mergeProps } from "@base-ui/react/merge-props"
import { useRender } from "@base-ui/react/use-render"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "cn"
const badgeVariants = cva(
[
"relative inline-flex shrink-0 items-center justify-center w-fit border border-transparent font-medium whitespace-nowrap outline-none transition-shadow",
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-3",
],
{
variants: {
variant: {
default: "bg-primary text-primary-foreground",
outline: "border-border bg-transparent dark:bg-input/32",
secondary: "bg-secondary text-secondary-foreground",
info: "bg-info text-white",
success: "bg-success text-white",
warning: "bg-warning text-white",
destructive: "bg-destructive text-white",
focus: "bg-focus text-focus-foreground",
invert: "bg-invert text-invert-foreground",
"primary-light":
"border-primary/10 bg-primary/10 text-primary dark:border-primary/25 dark:bg-primary/15 dark:text-primary",
"warning-light":
"border-warning/15 bg-warning/10 text-warning-foreground dark:border-warning/25 dark:bg-warning/15 dark:text-warning",
"success-light":
"border-success/15 bg-success/10 text-success-foreground dark:border-success/25 dark:bg-success/15 dark:text-success",
"info-light":
"border-info/15 bg-info/10 text-info-foreground dark:border-info/25 dark:bg-info/15 dark:text-info",
"destructive-light":
"border-destructive/15 bg-destructive/10 text-destructive-foreground dark:border-destructive/25 dark:bg-destructive/15 dark:text-destructive",
"invert-light":
"border-invert/15 bg-invert/10 text-foreground dark:border-invert/45 dark:bg-invert/35 dark:text-invert-foreground",
"focus-light":
"border-focus/15 bg-focus/10 text-focus-foreground dark:border-focus/25 dark:bg-focus/15 dark:text-focus",
"primary-outline":
"bg-background border-border text-primary dark:bg-input/30",
"warning-outline":
"bg-background border-border text-warning-foreground dark:bg-input/30",
"success-outline":
"bg-background border-border text-success-foreground dark:bg-input/30",
"info-outline":
"bg-background border-border text-info-foreground dark:bg-input/30",
"destructive-outline":
"bg-background border-border text-destructive-foreground dark:bg-input/30",
"invert-outline":
"bg-background border-border text-invert-foreground dark:bg-input/30",
"focus-outline":
"bg-background border-border text-focus-foreground dark:bg-input/30",
},
size: {
xs: "px-1 py-0.25 text-[0.6rem] leading-none h-4 min-w-4 gap-1",
sm: "px-1 py-0.25 text-[0.625rem] leading-none h-4.5 min-w-4.5 gap-1",
default: "px-1.25 py-0.5 text-xs h-5 min-w-5 gap-1",
lg: "px-1.5 py-0.5 text-xs h-5.5 min-w-5.5 gap-1",
xl: "px-2 py-0.75 text-sm h-6 min-w-6 gap-1.5",
},
/** `default`: active style radius. `full`: pill radius. */
radius: {
default:
"style-vega:rounded-sm style-nova:rounded-sm style-maia:rounded-4xl style-lyra:rounded-none style-mira:rounded-sm style-luma:rounded-4xl style-rhea:rounded-2xl style-sera:rounded-none",
full: "rounded-full",
},
},
defaultVariants: {
variant: "default",
size: "default",
radius: "default",
},
}
)
interface BadgeProps extends useRender.ComponentProps<"span"> {
variant?: VariantProps<typeof badgeVariants>["variant"]
size?: VariantProps<typeof badgeVariants>["size"]
radius?: VariantProps<typeof badgeVariants>["radius"]
}
function Badge({
className,
variant,
size,
radius,
render,
...props
}: BadgeProps) {
const defaultProps = {
"data-slot": "badge",
className: cn(badgeVariants({ variant, size, radius, className })),
}
return useRender({
defaultTagName: "span",
render,
props: mergeProps<"span">(defaultProps, props),
})
}
export { Badge, badgeVariants, type BadgeProps }
registry/bases/base/ui/button.tsx
import { Button as ButtonPrimitive } from "@base-ui/react/button"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "cn"
const buttonVariants = cva(
"cn-button group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
{
variants: {
variant: {
default: "cn-button-variant-default",
outline: "cn-button-variant-outline",
secondary: "cn-button-variant-secondary",
ghost: "cn-button-variant-ghost",
destructive: "cn-button-variant-destructive",
link: "cn-button-variant-link",
},
size: {
default: "cn-button-size-default",
xs: "cn-button-size-xs",
sm: "cn-button-size-sm",
lg: "cn-button-size-lg",
icon: "cn-button-size-icon",
"icon-xs": "cn-button-size-icon-xs",
"icon-sm": "cn-button-size-icon-sm",
"icon-lg": "cn-button-size-icon-lg",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
function Button({
className,
variant = "default",
size = "default",
...props
}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {
return (
<ButtonPrimitive
data-slot="button"
className={cn(buttonVariants({ variant, size, className }))}
{...props}
/>
)
}
export { Button, buttonVariants }
registry/bases/base/ui/button-group.tsx
import { mergeProps } from "@base-ui/react/merge-props"
import { useRender } from "@base-ui/react/use-render"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "cn"
import { Separator } from "@/registry/bases/base/ui/separator"
const buttonGroupVariants = cva(
"cn-button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
{
variants: {
orientation: {
horizontal:
"cn-button-group-orientation-horizontal *:data-slot:rounded-r-none [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
vertical:
"cn-button-group-orientation-vertical flex-col *:data-slot:rounded-b-none [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0",
},
},
defaultVariants: {
orientation: "horizontal",
},
}
)
function ButtonGroup({
className,
orientation,
...props
}: React.ComponentProps<"div"> & VariantProps<typeof buttonGroupVariants>) {
return (
<div
role="group"
data-slot="button-group"
data-orientation={orientation}
className={cn(buttonGroupVariants({ orientation }), className)}
{...props}
/>
)
}
function ButtonGroupText({
className,
render,
...props
}: useRender.ComponentProps<"div">) {
return useRender({
defaultTagName: "div",
props: mergeProps<"div">(
{
className: cn(
"cn-button-group-text flex items-center [&_svg]:pointer-events-none",
className
),
},
props
),
render,
state: {
slot: "button-group-text",
},
})
}
function ButtonGroupSeparator({
className,
orientation = "vertical",
...props
}: React.ComponentProps<typeof Separator>) {
return (
<Separator
data-slot="button-group-separator"
orientation={orientation}
className={cn(
"cn-button-group-separator relative self-stretch data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
className
)}
{...props}
/>
)
}
export {
ButtonGroup,
ButtonGroupSeparator,
ButtonGroupText,
buttonGroupVariants,
}
registry/bases/base/ui/tooltip.tsx
"use client"
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip"
import { cn } from "cn"
function TooltipProvider({
delay = 0,
...props
}: TooltipPrimitive.Provider.Props) {
return (
<TooltipPrimitive.Provider
data-slot="tooltip-provider"
delay={delay}
{...props}
/>
)
}
function Tooltip({ ...props }: TooltipPrimitive.Root.Props) {
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
}
function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
}
function TooltipContent({
className,
side = "top",
sideOffset = 4,
align = "center",
alignOffset = 0,
children,
...props
}: TooltipPrimitive.Popup.Props &
Pick<
TooltipPrimitive.Positioner.Props,
"align" | "alignOffset" | "side" | "sideOffset"
>) {
return (
<TooltipPrimitive.Portal>
<TooltipPrimitive.Positioner
align={align}
alignOffset={alignOffset}
side={side}
sideOffset={sideOffset}
className="isolate z-50"
>
<TooltipPrimitive.Popup
data-slot="tooltip-content"
className={cn(
"cn-tooltip-content cn-tooltip-content-logical z-50 w-fit max-w-xs origin-(--transform-origin) bg-foreground text-background",
className
)}
{...props}
>
{children}
<TooltipPrimitive.Arrow className="cn-tooltip-arrow cn-tooltip-arrow-logical z-50 bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" />
</TooltipPrimitive.Popup>
</TooltipPrimitive.Positioner>
</TooltipPrimitive.Portal>
)
}
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
registry/bases/base/ui/separator.tsx
"use client"
import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"
import { cn } from "cn"
function Separator({
className,
orientation = "horizontal",
...props
}: SeparatorPrimitive.Props) {
return (
<SeparatorPrimitive
data-slot="separator"
orientation={orientation}
className={cn(
"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
className
)}
{...props}
/>
)
}
export { Separator }
demo.tsx
export { default as default } from "@/registry-reui/bases/base/components/button-group/c-button-group-41";CSS
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
:root, :host {
--font-sans: var(--font-sans);
--font-mono: var(--font-mono);
--color-red-600: oklch(57.7% 0.245 27.325);
--color-red-800: oklch(44.4% 0.177 26.899);
--color-yellow-500: oklch(79.5% 0.184 86.047);
--color-yellow-600: oklch(68.1% 0.162 75.834);
--color-yellow-900: oklch(42.1% 0.095 57.708);
--color-emerald-500: oklch(69.6% 0.17 162.48);
--color-emerald-600: oklch(59.6% 0.145 163.225);
--color-emerald-900: oklch(37.8% 0.077 168.94);
--color-violet-500: oklch(60.6% 0.25 292.717);
--color-violet-600: oklch(54.1% 0.281 293.009);
--color-violet-900: oklch(38% 0.189 293.745);
--color-zinc-50: oklch(98.5% 0 none);
--color-zinc-700: oklch(37% 0.013 285.805);
--color-zinc-900: oklch(21% 0.006 285.885);
--color-white: #fff;
--spacing: 0.25rem;
--container-xs: 20rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
--text-sm: 0.875rem;
--text-sm--line-height: calc(1.25 / 0.875);
--font-weight-medium: 500;
--radius-md: calc(var(--radius) - 2px);
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
--default-mono-font-family: var(--font-mono);
--font-heading: var(--font-heading);
--font-inter: var(--font-inter);
}
}
@layer base {
*, ::after, ::before, ::backdrop, ::file-selector-button {
box-sizing: border-box;
margin: 0;
padding: 0;
border: 0 solid;
}
html, :host {
line-height: 1.5;
-webkit-text-size-adjust: 100%;
tab-size: 4;
font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
font-feature-settings: var(--default-font-feature-settings, normal);
font-variation-settings: var(--default-font-variation-settings, normal);
-webkit-tap-highlight-color: transparent;
}
hr {
height: 0;
color: inherit;
border-top-width: 1px;
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit;
}
a {
color: inherit;
-webkit-text-decoration: inherit;
text-decoration: inherit;
}
b, strong {
font-weight: bolder;
}
code, kbd, samp, pre {
font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
font-feature-settings: var(--default-mono-font-feature-settings, normal);
font-variation-settings: var(--default-mono-font-variation-settings, normal);
font-size: 1em;
}
small {
font-size: 80%;
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse;
}
:-moz-focusring:where(:not(iframe)) {
outline: auto;
}
progress {
vertical-align: baseline;
}
summary {
display: list-item;
}
ol, ul, menu {
list-style: none;
}
img, svg, video, canvas, audio, iframe, embed, object {
display: block;
vertical-align: middle;
}
img, video {
max-width: 100%;
height: auto;
}
button, input, select, optgroup, textarea, ::file-selector-button {
font: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
letter-spacing: inherit;
color: inherit;
border-radius: 0;
background-color: transparent;
opacity: 1;
}
:where(select:is([multiple], [size])) optgroup {
font-weight: bolder;
}
:where(select:is([multiple], [size])) optgroup option {
padding-inline-start: 20px;
}
::file-selector-button {
margin-inline-end: 4px;
}
::placeholder {
opacity: 1;
}
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
::placeholder {
color: currentcolor;
@supports (color: color-mix(in lab, red, red)) {
color: color-mix(in oklab, currentcolor 50%, transparent);
}
}
}
textarea {
resize: vertical;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-date-and-time-value {
min-height: 1lh;
text-align: inherit;
}
::-webkit-datetime-edit {
display: inline-flex;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
padding-block: 0;
}
::-webkit-calendar-picker-indicator {
line-height: 1;
}
:-moz-ui-invalid {
box-shadow: none;
}
button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
appearance: button;
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto;
}
[hidden]:where(:not([hidden="until-found"])) {
display: none !important;
}
}
@layer utilities {
.relative {
position: relative;
}
.isolate {
isolation: isolate;
}
.z-50 {
z-index: 50;
}
.flex {
display: flex;
}
.inline-flex {
display: inline-flex;
}
.h-4 {
height: calc(var(--spacing) * 4);
}
.h-4\.5 {
height: calc(var(--spacing) * 4.5);
}
.h-5 {
height: calc(var(--spacing) * 5);
}
.h-5\.5 {
height: calc(var(--spacing) * 5.5);
}
.h-6 {
height: calc(var(--spacing) * 6);
}
.w-fit {
width: fit-content;
}
.max-w-xs {
max-width: var(--container-xs);
}
.min-w-4 {
min-width: calc(var(--spacing) * 4);
}
.min-w-4\.5 {
min-width: calc(var(--spacing) * 4.5);
}
.min-w-5 {
min-width: calc(var(--spacing) * 5);
}
.min-w-5\.5 {
min-width: calc(var(--spacing) * 5.5);
}
.min-w-6 {
min-width: calc(var(--spacing) * 6);
}
.shrink-0 {
flex-shrink: 0;
}
.origin-\(--transform-origin\) {
transform-origin: var(--transform-origin);
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.items-stretch {
align-items: stretch;
}
.justify-center {
justify-content: center;
}
.gap-1 {
gap: var(--spacing);
}
.gap-1\.5 {
gap: calc(var(--spacing) * 1.5);
}
.self-stretch {
align-self: stretch;
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
.border {
border-style: var(--tw-border-style);
border-width: 1px;
}
.border-border {
border-color: var(--border);
}
.border-destructive\/15 {
border-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--destructive) 15%, transparent);
}
}
.border-info\/15 {
border-color: var(--info);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--info) 15%, transparent);
}
}
.border-invert\/15 {
border-color: var(--invert);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--invert) 15%, transparent);
}
}
.border-primary\/10 {
border-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--primary) 10%, transparent);
}
}
.border-success\/15 {
border-color: var(--success);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--success) 15%, transparent);
}
}
.border-transparent {
border-color: transparent;
}
.border-warning\/15 {
border-color: var(--warning);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--warning) 15%, transparent);
}
}
.bg-background {
background-color: var(--background);
}
.bg-border {
background-color: var(--border);
}
.bg-destructive {
background-color: var(--destructive);
}
.bg-destructive\/10 {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
}
}
.bg-foreground {
background-color: var(--foreground);
}
.bg-info {
background-color: var(--info);
}
.bg-info\/10 {
background-color: var(--info);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--info) 10%, transparent);
}
}
.bg-invert {
background-color: var(--invert);
}
.bg-invert\/10 {
background-color: var(--invert);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--invert) 10%, transparent);
}
}
.bg-muted {
background-color: var(--muted);
}
.bg-primary {
background-color: var(--primary);
}
.bg-primary\/10 {
background-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--primary) 10%, transparent);
}
}
.bg-secondary {
background-color: var(--secondary);
}
.bg-success {
background-color: var(--success);
}
.bg-success\/10 {
background-color: var(--success);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--success) 10%, transparent);
}
}
.bg-transparent {
background-color: transparent;
}
.bg-warning {
background-color: var(--warning);
}
.bg-warning\/10 {
background-color: var(--warning);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--warning) 10%, transparent);
}
}
.fill-foreground {
fill: var(--foreground);
}
.px-1 {
padding-inline: var(--spacing);
}
.px-1\.5 {
padding-inline: calc(var(--spacing) * 1.5);
}
.px-1\.25 {
padding-inline: calc(var(--spacing) * 1.25);
}
.px-2 {
padding-inline: calc(var(--spacing) * 2);
}
.py-0\.5 {
padding-block: calc(var(--spacing) * 0.5);
}
.py-0\.25 {
padding-block: calc(var(--spacing) * 0.25);
}
.py-0\.75 {
padding-block: calc(var(--spacing) * 0.75);
}
.text-sm {
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
.text-xs {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
.text-\[0\.6rem\] {
font-size: 0.6rem;
}
.text-\[0\.625rem\] {
font-size: 0.625rem;
}
.leading-none {
--tw-leading: 1;
line-height: 1;
}
.font-medium {
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
}
.whitespace-nowrap {
white-space: nowrap;
}
.text-background {
color: var(--background);
}
.text-destructive-foreground {
color: var(--destructive-foreground);
}
.text-foreground {
color: var(--foreground);
}
.text-info-foreground {
color: var(--info-foreground);
}
.text-invert-foreground {
color: var(--invert-foreground);
}
.text-primary {
color: var(--primary);
}
.text-primary-foreground {
color: var(--primary-foreground);
}
.text-secondary-foreground {
color: var(--secondary-foreground);
}
.text-success-foreground {
color: var(--success-foreground);
}
.text-warning-foreground {
color: var(--warning-foreground);
}
.text-white {
color: var(--color-white);
}
.outline {
outline-style: var(--tw-outline-style);
outline-width: 1px;
}
.invert {
--tw-invert: invert(100%);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
}
.transition-all {
transition-property: all;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-shadow {
transition-property: box-shadow;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.outline-none {
--tw-outline-style: none;
outline-style: none;
}
.select-none {
-webkit-user-select: none;
user-select: none;
}
.focus-visible\:ring-2:focus-visible {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.focus-visible\:ring-ring:focus-visible {
--tw-ring-color: var(--ring);
}
.focus-visible\:ring-offset-1:focus-visible {
--tw-ring-offset-width: 1px;
--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
}
.focus-visible\:ring-offset-background:focus-visible {
--tw-ring-offset-color: var(--background);
}
:is(.\*\:focus-visible\:relative > *):focus-visible {
position: relative;
}
:is(.\*\:focus-visible\:z-10 > *):focus-visible {
z-index: 10;
}
.disabled\:pointer-events-none:disabled {
pointer-events: none;
}
.disabled\:opacity-50:disabled {
opacity: 50%;
}
.data-horizontal\:mx-px[data-horizontal] {
margin-inline: 1px;
}
.data-horizontal\:h-px[data-horizontal] {
height: 1px;
}
.data-horizontal\:w-auto[data-horizontal] {
width: auto;
}
.data-horizontal\:w-full[data-horizontal] {
width: 100%;
}
:is(.\*\:data-slot\:rounded-r-none > *)[data-slot] {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
:is(.\*\:data-slot\:rounded-b-none > *)[data-slot] {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.data-vertical\:my-px[data-vertical] {
margin-block: 1px;
}
.data-vertical\:h-auto[data-vertical] {
height: auto;
}
.data-vertical\:w-px[data-vertical] {
width: 1px;
}
.data-vertical\:self-stretch[data-vertical] {
align-self: stretch;
}
.data-\[side\=bottom\]\:top-1[data-side="bottom"] {
top: var(--spacing);
}
.data-\[side\=left\]\:top-1\/2\![data-side="left"] {
top: calc(1 / 2 * 100%) !important;
}
.data-\[side\=left\]\:-right-1[data-side="left"] {
right: calc(var(--spacing) * -1);
}
.data-\[side\=left\]\:-translate-y-1\/2[data-side="left"] {
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.data-\[side\=right\]\:top-1\/2\![data-side="right"] {
top: calc(1 / 2 * 100%) !important;
}
.data-\[side\=right\]\:-left-1[data-side="right"] {
left: calc(var(--spacing) * -1);
}
.data-\[side\=right\]\:-translate-y-1\/2[data-side="right"] {
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.data-\[side\=top\]\:-bottom-2\.5[data-side="top"] {
bottom: calc(var(--spacing) * -2.5);
}
.dark\:border-destructive\/25:where(.dark, .dark *) {
border-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--destructive) 25%, transparent);
}
}
.dark\:border-info\/25:where(.dark, .dark *) {
border-color: var(--info);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--info) 25%, transparent);
}
}
.dark\:border-invert\/45:where(.dark, .dark *) {
border-color: var(--invert);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--invert) 45%, transparent);
}
}
.dark\:border-primary\/25:where(.dark, .dark *) {
border-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--primary) 25%, transparent);
}
}
.dark\:border-success\/25:where(.dark, .dark *) {
border-color: var(--success);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--success) 25%, transparent);
}
}
.dark\:border-warning\/25:where(.dark, .dark *) {
border-color: var(--warning);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--warning) 25%, transparent);
}
}
.dark\:bg-destructive\/15:where(.dark, .dark *) {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 15%, transparent);
}
}
.dark\:bg-info\/15:where(.dark, .dark *) {
background-color: var(--info);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--info) 15%, transparent);
}
}
.dark\:bg-input\/30:where(.dark, .dark *) {
background-color: var(--input);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--input) 30%, transparent);
}
}
.dark\:bg-input\/32:where(.dark, .dark *) {
background-color: var(--input);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--input) 32%, transparent);
}
}
.dark\:bg-invert\/35:where(.dark, .dark *) {
background-color: var(--invert);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--invert) 35%, transparent);
}
}
.dark\:bg-primary\/15:where(.dark, .dark *) {
background-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--primary) 15%, transparent);
}
}
.dark\:bg-success\/15:where(.dark, .dark *) {
background-color: var(--success);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--success) 15%, transparent);
}
}
.dark\:bg-warning\/15:where(.dark, .dark *) {
background-color: var(--warning);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--warning) 15%, transparent);
}
}
.dark\:text-destructive:where(.dark, .dark *) {
color: var(--destructive);
}
.dark\:text-info:where(.dark, .dark *) {
color: var(--info);
}
.dark\:text-invert-foreground:where(.dark, .dark *) {
color: var(--invert-foreground);
}
.dark\:text-primary:where(.dark, .dark *) {
color: var(--primary);
}
.dark\:text-success:where(.dark, .dark *) {
color: var(--success);
}
.dark\:text-warning:where(.dark, .dark *) {
color: var(--warning);
}
.\[\&_svg\]\:pointer-events-none svg {
pointer-events: none;
}
.\[\&_svg\]\:shrink-0 svg {
flex-shrink: 0;
}
.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-3 svg:not([class*=size-]) {
width: calc(var(--spacing) * 3);
height: calc(var(--spacing) * 3);
}
.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit > [data-slot=select-trigger]:not([class*='w-']) {
width: fit-content;
}
.\[\&\>\[data-slot\]\~\[data-slot\]\]\:rounded-t-none > [data-slot] ~ [data-slot] {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.\[\&\>\[data-slot\]\~\[data-slot\]\]\:rounded-l-none > [data-slot] ~ [data-slot] {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.\[\&\>\[data-slot\]\~\[data-slot\]\]\:border-t-0 > [data-slot] ~ [data-slot] {
border-top-style: var(--tw-border-style);
border-top-width: 0px;
}
.\[\&\>\[data-slot\]\~\[data-slot\]\]\:border-l-0 > [data-slot] ~ [data-slot] {
border-left-style: var(--tw-border-style);
border-left-width: 0px;
}
.\[\&\>input\]\:flex-1 > input {
flex: 1;
}
}
:root {
--background: #fff;
--foreground: #111;
--primary: #171717;
--primary-foreground: #fff;
--secondary: #eee;
--secondary-foreground: #171717;
--muted: #eee;
--muted-foreground: #666;
--accent: #eee;
--accent-foreground: #171717;
--border: #ddd;
--input: #ddd;
--ring: #777;
--destructive: #dc2626;
--destructive-foreground: #fff;
--popover: #fff;
--popover-foreground: #111;
--success: #15803d;
--success-foreground: #fff;
--radius: .625rem;
--hairline: 1px;
}
.dark {
--background: #090909;
--foreground: #fafafa;
--primary: #fafafa;
--primary-foreground: #171717;
--secondary: #262626;
--secondary-foreground: #fafafa;
--muted: #262626;
--muted-foreground: #a3a3a3;
--accent: #262626;
--accent-foreground: #fafafa;
--border: #333;
--input: #333;
--popover: #171717;
--popover-foreground: #fafafa;
}
@keyframes collapsible-down {
from {
height: 0;
}
to {
height: var(--radix-collapsible-content-height);
}
}
@keyframes collapsible-up {
from {
height: var(--radix-collapsible-content-height);
}
to {
height: 0;
}
}
@keyframes marquee-left {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
@keyframes marquee-right {
from {
transform: translateX(-50%);
}
to {
transform: translateX(0);
}
}
@keyframes marquee-up {
from {
transform: translateY(0);
}
to {
transform: translateY(-50%);
}
}
:root {
--font-sans: var(--font-inter);
--font-heading: var(--font-inter);
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
--radius: 0.625rem;
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
--chart-3: oklch(0.398 0.07 227.392);
--chart-4: oklch(0.828 0.189 84.429);
--chart-5: oklch(0.769 0.188 70.08);
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
--destructive-foreground: var(--color-red-800);
--success: var(--color-emerald-500);
--success-foreground: var(--color-emerald-900);
--info: var(--color-violet-500);
--info-foreground: var(--color-violet-900);
--warning: var(--color-yellow-500);
--warning-foreground: var(--color-yellow-900);
--invert: var(--color-zinc-900);
--invert-foreground: var(--color-zinc-50);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.269 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.371 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
--chart-4: oklch(0.627 0.265 303.9);
--chart-5: oklch(0.645 0.246 16.439);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.439 0 0);
--destructive-foreground: var(--color-red-600);
--success: var(--color-emerald-500);
--success-foreground: var(--color-emerald-600);
--info: var(--color-violet-500);
--info-foreground: var(--color-violet-600);
--warning: var(--color-yellow-500);
--warning-foreground: var(--color-yellow-600);
--invert: var(--color-zinc-700);
--invert-foreground: var(--color-zinc-50);
}
:root {
--surface: oklch(0.98 0 0);
--surface-foreground: var(--foreground);
--code: var(--surface);
--code-foreground: var(--surface-foreground);
--code-highlight: oklch(0.96 0 0);
--code-number: oklch(0.56 0 0);
--selection: oklch(0.145 0 0);
--selection-foreground: oklch(1 0 0);
}
.dark {
--surface: oklch(0.2 0 0);
--surface-foreground: oklch(0.708 0 0);
--code: var(--surface);
--code-foreground: var(--surface-foreground);
--code-highlight: oklch(0.27 0 0);
--code-number: oklch(0.72 0 0);
--selection: oklch(0.922 0 0);
--selection-foreground: oklch(0.205 0 0);
}
.cn-button {
border-radius: calc(var(--radius) - 2px);
border-style: var(--tw-border-style);
border-width: 1px;
border-color: transparent;
background-clip: padding-box;
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
&:focus-visible {
border-color: var(--ring);
}
&:focus-visible {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
&:focus-visible {
--tw-ring-color: var(--ring);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);
}
}
&:active {
&:not(*[aria-haspopup]) {
--tw-translate-y: 1px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
&[aria-invalid="true"] {
border-color: var(--destructive);
}
&[aria-invalid="true"] {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
&[aria-invalid="true"] {
--tw-ring-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
}
}
&:where(.dark, .dark *) {
&[aria-invalid="true"] {
border-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--destructive) 50%, transparent);
}
}
}
&:where(.dark, .dark *) {
&[aria-invalid="true"] {
--tw-ring-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);
}
}
}
& svg:not([class*='size-']) {
width: calc(var(--spacing) * 4);
height: calc(var(--spacing) * 4);
}
}
.cn-button-variant-default {
background-color: var(--primary);
color: var(--primary-foreground);
&:hover {
@media (hover: hover) {
background-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--primary) 80%, transparent);
}
}
}
}
.cn-button-variant-outline {
border-color: var(--border);
background-color: var(--background);
--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
&:hover {
@media (hover: hover) {
background-color: var(--muted);
}
}
&:hover {
@media (hover: hover) {
color: var(--foreground);
}
}
&[aria-expanded="true"] {
background-color: var(--muted);
}
&[aria-expanded="true"] {
color: var(--foreground);
}
&:where(.dark, .dark *) {
border-color: var(--input);
}
&:where(.dark, .dark *) {
background-color: var(--input);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--input) 30%, transparent);
}
}
&:where(.dark, .dark *) {
&:hover {
@media (hover: hover) {
background-color: var(--input);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--input) 50%, transparent);
}
}
}
}
}
.cn-button-variant-secondary {
background-color: var(--secondary);
color: var(--secondary-foreground);
&:hover {
@media (hover: hover) {
background-color: var(--secondary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklch,var(--secondary),var(--foreground) 5%);
}
}
}
&[aria-expanded="true"] {
background-color: var(--secondary);
}
&[aria-expanded="true"] {
color: var(--secondary-foreground);
}
}
@media (hover: hover) {
.cn-button-variant-ghost:hover {
background-color: var(--muted);
color: var(--foreground);
}
}
.cn-button-variant-ghost[aria-expanded="true"] {
background-color: var(--muted);
color: var(--foreground);
}
@media (hover: hover) {
.cn-button-variant-ghost:where(.dark, .dark *):hover {
background-color: var(--muted);
}
@supports (color: color-mix(in lab, red, red)) {
.cn-button-variant-ghost:where(.dark, .dark *):hover {
background-color: color-mix(in oklab, var(--muted) 50%, transparent);
}
}
}
.cn-button-variant-destructive {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
}
color: var(--destructive);
&:hover {
@media (hover: hover) {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 20%, transparent);
}
}
}
&:focus-visible {
border-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
border-color: color-mix(in oklab, var(--destructive) 40%, transparent);
}
}
&:focus-visible {
--tw-ring-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
}
}
&:where(.dark, .dark *) {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 20%, transparent);
}
}
&:where(.dark, .dark *) {
&:hover {
@media (hover: hover) {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 30%, transparent);
}
}
}
}
&:where(.dark, .dark *) {
&:focus-visible {
--tw-ring-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);
}
}
}
}
.cn-button-variant-link {
color: var(--primary);
text-underline-offset: 4px;
&:hover {
@media (hover: hover) {
text-decoration-line: underline;
}
}
}
.cn-button-size-xs {
height: calc(var(--spacing) * 6);
gap: var(--spacing);
border-radius: min(var(--radius-md), 8px);
padding-inline: calc(var(--spacing) * 2);
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
:where(*[data-slot="button-group"]) & {
border-radius: calc(var(--radius) - 2px);
}
&:has(*[data-icon="inline-end"]) {
padding-right: calc(var(--spacing) * 1.5);
}
&:has(*[data-icon="inline-start"]) {
padding-left: calc(var(--spacing) * 1.5);
}
& svg:not([class*='size-']) {
width: calc(var(--spacing) * 3);
height: calc(var(--spacing) * 3);
}
}
.cn-button-size-sm {
height: calc(var(--spacing) * 8);
gap: var(--spacing);
border-radius: min(var(--radius-md), 10px);
padding-inline: calc(var(--spacing) * 2.5);
:where(*[data-slot="button-group"]) & {
border-radius: calc(var(--radius) - 2px);
}
&:has(*[data-icon="inline-end"]) {
padding-right: calc(var(--spacing) * 1.5);
}
&:has(*[data-icon="inline-start"]) {
padding-left: calc(var(--spacing) * 1.5);
}
}
.cn-button-size-default {
height: calc(var(--spacing) * 9);
gap: calc(var(--spacing) * 1.5);
padding-inline: calc(var(--spacing) * 2.5);
:where(*[data-slot="button-group"]) & {
border-radius: calc(var(--radius) - 2px);
}
&:has(*[data-icon="inline-end"]) {
padding-right: calc(var(--spacing) * 2);
}
&:has(*[data-icon="inline-start"]) {
padding-left: calc(var(--spacing) * 2);
}
}
.cn-button-size-lg {
height: calc(var(--spacing) * 10);
gap: calc(var(--spacing) * 1.5);
padding-inline: calc(var(--spacing) * 2.5);
&:has(*[data-icon="inline-end"]) {
padding-right: calc(var(--spacing) * 2);
}
&:has(*[data-icon="inline-start"]) {
padding-left: calc(var(--spacing) * 2);
}
}
.cn-button-size-icon-xs {
width: calc(var(--spacing) * 6);
height: calc(var(--spacing) * 6);
border-radius: min(var(--radius-md), 8px);
:where(*[data-slot="button-group"]) & {
border-radius: calc(var(--radius) - 2px);
}
& svg:not([class*='size-']) {
width: calc(var(--spacing) * 3);
height: calc(var(--spacing) * 3);
}
}
.cn-button-size-icon-sm {
width: calc(var(--spacing) * 8);
height: calc(var(--spacing) * 8);
border-radius: min(var(--radius-md), 10px);
:where(*[data-slot="button-group"]) & {
border-radius: calc(var(--radius) - 2px);
}
}
.cn-button-size-icon {
width: calc(var(--spacing) * 9);
height: calc(var(--spacing) * 9);
}
.cn-button-size-icon-lg {
width: calc(var(--spacing) * 10);
height: calc(var(--spacing) * 10);
}
.cn-button-group:has( > [data-slot=button-group]) {
gap: calc(var(--spacing) * 2);
}
.cn-button-group:has(:is(select[aria-hidden=true]:last-child)) > [data-slot=select-trigger]:last-of-type {
border-top-right-radius: calc(var(--radius) - 2px);
border-bottom-right-radius: calc(var(--radius) - 2px);
}
.cn-button-group-orientation-horizontal > [data-slot]:not(:has( ~ [data-slot])) {
border-top-right-radius: calc(var(--radius) - 2px) !important;
border-bottom-right-radius: calc(var(--radius) - 2px) !important;
}
.cn-button-group-orientation-vertical > [data-slot]:not(:has( ~ [data-slot])) {
border-bottom-right-radius: calc(var(--radius) - 2px) !important;
border-bottom-left-radius: calc(var(--radius) - 2px) !important;
}
.cn-button-group-text {
gap: calc(var(--spacing) * 2);
border-radius: calc(var(--radius) - 2px);
border-style: var(--tw-border-style);
border-width: 1px;
background-color: var(--muted);
padding-inline: calc(var(--spacing) * 2.5);
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
& svg:not([class*='size-']) {
width: calc(var(--spacing) * 4);
height: calc(var(--spacing) * 4);
}
}
.cn-button-group-separator {
background-color: var(--input);
}
@property --tw-border-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
@property --tw-leading {
syntax: "*";
inherits: false;
}
@property --tw-font-weight {
syntax: "*";
inherits: false;
}
@property --tw-outline-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
@property --tw-blur {
syntax: "*";
inherits: false;
}
@property --tw-brightness {
syntax: "*";
inherits: false;
}
@property --tw-contrast {
syntax: "*";
inherits: false;
}
@property --tw-grayscale {
syntax: "*";
inherits: false;
}
@property --tw-hue-rotate {
syntax: "*";
inherits: false;
}
@property --tw-invert {
syntax: "*";
inherits: false;
}
@property --tw-opacity {
syntax: "*";
inherits: false;
}
@property --tw-saturate {
syntax: "*";
inherits: false;
}
@property --tw-sepia {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-drop-shadow-size {
syntax: "*";
inherits: false;
}
@property --tw-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-inset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
syntax: "*";
inherits: false;
}
@property --tw-ring-offset-width {
syntax: "<length>";
inherits: false;
initial-value: 0px;
}
@property --tw-ring-offset-color {
syntax: "*";
inherits: false;
initial-value: #fff;
}
@property --tw-ring-offset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-translate-x {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-y {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-z {
syntax: "*";
inherits: false;
initial-value: 0;
}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
--tw-border-style: solid;
--tw-leading: initial;
--tw-font-weight: initial;
--tw-outline-style: solid;
--tw-blur: initial;
--tw-brightness: initial;
--tw-contrast: initial;
--tw-grayscale: initial;
--tw-hue-rotate: initial;
--tw-invert: initial;
--tw-opacity: initial;
--tw-saturate: initial;
--tw-sepia: initial;
--tw-drop-shadow: initial;
--tw-drop-shadow-color: initial;
--tw-drop-shadow-alpha: 100%;
--tw-drop-shadow-size: initial;
--tw-shadow: 0 0 #0000;
--tw-shadow-color: initial;
--tw-shadow-alpha: 100%;
--tw-inset-shadow: 0 0 #0000;
--tw-inset-shadow-color: initial;
--tw-inset-shadow-alpha: 100%;
--tw-ring-color: initial;
--tw-ring-shadow: 0 0 #0000;
--tw-inset-ring-color: initial;
--tw-inset-ring-shadow: 0 0 #0000;
--tw-ring-inset: initial;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-offset-shadow: 0 0 #0000;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
}
}
}