diff options
Diffstat (limited to 'src/ui/objects/Tabbar.tsx')
| -rw-r--r-- | src/ui/objects/Tabbar.tsx | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/ui/objects/Tabbar.tsx b/src/ui/objects/Tabbar.tsx new file mode 100644 index 0000000..58c58fa --- /dev/null +++ b/src/ui/objects/Tabbar.tsx | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | import type { HTMLAttributes } from "corvos/plugins/jsx.ts"; | ||
| 2 | |||
| 3 | export type Props = HTMLAttributes<"nav"> & { | ||
| 4 | "variant"?: "accent"; | ||
| 5 | "quiet"?: boolean; | ||
| 6 | "adapt"?: boolean; | ||
| 7 | "tabs-class"?: unknown; | ||
| 8 | }; | ||
| 9 | |||
| 10 | export const Tabbar = ({ | ||
| 11 | children, | ||
| 12 | variant, | ||
| 13 | quiet, | ||
| 14 | adapt, | ||
| 15 | "tabs-class": tabsClass, | ||
| 16 | class: cls, | ||
| 17 | ...props | ||
| 18 | }: Props) => ( | ||
| 19 | <nav | ||
| 20 | class:list={[ | ||
| 21 | "o-tabbar", | ||
| 22 | { | ||
| 23 | [`o-tabbar--${variant}`]: variant, | ||
| 24 | "o-tabbar--quiet": quiet, | ||
| 25 | "o-tabbar--adapt": adapt, | ||
| 26 | }, | ||
| 27 | "js-keyboard-nav", | ||
| 28 | cls, | ||
| 29 | ]} | ||
| 30 | data-keyboard-nav-item=".o-tabbar__tab" | ||
| 31 | data-keyboard-nav-mode="nav" | ||
| 32 | {...props} | ||
| 33 | > | ||
| 34 | <div | ||
| 35 | aria-label={props["aria-label"]} | ||
| 36 | aria-orientation="horizontal" | ||
| 37 | class:list={["o-tabbar__tabs", tabsClass]} | ||
| 38 | role="tablist" | ||
| 39 | > | ||
| 40 | {children} | ||
| 41 | </div> | ||
| 42 | </nav> | ||
| 43 | ); | ||
