{"version":3,"sources":["../src/notifications/types.ts","../src/notifications/LegionNotifications.tsx"],"names":["LegionNotifications"],"mappings":";;;;;;AA2IO,IAAM,2BAAA,GAGT;AAAA,EACF,oBAAA,EAAsB,wBAAA;AAAA,EACtB,cAAA,EAAgB,kBAAA;AAAA,EAChB,uBAAA,EAAyB,4BAAA;AAAA,EACzB,gBAAA,EAAkB,oBAAA;AAAA,EAClB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,YAAA,EAAc,eAAA;AAAA,EACd,WAAA,EAAa,cAAA;AAAA,EACb,iBAAA,EAAmB,qBAAA;AAAA,EACnB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,gBAAA,EAAkB,oBAAA;AAAA,EAClB,WAAA,EAAa,eAAA;AAAA,EACb,gBAAA,EAAkB,qBAAA;AAAA,EAClB,eAAA,EAAiB,mBAAA;AAAA,EACjB,eAAA,EAAiB,mBAAA;AAAA,EACjB,eAAA,EAAiB,mBAAA;AAAA,EACjB,gBAAA,EAAkB,oBAAA;AAAA,EAClB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,iBAAA;AAAA,EACf,iBAAA,EAAmB,qBAAA;AAAA,EACnB,oBAAA,EAAsB,wBAAA;AAAA,EACtB,eAAA,EAAiB,mBAAA;AAAA,EACjB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA,EAAgB,kBAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,kBAAA;AAAA,EAChB,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,kBAAA;AAAA,EAChB,gBAAA,EAAkB,oBAAA;AAAA,EAClB,aAAA,EAAe,iBAAA;AAAA,EACf,kBAAA,EAAoB,sBAAA;AAAA,EACpB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,aAAA,EAAe,iBAAA;AAAA,EACf,iBAAA,EAAmB,qBAAA;AAAA,EACnB,aAAA,EAAe,iBAAA;AAAA,EACf,gBAAA,EAAkB,oBAAA;AAAA,EAClB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,uBAAA,EAAyB,2BAAA;AAAA,EACzB,eAAA,EAAiB,mBAAA;AAAA,EACjB,gBAAA,EAAkB;AACpB;ACpKO,SAAS,4BACd,KAAA,EACQ;AACR,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,KAAA,GAAQ,OAAA;AAAA,IACR,gBAAA,GAAmB,EAAA;AAAA,IACnB,WAAA,GAAc,IAAA;AAAA,IACd,UAAA,GAAa,sBAAA;AAAA,IACb,aAAA,GAAgB,4BAAA;AAAA,IAChB,WAAA;AAAA,IACA,SAAA,GAAY,MAAA;AAAA,IACZ;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,uBAAA,EAAyB,OAAO,CAAA;AACpD,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AACnC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,kBAAA,EAAoB,MAAA,CAAO,gBAAgB,CAAC,CAAA;AACjE,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,aAAA,EAAe,MAAA,CAAO,WAAW,CAAC,CAAA;AAEvD,EAAA,IAAI,UAAA,EAAY,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,cAAc,UAAU,CAAA;AAC7D,EAAA,IAAI,aAAA,EAAe,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,iBAAiB,aAAa,CAAA;AAGtE,EAAA,MAAM,mBAAA,GACJ,WAAA,IAAA,IAAA,GAAA,WAAA,GAAgB,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAC9C,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,aAAA,EAAe,mBAAmB,CAAA;AAGvD,EAAA,MAAM,UAAA,GAA2D;AAAA,IAC/D,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,SAAS,IAAI,SAAA,GAAY,MAAA;AAClE,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,YAAa,CAAA;AAE/C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAAA,EACvC;AAKA,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,2BAA2B,CAAA;AAG3D,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,IAAA,IAAI,KAAA,KAAU,UAAa,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AACrE,MAAA,GAAA,CAAI,aAAa,GAAA,CAAI,2BAAA,CAA4B,GAAG,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACtE;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAqBO,IAAM,mBAAA,GAAsB,UAAA,CAGjC,SAASA,oBAAAA,CAAoB,OAAO,GAAA,EAAK;AACzC,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,OAAA;AAAA,IACR,SAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,GAAQ,MAAA;AAAA,IACR,MAAA,GAAS,OAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAEhD,EAAA,mBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,SAAS,MAAM;AACb,QAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,QAAA,IAAI,iCAAQ,aAAA,EAAe;AACzB,UAAA,MAAA,CAAO,aAAA,CAAc,SAAS,MAAA,EAAO;AAAA,QACvC;AAAA,MACF;AAAA,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA;AAAA,IACV,MAAM,4BAA4B,KAAK,CAAA;AAAA,IACvC;AAAA,MACE,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG,MAAA,CAAO,IAAA,CAAK,2BAA2B,CAAA,CAAE,GAAA;AAAA,QAC1C,CAAC,CAAA,KAAM,IAAA,CAAK,CAAsB;AAAA;AACpC;AACF,GACF;AAGA,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AA/JvC,IAAA,IAAA,EAAA;AAgKI,IAAA,IAAI,SAAA,KAAA,CAAa,EAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,aAAA,CAAA,EAAe;AACjD,MAAA,SAAA,CAAU,QAAQ,aAAA,CAAc,WAAA;AAAA,QAC9B,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,SAAA,EAAU;AAAA,QACvC;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAS,EAAE,MAAA,EAAQ,eAAA,EAAiB,KAAA,EAAM,CAAA;AAAA,EAC5C,GAAG,CAAC,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,MAAM,CAAC,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,qCAAA,CAAA;AAAA,EACZ,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,cAAA,GAAsC;AAAA,IAC1C,OAAA,EAAS,OAAA;AAAA,IACT,KAAA;AAAA,IACA,eAAA,EAAiB,aAAA;AAAA,IACjB,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,WAAA,GAAmC;AAAA,IACvC,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP;AAAA,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,cAAA,EAChC,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA;AAAA,MACL,GAAA;AAAA,MACA,KAAA,EAAM,sBAAA;AAAA,MACN,KAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS;AAAA;AAAA,GACX,EACF,CAAA;AAEJ,CAAC","file":"notifications.mjs","sourcesContent":["/**\n * Theming props for the Notifications Widget.\n * These map to CSS custom properties used internally.\n */\nexport interface NotificationsThemingProps {\n  /** Container background color */\n  notifBackgroundColor?: string;\n  /** Primary text color */\n  notifTextColor?: string;\n  /** Secondary text color */\n  notifSecondaryTextColor?: string;\n  /** Border color */\n  notifBorderColor?: string;\n  /** Container border radius */\n  notifBorderRadius?: string;\n  /** Container padding */\n  notifPadding?: string;\n  /** Container box shadow */\n  notifShadow?: string;\n  /** Primary color */\n  notifPrimaryColor?: string;\n  /** Primary hover color */\n  notifPrimaryHover?: string;\n  /** Accent color (CSS) */\n  notifAccentColor?: string;\n  /** Notification item background */\n  notifItemBg?: string;\n  /** Notification item hover background */\n  notifItemHoverBg?: string;\n  /** Notification item border */\n  notifItemBorder?: string;\n  /** Notification item border radius */\n  notifItemRadius?: string;\n  /** Notification item box shadow */\n  notifItemShadow?: string;\n  /** Notification item padding */\n  notifItemPadding?: string;\n  /** Notification item gap */\n  notifItemGap?: string;\n  /** Unread notification background */\n  notifUnreadBg?: string;\n  /** Unread notification border */\n  notifUnreadBorder?: string;\n  /** Unread indicator color */\n  notifUnreadIndicator?: string;\n  /** Avatar size */\n  notifAvatarSize?: string;\n  /** Avatar border radius */\n  notifAvatarRadius?: string;\n  /** Avatar border */\n  notifAvatarBorder?: string;\n  /** Icon size */\n  notifIconSize?: string;\n  /** Icon color */\n  notifIconColor?: string;\n  /** Badge background */\n  notifBadgeBg?: string;\n  /** Badge text color */\n  notifBadgeColor?: string;\n  /** Badge size */\n  notifBadgeSize?: string;\n  /** Font family */\n  notifFontFamily?: string;\n  /** Title font size */\n  notifTitleSize?: string;\n  /** Title font weight */\n  notifTitleWeight?: string;\n  /** Body text font size */\n  notifBodySize?: string;\n  /** Timestamp font size */\n  notifTimestampSize?: string;\n  /** Empty state icon color */\n  notifEmptyIconColor?: string;\n  /** Empty state text color */\n  notifEmptyTextColor?: string;\n  /** Empty state icon size */\n  notifEmptyIconSize?: string;\n  /** Divider color */\n  notifDividerColor?: string;\n  /** Header background */\n  notifHeaderBg?: string;\n  /** Header border */\n  notifHeaderBorder?: string;\n  /** Button background */\n  notifButtonBg?: string;\n  /** Button text color */\n  notifButtonColor?: string;\n  /** Button border radius */\n  notifButtonRadius?: string;\n  /** Transition duration */\n  notifTransitionDuration?: string;\n  /** Hover scale factor */\n  notifHoverScale?: string;\n  /** Loader/spinner color */\n  notifLoaderColor?: string;\n}\n\n/**\n * Core configuration props for the Notifications Widget.\n */\nexport interface NotificationsWidgetProps extends NotificationsThemingProps {\n  /** Base URL of the Legion application (required) */\n  baseUrl: string;\n  /** JWT / API key for authenticated access (sent via postMessage, never in URL) */\n  authToken?: string;\n  /** User ID for notification lookup */\n  userId?: string;\n  /** Theme preset. Default: \"light\" */\n  theme?: \"light\" | \"dark\";\n  /** Maximum number of notifications. Default: 10 */\n  maxNotifications?: number;\n  /** Enable auto-refresh (every 30 s). Default: true */\n  autoRefresh?: boolean;\n  /** Title shown in empty state. Default: \"You're all caught up\" */\n  emptyTitle?: string;\n  /** Subtitle shown in empty state. Default: \"No notifications right now\" */\n  emptySubtitle?: string;\n  /** Accent color name. Default: \"blue\" (light) / \"gray\" (dark) */\n  accentColor?: string;\n  /** Icon for empty state. Default: \"bell\" */\n  emptyIcon?: \"bell\" | \"gift\" | \"activity\" | \"trophy\";\n  /** Widget width CSS value. Default: \"100%\" */\n  width?: string;\n  /** Widget height CSS value. Default: \"400px\" */\n  height?: string;\n  /** Additional CSS class name for the container */\n  className?: string;\n  /** Additional inline styles for the container */\n  style?: React.CSSProperties;\n  /** Callback when the widget iframe has loaded */\n  onLoad?: (detail: { widget: string; theme: string }) => void;\n  /** Callback when the widget iframe fails to load */\n  onError?: (message: string) => void;\n}\n\n/**\n * Mapping from camelCase theming prop names to the kebab-case query\n * parameter names used by the notifications widget iframe URL.\n */\nexport const NOTIF_THEMING_PROP_TO_PARAM: Record<\n  keyof NotificationsThemingProps,\n  string\n> = {\n  notifBackgroundColor: \"notif-background-color\",\n  notifTextColor: \"notif-text-color\",\n  notifSecondaryTextColor: \"notif-secondary-text-color\",\n  notifBorderColor: \"notif-border-color\",\n  notifBorderRadius: \"notif-border-radius\",\n  notifPadding: \"notif-padding\",\n  notifShadow: \"notif-shadow\",\n  notifPrimaryColor: \"notif-primary-color\",\n  notifPrimaryHover: \"notif-primary-hover\",\n  notifAccentColor: \"notif-accent-color\",\n  notifItemBg: \"notif-item-bg\",\n  notifItemHoverBg: \"notif-item-hover-bg\",\n  notifItemBorder: \"notif-item-border\",\n  notifItemRadius: \"notif-item-radius\",\n  notifItemShadow: \"notif-item-shadow\",\n  notifItemPadding: \"notif-item-padding\",\n  notifItemGap: \"notif-item-gap\",\n  notifUnreadBg: \"notif-unread-bg\",\n  notifUnreadBorder: \"notif-unread-border\",\n  notifUnreadIndicator: \"notif-unread-indicator\",\n  notifAvatarSize: \"notif-avatar-size\",\n  notifAvatarRadius: \"notif-avatar-radius\",\n  notifAvatarBorder: \"notif-avatar-border\",\n  notifIconSize: \"notif-icon-size\",\n  notifIconColor: \"notif-icon-color\",\n  notifBadgeBg: \"notif-badge-bg\",\n  notifBadgeColor: \"notif-badge-color\",\n  notifBadgeSize: \"notif-badge-size\",\n  notifFontFamily: \"notif-font-family\",\n  notifTitleSize: \"notif-title-size\",\n  notifTitleWeight: \"notif-title-weight\",\n  notifBodySize: \"notif-body-size\",\n  notifTimestampSize: \"notif-timestamp-size\",\n  notifEmptyIconColor: \"notif-empty-icon-color\",\n  notifEmptyTextColor: \"notif-empty-text-color\",\n  notifEmptyIconSize: \"notif-empty-icon-size\",\n  notifDividerColor: \"notif-divider-color\",\n  notifHeaderBg: \"notif-header-bg\",\n  notifHeaderBorder: \"notif-header-border\",\n  notifButtonBg: \"notif-button-bg\",\n  notifButtonColor: \"notif-button-color\",\n  notifButtonRadius: \"notif-button-radius\",\n  notifTransitionDuration: \"notif-transition-duration\",\n  notifHoverScale: \"notif-hover-scale\",\n  notifLoaderColor: \"notif-loader-color\",\n};\n\n","import {\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  type NotificationsWidgetProps,\n  type NotificationsThemingProps,\n  NOTIF_THEMING_PROP_TO_PARAM,\n} from \"./types\";\n\n/**\n * Ref handle exposed by LegionNotifications for imperative control.\n */\nexport interface LegionNotificationsHandle {\n  /** Reload the widget iframe */\n  refresh: () => void;\n}\n\n/**\n * Build the iframe src URL from widget props.\n */\nexport function buildNotificationsWidgetUrl(\n  props: NotificationsWidgetProps\n): string {\n  const {\n    baseUrl,\n    theme = \"light\",\n    maxNotifications = 10,\n    autoRefresh = true,\n    emptyTitle = \"You're all caught up\",\n    emptySubtitle = \"No notifications right now\",\n    accentColor,\n    emptyIcon = \"bell\",\n    userId,\n  } = props;\n\n  const url = new URL(\"/widget/notifications\", baseUrl);\n  url.searchParams.set(\"theme\", theme);\n  url.searchParams.set(\"maxNotifications\", String(maxNotifications));\n  url.searchParams.set(\"autoRefresh\", String(autoRefresh));\n\n  if (emptyTitle) url.searchParams.set(\"emptyTitle\", emptyTitle);\n  if (emptySubtitle) url.searchParams.set(\"emptySubtitle\", emptySubtitle);\n\n  // Default accent color depends on theme\n  const resolvedAccentColor =\n    accentColor ?? (theme === \"dark\" ? \"gray\" : \"blue\");\n  url.searchParams.set(\"accentColor\", resolvedAccentColor);\n\n  // Validate emptyIcon\n  const validIcons: Array<NotificationsWidgetProps[\"emptyIcon\"]> = [\n    \"bell\",\n    \"gift\",\n    \"activity\",\n    \"trophy\",\n  ];\n  const resolvedIcon = validIcons.includes(emptyIcon) ? emptyIcon : \"bell\";\n  url.searchParams.set(\"emptyIcon\", resolvedIcon!);\n\n  if (userId) {\n    url.searchParams.set(\"userId\", userId);\n  }\n\n  // NOTE: authToken is NEVER added to the URL – it's sent via postMessage\n\n  // Append theming CSS variable params\n  const themingKeys = Object.keys(NOTIF_THEMING_PROP_TO_PARAM) as Array<\n    keyof NotificationsThemingProps\n  >;\n  for (const key of themingKeys) {\n    const value = props[key];\n    if (value !== undefined && value !== null && String(value).length > 0) {\n      url.searchParams.set(NOTIF_THEMING_PROP_TO_PARAM[key], String(value));\n    }\n  }\n\n  return url.toString();\n}\n\n/**\n * LegionNotifications – a React component that embeds the Legion\n * Notifications widget (Supabase-backed) via an iframe.\n *\n * @example\n * ```tsx\n * import { LegionNotifications } from '@legionhandtech/lht-react-widgets';\n *\n * function App() {\n *   return (\n *     <LegionNotifications\n *       baseUrl=\"https://your-legion-domain.com\"\n *       authToken=\"your-jwt-token\"\n *       theme=\"light\"\n *     />\n *   );\n * }\n * ```\n */\nexport const LegionNotifications = forwardRef<\n  LegionNotificationsHandle,\n  NotificationsWidgetProps\n>(function LegionNotifications(props, ref) {\n  const {\n    theme = \"light\",\n    authToken,\n    userId,\n    maxNotifications,\n    autoRefresh,\n    emptyTitle,\n    emptySubtitle,\n    accentColor,\n    emptyIcon,\n    width = \"100%\",\n    height = \"400px\",\n    className,\n    style,\n    onLoad,\n    onError,\n    baseUrl,\n    ...rest\n  } = props;\n\n  const iframeRef = useRef<HTMLIFrameElement>(null);\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      refresh: () => {\n        const iframe = iframeRef.current;\n        if (iframe?.contentWindow) {\n          iframe.contentWindow.location.reload();\n        }\n      },\n    }),\n    []\n  );\n\n  const src = useMemo(\n    () => buildNotificationsWidgetUrl(props),\n    [\n      baseUrl,\n      theme,\n      userId,\n      maxNotifications,\n      autoRefresh,\n      emptyTitle,\n      emptySubtitle,\n      accentColor,\n      emptyIcon,\n      ...Object.keys(NOTIF_THEMING_PROP_TO_PARAM).map(\n        (k) => rest[k as keyof typeof rest]\n      ),\n    ]\n  );\n\n  // Send auth token via postMessage after iframe loads\n  const handleLoad = useCallback(() => {\n    if (authToken && iframeRef.current?.contentWindow) {\n      iframeRef.current.contentWindow.postMessage(\n        { type: \"AUTH_TOKEN\", token: authToken },\n        baseUrl\n      );\n    }\n    onLoad?.({ widget: \"notifications\", theme });\n  }, [authToken, baseUrl, theme, onLoad]);\n\n  const handleError = useCallback(() => {\n    onError?.(\"Failed to load notifications widget\");\n  }, [onError]);\n\n  const containerStyle: React.CSSProperties = {\n    display: \"block\",\n    width,\n    backgroundColor: \"transparent\",\n    ...style,\n  };\n\n  const iframeStyle: React.CSSProperties = {\n    border: \"none\",\n    borderRadius: \"8px\",\n    overflow: \"hidden\",\n    width: \"100%\",\n    height,\n  };\n\n  return (\n    <div className={className} style={containerStyle}>\n      <iframe\n        ref={iframeRef}\n        src={src}\n        title=\"Notifications Widget\"\n        width=\"100%\"\n        loading=\"lazy\"\n        style={iframeStyle}\n        onLoad={handleLoad}\n        onError={handleError}\n      />\n    </div>\n  );\n});\n\n"]}