UNPKG

@yamada-ui/modal

Version:

Yamada UI modal component

1 lines 8.34 kB
{"version":3,"sources":["../src/dialog.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport type { CSSUIObject, ThemeProps } from \"@yamada-ui/core\"\nimport type { ReactNode } from \"react\"\nimport type { ModalProps } from \"./modal\"\nimport { Button } from \"@yamada-ui/button\"\nimport { omitThemeProps, useComponentMultiStyle } from \"@yamada-ui/core\"\nimport { motionForwardRef } from \"@yamada-ui/motion\"\nimport {\n cx,\n findChild,\n getValidChildren,\n isEmpty,\n isUndefined,\n isValidElement,\n omitChildren,\n} from \"@yamada-ui/utils\"\nimport { DialogBody } from \"./dialog-body\"\nimport { DialogCloseButton } from \"./dialog-close-button\"\nimport { DialogFooter } from \"./dialog-footer\"\nimport { DialogHeader } from \"./dialog-header\"\nimport { DialogOverlay } from \"./dialog-overlay\"\nimport { Modal } from \"./modal\"\nimport { DialogProvider } from \"./modal-context\"\n\ninterface DialogOptions {\n /**\n * The dialog cancel to use.\n */\n cancel?: ButtonProps | ReactNode\n /**\n * The dialog footer to use.\n */\n footer?: ReactNode\n /**\n * The dialog header to use.\n */\n header?: ReactNode\n /**\n * The dialog other to use.\n */\n other?: ButtonProps | ReactNode\n /**\n * The dialog success to use.\n */\n success?: ButtonProps | ReactNode\n /**\n * The callback invoked when cancel button clicked.\n */\n onCancel?: (onClose: (() => void) | undefined) => void\n /**\n * The callback invoked when other button clicked.\n */\n onOther?: (onClose: (() => void) | undefined) => void\n /**\n * The callback invoked when success button clicked.\n */\n onSuccess?: (onClose: (() => void) | undefined) => void\n}\n\nexport interface DialogProps\n extends Omit<ModalProps, keyof ThemeProps>,\n ThemeProps<\"Dialog\">,\n DialogOptions {}\n\n/**\n * `Dialog` is a component used to confirm or interrupt user actions.\n *\n * @see Docs https://yamada-ui.com/components/overlay/dialog\n */\nexport const Dialog = motionForwardRef<DialogProps, \"section\">(\n ({ size, ...props }, ref) => {\n const [styles, mergedProps] = useComponentMultiStyle(\"Dialog\", {\n size,\n ...props,\n })\n const {\n className,\n cancel,\n children,\n footer,\n header,\n other,\n success,\n withCloseButton = true,\n withOverlay = true,\n containerProps,\n onCancel,\n onClose,\n onOther,\n onSuccess,\n ...rest\n } = omitThemeProps(mergedProps)\n\n const validChildren = getValidChildren(children)\n\n const customDialogOverlay = findChild(validChildren, DialogOverlay)\n const customDialogCloseButton = findChild(validChildren, DialogCloseButton)\n const customDialogHeader = findChild(validChildren, DialogHeader)\n const customDialogBody = findChild(validChildren, DialogBody)\n const customDialogFooter = findChild(validChildren, DialogFooter)\n\n const cloneChildren = !isEmpty(validChildren)\n ? omitChildren(\n validChildren,\n DialogOverlay,\n DialogCloseButton,\n DialogHeader,\n DialogBody,\n DialogFooter,\n )\n : children\n\n const css: CSSUIObject = { ...styles.container }\n\n const cancelButtonProps: ButtonProps =\n isValidElement(cancel) || isUndefined(cancel)\n ? { children: cancel }\n : cancel\n const otherButtonProps: ButtonProps =\n isValidElement(other) || isUndefined(other) ? { children: other } : other\n const successButtonProps: ButtonProps =\n isValidElement(success) || isUndefined(success)\n ? { children: success }\n : success\n\n if (!cancelButtonProps.variant) cancelButtonProps.variant = \"ghost\"\n if (!otherButtonProps.colorScheme)\n otherButtonProps.colorScheme = \"secondary\"\n if (!successButtonProps.colorScheme)\n successButtonProps.colorScheme = \"primary\"\n\n const hasCancelButton = !!cancelButtonProps.children\n const hasOtherButton = !!otherButtonProps.children\n const hasSuccessButton = !!successButtonProps.children\n const hasFooter = hasCancelButton || hasOtherButton || hasSuccessButton\n\n return (\n <DialogProvider value={styles}>\n <Modal\n ref={ref}\n className={cx(\"ui-dialog\", className)}\n __css={css}\n {...{\n withCloseButton: false,\n withOverlay: false,\n containerProps,\n onClose,\n ...rest,\n size,\n }}\n >\n {customDialogOverlay ??\n (withOverlay && size !== \"full\" ? <DialogOverlay /> : null)}\n {customDialogCloseButton ??\n (withCloseButton && onClose ? <DialogCloseButton /> : null)}\n {customDialogHeader ??\n (header ? <DialogHeader>{header}</DialogHeader> : null)}\n {customDialogBody ??\n (cloneChildren ? <DialogBody>{cloneChildren}</DialogBody> : null)}\n {customDialogFooter ??\n (footer || hasFooter ? (\n <DialogFooter>\n {footer ?? (\n <>\n {hasCancelButton ? (\n <Button\n onClick={() => onCancel?.(onClose)}\n {...cancelButtonProps}\n />\n ) : null}\n {hasOtherButton ? (\n <Button\n onClick={() => onOther?.(onClose)}\n {...otherButtonProps}\n />\n ) : null}\n {hasSuccessButton ? (\n <Button\n onClick={() => onSuccess?.(onClose)}\n {...successButtonProps}\n />\n ) : null}\n </>\n )}\n </DialogFooter>\n ) : null)}\n </Modal>\n </DialogProvider>\n )\n },\n)\n\nDialog.displayName = \"Dialog\"\nDialog.__ui__ = \"Dialog\"\n"],"mappings":"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","names":[]}