diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..5f6a8d9 --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,527 @@ +declare module 'react-weui' { + import React from "react"; + + type PropsWithLabel = React.HTMLProps & { + label: React.ReactNode; + } + + type StyleType = 'ios' | 'android'; + + type ComponentAllowedType = keyof React.ReactHTML; + + interface IActionSheetProps extends React.HTMLProps { + menus?: PropsWithLabel[]; + actions?: PropsWithLabel[]; + show?: boolean; + onRequestClose?: (event: React.MouseEvent) => void; + type?: StyleType; + } + + interface IArticleProps extends React.HTMLProps { } + + interface IBadgeProps extends React.HTMLProps { + dot?: boolean; + preset?: 'default' | 'header' | 'body' | 'footer'; + } + + interface IButtonAreaProps extends React.HTMLProps { + direction?: 'veritical' | 'horizontal'; + } + + interface IButtonProps extends React.HTMLProps { + disabled?: boolean; + type?: 'primary' | 'default' | 'warn' | 'vcode'; + size?: 'normal' | 'small'; + } + + interface CellsProps { + access?: boolean; + } + + interface IDialogProps extends React.HTMLProps { + buttons?: PropsWithLabel[]; + show?: boolean; + title?: string; + type?: StyleType; + autoDectect?: boolean; + } + + interface IFormCellProps extends React.HTMLProps { + vcode?: boolean; + warn?: boolean; + radio?: boolean; + checkbox?: boolean; + switch?: boolean; + select?: boolean; + selectPos?: string; + } + + interface IFormProps extends React.HTMLProps { + radio?: boolean; + checkbox?: boolean; + } + + type OptionItemType = React.HTMLProps & { + label: React.ReactNode; + value: string; + } + + interface ISelectProps extends React.HTMLProps { + data?: OptionItemType[]; + } + + interface ISliderProps extends React.HTMLProps { + max?: number; + min?: number; + step?: number; + showValue?: boolean; + disabled?: boolean; + value?: number; + defaultValue?: number; + onChange?: (value: number) => void; + snapToValue?: boolean; + } + + interface ITextAreaProps extends React.HTMLProps { + showCounter?: boolean; + maxLength?: number; + defaultValue?: string; + onChange?: (event: React.ChangeEvent) => void; + } + + type UploaderFileType = { + url: string; + error?: boolean; + status?: React.ReactNode; + onClik?: (event: React.MouseEvent) => void; + } + + interface IUploaderProps extends React.HTMLProps { + title?: string; + maxCount?: number; + maxWidth?: number; + onChange?: (file: File, event: ProgressEvent) => void; + onError?: (message: React.ReactNode) => void; + files?: UploaderFileType[]; + lang?: { + maxError: (maxCount: string | number) => React.ReactNode + }; + onFileClick?: (event: React.MouseEvent, file: File, index: number) => void; + } + + interface IGalleryProps extends React.HTMLProps { + show?: boolean; + src?: string | string[]; + defaultIndex?: number; + } + + interface IGridIconProps extends React.HTMLProps { } + + interface IGridLabelProps extends React.HTMLProps { } + + interface IGridProps extends React.HTMLProps { + icon?: React.ReactNode; + label?: React.ReactNode; + component?: ComponentAllowedType; + } + + interface IGridsProps extends React.HTMLProps { + data?: IGridProps[]; + } + + type WeuiIconType = + | 'circle' + | 'success' + | 'success-circle' + | 'success-no-circle' + | 'success-no-circle-thin' + | 'warn' + | 'info-circle' + | 'waiting-circle' + | 'download' + | 'search' + | 'cancel' + | 'clear' + | 'arrow-bold' + | 'arrow' + | 'close' + | 'close-thin' + | 'back-arrow' + | 'back-arrow-thin' + | 'back' + | 'back-circle' + | 'loading' + + interface IIconProps extends React.HTMLProps { + value?: WeuiIconType; + size?: 'small' | 'large'; + primary?: boolean; + } + + interface IInfiniteLoaderProps extends React.HTMLProps { + height?: string; + loaderDefaultIcon?: React.ReactNode; + loaderLoadingIcon?: React.ReactNode; + triggerPercent?: number; + onScroll?: (event: React.UIEvent) => any; + onScrollEnd?: () => void; + onLoadMore?: (resolved: () => void, finished: () => void) => void; + disable?: boolean; + resetStatus?: boolean; + } + + interface IMaskProps extends React.HTMLProps { + transparent?: boolean; + } + + interface IPanelBodyProps extends React.HTMLProps { } + + interface IMediaBoxDescriptionProps extends React.HTMLProps { } + + interface IMediaBoxHeaderProps extends React.HTMLProps { } + + interface IMediaBoxInfoMetaProps extends React.HTMLProps { + extra?: boolean; + } + + interface IMediaBoxInfoProps extends React.HTMLProps { + data?: IMediaBoxInfoMetaProps & { + label: React.ReactNode; + }; + } + + interface IMediaBoxTitleProps extends React.HTMLProps { + } + + interface IMediaBoxProps extends React.HTMLProps { + type?: 'appmsg' | 'text' | 'small_appmsg'; + } + + interface IMsgProps extends React.HTMLProps { + type?: WeuiIconType; + buttons?: PropsWithLabel[]; + title?: string; + description?: string; + extraHref?: string; + extraText?: string; + footer?: () => React.ReactNode; + } + + interface IPageProps extends React.HTMLProps { + ptr?: boolean; + ptrOnRefresh?: (onfulfilled: () => void, onfailed: () => void) => void; + infiniteLoader?: boolean; + onLoadMore?: (resolved: () => void, finished: () => void) => void; + transition?: boolean; + } + + interface IPanelBodyProps extends React.HTMLProps { } + + interface IPanelFooterProps extends React.HTMLProps { } + + interface IPanelHeaderProps extends React.HTMLProps { } + + interface IPanelProps extends React.HTMLProps { + access?: boolean; + } + + interface ICityPickerProps extends React.HTMLProps { + data: object[]; + dataMap?: Record; + selected?: number[] | number; + show?: boolean; + lang?: { leftBtn: React.ReactNode, rightBtn: React.ReactNode }; + onCancel?: (text: string) => void; + onChange?: any; + } + + type PickerItemType = { + [key: string]: React.ReactNode; + disabled?: boolean; + } + + interface IPickerGroupProps extends React.HTMLProps { + height?: number; + itemHeight?: number; + indicatorTop?: number; + indicatorHeight?: number; + onChange?: (item: PickerItemType, selected: number, groupIndex: number) => void; + aniamtion?: boolean; + groupIndex?: number; + defaultIndex?: number; + items?: PickerItemType[]; + mapKeys?: { + label: string; + }; + } + + interface IPickerProps extends React.HTMLProps { + actions?: PropsWithLabel>[]; + groups?: Omit[]; + defaultSelect?: number[]; + onGroupChange?: (item: PickerItemType, index: number, groupIndex: number, selected: number[]) => void; + onChange?: (selected: number[]) => void; + onCancel?: (event: React.MouseEvent) => void; + show?: boolean; + lang?: { leftBtn: React.ReactNode, rightBtn: React.ReactNode }; + } + + interface IPopupProps extends React.HTMLProps { + show?: boolean; + enableMask?: boolean; + } + + interface IPullToRefreshProps extends React.HTMLProps { + height?: string; + loaderHeight?: number; + loaderDefaultIcon?: (progress: number) => React.ReactNode; + loaderLoadingIcon?: React.ReactNode; + onRefresh?: (onfulfilled: () => void, onfailed: () => void) => void; + disable?: boolean; + } + + interface ISearchBarProps extends React.HTMLProps { + defaultValue?: string; + placeholder?: string; + searchName?: string; + onChange?: (text: string, event: React.ChangeEvent) => void; + onClear?: (event: React.MouseEvent) => void; + onCancel?: (event: React.MouseEvent) => void; + onSubmit?: (text: string, event: React.FormEvent) => void; + lang?: { + cancel: string; + }; + autocomplete?: string; + } + + interface ISwiperProps extends React.HTMLProps { + height?: number; + width?: number; + threshold?: number; + speed?: number; + defaultIndex?: number; + direction?: "vertical" | "horizontal"; + indicators?: boolean; + onChange?: (prevIndex: number, nextIndex: number) => void; + } + + interface INavBarItemProps extends React.HTMLProps { + active?: boolean; + label?: string; + } + + interface INavBarProps extends React.HTMLProps { } + + interface ITabBodyItemProps extends React.HTMLProps { + active?: boolean; + } + + interface ITabBodyProps extends React.HTMLProps { + active?: boolean; + } + + interface ITabProps extends React.HTMLProps { + type?: string; + defaultIndex?: number; + onChange?: (index: number) => void; + } + + interface ITabBarIconProps extends React.HTMLProps { } + + interface ITabBarItemProps extends React.HTMLProps { + active?: boolean; + icon?: React.ReactNode; + label?: string; + } + + interface ITabBarLabelProps extends React.HTMLProps { } + + interface ITabBarProps extends React.HTMLProps { } + + interface IToastProps extends React.HTMLProps { + icon?: WeuiIconType; + iconSize?: string; + show?: boolean; + } + + export class ActionSheet extends React.Component { } + export class Article extends React.Component { } + export class Badge extends React.Component { } + export class ButtonArea extends React.Component { } + export class Button extends React.Component { } + export class Dialog extends React.Component { } + export class FormCell extends React.Component { } + export class Form extends React.Component { } + export class Select extends React.Component { } + export class Slider extends React.Component { } + export class TextArea extends React.Component { } + export class Uploader extends React.Component { } + export class Gallery extends React.Component { } + export class GridIcon extends React.Component { } + export class GridLabel extends React.Component { } + export class Grid extends React.Component { } + export class Grids extends React.Component { } + export class Icon extends React.Component { } + export class InfiniteLoader extends React.Component { } + export class Mask extends React.Component { } + export class PanelBody extends React.Component { } + export class MediaBoxDescription extends React.Component { } + export class MediaBoxHeader extends React.Component { } + export class MediaBoxInfoMeta extends React.Component { } + export class MediaBoxInfo extends React.Component { } + export class MediaBoxTitle extends React.Component { } + export class MediaBox extends React.Component { } + export class Msg extends React.Component { } + export class Page extends React.Component { } + export class PanelBody extends React.Component { } + export class PanelFooter extends React.Component { } + export class PanelHeader extends React.Component { } + export class Panel extends React.Component { } + export class CityPicker extends React.Component { } + export class PickerGroup extends React.Component { } + export class Picker extends React.Component { } + export class Popup extends React.Component { } + export class PullToRefresh extends React.Component { } + export class SearchBar extends React.Component { } + export class Swiper extends React.Component { } + export class NavBarItem extends React.Component { } + export class NavBar extends React.Component { } + export class TabBodyItem extends React.Component { } + export class TabBody extends React.Component { } + export class Tab extends React.Component { } + export class TabBarIcon extends React.Component { } + export class TabBarItem extends React.Component { } + export class TabBarLabel extends React.Component { } + export class TabBar extends React.Component { } + export class Toast extends React.Component { } + + interface PreviewButtonProps extends React.HTMLProps { + primary?: boolean; + } + + interface CellBodyProps extends React.HTMLProps { + primary?: boolean; + } + + interface CellFooterProps extends React.HTMLProps { + primary?: boolean; + } + + interface CellHeaderProps extends React.HTMLProps { + primary?: boolean; + } + + interface CellProps extends React.HTMLProps { + access?: boolean; + link?: boolean; + component?: ComponentAllowedType; + } + + interface CellsTipsProps extends React.HTMLProps { } + + interface CellsTitleProps extends React.HTMLProps { } + + interface CellsProps extends React.HTMLProps { + access?: boolean; + } + + interface FlexItemProps extends React.HTMLProps { + Component?: ComponentAllowedType; + } + + interface FlexProps extends React.HTMLProps { } + + interface FooterLinkProps extends React.HTMLProps { } + + interface FooterLinksProps extends React.HTMLProps { } + + interface FooterTextProps extends React.HTMLProps { } + + interface FooterProps extends React.HTMLProps { } + + interface AgreementProps extends React.HTMLProps { } + + interface CheckboxProps extends React.HTMLProps { } + + interface InputProps extends React.HTMLProps { + defaultValue?: string; + } + + interface PreviewBodyProps extends React.HTMLProps { } + + interface PreviewFooterProps extends React.HTMLProps { } + + interface PreviewHeaderProps extends React.HTMLProps { } + + interface PreviewItemProps extends React.HTMLProps { + label?: string; + value?: string; + } + + interface PreviewProps extends React.HTMLProps { } + + interface RadioProps extends React.HTMLProps { name: string; } + + interface SwitchProps extends React.HTMLProps { } + + interface VCodeProps extends React.HTMLProps { } + + interface GalleryDeleteProps extends React.HTMLProps { } + + interface LabelProps extends React.HTMLProps { } + + interface LoadMoreProps extends React.HTMLProps { + loading?: boolean; + showLine?: boolean; + showDot?: boolean; + } + + interface PopupHeaderProps extends React.HTMLProps { + left?: string; + right?: string; + leftOnClick?: (event: React.MouseEvent) => void; + rightOnClick?: (event: React.MouseEvent) => void; + } + + interface ProgressProps extends React.HTMLProps { + value?: number; + showCancel?: boolean; + } + + interface ToptipsProps extends React.HTMLProps { + show?: boolean; + type?: 'default' | 'warn' | 'info' | 'primary'; + } + + export const PreviewButton: React.FC + export const CellBody: React.FC + export const CellFooter: React.FC + export const CellHeader: React.FC + export const Cell: React.FC + export const CellsTips: React.FC + export const CellsTitle: React.FC + export const Cells: React.FC + export const FlexItem: React.FC + export const Flex: React.FC + export const FooterLink: React.FC + export const FooterLinks: React.FC + export const FooterText: React.FC + export const Footer: React.FC + export const Agreement: React.FC + export const Checkbox: React.FC + export const Input: React.FC + export const PreviewBody: React.FC + export const PreviewFooter: React.FC + export const PreviewHeader: React.FC + export const PreviewItem: React.FC + export const Preview: React.FC + export const Radio: React.FC + export const Switch: React.FC + export const VCode: React.FC + export const GalleryDelete: React.FC + export const Label: React.FC + export const LoadMore: React.FC + export const PopupHeader: React.FC + export const Progress: React.FC + export const Toptips: React.FC +} \ No newline at end of file