UI Components

UI components based on shadcn/ui

Overview

Linch Desktop Core includes a set of UI components based on shadcn/ui that can be imported and used directly.

Import

import {
  Button,
  Badge,
  Dialog,
  DropdownMenu,
  ScrollArea,
  Separator,
  Switch,
  Tabs,
  Tooltip,
} from '@linch-tech/desktop-core';

Button

Button component with multiple variants and sizes.

import { Button, buttonVariants } from '@linch-tech/desktop-core';

// Basic usage
<Button>Default Button</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="destructive">Destructive</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="link">Link</Button>

// Sizes
<Button size="sm">Small</Button>
<Button size="default">Default</Button>
<Button size="lg">Large</Button>
<Button size="icon">Icon</Button>

// Disabled state
<Button disabled>Disabled</Button>

Badge

Badge component for status indicators.

import { Badge, badgeVariants } from '@linch-tech/desktop-core';

<Badge>Default</Badge>
<Badge variant="secondary">Secondary</Badge>
<Badge variant="destructive">Destructive</Badge>
<Badge variant="outline">Outline</Badge>

Dialog

Dialog component.

import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
  DialogClose,
} from '@linch-tech/desktop-core';

<Dialog>
  <DialogTrigger asChild>
    <Button>Open Dialog</Button>
  </DialogTrigger>
  <DialogContent>
    <DialogHeader>
      <DialogTitle>Title</DialogTitle>
      <DialogDescription>Description text</DialogDescription>
    </DialogHeader>
    <div>Dialog content</div>
    <DialogFooter>
      <DialogClose asChild>
        <Button variant="outline">Cancel</Button>
      </DialogClose>
      <Button>Confirm</Button>
    </DialogFooter>
  </DialogContent>
</Dialog>

Dropdown menu component.

import {
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuLabel,
  DropdownMenuSeparator,
  DropdownMenuCheckboxItem,
  DropdownMenuRadioGroup,
  DropdownMenuRadioItem,
} from '@linch-tech/desktop-core';

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Open Menu</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuLabel>My Account</DropdownMenuLabel>
    <DropdownMenuSeparator />
    <DropdownMenuItem>Profile</DropdownMenuItem>
    <DropdownMenuItem>Settings</DropdownMenuItem>
    <DropdownMenuSeparator />
    <DropdownMenuItem>Log out</DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

ScrollArea

Scroll area component with custom scrollbar styles.

import { ScrollArea, ScrollBar } from '@linch-tech/desktop-core';

<ScrollArea className="h-72 w-48 rounded-md border">
  <div className="p-4">
    {/* Large content */}
  </div>
</ScrollArea>

// Horizontal scrolling
<ScrollArea className="w-96 whitespace-nowrap rounded-md border">
  <div className="flex w-max space-x-4 p-4">
    {/* Horizontal content */}
  </div>
  <ScrollBar orientation="horizontal" />
</ScrollArea>

Separator

Separator component.

import { Separator } from '@linch-tech/desktop-core';

<Separator />
<Separator orientation="vertical" className="h-4" />

Switch

Switch component.

import { Switch } from '@linch-tech/desktop-core';

const [enabled, setEnabled] = useState(false);

<Switch checked={enabled} onCheckedChange={setEnabled} />
<Switch disabled />

Tabs

Tabs component.

import { Tabs, TabsList, TabsTrigger, TabsContent } from '@linch-tech/desktop-core';

<Tabs defaultValue="tab1">
  <TabsList>
    <TabsTrigger value="tab1">Tab 1</TabsTrigger>
    <TabsTrigger value="tab2">Tab 2</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">Tab 1 content</TabsContent>
  <TabsContent value="tab2">Tab 2 content</TabsContent>
</Tabs>

Tooltip

Tooltip component.

import {
  Tooltip,
  TooltipTrigger,
  TooltipContent,
  TooltipProvider,
} from '@linch-tech/desktop-core';

<TooltipProvider>
  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Hover me</Button>
    </TooltipTrigger>
    <TooltipContent>
      <p>Tooltip content</p>
    </TooltipContent>
  </Tooltip>
</TooltipProvider>

Style Customization

All components support the className prop for style customization:

<Button className="bg-gradient-to-r from-pink-500 to-yellow-500">
  Gradient Button
</Button>

Use the cn utility function to merge class names:

import { cn } from '@linch-tech/desktop-core';

<Button className={cn("custom-class", isActive && "active")} />