aio-input
Version:
generate all input types in react j[A[C[B[A[D[D[B[A[C[F[C[C[C[C[C[C[C[C[C[C[C[C[C[C[B[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C
760 lines (759 loc) • 23.6 kB
TypeScript
import { type FC, type ReactNode } from 'react';
import { type I_dateObject } from 'aio-date';
import './index.css';
declare const AIOInput: FC<I_AIOInput>;
export default AIOInput;
export type I_AIOInput = AI_isRange & AI_isTree & AI_isDate & {
after?: ReactNode;
before?: ReactNode;
attrs?: any;
className?: string;
style?: any;
disabled?: boolean;
rtl?: boolean;
imageAttrs?: any;
justify?: boolean;
value?: any;
onChange?: (newValue: any, p?: any) => Promise<any> | any;
deSelect?: boolean;
onSubmit?: (newValue: any, p?: any) => Promise<any> | any;
placeholder?: ReactNode;
text?: ReactNode;
subtext?: ReactNode;
type: AI_type;
validations?: (any[]) | ((v: any) => string | undefined);
checkIcon?: ReactNode[];
listOptions?: {
decay?: number;
stop?: number;
count?: number;
move?: any;
editable?: boolean;
};
onClick?: (e: Event) => void;
preview?: boolean;
tagSearch?: string;
hideTags?: boolean;
isSuggestion?: boolean;
fetchSuggestions?: (search: string) => Promise<any[]>;
maskPattern?: {
type: 'text' | 'number' | 'select';
length: number;
options?: 'fa-plate' | string[];
html?: ReactNode;
def?: string;
after?: ReactNode;
placeholder?: string;
disabled?: boolean;
attrs?: any;
style?: any;
className?: string;
}[];
optionsPlaceholder?: ReactNode;
switchOptions?: {
textOn?: ReactNode;
textOff?: ReactNode;
textButton?: ReactNode;
colorOn?: string;
bgOn?: string;
colorOff?: string;
bgOff?: string;
size?: number;
groove?: boolean;
width?: number;
attrs?: any;
};
caret?: boolean | ReactNode;
popover?: {
body?: ReactNode;
fitHorizontal?: boolean;
backdropAttrs?: any;
modalAttrs?: any;
headerAttrs?: any;
bodyAttrs?: any;
footerAttrs?: any;
footer?: any;
position?: 'center' | 'left' | 'right' | 'top' | 'bottom' | 'fullscreen';
limitTo?: string;
header?: {
html?: ((p: {
removeModal: () => void;
state: any;
setState: any;
}) => ReactNode);
title?: string;
subtitle?: string;
before?: ReactNode;
after?: ReactNode;
onClose?: boolean | ((p: {
state: any;
setState: (state: any) => void;
}) => void);
};
};
open?: boolean;
blurChange?: boolean;
filter?: string[];
inputAttrs?: any;
swip?: number;
spin?: boolean;
autoHighlight?: boolean;
delay?: number;
voice?: 'en' | 'fa';
multiple?: boolean;
maxLength?: number;
onSwap?: true | ((newOptions: any[], fromIndex: number, toIndex: number) => void);
optionsWrap?: boolean;
option?: AI_optionProp;
options?: any[];
search?: string;
debugKey?: string;
};
export type AI_props<T extends keyof I_AIOInput> = NonNullable<I_AIOInput[T]>;
export type AI_optionProp = {
[key in keyof AI_optionDetail]?: (optionOrg: any, optionDetail: AI_optionDetail) => any;
};
export type AI_optionDetails = {
list: AI_optionDetail[];
dic: {
[key: string]: AI_optionDetail;
};
};
export type AI_type = 'text' | 'number' | 'textarea' | 'password' | 'select' | 'tree' | 'spinner' | 'slider' | 'tags' | 'toggleButton' | 'button' | 'date' | 'color' | 'radio' | 'tabs' | 'list' | 'image' | 'file' | 'checkbox' | 'time' | 'buttons' | 'range' | 'panels' | 'mask' | 'multiSelect' | 'multiDate' | 'multiTime' | 'multiButtons' | 'multiCheckbox' | 'multiImage' | 'multiSlider' | 'multiSpinner' | 'multiPanels' | 'multiFile';
export type AI_date_trans = 'Today' | 'Clear' | 'Today' | 'This Month' | 'Select Year';
type AI_types = {
isDate: boolean;
isMultiple: boolean;
isInput: boolean;
isDropdown: boolean;
hasOption: boolean;
ai_height: boolean;
hasTags: boolean;
isRootOptions: boolean;
hasPlaceholder: boolean;
hasKeyboard: boolean;
hasText: boolean;
hasSearch: boolean;
hasWrap: boolean;
hasInlineDeSelect: boolean;
};
export type AI_Popover_props = {
getRootProps: () => I_AIOInput;
id: string;
toggle: (popover: any) => void;
types: AI_types;
};
type AI_isDate = Omit<I_Calendar, 'type' | 'onChange' | 'value'>;
type AI_isRange = Omit<I_Range, 'type' | 'onChange'>;
type AI_isTree = Omit<AI_Tree, 'onChange' | 'type' | 'value'>;
export type AI<AI_type, T> = Omit<I_AIOInput, 'onChange' | 'type'> & {
onChange?: AI_onChange<AI_type, T>;
};
type AI_onChange<AI_type, T> = AI_type extends 'toggleButton' ? (v: any) => void : AI_type extends 'text' ? (v: string, option?: any) => void : AI_type extends 'number' ? (v: number | undefined) => void : AI_type extends 'textarea' ? (v: string) => void : AI_type extends 'mask' ? (text: string, values: string[]) => void : AI_type extends 'password' ? (v: string) => void : AI_type extends 'color' ? (v: string) => void : AI_type extends 'select' ? (v: T, optionDetail: AI_optionDetail) => void : AI_type extends 'multiSelect' ? (v: T[], optionDetail: AI_optionDetail) => void : AI_type extends 'radio' ? (v: T, optionDetail: AI_optionDetail) => void : AI_type extends 'multiCheckbox' ? (v: T[], optionDetail: AI_optionDetail) => void : AI_type extends 'tabs' ? (v: T, optionDetail: AI_optionDetail) => void : AI_type extends 'buttons' ? (v: T, optionDetail: AI_optionDetail) => void : AI_type extends 'multiButtons' ? (v: T[], optionDetail: AI_optionDetail) => void : AI_type extends 'tags' ? (v: T[]) => void : AI_type extends 'tree' ? (v: T[]) => void : AI_type extends 'image' ? (url: any, file: any) => void : AI_type extends 'multiImage' ? (urls: string[], files: any[]) => void : AI_type extends 'file' ? (newFile: File | undefined) => void : AI_type extends 'multiFile' ? (newFiles: (File | {
url: string;
size: number;
name: string;
})[]) => void : AI_type extends 'checkbox' ? (v: boolean) => void : AI_type extends 'date' ? (newDate: T, dateDetail: AI_dateDetail) => void : AI_type extends 'multiDate' ? (newDates: T[], dateDetails: AI_dateDetail[]) => void : AI_type extends 'time' ? (time: T, dateDetail: AI_dateDetail) => void : AI_type extends 'multiTime' ? (times: T[], dateDetails: AI_dateDetail[]) => void : AI_type extends 'slider' ? (newValue: number) => void : AI_type extends 'multiSlider' ? (newValues: number[]) => void : AI_type extends 'spinner' ? (newValue: number) => void : AI_type extends 'multiSpinner' ? (newValues: number[]) => void : AI_type extends 'panels' ? (newValue: T) => void : AI_type extends 'multiPanels' ? (newValues: T[]) => void : AI_type extends 'list' ? (v: T, optionDetail: AI_optionDetail) => void : never;
export declare const AIMask: FC<AI<'mask', any>>;
export declare const AIText: FC<AI<'text', any>>;
export declare const AINumber: FC<AI<'number', any>>;
export declare const AITextarea: FC<AI<'textarea', any>>;
export declare const AIPassword: FC<AI<'password', any>>;
export declare const AIColor: FC<AI<'color', any>>;
export declare const AIToggleButton: FC<AI<'toggleButton', any>>;
export declare const AISelect: FC<AI<'select', any>>;
export declare const AIMultiSelect: FC<AI<'multiSelect', any>>;
export declare const AIRadio: FC<AI<'radio', any>>;
export declare const AIMultiCheckbox: FC<AI<'multiCheckbox', any>>;
export declare const AITabs: FC<AI<'tabs', any>>;
export declare const AIButtons: FC<AI<'buttons', any>>;
export declare const AIMultiButtons: FC<AI<'multiButtons', any>>;
export declare const AITags: FC<AI<'tags', any>>;
export declare const AITree: FC<AI<'tree', any>>;
export declare const AIImage: FC<AI<'image', any>>;
export declare const AIMultiImage: FC<AI<'multiImage', any>>;
export declare const AIFile: FC<AI<'file', any>>;
export declare const AIMultiFile: FC<AI<'multiFile', any>>;
export declare const AICheckbox: FC<AI<'checkbox', boolean>>;
export declare const AIDate: FC<AI<'date', any>>;
export declare const AIMultiDate: FC<AI<'multiDate', any>>;
export declare const AITime: FC<AI<'time', any>>;
export declare const AIMultiTime: FC<AI<'multiTime', any>>;
export declare const AIPanels: FC<AI<'panels', any>>;
export declare const AIMultiPanels: FC<AI<'multiPanels', any>>;
export declare const AIList: FC<AI<'list', any>>;
export declare const AISlider: FC<AI<'slider', number>>;
export declare const AIMultiSlider: FC<AI<'multiSlider', number>>;
export declare const AISpinner: FC<AI<'spinner', number>>;
export declare const AIMultiSpinner: FC<AI<'multiSpinner', number>>;
export declare const CheckIcon: FC<{
checkIcon?: ReactNode[];
checked?: boolean;
round?: boolean;
}>;
export type I_formInput<T> = I_AIOInput & {
tag?: string | true;
required?: boolean;
label?: ReactNode;
field: I_formField<T>;
validation?: string;
};
export type I_useFormProps<T> = {
data: T;
inlineLabel?: boolean;
onSubmit?: (data: T) => void;
onChange: (data: T, p?: {
field: I_formField<T>;
value: any;
disabled: boolean;
}) => void;
fa?: boolean;
labelAttrs?: any;
getLayout?: (context: I_formContext<T>) => I_formNode<T>;
debug?: boolean;
showErrors?: boolean;
option?: {
[key in keyof I_formInput<T>]?: (p: {
field: I_formField<T>;
data: T;
}) => any;
};
validations?: {
[name: string]: (p: {
data: T;
field: I_formField<T>;
}) => string | undefined;
};
};
export type I_formField<T> = NestedKeys<T> | 'none';
type NestedKeys<T> = {
[K in keyof T]: T[K] extends object ? `${K & string}` | `${K & string}.${NestedKeys<T[K]>}` : `${K & string}`;
}[keyof T];
type I_formTag = 'fieldset' | 'section' | 'div' | 'p' | 'form';
export type I_formNode<T> = {
v?: I_formNode<T>[];
h?: I_formNode<T>[];
html?: ReactNode;
input?: I_formInput<T>;
attrs?: any;
className?: string;
style?: any;
show?: boolean;
flex?: number;
size?: number;
scroll?: boolean;
tag?: I_formTag;
legend?: ReactNode;
id?: string;
isStatic?: boolean;
align?: 'v' | 'h' | 'vh' | 'hv';
hide_xs?: boolean;
hide_sm?: boolean;
hide_md?: boolean;
hide_lg?: boolean;
show_xs?: boolean;
show_sm?: boolean;
show_md?: boolean;
show_lg?: boolean;
};
export type I_formContext<T> = {
changeByInput: (field: I_formInput<T>, value: any, error?: string) => void;
disabled: boolean;
rootProps: I_useFormProps<T>;
getValueByInput: (input: I_formInput<T>) => any;
nodeHook: I_nodeHook;
errorHook: ReturnType<typeof useError<T>>;
data: T;
changeData: (v: T) => void;
getInput: (input: I_formInput<T>) => I_formInput<T>;
};
export declare const useForm: <T extends Record<string, any>>(p: I_useFormProps<T>) => {
renderLayout: import("react/jsx-runtime").JSX.Element;
errorsList: string[];
errorsDic: { [key in I_formField<T>]?: string; };
renderTags: (disabled?: boolean) => import("react/jsx-runtime").JSX.Element;
getChanges: () => any[];
isDisabled: () => boolean;
disabled: boolean;
};
declare const useError: <T>(p: {
getData: () => T;
rootProps: I_useFormProps<T>;
}) => {
setErrorByField: (field: any, error: string | undefined) => void;
getErrorByInput: (input: I_formInput<T>, value: any) => string | undefined;
getErrorsList: () => string[];
resetErrors: () => {};
errorsDic: { [key in I_formField<T>]?: string; };
errorsList: string[];
};
type I_nodeHook = {
getAttrs: (p: {
node: I_formNode<any>;
isRoot: boolean;
parentNode?: I_formNode<any>;
}) => any;
};
export declare const AIFormInput: FC<{
label?: ReactNode;
inlineLabel?: boolean;
labelAttrs?: any;
input: ReactNode;
attrs?: any;
className?: string;
style?: any;
error?: string;
validation?: string;
id?: string;
before?: ReactNode;
after?: ReactNode;
subtext?: string;
required?: boolean;
value?: any;
fa?: boolean;
}>;
export declare const Panels: FC;
type I_JoyStick_data = {
length: number;
angle: number;
x: number;
y: number;
};
export declare const JoyStick: FC<{
x?: number;
y?: number;
angle?: number;
length?: number;
scale?: number;
size: number;
onChange: (v: I_JoyStick_data) => void;
centerOriented?: boolean;
}>;
type I_ScannerButton = {
fa?: boolean;
reset?: boolean;
close?: boolean;
fps?: number;
onScan: (v: any) => Promise<boolean>;
value?: any;
attrs?: any;
text?: ReactNode;
};
export declare const ScannerButton: FC<I_ScannerButton>;
type I_treeRowDetails = {
level: number;
index: number;
isLastChild: boolean;
isFirstChild: boolean;
parentDetails?: I_treeRowDetails;
value: any;
row: any;
option: AI_optionDetail;
};
export type AI_Tree = {
size?: number;
value: any[];
actions?: ({
[key in keyof AI_optionDetail]?: any;
}[]) | ((row: any, parent: any) => {
[key in keyof AI_optionDetail]?: any;
}[]);
addText?: ReactNode | ((value: any) => ReactNode);
indent?: number;
onAdd?: {
[key: string]: any;
} | ((parentDetails?: I_treeRowDetails) => Promise<boolean | void | undefined>);
onRemove?: true | ((p: {
row: any;
action?: Function;
rowIndex?: number;
parent?: any;
}) => Promise<boolean | void>);
onToggle?: (openDic: {
[id: string]: boolean;
}) => void;
removeText?: string;
setChilds?: (rowDetails: I_treeRowDetails, childs: undefined | any[]) => void;
onChange?: (v: any) => void;
option?: AI_optionProp;
attrs?: any;
className?: string;
rtl?: boolean;
style?: any;
};
export type AI_RangeContext = {
isValueDisabled: (value: number) => boolean;
rootProps: I_Range_default;
mainDom: any;
cls: any;
rangeHook: ReturnType<typeof useRange>;
};
type AI_sbp = (size: number, half?: boolean) => number;
type AI_rbs = (range: I_rangeConfig) => {
thickness: number;
color: string;
roundCap: boolean;
offset: number;
className?: string;
from: number;
to: number;
};
export type I_rangeConfig = {
thickness: number;
offset: number;
color: string;
roundCap?: boolean;
full?: boolean;
className?: string;
from?: number;
to?: number;
};
export type AI_labels = AI_label[];
export type AI_label = {
list?: number[];
start?: number;
end?: number;
step?: number;
dynamic?: boolean;
autoHide?: boolean;
zIndex?: number;
setting: (value: number, p: {
angle: number;
disabled: boolean;
}) => AI_labelItem;
};
export type AI_labelItem = {
offset?: number;
fixAngle?: boolean;
html?: ReactNode;
};
export type I_Range = {
value?: any;
start?: number;
end?: number;
max?: number;
min?: number;
step?: number;
onChange?: (v: any) => void;
multiple?: boolean;
text?: ReactNode;
style?: any;
attrs?: any;
className?: string;
disabled?: boolean;
reverse?: boolean;
size?: number;
vertical?: boolean;
rotate?: number;
round?: number;
fill?: false | {
thickness?: number;
color?: string;
className?: string;
style?: any;
} | ((index: number) => {
thickness?: number;
color?: string;
className?: string;
style?: any;
});
rangesDisabled?: number[];
grooveAttrs?: {
[key: string]: any;
};
labels?: AI_labels;
point?: false | ((p: {
disabled: boolean;
angle: number;
value: number;
index: number;
}) => {
offset?: number;
html?: ReactNode;
attrs?: any;
});
ranges?: {
thickness: number;
offset: number;
color: string;
roundCap?: boolean;
full?: boolean;
className?: string;
from?: number;
to?: number;
}[];
handle?: (value: number, p: any) => {
widthPercent?: number;
heightPercent?: number;
color?: string;
offset?: number;
sharp?: boolean;
from?: number;
to?: number;
};
};
type I_Range_default = I_Range & {
start: number;
end: number;
step: number;
min: number;
max: number;
size: number;
labels: AI_label[];
rotate: number;
};
type I_RangeValue = {
value: number;
disabled: boolean;
angle: number;
index: number;
};
export type I_RangeLabelItem = {
label: AI_label;
itemValue: number;
};
declare const useRange: (props: I_Range, getMainDom: () => any, cls: any) => {
values: number[];
getValues: (value: any) => number[];
handleZIndex: (index: number) => void;
getPoint: (p: I_RangeValue) => import("react/jsx-runtime").JSX.Element;
getSide: () => "left" | "right" | "bottom" | "top";
getOffset: () => "left" | "top";
fixAngle: (angle: number) => number;
getValueByAngle: (angle: number) => number;
getArc: (rc: I_rangeConfig) => {
thickness: number;
color: string;
roundCap: boolean;
full: boolean;
radius: number;
className?: string;
from: number;
to: number;
};
getAngleByValue: (value: number, ang?: number) => number;
getRectByStr: AI_rbs;
sbp: AI_sbp;
getXPByValue: (value: number) => number;
getValueByXP: (xp: number) => number;
getXPByX: (x: number) => number;
getRects: () => import("react/jsx-runtime").JSX.Element;
getSvg: () => import("react/jsx-runtime").JSX.Element;
getGroove: () => import("react/jsx-runtime").JSX.Element;
};
export type AI_Image = {
placeholder?: ReactNode;
deSelect?: boolean;
disabled?: boolean;
rtl?: boolean;
value?: any;
multiple?: boolean;
preview?: boolean;
inputAttrs?: any;
imageAttrs?: any;
attrs?: any;
style?: any;
className?: string;
onChange?: (urls: any, files: any) => void;
};
type AI_dateDetail = {
dateObject: I_dateObject;
dateString: string;
dateString2Digit: string;
dateArray: number[];
dateNumber: number;
isoDate: string;
dateStrings: string[];
monthString: string;
weekDay: string;
weekDayIndex: number;
months: string[];
weekDays: string[];
value: any;
};
export type I_Calendar = {
onChange?: (value: any, dateDetails: any) => void;
onSubmit?: (value: any, dateDetails: any) => void;
multiple?: boolean;
value: any;
type: 'date' | 'time';
jalali?: boolean;
maxLength?: number;
calendarClose?: boolean;
onClose?: () => void;
calendarMode?: boolean;
dateUnit?: 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'milisecond';
disabled?: boolean;
size?: number;
theme?: string[];
translate?: (test: string) => string;
text?: ReactNode;
pattern?: string;
dateType?: 'dateNumber' | 'dateString' | 'dateArray' | 'isoDate' | 'dateString2Digit' | 'dateObject';
dateAttrs?: (p: {
dateArray: number[];
isToday: boolean;
isActive: boolean;
isFuture: boolean;
weekDay: number;
}) => any;
deSelect?: boolean;
now?: boolean;
timeUnit?: I_timeUnit;
timeStep?: I_timeStep;
};
export type I_timeUnit = {
[key in ('year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'milisecond')]?: boolean;
};
type I_timeStep = {
year?: number;
month?: number;
day?: number;
hour?: number;
minute?: number;
second?: number;
milisecond?: number;
};
export type I_MonthCalendar = {
date: number[];
onClick?: (date: number[]) => void;
dateAttrs?: (date: number[]) => any;
};
export declare const MonthCalendar: FC<I_MonthCalendar>;
export type I_list_temp = {
dom: any;
activeIndex: number;
interval: any;
moved: boolean;
lastY: number;
deltaY: number;
so: {
y: number;
top: number;
newTop?: number;
limit: {
top: number;
bottom: number;
};
};
};
export type AI_optionDetail = {
value: any;
optionOrg: any;
rootProps: I_AIOInput;
index: number;
isFirstChild: boolean;
isLastChild: boolean;
show: any;
checked?: boolean;
checkIcon: ReactNode[];
text: ReactNode;
subtext: ReactNode;
after: ReactNode;
before: ReactNode;
justify: boolean;
disabled: boolean;
attrs: any;
className: string;
style: any;
toggleIcon: false | ReactNode[];
isOpen: () => boolean;
toggle: () => void;
change: (newRow: any) => void;
level: number;
tagAttrs: any;
tagBefore: any;
tagAfter: any;
tagText: any;
tagSubtext: any;
onClick?: (optionOrg: any, optionDetail: AI_optionDetail) => void;
close?: boolean;
active: boolean;
childs?: any[];
getOptionDetails?: () => AI_optionDetail[];
body: ReactNode;
parentOptions: AI_optionDetail[];
};
export declare const useOptions: () => {
getOptions: (p: {
rootProps: I_AIOInput;
optionOrgs: any[];
level?: number;
optionProp: AI_optionProp;
isOpen?: (value: any) => boolean;
change?: (row: any, newRow: any) => void;
toggle?: (p: {
row: any;
index: number;
level: number;
value: any;
state?: boolean;
}) => void;
parentOptions?: AI_optionDetail[];
getOptionDetails?: () => AI_optionDetail[];
}) => AI_optionDetails;
getOptionProp: (p: {
key: keyof AI_optionDetail;
def?: any;
preventFunction?: boolean;
optionDetail: AI_optionDetail;
optionProp: AI_optionProp;
optionOrg: any;
type?: any;
}) => any;
getDefaultoptionDetail: (p: {
rootProps: I_AIOInput;
optionOrg: any;
index: number;
def?: {
value?: any;
optionOrg?: any;
rootProps?: any;
index?: any;
isFirstChild?: any;
isLastChild?: any;
show?: any;
checked?: any;
checkIcon?: any;
text?: any;
subtext?: any;
after?: any;
before?: any;
justify?: any;
disabled?: any;
attrs?: any;
className?: any;
style?: any;
toggleIcon?: any;
isOpen?: any;
toggle?: any;
change?: any;
level?: any;
tagAttrs?: any;
tagBefore?: any;
tagAfter?: any;
tagText?: any;
tagSubtext?: any;
onClick?: any;
close?: any;
active?: any;
childs?: any;
getOptionDetails?: any;
body?: any;
parentOptions?: any;
};
}) => AI_optionDetail;
};
export declare const Signature: React.FC<{
attrs?: React.HTMLAttributes<HTMLCanvasElement>;
size?: number;
onSave?: (file: any) => void;
}>;
export declare const Pattern: FC<{
size?: number;
count?: number;
onSubmit: (v: string) => void;
pointColor?: string;
lineColor?: string;
backgroundColor?: string;
}>;