{"version":3,"sources":["../../src/adapters/sonner.ts"],"names":["warned","warnOnce","msg","logger","sonnerAdapter","content","options","onDismiss","sonner","toastId","o","sonnerRef","handle"],"mappings":"mdAUA,IAAIA,CAAAA,CAAS,KAAA,CACb,SAASC,CAAAA,CAASC,CAAAA,CAAmB,CAC/BF,CAAAA,GAGJA,CAAAA,CAAS,IAAA,CACTG,aAAAA,CAAO,IAAA,CAAKD,CAAG,CAAA,EACjB,CAiBO,IAAME,CAAAA,CAA8B,CACzC,EAAA,CAAI,QAAA,CAEJ,MAAM,MAAA,CAAO,CACX,OAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CACF,CAAA,CAA+D,CAC7D,IAAIC,CAAAA,CAAyC,IAAA,CAC7C,GAAI,CACFA,CAAAA,CAAS,MAAM,OAAO,QAAQ,EAChC,CAAA,KAAQ,CACN,OAAAP,CAAAA,CAAS,0EAAqE,CAAA,CACvE,IACT,CAEA,GACE,CAACO,CAAAA,EACD,OAAOA,CAAAA,CAAO,KAAA,EAAU,UAAA,EACxB,OAAOA,CAAAA,CAAO,KAAA,CAAM,MAAA,EAAW,UAAA,CAE/B,OAAAP,CAAAA,CACE,oGACF,CAAA,CACO,IAAA,CAGL,OAAO,QAAA,CAAa,GAAA,EAAe,CAAC,QAAA,CAAS,aAAA,CAAc,uBAAuB,CAAA,EACpFA,CAAAA,CACE,kHACF,CAAA,CAMF,IAAMQ,CAAAA,CAAUD,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAYE,YAAA,CAAA,aAAA,CAAoBA,YAAA,CAAA,QAAA,CAAU,IAAA,CAAML,CAAO,CAAA,CAAG,CAC5F,SAAUC,CAAAA,EAAS,QAAA,EAAY,GAAA,CAC/B,QAAA,CAAUA,CAAAA,EAAS,QAAA,EAAY,cAAA,CAC/B,SAAA,CAAAC,CACF,CAAC,CAAA,CAIKI,CAAAA,CAAYH,CAAAA,CAClB,OAAO,CACL,EAAA,CAAI,OAAOC,CAAO,CAAA,CAClB,OAAA,CAAS,IAAME,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAQF,CAAO,CAChD,CACF,CAAA,CAEA,OAAA,CAAQG,CAAAA,CAAkC,CACxCA,CAAAA,EAAQ,OAAA,GACV,CACF","file":"sonner.cjs","sourcesContent":["'use client'\n\nimport { logger } from '@tour-kit/core/engine'\nimport * as React from 'react'\nimport type {\n  ToastAdapter,\n  ToastAdapterHandle,\n  ToastAdapterRenderArgs,\n} from '../types/toast-adapter'\n\nlet warned = false\nfunction warnOnce(msg: string): void {\n  if (warned) return\n  // One-time visibility for misconfiguration. Respects `logger.configure({ level })`\n  // so consumers that silence the logger don't get unexpected console output.\n  warned = true\n  logger.warn(msg)\n}\n\n/**\n * Peer-optional Sonner adapter.\n *\n * Consumer setup:\n *   1. `pnpm add sonner` (>=1.0.0 <3)\n *   2. Render `<Toaster />` from `'sonner'` once in the app shell.\n *   3. Pass this adapter to `<AnnouncementsProvider toastAdapter={sonnerAdapter}>`.\n *\n * If `sonner` is missing or its `toast()` export is unavailable (e.g., major\n * version mismatch), `render` returns `null` and emits a one-time dev warning;\n * the provider then falls back to the built-in `<AnnouncementToast>` portal.\n *\n * The dynamic `import('sonner')` lives inside `render` so this file remains\n * loadable even when `sonner` is not installed.\n */\nexport const sonnerAdapter: ToastAdapter = {\n  id: 'sonner',\n\n  async render({\n    content,\n    options,\n    onDismiss,\n  }: ToastAdapterRenderArgs): Promise<ToastAdapterHandle | null> {\n    let sonner: typeof import('sonner') | null = null\n    try {\n      sonner = await import('sonner')\n    } catch {\n      warnOnce('sonnerAdapter could not load sonner — falling back to portal toast.')\n      return null\n    }\n\n    if (\n      !sonner ||\n      typeof sonner.toast !== 'function' ||\n      typeof sonner.toast.custom !== 'function'\n    ) {\n      warnOnce(\n        'sonnerAdapter loaded sonner but toast.custom() is unavailable — falling back to portal toast.'\n      )\n      return null\n    }\n\n    if (typeof document !== 'undefined' && !document.querySelector('[data-sonner-toaster]')) {\n      warnOnce(\n        'sonnerAdapter requires <Toaster /> to be rendered in your app. See https://sonner.emilkowal.ski/getting-started.'\n      )\n    }\n\n    // toast.custom expects React.ReactElement; wrap content (ReactNode) in a\n    // Fragment so any node — including strings, numbers, or arrays — passes\n    // the type contract without forcing a JSX file extension.\n    const toastId = sonner.toast.custom(() => React.createElement(React.Fragment, null, content), {\n      duration: options?.duration ?? 5000,\n      position: options?.position ?? 'bottom-right',\n      onDismiss,\n    })\n\n    // Capture sonner reference for the dismiss closure since the outer var\n    // could be re-narrowed in TS.\n    const sonnerRef = sonner\n    return {\n      id: String(toastId),\n      dismiss: () => sonnerRef.toast.dismiss(toastId),\n    }\n  },\n\n  dismiss(handle: ToastAdapterHandle): void {\n    handle?.dismiss()\n  },\n}\n"]}