Skip to content

Commit cfbbd60

Browse files
committed
feat: replace branch input with combobox
1 parent 4ea880e commit cfbbd60

16 files changed

Lines changed: 1564 additions & 125 deletions

File tree

frontend/frontend-kit/ui/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"icon:remove": "icons-master remove"
1111
},
1212
"dependencies": {
13+
"@base-ui/react": "^1.3.0",
1314
"@radix-ui/react-checkbox": "^1.3.3",
1415
"@radix-ui/react-collapsible": "^1.1.12",
1516
"@radix-ui/react-dialog": "^1.1.15",
@@ -26,6 +27,7 @@
2627
"clsx": "^2.1.1",
2728
"lucide-react": "^0.563.0",
2829
"next-themes": "^0.4.6",
30+
"radix-ui": "^1.4.3",
2931
"react": "^19.2.4",
3032
"react-dom": "^19.2.4",
3133
"react-resizable-panels": "^4.6.0",
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
1-
import { Slot } from "@radix-ui/react-slot";
2-
import { cva, type VariantProps } from "class-variance-authority";
3-
import * as React from "react";
1+
import * as React from "react"
2+
import { cva, type VariantProps } from "class-variance-authority"
3+
import { Slot } from "radix-ui"
44

5-
import { cn } from "@workspace/ui/lib/utils";
5+
import { cn } from "@workspace/ui/lib/utils"
66

77
const buttonVariants = cva(
8-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
8+
"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
99
{
1010
variants: {
1111
variant: {
1212
default: "bg-primary text-primary-foreground hover:bg-primary/90",
1313
destructive:
14-
"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
14+
"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
1515
outline:
16-
"border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
16+
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
1717
secondary:
1818
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
1919
ghost:
20-
"text-foreground hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
20+
"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
2121
link: "text-primary underline-offset-4 hover:underline",
2222
},
2323
size: {
2424
default: "h-9 px-4 py-2 has-[>svg]:px-3",
25-
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
25+
xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
26+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
2627
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
2728
icon: "size-9",
29+
"icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
2830
"icon-sm": "size-8",
2931
"icon-lg": "size-10",
3032
},
@@ -33,28 +35,30 @@ const buttonVariants = cva(
3335
variant: "default",
3436
size: "default",
3537
},
36-
},
37-
);
38+
}
39+
)
3840

3941
function Button({
4042
className,
41-
variant,
42-
size,
43+
variant = "default",
44+
size = "default",
4345
asChild = false,
4446
...props
4547
}: React.ComponentProps<"button"> &
4648
VariantProps<typeof buttonVariants> & {
47-
asChild?: boolean;
49+
asChild?: boolean
4850
}) {
49-
const Comp = asChild ? Slot : "button";
51+
const Comp = asChild ? Slot.Root : "button"
5052

5153
return (
5254
<Comp
5355
data-slot="button"
56+
data-variant={variant}
57+
data-size={size}
5458
className={cn(buttonVariants({ variant, size, className }))}
5559
{...props}
5660
/>
57-
);
61+
)
5862
}
5963

60-
export { Button, buttonVariants };
64+
export { Button, buttonVariants }

0 commit comments

Comments
 (0)