{"version":3,"sources":["../node_modules/clsx/dist/clsx.m.js","../../src/utils/propValidator.ts","../../src/utils/constant.ts","../../src/utils/cssTransition.tsx","../../src/utils/collapseToast.ts","../../src/core/eventManager.ts","../../src/hooks/useKeeper.ts","../../src/hooks/toastContainerReducer.ts","../../src/hooks/useToastContainer.ts","../../src/hooks/useToast.ts","../../src/components/CloseButton.tsx","../../src/components/ProgressBar.tsx","../../src/components/Toast.tsx","../../src/components/Transitions.tsx","../../src/components/ToastContainer.tsx","../../src/core/toast.tsx","../node_modules/grommet/es6/contexts/ThemeContext/propTypes.js","../node_modules/grommet/es6/contexts/ThemeContext/ThemeContext.js","../node_modules/grommet/es6/components/Grommet/StyledGrommet.js","../node_modules/grommet/es6/components/Grommet/propTypes.js","../node_modules/grommet/es6/components/Grommet/Grommet.js"],"names":["r","e","t","f","n","Array","isArray","length","clsx","arguments","isNum","v","isNaN","isBool","isStr","isFn","parseClassName","isToastIdValid","toastId","canUseDom","window","canBeRendered","content","isValidElement","POSITION","TOP_LEFT","TOP_RIGHT","TOP_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","BOTTOM_CENTER","TYPE","INFO","SUCCESS","WARNING","ERROR","DEFAULT","DARK","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","done","nodeRef","isIn","enterClassName","exitClassName","baseClassName","useRef","animationStep","onEntered","node","onExited","duration","height","style","requestAnimationFrame","setTimeout","collapseToast","useLayoutEffect","onEnter","useEffect","onExit","React","eventManager","list","emitQueue","on","this","has","event","set","get","off","callback","cb","cancelEmit","timers","emit","args","timer","useKeeper","arg","refresh","ref","reducer","state","action","id","useToastContainer","props","forceUpdate","useReducer","x","toast","dispatch","containerRef","toastCount","queue","collection","instance","toastKey","displayedToast","containerId","isToastActive","getToast","clearWaitingQueue","limit","removeToast","type","dequeueToast","appendToast","toastContent","toastProps","staleId","buildToast","delay","options","updateId","isNotValid","closeToast","isNotAnUpdate","toastAutoClose","containerAutoClose","key","closeButton","rtl","transition","className","bodyClassName","bodyStyle","onClick","pauseOnHover","pauseOnFocusLoss","draggable","draggablePercent","draggableDirection","closeOnClick","progressClassName","progressStyle","autoClose","hideProgressBar","progress","role","deleteToast","queueLen","freeSlot","toDequeue","i","removeFromCollection","cloneElement","getToastToRender","toastToRender","toastList","Object","p","getX","getY","useToast","useState","isRunning","setIsRunning","setPreventExitTransition","toastRef","drag","start","y","delta","removalDistance","canCloseOnClick","canDrag","boundingRect","syncProps","onDragStart","onDragTransitionEnd","top","bottom","left","right","pauseToast","playToast","onDragMove","Math","onDragEnd","document","bindFocusEvents","eventHandlers","onMouseDown","onTouchStart","onMouseUp","onTouchEnd","CloseButton","ariaLabel","viewBox","fillRule","d","ProgressBar","hide","userStyle","controlledProgress","animationDuration","animationPlayState","opacity","defaultClassName","cx","classNames","animationEvent","Toast","Transition","cssClasses","isProgressControlled","renderCloseButton","Bounce","ToastContainer","getClassName","containerStyle","pointerEvents","newestOnTop","containers","lazy","generateToastId","getToastId","dispatchToast","containerDomNode","render","mergeOptions","createToastByType","params","container","oldOptions","oldContent","nextOptions","config","containerConfig","latestInstance","containerInstance","item","ThemeContextPropTypes","ThemeContext","Extend","_ref","value","createElement","Consumer","theme","Provider","deepMerge","propTypes","PropTypes","isRequired","shape","StyledGrommet","styled","div","withConfig","displayName","componentId","plain","baseStyle","full","css","global","font","face","grommet","extend","cssVars","keys","colors","filter","k","map","join","defaultProps","setPrototypeOf","GrommetPropTypes","_excluded","_extends","assign","target","source","prototype","hasOwnProperty","call","apply","FullGlobalStyle","createGlobalStyle","defaultOptions","Grommet","forwardRef","_props$containerTarge","containerTarget","body","undefined","themeProp","_props$options","messagesProp","messages","rest","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","background","dir","themeMode","userAgent","_useState","stateResponsive","setResponsive","_useState2","roots","setRoots","useMemo","nextTheme","baseTheme","menu","drop","align","themeBackground","dark","defaultMode","color","normalizeColor","backgroundIsDark","baseBackground","nextMessages","defaultMessages","format","opts","message","_format","onResize","getBreakpoint","clientWidth","addEventListener","removeEventListener","responsive","test","getDeviceBreakpoint","deviceResponsive","deviceBreakpoints","tablet","grommetRef","useForwardedRef","current","ResponsiveContext","RootsContext","ContainerTargetContext","OptionsContext","MessageContext"],"mappings":"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","file":"static/js/0.4a52a064.chunk.js","sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t 0)\n ? toastAutoClose\n : containerAutoClose;\n}\n\nexport const canUseDom = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nexport function canBeRendered(content: T): boolean {\n return (\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content)\n );\n}\n","import { ToastPosition, TypeOptions } from '../types';\n\ntype KeyOfPosition =\n | 'TOP_LEFT'\n | 'TOP_RIGHT'\n | 'TOP_CENTER'\n | 'BOTTOM_LEFT'\n | 'BOTTOM_RIGHT'\n | 'BOTTOM_CENTER';\n\ntype KeyOfType = 'INFO' | 'SUCCESS' | 'WARNING' | 'ERROR' | 'DEFAULT' | 'DARK';\n\nexport const POSITION: { [key in KeyOfPosition]: ToastPosition } = {\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n TOP_CENTER: 'top-center',\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n BOTTOM_CENTER: 'bottom-center'\n};\n\nexport const TYPE: { [key in KeyOfType]: TypeOptions } = {\n INFO: 'info',\n SUCCESS: 'success',\n WARNING: 'warning',\n ERROR: 'error',\n DEFAULT: 'default',\n DARK: 'dark'\n};\n\nexport const enum Default {\n COLLAPSE_DURATION = 300,\n DEBOUNCE_DURATION = 50,\n CSS_NAMESPACE = 'Toastify',\n DRAGGABLE_PERCENT = 80\n}\n\nexport const enum Direction {\n X = 'x',\n Y = 'y'\n}\n","import React, { useEffect, useLayoutEffect, useRef } from 'react';\nimport { ToastTransitionProps } from '../types';\n\nimport { collapseToast } from './collapseToast';\nimport { Default } from './constant';\n\nexport interface CSSTransitionProps {\n /**\n * Css class to apply when toast enter\n */\n enter: string;\n\n /**\n * Css class to apply when toast leave\n */\n exit: string;\n\n /**\n * Append current toast position to the classname.\n * If multiple classes are provided, only the last one will get the position\n * For instance `myclass--top-center`...\n * `Default: false`\n */\n appendPosition?: boolean;\n\n /**\n * Collapse toast smoothly when exit animation end\n * `Default: true`\n */\n collapse?: boolean;\n\n /**\n * Collapse transition duration\n * `Default: 300`\n */\n collapseDuration?: number;\n}\n\nconst enum AnimationStep {\n Enter,\n Exit\n}\n\n/**\n * Css animation that just work.\n * You could use animate.css for instance\n *\n *\n * ```\n * cssTransition({\n * enter: \"animate__animated animate__bounceIn\",\n * exit: \"animate__animated animate__bounceOut\"\n * })\n * ```\n *\n */\nexport function cssTransition({\n enter,\n exit,\n appendPosition = false,\n collapse = true,\n collapseDuration = Default.COLLAPSE_DURATION\n}: CSSTransitionProps) {\n return function ToastTransition({\n children,\n position,\n preventExitTransition,\n done,\n nodeRef,\n isIn\n }: ToastTransitionProps) {\n const enterClassName = appendPosition ? `${enter}--${position}` : enter;\n const exitClassName = appendPosition ? `${exit}--${position}` : exit;\n const baseClassName = useRef();\n const animationStep = useRef(AnimationStep.Enter);\n\n useLayoutEffect(() => {\n onEnter();\n }, []);\n\n useEffect(() => {\n if (!isIn) preventExitTransition ? onExited() : onExit();\n }, [isIn]);\n\n function onEnter() {\n const node = nodeRef.current!;\n baseClassName.current = node.className;\n node.className += ` ${enterClassName}`;\n node.addEventListener('animationend', onEntered);\n }\n\n function onEntered() {\n const node = nodeRef.current!;\n node.removeEventListener('animationend', onEntered);\n if (animationStep.current === AnimationStep.Enter) {\n node.className = baseClassName.current!;\n }\n }\n\n function onExit() {\n animationStep.current = AnimationStep.Exit;\n const node = nodeRef.current!;\n\n node.className += ` ${exitClassName}`;\n node.addEventListener('animationend', onExited);\n }\n\n function onExited() {\n const node = nodeRef.current!;\n\n node.removeEventListener('animationend', onExited);\n collapse ? collapseToast(node, done, collapseDuration) : done();\n }\n\n return <>{children};\n };\n}\n","import { Default } from './constant';\n\n/**\n * Used to collapse toast after exit animation\n */\nexport function collapseToast(\n node: HTMLElement,\n done: () => void,\n duration = Default.COLLAPSE_DURATION\n) {\n const height = node.scrollHeight;\n const style = node.style;\n\n requestAnimationFrame(() => {\n style.minHeight = 'initial';\n style.height = height + 'px';\n style.transition = `all ${duration}ms`;\n\n requestAnimationFrame(() => {\n style.height = '0';\n style.padding = '0';\n style.margin = '0';\n setTimeout(done, duration as number);\n });\n });\n}\n","import {\n Id,\n ToastContent,\n ClearWaitingQueueParams,\n NotValidatedToastProps\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\nexport const enum Event {\n Show,\n Clear,\n DidMount,\n WillUnmount,\n Change,\n ClearWaitingQueue\n}\n\ntype OnShowCallback = (\n content: ToastContent,\n options: NotValidatedToastProps\n) => void;\ntype OnClearCallback = (id?: Id) => void;\ntype OnClearWaitingQueue = (params: ClearWaitingQueueParams) => void;\ntype OnDidMountCallback = (containerInstance: ContainerInstance) => void;\ntype OnWillUnmountCallback = OnDidMountCallback;\nexport type OnChangeCallback = (\n toast: number,\n containerId?: number | string\n) => void;\ntype Callback =\n | OnShowCallback\n | OnClearCallback\n | OnClearWaitingQueue\n | OnDidMountCallback\n | OnWillUnmountCallback\n | OnChangeCallback;\ntype TimeoutId = ReturnType;\n\nexport interface EventManager {\n list: Map;\n emitQueue: Map;\n on(event: Event.Show, callback: OnShowCallback): EventManager;\n on(event: Event.Clear, callback: OnClearCallback): EventManager;\n on(\n event: Event.ClearWaitingQueue,\n callback: OnClearWaitingQueue\n ): EventManager;\n on(event: Event.DidMount, callback: OnDidMountCallback): EventManager;\n on(event: Event.WillUnmount, callback: OnWillUnmountCallback): EventManager;\n on(event: Event.Change, callback: OnChangeCallback): EventManager;\n off(event: Event, callback?: Callback): EventManager;\n cancelEmit(event: Event): EventManager;\n emit(\n event: Event.Show,\n content: React.ReactNode,\n options: NotValidatedToastProps\n ): void;\n emit(event: Event.Clear, id?: string | number): void;\n emit(event: Event.ClearWaitingQueue, params: ClearWaitingQueueParams): void;\n emit(event: Event.DidMount, containerInstance: ContainerInstance): void;\n emit(event: Event.WillUnmount, containerInstance: ContainerInstance): void;\n emit(event: Event.Change, toast: number, containerId?: number | string): void;\n}\n\nexport const eventManager: EventManager = {\n list: new Map(),\n emitQueue: new Map(),\n\n on(event: Event, callback: Callback) {\n this.list.has(event) || this.list.set(event, []);\n this.list.get(event)!.push(callback);\n return this;\n },\n\n off(event, callback) {\n if (callback) {\n const cb = this.list.get(event)!.filter(cb => cb !== callback);\n this.list.set(event, cb);\n return this;\n }\n this.list.delete(event);\n return this;\n },\n\n cancelEmit(event) {\n const timers = this.emitQueue.get(event);\n if (timers) {\n timers.forEach(clearTimeout);\n this.emitQueue.delete(event);\n }\n\n return this;\n },\n\n /**\n * Enqueue the event at the end of the call stack\n * Doing so let the user call toast as follow:\n * toast('1')\n * toast('2')\n * toast('3')\n * Without setTimemout the code above will not work\n */\n emit(event: Event, ...args: any[]) {\n this.list.has(event) &&\n this.list.get(event)!.forEach((callback: Callback) => {\n const timer = setTimeout(() => {\n // @ts-ignore\n callback(...args);\n }, 0);\n\n this.emitQueue.has(event) || this.emitQueue.set(event, []);\n this.emitQueue.get(event)!.push(timer);\n });\n }\n};\n","import { useRef, useEffect } from 'react';\n\n/**\n * `useKeeper` is a helper around `useRef`.\n *\n * You don't need to access the `.current`property to get the value\n * If refresh is set to true. The ref will be updated every render\n */\nexport function useKeeper(arg: T, refresh = false) {\n const ref = useRef(arg);\n\n useEffect(() => {\n if (refresh) ref.current = arg;\n });\n\n return ref.current;\n}\n","import { Id } from '../types';\n\nimport { isToastIdValid } from '../utils';\n\nexport const enum ActionType {\n ADD,\n REMOVE\n}\nexport type State = Array;\nexport type Action =\n | { type: ActionType.ADD; toastId: Id; staleId?: Id }\n | { type: ActionType.REMOVE; toastId?: Id };\n\nexport function reducer(state: State, action: Action) {\n switch (action.type) {\n case ActionType.ADD:\n return [...state, action.toastId].filter(id => id !== action.staleId);\n case ActionType.REMOVE:\n return isToastIdValid(action.toastId)\n ? state.filter(id => id !== action.toastId)\n : [];\n }\n}\n","import {\n useEffect,\n useRef,\n useReducer,\n cloneElement,\n isValidElement\n} from 'react';\nimport {\n parseClassName,\n canBeRendered,\n isBool,\n isFn,\n isNum,\n isStr,\n isToastIdValid,\n getAutoCloseDelay,\n Direction,\n Default\n} from '../utils';\nimport { eventManager, Event } from '../core/eventManager';\n\nimport {\n Id,\n ToastContainerProps,\n ToastProps,\n ToastContent,\n Toast,\n ToastPosition,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n ToastTransition\n} from '../types';\nimport { useKeeper } from './useKeeper';\nimport { ActionType, reducer } from './toastContainerReducer';\n\ntype CollectionItem = Record;\ntype ToastToRender = Partial>;\n\ninterface QueuedToast {\n toastContent: ToastContent;\n toastProps: ToastProps;\n staleId?: Id;\n}\n\nexport interface ContainerInstance {\n toastKey: number;\n displayedToast: number;\n props: ToastContainerProps;\n containerId?: Id | null;\n isToastActive: (toastId: Id) => boolean;\n getToast: (id: Id) => Toast | null;\n}\n\nexport function useToastContainer(props: ToastContainerProps) {\n const [, forceUpdate] = useReducer(x => x + 1, 0);\n const [toast, dispatch] = useReducer(reducer, []);\n const containerRef = useRef(null);\n let toastCount = useKeeper(0);\n let queue = useKeeper([]);\n const collection = useKeeper({});\n const instance = useKeeper({\n toastKey: 1,\n displayedToast: 0,\n props,\n containerId: null,\n isToastActive: isToastActive,\n getToast: id => collection[id] || null\n });\n\n useEffect(() => {\n instance.containerId = props.containerId;\n eventManager\n .cancelEmit(Event.WillUnmount)\n .on(Event.Show, buildToast)\n .on(Event.Clear, toastId => containerRef.current && removeToast(toastId))\n .on(Event.ClearWaitingQueue, clearWaitingQueue)\n .emit(Event.DidMount, instance);\n\n return () => eventManager.emit(Event.WillUnmount, instance);\n }, []);\n\n useEffect(() => {\n instance.isToastActive = isToastActive;\n instance.displayedToast = toast.length;\n eventManager.emit(Event.Change, toast.length, props.containerId);\n }, [toast]);\n\n useEffect(() => {\n instance.props = props;\n });\n\n function isToastActive(id: Id) {\n return toast.indexOf(id) !== -1;\n }\n\n function clearWaitingQueue({ containerId }: ClearWaitingQueueParams) {\n const { limit } = instance.props;\n if (limit && (!containerId || instance.containerId === containerId)) {\n toastCount -= queue.length;\n queue = [];\n }\n }\n\n function removeToast(toastId?: Id) {\n dispatch({ type: ActionType.REMOVE, toastId });\n }\n\n function dequeueToast() {\n const { toastContent, toastProps, staleId } = queue.shift() as QueuedToast;\n appendToast(toastContent, toastProps, staleId);\n }\n\n /**\n * check if a container is attached to the dom\n * check for multi-container, build only if associated\n * check for duplicate toastId if no update\n */\n function isNotValid({\n containerId,\n toastId,\n updateId\n }: NotValidatedToastProps) {\n return !containerRef.current ||\n (instance.props.enableMultiContainer &&\n containerId !== instance.props.containerId) ||\n (collection[toastId] && updateId == null)\n ? true\n : false;\n }\n\n // this function and all the function called inside needs to rely on ref(`useKeeper`)\n function buildToast(\n content: ToastContent,\n { delay, staleId, ...options }: NotValidatedToastProps\n ) {\n if (!canBeRendered(content) || isNotValid(options)) return;\n\n const { toastId, updateId } = options;\n const { props } = instance;\n const closeToast = () => removeToast(toastId);\n const isNotAnUpdate = options.updateId == null;\n\n if (isNotAnUpdate) toastCount++;\n\n const toastProps: ToastProps = {\n toastId,\n updateId,\n isIn: false,\n key: options.key || instance.toastKey++,\n type: options.type,\n closeToast: closeToast,\n closeButton: options.closeButton,\n rtl: props.rtl,\n position: options.position || (props.position as ToastPosition),\n transition: options.transition || (props.transition as ToastTransition),\n className: parseClassName(options.className || props.toastClassName),\n bodyClassName: parseClassName(\n options.bodyClassName || props.bodyClassName\n ),\n style: options.style || props.toastStyle,\n bodyStyle: options.bodyStyle || props.bodyStyle,\n onClick: options.onClick || props.onClick,\n pauseOnHover: isBool(options.pauseOnHover)\n ? options.pauseOnHover\n : props.pauseOnHover,\n pauseOnFocusLoss: isBool(options.pauseOnFocusLoss)\n ? options.pauseOnFocusLoss\n : props.pauseOnFocusLoss,\n draggable: isBool(options.draggable)\n ? options.draggable\n : props.draggable,\n draggablePercent: isNum(options.draggablePercent)\n ? options.draggablePercent\n : (props.draggablePercent as number),\n draggableDirection:\n options.draggableDirection || props.draggableDirection,\n closeOnClick: isBool(options.closeOnClick)\n ? options.closeOnClick\n : props.closeOnClick,\n progressClassName: parseClassName(\n options.progressClassName || props.progressClassName\n ),\n progressStyle: options.progressStyle || props.progressStyle,\n autoClose: getAutoCloseDelay(options.autoClose, props.autoClose),\n hideProgressBar: isBool(options.hideProgressBar)\n ? options.hideProgressBar\n : props.hideProgressBar,\n progress: options.progress,\n role: isStr(options.role) ? options.role : props.role,\n deleteToast() {\n removeFromCollection(toastId);\n }\n };\n\n if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n if (isFn(options.onClose)) toastProps.onClose = options.onClose;\n\n // tweak for vertical dragging\n if (\n toastProps.draggableDirection === Direction.Y &&\n toastProps.draggablePercent === Default.DRAGGABLE_PERCENT\n ) {\n (toastProps.draggablePercent as number) *= 1.5;\n }\n\n let closeButton = props.closeButton;\n\n if (options.closeButton === false || canBeRendered(options.closeButton)) {\n closeButton = options.closeButton;\n } else if (options.closeButton === true) {\n closeButton = canBeRendered(props.closeButton) ? props.closeButton : true;\n }\n\n toastProps.closeButton = closeButton;\n\n let toastContent = content;\n\n if (isValidElement(content) && !isStr(content.type)) {\n toastContent = cloneElement(content, {\n closeToast,\n toastProps\n });\n } else if (isFn(content)) {\n toastContent = content({ closeToast, toastProps });\n }\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (\n props.limit &&\n props.limit > 0 &&\n toastCount > props.limit &&\n isNotAnUpdate\n ) {\n queue.push({ toastContent, toastProps, staleId });\n } else if (isNum(delay) && (delay as number) > 0) {\n setTimeout(() => {\n appendToast(toastContent, toastProps, staleId);\n }, delay);\n } else {\n appendToast(toastContent, toastProps, staleId);\n }\n }\n\n function appendToast(\n content: ToastContent,\n toastProps: ToastProps,\n staleId?: Id\n ) {\n const { toastId } = toastProps;\n\n if (staleId) delete collection[staleId];\n\n collection[toastId] = {\n content,\n props: toastProps\n };\n dispatch({\n type: ActionType.ADD,\n toastId,\n staleId\n });\n }\n\n function removeFromCollection(toastId: Id) {\n delete collection[toastId];\n const queueLen = queue.length;\n toastCount = isToastIdValid(toastId)\n ? toastCount - 1\n : toastCount - instance.displayedToast;\n\n if (toastCount < 0) toastCount = 0;\n\n if (queueLen > 0) {\n const freeSlot = isToastIdValid(toastId) ? 1 : instance.props.limit!;\n\n if (queueLen === 1 || freeSlot === 1) {\n instance.displayedToast++;\n dequeueToast();\n } else {\n const toDequeue = freeSlot > queueLen ? queueLen : freeSlot;\n instance.displayedToast = toDequeue;\n\n for (let i = 0; i < toDequeue; i++) dequeueToast();\n }\n } else {\n forceUpdate();\n }\n }\n\n function getToastToRender(\n cb: (position: ToastPosition, toastList: Toast[]) => T\n ) {\n const toastToRender: ToastToRender = {};\n const toastList = props.newestOnTop\n ? Object.keys(collection).reverse()\n : Object.keys(collection);\n\n for (let i = 0; i < toastList.length; i++) {\n const toast = collection[toastList[i]];\n const { position } = toast.props;\n toastToRender[position] || (toastToRender[position] = []);\n\n toastToRender[position]!.push(toast);\n }\n\n return (Object.keys(toastToRender) as Array).map(p =>\n cb(p, toastToRender[p]!)\n );\n }\n\n return {\n getToastToRender,\n collection,\n containerRef,\n isToastActive\n };\n}\n","import {\n useState,\n useRef,\n useEffect,\n isValidElement,\n DOMAttributes\n} from 'react';\n\nimport { isFn } from '../utils';\nimport { ToastProps } from '../types';\nimport { useKeeper } from './useKeeper';\nimport { Direction } from '../utils/constant';\n\ninterface Draggable {\n start: number;\n x: number;\n y: number;\n delta: number;\n removalDistance: number;\n canCloseOnClick: boolean;\n canDrag: boolean;\n boundingRect: DOMRect | null;\n}\n\ntype DragEvent = MouseEvent & TouchEvent;\n\nfunction getX(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientX\n : e.clientX;\n}\n\nfunction getY(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientY\n : e.clientY;\n}\n\nexport function useToast(props: ToastProps) {\n const [isRunning, setIsRunning] = useState(true);\n const [preventExitTransition, setPreventExitTransition] = useState(false);\n const toastRef = useRef(null);\n const drag = useKeeper({\n start: 0,\n x: 0,\n y: 0,\n delta: 0,\n removalDistance: 0,\n canCloseOnClick: true,\n canDrag: false,\n boundingRect: null\n });\n const syncProps = useKeeper(props, true);\n const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n useEffect(() => {\n if (isFn(props.onOpen))\n props.onOpen(isValidElement(props.children) && props.children.props);\n\n return () => {\n if (isFn(syncProps.onClose))\n syncProps.onClose(\n isValidElement(syncProps.children) && syncProps.children.props\n );\n };\n }, []);\n\n useEffect(() => {\n props.draggable && bindDragEvents();\n return () => {\n props.draggable && unbindDragEvents();\n };\n }, [props.draggable]);\n\n useEffect(() => {\n props.pauseOnFocusLoss && bindFocusEvents();\n return () => {\n props.pauseOnFocusLoss && unbindFocusEvents();\n };\n }, [props.pauseOnFocusLoss]);\n\n function onDragStart(\n e: React.MouseEvent | React.TouchEvent\n ) {\n if (props.draggable) {\n const toast = toastRef.current!;\n drag.canCloseOnClick = true;\n drag.canDrag = true;\n drag.boundingRect = toast.getBoundingClientRect();\n toast.style.transition = '';\n drag.x = getX(e.nativeEvent as DragEvent);\n drag.y = getY(e.nativeEvent as DragEvent);\n\n if (props.draggableDirection === Direction.X) {\n drag.start = drag.x;\n drag.removalDistance =\n toast.offsetWidth * (props.draggablePercent / 100);\n } else {\n drag.start = drag.y;\n drag.removalDistance =\n toast.offsetHeight * (props.draggablePercent / 100);\n }\n }\n }\n\n function onDragTransitionEnd() {\n if (drag.boundingRect) {\n const { top, bottom, left, right } = drag.boundingRect;\n\n if (\n props.pauseOnHover &&\n drag.x >= left &&\n drag.x <= right &&\n drag.y >= top &&\n drag.y <= bottom\n ) {\n pauseToast();\n } else {\n playToast();\n }\n }\n }\n\n function playToast() {\n setIsRunning(true);\n }\n\n function pauseToast() {\n setIsRunning(false);\n }\n\n function bindFocusEvents() {\n if (!document.hasFocus()) pauseToast();\n\n window.addEventListener('focus', playToast);\n window.addEventListener('blur', pauseToast);\n }\n\n function unbindFocusEvents() {\n window.removeEventListener('focus', playToast);\n window.removeEventListener('blur', pauseToast);\n }\n\n function bindDragEvents() {\n document.addEventListener('mousemove', onDragMove);\n document.addEventListener('mouseup', onDragEnd);\n\n document.addEventListener('touchmove', onDragMove);\n document.addEventListener('touchend', onDragEnd);\n }\n\n function unbindDragEvents() {\n document.removeEventListener('mousemove', onDragMove);\n document.removeEventListener('mouseup', onDragEnd);\n\n document.removeEventListener('touchmove', onDragMove);\n document.removeEventListener('touchend', onDragEnd);\n }\n\n function onDragMove(e: MouseEvent | TouchEvent) {\n if (drag.canDrag) {\n e.preventDefault();\n\n const toast = toastRef.current!;\n if (isRunning) pauseToast();\n\n drag.x = getX(e as DragEvent);\n drag.y = getY(e as DragEvent);\n\n if (props.draggableDirection === Direction.X) {\n drag.delta = drag.x - drag.start;\n } else {\n drag.delta = drag.y - drag.start;\n }\n\n // prevent false positif during a toast click\n if (drag.start !== drag.x) drag.canCloseOnClick = false;\n\n toast.style.transform = `translate${props.draggableDirection}(${drag.delta}px)`;\n toast.style.opacity = `${1 -\n Math.abs(drag.delta / drag.removalDistance)}`;\n }\n }\n\n function onDragEnd() {\n const toast = toastRef.current!;\n if (drag.canDrag) {\n drag.canDrag = false;\n\n if (Math.abs(drag.delta) > drag.removalDistance) {\n setPreventExitTransition(true);\n props.closeToast();\n return;\n }\n\n toast.style.transition = 'transform 0.2s, opacity 0.2s';\n toast.style.transform = `translate${props.draggableDirection}(0)`;\n toast.style.opacity = '1';\n }\n }\n\n const eventHandlers: DOMAttributes = {\n onMouseDown: onDragStart,\n onTouchStart: onDragStart,\n onMouseUp: onDragTransitionEnd,\n onTouchEnd: onDragTransitionEnd\n };\n\n if (autoClose && pauseOnHover) {\n eventHandlers.onMouseEnter = pauseToast;\n eventHandlers.onMouseLeave = playToast;\n }\n\n // prevent toast from closing when user drags the toast\n if (closeOnClick) {\n eventHandlers.onClick = (e: React.MouseEvent) => {\n onClick && onClick(e);\n drag.canCloseOnClick && closeToast();\n };\n }\n\n return {\n playToast,\n pauseToast,\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n };\n}\n","import * as React from 'react';\nimport { Default } from '../utils';\nimport { TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: (e: React.MouseEvent) => void;\n type: TypeOptions;\n ariaLabel?: string;\n}\n\nexport function CloseButton({\n closeToast,\n type,\n ariaLabel = 'close'\n}: CloseButtonProps) {\n return (\n {\n e.stopPropagation();\n closeToast(e);\n }}\n aria-label={ariaLabel}\n >\n \n \n \n \n );\n}\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { TYPE, Default, isFn } from './../utils';\nimport { TypeOptions, ToastClassName } from '../types';\n\nexport interface ProgressBarProps {\n /**\n * The animation delay which determine when to close the toast\n */\n delay: number;\n\n /**\n * Whether or not the animation is running or paused\n */\n isRunning: boolean;\n\n /**\n * Func to close the current toast\n */\n closeToast: () => void;\n\n /**\n * Optional type : info, success ...\n */\n type: TypeOptions;\n\n /**\n * Hide or not the progress bar\n */\n hide?: boolean;\n\n /**\n * Optionnal className\n */\n className?: ToastClassName;\n\n /**\n * Optionnal inline style\n */\n style?: React.CSSProperties;\n\n /**\n * Tell wether or not controlled progress bar is used\n */\n controlledProgress?: boolean;\n\n /**\n * Controlled progress value\n */\n progress?: number | string;\n\n /**\n * Support rtl content\n */\n rtl?: boolean;\n\n /**\n * Tell if the component is visible on screen or not\n */\n isIn?: boolean;\n}\n\nexport function ProgressBar({\n delay,\n isRunning,\n closeToast,\n type,\n hide,\n className,\n style: userStyle,\n controlledProgress,\n progress,\n rtl,\n isIn\n}: ProgressBarProps) {\n const style: React.CSSProperties = {\n ...userStyle,\n animationDuration: `${delay}ms`,\n animationPlayState: isRunning ? 'running' : 'paused',\n opacity: hide ? 0 : 1\n };\n\n if (controlledProgress) style.transform = `scaleX(${progress})`;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__progress-bar`,\n controlledProgress\n ? `${Default.CSS_NAMESPACE}__progress-bar--controlled`\n : `${Default.CSS_NAMESPACE}__progress-bar--animated`,\n `${Default.CSS_NAMESPACE}__progress-bar--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__progress-bar--rtl`]: rtl\n }\n );\n const classNames = isFn(className)\n ? className({\n rtl,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n\n // 🧐 controlledProgress is derived from progress\n // so if controlledProgress is set\n // it means that this is also the case for progress\n const animationEvent = {\n [controlledProgress && progress! >= 1\n ? 'onTransitionEnd'\n : 'onAnimationEnd']:\n controlledProgress && progress! < 1\n ? null\n : () => {\n isIn && closeToast();\n }\n };\n\n // TODO: add aria-valuenow, aria-valuemax, aria-valuemin\n\n return (\n \n );\n}\n\nProgressBar.defaultProps = {\n type: TYPE.DEFAULT,\n hide: false\n};\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { ProgressBar } from './ProgressBar';\nimport { ToastProps } from '../types';\nimport { Default, isFn } from '../utils';\nimport { useToast } from '../hooks';\n\nexport const Toast: React.FC = props => {\n const {\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n } = useToast(props);\n const {\n closeButton,\n children,\n autoClose,\n onClick,\n type,\n hideProgressBar,\n closeToast,\n transition: Transition,\n position,\n className,\n style,\n bodyClassName,\n bodyStyle,\n progressClassName,\n progressStyle,\n updateId,\n role,\n progress,\n rtl,\n toastId,\n deleteToast,\n isIn\n } = props;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast`,\n `${Default.CSS_NAMESPACE}__toast--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__toast--rtl`]: rtl\n }\n );\n const cssClasses = isFn(className)\n ? className({\n rtl,\n position,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n const isProgressControlled = !!progress;\n\n function renderCloseButton(closeButton: any) {\n if (!closeButton) return;\n\n const props = { closeToast, type };\n\n if (isFn(closeButton)) return closeButton(props);\n\n if (React.isValidElement(closeButton))\n return React.cloneElement(closeButton, props);\n }\n\n return (\n \n \n \n {children}\n \n {renderCloseButton(closeButton)}\n {(autoClose || isProgressControlled) && (\n \n )}\n \n \n );\n};\n","import { Default, cssTransition } from '../utils';\n\nconst Bounce = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-exit`,\n appendPosition: true\n});\n\nconst Slide = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-exit`,\n appendPosition: true\n});\n\nconst Zoom = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-exit`\n});\n\nconst Flip = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-exit`\n});\n\nexport { Bounce, Slide, Zoom, Flip };\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { Toast } from './Toast';\nimport { CloseButton } from './CloseButton';\nimport { Bounce } from './Transitions';\nimport { POSITION, Direction, Default, parseClassName, isFn } from '../utils';\nimport { useToastContainer } from '../hooks';\nimport { ToastContainerProps, ToastPosition } from '../types';\n\nexport const ToastContainer: React.FC = props => {\n const { getToastToRender, containerRef, isToastActive } = useToastContainer(\n props\n );\n const { className, style, rtl, containerId } = props;\n\n function getClassName(position: ToastPosition) {\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast-container`,\n `${Default.CSS_NAMESPACE}__toast-container--${position}`,\n { [`${Default.CSS_NAMESPACE}__toast-container--rtl`]: rtl }\n );\n return isFn(className)\n ? className({\n position,\n rtl,\n defaultClassName\n })\n : cx(defaultClassName, parseClassName(className));\n }\n\n return (\n \n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties =\n toastList.length === 0\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n \n {toastList.map(({ content, props: toastProps }) => {\n return (\n \n {content}\n \n );\n })}\n \n );\n })}\n \n );\n};\n\nToastContainer.defaultProps = {\n position: POSITION.TOP_RIGHT as ToastPosition,\n transition: Bounce,\n rtl: false,\n autoClose: 5000,\n hideProgressBar: false,\n closeButton: CloseButton,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n closeOnClick: true,\n newestOnTop: false,\n draggable: true,\n draggablePercent: Default.DRAGGABLE_PERCENT as number,\n draggableDirection: Direction.X,\n role: 'alert'\n};\n","import * as React from 'react';\nimport { render } from 'react-dom';\n\nimport { POSITION, TYPE, canUseDom, isStr, isNum, isFn } from '../utils';\nimport { eventManager, OnChangeCallback, Event } from './eventManager';\nimport {\n ToastContent,\n ToastOptions,\n ToastProps,\n Id,\n ToastContainerProps,\n UpdateOptions,\n ClearWaitingQueueParams,\n NotValidatedToastProps\n} from '../types';\nimport { ContainerInstance } from 'hooks';\nimport { ToastContainer } from '../components';\n\ninterface EnqueuedToast {\n content: ToastContent;\n options: NotValidatedToastProps;\n}\n\nlet containers = new Map();\nlet latestInstance: ContainerInstance | Id;\nlet containerDomNode: HTMLElement;\nlet containerConfig: ToastContainerProps;\nlet queue: EnqueuedToast[] = [];\nlet lazy = false;\n\n/**\n * Check whether any container is currently mounted in the DOM\n */\nfunction isAnyContainerMounted() {\n return containers.size > 0;\n}\n\n/**\n * Get the toast by id, given it's in the DOM, otherwise returns null\n */\nfunction getToast(toastId: Id, { containerId }: ToastOptions) {\n const container = containers.get(containerId || latestInstance);\n if (!container) return null;\n\n return container.getToast(toastId);\n}\n\n/**\n * Generate a random toastId\n */\nfunction generateToastId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n}\n\n/**\n * Generate a toastId or use the one provided\n */\nfunction getToastId(options?: ToastOptions) {\n if (options && (isStr(options.toastId) || isNum(options.toastId))) {\n return options.toastId;\n }\n\n return generateToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued and\n * the container lazy mounted\n */\nfunction dispatchToast(\n content: ToastContent,\n options: NotValidatedToastProps\n): Id {\n if (isAnyContainerMounted()) {\n eventManager.emit(Event.Show, content, options);\n } else {\n queue.push({ content, options });\n if (lazy && canUseDom) {\n lazy = false;\n containerDomNode = document.createElement('div');\n document.body.appendChild(containerDomNode);\n render(, containerDomNode);\n }\n }\n\n return options.toastId;\n}\n\n/**\n * Merge provided options with the defaults settings and generate the toastId\n */\nfunction mergeOptions(type: string, options?: ToastOptions) {\n return {\n ...options,\n type: (options && options.type) || type,\n toastId: getToastId(options)\n } as NotValidatedToastProps;\n}\n\nconst createToastByType = (type: string) => (\n content: ToastContent,\n options?: ToastOptions\n) => dispatchToast(content, mergeOptions(type, options));\n\nconst toast = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n\ntoast.success = createToastByType(TYPE.SUCCESS);\ntoast.info = createToastByType(TYPE.INFO);\ntoast.error = createToastByType(TYPE.ERROR);\ntoast.warning = createToastByType(TYPE.WARNING);\ntoast.dark = createToastByType(TYPE.DARK);\ntoast.warn = toast.warning;\n\n/**\n * Remove toast programmaticaly\n */\ntoast.dismiss = (id?: Id) => eventManager.emit(Event.Clear, id);\n\n/**\n * Clear waiting queue when limit is used\n */\ntoast.clearWaitingQueue = (params: ClearWaitingQueueParams = {}) =>\n eventManager.emit(Event.ClearWaitingQueue, params);\n\n/**\n * return true if one container is displaying the toast\n */\ntoast.isActive = (id: Id) => {\n let isToastActive = false;\n\n containers.forEach(container => {\n if (container.isToastActive && container.isToastActive(id)) {\n isToastActive = true;\n }\n });\n\n return isToastActive;\n};\n\ntoast.update = (toastId: Id, options: UpdateOptions = {}) => {\n // if you call toast and toast.update directly nothing will be displayed\n // this is why I defered the update\n setTimeout(() => {\n const toast = getToast(toastId, options as ToastOptions);\n if (toast) {\n const { props: oldOptions, content: oldContent } = toast;\n\n const nextOptions = {\n ...oldOptions,\n ...options,\n toastId: options.toastId || toastId,\n updateId: generateToastId()\n } as ToastProps & UpdateOptions;\n\n if (nextOptions.toastId !== toastId) nextOptions.staleId = toastId;\n\n const content = nextOptions.render || oldContent;\n delete nextOptions.render;\n\n dispatchToast(content, nextOptions);\n }\n }, 0);\n};\n\n/**\n * Used for controlled progress bar.\n */\ntoast.done = (id: Id) => {\n toast.update(id, {\n progress: 1\n });\n};\n\n/**\n * Track changes. The callback get the number of toast displayed\n *\n */\ntoast.onChange = (callback: OnChangeCallback) => {\n if (isFn(callback)) {\n eventManager.on(Event.Change, callback);\n }\n return () => {\n isFn(callback) && eventManager.off(Event.Change, callback);\n };\n};\n\n/**\n * Configure the ToastContainer when lazy mounted\n */\ntoast.configure = (config: ToastContainerProps = {}) => {\n lazy = true;\n containerConfig = config;\n};\n\ntoast.POSITION = POSITION;\ntoast.TYPE = TYPE;\n\n/**\n * Wait until the ToastContainer is mounted to dispatch the toast\n * and attach isActive method\n */\neventManager\n .on(Event.DidMount, (containerInstance: ContainerInstance) => {\n latestInstance = containerInstance.containerId || containerInstance;\n containers.set(latestInstance, containerInstance);\n\n queue.forEach(item => {\n eventManager.emit(Event.Show, item.content, item.options);\n });\n\n queue = [];\n })\n .on(Event.WillUnmount, (containerInstance: ContainerInstance) => {\n containers.delete(containerInstance.containerId || containerInstance);\n\n if (containers.size === 0) {\n eventManager\n .off(Event.Show)\n .off(Event.Clear)\n .off(Event.ClearWaitingQueue);\n }\n\n if (canUseDom && containerDomNode) {\n document.body.removeChild(containerDomNode);\n }\n });\n\nexport { toast };\n","import PropTypes from 'prop-types';\nvar PropType = {};\n\nif (process.env.NODE_ENV !== 'production') {\n PropType = {\n value: PropTypes.shape({})\n };\n}\n\nexport var ThemeContextPropTypes = PropType;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ThemeContext } from 'styled-components';\nimport { deepMerge } from '../../utils';\nimport { ThemeContextPropTypes } from './propTypes';\n\nThemeContext.Extend = function (_ref) {\n var children = _ref.children,\n value = _ref.value;\n return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: deepMerge(theme, value)\n }, children);\n });\n};\n\nThemeContext.Extend.propTypes = {\n children: PropTypes.node.isRequired,\n value: PropTypes.shape({}).isRequired\n};\nThemeContext.propTypes = ThemeContextPropTypes;\nexport { ThemeContext };","import styled, { css } from 'styled-components';\nimport { baseStyle } from '../../utils';\nimport { defaultProps } from '../../default-props';\n\nvar fullStyle = function fullStyle(full) {\n if (full === 'min') return css([\"min-height:100vh;\"]);\n return css([\"width:100vw;height:100vh;overflow:auto;\"]);\n};\n\nvar StyledGrommet = styled.div.withConfig({\n displayName: \"StyledGrommet\",\n componentId: \"sc-19lkkz7-0\"\n})([\"\", \" \", \" \", \" \", \" \", \"\"], function (props) {\n return !props.plain && baseStyle;\n}, function (props) {\n return props.full && fullStyle(props.full);\n}, function (props) {\n return props.theme.global.font.face;\n}, function (props) {\n return props.theme.grommet.extend;\n}, function (props) {\n return props.cssVars && Object.keys(props.theme.global.colors).filter(function (k) {\n return typeof props.theme.global.colors[k] === 'string';\n }).map(function (k) {\n return \"--\" + k + \": \" + props.theme.global.colors[k] + \";\";\n }).join('\\n');\n});\nStyledGrommet.defaultProps = {};\nObject.setPrototypeOf(StyledGrommet.defaultProps, defaultProps);\nexport { StyledGrommet };","import PropTypes from 'prop-types';\nimport { backgroundDoc } from '../../utils/general-prop-types';\nvar PropType = {};\n\nif (process.env.NODE_ENV !== 'production') {\n PropType = {\n background: backgroundDoc,\n dir: PropTypes.oneOf(['rtl']),\n full: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['min'])]),\n options: PropTypes.shape({\n layer: PropTypes.shape({\n singleId: PropTypes.bool\n })\n }),\n plain: PropTypes.bool,\n cssVars: PropTypes.bool,\n theme: PropTypes.object,\n themeMode: PropTypes.oneOf(['dark', 'light']),\n userAgent: PropTypes.string,\n containerTarget: PropTypes.object,\n messages: PropTypes.shape({\n format: PropTypes.func,\n messages: PropTypes.shape({\n fileInput: PropTypes.shape({\n browse: PropTypes.string,\n dropPrompt: PropTypes.string,\n dropPromptMultiple: PropTypes.string,\n files: PropTypes.string,\n remove: PropTypes.string,\n removeAll: PropTypes.string\n }),\n form: PropTypes.shape({\n invalid: PropTypes.string,\n required: PropTypes.string\n }),\n menu: PropTypes.shape({\n openMenu: PropTypes.string,\n closeMenu: PropTypes.string\n }),\n rangeSelector: PropTypes.shape({\n lower: PropTypes.string,\n upper: PropTypes.string\n }),\n select: PropTypes.shape({\n multiple: PropTypes.string\n }),\n skipLinks: PropTypes.shape({\n skipTo: PropTypes.string\n }),\n tabs: PropTypes.shape({\n tabContents: PropTypes.string\n }),\n textInput: PropTypes.shape({\n enterSelect: PropTypes.string,\n suggestionsCount: PropTypes.string,\n suggestionsExist: PropTypes.string,\n suggestionIsOpen: PropTypes.string\n }),\n video: PropTypes.shape({\n closeMenu: PropTypes.string,\n fullScreen: PropTypes.string,\n progressMeter: PropTypes.string,\n scrubber: PropTypes.string,\n openMenu: PropTypes.string,\n pauseButton: PropTypes.string,\n playButton: PropTypes.string,\n volumeDown: PropTypes.string,\n volumeUp: PropTypes.string\n })\n })\n })\n };\n}\n\nexport var GrommetPropTypes = PropType;","var _excluded = [\"children\", \"full\", \"containerTarget\", \"theme\", \"options\", \"messages\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { ContainerTargetContext, ResponsiveContext, ThemeContext } from '../../contexts';\nimport { deepMerge, backgroundIsDark, getBreakpoint, getDeviceBreakpoint, normalizeColor, useForwardedRef } from '../../utils';\nimport { base as baseTheme } from '../../themes';\nimport { StyledGrommet } from './StyledGrommet';\nimport { RootsContext } from '../../contexts/RootsContext';\nimport { OptionsContext } from '../../contexts/OptionsContext';\nimport { format as _format, MessageContext } from '../../contexts/MessageContext';\nimport defaultMessages from '../../languages/default.json';\nimport { GrommetPropTypes } from './propTypes';\nvar FullGlobalStyle = createGlobalStyle([\"body{margin:0;}\"]);\n\nvar deviceResponsive = function deviceResponsive(userAgent, theme) {\n // log('--deviceResponsive', userAgent, theme);\n\n /*\n * Regexes provided for mobile and tablet detection are meant to replace\n * a full-featured specific library due to contributing a considerable size\n * into the bundle.\n *\n * User agents found https://deviceatlas.com/blog/list-of-user-agent-strings\n */\n if (userAgent) {\n if (/(tablet|ipad|playbook|silk)|(android(?!.*mobile))/i.test(userAgent)) {\n return getDeviceBreakpoint('tablet', theme);\n }\n\n if (/Mobile|iPhone|Android/.test(userAgent)) {\n return getDeviceBreakpoint('phone', theme);\n }\n\n return getDeviceBreakpoint('computer', theme);\n }\n\n return undefined;\n};\n\nvar defaultOptions = {};\nvar Grommet = /*#__PURE__*/forwardRef(function (props, ref) {\n var children = props.children,\n full = props.full,\n _props$containerTarge = props.containerTarget,\n containerTarget = _props$containerTarge === void 0 ? typeof document === 'object' ? document.body : undefined : _props$containerTarge,\n themeProp = props.theme,\n _props$options = props.options,\n options = _props$options === void 0 ? defaultOptions : _props$options,\n messagesProp = props.messages,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n var background = props.background,\n dir = props.dir,\n themeMode = props.themeMode,\n userAgent = props.userAgent;\n\n var _useState = useState(),\n stateResponsive = _useState[0],\n setResponsive = _useState[1];\n\n var _useState2 = useState([]),\n roots = _useState2[0],\n setRoots = _useState2[1];\n\n var theme = useMemo(function () {\n var nextTheme = deepMerge(baseTheme, themeProp || {}); // if user provides specific menu alignment, we don't want\n // the defaults to be included at all (can cause issues with controlMirror)\n // override merged value with themeProp value\n\n if (themeProp && themeProp.menu && themeProp.menu.drop && themeProp.menu.drop.align) {\n delete nextTheme.menu.drop.align;\n nextTheme.menu.drop.align = themeProp.menu.drop.align;\n }\n\n var themeBackground = nextTheme.global.colors.background;\n nextTheme.dark = (themeMode || nextTheme.defaultMode) === 'dark';\n var color = normalizeColor(background || themeBackground, nextTheme);\n nextTheme.dark = backgroundIsDark(color, nextTheme);\n nextTheme.baseBackground = background || themeBackground; // This allows DataTable to intelligently set the background of a pinned\n // header or footer.\n\n nextTheme.background = nextTheme.baseBackground;\n\n if (dir) {\n nextTheme.dir = dir;\n }\n\n return nextTheme;\n }, [background, dir, themeMode, themeProp]);\n var messages = useMemo(function () {\n // combine the passed in messages, if any, with the default\n // messages and format function.\n var nextMessages = deepMerge(defaultMessages, (messagesProp == null ? void 0 : messagesProp.messages) || {});\n return {\n messages: nextMessages,\n format: function format(opts) {\n var message = (messagesProp == null ? void 0 : messagesProp.format) && messagesProp.format(opts);\n return typeof message !== 'undefined' ? message : _format(opts, nextMessages);\n }\n };\n }, [messagesProp]);\n useEffect(function () {\n var onResize = function onResize() {\n setResponsive(getBreakpoint(document.body.clientWidth, theme));\n };\n\n window.addEventListener('resize', onResize);\n onResize();\n return function () {\n window.removeEventListener('resize', onResize);\n };\n }, [theme]);\n var responsive = stateResponsive || deviceResponsive(userAgent, theme) || theme.global.deviceBreakpoints.tablet;\n var grommetRef = useForwardedRef(ref);\n useEffect(function () {\n if (grommetRef.current) setRoots([grommetRef.current]);\n }, [grommetRef]);\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, /*#__PURE__*/React.createElement(ResponsiveContext.Provider, {\n value: responsive\n }, /*#__PURE__*/React.createElement(RootsContext.Provider, {\n value: roots\n }, /*#__PURE__*/React.createElement(ContainerTargetContext.Provider, {\n value: containerTarget\n }, /*#__PURE__*/React.createElement(OptionsContext.Provider, {\n value: options\n }, /*#__PURE__*/React.createElement(MessageContext.Provider, {\n value: messages\n }, /*#__PURE__*/React.createElement(StyledGrommet, _extends({\n full: full\n }, rest, {\n ref: grommetRef\n }), children), full && /*#__PURE__*/React.createElement(FullGlobalStyle, null)))))));\n});\nGrommet.displayName = 'Grommet';\nGrommet.propTypes = GrommetPropTypes;\nexport { Grommet };"],"sourceRoot":""}