@geekyhawks/react-native-ui-components
Version:
Lightweight, reusable React Native UI components with built-in theming — including Text, TextInput, FloatingLabelTextInput, Button, and more. Fully typed with TypeScript and easy to integrate into any project.
130 lines (119 loc) • 3.73 kB
text/typescript
/**
* SelectionControl Variants
*
* Defines default size and color variants for selection controls
* such as Radio, Checkbox, and Switch. This ensures consistent
* sizing and coloring across all related components.
*
* Author: Geeky Hawks FZE LLC
*/
import { ViewStyle } from "react-native";
import { ThemeColors } from "../../theme";
/**
* SelectionControlSizeVariant
*
* Defines the style properties for a single control size.
* Includes outer container size and inner indicator size.
*/
export type SelectionControlSizeVariant = {
container: Partial<ViewStyle>;
indicator: Partial<ViewStyle>;
};
/**
* SelectionControlSizeVariants
*
* Represents a collection of named selection control size variants.
* Keys are variant names (e.g., "sm", "md", "lg" or custom),
* and values are the corresponding SelectionControlSizeVariant styles.
*/
export type SelectionControlSizeVariants =
Record<DefaultSelectionControlSizes, SelectionControlSizeVariant> &
Record<string, SelectionControlSizeVariant>;
/**
* DefaultSelectionControlSizes
*
* Predefined size options available out-of-the-box:
* - "sm": compact control (e.g., small radios/checkboxes)
* - "md": medium control (default)
* - "lg": large control (e.g., big toggles)
*/
export type DefaultSelectionControlSizes = "sm" | "md" | "lg";
/**
* defaultSelectionControlSizeVariants
*
* Predefined control size variants with standardized container and indicator sizes.
*/
export const defaultSelectionControlSizeVariants: SelectionControlSizeVariants = {
sm: {
container: { width: 16, height: 16 },
indicator: { width: 8, height: 8 },
},
md: {
container: { width: 20, height: 20 },
indicator: { width: 10, height: 10 },
},
lg: {
container: { width: 24, height: 24 },
indicator: { width: 12, height: 12 },
},
};
/**
* ThemeColorValue
*
* Represents a color reference that can be either:
* - a key from the theme’s color palette (`keyof ThemeColors`), or
* - a custom color string (e.g., hex, rgba, named color).
*
* Useful for components that support both theme-based and custom colors.
*/
export type ThemeColorValue = keyof ThemeColors | string;
/**
* SelectionControlColorVariant
*
* Defines the color properties for a single control variant.
* Usually maps to theme colors for border, background, and indicator.
*/
export interface SelectionControlColorVariant {
borderColor: ThemeColorValue;
backgroundColor: ThemeColorValue;
indicatorColor: ThemeColorValue;
};
/**
* SelectionControlColorVariants
*
* Represents a collection of named color variants.
*/
export type SelectionControlColorVariants =
Record<DefaultSelectionControlColors, SelectionControlColorVariant> &
Record<string, SelectionControlColorVariant>;
/**
* DefaultSelectionControlColors
*
* Predefined color options available out-of-the-box:
* - "primary": themed with primary color
* - "secondary": themed with secondary color
* - "error": themed with error color (for validation)
*/
export type DefaultSelectionControlColors = "primary" | "secondary" | "error";
/**
* defaultSelectionControlColorVariants
*
* Predefined control color variants using theme color keys.
*/
export const defaultSelectionControlColorVariants: SelectionControlColorVariants = {
primary: {
borderColor: "primary",
backgroundColor: "surface",
indicatorColor: "primary",
},
secondary: {
borderColor: "secondary",
backgroundColor: "surface",
indicatorColor: "secondary",
},
error: {
borderColor: "error",
backgroundColor: "surface",
indicatorColor: "error",
},
};