import { Command as CommandPrimitive } from "cmdk";
import { cn } from "@/lib/utils";
import {
Command as ShadcnCommand,
CommandDialog as ShadcnCommandDialog,
CommandEmpty as ShadcnCommandEmpty,
CommandGroup as ShadcnCommandGroup,
CommandItem as ShadcnCommandItem,
CommandList as ShadcnCommandList,
CommandSeparator as ShadcnCommandSeparator,
CommandShortcut as ShadcnCommandShortcut,
} from "@/components/ui/command";
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
import "@/components/ui/pixelact-ui/styles/styles.css";
function Command({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive>) {
return (
<ShadcnCommand
data-slot="command"
className={cn(
"shadow-(--pixel-box-shadow) box-shadow-margin bg-popover text-popover-foreground flex h-full !w-full flex-col overflow-hidden rounded-none",
className
)}
{...props}
/>
);
}
function CommandDialog({
title = "Command Palette",
description = "Search for a command to run...",
children,
...props
}: React.ComponentProps<typeof Dialog> & {
title?: string;
description?: string;
}) {
return (
<ShadcnCommandDialog {...props}>
<DialogHeader className="sr-only">
<DialogTitle>{title}</DialogTitle>
<DialogDescription>{description}</DialogDescription>
</DialogHeader>
<DialogContent className="overflow-hidden p-0">
<Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
{children}
</Command>
</DialogContent>
</ShadcnCommandDialog>
);
}
function CommandInput({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive.Input>) {
return (
<CommandPrimitive.Input
data-slot="command-input"
className={cn(
"pixel-font border-b-2 p-4 border-muted placeholder:text-muted-foreground flex h-10 w-full rounded-none bg-transparent text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
className
)}
{...props}
/>
);
}
function CommandList({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive.List>) {
return (
<ShadcnCommandList
data-slot="command-list"
className={cn(
"max-h-[320px] scroll-py-1 overflow-x-hidden overflow-y-auto pixel-font",
className
)}
{...props}
/>
);
}
function CommandEmpty({
...props
}: React.ComponentProps<typeof CommandPrimitive.Empty>) {
return (
<ShadcnCommandEmpty
data-slot="command-empty"
className="py-6 text-center text-sm"
{...props}
/>
);
}
function CommandGroup({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive.Group>) {
return (
<ShadcnCommandGroup
data-slot="command-group"
className={cn(
"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
"retro",
className
)}
{...props}
/>
);
}
function CommandSeparator({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive.Separator>) {
return (
<ShadcnCommandSeparator
data-slot="command-separator"
className={cn("text-muted", className)}
{...props}
>
<hr />
</ShadcnCommandSeparator>
);
}
function CommandItem({
className,
...props
}: React.ComponentProps<typeof CommandPrimitive.Item>) {
return (
<ShadcnCommandItem
data-slot="command-item"
className={cn(
"rounded-none border-dashed border-y-3 border-ring/0 hover:border-foreground dark:hover:border-ring",
className
)}
{...props}
/>
);
}
function CommandShortcut({
className,
...props
}: React.ComponentProps<"span">) {
return (
<ShadcnCommandShortcut className={cn("", "retro", className)} {...props} />
);
}
export {
Command,
CommandDialog,
CommandInput,
CommandList,
CommandEmpty,
CommandGroup,
CommandItem,
CommandShortcut,
CommandSeparator,
};