import React from 'react';
import BaseComponent from '../_base/baseComponent';
import PropTypes from 'prop-types';
import { noop } from '@douyinfe/semi-foundation/lib/cjs/utils/function';
import Item from './item';
import RatingFoundation, { RatingAdapter } from '@douyinfe/semi-foundation/lib/cjs/rating/foundation';
import '@douyinfe/semi-foundation/lib/cjs/rating/rating.css';
export type { RatingItemProps } from './item';
export interface RatingProps {
    'aria-describedby'?: string;
    'aria-errormessage'?: string;
    'aria-invalid'?: boolean;
    'aria-label'?: string;
    'aria-labelledby'?: string;
    'aria-required'?: boolean;
    disabled?: boolean;
    value?: number;
    defaultValue?: number;
    count?: number;
    allowHalf?: boolean;
    allowClear?: boolean;
    style?: React.CSSProperties;
    prefixCls?: string;
    onChange?: (value: number) => void;
    onHoverChange?: (value: number) => void;
    className?: string;
    character?: React.ReactNode;
    tabIndex?: number;
    onFocus?: (e: React.FocusEvent) => void;
    onBlur?: (e: React.FocusEvent) => void;
    onKeyDown?: (e: React.KeyboardEvent) => void;
    onClick?: (e: React.MouseEvent | React.KeyboardEvent, index: number) => void;
    autoFocus?: boolean;
    size?: 'small' | 'default' | number;
    tooltips?: string[];
    id?: string;
    preventScroll?: boolean;
}
export interface RatingState {
    value: number;
    hoverValue: number;
    focused: boolean;
    clearedValue: number;
    emptyStarFocusVisible: boolean;
}
export default class Rating extends BaseComponent<RatingProps, RatingState> {
    static contextType: React.Context<import("../configProvider/context").ContextValue>;
    static propTypes: {
        'aria-describedby': PropTypes.Requireable<string>;
        'aria-errormessage': PropTypes.Requireable<string>;
        'aria-invalid': PropTypes.Requireable<boolean>;
        'aria-label': PropTypes.Requireable<string>;
        'aria-labelledby': PropTypes.Requireable<string>;
        'aria-required': PropTypes.Requireable<boolean>;
        disabled: PropTypes.Requireable<boolean>;
        value: PropTypes.Requireable<number>;
        defaultValue: PropTypes.Requireable<number>;
        count: PropTypes.Requireable<number>;
        allowHalf: PropTypes.Requireable<boolean>;
        allowClear: PropTypes.Requireable<boolean>;
        style: PropTypes.Requireable<object>;
        prefixCls: PropTypes.Requireable<string>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onHoverChange: PropTypes.Requireable<(...args: any[]) => any>;
        className: PropTypes.Requireable<string>;
        character: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        tabIndex: PropTypes.Requireable<number>;
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        autoFocus: PropTypes.Requireable<boolean>;
        size: PropTypes.Requireable<NonNullable<number | "default" | "small">>;
        tooltips: PropTypes.Requireable<string[]>;
        id: PropTypes.Requireable<string>;
        preventScroll: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        defaultValue: number;
        count: number;
        allowHalf: boolean;
        allowClear: boolean;
        style: {};
        prefixCls: string;
        onChange: typeof noop;
        onHoverChange: typeof noop;
        tabIndex: number;
        size: "default";
    };
    stars: Record<string, Item>;
    rate: HTMLUListElement;
    foundation: RatingFoundation;
    constructor(props: RatingProps);
    static getDerivedStateFromProps(nextProps: RatingProps, state: RatingState): RatingState;
    get adapter(): RatingAdapter<RatingProps, RatingState>;
    componentDidMount(): void;
    componentWillUnmount(): void;
    onHover: (event: React.MouseEvent, index: number) => void;
    onMouseLeave: () => void;
    onClick: RatingProps['onClick'];
    onFocus: RatingProps['onFocus'];
    onBlur: RatingProps['onBlur'];
    onKeyDown: RatingProps['onKeyDown'];
    focus: () => void;
    blur: () => void;
    saveRef: (index: number) => (node: Item) => void;
    saveRate: (node: HTMLUListElement) => void;
    handleStarFocusVisible: (event: React.FocusEvent) => void;
    handleStarBlur: (event: React.FocusEvent) => void;
    getAriaLabelPrefix: () => string;
    getItemList: (ariaLabelPrefix: string) => React.JSX.Element[];
    render(): React.JSX.Element;
}
