UNPKG

amotify

Version:

UI Component for React,NextJS,esbuild

143 lines (142 loc) 5.56 kB
/// <reference types="react" /> import { StyleProps, ReactElement } from '../@declares'; import { Records } from 'jmini'; declare namespace ButtonTypes { type Seeds = 'button' | 'label' | 'anchor'; type Tones = 'plain' | 'link' | 'normal' | 'border' | 'prime' | 'sub' | 'clear' | 'fillToBorder' | 'borderToFill'; type Colors = 'plain' | 'theme' | 'posi' | 'nega' | 'warn' | 'cloud' | 'trans' | 'white'; type Sizes = 'plain' | 'xsmall' | 'small' | 'regular' | 'large'; type delegateClickEventProps = 'auxEnter' | 'enter' | 'space'; type ClearColors = Colors | 'layer'; type SubColors = Colors | 'layer'; type Input<C = Colors> = StyleProps.BasicElement & { color?: C; tone?: Tones; size?: Sizes; tabIndex?: number; children?: ReactElement; 'aria-label'?: string; isLocked?: boolean; isActive?: boolean; isActiveStyles?: StyleProps.StyleProps; isActiveClassName?: string; }; namespace SizeMethods { type Component<I> = React.FC<I>; type FNs<I> = { Plain: React.FC<I>; XS: React.FC<I>; S: React.FC<I>; R: React.FC<I>; L: React.FC<I>; }; } type SizeMethods<I> = SizeMethods.Component<I> & SizeMethods.FNs<I>; } declare namespace Button { namespace OnFormSubmit { type Input = [ string, Callback<any> ] | [ string, Callback<any>, Options ]; type Callback<T = Records> = { (args: CallbackParams<T>): void; }; type CallbackParams<T = Records> = { body: T; isValid: boolean; /** * ⚠️ Warning: Be careful when using this function to avoid deadlocks. * after serialLock function is called, the form submission will be stopped receive new form submissions until release function is called. * */ serialLock(): { release(): void; }; }; type Options = { validOnly?: boolean; submitableKey?: ButtonTypes.delegateClickEventProps | ButtonTypes.delegateClickEventProps[]; /** * releaseOnFinish * [default] true * */ releaseOnFinish?: boolean; }; } type Input<C = ButtonTypes.Colors> = ButtonTypes.Input<C> & { onFormSubmit?: OnFormSubmit.Input; submitOption?: { formName: string; acceptInvalidForm?: boolean; submitDelegationKey?: ButtonTypes.delegateClickEventProps | ButtonTypes.delegateClickEventProps[]; callback(form: Records, ok: boolean): void; }; } & React.ButtonHTMLAttributes<HTMLButtonElement>; namespace Methods { type Component = (p: Input) => React.JSX.Element; type FNs = { Plain: ButtonTypes.SizeMethods<Input<''>>; Link: ButtonTypes.SizeMethods<Input<''>>; Normal: ButtonTypes.SizeMethods<Input>; Border: ButtonTypes.SizeMethods<Input>; Prime: ButtonTypes.SizeMethods<Input>; Sub: ButtonTypes.SizeMethods<Input<ButtonTypes.SubColors>>; Clear: ButtonTypes.SizeMethods<Input<ButtonTypes.ClearColors>>; FillToBorder: ButtonTypes.SizeMethods<Input>; BorderToFill: ButtonTypes.SizeMethods<Input>; }; } type Methods = Methods.Component & Methods.FNs; } declare namespace Label { type Input<C = ButtonTypes.Colors> = ButtonTypes.Input<C> & { htmlFor?: string; } & React.LabelHTMLAttributes<HTMLLabelElement>; namespace Methods { type Component = (p: Input) => React.JSX.Element; type FNs = { Plain: ButtonTypes.SizeMethods<Input<''>>; Link: ButtonTypes.SizeMethods<Input<''>>; Normal: ButtonTypes.SizeMethods<Input>; Border: ButtonTypes.SizeMethods<Input>; Prime: ButtonTypes.SizeMethods<Input>; Sub: ButtonTypes.SizeMethods<Input<ButtonTypes.SubColors>>; Clear: ButtonTypes.SizeMethods<Input<ButtonTypes.ClearColors>>; FillToBorder: ButtonTypes.SizeMethods<Input>; BorderToFill: ButtonTypes.SizeMethods<Input>; }; } type Methods = Methods.Component & Methods.FNs; } declare namespace Anchor { type Input<C = ButtonTypes.Colors> = ButtonTypes.Input<C> & { href?: string; newTab?: boolean; sync?: boolean; download?: any; shiftQueryParams?: boolean; } & React.ButtonHTMLAttributes<HTMLAnchorElement>; namespace Methods { type Component = (p: Input) => React.JSX.Element; type FNs = { Plain: ButtonTypes.SizeMethods<Input<''>>; Link: ButtonTypes.SizeMethods<Input<''>>; Normal: ButtonTypes.SizeMethods<Input>; Border: ButtonTypes.SizeMethods<Input>; Prime: ButtonTypes.SizeMethods<Input>; Sub: ButtonTypes.SizeMethods<Input<ButtonTypes.SubColors>>; Clear: ButtonTypes.SizeMethods<Input<ButtonTypes.ClearColors>>; FillToBorder: ButtonTypes.SizeMethods<Input>; BorderToFill: ButtonTypes.SizeMethods<Input>; }; } type Methods = Methods.Component & Methods.FNs; } declare const Button: Button.Methods; declare const Label: Label.Methods; declare const Anchor: Anchor.Methods; export { ButtonTypes, Button, Label, Anchor };