import { IconDefinition } from '@fortawesome/fontawesome-common-types'; import { ThemeConfig as CoreThemeConfig } from 'bumbag/types'; import { ParsedIcons, ParseIconsOpts } from 'bumbag/utils/parseIcons'; import { Flexible } from 'bumbag/types'; import { BoxKeyboardAvoidingProps, BoxProps, BoxSafeProps, BoxScrollProps, BoxTouchableProps } from '../Box'; import { ButtonProps } from '../Button'; import { CheckboxProps, CheckboxFieldProps, CheckboxGroupProps, CheckboxGroupFieldProps } from '../Checkbox'; import { FieldWrapperProps } from '../FieldWrapper'; import { FlexProps } from '../Flex'; import { GroupProps } from '../Group'; import { HeadingProps } from '../Heading'; import { IconProps } from '../Icon'; import { InputProps, InputFieldProps } from '../Input'; import { ImageProps } from '../Image'; import { LevelProps } from '../Level'; import { MenuProps, MenuItemProps, MenuOptionItemProps, MenuOptionGroupProps } from '../Menu'; import { PressableProps } from '../Pressable'; import { RadioProps, RadioGroupProps, RadioGroupFieldProps } from '../Radio'; import { SpinnerProps } from '../Spinner'; import { SetProps } from '../Set'; import { StackProps } from '../Stack'; import { SwitchProps, SwitchFieldProps, SwitchGroupProps, SwitchGroupFieldProps } from '../Switch'; import { TextProps } from '../Text'; export type Stylesheet = any; export type ThemeAttribute = R | ((props: { theme: ThemeConfig }) => R); export type Variant = { [key: string]: ThemeConfig }; export type AltitudesThemeConfig = { [key: string]: ThemeAttribute; }; type BreakpointsThemeConfig = { height: { [key: string]: ThemeAttribute; }; width: { [key: string]: ThemeAttribute; }; }; export type BottomSheetThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; Backdrop?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; Background?: { styles?: { base?: ThemeAttribute; }; Wrapper?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; DraggableView?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; FlatList?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; Handle?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; Modal?: { styles?: { base?: ThemeAttribute; }; Wrapper?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; ScrollView?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; SectionList?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; View?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; }; export type BoxThemeConfig = { styles?: { base?: ThemeAttribute; }; Safe?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; Touchable?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; KeyboardAvoiding?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; Scroll?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type ButtonThemeConfig = { styles?: { base?: ThemeAttribute; disabled?: ThemeAttribute; ghost?: ThemeAttribute; hover?: ThemeAttribute; hoveractive?: ThemeAttribute; loading?: ThemeAttribute; link?: ThemeAttribute; outlined?: ThemeAttribute; static?: ThemeAttribute; sizes?: { small?: ThemeAttribute; default?: ThemeAttribute; medium?: ThemeAttribute; large?: ThemeAttribute; }; }; Icon?: { styles?: { base?: ThemeAttribute; after?: ThemeAttribute; before?: ThemeAttribute; }; }; Spinner?: { styles?: { base?: ThemeAttribute; }; }; Text?: { styles?: { base?: ThemeAttribute; hover?: ThemeAttribute; hoveractive?: ThemeAttribute; outlined?: ThemeAttribute; ghost?: ThemeAttribute; link?: ThemeAttribute; sizes?: { small?: ThemeAttribute; default?: ThemeAttribute; medium?: ThemeAttribute; large?: ThemeAttribute; }; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type CheckboxThemeConfig = { styles?: { base?: ThemeAttribute; }; Icon?: { styles?: { base?: ThemeAttribute; }; }; CheckIcon?: { styles?: { base?: ThemeAttribute; }; }; Label?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type CheckboxFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type FieldWrapperThemeConfig = { styles?: { base?: ThemeAttribute; }; Label?: { styles?: { base?: ThemeAttribute; }; }; LabelWrapper?: { styles?: { base?: ThemeAttribute; }; }; DescriptionText?: { styles?: { base?: ThemeAttribute; }; }; HintText?: { styles?: { base?: ThemeAttribute; }; }; HintTextWrapper?: { styles?: { base?: ThemeAttribute; }; }; OptionalText?: { styles?: { base?: ThemeAttribute; }; }; RequiredText?: { styles?: { base?: ThemeAttribute; }; }; ValidationText?: { styles?: { base?: ThemeAttribute; }; }; ValidationTextWrapper?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type CheckboxGroupThemeConfig = { styles?: { base?: ThemeAttribute; }; Set?: { styles?: { base?: ThemeAttribute; }; }; Item?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type CheckboxGroupFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type FlexThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type FontWeightsThemeConfig = { [fontFamily: string]: { default?: { fontFamilySuffix?: string; fontWeight?: string; }; semibold?: { fontFamilySuffix?: string; fontWeight?: string; }; bold?: { fontFamilySuffix?: string; fontWeight?: string; }; 100?: { fontFamilySuffix?: string; fontWeight?: string; }; 200?: { fontFamilySuffix?: string; fontWeight?: string; }; 300?: { fontFamilySuffix?: string; fontWeight?: string; }; 400?: { fontFamilySuffix?: string; fontWeight?: string; }; 500?: { fontFamilySuffix?: string; fontWeight?: string; }; 600?: { fontFamilySuffix?: string; fontWeight?: string; }; 700?: { fontFamilySuffix?: string; fontWeight?: string; }; 800?: { fontFamilySuffix?: string; fontWeight?: string; }; 900?: { fontFamilySuffix?: string; fontWeight?: string; }; }; }; export type GroupThemeConfig = { styles?: { base?: ThemeAttribute; vertical?: ThemeAttribute; horizontal?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type HeadingThemeConfig = { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; H1?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; H2?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; H3?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; H4?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; H5?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; H6?: { fontSize?: string; styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; }; export type IconThemeConfig = { styles?: { base?: ThemeAttribute; }; iconSets?: Array<{ icons: IconDefinition[]; prefix?: ParseIconsOpts['prefix']; type: ParseIconsOpts['type']; }>; icons?: ParsedIcons; iconNames?: { info?: string; warning?: string; success?: string; danger?: string; [key: string]: string; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type InputThemeConfig = { styles?: { base?: ThemeAttribute; disabled?: ThemeAttribute; sizes?: { small?: ThemeAttribute; default?: ThemeAttribute; medium?: ThemeAttribute; large?: ThemeAttribute; }; }; IconWrapper?: { styles?: { base?: ThemeAttribute; }; }; LabelWrapper?: { styles?: { base?: ThemeAttribute; }; }; Label?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type InputFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type ImageThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type LevelThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type MenuThemeConfig = { styles?: { base?: ThemeAttribute; }; Item?: { styles?: { base?: ThemeAttribute; hover?: ThemeAttribute; hoveractive?: ThemeAttribute; }; BeforeWrapper?: { styles?: { base?: ThemeAttribute; }; }; AfterWrapper?: { styles?: { base?: ThemeAttribute; }; }; Content?: { styles?: { base?: ThemeAttribute; }; }; ContentText?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; OptionItem?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; OptionGroup?: { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type PickerThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type PressableThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type RadioThemeConfig = { styles?: { base?: ThemeAttribute; }; Icon?: { styles?: { base?: ThemeAttribute; }; }; CheckIcon?: { styles?: { base?: ThemeAttribute; }; }; Label?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type RadioGroupThemeConfig = { styles?: { base?: ThemeAttribute; }; Set?: { styles?: { base?: ThemeAttribute; }; }; Item?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type RadioGroupFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SetThemeConfig = { styles?: { base?: ThemeAttribute; vertical?: ThemeAttribute; horizontal?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SpinnerThemeConfig = { styles?: { base?: ThemeAttribute; }; sizes?: { small?: string; default?: string; medium?: string; large?: string; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type StackThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SwitchThemeConfig = { styles?: { base?: ThemeAttribute; }; Toggle?: { styles?: { base?: ThemeAttribute; }; }; Label?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SwitchFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SwitchGroupThemeConfig = { styles?: { base?: ThemeAttribute; }; Set?: { styles?: { base?: ThemeAttribute; }; }; Item?: { styles?: { base?: ThemeAttribute; }; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type SwitchGroupFieldThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type TextThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type ToastThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type ToastManagerThemeConfig = { styles?: { base?: ThemeAttribute; }; defaultProps?: Partial; variants?: Variant; modes?: Variant; }; export type ThemeConfig = { altitudes?: AltitudesThemeConfig; borders?: CoreThemeConfig['borders']; borderRadii?: CoreThemeConfig['borderRadii']; breakpoints?: { ios?: BreakpointsThemeConfig; android?: BreakpointsThemeConfig; web?: BreakpointsThemeConfig; }; fonts?: CoreThemeConfig['fonts']; fontSizes?: CoreThemeConfig['fontSizes']; fontWeights?: Flexible< { ios?: FontWeightsThemeConfig; android?: FontWeightsThemeConfig; web?: FontWeightsThemeConfig; }, FontWeightsThemeConfig >; icons?: CoreThemeConfig['icons']; lineHeights?: CoreThemeConfig['lineHeights']; letterSpacings?: CoreThemeConfig['letterSpacings']; spacing?: CoreThemeConfig['spacing']; palette?: CoreThemeConfig['palette']; Box?: BoxThemeConfig; BottomSheet?: BottomSheetThemeConfig; Button?: ButtonThemeConfig; Checkbox?: CheckboxThemeConfig; CheckboxField?: CheckboxThemeConfig; CheckboxGroup?: CheckboxGroupThemeConfig; CheckboxGroupField?: CheckboxGroupFieldThemeConfig; FieldWrapper?: FieldWrapperThemeConfig; Flex?: FlexThemeConfig; Group?: GroupThemeConfig; Heading?: HeadingThemeConfig; Icon?: IconThemeConfig; Input?: InputThemeConfig; InputField?: InputFieldThemeConfig; Image?: ImageThemeConfig; Level?: LevelThemeConfig; Menu?: MenuThemeConfig; Picker?: PickerThemeConfig; Pressable?: PressableThemeConfig; Radio?: RadioThemeConfig; RadioGroup?: RadioGroupThemeConfig; RadioGroupField?: RadioGroupFieldThemeConfig; Set?: SetThemeConfig; Spinner?: SpinnerThemeConfig; Stack?: StackThemeConfig; Switch?: SwitchThemeConfig; SwitchGroup?: SwitchGroupThemeConfig; SwitchField?: SwitchFieldThemeConfig; SwitchGroupField?: SwitchGroupFieldThemeConfig; Text?: TextThemeConfig; Toast?: ToastThemeConfig; ToastManager?: ToastManagerThemeConfig; };