basantech89/awesome-ui

View on GitHub
src/shared/theme/themeEngine/componentConfig/button/button.types.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { CSSInterpolation } from '@emotion/css'
import React from 'react'

import { ThemeButtonProps, ButtonVariant } from '../../../../../components/form'
import { CommonElementSize } from '../../../../../types'
import { DeepPartialRequired, DeepRequired } from '../../../../../utils/utils.types'
import { ComponentConfig } from '../componentConfig.types'

type SizeConfig = {
  px: string
  py: string
  fontSize: string
  borderRadius: string
}

export type SizingOption = {
  rounded?: Record<CommonElementSize, SizeConfig>
  square?: Record<CommonElementSize, SizeConfig>
}

export declare interface ButtonThemeOptions {
  default?: ThemeButtonProps
  sizing?: SizingOption
  variant?: Partial<Record<ButtonVariant, React.CSSProperties>>
  base?: CSSInterpolation
}

export declare interface DefaultButtonThemeOptions {
  default: DeepPartialRequired<ThemeButtonProps, 'spinner' | 'icon'>
  base: CSSInterpolation
  variant: Partial<Record<ButtonVariant, React.CSSProperties>>
  sizing: DeepRequired<SizingOption>
}

export type ComponentOptions = DeepPartialRequired<ThemeButtonProps, 'spinner' | 'icon'> & {
  spinnerColor: React.CSSProperties['color']
  spinnerSize: string
}

export declare type ButtonConfig = ComponentConfig<ThemeButtonProps, ComponentOptions>

export declare type GenerateButtonConfig = (buttonThemeOptions?: ButtonThemeOptions) => ButtonConfig