UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 55 kB
{"version":3,"file":"toaster-CdjkCMtd.cjs","names":["__iconNode","createLucideIcon","__iconNode","createLucideIcon","__iconNode","createLucideIcon","createLucideIcon","createCollection","createContextScope","ToastProvider","React","ToastViewport","useComposedRefs","Primitive","VisuallyHidden","Toast","useControllableState","Presence","useCallbackRef","composeEventHandlers","Fragment","ReactDOM","Portal","ToastTitle","ToastDescription","ToastAction","ToastClose"],"sources":["../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/lucide-react/dist/esm/icons/circle-x.js","../node_modules/lucide-react/dist/esm/icons/info.js","../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/@radix-ui/react-toast/dist/index.mjs","../src/components/ui/toast.tsx","../src/components/ui/toaster.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/toast.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport * as DismissableLayer from \"@radix-ui/react-dismissable-layer\";\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PROVIDER_NAME = \"ToastProvider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(\"Toast\");\nvar [createToastContext, createToastScope] = createContextScope(\"Toast\", [createCollectionScope]);\nvar [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME);\nvar ToastProvider = /* @__PURE__ */ __name((props) => {\n const {\n __scopeToast,\n label = \"Notification\",\n duration = 5e3,\n swipeDirection = \"right\",\n swipeThreshold = 50,\n announcerContainer,\n children\n } = props;\n const [viewport, setViewport] = React.useState(null);\n const [toastCount, setToastCount] = React.useState(0);\n const isClosePausedRef = React.useRef(false);\n if (!label.trim()) {\n console.error(\n `Invalid prop \\`label\\` supplied to \\`${PROVIDER_NAME}\\`. Expected non-empty \\`string\\`.`\n );\n }\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n ToastProviderProvider,\n {\n scope: __scopeToast,\n label,\n duration,\n swipeDirection,\n swipeThreshold,\n toastCount,\n viewport,\n onViewportChange: setViewport,\n onToastAdd: React.useCallback(() => setToastCount((prevCount) => prevCount + 1), []),\n onToastRemove: React.useCallback(() => setToastCount((prevCount) => prevCount - 1), []),\n isClosePausedRef,\n announcerContainer,\n children\n }\n ) });\n}, \"ToastProvider\");\nvar VIEWPORT_NAME = \"ToastViewport\";\nvar VIEWPORT_DEFAULT_HOTKEY = [\"F8\"];\nvar VIEWPORT_PAUSE = \"toast.viewportPause\";\nvar VIEWPORT_RESUME = \"toast.viewportResume\";\nvar ToastViewport = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function ToastViewport2(props, forwardedRef) {\n const {\n __scopeToast,\n hotkey = VIEWPORT_DEFAULT_HOTKEY,\n label = \"Notifications ({hotkey})\",\n ...viewportProps\n } = props;\n const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);\n const getItems = useCollection(__scopeToast);\n const wrapperRef = React.useRef(null);\n const headFocusProxyRef = React.useRef(null);\n const tailFocusProxyRef = React.useRef(null);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n const hotkeyLabel = hotkey.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\");\n const hasToasts = context.toastCount > 0;\n React.useEffect(() => {\n const handleKeyDown = /* @__PURE__ */ __name((event) => {\n const isHotkeyPressed = hotkey.length !== 0 && hotkey.every((key) => event[key] || event.code === key);\n if (isHotkeyPressed) ref.current?.focus();\n }, \"handleKeyDown\");\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [hotkey]);\n React.useEffect(() => {\n const wrapper = wrapperRef.current;\n const viewport = ref.current;\n if (hasToasts && wrapper && viewport) {\n const handlePause = /* @__PURE__ */ __name(() => {\n if (!context.isClosePausedRef.current) {\n const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);\n viewport.dispatchEvent(pauseEvent);\n context.isClosePausedRef.current = true;\n }\n }, \"handlePause\");\n const handleResume = /* @__PURE__ */ __name(() => {\n if (context.isClosePausedRef.current) {\n const resumeEvent = new CustomEvent(VIEWPORT_RESUME);\n viewport.dispatchEvent(resumeEvent);\n context.isClosePausedRef.current = false;\n }\n }, \"handleResume\");\n const handleFocusOutResume = /* @__PURE__ */ __name((event) => {\n const isFocusMovingOutside = !wrapper.contains(event.relatedTarget);\n if (isFocusMovingOutside) handleResume();\n }, \"handleFocusOutResume\");\n const handlePointerLeaveResume = /* @__PURE__ */ __name(() => {\n const isFocusInside = wrapper.contains(document.activeElement);\n if (!isFocusInside) handleResume();\n }, \"handlePointerLeaveResume\");\n wrapper.addEventListener(\"focusin\", handlePause);\n wrapper.addEventListener(\"focusout\", handleFocusOutResume);\n wrapper.addEventListener(\"pointermove\", handlePause);\n wrapper.addEventListener(\"pointerleave\", handlePointerLeaveResume);\n window.addEventListener(\"blur\", handlePause);\n window.addEventListener(\"focus\", handleResume);\n return () => {\n wrapper.removeEventListener(\"focusin\", handlePause);\n wrapper.removeEventListener(\"focusout\", handleFocusOutResume);\n wrapper.removeEventListener(\"pointermove\", handlePause);\n wrapper.removeEventListener(\"pointerleave\", handlePointerLeaveResume);\n window.removeEventListener(\"blur\", handlePause);\n window.removeEventListener(\"focus\", handleResume);\n };\n }\n }, [hasToasts, context.isClosePausedRef]);\n const getSortedTabbableCandidates = React.useCallback(\n ({ tabbingDirection }) => {\n const toastItems = getItems();\n const tabbableCandidates = toastItems.map((toastItem) => {\n const toastNode = toastItem.ref.current;\n const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];\n return tabbingDirection === \"forwards\" ? toastTabbableCandidates : toastTabbableCandidates.reverse();\n });\n return (tabbingDirection === \"forwards\" ? tabbableCandidates.reverse() : tabbableCandidates).flat();\n },\n [getItems]\n );\n React.useEffect(() => {\n const viewport = ref.current;\n if (viewport) {\n const handleKeyDown = /* @__PURE__ */ __name((event) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;\n const isTabKey = event.key === \"Tab\" && !isMetaKey;\n if (isTabKey) {\n const focusedElement = document.activeElement;\n const isTabbingBackwards = event.shiftKey;\n const targetIsViewport = event.target === viewport;\n if (targetIsViewport && isTabbingBackwards) {\n headFocusProxyRef.current?.focus();\n return;\n }\n const tabbingDirection = isTabbingBackwards ? \"backwards\" : \"forwards\";\n const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });\n const index = sortedCandidates.findIndex((candidate) => candidate === focusedElement);\n if (focusFirst(sortedCandidates.slice(index + 1))) {\n event.preventDefault();\n } else {\n isTabbingBackwards ? headFocusProxyRef.current?.focus() : tailFocusProxyRef.current?.focus();\n }\n }\n }, \"handleKeyDown\");\n viewport.addEventListener(\"keydown\", handleKeyDown);\n return () => viewport.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [getItems, getSortedTabbableCandidates]);\n return /* @__PURE__ */ jsxs(\n DismissableLayer.Branch,\n {\n ref: wrapperRef,\n role: \"region\",\n \"aria-label\": label.replace(\"{hotkey}\", hotkeyLabel),\n tabIndex: -1,\n style: { pointerEvents: hasToasts ? void 0 : \"none\" },\n children: [\n hasToasts && /* @__PURE__ */ jsx(\n FocusProxy,\n {\n ref: headFocusProxyRef,\n onFocusFromOutsideViewport: () => {\n const tabbableCandidates = getSortedTabbableCandidates({\n tabbingDirection: \"forwards\"\n });\n focusFirst(tabbableCandidates);\n }\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(Primitive.ol, { tabIndex: -1, ...viewportProps, ref: composedRefs }) }),\n hasToasts && /* @__PURE__ */ jsx(\n FocusProxy,\n {\n ref: tailFocusProxyRef,\n onFocusFromOutsideViewport: () => {\n const tabbableCandidates = getSortedTabbableCandidates({\n tabbingDirection: \"backwards\"\n });\n focusFirst(tabbableCandidates);\n }\n }\n )\n ]\n }\n );\n }, \"ToastViewport\")\n);\nvar FOCUS_PROXY_NAME = \"ToastFocusProxy\";\nvar FocusProxy = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ToastFocusProxy(props, forwardedRef) {\n const { __scopeToast, onFocusFromOutsideViewport, ...proxyProps } = props;\n const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast);\n return /* @__PURE__ */ jsx(\n VisuallyHidden,\n {\n tabIndex: 0,\n ...proxyProps,\n ref: forwardedRef,\n style: { position: \"fixed\" },\n onFocus: (event) => {\n const prevFocusedElement = event.relatedTarget;\n const isFocusFromOutsideViewport = !context.viewport?.contains(prevFocusedElement);\n if (isFocusFromOutsideViewport) onFocusFromOutsideViewport();\n }\n }\n );\n }, \"ToastFocusProxy\")\n);\nvar TOAST_NAME = \"Toast\";\nvar TOAST_SWIPE_START = \"toast.swipeStart\";\nvar TOAST_SWIPE_MOVE = \"toast.swipeMove\";\nvar TOAST_SWIPE_CANCEL = \"toast.swipeCancel\";\nvar TOAST_SWIPE_END = \"toast.swipeEnd\";\nvar Toast = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Toast2(props, forwardedRef) {\n const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? true,\n onChange: onOpenChange,\n caller: TOAST_NAME\n });\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || open, children: /* @__PURE__ */ jsx(\n ToastImpl,\n {\n open,\n ...toastProps,\n ref: forwardedRef,\n onClose: () => setOpen(false),\n onPause: useCallbackRef(props.onPause),\n onResume: useCallbackRef(props.onResume),\n onSwipeStart: composeEventHandlers(props.onSwipeStart, (event) => {\n event.currentTarget.setAttribute(\"data-swipe\", \"start\");\n }),\n onSwipeMove: composeEventHandlers(props.onSwipeMove, (event) => {\n const { x, y } = event.detail.delta;\n event.currentTarget.setAttribute(\"data-swipe\", \"move\");\n event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-x\", `${x}px`);\n event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-y\", `${y}px`);\n }),\n onSwipeCancel: composeEventHandlers(props.onSwipeCancel, (event) => {\n event.currentTarget.setAttribute(\"data-swipe\", \"cancel\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-x\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-y\");\n }),\n onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => {\n const { x, y } = event.detail.delta;\n event.currentTarget.setAttribute(\"data-swipe\", \"end\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-x\", `${x}px`);\n event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-y\", `${y}px`);\n setOpen(false);\n })\n }\n ) });\n }, \"Toast\")\n);\nvar [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(TOAST_NAME, {\n onClose() {\n }\n});\nvar ToastImpl = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function ToastImpl2(props, forwardedRef) {\n const {\n __scopeToast,\n type = \"foreground\",\n duration: durationProp,\n open,\n onClose,\n onEscapeKeyDown,\n onPause,\n onResume,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n ...toastProps\n } = props;\n const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n const getItems = useCollection(__scopeToast);\n const [node, setNode] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setNode);\n const pointerStartRef = React.useRef(null);\n const swipeDeltaRef = React.useRef(null);\n const duration = durationProp || context.duration;\n const closeTimerStartTimeRef = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const closeTimerRef = React.useRef(0);\n const { onToastAdd, onToastRemove } = context;\n const handleClose = useCallbackRef(() => {\n const isFocusInToast = node?.contains(document.activeElement);\n if (isFocusInToast) context.viewport?.focus();\n onClose();\n });\n const startTimer = React.useCallback(\n (duration2) => {\n if (!duration2 || duration2 === Infinity) return;\n window.clearTimeout(closeTimerRef.current);\n closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime();\n closeTimerRef.current = window.setTimeout(handleClose, duration2);\n },\n [handleClose]\n );\n React.useEffect(() => {\n const viewport = context.viewport;\n if (viewport) {\n const handleResume = /* @__PURE__ */ __name(() => {\n startTimer(closeTimerRemainingTimeRef.current);\n onResume?.();\n }, \"handleResume\");\n const handlePause = /* @__PURE__ */ __name(() => {\n const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current;\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n window.clearTimeout(closeTimerRef.current);\n onPause?.();\n }, \"handlePause\");\n viewport.addEventListener(VIEWPORT_PAUSE, handlePause);\n viewport.addEventListener(VIEWPORT_RESUME, handleResume);\n return () => {\n viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);\n viewport.removeEventListener(VIEWPORT_RESUME, handleResume);\n };\n }\n }, [context.viewport, duration, onPause, onResume, startTimer]);\n React.useEffect(() => {\n if (open && !context.isClosePausedRef.current) startTimer(duration);\n }, [open, duration, context.isClosePausedRef, startTimer]);\n React.useEffect(() => {\n return () => {\n window.clearTimeout(closeTimerRef.current);\n };\n }, []);\n React.useEffect(() => {\n onToastAdd();\n return () => onToastRemove();\n }, [onToastAdd, onToastRemove]);\n const announceTextContent = React.useMemo(() => {\n return node ? getAnnounceTextContent(node) : null;\n }, [node]);\n if (!context.viewport) return null;\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n announceTextContent && /* @__PURE__ */ jsx(\n ToastAnnounce,\n {\n __scopeToast,\n role: \"status\",\n \"aria-live\": type === \"foreground\" ? \"assertive\" : \"polite\",\n children: announceTextContent\n }\n ),\n /* @__PURE__ */ jsx(ToastInteractiveProvider, { scope: __scopeToast, onClose: handleClose, children: ReactDOM.createPortal(\n /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n DismissableLayer.Root,\n {\n asChild: true,\n onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, (event) => {\n const isFocusInToast = getItems().some(\n (item) => item.ref.current?.contains(event.target)\n );\n if (!isFocusInToast) {\n handleClose();\n }\n }),\n children: /* @__PURE__ */ jsx(\n Primitive.li,\n {\n tabIndex: 0,\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-swipe-direction\": context.swipeDirection,\n ...toastProps,\n ref: composedRefs,\n style: { userSelect: \"none\", touchAction: \"none\", ...props.style },\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key !== \"Escape\") return;\n onEscapeKeyDown?.(event.nativeEvent);\n if (!event.nativeEvent.defaultPrevented) {\n handleClose();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (event.button !== 0) return;\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (!pointerStartRef.current) return;\n const x = event.clientX - pointerStartRef.current.x;\n const y = event.clientY - pointerStartRef.current.y;\n const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n const isHorizontalSwipe = [\"left\", \"right\"].includes(context.swipeDirection);\n const clamp = [\"left\", \"up\"].includes(context.swipeDirection) ? Math.min : Math.max;\n const clampedX = isHorizontalSwipe ? clamp(0, x) : 0;\n const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0;\n const moveStartBuffer = event.pointerType === \"touch\" ? 10 : 2;\n const delta = { x: clampedX, y: clampedY };\n const eventDetail = { originalEvent: event, delta };\n if (hasSwipeMoveStarted) {\n swipeDeltaRef.current = delta;\n handleAndDispatchCustomEvent(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail, {\n discrete: false\n });\n } else if (isDeltaInDirection(delta, context.swipeDirection, moveStartBuffer)) {\n swipeDeltaRef.current = delta;\n handleAndDispatchCustomEvent(TOAST_SWIPE_START, onSwipeStart, eventDetail, {\n discrete: false\n });\n event.target.setPointerCapture(event.pointerId);\n } else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) {\n pointerStartRef.current = null;\n }\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const delta = swipeDeltaRef.current;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n swipeDeltaRef.current = null;\n pointerStartRef.current = null;\n if (delta) {\n const toast = event.currentTarget;\n const eventDetail = { originalEvent: event, delta };\n if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) {\n handleAndDispatchCustomEvent(TOAST_SWIPE_END, onSwipeEnd, eventDetail, {\n discrete: true\n });\n } else {\n handleAndDispatchCustomEvent(\n TOAST_SWIPE_CANCEL,\n onSwipeCancel,\n eventDetail,\n {\n discrete: true\n }\n );\n }\n toast.addEventListener(\"click\", (event2) => event2.preventDefault(), {\n once: true\n });\n }\n })\n }\n )\n }\n ) }),\n context.viewport\n ) })\n ] });\n }, \"ToastImpl\")\n);\nvar ToastAnnounce = /* @__PURE__ */ __name((props) => {\n const { __scopeToast, children, ...announceProps } = props;\n const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);\n const [isAnnounced, setIsAnnounced] = React.useState(false);\n useNextFrame(() => setRenderAnnounceText(true));\n React.useEffect(() => {\n const timer = window.setTimeout(() => setIsAnnounced(true), 1e3);\n return () => window.clearTimeout(timer);\n }, []);\n return isAnnounced ? null : /* @__PURE__ */ jsx(Portal, { asChild: true, container: context.announcerContainer || void 0, children: /* @__PURE__ */ jsx(VisuallyHidden, { ...announceProps, children: renderAnnounceText && /* @__PURE__ */ jsxs(Fragment, { children: [\n context.label,\n \" \",\n children\n ] }) }) });\n}, \"ToastAnnounce\");\nvar ToastTitle = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function ToastTitle2(props, forwardedRef) {\n const { __scopeToast, ...titleProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...titleProps, ref: forwardedRef });\n }, \"ToastTitle\")\n);\nvar ToastDescription = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ToastDescription2(props, forwardedRef) {\n const { __scopeToast, ...descriptionProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...descriptionProps, ref: forwardedRef });\n }, \"ToastDescription\")\n);\nvar ACTION_NAME = \"ToastAction\";\nvar ToastAction = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function ToastAction2(props, forwardedRef) {\n const { altText, ...actionProps } = props;\n if (!altText.trim()) {\n console.error(\n `Invalid prop \\`altText\\` supplied to \\`${ACTION_NAME}\\`. Expected non-empty \\`string\\`.`\n );\n return null;\n }\n return /* @__PURE__ */ jsx(ToastAnnounceExclude, { altText, asChild: true, children: /* @__PURE__ */ jsx(ToastClose, { ...actionProps, ref: forwardedRef }) });\n }, \"ToastAction\")\n);\nvar CLOSE_NAME = \"ToastClose\";\nvar ToastClose = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function ToastClose2(props, forwardedRef) {\n const { __scopeToast, ...closeProps } = props;\n const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);\n return /* @__PURE__ */ jsx(ToastAnnounceExclude, { asChild: true, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, interactiveContext.onClose)\n }\n ) });\n }, \"ToastClose\")\n);\nvar ToastAnnounceExclude = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function ToastAnnounceExclude2(props, forwardedRef) {\n const { __scopeToast, altText, ...announceExcludeProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-toast-announce-exclude\": \"\",\n \"data-radix-toast-announce-alt\": altText || void 0,\n ...announceExcludeProps,\n ref: forwardedRef\n }\n );\n}, \"ToastAnnounceExclude\"));\nfunction getAnnounceTextContent(container) {\n const textContent = [];\n const childNodes = Array.from(container.childNodes);\n childNodes.forEach((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent) textContent.push(node.textContent);\n if (isHTMLElement(node)) {\n const isHidden = node.ariaHidden || node.hidden || node.style.display === \"none\";\n const isExcluded = node.dataset.radixToastAnnounceExclude === \"\";\n if (!isHidden) {\n if (isExcluded) {\n const altText = node.dataset.radixToastAnnounceAlt;\n if (altText) textContent.push(altText);\n } else {\n textContent.push(...getAnnounceTextContent(node));\n }\n }\n }\n });\n return textContent;\n}\n__name(getAnnounceTextContent, \"getAnnounceTextContent\");\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const currentTarget = detail.originalEvent.currentTarget;\n const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail });\n if (handler) currentTarget.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(currentTarget, event);\n } else {\n currentTarget.dispatchEvent(event);\n }\n}\n__name(handleAndDispatchCustomEvent, \"handleAndDispatchCustomEvent\");\nvar isDeltaInDirection = /* @__PURE__ */ __name((delta, direction, threshold = 0) => {\n const deltaX = Math.abs(delta.x);\n const deltaY = Math.abs(delta.y);\n const isDeltaX = deltaX > deltaY;\n if (direction === \"left\" || direction === \"right\") {\n return isDeltaX && deltaX > threshold;\n } else {\n return !isDeltaX && deltaY > threshold;\n }\n}, \"isDeltaInDirection\");\nfunction useNextFrame(callback = () => {\n}) {\n const fn = useCallbackRef(callback);\n useLayoutEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n raf1 = window.requestAnimationFrame(() => raf2 = window.requestAnimationFrame(fn));\n return () => {\n window.cancelAnimationFrame(raf1);\n window.cancelAnimationFrame(raf2);\n };\n }, [fn]);\n}\n__name(useNextFrame, \"useNextFrame\");\nfunction isHTMLElement(node) {\n return node.nodeType === node.ELEMENT_NODE;\n}\n__name(isHTMLElement, \"isHTMLElement\");\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: /* @__PURE__ */ __name((node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }, \"acceptNode\")\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\n__name(getTabbableCandidates, \"getTabbableCandidates\");\nfunction focusFirst(candidates) {\n const previouslyFocusedElement = document.activeElement;\n return candidates.some((candidate) => {\n if (candidate === previouslyFocusedElement) return true;\n candidate.focus();\n return document.activeElement !== previouslyFocusedElement;\n });\n}\n__name(focusFirst, \"focusFirst\");\nvar Provider = ToastProvider;\nvar Viewport = ToastViewport;\nvar Root2 = Toast;\nvar Title = ToastTitle;\nvar Description = ToastDescription;\nvar Action = ToastAction;\nvar Close = ToastClose;\nexport {\n Action,\n Close,\n Description,\n Provider,\n Root2 as Root,\n Title,\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n Viewport,\n createToastScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { CircleCheckBig, CircleX, Info, TriangleAlert, X } from 'lucide-react';\nimport { Toast as ToastPrimitives } from 'radix-ui';\nimport React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastContext = React.createContext<{\n variant: 'default' | 'success' | 'warning' | 'destructive' | 'info' | null | undefined;\n} | null>(null);\n\nconst ToastViewport = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n {...props}\n ref={ref}\n className={cn(\n 'fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105',\n className,\n )}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative shadow-xs bg-primary-white flex w-full text-content-primary items-center justify-between flex gap-2 overflow-hidden rounded-sm border border-stroke p-2 pr-6 transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full sm:data-[state=open]:slide-in-from-bottom-full',\n {\n variants: {\n variant: {\n default: 'border border-stroke',\n success: 'border-t-4 border-success',\n warning: 'border-t-4 border-warning',\n info: 'border-t-4 border-info',\n destructive: 'border-t-4 border-error',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst toastTitleVariants = cva('', {\n variants: {\n variant: {\n default: 'text-content-primary',\n success: 'text-success',\n warning: 'text-warning',\n info: 'text-info',\n destructive: 'text-error',\n },\n },\n defaultVariants: { variant: 'default' },\n});\n\nconst Toast = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastContext.Provider value={{ variant }}>\n <ToastPrimitives.Root\n {...props}\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n />\n </ToastContext.Provider>\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n {...props}\n ref={ref}\n className={cn(\n 'inline-flex h-8 shrink-0 items-center justify-center rounded-none bg-transparent px-3 font-medium text-content-primary text-sm transition-colors hover:bg-surface focus:outline-hidden focus:ring-1 disabled:pointer-events-none disabled:opacity-disabled',\n className,\n )}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n {...props}\n ref={ref}\n className={cn(\n 'absolute top-1 right-1 rounded-md p-1 text-content-primary/50 opacity-0 transition-opacity hover:text-content-primary focus:opacity-100 focus:outline-hidden focus:ring-1 group-hover:opacity-100',\n className,\n )}\n toast-close=''\n >\n <X className='h-4 w-4' />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => {\n const context = React.useContext(ToastContext);\n\n const combinedClasses = cn(\n toastTitleVariants({ variant: context?.variant }),\n 'text-lg font-bold [&+div]:text-xs',\n className,\n );\n let icon: React.ReactNode = null;\n switch (context?.variant) {\n case 'destructive':\n icon = <CircleX className='h-4 w-4 stroke-error' strokeWidth={2} />;\n break;\n case 'success':\n icon = <CircleCheckBig className='h-4 w-4 stroke-success' strokeWidth={2} />;\n break;\n case 'warning':\n icon = <TriangleAlert className='h-4 w-4 stroke-warning' strokeWidth={2} />;\n break;\n case 'info':\n icon = <Info className='h-4 w-4 stroke-info' strokeWidth={2} />;\n break;\n default:\n icon = null;\n break;\n }\n return (\n <div className='flex items-center gap-x-1'>\n {icon}\n <ToastPrimitives.Title {...props} ref={ref} className={combinedClasses} />\n </div>\n );\n});\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ComponentRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n {...props}\n ref={ref}\n className={cn('text-base text-content-secondary opacity-90', className)}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n Toast,\n ToastAction,\n type ToastActionElement,\n ToastClose,\n ToastDescription,\n type ToastProps,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n};\n","import {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from '@/components/ui/toast';\nimport { useToast } from '@/hooks/use-toast';\n\nfunction Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(({ id, title, description, action, ...props }) => {\n return (\n <Toast {...props} key={id}>\n <div className='grid gap-1'>\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && <ToastDescription>{description}</ToastDescription>}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n\nexport { Toaster };\n"],"x_google_ignoreList":[0,1,2,3,4],"mappings":"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