wip(desktop): layout improvements

This commit is contained in:
Adam
2025-11-13 14:47:25 -06:00
parent 779a27693a
commit a8836c5615
27 changed files with 881 additions and 317 deletions

View File

@@ -1,10 +1,13 @@
import { Tabs as Kobalte } from "@kobalte/core/tabs"
import { splitProps } from "solid-js"
import { Show, splitProps, type JSX } from "solid-js"
import type { ComponentProps, ParentProps } from "solid-js"
export interface TabsProps extends ComponentProps<typeof Kobalte> {}
export interface TabsListProps extends ComponentProps<typeof Kobalte.List> {}
export interface TabsTriggerProps extends ComponentProps<typeof Kobalte.Trigger> {}
export interface TabsTriggerProps extends ComponentProps<typeof Kobalte.Trigger> {
hideCloseButton?: boolean
closeButton?: JSX.Element
}
export interface TabsContentProps extends ComponentProps<typeof Kobalte.Content> {}
function TabsRoot(props: TabsProps) {
@@ -26,7 +29,7 @@ function TabsList(props: TabsListProps) {
return (
<Kobalte.List
{...rest}
data-slot="list"
data-slot="tabs-list"
classList={{
...(split.classList ?? {}),
[split.class ?? ""]: !!split.class,
@@ -36,18 +39,26 @@ function TabsList(props: TabsListProps) {
}
function TabsTrigger(props: ParentProps<TabsTriggerProps>) {
const [split, rest] = splitProps(props, ["class", "classList", "children"])
const [split, rest] = splitProps(props, ["class", "classList", "children", "closeButton", "hideCloseButton"])
return (
<Kobalte.Trigger
{...rest}
data-slot="trigger"
<div
data-slot="tabs-trigger-wrapper"
classList={{
...(split.classList ?? {}),
[split.class ?? ""]: !!split.class,
}}
>
{split.children}
</Kobalte.Trigger>
<Kobalte.Trigger {...rest} data-slot="tabs-trigger" class="group/tab">
{split.children}
</Kobalte.Trigger>
<Show when={split.closeButton}>
{(closeButton) => (
<div data-slot="tabs-trigger-close-button" data-hidden={split.hideCloseButton}>
{closeButton()}
</div>
)}
</Show>
</div>
)
}
@@ -56,7 +67,7 @@ function TabsContent(props: ParentProps<TabsContentProps>) {
return (
<Kobalte.Content
{...rest}
data-slot="content"
data-slot="tabs-content"
classList={{
...(split.classList ?? {}),
[split.class ?? ""]: !!split.class,