Shared Components

Reusable business components

Overview

Linch Desktop Core provides some reusable business components.

Application Logo component, displays a simple icon by default.

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

<Logo className="h-6 w-6" />

Custom Logo:

// src/config.ts
import { MyLogo } from './components/Logo';

brand: {
  logo: MyLogo,
},

Page header component.

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

<PageHeader
  title="Page Title"
  description="Page description text"
/>

// With action button
<PageHeader
  title="User Management"
  description="Manage all users in the system"
>
  <Button>Add User</Button>
</PageHeader>

Props:

interface PageHeaderProps {
  title: string;
  description?: string;
  children?: ReactNode;  // Right action area
  className?: string;
}

ThemeSwitcher

Theme switcher component, toggles between light/dark/system themes.

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

<ThemeSwitcher />

Displayed on the right side of TitleBar by default, can also be used standalone.

LanguageSwitcher

Language switcher component, changes application language.

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

<LanguageSwitcher />

Shows available language options based on i18n.supportedLanguages configuration.

WindowControls

Window control buttons component (minimize, maximize, close).

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

<WindowControls />

Usually not needed standalone, built into TitleBar. Import this component when customizing TitleBar.

Usage Examples

Page Layout

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

function UsersPage() {
  return (
    <ScrollArea className="flex-1">
      <div className="p-6">
        <PageHeader
          title="User Management"
          description="View and manage system users"
        >
          <Button>Add User</Button>
        </PageHeader>

        <div className="mt-6">
          {/* Page content */}
        </div>
      </div>
    </ScrollArea>
  );
}

Custom Title Bar

import { WindowControls, ThemeSwitcher, LanguageSwitcher } from '@linch-tech/desktop-core';

function CustomTitleBar() {
  return (
    <header className="flex h-10 items-center justify-between border-b px-3" data-tauri-drag-region>
      <div className="flex items-center gap-2">
        <MyLogo className="h-5 w-5" />
        <span className="font-semibold">My App</span>
      </div>

      <div className="flex items-center gap-1">
        <LanguageSwitcher />
        <ThemeSwitcher />
        <WindowControls />
      </div>
    </header>
  );
}