@muja-ui/native 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/ThemeProvider.tsx","../src/system/styleProps.ts","../src/components/Box.tsx","../src/components/Flex.tsx","../src/components/Stack.tsx","../src/components/Spacer.tsx","../src/components/Divider.tsx","../src/components/Text.tsx","../src/components/Heading.tsx","../src/components/Icon.tsx","../src/system/variants.ts","../src/components/Button.tsx","../src/components/IconButton.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Label.tsx","../src/components/FormField.tsx","../src/internal/useControllableState.ts","../src/components/Checkbox.tsx","../src/components/Switch.tsx","../src/components/Radio.tsx","../src/components/BottomSheet.tsx","../src/components/Select.tsx","../src/components/Skeleton.tsx","../src/components/Spinner.tsx","../src/components/Progress.tsx","../src/components/Toast.tsx","../src/components/EmptyState.tsx","../src/components/Badge.tsx","../src/components/Chip.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/Screen.tsx","../src/components/ListRow.tsx","../src/components/Avatar.tsx","../src/components/Tabs.tsx","../src/components/Accordion.tsx","../src/internal/date.ts","../src/components/Calendar.tsx","../src/components/Carousel.tsx","../src/components/Tooltip.tsx","../src/components/Modal.tsx","../src/components/Drawer.tsx","../src/components/ActionSheet.tsx"],"names":["createContext","defaultLightTheme","darkTheme","defaultDarkTheme","useState","useColorScheme","useCallback","useMemo","jsx","useContext","Platform","forwardRef","Box","View","Flex","Stack","HStack","StyleSheet","Text","RNText","Heading","getIcon","warnOnce","Svg","Path","Button","jsxs","Pressable","ActivityIndicator","IconButton","Input","TextInput","Textarea","Label","boxSize","MinusIcon","CheckIcon","useSafeAreaInsets","useWindowDimensions","useRef","Animated","useEffect","Easing","PanResponder","RNModal","Fragment","ChevronDownIcon","ScrollView","clamp","InfoIcon","AlertTriangleIcon","AlertCircleIcon","XIcon","Card","maxWidth","RefreshControl","ChevronRightIcon","Image","ChevronLeftIcon"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n darkTheme as defaultDarkTheme,\n lightTheme as defaultLightTheme,\n type ColorMode,\n type ResolvedColorMode,\n type Theme,\n} from '@muja-ui/core';\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { useColorScheme } from 'react-native';\n\nexport interface ThemeContextValue {\n /** The active theme for the resolved color mode. */\n theme: Theme;\n /** The user preference: 'light' | 'dark' | 'system'. */\n colorMode: ColorMode;\n /** What is actually rendered: 'light' | 'dark'. */\n resolvedColorMode: ResolvedColorMode;\n setColorMode: (mode: ColorMode) => void;\n toggleColorMode: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /** Theme used in light mode. Defaults to the built-in light theme. */\n theme?: Theme;\n /** Theme used in dark mode. Defaults to the built-in dark theme. */\n darkTheme?: Theme;\n /** Uncontrolled initial preference. */\n defaultColorMode?: ColorMode;\n /**\n * Controlled preference. React Native has no synchronous storage, so\n * persistence belongs to the app (SecureStore, AsyncStorage, MMKV…): pass the\n * stored value here and write it back from `onColorModeChange`.\n */\n colorMode?: ColorMode;\n onColorModeChange?: (mode: ColorMode) => void;\n children: ReactNode;\n}\n\n/**\n * Provides the resolved theme to every native component. `'system'` follows the\n * OS appearance through React Native's `useColorScheme()`.\n *\n * ```tsx\n * <ThemeProvider theme={sduLightTheme} darkTheme={sduDarkTheme}>\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n theme = defaultLightTheme,\n darkTheme = defaultDarkTheme,\n defaultColorMode = 'system',\n colorMode: colorModeProp,\n onColorModeChange,\n children,\n}: ThemeProviderProps) {\n const [uncontrolledMode, setUncontrolledMode] = useState<ColorMode>(defaultColorMode);\n const colorMode = colorModeProp ?? uncontrolledMode;\n\n const systemScheme = useColorScheme();\n const resolvedColorMode: ResolvedColorMode =\n colorMode === 'system' ? (systemScheme === 'dark' ? 'dark' : 'light') : colorMode;\n\n const setColorMode = useCallback(\n (mode: ColorMode) => {\n if (colorModeProp === undefined) setUncontrolledMode(mode);\n onColorModeChange?.(mode);\n },\n [colorModeProp, onColorModeChange],\n );\n\n const toggleColorMode = useCallback(() => {\n setColorMode(resolvedColorMode === 'dark' ? 'light' : 'dark');\n }, [resolvedColorMode, setColorMode]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: resolvedColorMode === 'dark' ? darkTheme : theme,\n colorMode,\n resolvedColorMode,\n setColorMode,\n toggleColorMode,\n }),\n [theme, darkTheme, colorMode, resolvedColorMode, setColorMode, toggleColorMode],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nfunction useThemeContext(hookName: string): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error(`[muja-ui] ${hookName} must be used within a <ThemeProvider>.`);\n }\n return context;\n}\n\n/** The active theme object (already resolved for the current color mode). */\nexport function useTheme(): Theme {\n return useThemeContext('useTheme').theme;\n}\n\n/** Color mode state and controls. */\nexport function useColorMode(): Omit<ThemeContextValue, 'theme'> {\n const { colorMode, resolvedColorMode, setColorMode, toggleColorMode } =\n useThemeContext('useColorMode');\n return { colorMode, resolvedColorMode, setColorMode, toggleColorMode };\n}\n\n/** Picks a value based on the resolved color mode. */\nexport function useColorModeValue<T>(lightValue: T, darkValue: T): T {\n return useThemeContext('useColorModeValue').resolvedColorMode === 'dark' ? darkValue : lightValue;\n}\n","import type { Theme } from '@muja-ui/core';\nimport type {\n BorderWidthToken,\n RadiusToken,\n SemanticColorToken,\n ShadowToken,\n ShadowValue,\n SpaceToken,\n ZIndexToken,\n} from '@muja-ui/tokens';\nimport { Platform, type FlexStyle, type ViewStyle } from 'react-native';\n\n/**\n * Token-bound style props — the same names the web package uses, so a screen\n * reads the same on both platforms. Values resolve against the active theme at\n * render time (React Native has no CSS variables).\n */\nexport interface StyleProps {\n /** margin */\n m?: SpaceToken;\n mt?: SpaceToken;\n mr?: SpaceToken;\n mb?: SpaceToken;\n ml?: SpaceToken;\n mx?: SpaceToken;\n my?: SpaceToken;\n /** padding */\n p?: SpaceToken;\n pt?: SpaceToken;\n pr?: SpaceToken;\n pb?: SpaceToken;\n pl?: SpaceToken;\n px?: SpaceToken;\n py?: SpaceToken;\n /** colors */\n bg?: SemanticColorToken;\n borderColor?: SemanticColorToken;\n /** borders & effects */\n borderWidth?: BorderWidthToken;\n borderTopWidth?: BorderWidthToken;\n borderBottomWidth?: BorderWidthToken;\n radius?: RadiusToken;\n shadow?: ShadowToken;\n opacity?: number;\n zIndex?: ZIndexToken;\n /** sizing — numbers are density-independent pixels, strings pass through ('100%') */\n w?: FlexStyle['width'];\n h?: FlexStyle['height'];\n minW?: FlexStyle['minWidth'];\n maxW?: FlexStyle['maxWidth'];\n minH?: FlexStyle['minHeight'];\n maxH?: FlexStyle['maxHeight'];\n /** layout */\n flex?: number;\n alignSelf?: FlexStyle['alignSelf'];\n position?: FlexStyle['position'];\n top?: FlexStyle['top'];\n right?: FlexStyle['right'];\n bottom?: FlexStyle['bottom'];\n left?: FlexStyle['left'];\n overflow?: ViewStyle['overflow'];\n}\n\n/**\n * Translates a token shadow into React Native's two shadow models: iOS reads\n * the offset/opacity/radius quartet, Android only has `elevation`.\n */\nexport function shadowStyle(value: ShadowValue): ViewStyle {\n const layer = value.layers[0];\n if (!layer) return Platform.OS === 'android' ? { elevation: 0 } : { shadowOpacity: 0 };\n\n const alpha = /rgba?\\([^)]*,\\s*([\\d.]+)\\s*\\)/.exec(layer.color)?.[1];\n return {\n shadowColor: layer.color.replace(/rgba?\\(([^)]*?),\\s*[\\d.]+\\s*\\)/, 'rgb($1)'),\n shadowOffset: { width: layer.x, height: layer.y },\n shadowOpacity: alpha ? Number(alpha) : 0.1,\n shadowRadius: layer.blur / 2,\n // Android's single-number model: approximate the blur as elevation.\n elevation: Math.round(layer.blur / 2),\n };\n}\n\ntype Resolver = (value: never, theme: Theme) => ViewStyle;\n\nconst space = (key: keyof ViewStyle) => (value: SpaceToken, theme: Theme) =>\n ({ [key]: theme.space[value] }) as ViewStyle;\n\nconst pair = (a: keyof ViewStyle, b: keyof ViewStyle) => (value: SpaceToken, theme: Theme) =>\n ({ [a]: theme.space[value], [b]: theme.space[value] }) as ViewStyle;\n\nconst passthrough = (key: keyof ViewStyle) => (value: unknown) => ({ [key]: value }) as ViewStyle;\n\nconst resolvers: Record<keyof StyleProps, Resolver> = {\n m: space('margin') as Resolver,\n mt: space('marginTop') as Resolver,\n mr: space('marginRight') as Resolver,\n mb: space('marginBottom') as Resolver,\n ml: space('marginLeft') as Resolver,\n mx: pair('marginLeft', 'marginRight') as Resolver,\n my: pair('marginTop', 'marginBottom') as Resolver,\n p: space('padding') as Resolver,\n pt: space('paddingTop') as Resolver,\n pr: space('paddingRight') as Resolver,\n pb: space('paddingBottom') as Resolver,\n pl: space('paddingLeft') as Resolver,\n px: pair('paddingLeft', 'paddingRight') as Resolver,\n py: pair('paddingTop', 'paddingBottom') as Resolver,\n bg: ((value: SemanticColorToken, theme: Theme) => ({\n backgroundColor: theme.colors[value],\n })) as Resolver,\n borderColor: ((value: SemanticColorToken, theme: Theme) => ({\n borderColor: theme.colors[value],\n })) as Resolver,\n borderWidth: ((value: BorderWidthToken, theme: Theme) => ({\n borderWidth: theme.borderWidth[value],\n })) as Resolver,\n borderTopWidth: ((value: BorderWidthToken, theme: Theme) => ({\n borderTopWidth: theme.borderWidth[value],\n })) as Resolver,\n borderBottomWidth: ((value: BorderWidthToken, theme: Theme) => ({\n borderBottomWidth: theme.borderWidth[value],\n })) as Resolver,\n radius: ((value: RadiusToken, theme: Theme) => ({\n borderRadius: theme.radius[value],\n })) as Resolver,\n shadow: ((value: ShadowToken, theme: Theme) => shadowStyle(theme.shadow[value])) as Resolver,\n zIndex: ((value: ZIndexToken, theme: Theme) => ({ zIndex: theme.zIndex[value] })) as Resolver,\n opacity: passthrough('opacity') as Resolver,\n w: passthrough('width') as Resolver,\n h: passthrough('height') as Resolver,\n minW: passthrough('minWidth') as Resolver,\n maxW: passthrough('maxWidth') as Resolver,\n minH: passthrough('minHeight') as Resolver,\n maxH: passthrough('maxHeight') as Resolver,\n flex: passthrough('flex') as Resolver,\n alignSelf: passthrough('alignSelf') as Resolver,\n position: passthrough('position') as Resolver,\n top: passthrough('top') as Resolver,\n right: passthrough('right') as Resolver,\n bottom: passthrough('bottom') as Resolver,\n left: passthrough('left') as Resolver,\n overflow: passthrough('overflow') as Resolver,\n};\n\nfunction isStyleProp(key: string): key is keyof StyleProps {\n return key in resolvers;\n}\n\n/**\n * Splits an incoming prop object into a resolved React Native style and the\n * remaining component props.\n */\nexport function splitStyleProps<P extends Record<string, unknown>>(\n props: P,\n theme: Theme,\n): { style: ViewStyle; rest: Omit<P, keyof StyleProps> } {\n const style: ViewStyle = {};\n const rest: Record<string, unknown> = {};\n\n for (const key of Object.keys(props)) {\n const value = props[key];\n if (value !== undefined && isStyleProp(key)) {\n Object.assign(style, resolvers[key](value as never, theme));\n } else {\n rest[key] = value;\n }\n }\n\n return { style, rest: rest as Omit<P, keyof StyleProps> };\n}\n","import { forwardRef } from 'react';\nimport { View, type StyleProp, type View as RNView, type ViewProps, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { splitStyleProps, type StyleProps } from '../system/styleProps';\n\nexport type BoxProps = StyleProps &\n Omit<ViewProps, 'style'> & {\n style?: StyleProp<ViewStyle>;\n };\n\n/**\n * The base layout primitive — a `View` with token-bound style props. Same prop\n * names as `@muja-ui/web`'s Box, so layout code ports between platforms.\n *\n * ```tsx\n * <Box p={6} bg=\"surface\" radius=\"lg\" shadow=\"sm\" />\n * ```\n */\nexport const Box = forwardRef<RNView, BoxProps>(function Box(props, ref) {\n const theme = useTheme();\n const { style: styleProp, ...restProps } = props;\n const { style, rest } = splitStyleProps(restProps as Record<string, unknown>, theme);\n return <View ref={ref} {...(rest as ViewProps)} style={[style, styleProp]} />;\n});\n","import type { SpaceToken } from '@muja-ui/tokens';\nimport { forwardRef } from 'react';\nimport type { FlexStyle, View as RNView } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Box, type BoxProps } from './Box';\n\nexport interface FlexOwnProps {\n direction?: FlexStyle['flexDirection'];\n align?: FlexStyle['alignItems'];\n justify?: FlexStyle['justifyContent'];\n wrap?: FlexStyle['flexWrap'];\n gap?: SpaceToken;\n rowGap?: SpaceToken;\n columnGap?: SpaceToken;\n}\n\nexport type FlexProps = FlexOwnProps & BoxProps;\n\n/** Flexbox container with token-bound `gap`. */\nexport const Flex = forwardRef<RNView, FlexProps>(function Flex(\n { direction = 'row', align, justify, wrap, gap, rowGap, columnGap, style, ...rest },\n ref,\n) {\n const theme = useTheme();\n return (\n <Box\n ref={ref}\n {...rest}\n style={[\n {\n flexDirection: direction,\n alignItems: align,\n justifyContent: justify,\n flexWrap: wrap,\n gap: gap !== undefined ? theme.space[gap] : undefined,\n rowGap: rowGap !== undefined ? theme.space[rowGap] : undefined,\n columnGap: columnGap !== undefined ? theme.space[columnGap] : undefined,\n },\n style,\n ]}\n />\n );\n});\n","import { forwardRef } from 'react';\nimport type { View as RNView } from 'react-native';\nimport { Flex, type FlexProps } from './Flex';\n\nexport type StackProps = FlexProps;\n\n/** Vertical flex layout with a default gap. Use `direction=\"row\"` for rows. */\nexport const Stack = forwardRef<RNView, StackProps>(function Stack(\n { direction = 'column', gap = 4, ...rest },\n ref,\n) {\n return <Flex ref={ref} direction={direction} gap={gap} {...rest} />;\n});\n\n/** Horizontal convenience wrapper around `Stack`. */\nexport const HStack = forwardRef<RNView, StackProps>(function HStack(props, ref) {\n return <Stack ref={ref} direction=\"row\" align=\"center\" {...props} />;\n});\n","import type { SpaceToken } from '@muja-ui/tokens';\nimport { View } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SpacerProps {\n /** Fixed size along the parent's main axis. Omit to grow and fill. */\n size?: SpaceToken;\n axis?: 'horizontal' | 'vertical';\n}\n\n/** Flexible or fixed empty space. Without `size` it expands to fill. */\nexport function Spacer({ size, axis = 'vertical' }: SpacerProps) {\n const theme = useTheme();\n if (size === undefined) return <View style={{ flex: 1 }} />;\n const length = theme.space[size];\n return <View style={axis === 'vertical' ? { height: length } : { width: length }} />;\n}\n","import type { SemanticColorToken } from '@muja-ui/tokens';\nimport { StyleSheet, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n color?: SemanticColorToken;\n style?: StyleProp<ViewStyle>;\n}\n\n/** A one-hairline rule. Decorative — hidden from screen readers. */\nexport function Divider({ orientation = 'horizontal', color = 'border', style }: DividerProps) {\n const theme = useTheme();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={[\n orientation === 'horizontal'\n ? { height: StyleSheet.hairlineWidth, alignSelf: 'stretch' }\n : { width: StyleSheet.hairlineWidth, alignSelf: 'stretch' },\n { backgroundColor: theme.colors[color] },\n style,\n ]}\n />\n );\n}\n","import type {\n FontFamilyToken,\n FontSizeToken,\n FontWeightToken,\n LetterSpacingToken,\n LineHeightToken,\n SemanticColorToken,\n} from '@muja-ui/tokens';\nimport { forwardRef } from 'react';\nimport {\n Text as RNText,\n type StyleProp,\n type TextProps as RNTextProps,\n type TextStyle,\n} from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { splitStyleProps, type StyleProps } from '../system/styleProps';\n\nexport interface TextOwnProps {\n size?: FontSizeToken;\n weight?: FontWeightToken;\n family?: FontFamilyToken;\n leading?: LineHeightToken;\n tracking?: LetterSpacingToken;\n align?: TextStyle['textAlign'];\n /** Semantic color token. Defaults to the theme's body text color. */\n color?: SemanticColorToken;\n /** Clips overflowing text to a single line with an ellipsis. */\n truncate?: boolean;\n}\n\nexport type TextProps = TextOwnProps &\n StyleProps &\n Omit<RNTextProps, 'style'> & { style?: StyleProp<TextStyle> };\n\n/**\n * Typography primitive. Color always comes from a semantic token, never a raw\n * value. React Native needs an absolute `lineHeight`, so the unitless token\n * multiplier is resolved against the font size here.\n *\n * ```tsx\n * <Text size=\"sm\" color=\"textSecondary\" truncate>…</Text>\n * ```\n */\nexport const Text = forwardRef<RNText, TextProps>(function Text(props, ref) {\n const theme = useTheme();\n const {\n size = 'md',\n weight,\n family = 'sans',\n leading,\n tracking,\n align,\n color = 'text',\n truncate,\n style: styleProp,\n numberOfLines,\n ...restProps\n } = props;\n\n const { style: tokenStyle, rest } = splitStyleProps(\n restProps as Record<string, unknown>,\n theme,\n );\n\n const fontSize = theme.typography.fontSize[size];\n const textStyle: TextStyle = {\n fontFamily: theme.typography.fontFamily[family],\n fontSize,\n color: theme.colors[color],\n fontWeight: weight ? (theme.typography.fontWeight[weight] as TextStyle['fontWeight']) : undefined,\n lineHeight: leading ? Math.round(fontSize * theme.typography.lineHeight[leading]) : undefined,\n letterSpacing: tracking ? theme.typography.letterSpacing[tracking] : undefined,\n textAlign: align,\n };\n\n return (\n <RNText\n ref={ref}\n numberOfLines={truncate ? 1 : numberOfLines}\n ellipsizeMode={truncate ? 'tail' : undefined}\n {...(rest as RNTextProps)}\n style={[textStyle, tokenStyle as TextStyle, styleProp]}\n />\n );\n});\n","import type { FontSizeToken } from '@muja-ui/tokens';\nimport { forwardRef } from 'react';\nimport type { Text as RNText } from 'react-native';\nimport { Text, type TextProps } from './Text';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingProps extends Omit<TextProps, 'accessibilityRole'> {\n /** Semantic heading level — sets the screen-reader heading role and default size. */\n level?: HeadingLevel;\n}\n\nconst defaultSize: Record<HeadingLevel, FontSizeToken> = {\n 1: '3xl',\n 2: '2xl',\n 3: 'xl',\n 4: 'lg',\n 5: 'md',\n 6: 'sm',\n};\n\n/**\n * A heading with the correct accessibility role. Sizes follow the level unless\n * `size` overrides them.\n *\n * ```tsx\n * <Heading level={2}>Upcoming events</Heading>\n * ```\n */\nexport const Heading = forwardRef<RNText, HeadingProps>(function Heading(\n { level = 2, size, weight = 'semibold', leading = 'tight', ...rest },\n ref,\n) {\n return (\n <Text\n ref={ref}\n accessibilityRole=\"header\"\n aria-level={level}\n size={size ?? defaultSize[level]}\n weight={weight}\n leading={leading}\n {...rest}\n />\n );\n});\n","import { getIcon, type IconDefinition } from '@muja-ui/core';\nimport type { SemanticColorToken } from '@muja-ui/tokens';\nimport { warnOnce } from '@muja-ui/utils';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport Svg, { Path } from 'react-native-svg';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface IconProps {\n /** An icon definition (preferred, tree-shakable) or a registered icon name. */\n icon: IconDefinition | string;\n size?: number;\n /** Semantic color token. Defaults to the current text color. */\n color?: SemanticColorToken;\n /** Accessible label. Without it the icon is treated as decorative. */\n label?: string;\n strokeWidth?: number;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Renders a stroke-style icon from `@muja-ui/icons` through react-native-svg,\n * from the same platform-neutral path data the web package uses.\n *\n * ```tsx\n * <Icon icon={CheckIcon} color=\"success\" />\n * ```\n */\nexport function Icon({\n icon,\n size = 20,\n color = 'text',\n label,\n strokeWidth = 2,\n style,\n}: IconProps) {\n const theme = useTheme();\n const definition = typeof icon === 'string' ? getIcon(icon) : icon;\n\n if (!definition) {\n warnOnce(\n `Icon \"${String(icon)}\" is not registered. Call registerIcons() from @muja-ui/core or pass an IconDefinition directly.`,\n );\n return null;\n }\n\n return (\n <Svg\n viewBox={definition.viewBox ?? '0 0 24 24'}\n width={size}\n height={size}\n fill=\"none\"\n style={style}\n accessibilityRole={label ? 'image' : undefined}\n accessibilityLabel={label}\n accessibilityElementsHidden={label ? undefined : true}\n importantForAccessibility={label ? undefined : 'no-hide-descendants'}\n >\n {definition.paths.map((d, index) => (\n <Path\n key={index}\n d={d}\n stroke={theme.colors[color]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n </Svg>\n );\n}\n","import type { Size, Theme, Variant } from '@muja-ui/core';\nimport type { SemanticColorToken } from '@muja-ui/tokens';\n\n/** Resolved colors for one interactive variant, in its rest and pressed states. */\nexport interface VariantColors {\n background: string;\n backgroundPressed: string;\n foreground: SemanticColorToken;\n borderColor?: string;\n borderWidth?: number;\n /** `link` draws its label underlined instead of a container. */\n underline?: boolean;\n}\n\n/**\n * Maps a `Variant` onto semantic theme colors. Web does this in CSS via\n * `data-variant` selectors; native resolves it here so both platforms answer\n * `variant=\"accent\"` with the same roles.\n */\nexport function variantColors(variant: Variant, theme: Theme): VariantColors {\n const { colors, borderWidth } = theme;\n switch (variant) {\n case 'primary':\n return {\n background: colors.primary,\n backgroundPressed: colors.primaryActive,\n foreground: 'onPrimary',\n };\n case 'secondary':\n return {\n background: colors.secondary,\n backgroundPressed: colors.secondaryActive,\n foreground: 'onSecondary',\n };\n case 'accent':\n return {\n background: colors.accent,\n backgroundPressed: colors.accentActive,\n foreground: 'onAccent',\n };\n case 'danger':\n return {\n background: colors.danger,\n backgroundPressed: colors.dangerActive,\n foreground: 'onDanger',\n };\n case 'outline':\n return {\n background: 'transparent',\n backgroundPressed: colors.surfaceActive,\n foreground: 'text',\n borderColor: colors.borderStrong,\n borderWidth: borderWidth.thin,\n };\n case 'ghost':\n return {\n background: 'transparent',\n backgroundPressed: colors.surfaceActive,\n foreground: 'text',\n };\n case 'link':\n return {\n background: 'transparent',\n backgroundPressed: 'transparent',\n foreground: 'primaryText',\n underline: true,\n };\n }\n}\n\n/** Control geometry per size — shared by Button, Input, Select and Textarea. */\nexport interface SizeMetrics {\n height: number;\n paddingHorizontal: number;\n fontSize: 'sm' | 'md' | 'lg';\n gap: number;\n iconSize: number;\n}\n\nexport function sizeMetrics(size: Size, theme: Theme): SizeMetrics {\n switch (size) {\n case 'sm':\n return {\n height: 36,\n paddingHorizontal: theme.space[3],\n fontSize: 'sm',\n gap: theme.space[1.5],\n iconSize: 16,\n };\n case 'lg':\n return {\n height: 52,\n paddingHorizontal: theme.space[6],\n fontSize: 'lg',\n gap: theme.space[2.5],\n iconSize: 22,\n };\n case 'md':\n default:\n return {\n height: 44,\n paddingHorizontal: theme.space[4],\n fontSize: 'md',\n gap: theme.space[2],\n iconSize: 18,\n };\n }\n}\n","import type { Size, Variant } from '@muja-ui/core';\nimport { forwardRef, type ReactNode } from 'react';\nimport {\n ActivityIndicator,\n Pressable,\n View,\n type PressableProps,\n type StyleProp,\n type View as RNView,\n type ViewStyle,\n} from 'react-native';\nimport { sizeMetrics, variantColors } from '../system/variants';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport interface ButtonProps extends Omit<PressableProps, 'style' | 'children'> {\n variant?: Variant;\n size?: Size;\n /** Shows a spinner, marks the control busy and blocks presses. */\n loading?: boolean;\n fullWidth?: boolean;\n /** Decorative icon before the label (replaced by the spinner while loading). */\n leftIcon?: ReactNode;\n /** Decorative icon after the label. */\n rightIcon?: ReactNode;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Pressable button. Same variant/size vocabulary as `@muja-ui/web`'s Button;\n * every color resolves from a semantic theme token.\n *\n * ```tsx\n * <Button variant=\"primary\" size=\"lg\" loading onPress={save}>Save</Button>\n * ```\n */\nexport const Button = forwardRef<RNView, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n fullWidth = false,\n leftIcon,\n rightIcon,\n disabled = false,\n children,\n style,\n accessibilityLabel,\n ...rest\n },\n ref,\n) {\n const theme = useTheme();\n const colors = variantColors(variant, theme);\n const metrics = sizeMetrics(size, theme);\n const isInert = disabled || loading;\n const isLink = variant === 'link';\n\n return (\n <Pressable\n ref={ref}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: isInert, busy: loading }}\n accessibilityLabel={accessibilityLabel}\n disabled={isInert}\n style={({ pressed }) => [\n {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: metrics.gap,\n height: isLink ? undefined : metrics.height,\n paddingHorizontal: isLink ? 0 : metrics.paddingHorizontal,\n borderRadius: isLink ? 0 : theme.radius.md,\n backgroundColor: pressed ? colors.backgroundPressed : colors.background,\n borderColor: colors.borderColor,\n borderWidth: colors.borderWidth,\n alignSelf: fullWidth ? 'stretch' : 'flex-start',\n opacity: isInert ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n {...rest}\n >\n {loading ? (\n <ActivityIndicator size=\"small\" color={theme.colors[colors.foreground]} />\n ) : leftIcon ? (\n <View>{leftIcon}</View>\n ) : null}\n {children != null && children !== false ? (\n typeof children === 'string' || typeof children === 'number' ? (\n <Text\n size={metrics.fontSize}\n weight=\"semibold\"\n color={colors.foreground}\n style={colors.underline ? { textDecorationLine: 'underline' } : undefined}\n >\n {children}\n </Text>\n ) : (\n children\n )\n ) : null}\n {rightIcon && !loading ? <View>{rightIcon}</View> : null}\n </Pressable>\n );\n});\n","import type { Size, Variant } from '@muja-ui/core';\nimport { forwardRef, type ReactNode } from 'react';\nimport {\n ActivityIndicator,\n Pressable,\n type PressableProps,\n type StyleProp,\n type View as RNView,\n type ViewStyle,\n} from 'react-native';\nimport { variantColors } from '../system/variants';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface IconButtonProps extends Omit<PressableProps, 'style' | 'children'> {\n /** Required: an icon-only control has no visible label. */\n accessibilityLabel: string;\n icon: ReactNode;\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n /** Fully rounded instead of the default `md` radius. */\n round?: boolean;\n style?: StyleProp<ViewStyle>;\n}\n\nconst boxSize: Record<Size, number> = { sm: 36, md: 44, lg: 52 };\n\n/**\n * A square, icon-only button. `accessibilityLabel` is mandatory — there is no\n * text for a screen reader to fall back on.\n *\n * ```tsx\n * <IconButton icon={<Icon icon={XIcon} />} accessibilityLabel=\"Close\" variant=\"ghost\" />\n * ```\n */\nexport const IconButton = forwardRef<RNView, IconButtonProps>(function IconButton(\n {\n icon,\n variant = 'ghost',\n size = 'md',\n loading = false,\n round = false,\n disabled = false,\n style,\n ...rest\n },\n ref,\n) {\n const theme = useTheme();\n const colors = variantColors(variant, theme);\n const dimension = boxSize[size];\n const isInert = disabled || loading;\n\n return (\n <Pressable\n ref={ref}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: isInert, busy: loading }}\n disabled={isInert}\n // Icon-only targets are small; widen the touch area to the 44pt minimum.\n hitSlop={dimension < 44 ? (44 - dimension) / 2 : undefined}\n style={({ pressed }) => [\n {\n width: dimension,\n height: dimension,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: round ? theme.radius.full : theme.radius.md,\n backgroundColor: pressed ? colors.backgroundPressed : colors.background,\n borderColor: colors.borderColor,\n borderWidth: colors.borderWidth,\n opacity: isInert ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n {...rest}\n >\n {loading ? (\n <ActivityIndicator size=\"small\" color={theme.colors[colors.foreground]} />\n ) : (\n icon\n )}\n </Pressable>\n );\n});\n","import type { Size } from '@muja-ui/core';\nimport { forwardRef, useState, type ReactNode } from 'react';\nimport {\n TextInput,\n View,\n type StyleProp,\n type TextInputProps,\n type ViewStyle,\n} from 'react-native';\nimport { sizeMetrics } from '../system/variants';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface InputProps extends Omit<TextInputProps, 'style' | 'editable'> {\n size?: Size;\n /** Marks the field invalid: danger border and `aria-invalid` for a11y. */\n invalid?: boolean;\n disabled?: boolean;\n /** Adornment rendered inside the field, before the text. */\n leftElement?: ReactNode;\n /** Adornment rendered inside the field, after the text. */\n rightElement?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Single-line text field. Focus and invalid states are drawn on the wrapper so\n * adornments sit inside the border.\n *\n * ```tsx\n * <Input size=\"md\" placeholder=\"Email\" invalid={!!error} />\n * ```\n */\nexport const Input = forwardRef<TextInput, InputProps>(function Input(\n {\n size = 'md',\n invalid = false,\n disabled = false,\n leftElement,\n rightElement,\n style,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const theme = useTheme();\n const metrics = sizeMetrics(size, theme);\n const [focused, setFocused] = useState(false);\n\n const borderColor = invalid\n ? theme.colors.danger\n : focused\n ? theme.colors.focusRing\n : theme.colors.border;\n\n return (\n <View\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n gap: metrics.gap,\n height: metrics.height,\n paddingHorizontal: metrics.paddingHorizontal,\n borderRadius: theme.radius.md,\n borderWidth: focused || invalid ? theme.borderWidth.medium : theme.borderWidth.thin,\n borderColor,\n backgroundColor: disabled ? theme.colors.bgMuted : theme.colors.surface,\n },\n style,\n ]}\n >\n {leftElement}\n <TextInput\n ref={ref}\n editable={!disabled}\n aria-invalid={invalid || undefined}\n aria-disabled={disabled || undefined}\n placeholderTextColor={theme.colors.textMuted}\n selectionColor={theme.colors.primary}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n flex: 1,\n // Android adds its own vertical padding; zero it so `height` wins.\n paddingVertical: 0,\n fontFamily: theme.typography.fontFamily.sans,\n fontSize: theme.typography.fontSize[metrics.fontSize],\n color: disabled ? theme.colors.textDisabled : theme.colors.text,\n }}\n {...rest}\n />\n {rightElement}\n </View>\n );\n});\n","import { forwardRef, useState } from 'react';\nimport { TextInput, type StyleProp, type TextInputProps, type TextStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface TextareaProps extends Omit<TextInputProps, 'style' | 'editable' | 'multiline'> {\n invalid?: boolean;\n disabled?: boolean;\n /** Visible rows at rest (the field grows with content beyond this). */\n rows?: number;\n style?: StyleProp<TextStyle>;\n}\n\n/** Multi-line text field. Same states as `Input`. */\nexport const Textarea = forwardRef<TextInput, TextareaProps>(function Textarea(\n { invalid = false, disabled = false, rows = 4, style, onFocus, onBlur, ...rest },\n ref,\n) {\n const theme = useTheme();\n const [focused, setFocused] = useState(false);\n const lineHeight = Math.round(\n theme.typography.fontSize.md * theme.typography.lineHeight.normal,\n );\n\n return (\n <TextInput\n ref={ref}\n multiline\n textAlignVertical=\"top\"\n editable={!disabled}\n aria-invalid={invalid || undefined}\n placeholderTextColor={theme.colors.textMuted}\n selectionColor={theme.colors.primary}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={[\n {\n minHeight: rows * lineHeight + theme.space[4],\n padding: theme.space[3],\n borderRadius: theme.radius.md,\n borderWidth:\n focused || invalid ? theme.borderWidth.medium : theme.borderWidth.thin,\n borderColor: invalid\n ? theme.colors.danger\n : focused\n ? theme.colors.focusRing\n : theme.colors.border,\n backgroundColor: disabled ? theme.colors.bgMuted : theme.colors.surface,\n fontFamily: theme.typography.fontFamily.sans,\n fontSize: theme.typography.fontSize.md,\n lineHeight,\n color: disabled ? theme.colors.textDisabled : theme.colors.text,\n },\n style,\n ]}\n {...rest}\n />\n );\n});\n","import { forwardRef } from 'react';\nimport type { Text as RNText } from 'react-native';\nimport { Text, type TextProps } from './Text';\n\nexport interface LabelProps extends TextProps {\n /** Appends a danger-colored asterisk. */\n required?: boolean;\n}\n\n/** Field label. Pair with `FormField` to also render help and error text. */\nexport const Label = forwardRef<RNText, LabelProps>(function Label(\n { required = false, size = 'sm', weight = 'medium', children, ...rest },\n ref,\n) {\n return (\n <Text ref={ref} size={size} weight={weight} {...rest}>\n {children}\n {required ? (\n <Text size={size} weight={weight} color=\"danger\" accessibilityLabel=\"required\">\n {' *'}\n </Text>\n ) : null}\n </Text>\n );\n});\n","import type { ReactNode } from 'react';\nimport { View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Label } from './Label';\nimport { Text } from './Text';\n\nexport interface FormFieldProps {\n label?: string;\n required?: boolean;\n /** Hint shown under the control while it is valid. */\n help?: string;\n /** Replaces `help` and marks the row invalid. */\n error?: string;\n children: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Label + control + help/error row. Keeps every form in the app spacing the\n * three parts identically, and makes the error text a live region so screen\n * readers announce validation failures.\n *\n * ```tsx\n * <FormField label=\"Email\" required error={errors.email?.message}>\n * <Input value={email} onChangeText={setEmail} invalid={!!errors.email} />\n * </FormField>\n * ```\n */\nexport function FormField({\n label,\n required = false,\n help,\n error,\n children,\n style,\n}: FormFieldProps) {\n const theme = useTheme();\n return (\n <View style={[{ gap: theme.space[1.5] }, style]}>\n {label ? (\n <Label required={required} color=\"textSecondary\">\n {label}\n </Label>\n ) : null}\n {children}\n {error ? (\n <Text size=\"xs\" color=\"dangerText\" accessibilityLiveRegion=\"polite\">\n {error}\n </Text>\n ) : help ? (\n <Text size=\"xs\" color=\"textMuted\">\n {help}\n </Text>\n ) : null}\n </View>\n );\n}\n","import { useCallback, useState } from 'react';\n\n/**\n * Controlled/uncontrolled state pair. When `controlled` is defined the\n * internal state is ignored and only `onChange` fires.\n */\nexport function useControllableState<T>(\n controlled: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n): [T, (value: T) => void] {\n const [uncontrolled, setUncontrolled] = useState(defaultValue);\n const value = controlled !== undefined ? controlled : uncontrolled;\n\n const setValue = useCallback(\n (next: T) => {\n if (controlled === undefined) setUncontrolled(next);\n onChange?.(next);\n },\n [controlled, onChange],\n );\n\n return [value, setValue];\n}\n","import type { Size } from '@muja-ui/core';\nimport { CheckIcon, MinusIcon } from '@muja-ui/icons';\nimport type { ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport interface CheckboxProps {\n /** Controlled state. Omit for uncontrolled use with `defaultChecked`. */\n checked?: boolean;\n defaultChecked?: boolean;\n /**\n * Fires with the next state. React Native has no form submission, so unlike\n * the web package this is a value callback rather than a change event.\n */\n onChange?: (checked: boolean) => void;\n indeterminate?: boolean;\n size?: Size;\n invalid?: boolean;\n disabled?: boolean;\n /** Label rendered next to the box; the whole row is the touch target. */\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nconst boxSize: Record<Size, number> = { sm: 18, md: 22, lg: 26 };\n\n/**\n * Checkbox with an optional inline label.\n *\n * ```tsx\n * <Checkbox checked={agreed} onChange={setAgreed}>I agree</Checkbox>\n * ```\n */\nexport function Checkbox({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n indeterminate = false,\n size = 'md',\n invalid = false,\n disabled = false,\n children,\n style,\n}: CheckboxProps) {\n const theme = useTheme();\n const [checked, setChecked] = useControllableState(\n controlledChecked,\n defaultChecked,\n onChange,\n );\n const dimension = boxSize[size];\n const filled = checked || indeterminate;\n\n return (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{\n checked: indeterminate ? 'mixed' : checked,\n disabled,\n }}\n aria-invalid={invalid || undefined}\n disabled={disabled}\n onPress={() => setChecked(!checked)}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[2.5],\n opacity: disabled ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n >\n <View\n style={{\n width: dimension,\n height: dimension,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: theme.radius.sm,\n borderWidth: theme.borderWidth.medium,\n borderColor: invalid\n ? theme.colors.danger\n : filled\n ? theme.colors.primary\n : theme.colors.borderStrong,\n backgroundColor: filled ? theme.colors.primary : theme.colors.surface,\n }}\n >\n {filled ? (\n <Icon\n icon={indeterminate ? MinusIcon : CheckIcon}\n size={dimension - 6}\n color=\"onPrimary\"\n strokeWidth={3}\n />\n ) : null}\n </View>\n {children != null ? (\n typeof children === 'string' ? (\n <Text size={size === 'lg' ? 'md' : 'sm'} style={{ flexShrink: 1 }}>\n {children}\n </Text>\n ) : (\n children\n )\n ) : null}\n </Pressable>\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport type { ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport interface SwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n size?: Size;\n disabled?: boolean;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nconst track: Record<Size, { width: number; height: number; thumb: number }> = {\n sm: { width: 36, height: 20, thumb: 16 },\n md: { width: 44, height: 26, thumb: 22 },\n lg: { width: 52, height: 32, thumb: 28 },\n};\n\n/**\n * Toggle switch. Built from primitives rather than RN's `Switch` so it follows\n * the theme on both platforms (RN's own switch only takes raw colors and\n * renders with platform-specific metrics).\n *\n * ```tsx\n * <Switch checked={enabled} onChange={setEnabled}>Notifications</Switch>\n * ```\n */\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n size = 'md',\n disabled = false,\n children,\n style,\n}: SwitchProps) {\n const theme = useTheme();\n const [checked, setChecked] = useControllableState(\n controlledChecked,\n defaultChecked,\n onChange,\n );\n const metrics = track[size];\n const inset = (metrics.height - metrics.thumb) / 2;\n\n return (\n <Pressable\n accessibilityRole=\"switch\"\n accessibilityState={{ checked, disabled }}\n disabled={disabled}\n onPress={() => setChecked(!checked)}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.space[3],\n opacity: disabled ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n >\n {children != null ? (\n typeof children === 'string' ? (\n <Text size=\"sm\" style={{ flexShrink: 1 }}>\n {children}\n </Text>\n ) : (\n children\n )\n ) : null}\n <View\n style={{\n width: metrics.width,\n height: metrics.height,\n borderRadius: theme.radius.full,\n padding: inset,\n justifyContent: 'center',\n backgroundColor: checked ? theme.colors.primary : theme.colors.secondaryActive,\n }}\n >\n <View\n style={{\n width: metrics.thumb,\n height: metrics.thumb,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors.surface,\n transform: [{ translateX: checked ? metrics.width - metrics.thumb - inset * 2 : 0 }],\n }}\n />\n </View>\n </Pressable>\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport { warnOnce } from '@muja-ui/utils';\nimport { createContext, useContext, type ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\ninterface RadioGroupContextValue {\n value: string | undefined;\n setValue: (value: string) => void;\n size: Size;\n disabled: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n size?: Size;\n disabled?: boolean;\n orientation?: 'vertical' | 'horizontal';\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n accessibilityLabel?: string;\n}\n\n/**\n * Single-choice group. Wrap `Radio` children; selection state lives here.\n *\n * ```tsx\n * <RadioGroup value={role} onChange={setRole} accessibilityLabel=\"Role\">\n * <Radio value=\"student\">Student</Radio>\n * <Radio value=\"organizer\">Organizer</Radio>\n * </RadioGroup>\n * ```\n */\nexport function RadioGroup({\n value: controlledValue,\n defaultValue,\n onChange,\n size = 'md',\n disabled = false,\n orientation = 'vertical',\n children,\n style,\n accessibilityLabel,\n}: RadioGroupProps) {\n const theme = useTheme();\n const [value, setValue] = useControllableState<string | undefined>(\n controlledValue,\n defaultValue,\n onChange as ((value: string | undefined) => void) | undefined,\n );\n\n return (\n <RadioGroupContext.Provider\n value={{ value, setValue: setValue as (value: string) => void, size, disabled }}\n >\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={accessibilityLabel}\n style={[\n {\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n flexWrap: orientation === 'horizontal' ? 'wrap' : 'nowrap',\n gap: theme.space[3],\n },\n style,\n ]}\n >\n {children}\n </View>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioProps {\n value: string;\n disabled?: boolean;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nconst boxSize: Record<Size, number> = { sm: 18, md: 22, lg: 26 };\n\n/** One option inside a `RadioGroup`. */\nexport function Radio({ value, disabled = false, children, style }: RadioProps) {\n const theme = useTheme();\n const group = useContext(RadioGroupContext);\n\n if (!group) {\n warnOnce('<Radio> must be rendered inside a <RadioGroup>.');\n return null;\n }\n\n const selected = group.value === value;\n const isDisabled = disabled || group.disabled;\n const dimension = boxSize[group.size];\n\n return (\n <Pressable\n accessibilityRole=\"radio\"\n accessibilityState={{ checked: selected, disabled: isDisabled }}\n disabled={isDisabled}\n onPress={() => group.setValue(value)}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[2.5],\n opacity: isDisabled ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n >\n <View\n style={{\n width: dimension,\n height: dimension,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: theme.radius.full,\n borderWidth: theme.borderWidth.medium,\n borderColor: selected ? theme.colors.primary : theme.colors.borderStrong,\n backgroundColor: theme.colors.surface,\n }}\n >\n {selected ? (\n <View\n style={{\n width: dimension / 2,\n height: dimension / 2,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors.primary,\n }}\n />\n ) : null}\n </View>\n {children != null ? (\n typeof children === 'string' ? (\n <Text size={group.size === 'lg' ? 'md' : 'sm'} style={{ flexShrink: 1 }}>\n {children}\n </Text>\n ) : (\n children\n )\n ) : null}\n </Pressable>\n );\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useRef } from 'react';\nimport {\n Animated,\n Easing,\n Modal as RNModal,\n PanResponder,\n Pressable,\n View,\n useWindowDimensions,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\n\nconst DISMISS_THRESHOLD = 96;\n\nexport interface BottomSheetProps {\n open: boolean;\n onClose: () => void;\n /** Close when the backdrop is pressed. Defaults to true. */\n closeOnOverlayPress?: boolean;\n /** Visible title rendered next to the grab handle. */\n title?: string;\n /** Accessible name when there is no visible `title`. */\n accessibilityLabel?: string;\n /** Cap the sheet height as a fraction of the screen. Defaults to 0.9. */\n maxHeightRatio?: number;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Sheet that slides up from the bottom edge, with a grab handle and\n * drag-to-dismiss. The bottom inset is padded so content clears the home\n * indicator.\n *\n * ```tsx\n * <BottomSheet open={open} onClose={close} title=\"Pick a room\">…</BottomSheet>\n * ```\n */\nexport function BottomSheet({\n open,\n onClose,\n closeOnOverlayPress = true,\n title,\n accessibilityLabel,\n maxHeightRatio = 0.9,\n children,\n style,\n}: BottomSheetProps) {\n const theme = useTheme();\n const insets = useSafeAreaInsets();\n const { height } = useWindowDimensions();\n const translateY = useRef(new Animated.Value(height)).current;\n const dragY = useRef(0);\n\n useEffect(() => {\n Animated.timing(translateY, {\n toValue: open ? 0 : height,\n duration: open ? theme.motion.duration.normal : theme.motion.duration.fast,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n }).start();\n }, [open, height, translateY, theme.motion.duration]);\n\n const panResponder = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_event, gesture) => gesture.dy > 4,\n onPanResponderMove: (_event, gesture) => {\n if (gesture.dy > 0) {\n dragY.current = gesture.dy;\n translateY.setValue(gesture.dy);\n }\n },\n onPanResponderRelease: () => {\n if (dragY.current > DISMISS_THRESHOLD) {\n onClose();\n } else {\n Animated.spring(translateY, { toValue: 0, useNativeDriver: true }).start();\n }\n dragY.current = 0;\n },\n }),\n ).current;\n\n return (\n <RNModal\n visible={open}\n transparent\n animationType=\"none\"\n statusBarTranslucent\n onRequestClose={onClose}\n >\n <View style={{ flex: 1, justifyContent: 'flex-end' }}>\n <Pressable\n accessibilityLabel={closeOnOverlayPress ? 'Close' : undefined}\n onPress={closeOnOverlayPress ? onClose : undefined}\n style={{ flex: 1, backgroundColor: theme.colors.overlay }}\n />\n <Animated.View\n accessibilityViewIsModal\n accessibilityLabel={accessibilityLabel ?? title}\n style={[\n {\n maxHeight: height * maxHeightRatio,\n paddingBottom: insets.bottom + theme.space[4],\n borderTopLeftRadius: theme.radius['2xl'],\n borderTopRightRadius: theme.radius['2xl'],\n backgroundColor: theme.colors.surface,\n transform: [{ translateY }],\n },\n style,\n ]}\n >\n <View {...panResponder.panHandlers} style={{ paddingTop: theme.space[3] }}>\n <View\n style={{\n alignSelf: 'center',\n width: 40,\n height: 4,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors.borderStrong,\n }}\n />\n {title ? (\n <Heading\n level={3}\n size=\"lg\"\n style={{\n paddingHorizontal: theme.space[5],\n paddingTop: theme.space[4],\n }}\n >\n {title}\n </Heading>\n ) : null}\n </View>\n {children}\n </Animated.View>\n </View>\n </RNModal>\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport { CheckIcon, ChevronDownIcon } from '@muja-ui/icons';\nimport { useState } from 'react';\nimport { Pressable, ScrollView, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { sizeMetrics } from '../system/variants';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { BottomSheet } from './BottomSheet';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport interface SelectOption<T extends string = string> {\n value: T;\n label: string;\n /** Secondary line under the label. */\n description?: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T extends string = string> {\n options: readonly SelectOption<T>[];\n value?: T;\n onChange?: (value: T) => void;\n /** Shown when nothing is selected. */\n placeholder?: string;\n /** Sheet heading. */\n title?: string;\n size?: Size;\n invalid?: boolean;\n disabled?: boolean;\n style?: StyleProp<ViewStyle>;\n accessibilityLabel?: string;\n}\n\n/**\n * Field that opens a bottom sheet of options — the native counterpart to the\n * web package's `<select>`. Options are data, not `<option>` children, because\n * React Native has no equivalent element.\n *\n * ```tsx\n * <Select options={rooms} value={roomId} onChange={setRoomId} placeholder=\"Choose a room\" />\n * ```\n */\nexport function Select<T extends string = string>({\n options,\n value,\n onChange,\n placeholder,\n title,\n size = 'md',\n invalid = false,\n disabled = false,\n style,\n accessibilityLabel,\n}: SelectProps<T>) {\n const theme = useTheme();\n const metrics = sizeMetrics(size, theme);\n const [open, setOpen] = useState(false);\n const selected = options.find((option) => option.value === value);\n\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel ?? title ?? placeholder}\n accessibilityValue={{ text: selected?.label }}\n accessibilityState={{ disabled, expanded: open }}\n aria-invalid={invalid || undefined}\n disabled={disabled}\n onPress={() => setOpen(true)}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: metrics.gap,\n height: metrics.height,\n paddingHorizontal: metrics.paddingHorizontal,\n borderRadius: theme.radius.md,\n borderWidth: invalid ? theme.borderWidth.medium : theme.borderWidth.thin,\n borderColor: invalid ? theme.colors.danger : theme.colors.border,\n backgroundColor: disabled ? theme.colors.bgMuted : theme.colors.surface,\n opacity: disabled ? theme.opacity.disabled : 1,\n },\n style,\n ]}\n >\n <Text\n size={metrics.fontSize}\n color={selected ? 'text' : 'textMuted'}\n truncate\n style={{ flex: 1 }}\n >\n {selected?.label ?? placeholder ?? ''}\n </Text>\n <Icon icon={ChevronDownIcon} size={metrics.iconSize} color=\"textSecondary\" />\n </Pressable>\n\n <BottomSheet\n open={open}\n onClose={() => setOpen(false)}\n title={title ?? placeholder}\n accessibilityLabel={accessibilityLabel}\n >\n <ScrollView style={{ marginTop: theme.space[2] }}>\n {options.map((option) => {\n const isSelected = option.value === value;\n return (\n <Pressable\n key={option.value}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ selected: isSelected, disabled: option.disabled }}\n disabled={option.disabled}\n onPress={() => {\n onChange?.(option.value);\n setOpen(false);\n }}\n style={({ pressed }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[3],\n paddingHorizontal: theme.space[5],\n paddingVertical: theme.space[3.5],\n backgroundColor: pressed ? theme.colors.surfaceActive : 'transparent',\n opacity: option.disabled ? theme.opacity.disabled : 1,\n })}\n >\n <View style={{ flex: 1 }}>\n <Text size=\"md\" weight={isSelected ? 'semibold' : 'regular'}>\n {option.label}\n </Text>\n {option.description ? (\n <Text size=\"sm\" color=\"textMuted\">\n {option.description}\n </Text>\n ) : null}\n </View>\n {isSelected ? <Icon icon={CheckIcon} color=\"primary\" /> : null}\n </Pressable>\n );\n })}\n </ScrollView>\n </BottomSheet>\n </>\n );\n}\n","import type { RadiusToken } from '@muja-ui/tokens';\nimport { useEffect, useRef } from 'react';\nimport { Animated, Easing, type DimensionValue, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SkeletonProps {\n width?: DimensionValue;\n height?: DimensionValue;\n radius?: RadiusToken;\n /** Turns off the pulse (useful in tests and for reduced-motion screens). */\n animated?: boolean;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Loading placeholder with a pulsing opacity. Hidden from screen readers —\n * announce loading state on the container instead.\n *\n * ```tsx\n * <Skeleton height={20} width=\"60%\" />\n * ```\n */\nexport function Skeleton({\n width = '100%',\n height = 16,\n radius = 'sm',\n animated = true,\n style,\n}: SkeletonProps) {\n const theme = useTheme();\n const pulse = useRef(new Animated.Value(0.5)).current;\n\n useEffect(() => {\n if (!animated) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, {\n toValue: 1,\n duration: theme.motion.duration.slower,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(pulse, {\n toValue: 0.5,\n duration: theme.motion.duration.slower,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [animated, pulse, theme.motion.duration.slower]);\n\n return (\n <Animated.View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={[\n {\n width,\n height,\n borderRadius: theme.radius[radius],\n backgroundColor: theme.colors.bgMuted,\n opacity: animated ? pulse : 0.7,\n },\n style,\n ]}\n />\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport type { SemanticColorToken } from '@muja-ui/tokens';\nimport { ActivityIndicator, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface SpinnerProps {\n size?: Size;\n color?: SemanticColorToken;\n /** Accessible label; announced while the spinner is on screen. */\n label?: string;\n style?: StyleProp<ViewStyle>;\n}\n\n/** Indeterminate activity indicator. */\nexport function Spinner({ size = 'md', color = 'primary', label, style }: SpinnerProps) {\n const theme = useTheme();\n return (\n <ActivityIndicator\n size={size === 'sm' ? 'small' : 'large'}\n color={theme.colors[color]}\n accessibilityRole=\"progressbar\"\n accessibilityLabel={label}\n style={[size === 'md' ? { transform: [{ scale: 0.8 }] } : null, style]}\n />\n );\n}\n","import type { SemanticColorToken } from '@muja-ui/tokens';\nimport { clamp } from '@muja-ui/utils';\nimport { View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ProgressProps {\n /** Current value, 0–`max`. */\n value: number;\n max?: number;\n /** Track thickness in dp. */\n height?: number;\n color?: SemanticColorToken;\n trackColor?: SemanticColorToken;\n /** Accessible name, e.g. \"Semester progress\". */\n label?: string;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Determinate progress bar.\n *\n * ```tsx\n * <Progress value={earned} max={total} label=\"iGPA points\" />\n * ```\n */\nexport function Progress({\n value,\n max = 100,\n height = 8,\n color = 'primary',\n trackColor = 'bgMuted',\n label,\n style,\n}: ProgressProps) {\n const theme = useTheme();\n const ratio = max > 0 ? clamp(value / max, 0, 1) : 0;\n\n return (\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={label}\n accessibilityValue={{ min: 0, max, now: Math.round(value) }}\n style={[\n {\n height,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors[trackColor],\n overflow: 'hidden',\n },\n style,\n ]}\n >\n <View\n style={{\n width: `${ratio * 100}%`,\n height: '100%',\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors[color],\n }}\n />\n </View>\n );\n}\n","import { AlertCircleIcon, AlertTriangleIcon, CheckIcon, InfoIcon, XIcon } from '@muja-ui/icons';\nimport type { SemanticColorToken } from '@muja-ui/tokens';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { Animated, Easing, Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { shadowStyle } from '../system/styleProps';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport type ToastTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';\n\nexport type ToastPlacement = 'top' | 'bottom';\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n tone?: ToastTone;\n /** Milliseconds before auto-dismiss. `0` keeps it until dismissed. */\n duration?: number;\n /** Trailing action, e.g. Undo. */\n action?: { label: string; onPress: () => void };\n}\n\nexport interface ToastContextValue {\n toast: (options: ToastOptions) => void;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastEntry extends ToastOptions {\n id: number;\n}\n\nconst DEFAULT_DURATION = 4000;\n\nconst toneIcon = {\n neutral: InfoIcon,\n success: CheckIcon,\n warning: AlertTriangleIcon,\n danger: AlertCircleIcon,\n info: InfoIcon,\n} as const;\n\nconst toneColor: Record<ToastTone, SemanticColorToken> = {\n neutral: 'textSecondary',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n info: 'info',\n};\n\nexport interface ToastProviderProps {\n children: ReactNode;\n placement?: ToastPlacement;\n /** Most toasts visible at once; older ones are dropped. */\n max?: number;\n}\n\n/**\n * Mounts the toast host and provides `useToast()`. Put it inside the\n * `ThemeProvider` and `SafeAreaProvider`, above the navigator.\n *\n * ```tsx\n * <ToastProvider>\n * <Stack />\n * </ToastProvider>\n * ```\n */\nexport function ToastProvider({ children, placement = 'top', max = 3 }: ToastProviderProps) {\n const theme = useTheme();\n const insets = useSafeAreaInsets();\n const [entries, setEntries] = useState<ToastEntry[]>([]);\n const nextId = useRef(0);\n\n const dismiss = useCallback((id: number) => {\n setEntries((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions) => {\n const id = nextId.current++;\n setEntries((current) => [...current, { ...options, id }].slice(-max));\n },\n [max],\n );\n\n const value = useMemo<ToastContextValue>(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <View\n pointerEvents=\"box-none\"\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n [placement]: (placement === 'top' ? insets.top : insets.bottom) + theme.space[2],\n paddingHorizontal: theme.space[4],\n gap: theme.space[2],\n zIndex: theme.zIndex.toast,\n }}\n >\n {entries.map((entry) => (\n <ToastCard key={entry.id} entry={entry} onDismiss={dismiss} placement={placement} />\n ))}\n </View>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastCard({\n entry,\n onDismiss,\n placement,\n}: {\n entry: ToastEntry;\n onDismiss: (id: number) => void;\n placement: ToastPlacement;\n}) {\n const theme = useTheme();\n const tone = entry.tone ?? 'neutral';\n const enter = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n Animated.timing(enter, {\n toValue: 1,\n duration: theme.motion.duration.normal,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n }).start();\n }, [enter, theme.motion.duration.normal]);\n\n useEffect(() => {\n const duration = entry.duration ?? DEFAULT_DURATION;\n if (duration <= 0) return;\n const timer = setTimeout(() => onDismiss(entry.id), duration);\n return () => clearTimeout(timer);\n }, [entry.duration, entry.id, onDismiss]);\n\n return (\n <Animated.View\n accessibilityLiveRegion=\"polite\"\n accessibilityRole=\"alert\"\n style={{\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: theme.space[3],\n padding: theme.space[3.5],\n borderRadius: theme.radius.lg,\n borderWidth: theme.borderWidth.thin,\n borderColor: theme.colors.border,\n backgroundColor: theme.colors.surface,\n opacity: enter,\n transform: [\n {\n translateY: enter.interpolate({\n inputRange: [0, 1],\n outputRange: [placement === 'top' ? -16 : 16, 0],\n }),\n },\n ],\n ...shadowStyle(theme.shadow.lg),\n }}\n >\n <Icon icon={toneIcon[tone]} size={18} color={toneColor[tone]} />\n <View style={{ flex: 1, gap: theme.space[0.5] }}>\n <Text size=\"sm\" weight=\"semibold\">\n {entry.title}\n </Text>\n {entry.description ? (\n <Text size=\"sm\" color=\"textSecondary\">\n {entry.description}\n </Text>\n ) : null}\n </View>\n {entry.action ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n entry.action?.onPress();\n onDismiss(entry.id);\n }}\n hitSlop={8}\n >\n <Text size=\"sm\" weight=\"semibold\" color=\"primaryText\">\n {entry.action.label}\n </Text>\n </Pressable>\n ) : (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n onPress={() => onDismiss(entry.id)}\n hitSlop={8}\n >\n <Icon icon={XIcon} size={16} color=\"textMuted\" />\n </Pressable>\n )}\n </Animated.View>\n );\n}\n\n/** Queues toasts. Must be called under a `ToastProvider`. */\nexport function useToast(): ToastContextValue {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('[muja-ui] useToast must be used within a <ToastProvider>.');\n }\n return context;\n}\n","import type { ReactNode } from 'react';\nimport { View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\nimport { Text } from './Text';\n\nexport interface EmptyStateProps {\n title: string;\n description?: string;\n /** Illustration or icon above the title. */\n icon?: ReactNode;\n /** Primary action, e.g. a Button. */\n action?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Placeholder for an empty list or a failed-but-recoverable state. Consistent\n * empty states are what stop a list screen from looking broken.\n *\n * ```tsx\n * <EmptyState title=\"No tickets yet\" description=\"Register for an event to get one.\" />\n * ```\n */\nexport function EmptyState({ title, description, icon, action, style }: EmptyStateProps) {\n const theme = useTheme();\n return (\n <View\n style={[\n {\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.space[2],\n paddingVertical: theme.space[10],\n paddingHorizontal: theme.space[6],\n },\n style,\n ]}\n >\n {icon ? <View style={{ marginBottom: theme.space[2] }}>{icon}</View> : null}\n <Heading level={3} size=\"md\" align=\"center\">\n {title}\n </Heading>\n {description ? (\n <Text size=\"sm\" color=\"textMuted\" align=\"center\" leading=\"normal\">\n {description}\n </Text>\n ) : null}\n {action ? <View style={{ marginTop: theme.space[3] }}>{action}</View> : null}\n </View>\n );\n}\n","import type { SemanticColorToken } from '@muja-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface BadgeProps {\n tone?: BadgeTone;\n /** `subtle` = tinted background, `solid` = filled, `outline` = bordered. */\n variant?: 'subtle' | 'solid' | 'outline';\n children?: ReactNode;\n /** Icon rendered before the label. */\n leftIcon?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\ninterface ToneColors {\n solidBg: SemanticColorToken;\n solidFg: SemanticColorToken;\n subtleBg: SemanticColorToken;\n subtleFg: SemanticColorToken;\n}\n\nconst tones: Record<BadgeTone, ToneColors> = {\n neutral: {\n solidBg: 'secondaryActive',\n solidFg: 'onSecondary',\n subtleBg: 'bgMuted',\n subtleFg: 'textSecondary',\n },\n primary: {\n solidBg: 'primary',\n solidFg: 'onPrimary',\n subtleBg: 'primarySubtle',\n subtleFg: 'primaryText',\n },\n accent: { solidBg: 'accent', solidFg: 'onAccent', subtleBg: 'accentSubtle', subtleFg: 'accentText' },\n success: {\n solidBg: 'success',\n solidFg: 'onSuccess',\n subtleBg: 'successSubtle',\n subtleFg: 'successText',\n },\n warning: {\n solidBg: 'warning',\n solidFg: 'onWarning',\n subtleBg: 'warningSubtle',\n subtleFg: 'warningText',\n },\n danger: { solidBg: 'danger', solidFg: 'onDanger', subtleBg: 'dangerSubtle', subtleFg: 'dangerText' },\n info: { solidBg: 'info', solidFg: 'onInfo', subtleBg: 'infoSubtle', subtleFg: 'infoText' },\n};\n\n/**\n * Small status label. Tones map to the semantic status colors, so dark mode and\n * brand themes apply automatically.\n *\n * ```tsx\n * <Badge tone=\"success\">Confirmed</Badge>\n * ```\n */\nexport function Badge({\n tone = 'neutral',\n variant = 'subtle',\n children,\n leftIcon,\n style,\n}: BadgeProps) {\n const theme = useTheme();\n const palette = tones[tone];\n\n const background =\n variant === 'solid'\n ? theme.colors[palette.solidBg]\n : variant === 'subtle'\n ? theme.colors[palette.subtleBg]\n : 'transparent';\n const foreground = variant === 'solid' ? palette.solidFg : palette.subtleFg;\n\n return (\n <View\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n gap: theme.space[1],\n paddingHorizontal: theme.space[2],\n paddingVertical: theme.space[0.5],\n borderRadius: theme.radius.full,\n backgroundColor: background,\n borderWidth: variant === 'outline' ? theme.borderWidth.thin : 0,\n borderColor: variant === 'outline' ? theme.colors[palette.solidBg] : undefined,\n },\n style,\n ]}\n >\n {leftIcon}\n {typeof children === 'string' || typeof children === 'number' ? (\n <Text size=\"xs\" weight=\"medium\" color={foreground}>\n {children}\n </Text>\n ) : (\n children\n )}\n </View>\n );\n}\n","import { XIcon } from '@muja-ui/icons';\nimport type { ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport interface ChipProps {\n children?: ReactNode;\n /** Filled/primary styling for an active filter. */\n selected?: boolean;\n disabled?: boolean;\n onPress?: () => void;\n /** Renders a trailing × that calls this instead of `onPress`. */\n onRemove?: () => void;\n leftIcon?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Compact toggle used for filters and tags. Pressable when `onPress` or\n * `onRemove` is given, static otherwise.\n *\n * ```tsx\n * <Chip selected={filter === 'today'} onPress={() => setFilter('today')}>Today</Chip>\n * ```\n */\nexport function Chip({\n children,\n selected = false,\n disabled = false,\n onPress,\n onRemove,\n leftIcon,\n style,\n}: ChipProps) {\n const theme = useTheme();\n\n const body = (\n <>\n {leftIcon}\n {typeof children === 'string' || typeof children === 'number' ? (\n <Text size=\"sm\" weight=\"medium\" color={selected ? 'onPrimary' : 'textSecondary'}>\n {children}\n </Text>\n ) : (\n children\n )}\n {onRemove ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Remove\"\n hitSlop={8}\n onPress={onRemove}\n >\n <Icon icon={XIcon} size={14} color={selected ? 'onPrimary' : 'textSecondary'} />\n </Pressable>\n ) : null}\n </>\n );\n\n const shape = (pressed: boolean): ViewStyle => ({\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n gap: theme.space[1.5],\n height: 32,\n paddingHorizontal: theme.space[3],\n borderRadius: theme.radius.full,\n borderWidth: theme.borderWidth.thin,\n borderColor: selected ? theme.colors.primary : theme.colors.border,\n backgroundColor: selected\n ? theme.colors.primary\n : pressed\n ? theme.colors.surfaceActive\n : theme.colors.surface,\n opacity: disabled ? theme.opacity.disabled : 1,\n });\n\n if (!onPress) return <View style={[shape(false), style]}>{body}</View>;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected, disabled }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [shape(pressed), style]}\n >\n {body}\n </Pressable>\n );\n}\n","import { forwardRef, type ReactNode } from 'react';\nimport {\n Pressable,\n View,\n type StyleProp,\n type View as RNView,\n type TextStyle,\n type ViewStyle,\n} from 'react-native';\nimport { shadowStyle } from '../system/styleProps';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\nimport { Text } from './Text';\n\nexport interface CardProps {\n /** `outline` (default) is bordered, `elevated` adds a shadow, `filled` uses a muted background. */\n variant?: 'outline' | 'elevated' | 'filled';\n /** Makes the whole card a button. */\n onPress?: () => void;\n accessibilityLabel?: string;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Surface container. Compose with `CardHeader`, `CardTitle`,\n * `CardDescription`, `CardContent` and `CardFooter`.\n *\n * ```tsx\n * <Card variant=\"elevated\" onPress={open}>\n * <CardHeader>\n * <CardTitle>Room A101</CardTitle>\n * <CardDescription>Available today</CardDescription>\n * </CardHeader>\n * <CardContent>…</CardContent>\n * </Card>\n * ```\n */\nexport const Card = forwardRef<RNView, CardProps>(function Card(\n { variant = 'outline', onPress, accessibilityLabel, children, style },\n ref,\n) {\n const theme = useTheme();\n\n const base: ViewStyle = {\n borderRadius: theme.radius.lg,\n backgroundColor: variant === 'filled' ? theme.colors.bgSubtle : theme.colors.surface,\n borderWidth: variant === 'outline' ? theme.borderWidth.thin : 0,\n borderColor: theme.colors.border,\n ...(variant === 'elevated' ? shadowStyle(theme.shadow.sm) : null),\n };\n\n if (!onPress) {\n return (\n <View ref={ref} style={[base, style]}>\n {children}\n </View>\n );\n }\n\n return (\n <Pressable\n ref={ref}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n onPress={onPress}\n style={({ pressed }) => [\n base,\n pressed ? { backgroundColor: theme.colors.surfaceActive } : null,\n style,\n ]}\n >\n {children}\n </Pressable>\n );\n});\n\ninterface SectionProps {\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\ninterface TextSectionProps {\n children?: ReactNode;\n style?: StyleProp<TextStyle>;\n}\n\nexport function CardHeader({ children, style }: SectionProps) {\n const theme = useTheme();\n return (\n <View style={[{ padding: theme.space[4], paddingBottom: theme.space[2], gap: theme.space[1] }, style]}>\n {children}\n </View>\n );\n}\n\nexport function CardTitle({ children, style }: TextSectionProps) {\n return (\n <Heading level={3} size=\"md\" style={style}>\n {children}\n </Heading>\n );\n}\n\nexport function CardDescription({ children, style }: TextSectionProps) {\n return (\n <Text size=\"sm\" color=\"textMuted\" style={style}>\n {children}\n </Text>\n );\n}\n\nexport function CardContent({ children, style }: SectionProps) {\n const theme = useTheme();\n return <View style={[{ padding: theme.space[4], paddingTop: theme.space[2] }, style]}>{children}</View>;\n}\n\nexport function CardFooter({ children, style }: SectionProps) {\n const theme = useTheme();\n return (\n <View\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[2],\n padding: theme.space[4],\n paddingTop: 0,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n}\n","import type { SpaceToken } from '@muja-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\nimport { Text } from './Text';\n\nexport interface ContainerProps {\n /** Horizontal page gutter. Defaults to 4 (16dp). */\n gutter?: SpaceToken;\n /** Caps the width and centres the block on tablets. */\n maxWidth?: number;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/** Page-level horizontal gutter, so every screen indents its content equally. */\nexport function Container({ gutter = 4, maxWidth, children, style }: ContainerProps) {\n const theme = useTheme();\n return (\n <View\n style={[\n {\n paddingHorizontal: theme.space[gutter],\n width: '100%',\n maxWidth,\n alignSelf: maxWidth ? 'center' : undefined,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n}\n\nexport interface SectionProps {\n title?: string;\n description?: string;\n /** Rendered on the title row's trailing edge, e.g. a \"See all\" link. */\n action?: ReactNode;\n /** Gap between the header and the content. Defaults to 3 (12dp). */\n gap?: SpaceToken;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Titled block of content — the repeating unit of every screen in the app.\n *\n * ```tsx\n * <Section title=\"Upcoming events\" action={<Button variant=\"link\">See all</Button>}>\n * …\n * </Section>\n * ```\n */\nexport function Section({ title, description, action, gap = 3, children, style }: SectionProps) {\n const theme = useTheme();\n return (\n <View style={[{ gap: theme.space[gap] }, style]}>\n {title || action ? (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.space[3],\n }}\n >\n <View style={{ flex: 1, gap: theme.space[0.5] }}>\n {title ? (\n <Heading level={2} size=\"lg\">\n {title}\n </Heading>\n ) : null}\n {description ? (\n <Text size=\"sm\" color=\"textMuted\">\n {description}\n </Text>\n ) : null}\n </View>\n {action}\n </View>\n ) : null}\n {children}\n </View>\n );\n}\n","import type { SemanticColorToken } from '@muja-ui/tokens';\nimport type { ReactNode } from 'react';\nimport {\n RefreshControl,\n ScrollView,\n View,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface ScreenProps {\n children?: ReactNode;\n /** Page background. Defaults to the app background token. */\n bg?: SemanticColorToken;\n /** Wraps content in a ScrollView. Off for screens that own a FlatList. */\n scrollable?: boolean;\n /** Pull-to-refresh; only meaningful when `scrollable`. */\n refreshing?: boolean;\n onRefresh?: () => void;\n /** Which safe-area edges to pad. Defaults to top and bottom. */\n edges?: readonly ('top' | 'bottom')[];\n /** Extra bottom padding so content clears a tab bar or sticky footer. */\n bottomInset?: number;\n contentContainerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Screen shell: safe-area padding, themed background and optional scrolling\n * with pull-to-refresh. Every route in an app should start with one.\n *\n * ```tsx\n * <Screen scrollable refreshing={isRefetching} onRefresh={refetch}>\n * <Container>…</Container>\n * </Screen>\n * ```\n */\nexport function Screen({\n children,\n bg = 'bg',\n scrollable = false,\n refreshing,\n onRefresh,\n edges = ['top', 'bottom'],\n bottomInset = 0,\n contentContainerStyle,\n style,\n}: ScreenProps) {\n const theme = useTheme();\n const insets = useSafeAreaInsets();\n\n const padding = {\n paddingTop: edges.includes('top') ? insets.top : 0,\n paddingBottom: (edges.includes('bottom') ? insets.bottom : 0) + bottomInset,\n };\n\n if (!scrollable) {\n return (\n <View style={[{ flex: 1, backgroundColor: theme.colors[bg] }, padding, style]}>\n {children}\n </View>\n );\n }\n\n return (\n <ScrollView\n style={[{ flex: 1, backgroundColor: theme.colors[bg] }, style]}\n contentContainerStyle={[padding, contentContainerStyle]}\n keyboardShouldPersistTaps=\"handled\"\n refreshControl={\n onRefresh ? (\n <RefreshControl\n refreshing={refreshing ?? false}\n onRefresh={onRefresh}\n tintColor={theme.colors.primary}\n colors={[theme.colors.primary]}\n />\n ) : undefined\n }\n >\n {children}\n </ScrollView>\n );\n}\n","import { ChevronRightIcon } from '@muja-ui/icons';\nimport type { ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport interface ListRowProps {\n title: string;\n /** Secondary line under the title. */\n subtitle?: string;\n /** Leading slot — icon, avatar or a small image. */\n left?: ReactNode;\n /** Trailing slot; replaced by a chevron when `onPress` is set and this is empty. */\n right?: ReactNode;\n onPress?: () => void;\n disabled?: boolean;\n /** Hides the trailing chevron on a pressable row. */\n hideChevron?: boolean;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Settings/list row: leading slot, two lines of text, trailing slot. Pressable\n * rows get a chevron and a button role.\n *\n * ```tsx\n * <ListRow title=\"Notifications\" subtitle=\"Push and email\" onPress={open} />\n * ```\n */\nexport function ListRow({\n title,\n subtitle,\n left,\n right,\n onPress,\n disabled = false,\n hideChevron = false,\n style,\n}: ListRowProps) {\n const theme = useTheme();\n\n const content = (\n <>\n {left}\n <View style={{ flex: 1, gap: theme.space[0.5] }}>\n <Text size=\"md\" numberOfLines={1}>\n {title}\n </Text>\n {subtitle ? (\n <Text size=\"sm\" color=\"textMuted\" numberOfLines={2}>\n {subtitle}\n </Text>\n ) : null}\n </View>\n {right ??\n (onPress && !hideChevron ? (\n <Icon icon={ChevronRightIcon} size={18} color=\"textMuted\" />\n ) : null)}\n </>\n );\n\n const layout: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[3],\n paddingHorizontal: theme.space[4],\n paddingVertical: theme.space[3.5],\n minHeight: 56,\n opacity: disabled ? theme.opacity.disabled : 1,\n };\n\n if (!onPress) return <View style={[layout, style]}>{content}</View>;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n layout,\n pressed ? { backgroundColor: theme.colors.surfaceActive } : null,\n style,\n ]}\n >\n {content}\n </Pressable>\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport { useState } from 'react';\nimport { Image, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport interface AvatarProps {\n /** Image URL. Falls back to initials when absent or if loading fails. */\n source?: string | null;\n /** Full name — initials are derived from it, and it names the image for a11y. */\n name?: string;\n size?: Size | number;\n style?: StyleProp<ViewStyle>;\n}\n\nconst sizeMap: Record<Size, number> = { sm: 32, md: 40, lg: 56 };\n\n/** First letters of the first two words, e.g. \"Aida Serik\" → \"AS\". */\nfunction initials(name: string): string {\n return name\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .map((word) => word.charAt(0).toUpperCase())\n .join('');\n}\n\n/**\n * Circular avatar with an initials fallback.\n *\n * ```tsx\n * <Avatar source={user.photoUrl} name={user.fullName} size=\"lg\" />\n * ```\n */\nexport function Avatar({ source, name, size = 'md', style }: AvatarProps) {\n const theme = useTheme();\n const [failed, setFailed] = useState(false);\n const dimension = typeof size === 'number' ? size : sizeMap[size];\n const showImage = !!source && !failed;\n\n return (\n <View\n style={[\n {\n width: dimension,\n height: dimension,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors.primarySubtle,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n style,\n ]}\n >\n {showImage ? (\n <Image\n source={{ uri: source }}\n accessibilityLabel={name}\n onError={() => setFailed(true)}\n style={{ width: '100%', height: '100%' }}\n />\n ) : (\n <Text\n size={dimension >= 56 ? 'lg' : dimension >= 40 ? 'md' : 'sm'}\n weight=\"semibold\"\n color=\"primaryText\"\n accessibilityLabel={name}\n >\n {name ? initials(name) : '?'}\n </Text>\n )}\n </View>\n );\n}\n","import { ScrollView, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { Pressable } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport interface TabItem<T extends string = string> {\n value: T;\n label: string;\n /** Trailing count, e.g. a number of tickets. */\n badge?: number | string;\n}\n\nexport interface TabsProps<T extends string = string> {\n items: readonly TabItem<T>[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n /** `underline` for page-level tabs, `segmented` for a pill switch. */\n variant?: 'underline' | 'segmented';\n /** Lets tabs overflow horizontally instead of splitting the width. */\n scrollable?: boolean;\n style?: StyleProp<ViewStyle>;\n accessibilityLabel?: string;\n}\n\n/**\n * Tab bar. Panels are the caller's business — render by the selected value —\n * because native screens usually swap whole lists rather than mounting all\n * panels at once.\n *\n * ```tsx\n * <Tabs items={tabs} value={tab} onChange={setTab} variant=\"segmented\" />\n * ```\n */\nexport function Tabs<T extends string = string>({\n items,\n value: controlledValue,\n defaultValue,\n onChange,\n variant = 'underline',\n scrollable = false,\n style,\n accessibilityLabel,\n}: TabsProps<T>) {\n const theme = useTheme();\n const [value, setValue] = useControllableState<T | undefined>(\n controlledValue,\n defaultValue ?? items[0]?.value,\n onChange as ((value: T | undefined) => void) | undefined,\n );\n\n const isSegmented = variant === 'segmented';\n\n const tabs = items.map((item) => {\n const selected = item.value === value;\n return (\n <Pressable\n key={item.value}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n onPress={() => setValue(item.value)}\n style={{\n flex: scrollable ? undefined : 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.space[1.5],\n paddingHorizontal: theme.space[3],\n paddingVertical: isSegmented ? theme.space[2] : theme.space[3],\n borderRadius: isSegmented ? theme.radius.md : 0,\n backgroundColor: isSegmented && selected ? theme.colors.surface : 'transparent',\n borderBottomWidth: isSegmented ? 0 : theme.borderWidth.medium,\n borderBottomColor: selected ? theme.colors.primary : 'transparent',\n }}\n >\n <Text\n size=\"sm\"\n weight={selected ? 'semibold' : 'medium'}\n color={selected ? (isSegmented ? 'text' : 'primaryText') : 'textMuted'}\n numberOfLines={1}\n >\n {item.label}\n </Text>\n {item.badge !== undefined ? (\n <Text size=\"xs\" color=\"textMuted\">\n {item.badge}\n </Text>\n ) : null}\n </Pressable>\n );\n });\n\n const container: ViewStyle = isSegmented\n ? {\n flexDirection: 'row',\n gap: theme.space[1],\n padding: theme.space[1],\n borderRadius: theme.radius.lg,\n backgroundColor: theme.colors.bgMuted,\n }\n : {\n flexDirection: 'row',\n borderBottomWidth: theme.borderWidth.thin,\n borderBottomColor: theme.colors.border,\n };\n\n if (scrollable) {\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n accessibilityRole=\"tablist\"\n accessibilityLabel={accessibilityLabel}\n contentContainerStyle={[container, style]}\n >\n {tabs}\n </ScrollView>\n );\n }\n\n return (\n <View accessibilityRole=\"tablist\" accessibilityLabel={accessibilityLabel} style={[container, style]}>\n {tabs}\n </View>\n );\n}\n","import { ChevronDownIcon } from '@muja-ui/icons';\nimport { useState, type ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { Text } from './Text';\n\nexport interface AccordionItemData {\n value: string;\n title: string;\n content: ReactNode;\n}\n\nexport interface AccordionProps {\n items: readonly AccordionItemData[];\n /** Controlled open values. */\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n /** Only one section open at a time. */\n single?: boolean;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Collapsible sections.\n *\n * ```tsx\n * <Accordion single items={[{ value: 'rules', title: 'Rules', content: <Text>…</Text> }]} />\n * ```\n */\nexport function Accordion({\n items,\n value: controlledValue,\n defaultValue = [],\n onChange,\n single = false,\n style,\n}: AccordionProps) {\n const theme = useTheme();\n const [open, setOpen] = useControllableState<string[]>(controlledValue, defaultValue, onChange);\n\n const toggle = (itemValue: string) => {\n const isOpen = open.includes(itemValue);\n if (single) {\n setOpen(isOpen ? [] : [itemValue]);\n return;\n }\n setOpen(isOpen ? open.filter((entry) => entry !== itemValue) : [...open, itemValue]);\n };\n\n return (\n <View style={style}>\n {items.map((item, index) => {\n const isOpen = open.includes(item.value);\n return (\n <View\n key={item.value}\n style={{\n borderTopWidth: index === 0 ? 0 : theme.borderWidth.thin,\n borderTopColor: theme.colors.border,\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n onPress={() => toggle(item.value)}\n style={({ pressed }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.space[3],\n paddingVertical: theme.space[4],\n backgroundColor: pressed ? theme.colors.surfaceActive : 'transparent',\n })}\n >\n <Text size=\"md\" weight=\"medium\" style={{ flex: 1 }}>\n {item.title}\n </Text>\n <View style={{ transform: [{ rotate: isOpen ? '180deg' : '0deg' }] }}>\n <Icon icon={ChevronDownIcon} size={18} color=\"textSecondary\" />\n </View>\n </Pressable>\n {isOpen ? <View style={{ paddingBottom: theme.space[4] }}>{item.content}</View> : null}\n </View>\n );\n })}\n </View>\n );\n}\n\nexport interface CollapseProps {\n title: string;\n defaultOpen?: boolean;\n children: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/** A single collapsible block, for when there is no list to group. */\nexport function Collapse({ title, defaultOpen = false, children, style }: CollapseProps) {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <Accordion\n items={[{ value: 'only', title, content: children }]}\n value={open ? ['only'] : []}\n onChange={(next) => setOpen(next.length > 0)}\n style={style}\n />\n );\n}\n","/** Local-time whole-day helpers. The calendar never leaves local time. */\n\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nexport function addDays(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** `YYYY-MM-DD` in local time — safe as a React key or a lookup key. */\nexport function dayKey(date: Date): string {\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${date.getFullYear()}-${month}-${day}`;\n}\n\n/**\n * The 6×7 grid of days covering `month`, starting on `weekStartsOn`.\n * Six rows always, so the grid height never jumps between months.\n */\nexport function monthGrid(month: Date, weekStartsOn: 0 | 1): Date[] {\n const first = startOfMonth(month);\n const offset = (first.getDay() - weekStartsOn + 7) % 7;\n const start = addDays(first, -offset);\n return Array.from({ length: 42 }, (_, index) => addDays(start, index));\n}\n","import { ChevronLeftIcon, ChevronRightIcon } from '@muja-ui/icons';\nimport { useMemo, useState } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useControllableState } from '../internal/useControllableState';\nimport { addDays, addMonths, dayKey, isSameDay, monthGrid, startOfDay } from '../internal/date';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Icon } from './Icon';\nimport { IconButton } from './IconButton';\nimport { Text } from './Text';\n\nexport interface CalendarProps {\n /** Controlled selected date. */\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n /** First visible month; defaults to the selected date's month, else today's. */\n defaultMonth?: Date;\n minDate?: Date;\n maxDate?: Date;\n /** 0 = Sunday, 1 = Monday. Defaults to Monday. */\n weekStartsOn?: 0 | 1;\n /** BCP 47 locale for month and weekday names. Defaults to the runtime locale. */\n locale?: string;\n /**\n * Days to mark with a dot, keyed `YYYY-MM-DD` — e.g. days that already have\n * bookings. The value is the dot's semantic color role.\n */\n markedDates?: Readonly<Record<string, 'primary' | 'accent' | 'success' | 'danger'>>;\n /** Called when the visible month changes — use it to fetch that month's data. */\n onMonthChange?: (month: Date) => void;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Single-date month grid. Month and weekday names come from `Intl` — no date\n * library, matching the web package.\n *\n * ```tsx\n * <Calendar value={date} onChange={setDate} minDate={new Date()} />\n * ```\n */\nexport function Calendar({\n value: controlledValue,\n defaultValue,\n onChange,\n defaultMonth,\n minDate,\n maxDate,\n weekStartsOn = 1,\n locale,\n markedDates,\n onMonthChange,\n style,\n}: CalendarProps) {\n const theme = useTheme();\n const [selected, setSelected] = useControllableState<Date | undefined>(\n controlledValue,\n defaultValue,\n onChange as ((date: Date | undefined) => void) | undefined,\n );\n const [month, setMonth] = useState(() => defaultMonth ?? selected ?? new Date());\n\n const today = startOfDay(new Date());\n const days = useMemo(() => monthGrid(month, weekStartsOn), [month, weekStartsOn]);\n\n const monthLabel = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(month),\n [month, locale],\n );\n\n const weekdayLabels = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n // Any known Sunday works as the anchor for the weekday cycle.\n const anchor = new Date(2024, 0, 7);\n return Array.from({ length: 7 }, (_, index) =>\n formatter.format(addDays(anchor, index + weekStartsOn)),\n );\n }, [locale, weekStartsOn]);\n\n const goToMonth = (amount: number) => {\n const next = addMonths(month, amount);\n setMonth(next);\n onMonthChange?.(next);\n };\n\n const isDisabled = (date: Date) =>\n (minDate !== undefined && date < startOfDay(minDate)) ||\n (maxDate !== undefined && date > startOfDay(maxDate));\n\n return (\n <View style={style}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: theme.space[2],\n }}\n >\n <IconButton\n icon={<Icon icon={ChevronLeftIcon} color=\"textSecondary\" />}\n accessibilityLabel=\"Previous month\"\n size=\"sm\"\n onPress={() => goToMonth(-1)}\n />\n <Text size=\"md\" weight=\"semibold\" accessibilityLiveRegion=\"polite\">\n {monthLabel}\n </Text>\n <IconButton\n icon={<Icon icon={ChevronRightIcon} color=\"textSecondary\" />}\n accessibilityLabel=\"Next month\"\n size=\"sm\"\n onPress={() => goToMonth(1)}\n />\n </View>\n\n <View style={{ flexDirection: 'row' }}>\n {weekdayLabels.map((label) => (\n <Text\n key={label}\n size=\"xs\"\n weight=\"medium\"\n color=\"textMuted\"\n align=\"center\"\n style={{ flex: 1, paddingVertical: theme.space[1.5] }}\n >\n {label}\n </Text>\n ))}\n </View>\n\n <View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>\n {days.map((day) => {\n const outside = day.getMonth() !== month.getMonth();\n const isSelected = selected !== undefined && isSameDay(day, selected);\n const isToday = isSameDay(day, today);\n const disabled = isDisabled(day);\n const mark = markedDates?.[dayKey(day)];\n\n return (\n <Pressable\n key={dayKey(day)}\n accessibilityRole=\"button\"\n accessibilityLabel={new Intl.DateTimeFormat(locale, { dateStyle: 'full' }).format(day)}\n accessibilityState={{ selected: isSelected, disabled }}\n disabled={disabled}\n onPress={() => setSelected(day)}\n style={{\n width: `${100 / 7}%`,\n aspectRatio: 1,\n alignItems: 'center',\n justifyContent: 'center',\n gap: 2,\n }}\n >\n <View\n style={{\n width: 34,\n height: 34,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: theme.radius.full,\n backgroundColor: isSelected ? theme.colors.primary : 'transparent',\n borderWidth: !isSelected && isToday ? theme.borderWidth.thin : 0,\n borderColor: theme.colors.primary,\n opacity: disabled ? theme.opacity.disabled : outside ? 0.4 : 1,\n }}\n >\n <Text\n size=\"sm\"\n weight={isSelected || isToday ? 'semibold' : 'regular'}\n color={isSelected ? 'onPrimary' : outside ? 'textMuted' : 'text'}\n >\n {day.getDate()}\n </Text>\n </View>\n {mark && !isSelected ? (\n <View\n style={{\n width: 4,\n height: 4,\n borderRadius: theme.radius.full,\n backgroundColor: theme.colors[mark],\n }}\n />\n ) : (\n <View style={{ height: 4 }} />\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n","import { useRef, useState, type ReactNode } from 'react';\nimport {\n ScrollView,\n View,\n useWindowDimensions,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\n\nexport interface CarouselProps {\n /** One element per slide. */\n children: ReactNode[];\n /** Slide width. Defaults to the full screen width minus the gutter. */\n slideWidth?: number;\n /** Horizontal page gutter used to compute the default slide width. */\n gutter?: number;\n /** Shows the page dots. Defaults to true. */\n dots?: boolean;\n onSlideChange?: (index: number) => void;\n style?: StyleProp<ViewStyle>;\n accessibilityLabel?: string;\n}\n\n/**\n * Snap-scrolling horizontal carousel with page dots. Uses a paging ScrollView\n * rather than a gesture library, so it needs no extra native dependency.\n *\n * ```tsx\n * <Carousel accessibilityLabel=\"Featured events\">\n * {events.map((event) => <EventCard key={event.id} event={event} />)}\n * </Carousel>\n * ```\n */\nexport function Carousel({\n children,\n slideWidth,\n gutter = 16,\n dots = true,\n onSlideChange,\n style,\n accessibilityLabel,\n}: CarouselProps) {\n const theme = useTheme();\n const { width } = useWindowDimensions();\n const itemWidth = slideWidth ?? width - gutter * 2;\n const [index, setIndex] = useState(0);\n const lastIndex = useRef(0);\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const next = Math.round(event.nativeEvent.contentOffset.x / (itemWidth + theme.space[3]));\n if (next === lastIndex.current) return;\n lastIndex.current = next;\n setIndex(next);\n onSlideChange?.(next);\n };\n\n return (\n <View style={style}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n decelerationRate=\"fast\"\n snapToInterval={itemWidth + theme.space[3]}\n snapToAlignment=\"start\"\n onMomentumScrollEnd={handleScroll}\n accessibilityLabel={accessibilityLabel}\n contentContainerStyle={{ gap: theme.space[3], paddingHorizontal: gutter }}\n >\n {children.map((child, slideIndex) => (\n <View key={slideIndex} style={{ width: itemWidth }}>\n {child}\n </View>\n ))}\n </ScrollView>\n {dots && children.length > 1 ? (\n <View\n style={{\n flexDirection: 'row',\n alignSelf: 'center',\n gap: theme.space[1.5],\n paddingTop: theme.space[3],\n }}\n >\n {children.map((_, dotIndex) => (\n <View\n key={dotIndex}\n style={{\n width: dotIndex === index ? 18 : 6,\n height: 6,\n borderRadius: theme.radius.full,\n backgroundColor:\n dotIndex === index ? theme.colors.primary : theme.colors.borderStrong,\n }}\n />\n ))}\n </View>\n ) : null}\n </View>\n );\n}\n","import { useState, type ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { shadowStyle } from '../system/styleProps';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Text } from './Text';\n\nexport interface TooltipProps {\n /** Tooltip copy. Keep it short — there is no room for a paragraph. */\n label: string;\n /** Side the bubble appears on. Defaults to above the trigger. */\n placement?: 'top' | 'bottom';\n children: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Long-press hint. Phones have no hover, so the trigger reveals the bubble on\n * long press and hides it on release; the label is also the trigger's\n * accessibility hint so screen-reader users get it without the gesture.\n *\n * ```tsx\n * <Tooltip label=\"Points earned this semester\">\n * <Icon icon={InfoIcon} />\n * </Tooltip>\n * ```\n */\nexport function Tooltip({ label, placement = 'top', children, style }: TooltipProps) {\n const theme = useTheme();\n const [visible, setVisible] = useState(false);\n\n return (\n <View style={[{ position: 'relative' }, style]}>\n <Pressable\n accessibilityHint={label}\n delayLongPress={200}\n onLongPress={() => setVisible(true)}\n onPressOut={() => setVisible(false)}\n >\n {children}\n </Pressable>\n {visible ? (\n <View\n accessibilityRole=\"alert\"\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n [placement === 'top' ? 'bottom' : 'top']: '100%',\n left: 0,\n marginVertical: theme.space[1.5],\n maxWidth: 240,\n paddingHorizontal: theme.space[2.5],\n paddingVertical: theme.space[1.5],\n borderRadius: theme.radius.md,\n backgroundColor: theme.colors.text,\n ...shadowStyle(theme.shadow.md),\n }}\n >\n <Text size=\"xs\" style={{ color: theme.colors.textInverse }}>\n {label}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n","import type { Size } from '@muja-ui/core';\nimport { XIcon } from '@muja-ui/icons';\nimport type { ReactNode } from 'react';\nimport {\n Modal as RNModal,\n Pressable,\n ScrollView,\n View,\n useWindowDimensions,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\nimport { Icon } from './Icon';\nimport { IconButton } from './IconButton';\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n size?: Size;\n /** Close when the backdrop is pressed. Defaults to true. */\n closeOnOverlayPress?: boolean;\n /** Accessible name for the dialog. */\n accessibilityLabel?: string;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nconst maxWidth: Record<Size, number> = { sm: 340, md: 420, lg: 560 };\n\n/**\n * Centered dialog on a dimmed backdrop. Built on React Native's `Modal`, so\n * the Android back button and native stacking are handled for us.\n *\n * ```tsx\n * <Modal open={open} onClose={close} accessibilityLabel=\"Book room\">\n * <ModalHeader onClose={close}><ModalTitle>Book room</ModalTitle></ModalHeader>\n * <ModalBody>…</ModalBody>\n * <ModalFooter><Button onPress={confirm}>Confirm</Button></ModalFooter>\n * </Modal>\n * ```\n */\nexport function Modal({\n open,\n onClose,\n size = 'md',\n closeOnOverlayPress = true,\n accessibilityLabel,\n children,\n style,\n}: ModalProps) {\n const theme = useTheme();\n const { width } = useWindowDimensions();\n\n return (\n <RNModal\n visible={open}\n transparent\n animationType=\"fade\"\n statusBarTranslucent\n onRequestClose={onClose}\n >\n <Pressable\n accessibilityLabel={closeOnOverlayPress ? 'Close' : undefined}\n onPress={closeOnOverlayPress ? onClose : undefined}\n style={{\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.space[5],\n backgroundColor: theme.colors.overlay,\n }}\n >\n {/* Swallows presses so tapping the panel doesn't reach the backdrop. */}\n <Pressable\n accessibilityRole=\"alert\"\n accessibilityViewIsModal\n accessibilityLabel={accessibilityLabel}\n onPress={() => {}}\n style={[\n {\n width: Math.min(maxWidth[size], width - theme.space[10]),\n maxHeight: '85%',\n borderRadius: theme.radius.xl,\n backgroundColor: theme.colors.surface,\n overflow: 'hidden',\n },\n style,\n ]}\n >\n {children}\n </Pressable>\n </Pressable>\n </RNModal>\n );\n}\n\nexport interface ModalHeaderProps {\n children?: ReactNode;\n /** Renders a close button on the right when provided. */\n onClose?: () => void;\n style?: StyleProp<ViewStyle>;\n}\n\nexport function ModalHeader({ children, onClose, style }: ModalHeaderProps) {\n const theme = useTheme();\n return (\n <View\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.space[3],\n paddingHorizontal: theme.space[5],\n paddingTop: theme.space[5],\n paddingBottom: theme.space[3],\n },\n style,\n ]}\n >\n <View style={{ flex: 1 }}>{children}</View>\n {onClose ? (\n <IconButton\n icon={<Icon icon={XIcon} color=\"textSecondary\" />}\n accessibilityLabel=\"Close\"\n size=\"sm\"\n variant=\"ghost\"\n onPress={onClose}\n />\n ) : null}\n </View>\n );\n}\n\nexport function ModalTitle({ children }: { children?: ReactNode }) {\n return (\n <Heading level={3} size=\"lg\">\n {children}\n </Heading>\n );\n}\n\nexport interface ModalBodyProps {\n children?: ReactNode;\n /** Wraps the content in a ScrollView. Defaults to true. */\n scrollable?: boolean;\n style?: StyleProp<ViewStyle>;\n}\n\nexport function ModalBody({ children, scrollable = true, style }: ModalBodyProps) {\n const theme = useTheme();\n const padding = { paddingHorizontal: theme.space[5], paddingBottom: theme.space[4] } as const;\n if (!scrollable) return <View style={[padding, style]}>{children}</View>;\n return (\n <ScrollView contentContainerStyle={[padding, style]} keyboardShouldPersistTaps=\"handled\">\n {children}\n </ScrollView>\n );\n}\n\nexport function ModalFooter({\n children,\n style,\n}: {\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}) {\n const theme = useTheme();\n return (\n <View\n style={[\n {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: theme.space[2],\n paddingHorizontal: theme.space[5],\n paddingTop: theme.space[3],\n paddingBottom: theme.space[5],\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n}\n","import { XIcon } from '@muja-ui/icons';\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport {\n Animated,\n Easing,\n Modal as RNModal,\n Pressable,\n View,\n useWindowDimensions,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { Heading } from './Heading';\nimport { Icon } from './Icon';\nimport { IconButton } from './IconButton';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n /** Edge the panel slides in from. Defaults to the right. */\n side?: 'left' | 'right';\n /** Panel width as a fraction of the screen. Defaults to 0.85. */\n widthRatio?: number;\n title?: string;\n accessibilityLabel?: string;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Side sheet — a filter or navigation panel that slides in from an edge.\n *\n * ```tsx\n * <Drawer open={open} onClose={close} title=\"Filters\">…</Drawer>\n * ```\n */\nexport function Drawer({\n open,\n onClose,\n side = 'right',\n widthRatio = 0.85,\n title,\n accessibilityLabel,\n children,\n style,\n}: DrawerProps) {\n const theme = useTheme();\n const insets = useSafeAreaInsets();\n const { width } = useWindowDimensions();\n const panelWidth = width * widthRatio;\n const offset = side === 'right' ? panelWidth : -panelWidth;\n const translateX = useRef(new Animated.Value(offset)).current;\n\n useEffect(() => {\n Animated.timing(translateX, {\n toValue: open ? 0 : offset,\n duration: open ? theme.motion.duration.normal : theme.motion.duration.fast,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n }).start();\n }, [open, offset, translateX, theme.motion.duration]);\n\n return (\n <RNModal\n visible={open}\n transparent\n animationType=\"none\"\n statusBarTranslucent\n onRequestClose={onClose}\n >\n <View style={{ flex: 1, flexDirection: side === 'right' ? 'row' : 'row-reverse' }}>\n <Pressable\n accessibilityLabel=\"Close\"\n onPress={onClose}\n style={{ flex: 1, backgroundColor: theme.colors.overlay }}\n />\n <Animated.View\n accessibilityViewIsModal\n accessibilityLabel={accessibilityLabel ?? title}\n style={[\n {\n width: panelWidth,\n paddingTop: insets.top,\n paddingBottom: insets.bottom,\n backgroundColor: theme.colors.surface,\n transform: [{ translateX }],\n },\n style,\n ]}\n >\n {title ? (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.space[3],\n padding: theme.space[4],\n borderBottomWidth: theme.borderWidth.thin,\n borderBottomColor: theme.colors.border,\n }}\n >\n <Heading level={3} size=\"lg\" style={{ flex: 1 }}>\n {title}\n </Heading>\n <IconButton\n icon={<Icon icon={XIcon} color=\"textSecondary\" />}\n accessibilityLabel=\"Close\"\n size=\"sm\"\n onPress={onClose}\n />\n </View>\n ) : null}\n {children}\n </Animated.View>\n </View>\n </RNModal>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Pressable, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { useTheme } from '../theme/ThemeProvider';\nimport { BottomSheet } from './BottomSheet';\nimport { Text } from './Text';\n\nexport interface ActionSheetAction {\n label: string;\n onPress: () => void;\n /** Danger styling for destructive actions. */\n destructive?: boolean;\n disabled?: boolean;\n icon?: ReactNode;\n}\n\nexport interface ActionSheetProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n description?: string;\n actions: readonly ActionSheetAction[];\n /** Label for the trailing cancel row. Pass `null` to omit it. */\n cancelLabel?: string | null;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * Menu of actions in a bottom sheet — the native counterpart to the web\n * package's `DropdownMenu`. Anchored dropdowns don't belong on a phone, so the\n * same intent surfaces as a sheet.\n *\n * ```tsx\n * <ActionSheet open={open} onClose={close} actions={[\n * { label: 'Share ticket', onPress: share },\n * { label: 'Cancel registration', onPress: cancel, destructive: true },\n * ]} />\n * ```\n */\nexport function ActionSheet({\n open,\n onClose,\n title,\n description,\n actions,\n cancelLabel = 'Cancel',\n style,\n}: ActionSheetProps) {\n const theme = useTheme();\n\n return (\n <BottomSheet open={open} onClose={onClose} title={title} style={style}>\n {description ? (\n <Text\n size=\"sm\"\n color=\"textMuted\"\n style={{ paddingHorizontal: theme.space[5], paddingTop: theme.space[2] }}\n >\n {description}\n </Text>\n ) : null}\n <View style={{ paddingTop: theme.space[3] }} accessibilityRole=\"menu\">\n {actions.map((action) => (\n <Pressable\n key={action.label}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: action.disabled }}\n disabled={action.disabled}\n onPress={() => {\n onClose();\n action.onPress();\n }}\n style={({ pressed }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[3],\n paddingHorizontal: theme.space[5],\n paddingVertical: theme.space[4],\n backgroundColor: pressed ? theme.colors.surfaceActive : 'transparent',\n opacity: action.disabled ? theme.opacity.disabled : 1,\n })}\n >\n {action.icon}\n <Text size=\"md\" weight=\"medium\" color={action.destructive ? 'dangerText' : 'text'}>\n {action.label}\n </Text>\n </Pressable>\n ))}\n {cancelLabel ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={onClose}\n style={({ pressed }) => ({\n paddingHorizontal: theme.space[5],\n paddingVertical: theme.space[4],\n borderTopWidth: theme.borderWidth.thin,\n borderTopColor: theme.colors.border,\n backgroundColor: pressed ? theme.colors.surfaceActive : 'transparent',\n })}\n >\n <Text size=\"md\" weight=\"semibold\" color=\"textSecondary\">\n {cancelLabel}\n </Text>\n </Pressable>\n ) : null}\n </View>\n </BottomSheet>\n );\n}\n"]}