From 8b4ee65e4a2e2c1b54b1d23f4c404e87a06b23aa Mon Sep 17 00:00:00 2001 From: "Irsyad A. Panjaitan" Date: Tue, 20 Aug 2024 23:49:27 +0700 Subject: [PATCH] mib --- components/doc-how.tsx | 65 +++++++++++++++++-- components/ui/tabs.tsx | 2 +- .../docs/components/navigation/tabs.mdx | 4 +- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/components/doc-how.tsx b/components/doc-how.tsx index 552cdb03a..5c793398c 100644 --- a/components/doc-how.tsx +++ b/components/doc-how.tsx @@ -6,7 +6,11 @@ import { previews } from "@/components/docs/generated/previews" import jsonPreviews from "@/components/docs/generated/previews.json" import { Code } from "@/components/docs/rehype/code" import { cn } from "@/resources/lib/utils" -import { Loader, Tabs } from "ui" +import { LayoutGroup, motion } from "framer-motion" +import { Tab as TabPrimitive, TabProps } from "react-aria-components" +import { twJoin } from "tailwind-merge" +import { tv } from "tailwind-variants" +import { cr, Loader, Tabs } from "ui" interface HowProps extends React.HTMLAttributes { toUse: string @@ -35,13 +39,16 @@ export function DocHow({ let codeString = jsonPreviews[toUse].raw ?? "" codeString = codeString.replace(/function\s+\w+\s*\(/g, "function App(") + const id = React.useId() return (
- - Preview - Code - + + + Preview + Code + +
) } + +const tabStyles = tv({ + base: [ + "relative flex whitespace-nowrap cursor-default items-center rounded-full text-sm font-medium outline-none transition forced-color-adjust-none hover:text-fg [&>[data-slot=icon]]:size-4 [&>[data-slot=icon]]:mr-2", + "group-orientation-vertical:w-full group-orientation-vertical:py-0 group-orientation-vertical:pl-4 group-orientation-vertical:pr-2", + "group-orientation-horizontal:pb-3" + ], + variants: { + isSelected: { + false: "text-muted-fg", + true: "text-fg forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]" + }, + isFocused: { false: "ring-0", true: "text-fg" }, + isDisabled: { + true: "text-muted-fg/50 forced-colors:text-[GrayText] forced-colors:selected:bg-[GrayText] forced-colors:selected:text-[HighlightText]" + } + } +}) + +const Tab = ({ children, ...props }: TabProps) => { + return ( + + tabStyles({ + ...renderProps, + className: twJoin("href" in props && "cursor-pointer", _className) + }) + )} + > + {({ isSelected }) => ( + <> + {children} + {isSelected && ( + + )} + + )} + + ) +} diff --git a/components/ui/tabs.tsx b/components/ui/tabs.tsx index fbecb63f9..778a6bb91 100644 --- a/components/ui/tabs.tsx +++ b/components/ui/tabs.tsx @@ -99,7 +99,7 @@ const Tab = ({ children, ...props }: TabProps) => { {isSelected && ( (props: TabListProps) => { ``` And then modify the `Tab` component to use the `motion` component. -```tsx {8} +```tsx {8-10} const Tab = ({ children, ...props }: TabProps) => { return ( @@ -84,6 +84,8 @@ const Tab = ({ children, ...props }: TabProps) => { {children} {isSelected && ( )}