import { cn } from "@/lib/utils"; import * as Slot from "@rn-primitives/slot"; import { cva, type VariantProps } from "class-variance-authority"; import * as React from "react"; import { Platform, Text as RNText, type Role } from "react-native"; const textVariants = cva( cn( "text-foreground text-base", Platform.select({ web: "select-text", }), ), { variants: { variant: { default: "", h1: cn( "text-center text-4xl font-extrabold tracking-tight", Platform.select({ web: "scroll-m-20 text-balance" }), ), h2: cn( "border-border border-b pb-2 text-3xl font-semibold tracking-tight", Platform.select({ web: "scroll-m-20 first:mt-0" }), ), h3: cn( "text-2xl font-semibold tracking-tight", Platform.select({ web: "scroll-m-20" }), ), h4: cn( "text-xl font-semibold tracking-tight", Platform.select({ web: "scroll-m-20" }), ), p: "mt-3 leading-7 sm:mt-6", blockquote: "mt-4 border-l-2 pl-3 italic sm:mt-6 sm:pl-6", code: cn( "bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold", ), lead: "text-muted-foreground text-xl", large: "text-lg font-semibold", small: "text-sm font-medium leading-none", muted: "text-muted-foreground text-sm", }, }, defaultVariants: { variant: "default", }, }, ); type TextVariantProps = VariantProps; type TextVariant = NonNullable; const ROLE: Partial> = { h1: "heading", h2: "heading", h3: "heading", h4: "heading", blockquote: Platform.select({ web: "blockquote" as Role }), code: Platform.select({ web: "code" as Role }), }; const ARIA_LEVEL: Partial> = { h1: "1", h2: "2", h3: "3", h4: "4", }; const TextClassContext = React.createContext(undefined); function Text({ className, asChild = false, variant = "default", ...props }: React.ComponentProps & TextVariantProps & React.RefAttributes & { asChild?: boolean; }) { const textClass = React.useContext(TextClassContext); const Component = asChild ? Slot.Text : RNText; return ( ); } export { Text, TextClassContext };