diff options
| author | Adam <[email protected]> | 2025-10-14 12:06:13 -0500 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-10-14 12:06:18 -0500 |
| commit | 49e859cfd6565c4ef67388c232e639917ec20625 (patch) | |
| tree | 168101fe951797572cf6d723b9efe9474f073ed5 /packages/ui/src/components | |
| parent | 6c57a69af44d1a4844f92311e11242206c155212 (diff) | |
| download | opencode-49e859cfd6565c4ef67388c232e639917ec20625.tar.gz opencode-49e859cfd6565c4ef67388c232e639917ec20625.zip | |
wip: css/ui work
Diffstat (limited to 'packages/ui/src/components')
| -rw-r--r-- | packages/ui/src/components/index.ts | 1 | ||||
| -rw-r--r-- | packages/ui/src/components/select.tsx | 10 | ||||
| -rw-r--r-- | packages/ui/src/components/tabs.tsx | 74 |
3 files changed, 83 insertions, 2 deletions
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 80d80299b..be12d6a67 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -1,3 +1,4 @@ export * from "./button" export * from "./icon" export * from "./select" +export * from "./tabs" diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index c4d5443c1..ecf05d5e2 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -79,11 +79,17 @@ export function Select<T>(props: SelectProps<T> & ButtonProps) { }} </Kobalte.Value> <Kobalte.Icon data-slot="icon"> - <Icon name="chevron-down" size={16} class="-my-2 group-data-[expanded]:rotate-180" /> + <Icon name="chevron-down" size={16} /> </Kobalte.Icon> </Kobalte.Trigger> <Kobalte.Portal> - <Kobalte.Content data-component="select-content"> + <Kobalte.Content + classList={{ + ...(props.classList ?? {}), + [props.class ?? ""]: !!props.class, + }} + data-component="select-content" + > <Kobalte.Listbox data-slot="list" /> </Kobalte.Content> </Kobalte.Portal> diff --git a/packages/ui/src/components/tabs.tsx b/packages/ui/src/components/tabs.tsx new file mode 100644 index 000000000..5e047a7ca --- /dev/null +++ b/packages/ui/src/components/tabs.tsx @@ -0,0 +1,74 @@ +import { Tabs as Kobalte } from "@kobalte/core/tabs" +import { splitProps } 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 TabsContentProps extends ComponentProps<typeof Kobalte.Content> {} + +function TabsRoot(props: TabsProps) { + const [split, rest] = splitProps(props, ["class", "classList"]) + return ( + <Kobalte + {...rest} + data-component="tabs" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + /> + ) +} + +function TabsList(props: TabsListProps) { + const [split, rest] = splitProps(props, ["class", "classList"]) + return ( + <Kobalte.List + {...rest} + data-slot="list" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + /> + ) +} + +function TabsTrigger(props: ParentProps<TabsTriggerProps>) { + const [split, rest] = splitProps(props, ["class", "classList", "children"]) + return ( + <Kobalte.Trigger + {...rest} + data-slot="trigger" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + > + {split.children} + </Kobalte.Trigger> + ) +} + +function TabsContent(props: ParentProps<TabsContentProps>) { + const [split, rest] = splitProps(props, ["class", "classList", "children"]) + return ( + <Kobalte.Content + {...rest} + data-slot="content" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + > + {split.children} + </Kobalte.Content> + ) +} + +export const Tabs = Object.assign(TabsRoot, { + List: TabsList, + Trigger: TabsTrigger, + Content: TabsContent, +}) |
