@sertec/dialog
Version:
Sfera Dialog Component
111 lines (110 loc) • 5.31 kB
TypeScript
import { ButtonHTMLAttributes, Dispatch, HTMLAttributes, ReactNode, SetStateAction, MouseEvent, RefObject, Ref } from 'react';
import type { UseFloatingReturn, UseInteractionsReturn } from '@floating-ui/react';
import { Border, DialogMode, DialogWidth, FontWeight, IconElement, Justify, JustifyContent, Rounded, Size, StringBoolean, Variant } from '@sertec/types';
export interface UseDialog extends UseFloatingReturn, UseInteractionsReturn {
open: boolean;
setOpen: (open: boolean) => void;
loading: boolean;
setLoading: (loading: boolean) => void;
labelId: string | undefined;
descriptionId: string | undefined;
formId: string | undefined;
setLabelId: Dispatch<SetStateAction<string | undefined>>;
setDescriptionId: Dispatch<SetStateAction<string | undefined>>;
setFormId: Dispatch<SetStateAction<string | undefined>>;
mode?: DialogMode;
with?: DialogWidth;
}
export interface DialogCloseProps extends ButtonHTMLAttributes<HTMLButtonElement> {
ref?: RefObject<HTMLButtonElement> | Ref<HTMLButtonElement>;
}
interface FontProperties {
'data-justify'?: Justify;
'data-font-size'?: Size;
'data-font-weight'?: FontWeight;
}
export interface DialogIconProps extends HTMLAttributes<HTMLSpanElement>, FontProperties {
ref?: RefObject<HTMLSpanElement> | Ref<HTMLSpanElement>;
'data-justify-content'?: JustifyContent;
}
export type FooterButtonType = 'submit' | 'button' | 'reset';
export interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {
ref?: RefObject<HTMLDivElement> | Ref<HTMLDivElement>;
labelCancel?: string;
labelAccept?: string;
onAcceptAsync?: (e?: MouseEvent<HTMLButtonElement>) => Promise<boolean>;
onAccept?: (e?: MouseEvent<HTMLButtonElement>) => boolean;
onCancelAsync?: (e?: MouseEvent<HTMLButtonElement>) => Promise<boolean>;
onCancel?: (e?: MouseEvent<HTMLButtonElement>) => boolean;
'data-footer'?: StringBoolean;
'data-foooter-justify-content'?: JustifyContent;
'data-default-button-autofocus'?: 'cancel' | 'accept' | 'none';
typeaccept?: FooterButtonType;
typecancel?: FooterButtonType;
'data-default-button-accept-variant'?: Variant;
'data-default-button-cancel-variant'?: Variant;
'data-default-button-accept-ref'?: RefObject<HTMLButtonElement> | Ref<HTMLButtonElement>;
'data-default-button-accept-shortcut'?: string;
'data-default-button-accept-icon'?: IconElement;
'data-default-button-accept-outline'?: StringBoolean;
'data-default-button-cancel-ref'?: RefObject<HTMLButtonElement> | Ref<HTMLButtonElement>;
'data-default-button-cancel-shortcut'?: string;
'data-default-button-cancel-icon'?: IconElement;
'data-default-button-cancel-outline'?: StringBoolean;
'data-default-button-accept-disabled'?: StringBoolean;
'data-default-button-cancel-disabled'?: StringBoolean;
'data-default-button-accept-hidden'?: StringBoolean;
'data-default-button-cancel-hidden'?: StringBoolean;
'data-default-button-justify'?: Justify;
'data-default-button-rounded'?: Rounded;
'data-default-button-border'?: Border;
'data-default-button-font-weight'?: FontWeight;
'data-default-button-padding-x-disabled'?: StringBoolean;
'data-default-button-padding-y-disabled'?: StringBoolean;
'data-default-button-hover-disabled'?: StringBoolean;
'data-default-button-hover-bg-disabled'?: StringBoolean;
'data-default-button-focus-disabled'?: StringBoolean;
'data-default-button-active-disabled'?: StringBoolean;
'data-default-button-disabledcss-disabled'?: StringBoolean;
'data-default-button-accept-classname'?: string;
'data-default-button-cancel-classname'?: string;
}
export interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {
ref?: RefObject<HTMLDivElement> | Ref<HTMLDivElement>;
'data-padding'?: StringBoolean;
'data-footer-disabled-autofocus'?: StringBoolean;
'data-a-content-classname'?: string;
'data-b-content-classname'?: string;
'data-rounded'?: Rounded;
}
export interface DialogDescriptionProps extends Omit<HTMLAttributes<HTMLParagraphElement>, 'id'>, FontProperties {
ref?: RefObject<HTMLParagraphElement> | Ref<HTMLParagraphElement>;
}
export interface DialogHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'id'>, FontProperties {
ref?: RefObject<HTMLDivElement> | Ref<HTMLDivElement>;
}
export interface DialogFormProps extends HTMLAttributes<HTMLFormElement> {
ref?: RefObject<HTMLFormElement | HTMLDivElement> | Ref<HTMLFormElement | HTMLDivElement>;
}
export interface DialogBodyProps extends HTMLAttributes<HTMLDivElement> {
ref?: RefObject<HTMLDivElement> | Ref<HTMLDivElement>;
}
export interface DialogTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
ref?: RefObject<HTMLButtonElement> | Ref<HTMLButtonElement>;
children: ReactNode;
asChild?: boolean;
}
export interface DialogProps {
initialOpen?: boolean;
open?: boolean;
onOpenChange?: Dispatch<SetStateAction<boolean>>;
loading?: boolean;
onLoadingChange?: Dispatch<SetStateAction<boolean>>;
children?: ReactNode;
mode?: DialogMode;
escapeKey?: boolean;
width?: DialogWidth;
}
export interface DialogNoteProps extends HTMLAttributes<HTMLDivElement> {
}
export {};