Skip to content

Commit 689e801

Browse files
committed
feat: sidebar tab improvements
1 parent b71b41d commit 689e801

File tree

2 files changed

+42
-17
lines changed

2 files changed

+42
-17
lines changed

src/routes/(app)/sessions/create/+page.svelte

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import IconXRegular from 'phosphor-icons-svelte/IconXRegular.svelte';
88
import IconTrash from 'phosphor-icons-svelte/IconTrashRegular.svelte';
99
import IconArrowsClockwise from 'phosphor-icons-svelte/IconArrowsClockwiseRegular.svelte';
10+
import IconUsersThreeRegular from 'phosphor-icons-svelte/IconUsersThreeRegular.svelte';
1011
import IconHeartRegular from 'phosphor-icons-svelte/IconHeartBold.svelte';
1112
import * as Resizable from '$lib/components/ui/resizable/index.js';
1213
import * as Accordion from '$lib/components/ui/accordion/index.js';
@@ -69,6 +70,8 @@
6970
import CopyButton from '$lib/components/copy-button.svelte';
7071
import Pip from '$lib/components/pip.svelte';
7172
import OptionField from './OptionField.svelte';
73+
import IconRobotRegular from 'phosphor-icons-svelte/IconRobotRegular.svelte';
74+
import SidebarTab from './SidebarTab.svelte';
7275
7376
type CreateSessionRequest = NonNullable<
7477
operations['createSession']['requestBody']
@@ -888,23 +891,22 @@
888891
<Resizable.Pane defaultSize={50} minSize={25} class="bg-card flex min-h-0 flex-col gap-4">
889892
<Tabs.Root bind:value={currentTab} class="w-full grow overflow-hidden">
890893
<Tabs.List class="bg-sidebar flex w-full rounded-none border-0 *:rounded-none">
891-
<Tabs.Trigger value="agent" class="flex items-center truncate">
892-
<IconMenu class="m-auto size-6 xl:hidden xl:size-0 " />
893-
<span class=" m-auto hidden xl:inline">Agent editor</span>
894-
</Tabs.Trigger>
895-
896-
<Tabs.Trigger value="session" class="flex items-center truncate">
897-
<IconWrenchRegular class="m-auto size-6 xl:hidden xl:size-0 " />
898-
<span
899-
class=" m-auto hidden xl:inline {$errors?.sessionRuntimeSettings?.ttl
900-
? 'text-destructive'
901-
: ''}">Session details</span
902-
>
903-
</Tabs.Trigger>
904-
<Tabs.Trigger value="groups" class="flex items-center truncate">
905-
<IconWrenchRegular class="m-auto size-6 xl:hidden xl:size-0 " />
906-
Agent Groups
907-
</Tabs.Trigger>
894+
<SidebarTab
895+
value="agent"
896+
icon={IconRobotRegular}
897+
invalid={Object.values($errors?.agents ?? {}).length > 0}>Agent</SidebarTab
898+
>
899+
<SidebarTab
900+
value="groups"
901+
icon={IconUsersThreeRegular}
902+
invalid={Object.values($errors?.groups ?? {}).length > 0}>Groups</SidebarTab
903+
>
904+
<SidebarTab
905+
value="session"
906+
icon={IconWrenchRegular}
907+
invalid={Object.values($errors?.sessionRuntimeSettings ?? {}).length > 0}
908+
>Session</SidebarTab
909+
>
908910
</Tabs.List>
909911
{@const availableOptions = {}}
910912
{#key selectedAgent}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script lang="ts">
2+
import * as Tabs from '$lib/components/ui/tabs';
3+
import { cn } from '$lib/utils';
4+
import type { TabsTriggerProps } from 'bits-ui';
5+
import type { Component } from 'svelte';
6+
7+
let {
8+
class: className,
9+
icon: Icon,
10+
invalid = false,
11+
children,
12+
...rest
13+
}: TabsTriggerProps & { icon: Component; invalid?: boolean } = $props();
14+
</script>
15+
16+
<Tabs.Trigger class={cn('group @container flex items-center gap-1 truncate', className)} {...rest}>
17+
<Icon class={cn('size-6', invalid && 'group-not-data-[state=active]:text-destructive')} />
18+
<span
19+
class={cn('hidden @[11ch]:inline', invalid && 'group-not-data-[state=active]:text-destructive')}
20+
>
21+
{@render children?.()}
22+
</span>
23+
</Tabs.Trigger>

0 commit comments

Comments
 (0)