summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-14 12:06:13 -0500
committerAdam <[email protected]>2025-10-14 12:06:18 -0500
commit49e859cfd6565c4ef67388c232e639917ec20625 (patch)
tree168101fe951797572cf6d723b9efe9474f073ed5 /packages/ui/src/components
parent6c57a69af44d1a4844f92311e11242206c155212 (diff)
downloadopencode-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.ts1
-rw-r--r--packages/ui/src/components/select.tsx10
-rw-r--r--packages/ui/src/components/tabs.tsx74
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,
+})