amotify
Version:
UI Component for React,NextJS,esbuild
143 lines (142 loc) • 5.56 kB
TypeScript
/// <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 };