/// <reference types="react" />
import { BoxProps, SwitchProps, TextareaProps, InputProps, ButtonProps, ThemeOverride, ColorMode, ColorModeOptions } from '@chakra-ui/react';
import { ReactNode, PropsWithoutRef } from 'react';
import { FormProps as FormProps$1, UseFieldConfig } from 'react-final-form';
import { z } from 'zod';
import { SelectProps as SelectProps$1 } from '@components/menus/Select';

interface CardProps extends BoxProps {
    variant?: 'outline';
}
declare function Card(props: CardProps): JSX.Element;

declare type Series = {
    name: string;
    data: number[] | {
        x: any;
        y: number;
    }[];
};
interface GridConfiguration {
    show?: boolean;
    borderColor?: string;
    strokeDashArray?: number;
    position?: "front" | "back";
    xaxis?: {
        lines: {
            show: boolean;
        };
    };
    yaxis?: {
        lines: {
            show: boolean;
        };
    };
    opacity?: number;
}
interface ChartConfiguration {
    background?: string;
    fontFamily?: string;
    grid?: GridConfiguration;
    xaxis?: ApexXAxis;
    yaxis?: ApexYAxis;
}
interface LineChartConfiguration extends ChartConfiguration {
    offsetX?: number;
    offsetY?: number;
}
declare type LineChartProps = {
    title?: string;
    emptyState: ReactNode;
    data: Series[];
    options: LineChartConfiguration;
};
declare function LineChart({ title, emptyState, data, options, }: LineChartProps): JSX.Element;

declare type DatepickerProps = {
    onChange: (input: string) => void;
    colorScheme: string;
};
declare const Datepicker: ({ onChange, colorScheme }: DatepickerProps) => JSX.Element;

interface FormProps<S extends z.ZodType<any, any>> extends Omit<PropsWithoutRef<JSX.IntrinsicElements['form']>, 'onSubmit'> {
    /** All your form fields */
    children?: ReactNode;
    /** Text to display in the submit button */
    submitText?: string;
    schema?: S;
    onSubmit: FormProps$1<z.infer<S>>['onSubmit'];
    initialValues?: FormProps$1<z.infer<S>>['initialValues'];
    buttonWidth?: string;
    flexW?: string;
}
declare function Form<S extends z.ZodType<any, any>>({ children, submitText, schema, initialValues, onSubmit, buttonWidth, flexW, ...props }: FormProps<S>): JSX.Element;

interface FormSelectProps extends Omit<SelectProps$1, 'disabled'> {
    name: string;
    label: string;
    helperText?: string;
    fieldProps?: UseFieldConfig<string>;
}
declare function FormSelect({ options, name, label, helperText, placeholder, fieldProps, variant, ...rest }: FormSelectProps): JSX.Element;

interface FormSwitchProps extends SwitchProps {
    name: string;
    label: string;
    helperText?: string;
    fieldProps?: UseFieldConfig<string>;
}
declare function FormSwitch({ name, label, helperText, placeholder, fieldProps, colorScheme, ...rest }: FormSwitchProps): JSX.Element;

interface FormTextareaProps extends TextareaProps {
    name: string;
    label: string;
    helperText?: string;
    placeholder?: string;
    fieldProps?: UseFieldConfig<string>;
}
declare function FormTextInput$1({ name, label, helperText, placeholder, fieldProps, ...rest }: FormTextareaProps): JSX.Element;

interface FormTextInputProps extends InputProps {
    type?: 'text' | 'password' | 'email' | 'number' | 'hidden';
    name: string;
    label: string;
    helperText?: string;
    placeholder?: string;
    fieldProps?: UseFieldConfig<string>;
}
declare function FormTextInput({ type, name, label, helperText, placeholder, fieldProps, ...rest }: FormTextInputProps): JSX.Element;

declare type DropdownItem = {
    key: string | number;
    value: string | number;
};
declare type SelectProps = {
    defaultOption?: DropdownItem;
    disabled: boolean;
    onChange?: (v: DropdownItem) => void;
    options: DropdownItem[];
    buttonProps?: ButtonProps;
    optionsProps?: BoxProps;
    optionProps?: BoxProps;
    placeholder?: string;
    variant?: string;
};
declare function Select({ disabled, defaultOption, onChange, options, placeholder, variant, ...props }: SelectProps): JSX.Element;

declare type Colors = string | {
    [key: string]: Colors;
};
declare type Fonts = {
    body: string;
    heading: string;
};
declare function buildTheme(colors: Colors, fonts: Fonts): ThemeOverride;

declare type DoersProviderProps = {
    colorMode: ColorMode;
    children?: React.ReactNode;
    options?: ColorModeOptions;
    colorModeManager?: StorageManager;
    theme: ThemeOverride;
};
declare function DoersProvider({ theme, colorMode, options, children, }: DoersProviderProps): JSX.Element;

export { Card, Datepicker, DoersProvider, Form, FormSelect, FormSwitch, FormTextInput, FormTextInput$1 as FormTextarea, LineChart, Select, buildTheme };
