/** * Copyright (c) Paymium. * * This source code is licensed under the MIT license found in the * LICENSE file in the root of this projects source tree. */ import type { ComponentType, KeyboardEventHandler, MutableRefObject, PropsWithChildren, } from 'react'; import type { PressableProps, TextProps, ViewProps } from 'react-native'; import type { VisibilityHiddenProps } from '../VisibilityHidden'; export type ModalProps = PropsWithChildren<{ open?: boolean; defaultOpen?: boolean; onOpenChange?: (_o: boolean) => void; }>; export type ModalOverlayProps = PressableProps & { closeOnPress?: boolean }; export type ModalContentProps = ViewProps; export type ModalBodyProps = ViewProps; export type ModalTitleProps = TextProps; export type ModalTriggerProps = PressableProps & { asChild?: boolean }; export type ModalPortalProps = PropsWithChildren; export type FocusProps = VisibilityHiddenProps & { open?: boolean }; export type ModalComponent = ComponentType; export type ModalOverlayComponent = ComponentType; export type ModalContentComponent = ComponentType; export type ModalBodyComponent = ComponentType; export type ModalTitleComponent = ComponentType; export type ModalTriggerComponent = ComponentType; export type ModalPortalComponent = ComponentType; export type ModalFocusComponent = ComponentType; export type ModalContext = Required> & { setOpen: (_value: boolean) => void; titleIdRef: MutableRefObject; descriptionIdRef: MutableRefObject; }; export type CreateModal = () => { Modal: ModalComponent; ModalOverlay: ModalOverlayComponent; ModalContent: ModalContentComponent; ModalTitle: ModalTitleComponent; ModalTrigger: ModalTriggerComponent; ModalPortal: ModalPortalComponent; ModalBody: ModalBodyComponent; }; export type ModalOnKeyDown = KeyboardEventHandler; export type UseEscape = (_e: () => void) => { onKeyDown: ModalOnKeyDown; };