UNPKG

@hitachivantara/uikit-react-core

Version:
64 lines (63 loc) 2.12 kB
import { capitalize } from "../utils/helpers.js"; import { useClasses } from "./Snackbar.styles.js"; import { HvSnackbarContent } from "./SnackbarContent/SnackbarContent.js"; import { useDefaultProps } from "@hitachivantara/uikit-react-utils"; import { forwardRef, useCallback } from "react"; import { jsx } from "react/jsx-runtime"; import Slide from "@mui/material/Slide"; import Snackbar from "@mui/material/Snackbar"; //#region src/Snackbar/Snackbar.tsx /** * A Snackbar displays brief messages about app processes and dismisses automatically after a set time. * * You can build a Snackbar using: * * - `HvSnackbar` – handles positioning, transitions, auto-hide, and more. * - `HvSnackbarContent` – offers fine-grained control over the content and appearance. * */ var HvSnackbar = forwardRef(function HvSnackbar(props, ref) { const { classes: classesProp, className, id, title, open = false, onClose, label, anchorOrigin = { vertical: "top", horizontal: "right" }, autoHideDuration = 5e3, variant, showIcon, showClose, customIcon, action, onAction, transitionDuration = 300, transitionDirection = "left", container, offset = 60, snackbarContentProps, size, ...others } = useDefaultProps("HvSnackbar", props); const { classes } = useClasses(classesProp); const anchorOriginOffset = { anchorOriginTop: { top: `${offset}px` }, anchorOriginBottom: { bottom: `${offset}px` } }; const SlideTransition = useCallback((properties) => /* @__PURE__ */ jsx(Slide, { ...properties, container, direction: transitionDirection }), [container, transitionDirection]); return /* @__PURE__ */ jsx(Snackbar, { ref, style: anchorOriginOffset[`anchorOrigin${capitalize(anchorOrigin.vertical)}`], classes, className, id, anchorOrigin, open, onClose, autoHideDuration, transitionDuration, TransitionComponent: SlideTransition, ...others, children: /* @__PURE__ */ jsx(HvSnackbarContent, { title, label, variant, customIcon, showIcon, showClose, action, onAction, onClose, size, ...snackbarContentProps }) }); }); //#endregion export { HvSnackbar };