boxmux 0.240.3373

YAML-driven terminal UI framework for rich, interactive CLI applications and dashboards with PTY support
Documentation
<!-- DocHero.svelte -->
<script lang="ts">
	import { Button } from '$lib/components/ui/button';
	import { Badge } from '$lib/components/ui/badge';
	import { ChevronRight, Clipboard, Check } from 'lucide-svelte';
	import { siteConfig } from '$lib/config';
	import { toast } from 'svelte-sonner';
	import { latestVersion } from '$lib/stores/version';

	export let data: { latestVersion: string; releaseUrl: string };

	let isCopied = false;
	const cargoCommand = `cargo install ${siteConfig.npm}`;

	async function copyCargoCommand() {
		try {
			await navigator.clipboard.writeText(cargoCommand);
			isCopied = true;
			toast.success('Copied to clipboard');

			// Reset the copied state after 2 seconds
			setTimeout(() => {
				isCopied = false;
			}, 2000);
		} catch (err) {
			toast.error('Failed to copy to clipboard');
		}
	}
</script>

<div class="relative overflow-hidden">
	<div class="relative mx-auto max-w-[85rem] px-4 pb-10 pt-24 sm:px-6 lg:px-8">
		<!-- Version badge -->
		<div class="flex justify-center">
			<a
				href={data.releaseUrl}
				class="inline-flex items-center gap-x-2 rounded-full border border-gray-200 bg-white p-1 ps-3 text-sm text-gray-800 transition hover:border-gray-300 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200"
			>
				Version {$latestVersion} - Latest Release
				<Badge variant="secondary" class="gap-x-2 rounded-full">
					<span class="hidden sm:inline">View on GitHub</span>
					<ChevronRight class="size-4" />
				</Badge>
			</a>
		</div>

		<!-- Title -->
		<div class="mx-auto mt-5 max-w-2xl text-center">
			<h1
				class="block text-4xl font-bold text-gray-800 dark:text-neutral-200 md:text-5xl lg:text-6xl"
			>
				{siteConfig.title}
			</h1>
		</div>

		<!-- Description -->
		<div class="mx-auto mt-5 max-w-3xl text-center">
			<p class="text-lg text-gray-600 dark:text-neutral-400">
				{siteConfig.description}
			</p>
		</div>

		<!-- Action Buttons -->
		<div class="mt-8 flex flex-col justify-center gap-3 sm:flex-row">
			<Button href="/docs" variant="default">
				Get Started
				<ChevronRight class="size-4" />
			</Button>

			{#if siteConfig.npm !== ''}
				<Button variant="outline" class="font-mono" onclick={copyCargoCommand}>
					{cargoCommand}
					<span class="ml-2 rounded bg-gray-200 p-1 dark:bg-neutral-700">
						{#if isCopied}
							<Check class="size-4 text-green-500 transition-transform" />
						{:else}
							<Clipboard class="size-4 transition-transform hover:rotate-6" />
						{/if}
					</span>
				</Button>
			{/if}
		</div>

		<!-- Quick Links -->
		<div class="mt-5 flex flex-wrap items-center justify-center gap-2">
			<span class="text-sm text-gray-600 dark:text-neutral-400">Quick links:</span>
			{#each siteConfig.quickLinks as link}
				<Button variant="link" href={link.href} class="h-auto p-1">
					{link.title}
					<ChevronRight class="size-4" />
				</Button>

				{#if link !== siteConfig.quickLinks[siteConfig.quickLinks.length - 1]}
					<span class="text-gray-300 dark:text-neutral-600">•</span>
				{/if}
			{/each}
		</div>
	</div>
</div>