@fogg/bug-reporter 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/dist/chunk-6TCI6T2U.cjs +45 -0
  4. package/dist/chunk-6TCI6T2U.cjs.map +1 -0
  5. package/dist/chunk-S2YRP4GT.js +22 -0
  6. package/dist/chunk-S2YRP4GT.js.map +1 -0
  7. package/dist/index.cjs +1963 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.d.cts +331 -0
  10. package/dist/index.d.ts +331 -0
  11. package/dist/index.js +1956 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/recording-ML63ZQ6A.cjs +120 -0
  14. package/dist/recording-ML63ZQ6A.cjs.map +1 -0
  15. package/dist/recording-YSR6IORT.js +118 -0
  16. package/dist/recording-YSR6IORT.js.map +1 -0
  17. package/dist/screenshot-F4W72WRK.js +176 -0
  18. package/dist/screenshot-F4W72WRK.js.map +1 -0
  19. package/dist/screenshot-FRAZAS6B.cjs +178 -0
  20. package/dist/screenshot-FRAZAS6B.cjs.map +1 -0
  21. package/dist/styles/index.css +495 -0
  22. package/dist/styles/index.css.map +1 -0
  23. package/dist/styles/index.d.cts +2 -0
  24. package/dist/styles/index.d.ts +2 -0
  25. package/docs/backend-local.md +16 -0
  26. package/docs/backend-s3.md +31 -0
  27. package/docs/browser-compatibility.md +8 -0
  28. package/docs/framework-cra.md +10 -0
  29. package/docs/framework-nextjs.md +16 -0
  30. package/docs/framework-remix.md +6 -0
  31. package/docs/framework-vite.md +21 -0
  32. package/docs/known-limitations.md +6 -0
  33. package/docs/quickstart.md +26 -0
  34. package/docs/security.md +9 -0
  35. package/examples/backend-local/README.md +11 -0
  36. package/examples/backend-local/package.json +13 -0
  37. package/examples/backend-local/src/server.mjs +31 -0
  38. package/examples/backend-s3-presign/README.md +14 -0
  39. package/examples/backend-s3-presign/package.json +13 -0
  40. package/examples/backend-s3-presign/src/server.mjs +53 -0
  41. package/examples/sandbox-vite/README.md +25 -0
  42. package/examples/sandbox-vite/index.html +12 -0
  43. package/examples/sandbox-vite/package-lock.json +1880 -0
  44. package/examples/sandbox-vite/package.json +24 -0
  45. package/examples/sandbox-vite/src/App.tsx +200 -0
  46. package/examples/sandbox-vite/src/main.tsx +10 -0
  47. package/examples/sandbox-vite/src/sandbox.css +74 -0
  48. package/examples/sandbox-vite/tsconfig.json +14 -0
  49. package/examples/sandbox-vite/vite.config.ts +9 -0
  50. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagnostics/ua.ts","../src/diagnostics/collect.ts","../src/diagnostics/console-buffer.ts","../src/diagnostics/network-buffer.ts","../src/core/context.ts","../src/core/defaults.ts","../src/storage/local-public.ts","../src/storage/proxy.ts","../src/storage/s3-presigned.ts","../src/storage/factory.ts","../src/core/utils.ts","../src/core/upload.ts","../src/core/submit.ts","../src/components/BugReporterProvider.tsx","../src/hooks/useBugReporter.ts","../src/hooks/useFocusTrap.ts","../src/styles/inline.ts","../src/components/LauncherButton.tsx","../src/components/Modal.tsx","../src/core/lazy.ts","../src/core/validation.ts","../src/components/AnnotationCanvas.tsx","../src/components/StepRecording.tsx","../src/components/StepDescribe.tsx","../src/components/StepReview.tsx","../src/components/BugReporter.tsx"],"names":["__publicField","createContext","BugReporterError","uploadEndpoint","useMemo","useState","useRef","useCallback","value","useEffect","React","useContext","createPortal","forwardRef","AnnotationCanvas","useImperativeHandle"],"mappings":"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","file":"index.cjs","sourcesContent":["export function detectBrowserAndOS(userAgent: string): { browser: string; os: string } {\n let browser = \"Unknown\";\n let os = \"Unknown\";\n\n if (/Edg\\//.test(userAgent)) browser = \"Edge\";\n else if (/Chrome\\//.test(userAgent)) browser = \"Chrome\";\n else if (/Firefox\\//.test(userAgent)) browser = \"Firefox\";\n else if (/Safari\\//.test(userAgent) && !/Chrome\\//.test(userAgent)) browser = \"Safari\";\n\n if (/Windows NT/.test(userAgent)) os = \"Windows\";\n else if (/Mac OS X/.test(userAgent)) os = \"macOS\";\n else if (/Android/.test(userAgent)) os = \"Android\";\n else if (/iPhone|iPad|iPod/.test(userAgent)) os = \"iOS\";\n else if (/Linux/.test(userAgent)) os = \"Linux\";\n\n return { browser, os };\n}\n","import type { DiagnosticsSnapshot, RequiredBugReporterConfig } from \"../types\";\nimport { detectBrowserAndOS } from \"./ua\";\n\ntype CollectDiagnosticsOptions = {\n logs?: DiagnosticsSnapshot[\"logs\"];\n requests?: DiagnosticsSnapshot[\"requests\"];\n};\n\ntype NavigatorWithUserAgentData = Navigator & {\n userAgentData?: {\n brands?: ReadonlyArray<{\n brand: string;\n version: string;\n }>;\n mobile?: boolean;\n platform?: string;\n };\n};\n\nfunction getUserAgentDataSnapshot(): DiagnosticsSnapshot[\"userAgentData\"] | undefined {\n const userAgentData = (navigator as NavigatorWithUserAgentData).userAgentData;\n if (!userAgentData) {\n return undefined;\n }\n\n return {\n brands: userAgentData.brands?.map((item) => ({\n brand: item.brand,\n version: item.version\n })),\n mobile: userAgentData.mobile,\n platform: userAgentData.platform\n };\n}\n\nexport function collectDiagnostics(\n config: RequiredBugReporterConfig,\n options?: CollectDiagnosticsOptions\n): DiagnosticsSnapshot {\n const nav = performance.getEntriesByType(\"navigation\")[0] as PerformanceNavigationTiming | undefined;\n const { browser, os } = detectBrowserAndOS(navigator.userAgent);\n\n return {\n url: window.location.href,\n referrer: document.referrer,\n timestamp: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight,\n pixelRatio: window.devicePixelRatio || 1\n },\n browser,\n os,\n language: navigator.language,\n userAgent: navigator.userAgent,\n userAgentData: getUserAgentDataSnapshot(),\n appVersion: config.appVersion,\n environment: config.environment,\n projectId: config.projectId,\n logs: options?.logs,\n requests: options?.requests,\n navigationTiming: {\n domComplete: nav?.domComplete,\n loadEventEnd: nav?.loadEventEnd,\n responseEnd: nav?.responseEnd\n }\n };\n}\n","import type { ConsoleLogEntry } from \"../types\";\n\ntype ConsoleLevel = \"log\" | \"info\" | \"warn\" | \"error\";\n\nexport class ConsoleBuffer {\n private readonly entries: ConsoleLogEntry[] = [];\n private readonly originals = new Map<ConsoleLevel, (...args: unknown[]) => void>();\n private installed = false;\n private readonly onWindowError = (event: ErrorEvent) => {\n this.push(\"error\", [event.message, event.error instanceof Error ? event.error.stack ?? \"\" : \"\"]);\n };\n private readonly onUnhandledRejection = (event: PromiseRejectionEvent) => {\n this.push(\"error\", [\"Unhandled promise rejection\", event.reason]);\n };\n\n constructor(private readonly maxEntries: number) {}\n\n install(): void {\n if (this.installed) {\n return;\n }\n\n const levels: ConsoleLevel[] = [\"log\", \"info\", \"warn\", \"error\"];\n levels.forEach((level) => {\n const original = console[level];\n this.originals.set(level, original.bind(console));\n console[level] = ((...args: unknown[]) => {\n this.push(level, args);\n original(...args);\n }) as (...args: unknown[]) => void;\n });\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"error\", this.onWindowError);\n window.addEventListener(\"unhandledrejection\", this.onUnhandledRejection);\n }\n\n this.installed = true;\n }\n\n uninstall(): void {\n if (!this.installed) {\n return;\n }\n\n this.originals.forEach((original, level) => {\n console[level] = original as typeof console.log;\n });\n this.originals.clear();\n\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"error\", this.onWindowError);\n window.removeEventListener(\"unhandledrejection\", this.onUnhandledRejection);\n }\n\n this.installed = false;\n }\n\n clear(): void {\n this.entries.length = 0;\n }\n\n snapshot(): ConsoleLogEntry[] {\n return [...this.entries];\n }\n\n private push(level: ConsoleLevel, args: unknown[]): void {\n const message = args\n .map((arg) => {\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 this.entries.push({\n level,\n message,\n timestamp: new Date().toISOString()\n });\n\n if (this.entries.length > this.maxEntries) {\n this.entries.splice(0, this.entries.length - this.maxEntries);\n }\n }\n}\n","import type { NetworkRequestEntry } from \"../types\";\n\ntype XhrMeta = {\n method: string;\n url: string;\n startedAt: number;\n timestamp: string;\n};\n\nconst xhrMeta = new WeakMap<XMLHttpRequest, XhrMeta>();\n\nfunction extractUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") {\n return input;\n }\n if (input instanceof URL) {\n return input.toString();\n }\n return input.url;\n}\n\nfunction extractMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method) {\n return String(init.method).toUpperCase();\n }\n if (typeof Request !== \"undefined\" && input instanceof Request) {\n return input.method.toUpperCase();\n }\n return \"GET\";\n}\n\nexport class NetworkBuffer {\n private readonly entries: NetworkRequestEntry[] = [];\n private installed = false;\n private originalFetch?: typeof fetch;\n private originalXhrOpen?: XMLHttpRequest[\"open\"];\n private originalXhrSend?: XMLHttpRequest[\"send\"];\n\n constructor(private readonly maxEntries: number) {}\n\n install(): void {\n if (this.installed) {\n return;\n }\n\n this.installFetch();\n this.installXhr();\n this.installed = true;\n }\n\n uninstall(): void {\n if (!this.installed) {\n return;\n }\n\n if (this.originalFetch) {\n window.fetch = this.originalFetch;\n }\n\n if (this.originalXhrOpen) {\n XMLHttpRequest.prototype.open = this.originalXhrOpen;\n }\n\n if (this.originalXhrSend) {\n XMLHttpRequest.prototype.send = this.originalXhrSend;\n }\n\n this.installed = false;\n }\n\n clear(): void {\n this.entries.length = 0;\n }\n\n snapshot(): NetworkRequestEntry[] {\n return [...this.entries];\n }\n\n private installFetch(): void {\n if (typeof window === \"undefined\" || typeof window.fetch !== \"function\") {\n return;\n }\n\n this.originalFetch = window.fetch.bind(window);\n const originalFetch = this.originalFetch;\n\n window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const timestamp = new Date().toISOString();\n const startedAt = performance.now();\n const method = extractMethod(input, init);\n const url = extractUrl(input);\n\n try {\n const response = await originalFetch(input, init);\n this.push({\n transport: \"fetch\",\n method,\n url,\n status: response.status,\n ok: response.ok,\n durationMs: Math.round(performance.now() - startedAt),\n timestamp\n });\n return response;\n } catch (error) {\n this.push({\n transport: \"fetch\",\n method,\n url,\n durationMs: Math.round(performance.now() - startedAt),\n timestamp,\n error: error instanceof Error ? error.message : String(error)\n });\n throw error;\n }\n };\n }\n\n private installXhr(): void {\n if (typeof XMLHttpRequest === \"undefined\") {\n return;\n }\n\n this.originalXhrOpen = XMLHttpRequest.prototype.open;\n this.originalXhrSend = XMLHttpRequest.prototype.send;\n const buffer = this;\n\n XMLHttpRequest.prototype.open = function patchedOpen(\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null\n ): void {\n xhrMeta.set(this, {\n method: String(method || \"GET\").toUpperCase(),\n url: String(url),\n startedAt: 0,\n timestamp: \"\"\n });\n\n buffer.originalXhrOpen?.call(this, method, url, async ?? true, username ?? null, password ?? null);\n };\n\n XMLHttpRequest.prototype.send = function patchedSend(body?: Document | XMLHttpRequestBodyInit | null): void {\n const existing = xhrMeta.get(this);\n if (existing) {\n existing.startedAt = performance.now();\n existing.timestamp = new Date().toISOString();\n xhrMeta.set(this, existing);\n\n const onLoadEnd = () => {\n const meta = xhrMeta.get(this);\n if (!meta) {\n return;\n }\n\n buffer.push({\n transport: \"xhr\",\n method: meta.method,\n url: meta.url,\n status: this.status,\n ok: this.status >= 200 && this.status < 300,\n durationMs: Math.round(performance.now() - meta.startedAt),\n timestamp: meta.timestamp\n });\n\n xhrMeta.delete(this);\n this.removeEventListener(\"loadend\", onLoadEnd);\n this.removeEventListener(\"error\", onError);\n };\n\n const onError = () => {\n const meta = xhrMeta.get(this);\n if (!meta) {\n return;\n }\n\n buffer.push({\n transport: \"xhr\",\n method: meta.method,\n url: meta.url,\n status: this.status || undefined,\n ok: false,\n durationMs: Math.round(performance.now() - meta.startedAt),\n timestamp: meta.timestamp,\n error: \"XMLHttpRequest failed\"\n });\n\n xhrMeta.delete(this);\n this.removeEventListener(\"loadend\", onLoadEnd);\n this.removeEventListener(\"error\", onError);\n };\n\n this.addEventListener(\"loadend\", onLoadEnd);\n this.addEventListener(\"error\", onError);\n }\n\n buffer.originalXhrSend?.call(this, body);\n };\n }\n\n private push(entry: NetworkRequestEntry): void {\n this.entries.push(entry);\n if (this.entries.length > this.maxEntries) {\n this.entries.splice(0, this.entries.length - this.maxEntries);\n }\n }\n}\n","import { createContext } from \"react\";\nimport type { BugReporterContextValue } from \"../types\";\n\nexport const BugReporterContext = createContext<BugReporterContextValue | undefined>(undefined);\n","import type { BugReporterConfig, RequiredBugReporterConfig } from \"../types\";\n\nconst DEFAULT_MASK_SELECTORS = [\n \"input[type='password']\",\n \"[data-bug-reporter-mask='true']\"\n];\n\nexport function withDefaults(config: BugReporterConfig): RequiredBugReporterConfig {\n return {\n apiEndpoint: config.apiEndpoint,\n projectId: config.projectId,\n appVersion: config.appVersion,\n environment: config.environment,\n storage: {\n mode: config.storage?.mode ?? \"proxy\",\n s3: config.storage?.s3,\n local: config.storage?.local,\n proxy: config.storage?.proxy,\n limits: {\n maxVideoSeconds: config.storage?.limits?.maxVideoSeconds ?? 30,\n maxVideoBytes: config.storage?.limits?.maxVideoBytes ?? 50 * 1024 * 1024,\n maxScreenshotBytes: config.storage?.limits?.maxScreenshotBytes ?? 8 * 1024 * 1024\n }\n },\n auth: {\n headers: config.auth?.headers ?? {},\n withCredentials: config.auth?.withCredentials ?? false\n },\n theme: {\n primaryColor: config.theme?.primaryColor ?? \"#1b74e4\",\n position: config.theme?.position ?? \"bottom-right\",\n zIndex: config.theme?.zIndex ?? 2147483000,\n borderRadius: config.theme?.borderRadius ?? \"999px\"\n },\n features: {\n screenshot: config.features?.screenshot ?? true,\n recording: config.features?.recording ?? true,\n annotations: config.features?.annotations ?? true,\n consoleLogs: config.features?.consoleLogs ?? false,\n networkInfo: config.features?.networkInfo ?? false\n },\n user: config.user,\n attributes: config.attributes ?? {},\n privacy: {\n maskSelectors: config.privacy?.maskSelectors ?? DEFAULT_MASK_SELECTORS,\n redactTextPatterns: config.privacy?.redactTextPatterns ?? []\n },\n diagnostics: {\n consoleBufferSize: config.diagnostics?.consoleBufferSize ?? 100,\n requestBufferSize: config.diagnostics?.requestBufferSize ?? 200\n },\n hooks: {\n beforeSubmit: config.hooks?.beforeSubmit,\n onSuccess: config.hooks?.onSuccess,\n onError: config.hooks?.onError\n }\n };\n}\n","import { BugReporterError } from \"../types\";\nimport type { AssetReference, StorageProvider, UploadFile, UploadInstruction } from \"../types\";\n\ntype LocalPublicProviderOptions = {\n uploadEndpoint: string;\n publicBaseUrl?: string;\n authHeaders?: Record<string, string>;\n withCredentials?: boolean;\n};\n\nexport class LocalPublicProvider implements StorageProvider {\n constructor(private readonly options: LocalPublicProviderOptions) {}\n\n async prepareUploads(files: UploadFile[]): Promise<UploadInstruction[]> {\n return files.map((file) => ({\n id: file.id,\n method: \"POST\",\n uploadUrl: this.options.uploadEndpoint,\n headers: this.options.authHeaders,\n type: file.type\n }));\n }\n\n async upload(instruction: UploadInstruction, blob: Blob, onProgress?: (progress: number) => void): Promise<AssetReference> {\n onProgress?.(0);\n const form = new FormData();\n form.append(\"file\", blob, instruction.id);\n form.append(\"id\", instruction.id);\n form.append(\"type\", instruction.type);\n\n const response = await fetch(instruction.uploadUrl, {\n method: \"POST\",\n headers: instruction.headers,\n credentials: this.options.withCredentials ? \"include\" : \"same-origin\",\n body: form\n });\n\n if (!response.ok) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `Local upload failed (${response.status}).`);\n }\n\n const payload = (await response.json()) as { url: string; key?: string };\n onProgress?.(1);\n\n return {\n id: instruction.id,\n type: instruction.type,\n url:\n payload.url ||\n (payload.key && this.options.publicBaseUrl\n ? `${this.options.publicBaseUrl.replace(/\\/$/, \"\")}/${payload.key}`\n : instruction.uploadUrl),\n key: payload.key,\n mimeType: blob.type,\n size: blob.size\n };\n }\n}\n","import { BugReporterError } from \"../types\";\nimport type { AssetReference, StorageProvider, UploadFile, UploadInstruction } from \"../types\";\n\ntype ProxyProviderOptions = {\n uploadEndpoint: string;\n authHeaders?: Record<string, string>;\n withCredentials?: boolean;\n};\n\nexport class ProxyProvider implements StorageProvider {\n constructor(private readonly options: ProxyProviderOptions) {}\n\n async prepareUploads(files: UploadFile[]): Promise<UploadInstruction[]> {\n return files.map((file) => ({\n id: file.id,\n method: \"POST\",\n uploadUrl: this.options.uploadEndpoint,\n headers: this.options.authHeaders,\n type: file.type\n }));\n }\n\n async upload(instruction: UploadInstruction, blob: Blob, onProgress?: (progress: number) => void): Promise<AssetReference> {\n onProgress?.(0);\n const response = await fetch(instruction.uploadUrl, {\n method: \"POST\",\n headers: {\n \"content-type\": blob.type || \"application/octet-stream\",\n \"x-bug-reporter-asset-id\": instruction.id,\n \"x-bug-reporter-asset-type\": instruction.type,\n ...instruction.headers\n },\n credentials: this.options.withCredentials ? \"include\" : \"same-origin\",\n body: blob\n });\n\n if (!response.ok) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `Proxy upload failed (${response.status}).`);\n }\n\n const payload = (await response.json()) as { url: string; key?: string };\n onProgress?.(1);\n\n return {\n id: instruction.id,\n type: instruction.type,\n url: payload.url,\n key: payload.key,\n mimeType: blob.type,\n size: blob.size\n };\n }\n}\n","import { BugReporterError } from \"../types\";\nimport type { AssetReference, StorageProvider, UploadFile, UploadInstruction } from \"../types\";\nimport type { PresignResponse } from \"./provider\";\n\ntype S3PresignedProviderOptions = {\n presignEndpoint: string;\n authHeaders?: Record<string, string>;\n withCredentials?: boolean;\n publicBaseUrl?: string;\n};\n\nexport class S3PresignedProvider implements StorageProvider {\n constructor(private readonly options: S3PresignedProviderOptions) {}\n\n async prepareUploads(files: UploadFile[]): Promise<UploadInstruction[]> {\n const response = await fetch(this.options.presignEndpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...this.options.authHeaders\n },\n credentials: this.options.withCredentials ? \"include\" : \"same-origin\",\n body: JSON.stringify({ files })\n });\n\n if (!response.ok) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `Failed to prepare uploads (${response.status}).`);\n }\n\n const payload = (await response.json()) as PresignResponse;\n if (!payload.uploads?.length) {\n throw new BugReporterError(\"UPLOAD_ERROR\", \"Presign endpoint did not return upload instructions.\");\n }\n\n return payload.uploads;\n }\n\n async upload(instruction: UploadInstruction, blob: Blob, onProgress?: (progress: number) => void): Promise<AssetReference> {\n onProgress?.(0);\n\n if (instruction.method === \"POST\" && instruction.fields) {\n const formData = new FormData();\n Object.entries(instruction.fields).forEach(([key, value]) => formData.append(key, value));\n formData.append(\"file\", blob);\n\n const response = await fetch(instruction.uploadUrl, {\n method: \"POST\",\n body: formData\n });\n\n if (!response.ok) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `S3 form upload failed (${response.status}).`);\n }\n } else {\n const response = await fetch(instruction.uploadUrl, {\n method: instruction.method,\n headers: instruction.headers,\n body: blob\n });\n\n if (!response.ok) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `S3 upload failed (${response.status}).`);\n }\n }\n\n onProgress?.(1);\n\n const publicUrl =\n instruction.publicUrl ??\n (this.options.publicBaseUrl && instruction.key ? `${this.options.publicBaseUrl.replace(/\\/$/, \"\")}/${instruction.key}` : instruction.uploadUrl);\n\n return {\n id: instruction.id,\n type: instruction.type,\n key: instruction.key,\n url: publicUrl,\n mimeType: blob.type,\n size: blob.size\n };\n }\n}\n","import type { RequiredBugReporterConfig, StorageProvider } from \"../types\";\nimport { LocalPublicProvider } from \"./local-public\";\nimport { ProxyProvider } from \"./proxy\";\nimport { S3PresignedProvider } from \"./s3-presigned\";\n\nexport function createStorageProvider(config: RequiredBugReporterConfig): StorageProvider {\n if (config.storage.mode === \"s3-presigned\") {\n const presignEndpoint = config.storage.s3?.presignEndpoint;\n if (!presignEndpoint) {\n throw new Error(\"storage.s3.presignEndpoint is required for s3-presigned mode.\");\n }\n return new S3PresignedProvider({\n presignEndpoint,\n publicBaseUrl: config.storage.s3?.publicBaseUrl,\n authHeaders: config.auth.headers,\n withCredentials: config.auth.withCredentials\n });\n }\n\n if (config.storage.mode === \"local-public\") {\n const uploadEndpoint = config.storage.local?.uploadEndpoint;\n if (!uploadEndpoint) {\n throw new Error(\"storage.local.uploadEndpoint is required for local-public mode.\");\n }\n return new LocalPublicProvider({\n uploadEndpoint,\n publicBaseUrl: config.storage.local?.publicBaseUrl,\n authHeaders: config.auth.headers,\n withCredentials: config.auth.withCredentials\n });\n }\n\n const uploadEndpoint = config.storage.proxy?.uploadEndpoint;\n if (!uploadEndpoint) {\n throw new Error(\"storage.proxy.uploadEndpoint is required for proxy mode.\");\n }\n\n return new ProxyProvider({\n uploadEndpoint,\n authHeaders: config.auth.headers,\n withCredentials: config.auth.withCredentials\n });\n}\n","import { BugReporterError } from \"../types\";\n\nexport function uid(prefix = \"br\"): string {\n return `${prefix}_${Math.random().toString(36).slice(2, 10)}_${Date.now().toString(36)}`;\n}\n\nexport function splitSteps(input: string): string[] {\n return input\n .split(/\\n+/)\n .map((step) => step.trim())\n .filter(Boolean);\n}\n\nexport function blobToObjectUrl(blob: Blob): string {\n return URL.createObjectURL(blob);\n}\n\nexport function revokeObjectUrl(url?: string): void {\n if (!url) {\n return;\n }\n URL.revokeObjectURL(url);\n}\n\nexport async function fetchJson<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await fetch(url, init);\n if (!response.ok) {\n const body = await response.text().catch(() => \"\");\n throw new BugReporterError(\"SUBMIT_ERROR\", `Request failed (${response.status}): ${body || response.statusText}`);\n }\n return (await response.json()) as T;\n}\n\nexport async function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n","import { BugReporterError } from \"../types\";\nimport type { AssetReference, CapturedAsset, StorageProvider, UploadFile } from \"../types\";\nimport { sleep } from \"./utils\";\n\ntype UploadAssetsOptions = {\n provider: StorageProvider;\n assets: CapturedAsset[];\n retries?: number;\n onProgress?: (progress: number) => void;\n};\n\nasync function withRetry<T>(fn: () => Promise<T>, retries: number): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= retries; attempt += 1) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (attempt < retries) {\n await sleep(300 * (attempt + 1));\n }\n }\n }\n throw lastError;\n}\n\nexport async function uploadAssets(options: UploadAssetsOptions): Promise<AssetReference[]> {\n const files: UploadFile[] = options.assets.map((asset) => ({\n id: asset.id,\n name: asset.filename,\n type: asset.type,\n mimeType: asset.mimeType,\n size: asset.size\n }));\n\n const instructions = await options.provider.prepareUploads(files);\n const byId = new Map(instructions.map((instruction) => [instruction.id, instruction]));\n\n const refs: AssetReference[] = [];\n let completed = 0;\n\n for (const asset of options.assets) {\n const instruction = byId.get(asset.id);\n if (!instruction) {\n throw new BugReporterError(\"UPLOAD_ERROR\", `No upload instruction for asset ${asset.id}.`);\n }\n\n const ref = await withRetry(\n () => options.provider.upload(instruction, asset.blob, (inner) => {\n const aggregate = (completed + inner) / options.assets.length;\n options.onProgress?.(aggregate);\n }),\n options.retries ?? 2\n );\n\n refs.push(ref);\n completed += 1;\n options.onProgress?.(completed / options.assets.length);\n }\n\n return refs;\n}\n","import { BugReporterError } from \"../types\";\nimport type {\n BugReportPayload,\n BugReportResponse,\n CapturedAsset,\n DiagnosticsSnapshot,\n ReportDraft,\n RequiredBugReporterConfig\n} from \"../types\";\nimport { createStorageProvider } from \"../storage\";\nimport { uploadAssets } from \"./upload\";\n\ntype SubmitReportOptions = {\n config: RequiredBugReporterConfig;\n draft: ReportDraft;\n attributes: Record<string, unknown>;\n diagnostics: DiagnosticsSnapshot;\n assets: CapturedAsset[];\n onUploadProgress?: (progress: number) => void;\n};\n\nexport async function submitReport(options: SubmitReportOptions): Promise<BugReportResponse> {\n const provider = createStorageProvider(options.config);\n const assetReferences = await uploadAssets({\n provider,\n assets: options.assets,\n retries: 2,\n onProgress: options.onUploadProgress\n });\n\n const payloadBase: BugReportPayload = {\n issue: {\n title: options.draft.title,\n description: options.draft.description,\n projectId: options.config.projectId,\n environment: options.config.environment,\n appVersion: options.config.appVersion,\n assets: assetReferences\n },\n context: {\n url: options.diagnostics.url,\n referrer: options.diagnostics.referrer,\n timestamp: options.diagnostics.timestamp,\n timezone: options.diagnostics.timezone,\n viewport: options.diagnostics.viewport,\n client: {\n browser: options.diagnostics.browser,\n os: options.diagnostics.os,\n language: options.diagnostics.language,\n userAgent: options.diagnostics.userAgent\n },\n userAgentData: options.diagnostics.userAgentData,\n performance: {\n navigationTiming: options.diagnostics.navigationTiming\n },\n logs: options.diagnostics.logs,\n requests: options.diagnostics.requests\n },\n reporter: {\n id: options.config.user?.id,\n name: options.config.user?.name,\n email: options.config.user?.email,\n role: options.config.user?.role,\n ip: options.config.user?.ip,\n anonymous: options.config.user?.anonymous ?? !(options.config.user?.id || options.config.user?.email || options.config.user?.name)\n },\n attributes: options.attributes\n };\n\n const transformed = options.config.hooks.beforeSubmit ? await options.config.hooks.beforeSubmit(payloadBase) : payloadBase;\n if (!transformed) {\n throw new BugReporterError(\"ABORTED\", \"Submission aborted by beforeSubmit hook.\");\n }\n\n console.log(\"[bug-reporter] payload to submit\", transformed);\n console.log(\"[bug-reporter] payload to submit (json)\", JSON.stringify(transformed, null, 2));\n\n const response = await fetch(options.config.apiEndpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...options.config.auth.headers\n },\n credentials: options.config.auth.withCredentials ? \"include\" : \"same-origin\",\n body: JSON.stringify(transformed)\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => \"\");\n throw new BugReporterError(\"SUBMIT_ERROR\", `Report submit failed (${response.status}): ${body || response.statusText}`);\n }\n\n return (await response.json()) as BugReportResponse;\n}\n","\nimport {\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { collectDiagnostics, ConsoleBuffer, NetworkBuffer } from \"../diagnostics\";\nimport { BugReporterContext } from \"../core/context\";\nimport { withDefaults } from \"../core/defaults\";\nimport { submitReport } from \"../core/submit\";\nimport { revokeObjectUrl } from \"../core/utils\";\nimport type {\n BugReporterConfig,\n BugReporterContextValue,\n BugReporterState,\n CapturedAsset,\n DockSide,\n DiagnosticsPreview,\n FlowStep,\n ReportDraft\n} from \"../types\";\n\ntype BugReporterProviderProps = PropsWithChildren<{\n config: BugReporterConfig;\n}>;\n\nconst EMPTY_DRAFT: ReportDraft = {\n title: \"\",\n description: \"\",\n stepsToReproduce: \"\",\n expectedBehavior: \"\",\n actualBehavior: \"\"\n};\n\nconst BASE_STATE: BugReporterState = {\n isOpen: false,\n dockSide: \"right\",\n step: \"describe\",\n draft: EMPTY_DRAFT,\n attributes: {},\n assets: [],\n uploadProgress: 0,\n isSubmitting: false,\n error: undefined\n};\n\nexport function BugReporterProvider({ config, children }: BugReporterProviderProps) {\n const resolvedConfig = useMemo(() => withDefaults(config), [config]);\n const initialDockSide: DockSide =\n resolvedConfig.theme.position === \"bottom-left\" || resolvedConfig.theme.position === \"top-left\" ? \"left\" : \"right\";\n const [state, setState] = useState<BugReporterState>(() => ({\n ...BASE_STATE,\n dockSide: initialDockSide,\n attributes: { ...resolvedConfig.attributes }\n }));\n const [sessionActive, setSessionActive] = useState(false);\n const consoleBufferRef = useRef<ConsoleBuffer | null>(null);\n const networkBufferRef = useRef<NetworkBuffer | null>(null);\n const assetsRef = useRef<CapturedAsset[]>([]);\n\n const resetAssets = useCallback((assets: CapturedAsset[]) => {\n assets.forEach((asset) => revokeObjectUrl(asset.previewUrl));\n }, []);\n\n const open = useCallback(() => {\n setSessionActive(true);\n setState((prev) => ({\n ...prev,\n isOpen: true,\n error: undefined\n }));\n }, []);\n\n const close = useCallback(() => {\n setState((prev) => ({\n ...prev,\n isOpen: false\n }));\n }, []);\n\n const reset = useCallback(() => {\n setSessionActive(false);\n setState((prev) => {\n resetAssets(prev.assets);\n return {\n ...BASE_STATE,\n dockSide: prev.dockSide,\n attributes: { ...resolvedConfig.attributes },\n isOpen: prev.isOpen\n };\n });\n\n consoleBufferRef.current?.clear();\n networkBufferRef.current?.clear();\n }, [resetAssets, resolvedConfig.attributes]);\n\n const setStep = useCallback((step: FlowStep) => {\n setState((prev) => ({ ...prev, step }));\n }, []);\n\n const setDockSide = useCallback((dockSide: DockSide) => {\n setState((prev) => ({ ...prev, dockSide }));\n }, []);\n\n const updateDraft = useCallback((next: Partial<ReportDraft>) => {\n setState((prev) => ({\n ...prev,\n draft: {\n ...prev.draft,\n ...next\n }\n }));\n }, []);\n\n const setAttributes = useCallback((next: Record<string, unknown>) => {\n setState((prev) => ({\n ...prev,\n attributes: next\n }));\n }, []);\n\n const updateAttribute = useCallback((key: string, value: unknown) => {\n setState((prev) => ({\n ...prev,\n attributes: {\n ...prev.attributes,\n [key]: value\n }\n }));\n }, []);\n\n const setAssetByType = useCallback((type: CapturedAsset[\"type\"], next?: CapturedAsset) => {\n setState((prev) => {\n const previous = prev.assets.find((asset) => asset.type === type);\n if (previous) {\n revokeObjectUrl(previous.previewUrl);\n }\n\n const rest = prev.assets.filter((asset) => asset.type !== type);\n return {\n ...prev,\n assets: next ? [...rest, next] : rest\n };\n });\n }, []);\n\n const setScreenshot = useCallback((asset?: CapturedAsset) => {\n setAssetByType(\"screenshot\", asset);\n }, [setAssetByType]);\n\n const setRecording = useCallback((asset?: CapturedAsset) => {\n setAssetByType(\"recording\", asset);\n }, [setAssetByType]);\n\n const submit = useCallback(async () => {\n setState((prev) => ({\n ...prev,\n step: \"submitting\",\n isSubmitting: true,\n uploadProgress: 0,\n error: undefined\n }));\n\n try {\n const logs = resolvedConfig.features.consoleLogs ? consoleBufferRef.current?.snapshot() : undefined;\n const requests = resolvedConfig.features.networkInfo ? networkBufferRef.current?.snapshot() : undefined;\n const diagnostics = collectDiagnostics(resolvedConfig, {\n logs,\n requests\n });\n\n const response = await submitReport({\n config: resolvedConfig,\n draft: state.draft,\n attributes: state.attributes,\n diagnostics,\n assets: state.assets,\n onUploadProgress: (progress) => {\n setState((prev) => ({ ...prev, uploadProgress: progress }));\n }\n });\n\n setState((prev) => ({\n ...prev,\n diagnostics,\n isSubmitting: false,\n uploadProgress: 1,\n step: \"success\"\n }));\n\n resolvedConfig.hooks.onSuccess?.(response);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unexpected submit failure.\";\n setState((prev) => ({\n ...prev,\n isSubmitting: false,\n step: \"review\",\n error: message\n }));\n resolvedConfig.hooks.onError?.(error as any);\n }\n }, [resolvedConfig, state.assets, state.attributes, state.draft]);\n\n const retrySubmit = useCallback(async () => {\n await submit();\n }, [submit]);\n\n const getDiagnosticsPreview = useCallback((): DiagnosticsPreview => {\n const logs = resolvedConfig.features.consoleLogs ? consoleBufferRef.current?.snapshot() ?? [] : [];\n const requests = resolvedConfig.features.networkInfo ? networkBufferRef.current?.snapshot() ?? [] : [];\n\n return {\n errorLogs: logs.filter((entry) => entry.level === \"error\"),\n failedRequests: requests.filter((request) => Boolean(request.error) || request.ok === false || (request.status ?? 0) >= 400)\n };\n }, [resolvedConfig.features.consoleLogs, resolvedConfig.features.networkInfo]);\n\n useEffect(() => {\n if (!sessionActive) {\n return;\n }\n\n let consoleBuffer: ConsoleBuffer | null = null;\n let networkBuffer: NetworkBuffer | null = null;\n\n if (resolvedConfig.features.consoleLogs) {\n consoleBuffer = new ConsoleBuffer(resolvedConfig.diagnostics.consoleBufferSize);\n consoleBuffer.install();\n consoleBufferRef.current = consoleBuffer;\n }\n\n if (resolvedConfig.features.networkInfo) {\n networkBuffer = new NetworkBuffer(resolvedConfig.diagnostics.requestBufferSize);\n networkBuffer.install();\n networkBufferRef.current = networkBuffer;\n }\n\n return () => {\n consoleBuffer?.uninstall();\n networkBuffer?.uninstall();\n consoleBufferRef.current = null;\n networkBufferRef.current = null;\n };\n }, [\n sessionActive,\n resolvedConfig.diagnostics.consoleBufferSize,\n resolvedConfig.diagnostics.requestBufferSize,\n resolvedConfig.features.consoleLogs,\n resolvedConfig.features.networkInfo\n ]);\n\n useEffect(() => {\n assetsRef.current = state.assets;\n }, [state.assets]);\n\n useEffect(() => {\n return () => {\n resetAssets(assetsRef.current);\n consoleBufferRef.current?.uninstall();\n networkBufferRef.current?.uninstall();\n };\n }, [resetAssets]);\n\n const value = useMemo<BugReporterContextValue>(\n () => ({\n config: resolvedConfig,\n state,\n open,\n close,\n reset,\n setDockSide,\n setStep,\n updateDraft,\n setAttributes,\n updateAttribute,\n setScreenshot,\n setRecording,\n submit,\n retrySubmit,\n getDiagnosticsPreview\n }),\n [\n resolvedConfig,\n state,\n open,\n close,\n reset,\n setDockSide,\n setStep,\n updateDraft,\n setAttributes,\n updateAttribute,\n setScreenshot,\n setRecording,\n submit,\n retrySubmit,\n getDiagnosticsPreview\n ]\n );\n\n return <BugReporterContext.Provider value={value}>{children}</BugReporterContext.Provider>;\n}\n","\nimport { useContext } from \"react\";\nimport { BugReporterContext } from \"../core/context\";\n\nexport function useBugReporter() {\n const context = useContext(BugReporterContext);\n if (!context) {\n throw new Error(\"useBugReporter must be used inside BugReporterProvider.\");\n }\n return context;\n}\n","\nimport type { RefObject } from \"react\";\nimport { useEffect } from \"react\";\n\nfunction getFocusable(node: HTMLElement): HTMLElement[] {\n return Array.from(\n node.querySelectorAll<HTMLElement>(\n \"button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])\"\n )\n ).filter((el) => !el.hasAttribute(\"disabled\"));\n}\n\nexport function useFocusTrap(enabled: boolean, containerRef: RefObject<HTMLElement | null>) {\n useEffect(() => {\n const container = containerRef.current;\n if (!enabled || !container) {\n return;\n }\n\n const focusable = getFocusable(container);\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n first?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") {\n return;\n }\n\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n container.addEventListener(\"keydown\", onKeyDown);\n return () => {\n container.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [enabled, containerRef]);\n}\n","import type { CSSProperties } from \"react\";\nimport type { DockSide, LauncherPosition, ThemeMode } from \"../types\";\n\nconst FONT_FAMILY = \"\\\"IBM Plex Sans\\\", \\\"Segoe UI\\\", sans-serif\";\n\nconst THEME = {\n dark: {\n bg: \"rgba(7, 10, 14, 0.84)\",\n text: \"#e9eff8\",\n muted: \"#a8b5c7\",\n border: \"rgba(202, 219, 243, 0.22)\",\n fieldBg: \"rgba(255, 255, 255, 0.03)\",\n panelBg: \"rgba(5, 8, 12, 0.72)\",\n secondaryBg: \"rgba(255, 255, 255, 0.05)\",\n secondaryBgAlt: \"rgba(255, 255, 255, 0.03)\",\n surfaceBg: \"rgba(255, 255, 255, 0.02)\",\n overlaySide: \"linear-gradient(to left, rgba(0, 0, 0, 0.32), rgba(0, 0, 0, 0.08) 45%, transparent 72%)\",\n overlayTop: \"linear-gradient(to bottom, rgba(0, 0, 0, 0.34), rgba(0, 0, 0, 0.1) 45%, transparent 72%)\",\n overlayBottom: \"linear-gradient(to top, rgba(0, 0, 0, 0.34), rgba(0, 0, 0, 0.1) 45%, transparent 72%)\",\n launcherText: \"#f8fbff\",\n launcherShadow: \"0 10px 28px rgba(0, 0, 0, 0.35)\"\n },\n light: {\n bg: \"rgba(248, 250, 252, 0.96)\",\n text: \"#0f172a\",\n muted: \"#475569\",\n border: \"rgba(15, 23, 42, 0.18)\",\n fieldBg: \"rgba(15, 23, 42, 0.04)\",\n panelBg: \"rgba(241, 245, 249, 0.9)\",\n secondaryBg: \"rgba(15, 23, 42, 0.06)\",\n secondaryBgAlt: \"rgba(15, 23, 42, 0.06)\",\n surfaceBg: \"rgba(15, 23, 42, 0.03)\",\n overlaySide: \"linear-gradient(to left, rgba(15, 23, 42, 0.16), rgba(15, 23, 42, 0.06) 45%, transparent 72%)\",\n overlayTop: \"linear-gradient(to bottom, rgba(15, 23, 42, 0.16), rgba(15, 23, 42, 0.06) 45%, transparent 72%)\",\n overlayBottom: \"linear-gradient(to top, rgba(15, 23, 42, 0.16), rgba(15, 23, 42, 0.06) 45%, transparent 72%)\",\n launcherText: \"#ffffff\",\n launcherShadow: \"0 10px 24px rgba(15, 23, 42, 0.24)\"\n }\n} as const;\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"danger\";\n\nexport function getLauncherStyle(options: {\n position: LauncherPosition;\n borderRadius: string;\n zIndex: number;\n buttonColor: string;\n themeMode: ThemeMode;\n}): CSSProperties {\n const { position, borderRadius, zIndex, buttonColor, themeMode } = options;\n const [vertical, horizontal] = position.split(\"-\") as [\"top\" | \"bottom\", \"left\" | \"right\"];\n const theme = THEME[themeMode];\n\n return {\n position: \"fixed\",\n [vertical]: \"24px\",\n [horizontal]: \"24px\",\n color: theme.launcherText,\n backgroundColor: buttonColor,\n border: 0,\n borderRadius,\n padding: \"12px 18px\",\n font: `600 14px ${FONT_FAMILY}`,\n cursor: \"pointer\",\n boxShadow: theme.launcherShadow,\n zIndex\n };\n}\n\nexport function getModalOverlayStyle(options: { dockSide: DockSide; themeMode: ThemeMode; zIndex: number }): CSSProperties {\n const { dockSide, themeMode, zIndex } = options;\n const theme = THEME[themeMode];\n\n const base: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n display: \"flex\",\n pointerEvents: \"none\",\n zIndex,\n background: theme.overlaySide\n };\n\n if (dockSide === \"left\") {\n return { ...base, alignItems: \"stretch\", justifyContent: \"flex-start\" };\n }\n\n if (dockSide === \"top\") {\n return { ...base, alignItems: \"flex-start\", justifyContent: \"stretch\", background: theme.overlayTop };\n }\n\n if (dockSide === \"bottom\") {\n return { ...base, alignItems: \"flex-end\", justifyContent: \"stretch\", background: theme.overlayBottom };\n }\n\n return { ...base, alignItems: \"stretch\", justifyContent: \"flex-end\" };\n}\n\nexport function getModalStyle(options: { dockSide: DockSide; themeMode: ThemeMode; buttonColor: string }): CSSProperties {\n const { dockSide, themeMode, buttonColor } = options;\n const theme = THEME[themeMode];\n\n const base: CSSProperties = {\n pointerEvents: \"auto\",\n width: \"min(430px, 100vw)\",\n height: \"100vh\",\n overflow: \"auto\",\n color: theme.text,\n background: theme.bg,\n fontFamily: FONT_FAMILY,\n backdropFilter: \"blur(8px)\",\n boxShadow: \"-14px 0 40px rgba(0, 0, 0, 0.42)\",\n borderLeft: \"1px solid transparent\",\n borderRight: \"1px solid transparent\",\n borderTop: \"1px solid transparent\",\n borderBottom: \"1px solid transparent\",\n [\"--br-primary\" as string]: buttonColor,\n [\"--br-bg\" as string]: theme.bg,\n [\"--br-text\" as string]: theme.text,\n [\"--br-muted\" as string]: theme.muted,\n [\"--br-border\" as string]: theme.border,\n [\"--br-field-bg\" as string]: theme.fieldBg,\n [\"--br-panel-bg\" as string]: theme.panelBg,\n [\"--br-secondary-bg\" as string]: theme.secondaryBg,\n [\"--br-secondary-bg-alt\" as string]: theme.secondaryBgAlt,\n [\"--br-surface-bg\" as string]: theme.surfaceBg,\n [\"--br-danger\" as string]: \"#ef4444\"\n } as CSSProperties;\n\n if (dockSide === \"left\") {\n return { ...base, borderRightColor: \"var(--br-border)\", boxShadow: \"14px 0 40px rgba(0, 0, 0, 0.42)\" };\n }\n\n if (dockSide === \"top\") {\n return {\n ...base,\n width: \"100vw\",\n maxHeight: \"100vh\",\n height: \"min(460px, 100vh)\",\n borderBottomColor: \"var(--br-border)\",\n boxShadow: \"0 14px 40px rgba(0, 0, 0, 0.42)\"\n };\n }\n\n if (dockSide === \"bottom\") {\n return {\n ...base,\n width: \"100vw\",\n maxHeight: \"100vh\",\n height: \"min(460px, 100vh)\",\n borderTopColor: \"var(--br-border)\",\n boxShadow: \"0 -14px 40px rgba(0, 0, 0, 0.42)\"\n };\n }\n\n return { ...base, borderLeftColor: \"var(--br-border)\" };\n}\n\nexport const inlineStyles = {\n modalHeader: {\n position: \"sticky\",\n top: 0,\n zIndex: 2,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"14px 16px\",\n borderBottom: \"1px solid var(--br-border)\",\n background: \"var(--br-panel-bg)\"\n } as CSSProperties,\n modalHeaderActions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\"\n } as CSSProperties,\n dockControls: {\n display: \"flex\",\n gap: \"6px\"\n } as CSSProperties,\n iconButton: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px solid var(--br-border)\",\n borderRadius: \"8px\",\n background: \"var(--br-secondary-bg-alt)\",\n color: \"var(--br-text)\",\n width: \"30px\",\n height: \"30px\",\n padding: 0,\n cursor: \"pointer\"\n } as CSSProperties,\n iconSvg: {\n width: \"14px\",\n height: \"14px\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.8,\n strokeLinecap: \"round\"\n } as CSSProperties,\n step: {\n padding: \"16px\"\n } as CSSProperties,\n h2: {\n margin: \"0 0 8px\"\n } as CSSProperties,\n h3: {\n margin: \"0\"\n } as CSSProperties,\n p: {\n margin: \"0 0 16px\",\n color: \"var(--br-muted)\"\n } as CSSProperties,\n field: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n marginBottom: \"14px\",\n fontSize: \"13px\",\n fontWeight: 600\n } as CSSProperties,\n input: {\n border: \"1px solid var(--br-border)\",\n borderRadius: \"10px\",\n font: `400 14px ${FONT_FAMILY}`,\n color: \"var(--br-text)\",\n background: \"var(--br-field-bg)\",\n padding: \"10px\"\n } as CSSProperties,\n actions: {\n display: \"flex\",\n gap: \"10px\",\n flexWrap: \"wrap\",\n marginTop: \"16px\"\n } as CSSProperties,\n captureRow: {\n display: \"flex\",\n gap: \"10px\",\n flexWrap: \"wrap\",\n marginTop: \"10px\"\n } as CSSProperties,\n captureItem: {\n flex: \"1 1 190px\"\n } as CSSProperties,\n captureButton: {\n width: \"100%\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\"\n } as CSSProperties,\n captureIcon: {\n width: \"14px\",\n height: \"14px\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.7,\n strokeLinejoin: \"round\"\n } as CSSProperties,\n captureDone: {\n fontSize: \"11px\",\n color: \"var(--br-text)\",\n opacity: 0.7\n } as CSSProperties,\n captureNote: {\n margin: \"10px 0 0\",\n color: \"var(--br-muted)\",\n fontSize: \"13px\"\n } as CSSProperties,\n previewWrapper: {\n display: \"grid\",\n gap: \"12px\",\n marginTop: \"14px\",\n justifyItems: \"center\"\n } as CSSProperties,\n preview: {\n width: \"100%\",\n maxHeight: \"240px\",\n borderRadius: \"10px\",\n border: \"1px solid var(--br-border)\",\n objectFit: \"contain\",\n background: \"var(--br-surface-bg)\"\n } as CSSProperties,\n error: {\n color: \"#fca5a5\",\n fontSize: \"14px\",\n marginTop: \"10px\"\n } as CSSProperties,\n summary: {\n border: \"1px solid var(--br-border)\",\n borderRadius: \"10px\",\n padding: \"12px\",\n marginTop: \"12px\",\n background: \"var(--br-surface-bg)\"\n } as CSSProperties,\n assets: {\n display: \"grid\",\n gap: \"12px\",\n marginTop: \"14px\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(140px, 1fr))\"\n } as CSSProperties,\n assetCard: {\n border: \"1px solid var(--br-border)\",\n borderRadius: \"10px\",\n padding: \"10px\",\n background: \"var(--br-surface-bg)\"\n } as CSSProperties,\n assetType: {\n fontSize: \"12px\",\n textTransform: \"uppercase\",\n color: \"var(--br-muted)\"\n } as CSSProperties,\n uploadProgress: {\n marginTop: \"12px\",\n fontSize: \"14px\"\n } as CSSProperties,\n progressTrack: {\n height: \"8px\",\n borderRadius: \"999px\",\n background: \"rgba(148, 163, 184, 0.25)\",\n overflow: \"hidden\",\n marginTop: \"6px\"\n } as CSSProperties,\n progressFill: {\n height: \"100%\",\n background: \"var(--br-primary)\"\n } as CSSProperties,\n annotation: {\n border: \"1px solid var(--br-border)\",\n borderRadius: \"10px\",\n padding: \"10px\",\n background: \"var(--br-surface-bg)\"\n } as CSSProperties,\n annotationTools: {\n display: \"flex\",\n gap: \"8px\",\n marginBottom: \"10px\",\n flexWrap: \"wrap\"\n } as CSSProperties,\n annotationCanvas: {\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"min(48vh, 360px)\",\n display: \"block\",\n margin: \"0 auto\",\n border: \"1px solid var(--br-border)\",\n borderRadius: \"8px\"\n } as CSSProperties\n};\n\nexport function getButtonStyle(variant: ButtonVariant, options?: { disabled?: boolean; active?: boolean; fullWidth?: boolean }): CSSProperties {\n const disabled = options?.disabled ?? false;\n const active = options?.active ?? false;\n const fullWidth = options?.fullWidth ?? false;\n\n const base: CSSProperties = {\n border: \"1px solid transparent\",\n borderRadius: \"10px\",\n padding: \"8px 12px\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n font: `600 13px ${FONT_FAMILY}`,\n opacity: disabled ? 0.6 : 1,\n width: fullWidth ? \"100%\" : undefined\n };\n\n if (variant === \"primary\") {\n return { ...base, background: \"var(--br-primary)\", color: \"#fff\" };\n }\n\n if (variant === \"danger\") {\n return { ...base, background: \"var(--br-danger)\", color: \"#fff\" };\n }\n\n return {\n ...base,\n background: active ? \"var(--br-primary)\" : \"var(--br-secondary-bg)\",\n borderColor: active ? \"var(--br-primary)\" : \"var(--br-border)\",\n color: active ? \"#fff\" : \"var(--br-text)\"\n };\n}\n\nexport function getDockButtonStyle(isActive: boolean): CSSProperties {\n if (!isActive) {\n return inlineStyles.iconButton;\n }\n\n return {\n ...inlineStyles.iconButton,\n borderColor: \"var(--br-primary)\",\n color: \"#fff\",\n background: \"var(--br-primary)\",\n boxShadow: \"0 0 0 1px rgba(255, 255, 255, 0.35) inset\"\n };\n}\n","\nimport { useBugReporter } from \"../hooks\";\nimport type { LauncherPosition, ThemeMode } from \"../types\";\nimport { getLauncherStyle } from \"../styles/inline\";\n\ntype LauncherButtonProps = {\n position?: LauncherPosition;\n text?: string;\n themeMode?: ThemeMode;\n buttonColor?: string;\n};\n\nexport function LauncherButton({ position, text, themeMode = \"dark\", buttonColor }: LauncherButtonProps) {\n const {\n config,\n state: { isOpen },\n open\n } = useBugReporter();\n\n if (isOpen) {\n return null;\n }\n\n const resolvedPosition = position ?? config.theme.position ?? \"bottom-right\";\n const label = text ?? \"Get Help\";\n const resolvedButtonColor = buttonColor ?? config.theme.primaryColor;\n const launcherStyle = getLauncherStyle({\n position: resolvedPosition,\n borderRadius: config.theme.borderRadius,\n zIndex: config.theme.zIndex,\n buttonColor: resolvedButtonColor,\n themeMode\n });\n\n return (\n <button\n type=\"button\"\n style={launcherStyle}\n onClick={open}\n aria-label=\"Open bug reporter\"\n >\n {label}\n </button>\n );\n}\n","\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../hooks\";\nimport type { DockSide, ThemeMode } from \"../types\";\nimport { getModalOverlayStyle, getModalStyle } from \"../styles/inline\";\n\ntype ModalProps = {\n isOpen: boolean;\n dockSide: DockSide;\n themeMode: ThemeMode;\n buttonColor: string;\n title: string;\n zIndex: number;\n onRequestClose: () => void;\n children: ReactNode;\n};\n\nexport function Modal({ isOpen, dockSide, themeMode, buttonColor, title, zIndex, onRequestClose, children }: ModalProps) {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n useFocusTrap(isOpen, dialogRef);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onRequestClose();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isOpen, onRequestClose]);\n\n if (!isOpen || typeof document === \"undefined\") {\n return null;\n }\n\n const overlayStyle = getModalOverlayStyle({ dockSide, themeMode, zIndex });\n const modalStyle = getModalStyle({ dockSide, themeMode, buttonColor });\n\n return createPortal(\n <div style={overlayStyle}>\n <div ref={dialogRef} style={modalStyle} role=\"dialog\" aria-modal=\"true\" aria-label={title}>\n {children}\n </div>\n </div>,\n document.body\n );\n}\n","export async function loadScreenshotCapture() {\n return import(\"./screenshot\");\n}\n\nexport async function loadScreenRecording() {\n return import(\"./recording\");\n}\n","import { BugReporterError } from \"../types\";\n\nexport function validateScreenshotSize(size: number, maxBytes: number): void {\n if (size > maxBytes) {\n throw new BugReporterError(\n \"VALIDATION_ERROR\",\n `Screenshot exceeds max size (${Math.round(maxBytes / 1024 / 1024)}MB).`\n );\n }\n}\n\nexport function validateVideoSize(size: number, maxBytes: number): void {\n if (size > maxBytes) {\n throw new BugReporterError(\"VALIDATION_ERROR\", `Recording exceeds max size (${Math.round(maxBytes / 1024 / 1024)}MB).`);\n }\n}\n","\nimport {\n forwardRef,\n type MouseEvent,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { getButtonStyle, inlineStyles } from \"../styles/inline\";\n\ntype Tool = \"rectangle\" | \"arrow\";\n\ntype Point = { x: number; y: number };\n\ntype Shape =\n | { kind: \"rectangle\"; start: Point; end: Point }\n | { kind: \"arrow\"; start: Point; end: Point };\n\nexport type AnnotationCanvasHandle = {\n exportBlob: () => Promise<Blob>;\n clear: () => void;\n hasAnnotations: () => boolean;\n};\n\ntype AnnotationCanvasProps = {\n imageUrl: string;\n};\n\nfunction drawArrow(ctx: CanvasRenderingContext2D, start: Point, end: Point) {\n const headLength = 14;\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\n ctx.beginPath();\n ctx.moveTo(start.x, start.y);\n ctx.lineTo(end.x, end.y);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(end.x, end.y);\n ctx.lineTo(end.x - headLength * Math.cos(angle - Math.PI / 6), end.y - headLength * Math.sin(angle - Math.PI / 6));\n ctx.lineTo(end.x - headLength * Math.cos(angle + Math.PI / 6), end.y - headLength * Math.sin(angle + Math.PI / 6));\n ctx.closePath();\n ctx.fill();\n}\n\nexport const AnnotationCanvas = forwardRef<AnnotationCanvasHandle, AnnotationCanvasProps>(function AnnotationCanvas(\n { imageUrl },\n ref\n) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const imageRef = useRef<HTMLImageElement | null>(null);\n const [tool, setTool] = useState<Tool>(\"rectangle\");\n const [shapes, setShapes] = useState<Shape[]>([]);\n const [draftShape, setDraftShape] = useState<Shape | null>(null);\n const dragStartRef = useRef<Point | null>(null);\n\n const redraw = useCallback(\n (ctx: CanvasRenderingContext2D) => {\n const canvas = canvasRef.current;\n const image = imageRef.current;\n if (!canvas || !image) {\n return;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n const toDraw = draftShape ? [...shapes, draftShape] : shapes;\n ctx.strokeStyle = \"#ff3b30\";\n ctx.fillStyle = \"#ff3b30\";\n ctx.lineWidth = 3;\n ctx.font = \"16px sans-serif\";\n\n toDraw.forEach((shape) => {\n if (shape.kind === \"rectangle\") {\n const x = Math.min(shape.start.x, shape.end.x);\n const y = Math.min(shape.start.y, shape.end.y);\n const width = Math.abs(shape.end.x - shape.start.x);\n const height = Math.abs(shape.end.y - shape.start.y);\n ctx.strokeRect(x, y, width, height);\n }\n\n if (shape.kind === \"arrow\") {\n drawArrow(ctx, shape.start, shape.end);\n }\n });\n },\n [draftShape, shapes]\n );\n\n useEffect(() => {\n const image = new Image();\n image.crossOrigin = \"anonymous\";\n image.onload = () => {\n imageRef.current = image;\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n canvas.width = image.width;\n canvas.height = image.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n redraw(ctx);\n };\n image.src = imageUrl;\n }, [imageUrl, redraw]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n redraw(ctx);\n }, [redraw]);\n\n const getCoords = useCallback((event: MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return { x: 0, y: 0 };\n }\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n return {\n x: (event.clientX - rect.left) * scaleX,\n y: (event.clientY - rect.top) * scaleY\n };\n }, []);\n\n const onMouseDown = (event: MouseEvent<HTMLCanvasElement>) => {\n const point = getCoords(event);\n dragStartRef.current = point;\n };\n\n const onMouseMove = (event: MouseEvent<HTMLCanvasElement>) => {\n const start = dragStartRef.current;\n if (!start) {\n return;\n }\n\n const end = getCoords(event);\n if (tool === \"rectangle\") {\n setDraftShape({ kind: \"rectangle\", start, end });\n } else if (tool === \"arrow\") {\n setDraftShape({ kind: \"arrow\", start, end });\n }\n };\n\n const onMouseUp = (event: MouseEvent<HTMLCanvasElement>) => {\n const start = dragStartRef.current;\n if (!start) {\n return;\n }\n dragStartRef.current = null;\n const end = getCoords(event);\n\n if (tool === \"rectangle\") {\n setShapes((prev) => [...prev, { kind: \"rectangle\", start, end }]);\n } else if (tool === \"arrow\") {\n setShapes((prev) => [...prev, { kind: \"arrow\", start, end }]);\n }\n\n setDraftShape(null);\n };\n\n const canvasToBlob = useCallback(async (): Promise<Blob> => {\n const canvas = canvasRef.current;\n if (!canvas) {\n throw new Error(\"Annotation canvas unavailable.\");\n }\n\n const blob = await new Promise<Blob | null>((resolve) => {\n canvas.toBlob(resolve, \"image/png\");\n });\n\n if (!blob) {\n throw new Error(\"Failed to create annotated screenshot.\");\n }\n\n return blob;\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n exportBlob: canvasToBlob,\n clear: () => setShapes([]),\n hasAnnotations: () => shapes.length > 0\n }),\n [canvasToBlob, shapes.length]\n );\n\n const toolButtons = useMemo(\n () => [\n { value: \"rectangle\", label: \"Rectangle\" },\n { value: \"arrow\", label: \"Arrow\" }\n ] as const,\n []\n );\n\n return (\n <div style={inlineStyles.annotation}>\n <div style={inlineStyles.annotationTools} role=\"toolbar\" aria-label=\"Annotation tools\">\n {toolButtons.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n style={getButtonStyle(\"secondary\", { active: tool === option.value })}\n onClick={() => setTool(option.value)}\n >\n {option.label}\n </button>\n ))}\n <button type=\"button\" style={getButtonStyle(\"secondary\")} onClick={() => setShapes([])}>\n Clear\n </button>\n </div>\n <canvas\n ref={canvasRef}\n style={inlineStyles.annotationCanvas}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n aria-label=\"Screenshot annotation canvas\"\n />\n </div>\n );\n});\n","\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ActiveRecording } from \"../core/recording\";\nimport { loadScreenRecording } from \"../core/lazy\";\nimport { blobToObjectUrl, uid } from \"../core/utils\";\nimport { validateVideoSize } from \"../core/validation\";\nimport { useBugReporter } from \"../hooks\";\nimport { getButtonStyle, inlineStyles } from \"../styles/inline\";\n\ntype StepRecordingProps = {\n onBack?: () => void;\n onNext?: () => void;\n embedded?: boolean;\n compact?: boolean;\n};\n\ntype SharedRecordingState = {\n active: ActiveRecording;\n seconds: number;\n};\n\nlet sharedRecording: SharedRecordingState | null = null;\nconst subscribers = new Set<() => void>();\n\nfunction notifySubscribers(): void {\n subscribers.forEach((handler) => handler());\n}\n\nexport function StepRecording({ onBack, onNext, embedded = false, compact = false }: StepRecordingProps) {\n const {\n config,\n state: { assets },\n setRecording\n } = useBugReporter();\n\n const recording = useMemo(() => assets.find((asset) => asset.type === \"recording\"), [assets]);\n const activeRef = useRef<ActiveRecording | null>(null);\n const mountedRef = useRef(true);\n const [isRecording, setIsRecording] = useState(Boolean(sharedRecording));\n const [seconds, setSeconds] = useState(sharedRecording?.seconds ?? 0);\n const [error, setError] = useState<string | null>(null);\n\n const start = async () => {\n if (sharedRecording) {\n setError(\"Recording is already in progress.\");\n return;\n }\n\n setError(null);\n setSeconds(0);\n setIsRecording(true);\n\n try {\n const recorderModule = await loadScreenRecording();\n const active = await recorderModule.startScreenRecording({\n maxSeconds: config.storage.limits.maxVideoSeconds,\n maxBytes: config.storage.limits.maxVideoBytes,\n onTick: (tick) => {\n if (sharedRecording) {\n sharedRecording.seconds = tick;\n notifySubscribers();\n }\n }\n });\n activeRef.current = active;\n sharedRecording = { active, seconds: 0 };\n notifySubscribers();\n\n const result = await active.promise;\n validateVideoSize(result.blob.size, config.storage.limits.maxVideoBytes);\n setRecording({\n id: uid(\"recording\"),\n type: \"recording\",\n blob: result.blob,\n previewUrl: blobToObjectUrl(result.blob),\n mimeType: result.mimeType,\n filename: `recording-${Date.now()}.webm`,\n size: result.blob.size\n });\n } catch (recordingError) {\n if (recordingError instanceof Error && recordingError.message.includes(\"cancelled\")) {\n return;\n }\n if (mountedRef.current) {\n setError(recordingError instanceof Error ? recordingError.message : \"Recording failed.\");\n }\n } finally {\n activeRef.current = null;\n sharedRecording = null;\n notifySubscribers();\n if (mountedRef.current) {\n setIsRecording(false);\n }\n }\n };\n\n const stop = () => {\n if (sharedRecording) {\n sharedRecording.active.stop();\n return;\n }\n activeRef.current?.stop();\n };\n\n useEffect(() => {\n mountedRef.current = true;\n const sync = () => {\n activeRef.current = sharedRecording?.active ?? null;\n setIsRecording(Boolean(sharedRecording));\n setSeconds(sharedRecording?.seconds ?? 0);\n };\n sync();\n subscribers.add(sync);\n\n return () => {\n mountedRef.current = false;\n subscribers.delete(sync);\n };\n }, []);\n\n if (compact) {\n const compactRecordingAction = !isRecording ? (\n <button type=\"button\" style={{ ...getButtonStyle(\"primary\", { fullWidth: true }), ...inlineStyles.captureButton }} onClick={start}>\n <svg style={inlineStyles.captureIcon} viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <circle cx=\"12\" cy=\"12\" r=\"4.5\" />\n <path d=\"M3.5 8.5h3l1.2-2h8.6l1.2 2h3v7h-3l-1.2 2H7.7l-1.2-2h-3z\" />\n </svg>\n <span>{recording ? \"Retake recording\" : \"Record a video\"}</span>\n {recording ? <span style={inlineStyles.captureDone}>Saved</span> : null}\n </button>\n ) : (\n <button type=\"button\" style={{ ...getButtonStyle(\"danger\", { fullWidth: true }), ...inlineStyles.captureButton }} onClick={stop}>\n <svg style={inlineStyles.captureIcon} viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" />\n </svg>\n <span>Stop ({seconds}s)</span>\n </button>\n );\n\n return (\n <div style={inlineStyles.captureItem}>\n {compactRecordingAction}\n {error ? <p style={{ ...inlineStyles.error, marginTop: \"8px\" }}>{error}</p> : null}\n </div>\n );\n }\n\n return (\n <div style={embedded ? undefined : inlineStyles.step}>\n {embedded ? <h3 style={inlineStyles.h3}>Screen recording</h3> : <h2 style={inlineStyles.h2}>Screen recording</h2>}\n <p style={inlineStyles.p}>Record up to {config.storage.limits.maxVideoSeconds} seconds. You can minimize this sidebar while recording.</p>\n\n <div style={inlineStyles.actions}>\n {onBack ? (\n <button type=\"button\" style={getButtonStyle(\"secondary\", { disabled: isRecording })} onClick={onBack} disabled={isRecording}>\n Back\n </button>\n ) : null}\n {!isRecording ? (\n <button type=\"button\" style={getButtonStyle(\"primary\")} onClick={start}>\n {recording ? \"Retake recording\" : \"Record a video\"}\n </button>\n ) : (\n <button type=\"button\" style={getButtonStyle(\"danger\")} onClick={stop}>\n Stop ({seconds}s)\n </button>\n )}\n </div>\n\n {recording ? <video src={recording.previewUrl} style={inlineStyles.preview} controls /> : null}\n {error ? <p style={inlineStyles.error}>{error}</p> : null}\n\n {onNext ? (\n <div style={inlineStyles.actions}>\n <button type=\"button\" style={getButtonStyle(\"primary\")} onClick={onNext}>\n Continue\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n","import type { CustomFormComponent } from \"../types\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { loadScreenshotCapture } from \"../core/lazy\";\nimport { blobToObjectUrl, uid } from \"../core/utils\";\nimport { validateScreenshotSize } from \"../core/validation\";\nimport { useBugReporter } from \"../hooks\";\nimport { AnnotationCanvas, type AnnotationCanvasHandle } from \"./AnnotationCanvas\";\nimport { StepRecording } from \"./StepRecording\";\nimport { getButtonStyle, inlineStyles } from \"../styles/inline\";\n\ntype StepDescribeProps = {\n onNext: () => void;\n CustomForm?: CustomFormComponent;\n};\n\nexport function StepDescribe({ onNext, CustomForm }: StepDescribeProps) {\n const {\n config,\n state: { draft, attributes, assets },\n updateDraft,\n setAttributes,\n updateAttribute,\n setScreenshot\n } = useBugReporter();\n const screenshot = useMemo(() => assets.find((asset) => asset.type === \"screenshot\"), [assets]);\n const recording = useMemo(() => assets.find((asset) => asset.type === \"recording\"), [assets]);\n const annotationRef = useRef<AnnotationCanvasHandle | null>(null);\n const customFormRef = useRef<HTMLDivElement | null>(null);\n const [isCapturing, setIsCapturing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!CustomForm) {\n return;\n }\n\n const root = customFormRef.current;\n if (!root) {\n return;\n }\n\n const applyInlineFormStyles = () => {\n root.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>(\"input, textarea, select\").forEach((control) => {\n if (control.dataset.brInlineStyled === \"true\") {\n return;\n }\n\n Object.assign(control.style, inlineStyles.input, {\n width: \"100%\",\n boxSizing: \"border-box\"\n });\n control.dataset.brInlineStyled = \"true\";\n });\n\n root.querySelectorAll<HTMLLabelElement>(\"label.br-field\").forEach((field) => {\n if (field.dataset.brInlineStyled === \"true\") {\n return;\n }\n Object.assign(field.style, inlineStyles.field);\n field.dataset.brInlineStyled = \"true\";\n });\n };\n\n applyInlineFormStyles();\n\n const observer = new MutationObserver(() => {\n applyInlineFormStyles();\n });\n observer.observe(root, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }, [CustomForm]);\n\n const startCapture = async () => {\n setError(null);\n setIsCapturing(true);\n try {\n const capture = await loadScreenshotCapture();\n const blob = await capture.captureScreenshotArea({\n maskSelectors: config.privacy.maskSelectors,\n redactTextPatterns: config.privacy.redactTextPatterns\n });\n validateScreenshotSize(blob.size, config.storage.limits.maxScreenshotBytes);\n setScreenshot({\n id: uid(\"screenshot\"),\n type: \"screenshot\",\n blob,\n previewUrl: blobToObjectUrl(blob),\n mimeType: blob.type || \"image/png\",\n filename: `screenshot-${Date.now()}.png`,\n size: blob.size\n });\n } catch (captureError) {\n setError(captureError instanceof Error ? captureError.message : \"Screenshot capture failed.\");\n } finally {\n setIsCapturing(false);\n }\n };\n\n const continueToNext = async () => {\n setError(null);\n\n if (config.features.screenshot && !screenshot) {\n setError(\"Capture a screenshot to continue.\");\n return;\n }\n\n if (config.features.screenshot && screenshot && config.features.annotations && annotationRef.current?.hasAnnotations()) {\n const annotatedBlob = await annotationRef.current.exportBlob();\n validateScreenshotSize(annotatedBlob.size, config.storage.limits.maxScreenshotBytes);\n setScreenshot({\n ...screenshot,\n blob: annotatedBlob,\n previewUrl: blobToObjectUrl(annotatedBlob),\n mimeType: annotatedBlob.type || \"image/png\",\n size: annotatedBlob.size\n });\n }\n\n onNext();\n };\n\n const canContinue = Boolean(draft.title.trim()) && (!config.features.screenshot || Boolean(screenshot));\n\n return (\n <div style={{ ...inlineStyles.step, display: \"flex\", flexDirection: \"column\", minHeight: \"100%\" }}>\n <h2 style={inlineStyles.h2}>Report a bug</h2>\n <p style={inlineStyles.p}>Provide enough context so engineers can reproduce what happened.</p>\n\n <label style={inlineStyles.field}>\n Title\n <input\n style={inlineStyles.input}\n value={draft.title}\n onChange={(event) => updateDraft({ title: event.target.value })}\n placeholder=\"Short summary\"\n required\n />\n </label>\n\n <label style={inlineStyles.field}>\n Description\n <textarea\n style={inlineStyles.input}\n value={draft.description}\n onChange={(event) => updateDraft({ description: event.target.value })}\n placeholder=\"What happened?\"\n rows={4}\n />\n </label>\n\n {CustomForm ? (\n <div ref={customFormRef}>\n <CustomForm attributes={attributes} setAttributes={setAttributes} updateAttribute={updateAttribute} />\n </div>\n ) : null}\n\n {config.features.screenshot || config.features.recording ? (\n <>\n <h3 style={inlineStyles.h3}>Capture</h3>\n <div style={inlineStyles.captureRow}>\n {config.features.screenshot ? (\n <div style={inlineStyles.captureItem}>\n <button\n type=\"button\"\n style={{ ...getButtonStyle(\"primary\", { disabled: isCapturing, fullWidth: true }), ...inlineStyles.captureButton }}\n onClick={startCapture}\n disabled={isCapturing}\n >\n <svg style={inlineStyles.captureIcon} viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M4 8.5h3l1.2-2h7.6l1.2 2h3v9H4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3.5\" />\n </svg>\n <span>{isCapturing ? \"Capturing...\" : screenshot ? \"Retake screenshot\" : \"Screenshot\"}</span>\n {screenshot ? <span style={inlineStyles.captureDone}>Saved</span> : null}\n </button>\n </div>\n ) : null}\n {config.features.recording ? <StepRecording embedded compact /> : null}\n </div>\n <p style={inlineStyles.captureNote}>\n {config.features.screenshot && config.features.recording\n ? `Capture a screenshot and optionally record up to ${config.storage.limits.maxVideoSeconds} seconds.`\n : config.features.screenshot\n ? \"Capture the relevant area before continuing.\"\n : `Record up to ${config.storage.limits.maxVideoSeconds} seconds.`}\n </p>\n\n {screenshot ? (\n <div style={inlineStyles.previewWrapper}>\n {config.features.annotations ? (\n <AnnotationCanvas ref={annotationRef} imageUrl={screenshot.previewUrl} />\n ) : (\n <img src={screenshot.previewUrl} alt=\"Screenshot preview\" style={inlineStyles.preview} />\n )}\n </div>\n ) : null}\n\n {!screenshot && recording ? <p style={inlineStyles.captureNote}>Recording saved.</p> : null}\n </>\n ) : null}\n\n {error ? <p style={inlineStyles.error}>{error}</p> : null}\n\n <div\n style={{\n ...inlineStyles.actions,\n marginTop: \"auto\",\n position: \"sticky\",\n bottom: 0,\n background: \"var(--br-bg)\",\n paddingTop: \"12px\",\n paddingBottom: \"12px\"\n }}\n >\n <button\n type=\"button\"\n style={getButtonStyle(\"primary\", { disabled: !canContinue, fullWidth: true })}\n disabled={!canContinue}\n onClick={continueToNext}\n >\n Continue\n </button>\n </div>\n </div>\n );\n}\n","import { useBugReporter } from \"../hooks\";\nimport { getButtonStyle, inlineStyles } from \"../styles/inline\";\n\ntype StepReviewProps = {\n onBack: () => void;\n};\n\nexport function StepReview({ onBack }: StepReviewProps) {\n const {\n state: { assets, draft, isSubmitting, uploadProgress, error },\n submit\n } = useBugReporter();\n\n return (\n <div style={{ ...inlineStyles.step, display: \"flex\", flexDirection: \"column\", minHeight: \"100%\" }}>\n <h2 style={inlineStyles.h2}>Review and submit</h2>\n <p style={inlineStyles.p}>Confirm details, then send your report.</p>\n\n <div style={inlineStyles.summary}>\n <strong>{draft.title || \"Untitled bug report\"}</strong>\n <p style={inlineStyles.p}>{draft.description || \"No description provided.\"}</p>\n </div>\n\n <div style={inlineStyles.assets}>\n {assets.map((asset) => (\n <div key={asset.id} style={inlineStyles.assetCard}>\n <span style={inlineStyles.assetType}>{asset.type}</span>\n {asset.type === \"recording\" ? (\n <video src={asset.previewUrl} controls style={inlineStyles.preview} />\n ) : (\n <img src={asset.previewUrl} alt={`${asset.type} preview`} style={inlineStyles.preview} />\n )}\n </div>\n ))}\n </div>\n\n {isSubmitting ? (\n <div style={inlineStyles.uploadProgress} aria-live=\"polite\">\n Uploading assets: {Math.round(uploadProgress * 100)}%\n <div style={inlineStyles.progressTrack}>\n <div style={{ ...inlineStyles.progressFill, width: `${Math.round(uploadProgress * 100)}%` }} />\n </div>\n </div>\n ) : null}\n\n {error ? <p style={inlineStyles.error}>{error}</p> : null}\n\n <div\n style={{\n ...inlineStyles.actions,\n marginTop: \"auto\",\n position: \"sticky\",\n bottom: 0,\n background: \"var(--br-bg)\",\n paddingTop: \"12px\",\n paddingBottom: \"12px\"\n }}\n >\n <button\n type=\"button\"\n style={{ ...getButtonStyle(\"secondary\", { disabled: isSubmitting }), flex: 1 }}\n onClick={onBack}\n disabled={isSubmitting}\n >\n Back\n </button>\n <button\n type=\"button\"\n style={{ ...getButtonStyle(\"primary\", { disabled: isSubmitting }), flex: 1 }}\n onClick={submit}\n disabled={isSubmitting}\n >\n Submit\n </button>\n </div>\n </div>\n );\n}\n","\nimport { BugReporterProvider } from \"./BugReporterProvider\";\nimport { LauncherButton } from \"./LauncherButton\";\nimport { Modal } from \"./Modal\";\nimport { StepDescribe } from \"./StepDescribe\";\nimport { StepReview } from \"./StepReview\";\nimport { useBugReporter } from \"../hooks\";\nimport type { BugReporterConfig, CustomFormComponent, DockSide, LauncherPosition, ThemeMode } from \"../types\";\nimport { getButtonStyle, getDockButtonStyle, inlineStyles } from \"../styles/inline\";\n\ntype BugReporterProps = {\n config: BugReporterConfig;\n CustomForm?: CustomFormComponent;\n launcherPosition?: LauncherPosition;\n launcherText?: string;\n themeMode?: ThemeMode;\n buttonColor?: string;\n};\n\ntype BugReporterShellProps = {\n CustomForm?: CustomFormComponent;\n launcherPosition?: LauncherPosition;\n launcherText?: string;\n themeMode: ThemeMode;\n buttonColor: string;\n};\n\nconst DOCK_SIDES: DockSide[] = [\"left\", \"right\", \"top\", \"bottom\"];\n\nfunction DockIcon({ side }: { side: DockSide }) {\n if (side === \"left\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" style={inlineStyles.iconSvg}>\n <path d=\"M3.5 5.5h17v13h-17z\" />\n <path d=\"M3.5 5.5h4.5v13H3.5z\" fill=\"currentColor\" stroke=\"none\" opacity=\"0.85\" />\n </svg>\n );\n }\n\n if (side === \"right\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" style={inlineStyles.iconSvg}>\n <path d=\"M3.5 5.5h17v13h-17z\" />\n <path d=\"M16 5.5h4.5v13H16z\" fill=\"currentColor\" stroke=\"none\" opacity=\"0.85\" />\n </svg>\n );\n }\n\n if (side === \"top\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" style={inlineStyles.iconSvg}>\n <path d=\"M3.5 5.5h17v13h-17z\" />\n <path d=\"M3.5 5.5h17v4.5h-17z\" fill=\"currentColor\" stroke=\"none\" opacity=\"0.85\" />\n </svg>\n );\n }\n\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" style={inlineStyles.iconSvg}>\n <path d=\"M3.5 5.5h17v13h-17z\" />\n <path d=\"M3.5 14h17v4.5h-17z\" fill=\"currentColor\" stroke=\"none\" opacity=\"0.85\" />\n </svg>\n );\n}\n\nfunction BugReporterShell({ CustomForm, launcherPosition, launcherText, themeMode, buttonColor }: BugReporterShellProps) {\n const { config, state, setDockSide, setStep, close, reset } = useBugReporter();\n\n const nextFromDescribe = () => {\n setStep(\"review\");\n };\n\n const requestClose = () => {\n if (state.step === \"success\") {\n reset();\n }\n close();\n };\n\n const modalTitle = state.step === \"success\" ? \"Report submitted\" : \"Report a bug\";\n\n return (\n <>\n <LauncherButton position={launcherPosition} text={launcherText} themeMode={themeMode} buttonColor={buttonColor} />\n <Modal\n isOpen={state.isOpen}\n dockSide={state.dockSide}\n themeMode={themeMode}\n buttonColor={buttonColor}\n title={modalTitle}\n zIndex={config.theme.zIndex + 1}\n onRequestClose={requestClose}\n >\n <div style={inlineStyles.modalHeader}>\n <div style={inlineStyles.dockControls} role=\"group\" aria-label=\"Dock side\">\n {DOCK_SIDES.map((side) => {\n const isActive = state.dockSide === side;\n return (\n <button\n key={side}\n style={getDockButtonStyle(isActive)}\n type=\"button\"\n onClick={() => setDockSide(side)}\n aria-pressed={isActive}\n aria-label={`Dock ${side}`}\n >\n <DockIcon side={side} />\n </button>\n );\n })}\n </div>\n <button style={inlineStyles.iconButton} type=\"button\" onClick={requestClose} aria-label=\"Close bug reporter\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" style={inlineStyles.iconSvg}>\n <path d=\"M6 6 18 18M18 6 6 18\" />\n </svg>\n </button>\n </div>\n\n {state.step === \"describe\" ? <StepDescribe onNext={nextFromDescribe} CustomForm={CustomForm} /> : null}\n {state.step === \"review\" || state.step === \"submitting\" ? (\n <StepReview\n onBack={() => {\n setStep(\"describe\");\n }}\n />\n ) : null}\n\n {state.step === \"success\" ? (\n <div style={inlineStyles.step}>\n <h2 style={inlineStyles.h2}>Thanks, report submitted</h2>\n <p style={inlineStyles.p}>Your bug report has been sent successfully.</p>\n <div style={inlineStyles.actions}>\n <button type=\"button\" style={getButtonStyle(\"primary\")} onClick={requestClose}>\n Close\n </button>\n </div>\n </div>\n ) : null}\n </Modal>\n </>\n );\n}\n\nexport function BugReporter({\n config,\n CustomForm,\n launcherPosition,\n launcherText,\n themeMode = \"dark\",\n buttonColor\n}: BugReporterProps) {\n const resolvedButtonColor = buttonColor ?? config.theme?.primaryColor ?? \"#3b82f6\";\n\n return (\n <BugReporterProvider config={config}>\n <BugReporterShell\n CustomForm={CustomForm}\n launcherPosition={launcherPosition}\n launcherText={launcherText}\n themeMode={themeMode}\n buttonColor={resolvedButtonColor}\n />\n </BugReporterProvider>\n );\n}\n"]}