{"version":3,"file":"Toast.cjs","sources":["../../../../src/lib/Toast/Toast.tsx"],"sourcesContent":["import type {FC, ReactNode} from 'react';\nimport {useEffect} from 'react';\nimport {forwardRef} from 'react';\nimport classNames from 'classnames';\nimport {useRootTheme, useLocalTheme} from 'css-vars-hook';\n\nimport type {DataAttributes, LibraryProps} from '@/internal/LibraryAPI';\nimport {Portal} from '@/internal/Portal';\nimport {IconClose, IconError, IconSuccess, IconWarning, IconNotification} from '@/internal/Icons';\nimport {useInterval} from '@/internal/hooks/useInterval.ts';\nimport {useInternalRef} from '@/internal/hooks/useInternalRef.ts';\nimport {TransitionSlideBottom} from '@/internal/Transitions';\nimport type {ActionProps} from '@/internal/Actions';\nimport {ActionsTree, ActionButton} from '@/internal/Actions';\n\nimport {useToastState} from './useToastState.tsx';\nimport classes from './Toast.module.css';\n\nenum Variants {\n    default = 'default',\n    success = 'success',\n    error = 'error',\n    warning = 'warning',\n}\n\nexport type Props = DataAttributes &\n    LibraryProps & {\n        /** Provide unique id to the Toast */\n        id: NonNullable<LibraryProps['id']>;\n        children?: ReactNode;\n        /** Provide an array of actions with callbacks */\n        actions?: (ActionProps | [ActionProps, ActionProps])[];\n        /**\n         * Provide an Icon component to show instead default one\n         */\n        icon?: FC;\n        /** Select a design variant of Toast to show */\n        variant?: keyof typeof Variants;\n        /** Provide a main text to display inside Toast */\n        title: string;\n        /** Provide an additional text to display inside Toast */\n        body?: string;\n        /** Callback triggered when the user closes Toast */\n        onToggle?: (isOpen: boolean) => void;\n        /** Set time in seconds to auto close Toast */\n        autoClose?: number;\n        /** Provide custom label for close Toast action */\n        closeLabel?: string;\n    };\n\nexport const Toast = forwardRef<HTMLDivElement, Props>(\n    (\n        {\n            children,\n            className,\n            actions = [],\n            icon: IconProp,\n            variant = Variants.default,\n            title,\n            body,\n            onToggle = () => {},\n            id,\n            autoClose = null,\n            closeLabel = 'Close',\n            ...nativeProps\n        },\n        refProp\n    ) => {\n        const {isOpen, closeToast} = useToastState(id);\n        const {LocalRoot: Provider} = useLocalTheme();\n        const {getTheme} = useRootTheme();\n        const Icon = IconProp\n            ? IconProp\n            : {\n                  [Variants.default]: IconNotification,\n                  [Variants.error]: IconError,\n                  [Variants.success]: IconSuccess,\n                  [Variants.warning]: IconWarning,\n              }[variant];\n        useEffect(() => {\n            onToggle(isOpen);\n        }, [isOpen, onToggle]);\n        const needsAutoClose = typeof autoClose === 'number';\n        const interval = needsAutoClose ? autoClose * 1000 : null;\n        useInterval({callback: closeToast, interval, condition: needsAutoClose});\n        const ref = useInternalRef(refProp);\n        return (\n            <Portal>\n                <TransitionSlideBottom show={isOpen} nodeRef={ref}>\n                    <Provider className={classes.provider} theme={getTheme()}>\n                        <div\n                            {...nativeProps}\n                            className={classNames(\n                                classes.toast,\n                                {\n                                    [classes.success]: variant === Variants.success,\n                                    [classes.warning]: variant === Variants.warning,\n                                    [classes.error]: variant === Variants.error,\n                                },\n                                className\n                            )}\n                            ref={ref}>\n                            <div className={classes.content}>\n                                <div className={classes.left}>\n                                    <Icon className={classes.icon} />\n                                </div>\n                                <div className={classes.right}>\n                                    <div className={classes.title}>{title}</div>\n                                    {body && <div className={classes.body}>{body}</div>}\n                                </div>\n                            </div>\n                            <footer className={classes.actions}>\n                                <ActionsTree\n                                    actions={actions}\n                                    classNameAction={classes.actionButton}\n                                />\n                                <div key={`${id}-close`} className={classes.row}>\n                                    <ActionButton\n                                        className={classes.actionButton}\n                                        onClick={closeToast}\n                                        icon={IconClose}\n                                        title={closeLabel}\n                                    />\n                                </div>\n                            </footer>\n                        </div>\n                    </Provider>\n                </TransitionSlideBottom>\n            </Portal>\n        );\n    }\n);\n\nToast.displayName = 'Toast';\n"],"names":["Toast","forwardRef","children","className","actions","IconProp","variant","title","body","onToggle","id","autoClose","closeLabel","nativeProps","refProp","isOpen","closeToast","useToastState","Provider","useLocalTheme","getTheme","useRootTheme","Icon","IconNotification","IconError","IconSuccess","IconWarning","useEffect","needsAutoClose","interval","useInterval","ref","useInternalRef","jsx","Portal","TransitionSlideBottom","classes","jsxs","classNames","ActionsTree","ActionButton","IconClose"],"mappings":"8zBAkDaA,EAAQC,EAAAA,WACjB,CACI,CACI,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,CAAA,EACV,KAAMC,EACN,QAAAC,EAAU,UACV,MAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,IAAM,CAAC,EAClB,GAAAC,EACA,UAAAC,EAAY,KACZ,WAAAC,EAAa,QACb,GAAGC,CAAA,EAEPC,IACC,CACD,KAAM,CAAC,OAAAC,EAAQ,WAAAC,GAAcC,EAAAA,cAAcP,CAAE,EACvC,CAAC,UAAWQ,CAAA,EAAYC,gBAAA,EACxB,CAAC,SAAAC,CAAA,EAAYC,eAAA,EACbC,EAAOjB,GAEP,CACK,QAAmBkB,EAAAA,iBACnB,MAAiBC,EAAAA,UACjB,QAAmBC,EAAAA,YACnB,QAAmBC,EAAAA,WAAA,EACtBpB,CAAO,EACfqB,EAAAA,UAAU,IAAM,CACZlB,EAASM,CAAM,CACnB,EAAG,CAACA,EAAQN,CAAQ,CAAC,EACrB,MAAMmB,EAAiB,OAAOjB,GAAc,SACtCkB,EAAWD,EAAiBjB,EAAY,IAAO,KACrDmB,EAAAA,YAAY,CAAC,SAAUd,EAAY,SAAAa,EAAU,UAAWD,EAAe,EACvE,MAAMG,EAAMC,EAAAA,eAAelB,CAAO,EAClC,OACImB,EAAAA,IAACC,SAAA,CACG,SAAAD,EAAAA,IAACE,EAAAA,YAAA,CAAsB,KAAMpB,EAAQ,QAASgB,EAC1C,SAAAE,EAAAA,IAACf,GAAS,UAAWkB,EAAAA,QAAQ,SAAU,MAAOhB,IAC1C,SAAAiB,EAAAA,KAAC,MAAA,CACI,GAAGxB,EACJ,UAAWyB,EACPF,EAAAA,QAAQ,MACR,CACI,CAACA,EAAAA,QAAQ,OAAO,EAAG9B,IAAY,UAC/B,CAAC8B,EAAAA,QAAQ,OAAO,EAAG9B,IAAY,UAC/B,CAAC8B,EAAAA,QAAQ,KAAK,EAAG9B,IAAY,OAAA,EAEjCH,CAAA,EAEJ,IAAA4B,EACA,SAAA,CAAAM,EAAAA,KAAC,MAAA,CAAI,UAAWD,EAAAA,QAAQ,QACpB,SAAA,CAAAH,EAAAA,IAAC,MAAA,CAAI,UAAWG,EAAAA,QAAQ,KACpB,eAACd,EAAA,CAAK,UAAWc,EAAAA,QAAQ,IAAA,CAAM,CAAA,CACnC,EACAC,EAAAA,KAAC,MAAA,CAAI,UAAWD,EAAAA,QAAQ,MACpB,SAAA,CAAAH,EAAAA,IAAC,MAAA,CAAI,UAAWG,EAAAA,QAAQ,MAAQ,SAAA7B,EAAM,EACrCC,GAAQyB,EAAAA,IAAC,MAAA,CAAI,UAAWG,EAAAA,QAAQ,KAAO,SAAA5B,CAAA,CAAK,CAAA,CAAA,CACjD,CAAA,EACJ,EACA6B,EAAAA,KAAC,SAAA,CAAO,UAAWD,EAAAA,QAAQ,QACvB,SAAA,CAAAH,EAAAA,IAACM,EAAAA,YAAA,CACG,QAAAnC,EACA,gBAAiBgC,EAAAA,QAAQ,YAAA,CAAA,EAE7BH,EAAAA,IAAC,MAAA,CAAwB,UAAWG,EAAAA,QAAQ,IACxC,SAAAH,EAAAA,IAACO,EAAAA,aAAA,CACG,UAAWJ,EAAAA,QAAQ,aACnB,QAASpB,EACT,KAAMyB,EAAAA,UACN,MAAO7B,CAAA,CAAA,GALL,GAAGF,CAAE,QAOf,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CACJ,CACJ,EACJ,EACJ,CAER,CACJ,EAEAV,EAAM,YAAc"}