{"version":3,"sources":["../src/index.ts","../src/RiffrecProvider.tsx","../src/capture/fiber.ts","../src/capture/console.ts","../src/capture/element.ts","../src/capture/events.ts","../src/capture/network.ts","../src/capture/screen.ts","../src/capture/voice.ts","../src/types.ts","../src/output/zip.ts","../src/output/session.ts","../src/RiffrecRecorder.tsx","../src/useRiffrec.ts"],"sourcesContent":["export { RiffrecProvider } from \"./RiffrecProvider\";\nexport { RiffrecRecorder, type RiffrecRecorderProps } from \"./RiffrecRecorder\";\nexport { useRiffrec } from \"./useRiffrec\";\nexport { DEFAULT_DISPLAY_MEDIA_OPTIONS, DEFAULT_DISPLAY_MEDIA_VIDEO } from \"./capture/screen\";\nexport type * from \"./types\";\n","import {\n  createContext,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type CSSProperties,\n  type ReactNode\n} from \"react\";\nimport * as React from \"react\";\nimport { ConsoleCapture } from \"./capture/console\";\nimport { EventCapture } from \"./capture/events\";\nimport { NetworkCapture } from \"./capture/network\";\nimport { ScreenCapture } from \"./capture/screen\";\nimport { VoiceCapture } from \"./capture/voice\";\nimport { SessionWriter } from \"./output/session\";\nimport type {\n  CaptureOutputs,\n  RiffrecConfig,\n  RiffrecContextValue,\n  RiffrecEvent,\n  RiffrecStatus,\n  SessionResult\n} from \"./types\";\n\nconst DEFAULT_FORCE_ENABLE_PARAM = \"riffrec\";\nconst ENABLE_PARAM_VALUES = new Set([\"\", \"1\", \"true\", \"on\", \"yes\"]);\n\nconst recordingOverlayStyle: CSSProperties = {\n  position: \"fixed\",\n  top: 18,\n  left: \"50%\",\n  transform: \"translateX(-50%)\",\n  zIndex: 2147483647,\n  display: \"flex\",\n  alignItems: \"center\",\n  gap: 14,\n  maxWidth: \"calc(100vw - 32px)\",\n  padding: \"14px 16px 14px 18px\",\n  borderRadius: 999,\n  background: \"rgba(15, 23, 42, 0.94)\",\n  color: \"#ffffff\",\n  boxShadow: \"0 24px 70px rgba(15, 23, 42, 0.36), 0 0 0 1px rgba(255, 255, 255, 0.12)\",\n  fontFamily:\n    'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n  pointerEvents: \"auto\"\n};\n\nconst recordingDotStyle: CSSProperties = {\n  width: 14,\n  height: 14,\n  flex: \"0 0 auto\",\n  borderRadius: \"50%\",\n  background: \"#ef4444\",\n  boxShadow: \"0 0 0 6px rgba(239, 68, 68, 0.22), 0 0 24px rgba(239, 68, 68, 0.72)\"\n};\n\nconst recordingTextStyle: CSSProperties = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  minWidth: 0,\n  lineHeight: 1.15\n};\n\nconst recordingTitleStyle: CSSProperties = {\n  fontSize: 15,\n  fontWeight: 800,\n  letterSpacing: \"0.02em\",\n  textTransform: \"uppercase\"\n};\n\nconst recordingHintStyle: CSSProperties = {\n  marginTop: 3,\n  color: \"rgba(255, 255, 255, 0.78)\",\n  fontSize: 13,\n  fontWeight: 500,\n  whiteSpace: \"nowrap\"\n};\n\nconst recordingStopButtonStyle: CSSProperties = {\n  border: \"1px solid rgba(255, 255, 255, 0.28)\",\n  borderRadius: 999,\n  padding: \"13px 20px\",\n  background: \"#ef4444\",\n  color: \"#ffffff\",\n  boxShadow: \"0 10px 30px rgba(239, 68, 68, 0.38)\",\n  font: \"inherit\",\n  fontSize: 16,\n  fontWeight: 900,\n  cursor: \"pointer\",\n  whiteSpace: \"nowrap\"\n};\n\nconst recordingStopDisabledStyle: CSSProperties = {\n  ...recordingStopButtonStyle,\n  cursor: \"not-allowed\",\n  opacity: 0.68\n};\n\nconst downloadNoticeStyle: CSSProperties = {\n  ...recordingOverlayStyle,\n  background: \"rgba(6, 78, 59, 0.95)\",\n  boxShadow: \"0 24px 70px rgba(6, 78, 59, 0.32), 0 0 0 1px rgba(255, 255, 255, 0.14)\"\n};\n\nconst downloadNoticeIconStyle: CSSProperties = {\n  width: 30,\n  height: 30,\n  flex: \"0 0 auto\",\n  borderRadius: \"50%\",\n  display: \"inline-flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n  background: \"#34d399\",\n  color: \"#052e16\",\n  fontSize: 18,\n  fontWeight: 900\n};\n\nconst downloadNoticeButtonStyle: CSSProperties = {\n  border: \"1px solid rgba(255, 255, 255, 0.35)\",\n  borderRadius: 999,\n  padding: \"10px 14px\",\n  background: \"rgba(255, 255, 255, 0.14)\",\n  color: \"#ffffff\",\n  font: \"inherit\",\n  fontSize: 14,\n  fontWeight: 800,\n  cursor: \"pointer\",\n  whiteSpace: \"nowrap\"\n};\n\ninterface RiffrecProviderProps extends RiffrecConfig {\n  children?: ReactNode;\n}\n\ninterface ActiveSession {\n  sessionId: string;\n  startedAt: Date;\n  sessionStart: number;\n  events: RiffrecEvent[];\n  screen: ScreenCapture;\n  voice: VoiceCapture;\n  eventCapture: EventCapture;\n  networkCapture: NetworkCapture;\n  consoleCapture: ConsoleCapture;\n  ownsGlobalPatchMarker: boolean;\n}\n\nfunction readNodeEnv(): string | undefined {\n  const maybeProcess = globalThis as typeof globalThis & {\n    process?: { env?: { NODE_ENV?: string } };\n  };\n  return maybeProcess.process?.env?.NODE_ENV;\n}\n\nexport function isEnabledByUrlParam(forceEnableParam: boolean | string | undefined): boolean {\n  if (!forceEnableParam || typeof window === \"undefined\") {\n    return false;\n  }\n\n  const paramName = forceEnableParam === true ? DEFAULT_FORCE_ENABLE_PARAM : forceEnableParam;\n  const rawValue = new URLSearchParams(window.location.search).get(paramName);\n\n  return rawValue !== null && ENABLE_PARAM_VALUES.has(rawValue.toLowerCase());\n}\n\nfunction createSessionId(): string {\n  if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n\n  return `riffrec-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction toError(value: unknown): Error {\n  return value instanceof Error ? value : new Error(String(value));\n}\n\nasync function safeStopMedia(capture: ScreenCapture | VoiceCapture): Promise<Blob | null> {\n  try {\n    return await capture.stop();\n  } catch {\n    return null;\n  }\n}\n\nexport const RiffrecContext = createContext<RiffrecContextValue | null>(null);\n\nexport function RiffrecProvider({\n  children,\n  displayMedia,\n  displayMediaVideo,\n  downloadNoticeTitle = \"We downloaded the zip file.\",\n  downloadNoticeMessage = \"Share the zip file for feedback.\",\n  forceEnable,\n  forceEnableParam,\n  onError,\n  sanitizeError\n}: RiffrecProviderProps): React.ReactElement {\n  const [status, setStatus] = useState<RiffrecStatus>(\"idle\");\n  const [isDownloadNoticeVisible, setDownloadNoticeVisible] = useState(false);\n  const statusRef = useRef<RiffrecStatus>(\"idle\");\n  const activeSession = useRef<ActiveSession | null>(null);\n  const configRef = useRef<RiffrecConfig>({\n    displayMedia,\n    displayMediaVideo,\n    forceEnable,\n    forceEnableParam,\n    onError,\n    sanitizeError\n  });\n  const didWarnDisabled = useRef(false);\n  const isEnabled =\n    forceEnable || isEnabledByUrlParam(forceEnableParam) || readNodeEnv() !== \"production\";\n\n  useEffect(() => {\n    configRef.current = {\n      displayMedia,\n      displayMediaVideo,\n      forceEnable,\n      forceEnableParam,\n      onError,\n      sanitizeError\n    };\n  }, [displayMedia, displayMediaVideo, forceEnable, forceEnableParam, onError, sanitizeError]);\n\n  useEffect(() => {\n    statusRef.current = status;\n  }, [status]);\n\n  useEffect(() => {\n    if (!isEnabled && !didWarnDisabled.current && typeof console !== \"undefined\") {\n      console.warn(\"[riffrec] Disabled in production. Pass forceEnable={true} to opt in.\");\n      didWarnDisabled.current = true;\n      setStatus(\"disabled\");\n    }\n  }, [isEnabled]);\n\n  const stop = useCallback(async (): Promise<SessionResult | null> => {\n    const session = activeSession.current;\n    if (!session || statusRef.current !== \"recording\") {\n      return null;\n    }\n\n    statusRef.current = \"stopping\";\n    setStatus(\"stopping\");\n\n    session.eventCapture.stop();\n    session.networkCapture.stop();\n    session.consoleCapture.stop();\n\n    if (session.ownsGlobalPatchMarker && typeof window !== \"undefined\") {\n      delete window.__RIFFREC_PATCHED__;\n    }\n\n    const [screenBlob, voiceBlob] = await Promise.all([\n      safeStopMedia(session.screen),\n      safeStopMedia(session.voice)\n    ]);\n\n    const durationSeconds = (Date.now() - session.sessionStart) / 1000;\n    const outputs: CaptureOutputs = {\n      sessionId: session.sessionId,\n      startedAt: session.startedAt,\n      durationSeconds,\n      events: session.events,\n      screenBlob,\n      voiceBlob\n    };\n\n    activeSession.current = null;\n\n    try {\n      const writer = new SessionWriter({\n        reactVersion: React.version\n      });\n      const result = await writer.stop(outputs);\n      statusRef.current = \"idle\";\n      setStatus(\"idle\");\n      setDownloadNoticeVisible(true);\n      return result;\n    } catch (error) {\n      const err = toError(error);\n      configRef.current.onError?.(err);\n      statusRef.current = \"error\";\n      setStatus(\"error\");\n      return null;\n    }\n  }, []);\n\n  const start = useCallback(async (): Promise<void> => {\n    if (!isEnabled || typeof window === \"undefined\") {\n      return;\n    }\n\n    if (statusRef.current === \"recording\" || statusRef.current === \"stopping\") {\n      return;\n    }\n\n    setDownloadNoticeVisible(false);\n    const sessionStart = Date.now();\n    const screen = new ScreenCapture(\n      configRef.current.displayMedia,\n      configRef.current.displayMediaVideo\n    );\n    const voice = new VoiceCapture();\n    const eventCapture = new EventCapture();\n    const networkCapture = new NetworkCapture();\n    const consoleCapture = new ConsoleCapture();\n    const events: RiffrecEvent[] = [];\n    const onEvent = (event: RiffrecEvent) => events.push(event);\n    const ownsGlobalPatchMarker = !window.__RIFFREC_PATCHED__;\n\n    if (!ownsGlobalPatchMarker && typeof console !== \"undefined\") {\n      console.warn(\"[riffrec] Another riffrec instance is already active -- skipping global patches.\");\n    }\n\n    if (ownsGlobalPatchMarker) {\n      window.__RIFFREC_PATCHED__ = true;\n    }\n\n    statusRef.current = \"recording\";\n    setStatus(\"recording\");\n\n    try {\n      await screen.start();\n      await voice.start();\n\n      if (ownsGlobalPatchMarker) {\n        eventCapture.start(sessionStart, onEvent);\n        networkCapture.start(sessionStart, onEvent);\n        consoleCapture.start(sessionStart, onEvent, configRef.current.sanitizeError);\n      }\n\n      activeSession.current = {\n        sessionId: createSessionId(),\n        startedAt: new Date(sessionStart),\n        sessionStart,\n        events,\n        screen,\n        voice,\n        eventCapture,\n        networkCapture,\n        consoleCapture,\n        ownsGlobalPatchMarker\n      };\n    } catch (error) {\n      eventCapture.stop();\n      networkCapture.stop();\n      consoleCapture.stop();\n      await Promise.all([safeStopMedia(screen), safeStopMedia(voice)]);\n      if (ownsGlobalPatchMarker) {\n        delete window.__RIFFREC_PATCHED__;\n      }\n\n      const err = toError(error);\n      configRef.current.onError?.(err);\n      statusRef.current = \"error\";\n      setStatus(\"error\");\n      throw err;\n    }\n  }, [isEnabled]);\n\n  useEffect(() => () => void stop(), [stop]);\n\n  const value = useMemo<RiffrecContextValue>(\n    () => ({\n      start,\n      stop,\n      status,\n      isEnabled\n    }),\n    [isEnabled, start, status, stop]\n  );\n\n  const isRecordingVisible = status === \"recording\" || status === \"stopping\";\n\n  return (\n    <RiffrecContext.Provider value={value}>\n      {children}\n      {isRecordingVisible ? (\n        <div aria-live=\"polite\" role=\"status\" style={recordingOverlayStyle}>\n          <span aria-hidden=\"true\" style={recordingDotStyle} />\n          <span style={recordingTextStyle}>\n            <span style={recordingTitleStyle}>Recording feedback</span>\n            <span style={recordingHintStyle}>\n              Stop when you are ready to save the ZIP file.\n            </span>\n          </span>\n          <button\n            type=\"button\"\n            disabled={status === \"stopping\"}\n            style={status === \"stopping\" ? recordingStopDisabledStyle : recordingStopButtonStyle}\n            onClick={() => void stop()}\n          >\n            {status === \"stopping\" ? \"Saving...\" : \"Stop and save\"}\n          </button>\n        </div>\n      ) : null}\n      {isDownloadNoticeVisible ? (\n        <div aria-live=\"polite\" role=\"status\" style={downloadNoticeStyle}>\n          <span aria-hidden=\"true\" style={downloadNoticeIconStyle}>\n            ✓\n          </span>\n          <span style={recordingTextStyle}>\n            <span style={recordingTitleStyle}>{downloadNoticeTitle}</span>\n            <span style={recordingHintStyle}>{downloadNoticeMessage}</span>\n          </span>\n          <button\n            type=\"button\"\n            style={downloadNoticeButtonStyle}\n            onClick={() => setDownloadNoticeVisible(false)}\n          >\n            Got it\n          </button>\n        </div>\n      ) : null}\n    </RiffrecContext.Provider>\n  );\n}\n","interface ReactFiberLike {\n  return?: ReactFiberLike | null;\n  type?: unknown;\n  elementType?: unknown;\n  tag?: number;\n}\n\ninterface ComponentTypeLike {\n  displayName?: string;\n  name?: string;\n  render?: ComponentTypeLike;\n  type?: ComponentTypeLike;\n  _context?: { displayName?: string };\n  _status?: number;\n  _result?: ComponentTypeLike;\n}\n\nconst FiberTags = {\n  FunctionComponent: 0,\n  ClassComponent: 1,\n  IndeterminateComponent: 2,\n  HostRoot: 3,\n  HostPortal: 4,\n  HostComponent: 5,\n  HostText: 6,\n  Fragment: 7,\n  Mode: 8,\n  ContextConsumer: 9,\n  ContextProvider: 10,\n  ForwardRef: 11,\n  Profiler: 12,\n  SuspenseComponent: 13,\n  MemoComponent: 14,\n  SimpleMemoComponent: 15,\n  LazyComponent: 16\n} as const;\n\nconst MAX_COMPONENTS = 6;\nconst MAX_DEPTH = 30;\nconst SKIP_EXACT = new Set([\n  \"Component\",\n  \"ErrorBoundaryHandler\",\n  \"Fragment\",\n  \"Hot\",\n  \"HotReload\",\n  \"Outlet\",\n  \"Profiler\",\n  \"PureComponent\",\n  \"Route\",\n  \"Routes\",\n  \"Root\",\n  \"StrictMode\",\n  \"Suspense\"\n]);\nconst SKIP_PATTERNS = [\n  /Boundary$/,\n  /BoundaryHandler$/,\n  /Consumer$/,\n  /^Client(Page|Root|Segment)/,\n  /^Dev(Overlay|Tools|Root)/,\n  /Handler$/,\n  /^Hot(Reload)?$/,\n  /^Inner/,\n  /^LayoutSegment/,\n  /Overlay$/,\n  /Provider$/,\n  /^React(Overlay|Tools|Root)/,\n  /Router$/,\n  /^RSC/,\n  /^Segment(ViewNode|Node)$/,\n  /^Server(Root|Component|Render)/,\n  /^With[A-Z]/,\n  /Wrapper$/\n];\n\nfunction isComponentType(value: unknown): value is ComponentTypeLike {\n  return (typeof value === \"function\" || (typeof value === \"object\" && value !== null));\n}\n\nfunction isMinifiedName(name: string): boolean {\n  if (name.length <= 2) {\n    return true;\n  }\n\n  return name.length <= 3 && name === name.toLowerCase();\n}\n\nfunction isFrameworkInternal(name: string): boolean {\n  return SKIP_EXACT.has(name) || SKIP_PATTERNS.some((pattern) => pattern.test(name));\n}\n\nfunction readDisplayName(type: unknown): string | null {\n  if (!isComponentType(type)) {\n    return null;\n  }\n\n  const candidate = type.displayName ?? type.name;\n\n  if (!candidate || isMinifiedName(candidate) || isFrameworkInternal(candidate)) {\n    return null;\n  }\n\n  return candidate;\n}\n\nfunction getDataComponent(el: Element): string | null {\n  const candidate = el.closest<HTMLElement>(\"[data-component]\")?.dataset.component ?? null;\n  return candidate && candidate.trim().length > 0 ? candidate : null;\n}\n\nfunction getReactFiberKey(el: Element): string | null {\n  return (\n    Object.keys(el).find(\n      (key) => key.startsWith(\"__reactFiber$\") || key.startsWith(\"__reactInternalInstance$\")\n    ) ?? null\n  );\n}\n\nfunction getComponentNameFromFiber(fiber: ReactFiberLike): string | null {\n  const tag = fiber.tag;\n\n  if (\n    tag === FiberTags.HostRoot ||\n    tag === FiberTags.HostPortal ||\n    tag === FiberTags.HostComponent ||\n    tag === FiberTags.HostText ||\n    tag === FiberTags.Fragment ||\n    tag === FiberTags.Mode ||\n    tag === FiberTags.Profiler ||\n    tag === FiberTags.SuspenseComponent\n  ) {\n    return null;\n  }\n\n  if (tag === FiberTags.ForwardRef) {\n    const elementType = fiber.elementType as ComponentTypeLike | null;\n    return readDisplayName(elementType?.render) ?? readDisplayName(elementType) ?? readDisplayName(fiber.type);\n  }\n\n  if (tag === FiberTags.MemoComponent || tag === FiberTags.SimpleMemoComponent) {\n    const elementType = fiber.elementType as ComponentTypeLike | null;\n    return readDisplayName(elementType?.type) ?? readDisplayName(elementType) ?? readDisplayName(fiber.type);\n  }\n\n  if (tag === FiberTags.ContextProvider) {\n    const type = fiber.type as ComponentTypeLike | null;\n    const name = type?._context?.displayName;\n    return name && !isMinifiedName(name) ? `${name}.Provider` : null;\n  }\n\n  if (tag === FiberTags.ContextConsumer) {\n    const name = readDisplayName(fiber.type);\n    return name ? `${name}.Consumer` : null;\n  }\n\n  if (tag === FiberTags.LazyComponent) {\n    const elementType = fiber.elementType as ComponentTypeLike | null;\n    return elementType?._status === 1 ? readDisplayName(elementType._result) : null;\n  }\n\n  if (typeof fiber.type === \"string\") {\n    return null;\n  }\n\n  return readDisplayName(fiber.type) ?? readDisplayName(fiber.elementType);\n}\n\nexport function getComponentPath(el: Element | null): string[] | null {\n  if (!el) {\n    return null;\n  }\n\n  try {\n    const dataComponent = getDataComponent(el);\n    const fiberKey = getReactFiberKey(el);\n\n    if (!fiberKey) {\n      return dataComponent ? [dataComponent] : null;\n    }\n\n    let fiber = (el as unknown as Record<string, ReactFiberLike | undefined>)[fiberKey] ?? null;\n    const components: string[] = [];\n    let depth = 0;\n\n    while (fiber && depth < MAX_DEPTH && components.length < MAX_COMPONENTS) {\n      const componentName = getComponentNameFromFiber(fiber);\n      if (componentName) {\n        components.push(componentName);\n      }\n\n      fiber = fiber.return ?? null;\n      depth++;\n    }\n\n    if (components.length === 0) {\n      return dataComponent ? [dataComponent] : null;\n    }\n\n    return components.reverse();\n  } catch {\n    return null;\n  }\n}\n\nexport function getComponentName(el: Element | null): string | null {\n  const dataComponent = el ? getDataComponent(el) : null;\n  const path = getComponentPath(el);\n\n  if (!path || path.length === 0) {\n    return dataComponent;\n  }\n\n  return path[path.length - 1] ?? dataComponent;\n}\n","import type { ConsoleErrorEvent, RiffrecEventSink } from \"../types\";\nimport { getComponentName } from \"./fiber\";\n\ntype Sanitizer = (msg: string, stack: string | null) => string;\n\nfunction timestamp(sessionStart: number): number {\n  return (Date.now() - sessionStart) / 1000;\n}\n\nfunction isTestEnvironment(): boolean {\n  const maybeProcess = globalThis as typeof globalThis & {\n    process?: { env?: { NODE_ENV?: string } };\n  };\n  const nodeEnv = maybeProcess.process?.env?.NODE_ENV;\n\n  return (\n    nodeEnv === \"test\" ||\n    (typeof globalThis !== \"undefined\" && \"jest\" in globalThis) ||\n    (typeof globalThis !== \"undefined\" && \"vi\" in globalThis)\n  );\n}\n\nfunction stringifyConsoleArgs(args: unknown[]): string {\n  return args\n    .map((arg) => {\n      if (arg instanceof Error) {\n        return arg.message;\n      }\n      if (typeof arg === \"string\") {\n        return arg;\n      }\n      try {\n        return JSON.stringify(arg);\n      } catch {\n        return String(arg);\n      }\n    })\n    .join(\" \");\n}\n\nfunction readStack(value: unknown): string | null {\n  return value instanceof Error ? value.stack ?? null : null;\n}\n\nexport class ConsoleCapture {\n  private onEvent: RiffrecEventSink | null = null;\n  private sessionStart = 0;\n  private sanitize: Sanitizer | undefined;\n  private originalConsoleError: typeof console.error | null = null;\n  private originalOnError: OnErrorEventHandler | null = null;\n  private unhandledRejectionHandler: ((event: PromiseRejectionEvent) => void) | null = null;\n\n  start(sessionStart: number, onEvent: RiffrecEventSink, sanitize?: Sanitizer): void {\n    if (typeof window === \"undefined\" || isTestEnvironment() || this.onEvent) {\n      return;\n    }\n\n    this.sessionStart = sessionStart;\n    this.onEvent = onEvent;\n    this.sanitize = sanitize;\n    this.patchWindowOnError();\n    this.patchConsoleError();\n    this.patchUnhandledRejection();\n  }\n\n  stop(): void {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n\n    if (this.originalConsoleError) {\n      console.error = this.originalConsoleError;\n    }\n    window.onerror = this.originalOnError;\n    if (this.unhandledRejectionHandler) {\n      window.removeEventListener(\"unhandledrejection\", this.unhandledRejectionHandler);\n    }\n\n    this.onEvent = null;\n    this.sanitize = undefined;\n    this.originalConsoleError = null;\n    this.originalOnError = null;\n    this.unhandledRejectionHandler = null;\n  }\n\n  private patchWindowOnError(): void {\n    this.originalOnError = window.onerror;\n    window.onerror = (message, source, lineno, colno, error) => {\n      const renderedMessage = [\n        String(message),\n        source ? `at ${source}:${lineno ?? 0}:${colno ?? 0}` : null\n      ]\n        .filter(Boolean)\n        .join(\" \");\n\n      this.emit(renderedMessage, readStack(error));\n      if (this.originalOnError) {\n        return this.originalOnError(message, source, lineno, colno, error) === true;\n      }\n      return false;\n    };\n  }\n\n  private patchConsoleError(): void {\n    this.originalConsoleError = console.error;\n    console.error = (...args: unknown[]) => {\n      this.emit(stringifyConsoleArgs(args), args.map(readStack).find(Boolean) ?? null);\n      this.originalConsoleError?.(...args);\n    };\n  }\n\n  private patchUnhandledRejection(): void {\n    this.unhandledRejectionHandler = (event) => {\n      const reason = event.reason;\n      const message = reason instanceof Error ? reason.message : stringifyConsoleArgs([reason]);\n      this.emit(message, readStack(reason));\n    };\n    window.addEventListener(\"unhandledrejection\", this.unhandledRejectionHandler);\n  }\n\n  private emit(message: string, stack: string | null): void {\n    if (!this.onEvent) {\n      return;\n    }\n\n    let sanitizedMessage = message;\n    try {\n      sanitizedMessage = this.sanitize ? this.sanitize(message, stack) : message;\n    } catch {\n      sanitizedMessage = message;\n    }\n\n    const event: ConsoleErrorEvent = {\n      t: timestamp(this.sessionStart),\n      type: \"console_error\",\n      message: sanitizedMessage,\n      stack,\n      component:\n        typeof document !== \"undefined\"\n          ? getComponentName(document.activeElement ?? document.body)\n          : null\n    };\n    this.onEvent(event);\n  }\n}\n","import type { ElementBoundingBox, ElementInfo } from \"../types\";\n\nconst TEXT_LIMIT = 200;\nconst CONTEXT_LIMIT = 300;\nconst PATH_LIMIT = 300;\nconst DEFAULT_STYLE_VALUES = new Set([\n  \"\",\n  \"none\",\n  \"normal\",\n  \"auto\",\n  \"0px\",\n  \"rgba(0, 0, 0, 0)\",\n  \"transparent\",\n  \"static\",\n  \"visible\"\n]);\n\nconst TEXT_ELEMENTS = new Set([\n  \"a\",\n  \"b\",\n  \"blockquote\",\n  \"caption\",\n  \"code\",\n  \"dd\",\n  \"dt\",\n  \"em\",\n  \"figcaption\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"i\",\n  \"label\",\n  \"li\",\n  \"p\",\n  \"pre\",\n  \"q\",\n  \"span\",\n  \"strong\",\n  \"td\",\n  \"th\",\n  \"time\"\n]);\nconst FORM_ELEMENTS = new Set([\"input\", \"textarea\", \"select\"]);\nconst MEDIA_ELEMENTS = new Set([\"canvas\", \"img\", \"svg\", \"video\"]);\nconst CONTAINER_ELEMENTS = new Set([\n  \"article\",\n  \"aside\",\n  \"div\",\n  \"fieldset\",\n  \"footer\",\n  \"form\",\n  \"header\",\n  \"main\",\n  \"nav\",\n  \"ol\",\n  \"section\",\n  \"ul\"\n]);\n\nfunction truncate(value: string, limit: number): string {\n  return value.length > limit ? value.slice(0, limit) : value;\n}\n\nfunction cleanClassName(value: string): string {\n  return value.replace(/[_-][a-zA-Z0-9]{5,}.*$/, \"\");\n}\n\nfunction meaningfulClasses(el: Element, limit = 2): string[] {\n  if (!(el instanceof HTMLElement) || typeof el.className !== \"string\") {\n    return [];\n  }\n\n  const classes = el.className\n    .split(/\\s+/)\n    .map(cleanClassName)\n    .filter((className) => className.length > 2 && !/^[a-z]{1,2}$/.test(className));\n\n  return Array.from(new Set(classes)).slice(0, limit);\n}\n\nfunction escapeCssIdentifier(value: string): string {\n  return typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\"\n    ? CSS.escape(value)\n    : value.replace(/[^a-zA-Z0-9_-]/g, \"\\\\$&\");\n}\n\nfunction getParentElement(el: Element): Element | null {\n  if (el.parentElement) {\n    return el.parentElement;\n  }\n\n  const root = el.getRootNode();\n  return typeof ShadowRoot !== \"undefined\" && root instanceof ShadowRoot ? root.host : null;\n}\n\nfunction selectorPart(el: Element): string {\n  const tag = el.tagName.toLowerCase();\n  const id = el.id ? `#${escapeCssIdentifier(el.id)}` : \"\";\n  const classes = Array.from(el.classList)\n    .slice(0, 2)\n    .map((className) => `.${escapeCssIdentifier(className)}`)\n    .join(\"\");\n  return `${tag}${id}${classes}`;\n}\n\nfunction pathPart(el: Element): string {\n  const tag = el.tagName.toLowerCase();\n\n  if (el.id) {\n    return `${tag}#${escapeCssIdentifier(el.id)}`;\n  }\n\n  const className = meaningfulClasses(el, 1)[0];\n  return className ? `${tag}.${escapeCssIdentifier(className)}` : tag;\n}\n\nexport function buildSelector(el: Element): string {\n  const parts: string[] = [];\n  let current: Element | null = el;\n\n  while (current && parts.length < 4) {\n    parts.unshift(selectorPart(current));\n    current = getParentElement(current);\n  }\n\n  return truncate(parts.join(\" > \"), PATH_LIMIT);\n}\n\nexport function buildFullPath(el: Element): string {\n  const parts: string[] = [];\n  let current: Element | null = el;\n\n  while (current && current.tagName.toLowerCase() !== \"html\") {\n    const nextParent = getParentElement(current);\n    const prefix = !current.parentElement && nextParent ? \"[shadow] \" : \"\";\n    parts.unshift(`${prefix}${pathPart(current)}`);\n    current = nextParent;\n  }\n\n  return truncate(parts.join(\" > \"), PATH_LIMIT);\n}\n\nfunction isSensitiveInput(el: Element): boolean {\n  return el instanceof HTMLInputElement && (el.type === \"password\" || el.type === \"hidden\");\n}\n\nfunction isUnsafeTextElement(el: Element): boolean {\n  if (isSensitiveInput(el)) {\n    return true;\n  }\n\n  return (\n    el instanceof HTMLTextAreaElement ||\n    el instanceof HTMLSelectElement ||\n    (el instanceof HTMLElement && el.getAttribute(\"aria-hidden\") === \"true\")\n  );\n}\n\nfunction safeTextContent(el: Element, limit = TEXT_LIMIT): string | null {\n  if (isUnsafeTextElement(el)) {\n    return null;\n  }\n\n  if (el instanceof HTMLInputElement) {\n    return null;\n  }\n\n  const text = el.textContent?.replace(/\\s+/g, \" \").trim();\n  return text ? truncate(text, limit) : null;\n}\n\nfunction identifyElement(el: Element): string {\n  if (!(el instanceof HTMLElement)) {\n    return el.tagName.toLowerCase();\n  }\n\n  if (el.dataset.element) {\n    return el.dataset.element;\n  }\n\n  const tag = el.tagName.toLowerCase();\n\n  if ([\"path\", \"circle\", \"rect\", \"line\", \"g\"].includes(tag)) {\n    return \"graphic element\";\n  }\n\n  if (tag === \"svg\") {\n    const parent = getParentElement(el);\n    if (parent?.tagName.toLowerCase() === \"button\") {\n      const text = safeTextContent(parent);\n      return text ? `icon in \"${truncate(text, 25)}\" button` : \"button icon\";\n    }\n    return \"icon\";\n  }\n\n  if (tag === \"button\") {\n    const ariaLabel = el.getAttribute(\"aria-label\");\n    const text = safeTextContent(el);\n    if (ariaLabel) return `button [${truncate(ariaLabel, 50)}]`;\n    return text ? `button \"${truncate(text, 50)}\"` : \"button\";\n  }\n\n  if (tag === \"a\") {\n    const text = safeTextContent(el);\n    const href = el.getAttribute(\"href\");\n    if (text) return `link \"${truncate(text, 50)}\"`;\n    if (href) return `link to ${truncate(href, 50)}`;\n    return \"link\";\n  }\n\n  if (el instanceof HTMLInputElement) {\n    const type = el.getAttribute(\"type\") || \"text\";\n    const placeholder = el.getAttribute(\"placeholder\");\n    const name = el.getAttribute(\"name\");\n    if (placeholder) return `input \"${truncate(placeholder, 50)}\"`;\n    if (name) return `input [${truncate(name, 50)}]`;\n    return `${type} input`;\n  }\n\n  if (tag === \"img\") {\n    const alt = el.getAttribute(\"alt\");\n    return alt ? `image \"${truncate(alt, 50)}\"` : \"image\";\n  }\n\n  const ariaLabel = el.getAttribute(\"aria-label\");\n  const role = el.getAttribute(\"role\");\n  if (ariaLabel) return `${tag} [${truncate(ariaLabel, 50)}]`;\n  if (role) return role;\n\n  if (TEXT_ELEMENTS.has(tag)) {\n    const text = safeTextContent(el);\n    return text ? `${tag} \"${truncate(text, 50)}\"` : tag;\n  }\n\n  if (CONTAINER_ELEMENTS.has(tag)) {\n    const words = meaningfulClasses(el, 2);\n    if (words.length > 0) return words.join(\" \");\n    return tag === \"div\" ? \"container\" : tag;\n  }\n\n  return tag;\n}\n\nfunction getNearbyText(el: Element): string | null {\n  const texts: string[] = [];\n  const ownText = safeTextContent(el, CONTEXT_LIMIT);\n  if (ownText) {\n    texts.push(ownText);\n  }\n\n  for (const [label, sibling] of [\n    [\"before\", el.previousElementSibling],\n    [\"after\", el.nextElementSibling]\n  ] as const) {\n    if (!sibling) continue;\n    const text = safeTextContent(sibling, 80);\n    if (text) {\n      texts.push(`[${label}: \"${text}\"]`);\n    }\n  }\n\n  return texts.length > 0 ? truncate(texts.join(\" \"), CONTEXT_LIMIT) : null;\n}\n\nfunction getNearbyElements(el: Element): string | null {\n  const parent = getParentElement(el);\n  if (!parent) {\n    return null;\n  }\n\n  const siblings = Array.from(parent.children).filter((child) => child !== el);\n  if (siblings.length === 0) {\n    return null;\n  }\n\n  const labels = siblings.slice(0, 4).map((sibling) => {\n    const tag = sibling.tagName.toLowerCase();\n    const cls = meaningfulClasses(sibling, 1)[0];\n    const classPart = cls ? `.${cls}` : \"\";\n    const text = tag === \"button\" || tag === \"a\" ? safeTextContent(sibling, 30) : null;\n    return text ? `${tag}${classPart} \"${text}\"` : `${tag}${classPart}`;\n  });\n\n  const suffix = parent.children.length > siblings.length + 1 ? ` (${parent.children.length} total)` : \"\";\n  return truncate(`${labels.join(\", \")}${suffix}`, CONTEXT_LIMIT);\n}\n\nfunction getBoundingBox(el: Element): ElementBoundingBox {\n  const rect = el.getBoundingClientRect();\n  return {\n    x: rect.x,\n    y: rect.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction computedStyleProperties(el: Element): string[] {\n  const tag = el.tagName.toLowerCase();\n\n  if (TEXT_ELEMENTS.has(tag)) {\n    return [\"color\", \"font-size\", \"font-weight\", \"font-family\", \"line-height\"];\n  }\n\n  if (tag === \"button\" || (tag === \"a\" && el.getAttribute(\"role\") === \"button\")) {\n    return [\"background-color\", \"color\", \"padding\", \"border-radius\", \"font-size\"];\n  }\n\n  if (FORM_ELEMENTS.has(tag)) {\n    return [\"background-color\", \"color\", \"padding\", \"border-radius\", \"font-size\"];\n  }\n\n  if (MEDIA_ELEMENTS.has(tag)) {\n    return [\"width\", \"height\", \"object-fit\", \"border-radius\"];\n  }\n\n  if (CONTAINER_ELEMENTS.has(tag)) {\n    return [\"display\", \"padding\", \"margin\", \"gap\", \"background-color\"];\n  }\n\n  return [\"color\", \"font-size\", \"margin\", \"padding\", \"background-color\"];\n}\n\nfunction getComputedStylesSnapshot(el: Element): Record<string, string> | undefined {\n  if (typeof window === \"undefined\") {\n    return undefined;\n  }\n\n  const styles = window.getComputedStyle(el);\n  const snapshot: Record<string, string> = {};\n\n  for (const property of computedStyleProperties(el)) {\n    const value = styles.getPropertyValue(property);\n    if (!DEFAULT_STYLE_VALUES.has(value)) {\n      snapshot[property] = value;\n    }\n  }\n\n  return Object.keys(snapshot).length > 0 ? snapshot : undefined;\n}\n\nexport function buildElementInfo(el: Element): ElementInfo {\n  const rawText = safeTextContent(el);\n  const classes = meaningfulClasses(el, 8);\n  const role = el.getAttribute(\"role\");\n  const ariaLabel = el.getAttribute(\"aria-label\");\n\n  return {\n    tag: el.tagName.toLowerCase(),\n    text: rawText,\n    id: el.id || null,\n    selector: buildSelector(el),\n    name: identifyElement(el),\n    fullPath: buildFullPath(el),\n    classes: classes.length > 0 ? classes : undefined,\n    role,\n    ariaLabel,\n    nearbyText: getNearbyText(el),\n    nearbyElements: getNearbyElements(el),\n    boundingBox: getBoundingBox(el),\n    computedStyles: getComputedStylesSnapshot(el)\n  };\n}\n","import type { ClickEvent, NavigationEvent, RiffrecEventSink } from \"../types\";\nimport { buildElementInfo, buildSelector } from \"./element\";\nimport { getComponentName, getComponentPath } from \"./fiber\";\n\ntype HistoryMethod = typeof window.history.pushState;\n\nfunction timestamp(sessionStart: number): number {\n  return (Date.now() - sessionStart) / 1000;\n}\n\nfunction isElement(value: EventTarget | null): value is Element {\n  return value instanceof Element;\n}\n\nexport { buildElementInfo, buildSelector };\n\nexport class EventCapture {\n  private onEvent: RiffrecEventSink | null = null;\n  private sessionStart = 0;\n  private clickHandler: ((event: MouseEvent) => void) | null = null;\n  private popstateHandler: (() => void) | null = null;\n  private originalPushState: HistoryMethod | null = null;\n  private originalReplaceState: HistoryMethod | null = null;\n  private previousUrl: string | null = null;\n\n  start(sessionStart: number, onEvent: RiffrecEventSink): void {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\" || this.onEvent) {\n      return;\n    }\n\n    this.sessionStart = sessionStart;\n    this.onEvent = onEvent;\n    this.previousUrl = window.location.href;\n    this.clickHandler = (event) => this.handleClick(event);\n    this.popstateHandler = () => this.emitNavigation(window.location.href);\n\n    document.addEventListener(\"click\", this.clickHandler, true);\n    this.patchHistory();\n    window.addEventListener(\"popstate\", this.popstateHandler);\n  }\n\n  stop(): void {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n      return;\n    }\n\n    if (this.clickHandler) {\n      document.removeEventListener(\"click\", this.clickHandler, true);\n    }\n    if (this.popstateHandler) {\n      window.removeEventListener(\"popstate\", this.popstateHandler);\n    }\n    if (this.originalPushState) {\n      window.history.pushState = this.originalPushState;\n    }\n    if (this.originalReplaceState) {\n      window.history.replaceState = this.originalReplaceState;\n    }\n\n    this.onEvent = null;\n    this.clickHandler = null;\n    this.popstateHandler = null;\n    this.originalPushState = null;\n    this.originalReplaceState = null;\n    this.previousUrl = null;\n  }\n\n  private handleClick(event: MouseEvent): void {\n    if (!this.onEvent || !isElement(event.target)) {\n      return;\n    }\n\n    const element = event.target;\n    const clickEvent: ClickEvent = {\n      t: timestamp(this.sessionStart),\n      type: \"click\",\n      component: getComponentName(element),\n      componentPath: getComponentPath(element),\n      element: buildElementInfo(element)\n    };\n    this.onEvent(clickEvent);\n  }\n\n  private patchHistory(): void {\n    this.originalPushState = window.history.pushState;\n    this.originalReplaceState = window.history.replaceState;\n\n    window.history.pushState = this.wrapHistoryMethod(this.originalPushState);\n    window.history.replaceState = this.wrapHistoryMethod(this.originalReplaceState);\n  }\n\n  private wrapHistoryMethod(original: HistoryMethod): HistoryMethod {\n    return ((...args: Parameters<HistoryMethod>) => {\n      const result = original.apply(window.history, args);\n      window.setTimeout(() => this.emitNavigation(window.location.href), 0);\n      return result;\n    }) as HistoryMethod;\n  }\n\n  private emitNavigation(nextUrl: string): void {\n    if (!this.onEvent) {\n      return;\n    }\n\n    const from = this.previousUrl ?? nextUrl;\n    if (from === nextUrl) {\n      return;\n    }\n\n    const navigationEvent: NavigationEvent = {\n      t: timestamp(this.sessionStart),\n      type: \"navigation\",\n      from,\n      to: nextUrl\n    };\n\n    this.previousUrl = nextUrl;\n    this.onEvent(navigationEvent);\n  }\n}\n","import type { NetworkRequestEvent, RiffrecEventSink } from \"../types\";\n\ntype FetchLike = typeof window.fetch;\ntype XHROpen = typeof XMLHttpRequest.prototype.open;\ntype XHRSend = typeof XMLHttpRequest.prototype.send;\n\ninterface XhrMeta {\n  method: string;\n  url: string;\n  start: number;\n}\n\nconst REDACTED_QUERY_KEYS = new Set([\"token\", \"api_key\", \"client_secret\"]);\n\nfunction timestamp(sessionStart: number): number {\n  return (Date.now() - sessionStart) / 1000;\n}\n\nfunction extractRequestUrl(input: RequestInfo | URL): string {\n  if (typeof input === \"string\") {\n    return input;\n  }\n  if (input instanceof URL) {\n    return input.href;\n  }\n  return input.url;\n}\n\nfunction extractRequestMethod(input: RequestInfo | URL, init?: RequestInit): string {\n  if (init?.method) {\n    return init.method.toUpperCase();\n  }\n  if (typeof input === \"object\" && \"method\" in input && input.method) {\n    return input.method.toUpperCase();\n  }\n  return \"GET\";\n}\n\nexport function redactUrl(value: string): string {\n  try {\n    const base = typeof window !== \"undefined\" ? window.location.href : \"http://riffrec.local\";\n    const url = new URL(value, base);\n    for (const key of Array.from(url.searchParams.keys())) {\n      if (REDACTED_QUERY_KEYS.has(key.toLowerCase())) {\n        url.searchParams.set(key, \"[redacted]\");\n      }\n    }\n    if (value.startsWith(\"/\") || value.startsWith(\"?\")) {\n      return `${url.pathname}${url.search}${url.hash}`.replace(/%5Bredacted%5D/g, \"[redacted]\");\n    }\n    return url.href.replace(/%5Bredacted%5D/g, \"[redacted]\");\n  } catch {\n    return value.replace(/([?&](?:token|api_key|client_secret)=)[^&]+/gi, \"$1[redacted]\");\n  }\n}\n\nfunction shouldExclude(url: string, excludeUrls: string[]): boolean {\n  return excludeUrls.some((excludeUrl) => url.includes(excludeUrl));\n}\n\nexport class NetworkCapture {\n  private onEvent: RiffrecEventSink | null = null;\n  private sessionStart = 0;\n  private excludeUrls: string[] = [];\n  private originalFetch: FetchLike | null = null;\n  private originalOpen: XHROpen | null = null;\n  private originalSend: XHRSend | null = null;\n  private xhrMeta = new WeakMap<XMLHttpRequest, XhrMeta>();\n\n  start(sessionStart: number, onEvent: RiffrecEventSink, excludeUrls: string[] = []): void {\n    if (typeof window === \"undefined\" || this.onEvent) {\n      return;\n    }\n\n    this.sessionStart = sessionStart;\n    this.onEvent = onEvent;\n    this.excludeUrls = excludeUrls;\n    this.patchFetch();\n    this.patchXhr();\n  }\n\n  stop(): void {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n\n    if (this.originalFetch) {\n      window.fetch = this.originalFetch;\n    }\n    if (this.originalOpen) {\n      XMLHttpRequest.prototype.open = this.originalOpen;\n    }\n    if (this.originalSend) {\n      XMLHttpRequest.prototype.send = this.originalSend;\n    }\n\n    this.onEvent = null;\n    this.originalFetch = null;\n    this.originalOpen = null;\n    this.originalSend = null;\n    this.xhrMeta = new WeakMap();\n  }\n\n  private patchFetch(): void {\n    if (typeof window.fetch !== \"function\") {\n      return;\n    }\n\n    this.originalFetch = window.fetch;\n    const capture = this;\n\n    window.fetch = new Proxy(window.fetch, {\n      async apply(target, thisArg, argArray: [RequestInfo | URL, RequestInit | undefined]) {\n        const [input, init] = argArray;\n        const rawUrl = extractRequestUrl(input);\n        const method = extractRequestMethod(input, init);\n        const start = Date.now();\n\n        try {\n          const response = await Reflect.apply(target, thisArg, argArray);\n          capture.emitNetworkEvent(rawUrl, method, response.status, Date.now() - start);\n          return response;\n        } catch (error) {\n          capture.emitNetworkEvent(rawUrl, method, -1, Date.now() - start);\n          throw error;\n        }\n      }\n    }) as FetchLike;\n  }\n\n  private patchXhr(): void {\n    if (typeof XMLHttpRequest === \"undefined\") {\n      return;\n    }\n\n    this.originalOpen = XMLHttpRequest.prototype.open;\n    this.originalSend = XMLHttpRequest.prototype.send;\n    const capture = this;\n\n    XMLHttpRequest.prototype.open = function open(\n      this: XMLHttpRequest,\n      method: string,\n      url: string | URL,\n      async?: boolean,\n      username?: string | null,\n      password?: string | null\n    ) {\n      capture.xhrMeta.set(this, {\n        method: method.toUpperCase(),\n        url: String(url),\n        start: 0\n      });\n      return capture.originalOpen!.call(\n        this,\n        method,\n        url,\n        async ?? true,\n        username ?? undefined,\n        password ?? undefined\n      );\n    } as XHROpen;\n\n    XMLHttpRequest.prototype.send = function send(\n      this: XMLHttpRequest,\n      body?: Document | XMLHttpRequestBodyInit | null\n    ) {\n      const meta = capture.xhrMeta.get(this);\n      if (meta) {\n        meta.start = Date.now();\n        this.addEventListener(\n          \"loadend\",\n          () => {\n            capture.emitNetworkEvent(meta.url, meta.method, this.status || -1, Date.now() - meta.start);\n          },\n          { once: true }\n        );\n      }\n      return capture.originalSend!.call(this, body);\n    } as XHRSend;\n  }\n\n  private emitNetworkEvent(rawUrl: string, method: string, status: number, durationMs: number): void {\n    if (!this.onEvent || shouldExclude(rawUrl, this.excludeUrls)) {\n      return;\n    }\n\n    const event: NetworkRequestEvent = {\n      t: timestamp(this.sessionStart),\n      type: \"network_request\",\n      url: redactUrl(rawUrl),\n      method,\n      status,\n      duration_ms: durationMs\n    };\n    this.onEvent(event);\n  }\n}\n","import type { RiffrecDisplayMediaOptions, RiffrecDisplayMediaVideo } from \"../types\";\n\nconst VIDEO_MIME_TYPES = [\n  \"video/webm;codecs=vp9\",\n  \"video/webm;codecs=vp8\",\n  \"video/webm\"\n];\n\nexport const DEFAULT_DISPLAY_MEDIA_VIDEO: RiffrecDisplayMediaVideo = {\n  frameRate: 5,\n  displaySurface: \"browser\"\n};\n\nexport const DEFAULT_DISPLAY_MEDIA_OPTIONS: RiffrecDisplayMediaOptions = {\n  audio: false,\n  video: DEFAULT_DISPLAY_MEDIA_VIDEO,\n  preferCurrentTab: true,\n  selfBrowserSurface: \"include\",\n  monitorTypeSurfaces: \"exclude\",\n  surfaceSwitching: \"exclude\",\n  systemAudio: \"exclude\"\n};\n\nfunction browserSupportsScreenCapture(): boolean {\n  return (\n    typeof window !== \"undefined\" &&\n    typeof navigator !== \"undefined\" &&\n    Boolean(navigator.mediaDevices?.getDisplayMedia) &&\n    typeof MediaRecorder !== \"undefined\"\n  );\n}\n\nfunction chooseVideoMimeType(): string {\n  if (typeof MediaRecorder === \"undefined\" || typeof MediaRecorder.isTypeSupported !== \"function\") {\n    return \"video/webm\";\n  }\n\n  return VIDEO_MIME_TYPES.find((mimeType) => MediaRecorder.isTypeSupported(mimeType)) ?? \"video/webm\";\n}\n\nexport class ScreenCapture {\n  private recorder: MediaRecorder | null = null;\n  private stream: MediaStream | null = null;\n  private chunks: BlobPart[] = [];\n  private mimeType = \"video/webm\";\n\n  constructor(\n    private readonly displayMediaOverrides: Partial<RiffrecDisplayMediaOptions> = {},\n    private readonly displayMediaVideoOverrides: Partial<RiffrecDisplayMediaVideo> = {}\n  ) {}\n\n  async start(): Promise<void> {\n    if (!browserSupportsScreenCapture()) {\n      throw new Error(\"Screen capture is not supported in this browser.\");\n    }\n\n    try {\n      this.mimeType = chooseVideoMimeType();\n      this.chunks = [];\n      const displayMediaVideoOverrides =\n        typeof this.displayMediaOverrides.video === \"object\" && this.displayMediaOverrides.video !== null\n          ? this.displayMediaOverrides.video\n          : {};\n      const video: RiffrecDisplayMediaVideo = {\n        ...DEFAULT_DISPLAY_MEDIA_VIDEO,\n        ...this.displayMediaVideoOverrides,\n        ...displayMediaVideoOverrides\n      };\n      const options: RiffrecDisplayMediaOptions = {\n        ...DEFAULT_DISPLAY_MEDIA_OPTIONS,\n        ...this.displayMediaOverrides,\n        video\n      };\n      this.stream = await navigator.mediaDevices.getDisplayMedia(options);\n      this.recorder = new MediaRecorder(this.stream, { mimeType: this.mimeType });\n      this.recorder.ondataavailable = (event) => {\n        if (event.data.size > 0) {\n          this.chunks.push(event.data);\n        }\n      };\n      this.recorder.start(1000);\n    } catch (error) {\n      this.cleanupStream();\n      throw new Error(`Screen capture failed to start: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  async stop(): Promise<Blob | null> {\n    if (!this.recorder) {\n      this.cleanupStream();\n      return null;\n    }\n\n    const recorder = this.recorder;\n\n    return new Promise<Blob | null>((resolve, reject) => {\n      recorder.onstop = () => {\n        const blob = this.chunks.length > 0 ? new Blob(this.chunks, { type: this.mimeType }) : null;\n        this.reset();\n        resolve(blob);\n      };\n      recorder.onerror = () => {\n        this.reset();\n        reject(new Error(\"Screen recorder failed while stopping.\"));\n      };\n\n      if (recorder.state === \"inactive\") {\n        recorder.onstop?.(new Event(\"stop\"));\n      } else {\n        recorder.stop();\n      }\n    });\n  }\n\n  isRecording(): boolean {\n    return this.recorder?.state === \"recording\";\n  }\n\n  private reset(): void {\n    this.recorder = null;\n    this.cleanupStream();\n  }\n\n  private cleanupStream(): void {\n    this.stream?.getTracks().forEach((track) => track.stop());\n    this.stream = null;\n  }\n}\n\nexport function isSupported(): boolean {\n  return browserSupportsScreenCapture();\n}\n","const AUDIO_MIME_TYPES = [\"audio/webm;codecs=opus\", \"audio/webm\", \"audio/ogg;codecs=opus\"];\n\nfunction browserSupportsVoiceCapture(): boolean {\n  return (\n    typeof window !== \"undefined\" &&\n    typeof navigator !== \"undefined\" &&\n    Boolean(navigator.mediaDevices?.getUserMedia) &&\n    typeof MediaRecorder !== \"undefined\"\n  );\n}\n\nfunction chooseAudioMimeType(): string {\n  if (typeof MediaRecorder === \"undefined\" || typeof MediaRecorder.isTypeSupported !== \"function\") {\n    return \"audio/webm\";\n  }\n\n  return AUDIO_MIME_TYPES.find((mimeType) => MediaRecorder.isTypeSupported(mimeType)) ?? \"audio/webm\";\n}\n\nexport class VoiceCapture {\n  private recorder: MediaRecorder | null = null;\n  private stream: MediaStream | null = null;\n  private chunks: BlobPart[] = [];\n  private mimeType = \"audio/webm\";\n\n  async start(): Promise<boolean> {\n    if (!browserSupportsVoiceCapture()) {\n      return false;\n    }\n\n    try {\n      this.mimeType = chooseAudioMimeType();\n      this.chunks = [];\n      this.stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      this.recorder = new MediaRecorder(this.stream, { mimeType: this.mimeType });\n      this.recorder.ondataavailable = (event) => {\n        if (event.data.size > 0) {\n          this.chunks.push(event.data);\n        }\n      };\n      this.recorder.start(1000);\n      return true;\n    } catch (error) {\n      this.cleanupStream();\n      if (typeof console !== \"undefined\") {\n        console.warn(\n          `[riffrec] Voice capture skipped: ${error instanceof Error ? error.message : String(error)}`\n        );\n      }\n      return false;\n    }\n  }\n\n  async stop(): Promise<Blob | null> {\n    if (!this.recorder) {\n      this.cleanupStream();\n      return null;\n    }\n\n    const recorder = this.recorder;\n\n    return new Promise<Blob | null>((resolve) => {\n      recorder.onstop = () => {\n        const blob = this.chunks.length > 0 ? new Blob(this.chunks, { type: this.mimeType }) : null;\n        this.reset();\n        resolve(blob);\n      };\n      recorder.onerror = () => {\n        this.reset();\n        resolve(null);\n      };\n\n      if (recorder.state === \"inactive\") {\n        recorder.onstop?.(new Event(\"stop\"));\n      } else {\n        recorder.stop();\n      }\n    });\n  }\n\n  isRecording(): boolean {\n    return this.recorder?.state === \"recording\";\n  }\n\n  private reset(): void {\n    this.recorder = null;\n    this.cleanupStream();\n  }\n\n  private cleanupStream(): void {\n    this.stream?.getTracks().forEach((track) => track.stop());\n    this.stream = null;\n  }\n}\n\nexport function isSupported(): boolean {\n  return browserSupportsVoiceCapture();\n}\n","export const RIFFREC_SCHEMA_VERSION = \"1.0.0\" as const;\n\nexport type RiffrecSchemaVersion = typeof RIFFREC_SCHEMA_VERSION;\n\nexport type RiffrecStatus = \"idle\" | \"recording\" | \"stopping\" | \"disabled\" | \"error\";\n\nexport type RiffrecWriteMethod = \"zip\";\n\nexport interface ElementBoundingBox {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\nexport interface ElementInfo {\n  tag: string;\n  text: string | null;\n  id: string | null;\n  selector: string;\n  name?: string;\n  fullPath?: string;\n  classes?: string[];\n  role?: string | null;\n  ariaLabel?: string | null;\n  nearbyText?: string | null;\n  nearbyElements?: string | null;\n  boundingBox?: ElementBoundingBox;\n  computedStyles?: Record<string, string>;\n}\n\nexport interface ClickEvent {\n  t: number;\n  type: \"click\";\n  component: string | null;\n  componentPath?: string[] | null;\n  element: ElementInfo;\n}\n\nexport interface NetworkRequestEvent {\n  t: number;\n  type: \"network_request\";\n  url: string;\n  method: string;\n  status: number;\n  duration_ms: number;\n}\n\nexport interface ConsoleErrorEvent {\n  t: number;\n  type: \"console_error\";\n  message: string;\n  stack: string | null;\n  component: string | null;\n}\n\nexport interface NavigationEvent {\n  t: number;\n  type: \"navigation\";\n  from: string;\n  to: string;\n}\n\nexport type RiffrecEvent =\n  | ClickEvent\n  | NetworkRequestEvent\n  | ConsoleErrorEvent\n  | NavigationEvent;\n\nexport interface EventsJson {\n  version: \"1\";\n  schema_version: RiffrecSchemaVersion;\n  session_id: string;\n  url: string;\n  started_at: string;\n  duration_seconds: number;\n  events: RiffrecEvent[];\n}\n\nexport interface SessionJson {\n  url: string;\n  react_version: string | null;\n  browser: string;\n  started_at: string;\n  ended_at: string;\n  duration_seconds: number;\n  files_present: string[];\n}\n\nexport interface SessionResult {\n  sessionPath: string | null;\n  method: RiffrecWriteMethod;\n  filesPresent: string[];\n}\n\nexport type RiffrecDisplayMediaVideo = MediaTrackConstraints;\n\nexport type RiffrecDisplayMediaOptions = DisplayMediaStreamOptions & {\n  preferCurrentTab?: boolean;\n  selfBrowserSurface?: \"include\" | \"exclude\";\n  monitorTypeSurfaces?: \"include\" | \"exclude\";\n  surfaceSwitching?: \"include\" | \"exclude\";\n  systemAudio?: \"include\" | \"exclude\";\n};\n\nexport interface RiffrecConfig {\n  /**\n   * Override default screen-capture options passed to `getDisplayMedia()`.\n   */\n  displayMedia?: Partial<RiffrecDisplayMediaOptions>;\n  /**\n   * Override default screen-capture video constraints (e.g. `frameRate`).\n   */\n  displayMediaVideo?: Partial<RiffrecDisplayMediaVideo>;\n  downloadNoticeTitle?: string;\n  downloadNoticeMessage?: string;\n  forceEnable?: boolean;\n  forceEnableParam?: boolean | string;\n  onError?: (err: Error) => void;\n  sanitizeError?: (msg: string, stack: string | null) => string;\n}\n\nexport interface RiffrecContextValue {\n  start: () => Promise<void>;\n  stop: () => Promise<SessionResult | null>;\n  status: RiffrecStatus;\n  isEnabled: boolean;\n}\n\nexport type UseRiffrecResult = Pick<RiffrecContextValue, \"start\" | \"stop\" | \"status\">;\n\nexport interface CaptureOutputs {\n  sessionId: string;\n  startedAt: Date;\n  durationSeconds: number;\n  events: RiffrecEvent[];\n  screenBlob: Blob | null;\n  voiceBlob: Blob | null;\n}\n\nexport interface CaptureStartOptions {\n  sessionStart: number;\n}\n\nexport type RiffrecEventSink = (event: RiffrecEvent) => void;\n\ndeclare global {\n  interface Window {\n    __RIFFREC_PATCHED__?: boolean;\n  }\n}\n","import { zip, zipSync, type Zippable } from \"fflate\";\n\nexport const MAX_RECORDING_IN_ZIP_BYTES = 50 * 1024 * 1024;\n\nasync function blobToUint8Array(blob: Blob): Promise<Uint8Array> {\n  return new Uint8Array(await blob.arrayBuffer());\n}\n\nfunction zipAsync(files: Zippable): Promise<Uint8Array> {\n  return new Promise((resolve, reject) => {\n    zip(files, (error, data) => {\n      if (error) {\n        reject(error);\n      } else {\n        resolve(data);\n      }\n    });\n  });\n}\n\nfunction toArrayBuffer(value: Uint8Array): ArrayBuffer {\n  const copy = new Uint8Array(value.byteLength);\n  copy.set(value);\n  return copy.buffer;\n}\n\nfunction triggerDownload(filename: string, blob: Blob): void {\n  if (typeof window === \"undefined\" || typeof document === \"undefined\" || !URL.createObjectURL) {\n    throw new Error(\"Browser download APIs are not available.\");\n  }\n\n  const url = URL.createObjectURL(blob);\n  const fragment = document.createRange().createContextualFragment('<a style=\"display: none\"></a>');\n  const anchor = fragment.firstElementChild as HTMLAnchorElement | null;\n  if (!anchor) {\n    throw new Error(\"Browser download anchor could not be created.\");\n  }\n\n  anchor.href = url;\n  anchor.download = filename;\n  document.body.appendChild(anchor);\n  anchor.click();\n  anchor.remove();\n  window.setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n\nexport class ZipWriter {\n  async writeSession(sessionDirName: string, files: Map<string, Blob>): Promise<string> {\n    const zipFiles: Zippable = {};\n    let totalBytes = 0;\n\n    for (const [filename, blob] of filterZipSessionFiles(files)) {\n      zipFiles[filename] = await blobToUint8Array(blob);\n      totalBytes += blob.size;\n    }\n\n    const data =\n      totalBytes < MAX_RECORDING_IN_ZIP_BYTES ? zipSync(zipFiles) : await zipAsync(zipFiles);\n    const archive = new Blob([toArrayBuffer(data)], { type: \"application/zip\" });\n    triggerDownload(`${sessionDirName}.zip`, archive);\n    return `${sessionDirName}.zip`;\n  }\n}\n\nexport function isSupported(): boolean {\n  return typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof URL !== \"undefined\";\n}\n\nexport function filterZipSessionFiles(files: Map<string, Blob>): Map<string, Blob> {\n  const filtered = new Map<string, Blob>();\n\n  for (const [filename, blob] of files) {\n    if (filename === \"recording.webm\" && blob.size > MAX_RECORDING_IN_ZIP_BYTES) {\n      continue;\n    }\n    filtered.set(filename, blob);\n  }\n\n  return filtered;\n}\n","import type { CaptureOutputs, EventsJson, SessionJson, SessionResult } from \"../types\";\nimport { RIFFREC_SCHEMA_VERSION } from \"../types\";\nimport { filterZipSessionFiles, ZipWriter } from \"./zip\";\n\ninterface SessionWriterOptions {\n  reactVersion?: string | null;\n}\n\nfunction pad(value: number): string {\n  return String(value).padStart(2, \"0\");\n}\n\nfunction createShortId(): string {\n  if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID().slice(0, 6);\n  }\n\n  return Math.random().toString(36).slice(2, 8);\n}\n\nexport function createSessionDirName(date = new Date()): string {\n  const year = date.getFullYear();\n  const month = pad(date.getMonth() + 1);\n  const day = pad(date.getDate());\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n  return `riffrec-${year}-${month}-${day}-${hours}${minutes}-${createShortId()}`;\n}\n\nfunction jsonBlob(value: unknown): Blob {\n  return new Blob([`${JSON.stringify(value, null, 2)}\\n`], { type: \"application/json\" });\n}\n\nfunction readBrowser(): string {\n  return typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\";\n}\n\nfunction readUrl(): string {\n  return typeof window !== \"undefined\" ? window.location.href : \"\";\n}\n\nfunction buildEventsJson(outputs: CaptureOutputs): EventsJson {\n  return {\n    version: \"1\",\n    schema_version: RIFFREC_SCHEMA_VERSION,\n    session_id: outputs.sessionId,\n    url: readUrl(),\n    started_at: outputs.startedAt.toISOString(),\n    duration_seconds: outputs.durationSeconds,\n    events: outputs.events\n  };\n}\n\nfunction buildSessionJson(\n  outputs: CaptureOutputs,\n  endedAt: Date,\n  reactVersion: string | null,\n  filesPresent: string[]\n): SessionJson {\n  return {\n    url: readUrl(),\n    react_version: reactVersion,\n    browser: readBrowser(),\n    started_at: outputs.startedAt.toISOString(),\n    ended_at: endedAt.toISOString(),\n    duration_seconds: outputs.durationSeconds,\n    files_present: filesPresent\n  };\n}\n\nfunction withSessionJson(\n  files: Map<string, Blob>,\n  outputs: CaptureOutputs,\n  endedAt: Date,\n  reactVersion: string | null\n): { files: Map<string, Blob>; filesPresent: string[] } {\n  const filesPresent = [\"session.json\", ...Array.from(files.keys())];\n  const sessionJson = buildSessionJson(outputs, endedAt, reactVersion, filesPresent);\n  return {\n    files: new Map([[\"session.json\", jsonBlob(sessionJson)], ...files]),\n    filesPresent\n  };\n}\n\nexport class SessionWriter {\n  private readonly zipWriter = new ZipWriter();\n\n  constructor(private readonly options: SessionWriterOptions = {}) {}\n\n  async stop(outputs: CaptureOutputs): Promise<SessionResult> {\n    const endedAt = new Date();\n    const sessionDirName = createSessionDirName(endedAt);\n    const eventsJson = buildEventsJson(outputs);\n    const files = new Map<string, Blob>();\n\n    files.set(\"events.json\", jsonBlob(eventsJson));\n    if (outputs.screenBlob) {\n      files.set(\"recording.webm\", outputs.screenBlob);\n    }\n    if (outputs.voiceBlob) {\n      files.set(\"voice.webm\", outputs.voiceBlob);\n    }\n\n    const zipSession = withSessionJson(\n      filterZipSessionFiles(files),\n      outputs,\n      endedAt,\n      this.options.reactVersion ?? null\n    );\n    const sessionPath = await this.zipWriter.writeSession(sessionDirName, zipSession.files);\n    return { sessionPath, method: \"zip\", filesPresent: zipSession.filesPresent };\n  }\n}\n","import { useContext, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { RiffrecContext } from \"./RiffrecProvider\";\nimport type { SessionResult } from \"./types\";\n\nexport interface RiffrecRecorderProps {\n  className?: string;\n  startLabel?: string;\n  stopLabel?: string;\n  disabledLabel?: string;\n  consentTitle?: string;\n  consentDescription?: ReactNode;\n  consentLabel?: string;\n  onSessionComplete?: (result: SessionResult | null) => void;\n}\n\nconst overlayStyle: CSSProperties = {\n  position: \"fixed\",\n  inset: 0,\n  zIndex: 2147483647,\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n  background: \"rgba(12, 18, 28, 0.56)\",\n  padding: 16\n};\n\nconst dialogStyle: CSSProperties = {\n  width: \"min(520px, 100%)\",\n  background: \"#ffffff\",\n  color: \"#101828\",\n  border: \"1px solid #d0d5dd\",\n  borderRadius: 8,\n  boxShadow: \"0 24px 80px rgba(16, 24, 40, 0.28)\",\n  padding: 24,\n  fontFamily:\n    'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif'\n};\n\nconst buttonStyle: CSSProperties = {\n  border: \"1px solid #344054\",\n  borderRadius: 6,\n  padding: \"9px 14px\",\n  background: \"#101828\",\n  color: \"#ffffff\",\n  font: \"inherit\",\n  cursor: \"pointer\"\n};\n\nconst secondaryButtonStyle: CSSProperties = {\n  ...buttonStyle,\n  background: \"#ffffff\",\n  color: \"#344054\",\n  borderColor: \"#d0d5dd\"\n};\n\nconst dangerButtonStyle: CSSProperties = {\n  ...buttonStyle,\n  background: \"#b42318\",\n  borderColor: \"#b42318\"\n};\n\nconst disabledButtonStyle: CSSProperties = {\n  ...buttonStyle,\n  cursor: \"not-allowed\",\n  opacity: 0.56\n};\n\nconst indicatorStyle: CSSProperties = {\n  display: \"inline-flex\",\n  alignItems: \"center\",\n  gap: 8,\n  marginLeft: 10,\n  color: \"#b42318\",\n  fontSize: 14,\n  fontWeight: 600\n};\n\nconst dotStyle: CSSProperties = {\n  width: 8,\n  height: 8,\n  borderRadius: \"50%\",\n  background: \"#f04438\"\n};\n\nconst defaultConsentDescription = (\n  <>\n    <p style={{ margin: \"0 0 12px\" }}>\n      Riffrec will ask your browser for screen and microphone access, then save a local session\n      with:\n    </p>\n    <ul style={{ margin: \"0 0 16px\", paddingLeft: 20 }}>\n      <li>screen video and microphone audio</li>\n      <li>clicks, navigation, network URLs and statuses</li>\n      <li>console errors and stack traces</li>\n    </ul>\n    <p style={{ margin: 0 }}>\n      Password and hidden input text is omitted from DOM events, but anything visible on screen\n      can appear in the video, and anything spoken near the microphone can appear in the audio.\n    </p>\n  </>\n);\n\nfunction useRiffrecContext() {\n  const context = useContext(RiffrecContext);\n  if (!context) {\n    throw new Error(\"RiffrecRecorder must be used within RiffrecProvider\");\n  }\n  return context;\n}\n\nexport function RiffrecRecorder({\n  className,\n  startLabel = \"Record feedback\",\n  stopLabel = \"Stop recording\",\n  disabledLabel = \"Recording unavailable\",\n  consentTitle = \"Start recording?\",\n  consentDescription = defaultConsentDescription,\n  consentLabel = \"I understand and consent to this recording\",\n  onSessionComplete\n}: RiffrecRecorderProps): React.ReactElement {\n  const { start, stop, status, isEnabled } = useRiffrecContext();\n  const [isConsentOpen, setConsentOpen] = useState(false);\n  const [hasConsented, setHasConsented] = useState(false);\n  const [isBusy, setBusy] = useState(false);\n\n  const handleStop = async () => {\n    setBusy(true);\n    try {\n      const result = await stop();\n      onSessionComplete?.(result);\n    } finally {\n      setBusy(false);\n    }\n  };\n\n  const handleStart = async () => {\n    setBusy(true);\n    try {\n      await start();\n      setConsentOpen(false);\n      setHasConsented(false);\n    } catch {\n      // Provider-level onError receives the concrete error. Keep the consent dialog open.\n    } finally {\n      setBusy(false);\n    }\n  };\n\n  const isRecording = status === \"recording\" || status === \"stopping\";\n\n  return (\n    <span className={className}>\n      <button\n        type=\"button\"\n        disabled={!isEnabled || isBusy}\n        style={!isEnabled || isBusy ? disabledButtonStyle : isRecording ? dangerButtonStyle : buttonStyle}\n        onClick={isRecording ? handleStop : () => setConsentOpen(true)}\n      >\n        {isRecording ? stopLabel : isEnabled ? startLabel : disabledLabel}\n      </button>\n      {isRecording ? (\n        <span aria-live=\"polite\" style={indicatorStyle}>\n          <span aria-hidden=\"true\" style={dotStyle} />\n          Recording\n        </span>\n      ) : null}\n      {isConsentOpen ? (\n        <div style={overlayStyle}>\n          <div role=\"dialog\" aria-modal=\"true\" aria-label={consentTitle} style={dialogStyle}>\n            <h2 style={{ margin: \"0 0 12px\", fontSize: 20, lineHeight: 1.2 }}>{consentTitle}</h2>\n            <div style={{ fontSize: 14, lineHeight: 1.5 }}>{consentDescription}</div>\n            <label style={{ display: \"flex\", gap: 10, alignItems: \"flex-start\", marginTop: 18 }}>\n              <input\n                type=\"checkbox\"\n                checked={hasConsented}\n                onChange={(event) => setHasConsented(event.currentTarget.checked)}\n              />\n              <span>{consentLabel}</span>\n            </label>\n            <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 10, marginTop: 22 }}>\n              <button type=\"button\" style={secondaryButtonStyle} onClick={() => setConsentOpen(false)}>\n                Cancel\n              </button>\n              <button\n                type=\"button\"\n                disabled={!hasConsented || isBusy}\n                style={!hasConsented || isBusy ? disabledButtonStyle : buttonStyle}\n                onClick={handleStart}\n              >\n                Start recording\n              </button>\n            </div>\n          </div>\n        </div>\n      ) : null}\n    </span>\n  );\n}\n","import { useContext } from \"react\";\nimport { RiffrecContext } from \"./RiffrecProvider\";\nimport type { UseRiffrecResult } from \"./types\";\n\nexport function useRiffrec(): UseRiffrecResult {\n  const context = useContext(RiffrecContext);\n\n  if (!context) {\n    throw new Error(\"useRiffrec must be used within RiffrecProvider\");\n  }\n\n  return {\n    start: context.start,\n    stop: context.stop,\n    status: context.status\n  };\n}\n"],"mappings":"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","names":["ariaLabel","timestamp","timestamp","timestamp","import_react","import_jsx_runtime","import_react"]}