diff options
| author | Filip <[email protected]> | 2025-09-24 18:05:15 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-09-24 11:05:15 -0500 |
| commit | d3b6545e7c6069c9db031634b7890e6b8eb4de2a (patch) | |
| tree | 5457b28378cf453e2c138337fc1abee3b3423ed2 /packages/app/src/ui | |
| parent | 3f911b22b011af74426699dac079b33badf862b1 (diff) | |
| download | opencode-d3b6545e7c6069c9db031634b7890e6b8eb4de2a.tar.gz opencode-d3b6545e7c6069c9db031634b7890e6b8eb4de2a.zip | |
feat(app): added command palette (#2630)
Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/app/src/ui')
| -rw-r--r-- | packages/app/src/ui/button.tsx | 67 | ||||
| -rw-r--r-- | packages/app/src/ui/link.tsx | 8 | ||||
| -rw-r--r-- | packages/app/src/ui/tooltip.tsx | 2 |
3 files changed, 31 insertions, 46 deletions
diff --git a/packages/app/src/ui/button.tsx b/packages/app/src/ui/button.tsx index e496d41bb..21d89fbee 100644 --- a/packages/app/src/ui/button.tsx +++ b/packages/app/src/ui/button.tsx @@ -1,49 +1,36 @@ -import { Button as KobalteButton } from "@kobalte/core/button" -import { splitProps } from "solid-js" -import type { ComponentProps } from "solid-js" +import { Button as Kobalte } from "@kobalte/core/button" +import { type ComponentProps, splitProps } from "solid-js" -export interface ButtonProps extends ComponentProps<typeof KobalteButton> { - variant?: "primary" | "secondary" | "outline" | "ghost" +export interface ButtonProps { + variant?: "primary" | "secondary" | "ghost" size?: "sm" | "md" | "lg" } -export const buttonStyles = { - base: "inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 cursor-pointer", - variants: { - primary: "bg-primary text-background hover:bg-secondary focus-visible:ring-primary data-[disabled]:opacity-50", - secondary: - "bg-background-panel text-text hover:bg-background-element focus-visible:ring-secondary data-[disabled]:opacity-50", - outline: - "border border-border bg-transparent text-text hover:bg-background-panel focus-visible:ring-border-active data-[disabled]:border-border-subtle data-[disabled]:text-text-muted", - ghost: "text-text hover:bg-background-panel focus-visible:ring-border-active data-[disabled]:text-text-muted", - }, - sizes: { - sm: "h-8 px-3 text-sm", - md: "h-10 px-4 text-sm", - lg: "h-12 px-6 text-base", - }, -} - -export function getButtonClasses( - variant: keyof typeof buttonStyles.variants = "primary", - size: keyof typeof buttonStyles.sizes = "md", - className?: string, -) { - return `${buttonStyles.base} ${buttonStyles.variants[variant]} ${buttonStyles.sizes[size]}${className ? ` ${className}` : ""}` -} - -export function Button(props: ButtonProps) { - const [local, others] = splitProps(props, ["variant", "size", "class", "classList"]) +export function Button(props: ComponentProps<"button"> & ButtonProps) { + const [split, rest] = splitProps(props, ["variant", "size", "class", "classList"]) return ( - <KobalteButton + <Kobalte + {...rest} + data-size={split.size || "sm"} + data-variant={split.variant || "secondary"} + class="inline-flex items-center justify-center rounded-md cursor-pointer font-medium transition-colors + min-w-0 whitespace-nowrap truncate + data-[size=sm]:h-6 data-[size=sm]:pl-2 data-[size=sm]:text-xs + data-[size=md]:h-8 data-[size=md]:pl-3 data-[size=md]:text-sm + data-[size=lg]:h-10 data-[size=lg]:pl-4 data-[size=lg]:text-base + data-[variant=primary]:bg-primary data-[variant=primary]:text-background + data-[variant=primary]:hover:bg-secondary data-[variant=primary]:focus-visible:ring-primary + data-[variant=secondary]:bg-background-element data-[variant=secondary]:text-text + data-[variant=secondary]:hover:bg-background-element data-[variant=secondary]:focus-visible:ring-secondary + data-[variant=ghost]:text-text data-[variant=ghost]:hover:bg-background-panel data-[variant=ghost]:focus-visible:ring-border-active + focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-transparent + disabled:pointer-events-none disabled:opacity-50" classList={{ - ...(local.classList ?? {}), - [buttonStyles.base]: true, - [buttonStyles.variants[local.variant || "primary"]]: true, - [buttonStyles.sizes[local.size || "md"]]: true, - [local.class ?? ""]: !!local.class, + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, }} - {...others} - /> + > + {props.children} + </Kobalte> ) } diff --git a/packages/app/src/ui/link.tsx b/packages/app/src/ui/link.tsx index a75a059ec..461206d58 100644 --- a/packages/app/src/ui/link.tsx +++ b/packages/app/src/ui/link.tsx @@ -1,15 +1,13 @@ import { A } from "@solidjs/router" import { splitProps } from "solid-js" import type { ComponentProps } from "solid-js" -import { getButtonClasses } from "./button" export interface LinkProps extends ComponentProps<typeof A> { - variant?: "primary" | "secondary" | "outline" | "ghost" + variant?: "primary" | "secondary" | "ghost" size?: "sm" | "md" | "lg" } export function Link(props: LinkProps) { - const [local, others] = splitProps(props, ["variant", "size", "class"]) - const classes = local.variant ? getButtonClasses(local.variant, local.size, local.class) : local.class - return <A class={classes} {...others} /> + const [, others] = splitProps(props, ["variant", "size", "class"]) + return <A {...others} /> } diff --git a/packages/app/src/ui/tooltip.tsx b/packages/app/src/ui/tooltip.tsx index f5884ca80..db826b77a 100644 --- a/packages/app/src/ui/tooltip.tsx +++ b/packages/app/src/ui/tooltip.tsx @@ -34,7 +34,7 @@ export function Tooltip(props: TooltipProps) { <KobalteTooltip.Portal> <KobalteTooltip.Content classList={{ - "z-50 max-w-[320px] rounded-md bg-background-element px-2 py-1": true, + "z-[1000] max-w-[320px] rounded-md bg-background-element px-2 py-1": true, "text-xs font-medium text-text shadow-md pointer-events-none!": true, "transition-all duration-150 ease-out": true, "transform-gpu transform-origin-[var(--kb-tooltip-content-transform-origin)]": true, |
