carpooluikit
Version:
carpool finance uikit
40 lines (39 loc) • 1.61 kB
TypeScript
import { ComponentProps, ElementType, ReactElement, ReactNode } from "react";
import { Link } from "react-router-dom";
import { LayoutProps, SpaceProps } from "styled-system";
export declare const scales: {
readonly MD: "md";
readonly SM: "sm";
readonly XS: "xs";
};
export declare const variants: {
readonly PRIMARY: "primary";
readonly SECONDARY: "secondary";
readonly TERTIARY: "tertiary";
readonly TEXT: "text";
readonly DANGER: "danger";
readonly SUBTLE: "subtle";
readonly SUCCESS: "success";
};
export declare type Scale = typeof scales[keyof typeof scales];
export declare type Variant = typeof variants[keyof typeof variants];
/**
* @see https://www.benmvp.com/blog/polymorphic-react-components-typescript/
*/
export declare type AsProps<E extends ElementType = ElementType> = {
as?: E;
};
export declare type MergeProps<E extends ElementType> = AsProps<E> & Omit<ComponentProps<E>, keyof AsProps>;
export declare type PolymorphicComponentProps<E extends ElementType, P> = P & MergeProps<E>;
export declare type PolymorphicComponent<P, D extends ElementType = "button"> = <E extends ElementType = D>(props: PolymorphicComponentProps<E, P>) => ReactElement | null;
export interface BaseButtonProps extends LayoutProps, SpaceProps {
as?: "a" | "button" | typeof Link;
external?: boolean;
isLoading?: boolean;
scale?: Scale;
variant?: Variant;
disabled?: boolean;
startIcon?: ReactNode;
endIcon?: ReactNode;
}
export declare type ButtonProps<P extends ElementType = "button"> = PolymorphicComponentProps<P, BaseButtonProps>;