import type { ExtractPropTypes } from 'vue'
import type { rateProps, $constants } from '@/rate/src'
import type { ISharedRenderlessFunctionParams, ISharedRenderlessParamUtils } from './shared.type'
import type {
computedActiveClass,
computedActiveColor,
computedClassMap,
computedClasses,
computedColorMap,
computedDecimalStyle,
computedText,
computedVoidClass,
getIconStyle,
getTextStyle,
handelKey,
resetCurrentValue,
selectValue,
setCurrentValue,
showDecimalIcon
} from 'src/rate'
export interface IRateState {
pointerAtLeftHalf: boolean
colorMap: ReturnType<typeof computedColorMap>
classMap: ReturnType<typeof computedClassMap>
text: ReturnType<typeof computedText>
activeClass: string
activeColor: string
classes: ReturnType<typeof computedClasses>
decimalIconClass: string
voidClass: ReturnType<typeof computedVoidClass>
decimalStyle: ReturnType<typeof computedDecimalStyle>
hoverIndex: number
currentValue: number
mouseTarget: null | HTMLElement
}
export type IRateProps = ExtractPropTypes<typeof rateProps>
export type IRateConstants = typeof $constants
export type IRateRenderlessParams = ISharedRenderlessFunctionParams<IRateConstants> & {
api: IRateApi
state: IRateState
props: IRateProps
}
export interface IRateApi {
state: IRateState
computedText: typeof computedText
computedClasses: typeof computedClasses
computedClassMap: typeof computedClassMap
computedColorMap: typeof computedColorMap
computedVoidClass: typeof computedVoidClass
computedDecimalStyle: typeof computedDecimalStyle
getTextStyle: ReturnType<typeof getTextStyle>
handelKey: ReturnType<typeof handelKey>
computedActiveColor: ReturnType<typeof computedActiveColor>
computedActiveClass: ReturnType<typeof computedActiveClass>
showDecimalIcon: ReturnType<typeof showDecimalIcon>
getIconStyle: ReturnType<typeof getIconStyle>
selectValue: ReturnType<typeof selectValue>
resetCurrentValue: ReturnType<typeof resetCurrentValue>
setCurrentValue: ReturnType<typeof setCurrentValue>
}
export type IRateRenderlessParamUtils = ISharedRenderlessParamUtils<IRateConstants>