@omerdlw/base-framework 1.0.0 → 1.0.2
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.
- package/LICENSE +1 -1
- package/README.md +121 -52
- package/dist/atoms/index.d.ts +0 -1
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/index.js +1 -64
- package/dist/atoms/index.js.map +1 -1
- package/dist/error/index.js +22 -25
- package/dist/error/index.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -9
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +97 -540
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/types.d.ts +3 -45
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/hooks/use-controllable-state.d.ts +1 -1
- package/dist/hooks/use-controllable-state.d.ts.map +1 -1
- package/dist/hooks/use-global-event.d.ts +0 -2
- package/dist/hooks/use-global-event.d.ts.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +1 -1
- package/dist/hooks/use-hotkey.d.ts.map +1 -1
- package/dist/index.js +11283 -11772
- package/dist/index.js.map +1 -1
- package/dist/kernel/adapters.d.ts.map +1 -1
- package/dist/kernel/index.d.ts +1 -0
- package/dist/kernel/index.d.ts.map +1 -1
- package/dist/kernel/index.js +10 -81
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/installed.d.ts.map +1 -1
- package/dist/kernel/page-controller.d.ts.map +1 -1
- package/dist/kernel/provider.d.ts.map +1 -1
- package/dist/modules/ambient/constants.d.ts +1 -1
- package/dist/modules/ambient/constants.d.ts.map +1 -1
- package/dist/modules/ambient/index.js +180 -326
- package/dist/modules/ambient/index.js.map +1 -1
- package/dist/modules/ambient/module.d.ts.map +1 -1
- package/dist/modules/background/constants.d.ts +4 -2
- package/dist/modules/background/constants.d.ts.map +1 -1
- package/dist/modules/background/context.d.ts +3 -0
- package/dist/modules/background/context.d.ts.map +1 -1
- package/dist/modules/background/hooks.d.ts +1 -1
- package/dist/modules/background/index.d.ts +2 -2
- package/dist/modules/background/index.d.ts.map +1 -1
- package/dist/modules/background/index.js +1172 -1270
- package/dist/modules/background/index.js.map +1 -1
- package/dist/modules/background/overlay.d.ts +1 -1
- package/dist/modules/background/overlay.d.ts.map +1 -1
- package/dist/modules/background/types.d.ts +1 -1
- package/dist/modules/background/types.d.ts.map +1 -1
- package/dist/modules/context-menu/constants.d.ts +1 -1
- package/dist/modules/context-menu/constants.d.ts.map +1 -1
- package/dist/modules/context-menu/context.d.ts.map +1 -1
- package/dist/modules/context-menu/hooks.d.ts.map +1 -1
- package/dist/modules/context-menu/index.js +133 -238
- package/dist/modules/context-menu/index.js.map +1 -1
- package/dist/modules/controls/constants.d.ts +1 -1
- package/dist/modules/controls/constants.d.ts.map +1 -1
- package/dist/modules/controls/hooks.d.ts +1 -1
- package/dist/modules/controls/index.js +28 -162
- package/dist/modules/controls/index.js.map +1 -1
- package/dist/modules/controls/types.d.ts +1 -1
- package/dist/modules/controls/types.d.ts.map +1 -1
- package/dist/modules/dock/cards.d.ts +2 -2
- package/dist/modules/dock/constants.d.ts +1 -1
- package/dist/modules/dock/constants.d.ts.map +1 -1
- package/dist/modules/dock/context.d.ts +10 -6
- package/dist/modules/dock/context.d.ts.map +1 -1
- package/dist/modules/dock/hooks.d.ts +5 -5
- package/dist/modules/dock/hooks.d.ts.map +1 -1
- package/dist/modules/dock/index.d.ts +1 -1
- package/dist/modules/dock/index.d.ts.map +1 -1
- package/dist/modules/dock/index.js +2060 -2080
- package/dist/modules/dock/index.js.map +1 -1
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
- package/dist/modules/dock/types.d.ts +1 -1
- package/dist/modules/dock/types.d.ts.map +1 -1
- package/dist/modules/index.js +10789 -11027
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/loading/constants.d.ts +4 -2
- package/dist/modules/loading/constants.d.ts.map +1 -1
- package/dist/modules/loading/context.d.ts +3 -0
- package/dist/modules/loading/context.d.ts.map +1 -1
- package/dist/modules/loading/hooks.d.ts +1 -1
- package/dist/modules/loading/hooks.d.ts.map +1 -1
- package/dist/modules/loading/index.d.ts +2 -2
- package/dist/modules/loading/index.d.ts.map +1 -1
- package/dist/modules/loading/index.js +118 -222
- package/dist/modules/loading/index.js.map +1 -1
- package/dist/modules/loading/types.d.ts +1 -1
- package/dist/modules/loading/types.d.ts.map +1 -1
- package/dist/modules/media/constants.d.ts +2 -1
- package/dist/modules/media/constants.d.ts.map +1 -1
- package/dist/modules/media/context.d.ts +3 -0
- package/dist/modules/media/context.d.ts.map +1 -1
- package/dist/modules/media/index.d.ts +2 -2
- package/dist/modules/media/index.d.ts.map +1 -1
- package/dist/modules/media/index.js +61 -218
- package/dist/modules/media/index.js.map +1 -1
- package/dist/modules/modal/constants.d.ts +1 -1
- package/dist/modules/modal/constants.d.ts.map +1 -1
- package/dist/modules/modal/context.d.ts.map +1 -1
- package/dist/modules/modal/hooks.d.ts +2 -2
- package/dist/modules/modal/index.js +20 -366
- package/dist/modules/modal/index.js.map +1 -1
- package/dist/modules/notification/constants.d.ts +4 -2
- package/dist/modules/notification/constants.d.ts.map +1 -1
- package/dist/modules/notification/context.d.ts +4 -0
- package/dist/modules/notification/context.d.ts.map +1 -1
- package/dist/modules/notification/hooks.d.ts +1 -1
- package/dist/modules/notification/index.d.ts +2 -3
- package/dist/modules/notification/index.d.ts.map +1 -1
- package/dist/modules/notification/index.js +70 -154
- package/dist/modules/notification/index.js.map +1 -1
- package/dist/modules/notification/module.d.ts.map +1 -1
- package/dist/provider.js +255 -257
- package/dist/provider.js.map +1 -1
- package/dist/theme.d.ts +1 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +2 -2
- package/dist/theme.js.map +1 -1
- package/dist/utils/index.d.ts +5 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -57
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/number.d.ts +0 -1
- package/dist/utils/number.d.ts.map +1 -1
- package/dist/utils/object.d.ts +0 -2
- package/dist/utils/object.d.ts.map +1 -1
- package/dist/utils/string.d.ts +0 -3
- package/dist/utils/string.d.ts.map +1 -1
- package/dist/utils/timing.d.ts +0 -1
- package/dist/utils/timing.d.ts.map +1 -1
- package/docs/README.md +124 -0
- package/docs/architecture-and-rules.md +129 -0
- package/docs/core-engine.md +196 -0
- package/docs/custom-modules.md +267 -0
- package/docs/getting-started.md +199 -0
- package/docs/modules/README.md +176 -0
- package/docs/modules/ambient.md +150 -0
- package/docs/modules/background.md +195 -0
- package/docs/modules/context-menu.md +248 -0
- package/docs/modules/controls.md +159 -0
- package/docs/modules/dock.md +734 -0
- package/docs/modules/error-boundary.md +160 -0
- package/docs/modules/kernel.md +266 -0
- package/docs/modules/loading.md +157 -0
- package/docs/modules/media.md +196 -0
- package/docs/modules/modal.md +229 -0
- package/docs/modules/notification.md +161 -0
- package/docs/modules/result.md +135 -0
- package/docs/testing.md +160 -0
- package/docs/theming.md +185 -0
- package/package.json +50 -2
- package/templates/AGENTS.md +165 -0
- package/dist/hooks/use-async-action.d.ts +0 -3
- package/dist/hooks/use-async-action.d.ts.map +0 -1
- package/dist/hooks/use-debounce.d.ts +0 -2
- package/dist/hooks/use-debounce.d.ts.map +0 -1
- package/dist/hooks/use-intersection-observer.d.ts +0 -4
- package/dist/hooks/use-intersection-observer.d.ts.map +0 -1
- package/dist/hooks/use-media-query.d.ts +0 -2
- package/dist/hooks/use-media-query.d.ts.map +0 -1
- package/dist/hooks/use-mounted.d.ts +0 -2
- package/dist/hooks/use-mounted.d.ts.map +0 -1
- package/dist/hooks/use-server-action.d.ts +0 -4
- package/dist/hooks/use-server-action.d.ts.map +0 -1
- package/dist/hooks/use-storage-state.d.ts +0 -5
- package/dist/hooks/use-storage-state.d.ts.map +0 -1
- package/dist/modules/theme.d.ts +0 -3
- package/dist/modules/theme.d.ts.map +0 -1
- package/dist/utils/json.d.ts +0 -3
- package/dist/utils/json.d.ts.map +0 -1
package/dist/error/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/constants.ts","../../src/error/utils.ts","../../src/error/reporter.ts","../../src/utils/report.ts","../../src/events.ts","../../src/atoms/icon.tsx","../../src/atoms/button.tsx","../../src/kernel/context-registry.ts","../../src/theme.tsx","../../src/error/theme.ts","../../src/utils/user-message.ts","../../src/error/boundary.tsx","../../src/error/listener.ts"],"names":["IS_BROWSER","report","IconifyIcon","jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["export const ERROR_MESSAGES = Object.freeze({\n GLOBAL_TITLE: \"Something went wrong\",\n GLOBAL_MSG: \"We ran into an unexpected problem. Please try again\",\n MODULE_TITLE: \"Something went wrong\",\n MODULE_MSG: \"This part of the app isn't working right now. Please try again\",\n COMPONENT_MSG: \"This section couldn't be loaded. Please try again\",\n FALLBACK_TITLE: \"Something went wrong\",\n FALLBACK_MSG: \"This section couldn't be loaded. Please try again\",\n} as const);\n\nexport const MAX_CONTEXT = 10;\nexport const MAX_FINGERPRINTS = 100;\nexport const DEFAULT_DEDUPE_WINDOW = 60000;\n\nexport const ERROR_LISTENER_CONFIG = Object.freeze({\n maxErrors: 10,\n throttle: 2000,\n ignored: Object.freeze([\n /ResizeObserver loop/i,\n /Network request failed/i,\n /Loading chunk/i,\n /Unexpected end of input/i,\n /Failed to fetch/i,\n /Script error/i,\n /HTTP\\s*404/i,\n ]),\n} as const);\n","import type { ErrorInfo } from \"react\";\nimport { DEFAULT_DEDUPE_WINDOW, ERROR_LISTENER_CONFIG } from \"./constants\";\nimport type {\n BrowserEnvironment,\n ErrorContextData,\n ErrorReport,\n} from \"./types\";\n\nconst IS_BROWSER = typeof window !== \"undefined\";\nconst HAS_NAVIGATOR = typeof navigator !== \"undefined\";\n\nexport const getRuntimePath = (): string | null =>\n typeof window !== \"undefined\" ? window.location.pathname : null;\n\nexport const getUserAgent = (): string | null =>\n typeof navigator !== \"undefined\" ? navigator.userAgent : null;\n\nexport function createErrorContext({\n errorInfo,\n name,\n title,\n variant,\n}: {\n errorInfo?: ErrorInfo | null;\n name?: string;\n title?: string;\n variant?: string;\n}): ErrorContextData {\n return {\n componentStack: errorInfo?.componentStack || null,\n route: getRuntimePath(),\n userAgent: getUserAgent(),\n timestamp: new Date().toISOString(),\n name: name || title || \"ErrorBoundary\",\n variant: variant || \"default\",\n source: \"ErrorBoundary\",\n };\n}\n\nexport function normalizeSampleRate(value: unknown): number {\n const sampleRate = Number(value);\n return Number.isFinite(sampleRate) ? Math.min(1, Math.max(0, sampleRate)) : 1;\n}\n\nexport function normalizeDedupeWindow(value: unknown): number {\n const dedupeWindow = Number(value);\n return Number.isFinite(dedupeWindow)\n ? Math.max(0, dedupeWindow)\n : DEFAULT_DEDUPE_WINDOW;\n}\n\nexport function getBrowserEnvironment(\n route?: string | null,\n): BrowserEnvironment {\n return {\n route: route || (IS_BROWSER ? window.location.pathname : null),\n userAgent: HAS_NAVIGATOR ? navigator.userAgent : null,\n platform: HAS_NAVIGATOR ? navigator.platform : null,\n language: HAS_NAVIGATOR ? navigator.language : null,\n online: HAS_NAVIGATOR ? navigator.onLine : true,\n url: IS_BROWSER ? window.location.href : null,\n };\n}\n\nexport function fingerprint(\n error: unknown,\n context: Partial<ErrorContextData> = {},\n): string {\n const stackTop =\n typeof context.componentStack === \"string\"\n ? context.componentStack.split(\"\\n\").find(Boolean) || \"\"\n : \"\";\n\n const errObj = error as { message?: string; name?: string } | null;\n const errorMessage = (errObj?.message || String(error || \"\")).slice(0, 100);\n const errorName = errObj?.name || \"UnknownError\";\n const route = context.route || \"\";\n\n return [stackTop, errorMessage, errorName, route].filter(Boolean).join(\"::\");\n}\n\nexport function createReport(\n error: unknown,\n {\n context = {},\n tags = {},\n }: {\n context?: Record<string, unknown>;\n tags?: Record<string, string>;\n } = {},\n): ErrorReport {\n const errObj = error as {\n message?: string;\n name?: string;\n stack?: string;\n } | null;\n return {\n error: {\n message: errObj?.message || String(error),\n stack: errObj?.stack || null,\n name: errObj?.name || \"UnknownError\",\n },\n fingerprint: fingerprint(error, context as Partial<ErrorContextData>),\n timestamp: new Date().toISOString(),\n environment: getBrowserEnvironment(context.route as string | undefined),\n componentStack: (context.componentStack as string) || null,\n context,\n tags,\n };\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (!error) return \"\";\n if (typeof error === \"string\") return error.trim();\n if (error instanceof Error) return error.message.trim();\n\n const errObj = error as { message?: string; toString?: () => string };\n return String(errObj?.message || errObj?.toString?.() || error).trim();\n}\n\nexport function shouldIgnoreError(error: unknown): boolean {\n if (!error) return true;\n\n const errWithNotFound = error as { isNotFound?: () => boolean };\n if (\n typeof errWithNotFound?.isNotFound === \"function\" &&\n errWithNotFound.isNotFound()\n ) {\n return true;\n }\n\n const message = getErrorMessage(error);\n return ERROR_LISTENER_CONFIG.ignored.some((pattern) => pattern.test(message));\n}\n","import {\n DEFAULT_DEDUPE_WINDOW,\n MAX_CONTEXT,\n MAX_FINGERPRINTS,\n} from \"./constants\";\nimport type {\n ErrorReport,\n ErrorReporterHandler,\n ErrorReporterOptions,\n SentryScope,\n} from \"./types\";\nimport {\n createReport,\n normalizeDedupeWindow,\n normalizeSampleRate,\n} from \"./utils\";\n\nconst IS_PRODUCTION = process.env.NODE_ENV === \"production\";\nconst IS_BROWSER = typeof window !== \"undefined\";\n\ndeclare global {\n interface Window {\n Sentry?: {\n captureException: (error: unknown) => void;\n withScope: (callback: (scope: SentryScope) => void) => void;\n };\n }\n}\n\nclass ErrorReporter {\n private handlers: ErrorReporterHandler[] = [];\n private context: Record<string, unknown> = {};\n private tags: Record<string, string> = {};\n private seen = new Set<string>();\n private enabled: boolean;\n private sampleRate: number;\n private beforeSend: ((report: ErrorReport) => ErrorReport | null) | null;\n private dedupeWindow: number;\n\n constructor(options: ErrorReporterOptions = {}) {\n this.enabled = options.enabled ?? true;\n this.sampleRate = normalizeSampleRate(options.sampleRate ?? 1);\n this.beforeSend = options.beforeSend || null;\n this.dedupeWindow = normalizeDedupeWindow(\n options.deduplicateWindow ?? DEFAULT_DEDUPE_WINDOW,\n );\n }\n\n addHandler(handler: ErrorReporterHandler): this {\n if (typeof handler?.handle === \"function\") {\n this.handlers.push(handler);\n }\n return this;\n }\n\n removeHandler(name: string): this {\n this.handlers = this.handlers.filter((handler) => handler.name !== name);\n return this;\n }\n\n setContext(key: string, value: unknown): this {\n if (\n Object.hasOwn(this.context, key) ||\n Object.keys(this.context).length < MAX_CONTEXT\n ) {\n this.context[key] = value;\n }\n return this;\n }\n\n setTag(key: string, value: unknown): this {\n this.tags[key] = String(value);\n return this;\n }\n\n captureError(\n error: unknown,\n extraContext: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n if (!this.enabled || Math.random() > this.sampleRate) return;\n\n this.ensureDefaultHandlers();\n\n const context = { ...this.context, ...extraContext };\n let report = createReport(error, { context, tags: { ...this.tags } });\n const dedupeKey = report.fingerprint;\n\n if (this.seen.has(dedupeKey)) return;\n\n if (this.seen.size >= MAX_FINGERPRINTS) {\n const first = this.seen.keys().next().value;\n if (first) this.seen.delete(first);\n }\n\n this.seen.add(dedupeKey);\n setTimeout(() => this.seen.delete(dedupeKey), this.dedupeWindow);\n\n if (typeof this.beforeSend === \"function\") {\n try {\n const transformed = this.beforeSend(report);\n if (!transformed) return;\n report = transformed;\n } catch {}\n }\n\n this.handlers.forEach((handler) => {\n try {\n handler.handle(report);\n } catch {}\n });\n\n return report;\n }\n\n captureMessage(\n message: string,\n level = \"info\",\n context: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n const error = new Error(message);\n error.name = \"Message\";\n return this.captureError(error, { ...context, level });\n }\n\n ensureDefaultHandlers(): void {\n if (this.handlers.length || !IS_BROWSER) return;\n\n this.handlers.push(createConsoleHandler());\n\n if (window.Sentry) {\n const sentryHandler = createSentryHandler(window.Sentry);\n if (sentryHandler.name === \"sentry\") {\n this.handlers.push(sentryHandler);\n }\n }\n }\n}\n\nlet instance: ErrorReporter | null = null;\n\nexport function getErrorReporter(\n options: ErrorReporterOptions = {},\n): ErrorReporter {\n if (!instance) {\n instance = new ErrorReporter(options);\n }\n return instance;\n}\n\nexport function createConsoleHandler(): ErrorReporterHandler {\n return {\n name: \"console\",\n handle(report: ErrorReport) {\n if (IS_PRODUCTION) return;\n console.error(\"[ErrorReporter]\", {\n error: report.error.message,\n fingerprint: report.fingerprint,\n route: report.environment.route,\n });\n },\n };\n}\n\nexport function createSentryHandler(Sentry: unknown): ErrorReporterHandler {\n const sentryObj = Sentry as {\n captureException?: (err: Error) => void;\n withScope?: (cb: (scope: SentryScope) => void) => void;\n } | null;\n\n if (\n !sentryObj ||\n typeof sentryObj.captureException !== \"function\" ||\n typeof sentryObj.withScope !== \"function\"\n ) {\n return createConsoleHandler();\n }\n\n return {\n name: \"sentry\",\n handle(report: ErrorReport) {\n sentryObj.withScope!((scope: SentryScope) => {\n if (report.fingerprint) scope.setFingerprint([report.fingerprint]);\n if (report.user) scope.setUser(report.user);\n\n if (report.tags && typeof report.tags === \"object\") {\n Object.entries(report.tags).forEach(([key, value]) =>\n scope.setTag(key, String(value)),\n );\n }\n\n if (report.environment)\n scope.setContext(\"environment\", report.environment);\n if (report.context) scope.setContext(\"custom\", report.context);\n if (report.componentStack)\n scope.setExtra(\"componentStack\", report.componentStack);\n\n const error = new Error(report.error.message);\n error.name = report.error.name || \"Error\";\n error.stack = report.error.stack || undefined;\n\n sentryObj.captureException!(error);\n });\n },\n };\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n","\"use client\";\n\nimport { Icon as IconifyIcon } from \"@iconify-icon/react\";\nimport type { ComponentProps, CSSProperties } from \"react\";\n\nexport interface IconProps\n extends Omit<ComponentProps<typeof IconifyIcon>, \"icon\" | \"size\"> {\n icon: string | ComponentProps<typeof IconifyIcon>[\"icon\"];\n size?: number | string;\n color?: string;\n className?: string;\n style?: CSSProperties;\n onClick?: () => void;\n}\n\nexport function Icon({\n className = \"center\",\n color,\n icon,\n onClick,\n size = 20,\n style,\n ...props\n}: IconProps) {\n return (\n <IconifyIcon\n className={className}\n height={size}\n icon={icon}\n onClick={onClick}\n style={{ color, ...style }}\n width={size}\n {...props}\n />\n );\n}\n\nIcon.displayName = \"Icon\";\n","\"use client\";\n\nimport type { ButtonHTMLAttributes, ReactNode, Ref } from \"react\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n children?: ReactNode;\n loading?: boolean;\n}\n\nexport function Button({\n ref,\n children,\n className,\n disabled = false,\n loading = false,\n type = \"button\",\n ...props\n}: ButtonProps) {\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading ? true : undefined}\n className={className}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nButton.displayName = \"Button\";\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","\"use client\";\n\nimport {\n createContext,\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nimport { getOrCreateGlobalContext } from \"@/kernel/context-registry\";\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Add its theme file to src/config/ and list it in src/config/index.ts.`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n","import { defineThemeSpec } from \"@/theme\";\n\nexport type ErrorThemeSlot = \"screen\" | \"icon\" | \"title\" | \"retryButton\";\n\nexport const errorTheme = defineThemeSpec<ErrorThemeSlot>(\"error\");\n","export const USER_MESSAGES = Object.freeze({\n generic: \"Something went wrong. Please try again\",\n network: \"You appear to be offline. Check your connection and try again\",\n timeout: \"That took too long. Please try again\",\n unauthorized: \"Your session has expired. Please sign in again\",\n forbidden: \"You don't have permission to do that\",\n notFound: \"We couldn't find what you were looking for\",\n rateLimited: \"Too many attempts. Please wait a moment and try again\",\n server: \"We're having trouble on our end. Please try again in a moment\",\n} as const);\n\nexport class UserError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"UserError\";\n this.status = status;\n }\n}\n\nexport interface UserMessageOptions {\n fallback?: string;\n codes?: Readonly<Record<string, string>>;\n}\n\nconst NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;\n\nfunction readField<T>(\n source: unknown,\n field: string,\n type: \"string\" | \"number\",\n): T | undefined {\n const value = (source as Record<string, unknown> | null)?.[field];\n return typeof value === type ? (value as T) : undefined;\n}\n\nfunction readPayloadMessage(error: unknown): string | undefined {\n const payload = (error as { payload?: unknown } | null)?.payload;\n const message = readField<string>(payload, \"error\", \"string\")?.trim();\n return message || undefined;\n}\n\nexport function toUserMessage(\n error: unknown,\n { codes, fallback = USER_MESSAGES.generic }: UserMessageOptions = {},\n): string {\n if (typeof error === \"string\") return error.trim() || fallback;\n if (!error || typeof error !== \"object\") return fallback;\n\n if (error instanceof UserError) {\n if (error.status === 401) return USER_MESSAGES.unauthorized;\n return error.message || fallback;\n }\n if ((error as { name?: string }).name === \"AbortError\") return fallback;\n\n const code = readField<string>(error, \"code\", \"string\");\n if (code && codes?.[code]) return codes[code];\n\n const status = readField<number>(error, \"status\", \"number\");\n\n if (status === 401) return USER_MESSAGES.unauthorized;\n if (status === 429) return USER_MESSAGES.rateLimited;\n if (status === 408 || status === 504) return USER_MESSAGES.timeout;\n if (status !== undefined && status >= 500) return USER_MESSAGES.server;\n\n if (status !== undefined && status >= 400) {\n const authored = readPayloadMessage(error);\n if (authored) return authored;\n if (status === 403) return USER_MESSAGES.forbidden;\n if (status === 404) return USER_MESSAGES.notFound;\n return fallback;\n }\n\n const isOffline =\n typeof navigator !== \"undefined\" && navigator.onLine === false;\n if (\n isOffline ||\n (NETWORK_FAILURE.test((error as Error).message ?? \"\") &&\n (error instanceof TypeError || /fetch/i.test((error as Error).name)))\n ) {\n return USER_MESSAGES.network;\n }\n\n return fallback;\n}\n","\"use client\";\n\nimport React, { type ErrorInfo, type ReactNode } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { Button, Icon } from \"@/atoms\";\nimport { useTheme } from \"@/theme\";\nimport { ERROR_MESSAGES } from \"./constants\";\nimport { errorTheme } from \"./theme\";\nimport { getErrorReporter } from \"./reporter\";\nimport type {\n ComponentErrorProps,\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState,\n GlobalErrorProps,\n ModuleErrorProps,\n} from \"./types\";\nimport { createErrorContext } from \"./utils\";\nimport { report, toUserMessage } from \"@/utils\";\n\nconst ActionButton = Button as React.ComponentType<{\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n type?: \"button\" | \"submit\" | \"reset\";\n}>;\n\nfunction DefaultErrorFallback({\n error,\n message,\n resetError,\n title,\n}: {\n error: Error | null;\n message?: string;\n resetError: () => void;\n title?: string;\n}) {\n const theme = useTheme(errorTheme);\n\n return (\n <div className={theme.slots.screen}>\n <div className={theme.slots.icon}>\n <Icon icon={\"solar:danger-circle-bold\"} size={30} />\n </div>\n <h3 className={theme.slots.title}>\n {message ||\n toUserMessage(error, { fallback: ERROR_MESSAGES.FALLBACK_MSG })}\n </h3>\n <ActionButton\n className={theme.slots.retryButton}\n onClick={resetError}\n type=\"button\"\n >\n Try again\n </ActionButton>\n </div>\n );\n}\n\nexport class ErrorBoundaryCore extends React.Component<\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState\n> {\n constructor(props: ErrorBoundaryCoreProps) {\n super(props);\n this.state = {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n\n static getDerivedStateFromError(\n error: Error,\n ): Partial<ErrorBoundaryCoreState> {\n return { error, hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: ErrorBoundaryCoreProps,\n state: ErrorBoundaryCoreState,\n ): Partial<ErrorBoundaryCoreState> | null {\n if (props.resetKey !== state.lastResetKey) {\n return {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n return null;\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ errorInfo });\n\n const { message, name, onError, silent, title, variant } = this.props;\n const context = createErrorContext({ errorInfo, name, title, variant });\n\n try {\n onError?.(error, errorInfo, context);\n } catch (callbackError) {\n report(\"ErrorBoundary onError callback\", callbackError, \"warn\");\n }\n\n if (!silent) {\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n errorInfo,\n message: message || toUserMessage(error),\n resetError: this.resetError,\n });\n }\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, context);\n } catch (reportingError) {\n report(\"ErrorBoundary reporting\", reportingError, \"warn\");\n }\n }\n\n resetError = () => {\n this.setState({\n error: null,\n errorInfo: null,\n hasError: false,\n });\n this.props.onReset?.();\n };\n\n render(): ReactNode {\n if (!this.state.hasError) return this.props.children;\n\n const { fallback, message, title } = this.props;\n const { error } = this.state;\n\n if (typeof fallback === \"function\") {\n return fallback({ error, resetError: this.resetError });\n }\n\n if (fallback) {\n return fallback;\n }\n\n return (\n <DefaultErrorFallback\n error={error}\n message={message}\n resetError={this.resetError}\n title={title}\n />\n );\n }\n}\n\nexport function GlobalError({ children, fallback, onReset }: GlobalErrorProps) {\n const pathname = usePathname();\n\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.GLOBAL_MSG}\n onReset={onReset}\n resetKey={pathname}\n title={ERROR_MESSAGES.GLOBAL_TITLE}\n variant=\"full\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ModuleError({\n children,\n fallback,\n name,\n onReset,\n}: ModuleErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.MODULE_MSG}\n name={name}\n onReset={onReset}\n title={name ? `${name} Error` : ERROR_MESSAGES.MODULE_TITLE}\n variant=\"module\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ComponentError({\n children,\n fallback,\n message,\n onReset,\n}: ComponentErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={message || ERROR_MESSAGES.COMPONENT_MSG}\n onReset={onReset}\n variant=\"inline\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { ERROR_LISTENER_CONFIG } from \"./constants\";\nimport { getErrorReporter } from \"./reporter\";\nimport { getErrorMessage, shouldIgnoreError } from \"./utils\";\nimport { report, setReportSink, toUserMessage } from \"@/utils\";\n\nexport function GlobalErrorListener(): null {\n const lastError = useRef<number>(0);\n const count = useRef<number>(0);\n const shown = useRef<Set<string>>(new Set());\n\n const handleError = useCallback((error: unknown, source = \"runtime\") => {\n if (shouldIgnoreError(error)) return;\n\n const now = Date.now();\n\n if (count.current >= ERROR_LISTENER_CONFIG.maxErrors) return;\n if (now - lastError.current < ERROR_LISTENER_CONFIG.throttle) return;\n\n const message = getErrorMessage(error);\n const key = message || String(error);\n\n if (shown.current.has(key)) return;\n shown.current.add(key);\n\n lastError.current = now;\n count.current += 1;\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, {\n globalListener: true,\n source,\n });\n } catch (reportingError) {\n report(\"GlobalError reporting\", reportingError, \"warn\");\n }\n\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n message: toUserMessage(error),\n });\n }, []);\n\n useEffect(() => {\n const removeSink = setReportSink((scope, error, level) => {\n try {\n getErrorReporter().captureError(error, { level, scope });\n } catch {}\n });\n const onError = (event: ErrorEvent) =>\n handleError(event.error || event.message, \"window.onerror\");\n const onRejection = (event: PromiseRejectionEvent) =>\n handleError(event.reason, \"unhandledrejection\");\n\n window.addEventListener(\"error\", onError);\n window.addEventListener(\"unhandledrejection\", onRejection);\n\n return () => {\n removeSink();\n window.removeEventListener(\"error\", onError);\n window.removeEventListener(\"unhandledrejection\", onRejection);\n };\n }, [handleError]);\n\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/error/constants.ts","../../src/error/utils.ts","../../src/error/reporter.ts","../../src/utils/report.ts","../../src/events.ts","../../src/atoms/icon.tsx","../../src/atoms/button.tsx","../../src/kernel/context-registry.ts","../../src/utils/user-message.ts","../../src/theme.tsx","../../src/error/theme.ts","../../src/error/boundary.tsx","../../src/error/listener.ts"],"names":["IS_BROWSER","report","IconifyIcon","jsx"],"mappings":";;;;;;AAAO,IAAM,cAAA,GAAiB,OAAO,MAAA,CAAO;AAAA,EAC1C,YAAA,EAAc,sBAAA;AAAA,EACd,UAAA,EAAY,qDAAA;AAAA,EACZ,YAAA,EAAc,sBAAA;AAAA,EACd,UAAA,EAAY,gEAAA;AAAA,EACZ,aAAA,EAAe,mDAAA;AAAA,EACf,cAAA,EAAgB,sBAAA;AAAA,EAChB,YAAA,EAAc;AAChB,CAAU;AAEH,IAAM,WAAA,GAAc;AACpB,IAAM,gBAAA,GAAmB;AACzB,IAAM,qBAAA,GAAwB;AAE9B,IAAM,qBAAA,GAAwB,OAAO,MAAA,CAAO;AAAA,EACjD,SAAA,EAAW,EAAA;AAAA,EACX,QAAA,EAAU,GAAA;AAAA,EACV,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,IACrB,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,gBAAA;AAAA,IACA,0BAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD;AACH,CAAU;;;AClBV,IAAM,UAAA,GAAa,OAAO,MAAA,KAAW,WAAA;AACrC,IAAM,aAAA,GAAgB,OAAO,SAAA,KAAc,WAAA;AAEpC,IAAM,iBAAiB,MAC5B,OAAO,WAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW;AAEtD,IAAM,eAAe,MAC1B,OAAO,SAAA,KAAc,WAAA,GAAc,UAAU,SAAA,GAAY;AAEpD,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKqB;AACnB,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,WAAW,cAAA,IAAkB,IAAA;AAAA,IAC7C,OAAO,cAAA,EAAe;AAAA,IACtB,WAAW,YAAA,EAAa;AAAA,IACxB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,IAAA,EAAM,QAAQ,KAAA,IAAS,eAAA;AAAA,IACvB,SAAS,OAAA,IAAW,SAAA;AAAA,IACpB,MAAA,EAAQ;AAAA,GACV;AACF;AAEO,SAAS,oBAAoB,KAAA,EAAwB;AAC1D,EAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA,GAAI,CAAA;AAC9E;AAEO,SAAS,sBAAsB,KAAA,EAAwB;AAC5D,EAAA,MAAM,YAAA,GAAe,OAAO,KAAK,CAAA;AACjC,EAAA,OAAO,MAAA,CAAO,SAAS,YAAY,CAAA,GAC/B,KAAK,GAAA,CAAI,CAAA,EAAG,YAAY,CAAA,GACxB,qBAAA;AACN;AAEO,SAAS,sBACd,KAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA,KAAU,UAAA,GAAa,MAAA,CAAO,SAAS,QAAA,GAAW,IAAA,CAAA;AAAA,IACzD,SAAA,EAAW,aAAA,GAAgB,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IACjD,QAAA,EAAU,aAAA,GAAgB,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IAC/C,QAAA,EAAU,aAAA,GAAgB,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IAC/C,MAAA,EAAQ,aAAA,GAAgB,SAAA,CAAU,MAAA,GAAS,IAAA;AAAA,IAC3C,GAAA,EAAK,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO;AAAA,GAC3C;AACF;AAEO,SAAS,WAAA,CACd,KAAA,EACA,OAAA,GAAqC,EAAC,EAC9B;AACR,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,CAAQ,cAAA,KAAmB,QAAA,GAC9B,OAAA,CAAQ,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,KAAK,EAAA,GACpD,EAAA;AAEN,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,YAAA,GAAA,CAAgB,QAAQ,OAAA,IAAW,MAAA,CAAO,SAAS,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC1E,EAAA,MAAM,SAAA,GAAY,QAAQ,IAAA,IAAQ,cAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAE/B,EAAA,OAAO,CAAC,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,KAAK,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7E;AAEO,SAAS,aACd,KAAA,EACA;AAAA,EACE,UAAU,EAAC;AAAA,EACX,OAAO;AACT,CAAA,GAGI,EAAC,EACQ;AACb,EAAA,MAAM,MAAA,GAAS,KAAA;AAKf,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,MAAA,EAAQ,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAAA,MACxC,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,MACxB,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,KACxB;AAAA,IACA,WAAA,EAAa,WAAA,CAAY,KAAA,EAAO,OAAoC,CAAA;AAAA,IACpE,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,WAAA,EAAa,qBAAA,CAAsB,OAAA,CAAQ,KAA2B,CAAA;AAAA,IACtE,cAAA,EAAiB,QAAQ,cAAA,IAA6B,IAAA;AAAA,IACtD,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAM,IAAA,EAAK;AACjD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,QAAQ,IAAA,EAAK;AAEtD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OAAO,MAAA,CAAO,QAAQ,OAAA,IAAW,MAAA,EAAQ,YAAW,IAAK,KAAK,EAAE,IAAA,EAAK;AACvE;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,KAAA;AACxB,EAAA,IACE,OAAO,eAAA,EAAiB,UAAA,KAAe,UAAA,IACvC,eAAA,CAAgB,YAAW,EAC3B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,KAAK,CAAA;AACrC,EAAA,OAAO,qBAAA,CAAsB,QAAQ,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AAC9E;;;ACpHA,IAAM,aAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAC/C,IAAMA,WAAAA,GAAa,OAAO,MAAA,KAAW,WAAA;AAWrC,IAAM,gBAAN,MAAoB;AAAA,EACV,WAAmC,EAAC;AAAA,EACpC,UAAmC,EAAC;AAAA,EACpC,OAA+B,EAAC;AAAA,EAChC,IAAA,uBAAW,GAAA,EAAY;AAAA,EACvB,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AAClC,IAAA,IAAA,CAAK,UAAA,GAAa,mBAAA,CAAoB,OAAA,CAAQ,UAAA,IAAc,CAAC,CAAA;AAC7D,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,IAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,qBAAA;AAAA,MAClB,QAAQ,iBAAA,IAAqB;AAAA,KAC/B;AAAA,EACF;AAAA,EAEA,WAAW,OAAA,EAAqC;AAC9C,IAAA,IAAI,OAAO,OAAA,EAAS,MAAA,KAAW,UAAA,EAAY;AACzC,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAc,IAAA,EAAoB;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,IAAI,CAAA;AACvE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAA,CAAW,KAAa,KAAA,EAAsB;AAC5C,IAAA,IACE,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA,IAC/B,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,WAAA,EACnC;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,CAAO,KAAa,KAAA,EAAsB;AACxC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CACE,KAAA,EACA,YAAA,GAAwC,EAAC,EAChB;AACzB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,KAAK,MAAA,EAAO,GAAI,KAAK,UAAA,EAAY;AAEtD,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAE3B,IAAA,MAAM,UAAU,EAAE,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,YAAA,EAAa;AACnD,IAAA,IAAIC,OAAAA,GAAS,YAAA,CAAa,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,EAAE,GAAG,IAAA,CAAK,IAAA,EAAK,EAAG,CAAA;AACpE,IAAA,MAAM,YAAYA,OAAAA,CAAO,WAAA;AAEzB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AAE9B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,gBAAA,EAAkB;AACtC,MAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACtC,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,IAAI,SAAS,CAAA;AACvB,IAAA,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,SAAS,CAAA,EAAG,KAAK,YAAY,CAAA;AAE/D,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,KAAe,UAAA,EAAY;AACzC,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAWA,OAAM,CAAA;AAC1C,QAAA,IAAI,CAAC,WAAA,EAAa;AAClB,QAAAA,OAAAA,GAAS,WAAA;AAAA,MACX,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AACjC,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,OAAOA,OAAM,CAAA;AAAA,MACvB,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX,CAAC,CAAA;AAED,IAAA,OAAOA,OAAAA;AAAA,EACT;AAAA,EAEA,eACE,OAAA,EACA,KAAA,GAAQ,MAAA,EACR,OAAA,GAAmC,EAAC,EACX;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAA,GAAO,SAAA;AACb,IAAA,OAAO,KAAK,YAAA,CAAa,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,OAAO,CAAA;AAAA,EACvD;AAAA,EAEA,qBAAA,GAA8B;AAC5B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,IAAU,CAACD,WAAAA,EAAY;AAEzC,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,oBAAA,EAAsB,CAAA;AAEzC,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,MAAA,CAAO,MAAM,CAAA;AACvD,MAAA,IAAI,aAAA,CAAc,SAAS,QAAA,EAAU;AACnC,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,aAAa,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAEA,IAAI,QAAA,GAAiC,IAAA;AAE9B,SAAS,gBAAA,CACd,OAAA,GAAgC,EAAC,EAClB;AACf,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAW,IAAI,cAAc,OAAO,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAA,GAA6C;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,OAAOC,OAAAA,EAAqB;AAC1B,MAAA,IAAI,aAAA,EAAe;AACnB,MAAA,OAAA,CAAQ,MAAM,iBAAA,EAAmB;AAAA,QAC/B,KAAA,EAAOA,QAAO,KAAA,CAAM,OAAA;AAAA,QACpB,aAAaA,OAAAA,CAAO,WAAA;AAAA,QACpB,KAAA,EAAOA,QAAO,WAAA,CAAY;AAAA,OAC3B,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEO,SAAS,oBAAoB,MAAA,EAAuC;AACzE,EAAA,MAAM,SAAA,GAAY,MAAA;AAKlB,EAAA,IACE,CAAC,aACD,OAAO,SAAA,CAAU,qBAAqB,UAAA,IACtC,OAAO,SAAA,CAAU,SAAA,KAAc,UAAA,EAC/B;AACA,IAAA,OAAO,oBAAA,EAAqB;AAAA,EAC9B;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAOA,OAAAA,EAAqB;AAC1B,MAAA,SAAA,CAAU,SAAA,CAAW,CAAC,KAAA,KAAuB;AAC3C,QAAA,IAAIA,QAAO,WAAA,EAAa,KAAA,CAAM,eAAe,CAACA,OAAAA,CAAO,WAAW,CAAC,CAAA;AACjE,QAAA,IAAIA,OAAAA,CAAO,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQA,QAAO,IAAI,CAAA;AAE1C,QAAA,IAAIA,OAAAA,CAAO,IAAA,IAAQ,OAAOA,OAAAA,CAAO,SAAS,QAAA,EAAU;AAClD,UAAA,MAAA,CAAO,OAAA,CAAQA,OAAAA,CAAO,IAAI,CAAA,CAAE,OAAA;AAAA,YAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAC9C,MAAM,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC;AAAA,WACjC;AAAA,QACF;AAEA,QAAA,IAAIA,OAAAA,CAAO,WAAA;AACT,UAAA,KAAA,CAAM,UAAA,CAAW,aAAA,EAAeA,OAAAA,CAAO,WAAW,CAAA;AACpD,QAAA,IAAIA,QAAO,OAAA,EAAS,KAAA,CAAM,UAAA,CAAW,QAAA,EAAUA,QAAO,OAAO,CAAA;AAC7D,QAAA,IAAIA,OAAAA,CAAO,cAAA;AACT,UAAA,KAAA,CAAM,QAAA,CAAS,gBAAA,EAAkBA,OAAAA,CAAO,cAAc,CAAA;AAExD,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAMA,OAAAA,CAAO,MAAM,OAAO,CAAA;AAC5C,QAAA,KAAA,CAAM,IAAA,GAAOA,OAAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,OAAA;AAClC,QAAA,KAAA,CAAM,KAAA,GAAQA,OAAAA,CAAO,KAAA,CAAM,KAAA,IAAS,MAAA;AAEpC,QAAA,SAAA,CAAU,iBAAkB,KAAK,CAAA;AAAA,MACnC,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;;;ACpMA,IAAI,IAAA,GAA0B,IAAA;AAEvB,SAAS,MAAA,CACd,KAAA,EACA,KAAA,EACA,KAAA,GAAqB,OAAA,EACf;AACN,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,KAAA,EAAO,OAAO,KAAK,CAAA;AACxB,MAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,IAAI,QAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,OAAO,WAAW,WAAA,EAAa;AAC1E,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA,CAAA,EAAI,KAAK,KAAK,KAAK,CAAA;AACpC;AAEO,SAAS,cAAc,IAAA,EAA8B;AAC1D,EAAA,IAAA,GAAO,IAAA;AACP,EAAA,OAAO,MAAM;AACX,IAAA,IAAI,IAAA,KAAS,MAAM,IAAA,GAAO,IAAA;AAAA,EAC5B,CAAA;AACF;;;AC9BO,IAAM,WAAA,GAAc,OAAO,MAAA,CAAO;AAAA,EACvC,gBAAA,EAAkB,kBAAA;AAAA,EAClB,YAAA,EAAc,cAAA;AAAA,EACd,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAU,CAAA;AA8BH,IAAM,eAAN,MAA+D;AAAA,EAC5D,MAAA,uBAAqD,GAAA,EAAI;AAAA,EACzD,cAAA,uBACF,GAAA,EAAI;AAAA,EAOV,SAAA,CAAU,OAAe,QAAA,EAA4C;AACnE,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,IAAS,OAAO,aAAa,UAAA,EAAY;AACzE,MAAA,OAAO,MAAM;AAAA,MAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA,CAAO,IAAI,KAAK,CAAA,wBAAS,GAAA,EAA0B;AAC1E,IAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,SAAS,CAAA;AAEhC,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,MAAA,IAAI,UAAU,IAAA,KAAS,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACpD,CAAA;AAAA,EACF;AAAA,EASA,IAAA,CAAK,OAAe,OAAA,EAAyB;AAC3C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG;AACxC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AACrC,IAAA,KAAA,MAAW,YAAY,QAAA,EAAU;AAC/B,MAAA,IAAI;AACF,QAAC,SAAoC,OAAO,CAAA;AAAA,MAC9C,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAK,CAAC,KAAK,KAAK,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAQA,aAAA,CAAc,KAAA,EAAe,OAAA,EAAmB,MAAA,GAAiB,GAAA,EAAW;AAC1E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,eAAuB,QAAQ,CAAA;AAEnC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,IAC1B,GAAG,MAAM,CAAA;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC;AAAA,EAEA,gBAAgB,KAAA,EAAsB;AACpC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC3C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,MAClC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,cAAA,CAAe,MAAA,EAAO,EAAG;AAChD,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AACA,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,eAAe,KAAA,EAAsB;AACnC,IAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,IAAA,IAAI,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,SAC9B,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,EACzB;AAAA,EAEA,aAAa,KAAA,EAAwB;AACnC,IAAA,OAAO,QAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,GAAG,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,iBAAiB,KAAA,EAAuB;AACtC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,GAAG,IAAA,IAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,YAAA,GAAyB;AACvB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EAC/B;AACF,CAAA;AAEA,IAAM,iBAAA,mBAAoB,MAAA,CAAO,GAAA,CAAI,kCAAkC,CAAA;AAKvE,IAAM,OAAA,GAAU,UAAA;AACT,IAAM,YAAA,GACX,QAAQ,iBAAiB,CAAA,KACxB,QAAQ,iBAAiB,CAAA,GAAI,IAAI,YAAA,EAAgC,CAAA;AC/H7D,SAAS,IAAA,CAAK;AAAA,EACnB,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,EAAA;AAAA,EACP,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,uBACE,GAAA;AAAA,IAACC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,MACzB,KAAA,EAAO,IAAA;AAAA,MACN,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AC3BZ,SAAS,MAAA,CAAO;AAAA,EACrB,GAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,QAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,uBACEC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,WAAA,EAAW,UAAU,IAAA,GAAO,MAAA;AAAA,MAC5B,SAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AC/Bd,SAAS,wBAAA,CACd,MACA,YAAA,EACY;AACZ,EAAA,MAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,aAAA,CAAiB,YAAY,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAM,GAAG,CAAA;AAClB;;;ACZO,IAAM,aAAA,GAAgB,OAAO,MAAA,CAAO;AAAA,EACzC,OAAA,EAAS,wCAAA;AAAA,EACT,OAAA,EAAS,+DAAA;AAAA,EACT,OAAA,EAAS,sCAAA;AAAA,EACT,YAAA,EAAc,gDAAA;AAAA,EACd,SAAA,EAAW,sCAAA;AAAA,EACX,QAAA,EAAU,4CAAA;AAAA,EACV,WAAA,EAAa,uDAAA;AAAA,EACb,MAAA,EAAQ;AACV,CAAU,CAAA;AAEH,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EAC1B,MAAA;AAAA,EAET,WAAA,CAAY,SAAiB,MAAA,EAAiB;AAC5C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF,CAAA;AAOA,IAAM,eAAA,GAAkB,mDAAA;AAExB,SAAS,SAAA,CACP,MAAA,EACA,KAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAS,SAA4C,KAAK,CAAA;AAChE,EAAA,OAAO,OAAO,KAAA,KAAU,IAAA,GAAQ,KAAA,GAAc,MAAA;AAChD;AAEA,SAAS,mBAAmB,KAAA,EAAoC;AAC9D,EAAA,MAAM,UAAW,KAAA,EAAwC,OAAA;AACzD,EAAA,MAAM,UAAU,SAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,QAAQ,GAAG,IAAA,EAAK;AACpE,EAAA,OAAO,OAAA,IAAW,MAAA;AACpB;AAEO,SAAS,aAAA,CACd,OACA,EAAE,KAAA,EAAO,WAAW,aAAA,CAAc,OAAA,EAAQ,GAAwB,EAAC,EAC3D;AACR,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,CAAM,MAAK,IAAK,QAAA;AACtD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,QAAA;AAEhD,EAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,YAAA;AAC/C,IAAA,OAAO,MAAM,OAAA,IAAW,QAAA;AAAA,EAC1B;AACA,EAAA,IAAK,KAAA,CAA4B,IAAA,KAAS,YAAA,EAAc,OAAO,QAAA;AAE/D,EAAA,MAAM,IAAA,GAAO,SAAA,CAAkB,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,GAAQ,IAAI,CAAA,EAAG,OAAO,MAAM,IAAI,CAAA;AAE5C,EAAA,MAAM,MAAA,GAAS,SAAA,CAAkB,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AAE1D,EAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,YAAA;AACzC,EAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,WAAA;AACzC,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,SAAY,aAAA,CAAc,OAAA;AAC3D,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,SAAY,aAAA,CAAc,MAAA;AAEhE,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,EAAK;AACzC,IAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,SAAA;AACzC,IAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,QAAA;AACzC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,UAAU,MAAA,KAAW,KAAA;AAC3D,EAAA,IACE,SAAA,IACC,eAAA,CAAgB,IAAA,CAAM,KAAA,CAAgB,OAAA,IAAW,EAAE,CAAA,KACjD,KAAA,YAAiB,SAAA,IAAa,QAAA,CAAS,IAAA,CAAM,KAAA,CAAgB,IAAI,CAAA,CAAA,EACpE;AACA,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,EACvB;AAEA,EAAA,OAAO,QAAA;AACT;;;ACvDO,SAAS,gBAAkC,EAAA,EAA0B;AAC1E,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,CAAA;AAC7B;AASA,IAAM,KAAA,uBAAuD,GAAA,EAAI;AACjE,IAAM,YAAA,GAAe,wBAAA,CAEnB,cAAA,EAAgB,KAAK,CAAA;AAchB,SAAS,SACd,IAAA,EACkB;AAClB,EAAA,MAAM,SAAS,UAAA,CAAW,YAAY,CAAA,CAAE,GAAA,CAAI,KAAK,EAAE,CAAA;AACnD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,OAAA,EAAU,KAAK,EAAE,CAAA,qIAAA;AAAA,KACnB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU;AAAC,GAC5B;AACF;;;ACnEO,IAAM,UAAA,GAAa,gBAAgC,OAAO;ACgBjE,IAAM,YAAA,GAAe,MAAA;AAOrB,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,KAAA,GAAQ,SAAS,UAAU,CAAA;AAEjC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,MAAM,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,IAAA,EAC1B,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,IAAI,CAAA,EACpD,CAAA;AAAA,oBACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAM,KAAA,CAAM,KAAA,EACxB,QAAA,EAAA,OAAA,IACC,aAAA,CAAc,OAAO,EAAE,QAAA,EAAU,cAAA,CAAe,YAAA,EAAc,CAAA,EAClE,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,MAAM,KAAA,CAAM,WAAA;AAAA,QACvB,OAAA,EAAS,UAAA;AAAA,QACT,IAAA,EAAK,QAAA;AAAA,QACN,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM,SAAA,CAG3C;AAAA,EACA,YAAY,KAAA,EAA+B;AACzC,IAAA,KAAA,CAAM,KAAK,CAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,cAAc,KAAA,CAAM;AAAA,KACtB;AAAA,EACF;AAAA,EAEA,OAAO,yBACL,KAAA,EACiC;AACjC,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAK;AAAA,EACjC;AAAA,EAEA,OAAO,wBAAA,CACL,KAAA,EACA,KAAA,EACwC;AACxC,IAAA,IAAI,KAAA,CAAM,QAAA,KAAa,KAAA,CAAM,YAAA,EAAc;AACzC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU,KAAA;AAAA,QACV,cAAc,KAAA,CAAM;AAAA,OACtB;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAA,CAAkB,OAAc,SAAA,EAAsB;AACpD,IAAA,IAAA,CAAK,QAAA,CAAS,EAAE,SAAA,EAAW,CAAA;AAE3B,IAAA,MAAM,EAAE,SAAS,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAO,OAAA,KAAY,IAAA,CAAK,KAAA;AAChE,IAAA,MAAM,UAAU,kBAAA,CAAmB,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,SAAS,CAAA;AAEtE,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,KAAA,EAAO,WAAW,OAAO,CAAA;AAAA,IACrC,SAAS,aAAA,EAAe;AACtB,MAAA,MAAA,CAAO,gCAAA,EAAkC,eAAe,MAAM,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,YAAA,CAAa,IAAA,CAAK,YAAY,SAAA,EAAW;AAAA,QACvC,KAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,EAAS,OAAA,IAAW,aAAA,CAAc,KAAK,CAAA;AAAA,QACvC,YAAY,IAAA,CAAK;AAAA,OAClB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,MAAA,QAAA,EAAU,YAAA,GAAe,OAAO,OAAO,CAAA;AAAA,IACzC,SAAS,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,yBAAA,EAA2B,gBAAgB,MAAM,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,aAAa,MAAM;AACjB,IAAA,IAAA,CAAK,QAAA,CAAS;AAAA,MACZ,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,IAAA,CAAK,MAAM,OAAA,IAAU;AAAA,EACvB,CAAA;AAAA,EAEA,MAAA,GAAoB;AAClB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,OAAO,KAAK,KAAA,CAAM,QAAA;AAE5C,IAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,KAAU,IAAA,CAAK,KAAA;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA;AAEvB,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,OAAO,SAAS,EAAE,KAAA,EAAO,UAAA,EAAY,IAAA,CAAK,YAAY,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,QAAA,EAAU,SAAQ,EAAqB;AAC7E,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,SAAS,cAAA,CAAe,UAAA;AAAA,MACxB,OAAA;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,OAAO,cAAA,CAAe,YAAA;AAAA,MACtB,OAAA,EAAQ,MAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,SAAS,cAAA,CAAe,UAAA;AAAA,MACxB,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,IAAA,GAAO,CAAA,EAAG,IAAI,WAAW,cAAA,CAAe,YAAA;AAAA,MAC/C,OAAA,EAAQ,QAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,OAAA,EAAS,WAAW,cAAA,CAAe,aAAA;AAAA,MACnC,OAAA;AAAA,MACA,OAAA,EAAQ,QAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AC1MO,SAAS,mBAAA,GAA4B;AAC1C,EAAA,MAAM,SAAA,GAAY,OAAe,CAAC,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,OAAe,CAAC,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,MAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAE3C,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,KAAA,EAAgB,SAAS,SAAA,KAAc;AACtE,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAE9B,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AAErB,IAAA,IAAI,KAAA,CAAM,OAAA,IAAW,qBAAA,CAAsB,SAAA,EAAW;AACtD,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,OAAA,GAAU,qBAAA,CAAsB,QAAA,EAAU;AAE9D,IAAA,MAAM,OAAA,GAAU,gBAAgB,KAAK,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAEnC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,OAAA,CAAQ,IAAI,GAAG,CAAA;AAErB,IAAA,SAAA,CAAU,OAAA,GAAU,GAAA;AACpB,IAAA,KAAA,CAAM,OAAA,IAAW,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,MAAA,QAAA,EAAU,eAAe,KAAA,EAAO;AAAA,QAC9B,cAAA,EAAgB,IAAA;AAAA,QAChB;AAAA,OACD,CAAA;AAAA,IACH,SAAS,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,uBAAA,EAAyB,gBAAgB,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,YAAA,CAAa,IAAA,CAAK,YAAY,SAAA,EAAW;AAAA,MACvC,KAAA;AAAA,MACA,OAAA,EAAS,cAAc,KAAK;AAAA,KAC7B,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,CAAC,KAAA,EAAO,OAAO,KAAA,KAAU;AACxD,MAAA,IAAI;AACF,QAAA,gBAAA,GAAmB,YAAA,CAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MACzD,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KACf,WAAA,CAAY,MAAM,KAAA,IAAS,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC5D,IAAA,MAAM,cAAc,CAAC,KAAA,KACnB,WAAA,CAAY,KAAA,CAAM,QAAQ,oBAAoB,CAAA;AAEhD,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,sBAAsB,WAAW,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,EAAW;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,sBAAsB,WAAW,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO,IAAA;AACT","file":"index.js","sourcesContent":["export const ERROR_MESSAGES = Object.freeze({\n GLOBAL_TITLE: \"Something went wrong\",\n GLOBAL_MSG: \"We ran into an unexpected problem. Please try again\",\n MODULE_TITLE: \"Something went wrong\",\n MODULE_MSG: \"This part of the app isn't working right now. Please try again\",\n COMPONENT_MSG: \"This section couldn't be loaded. Please try again\",\n FALLBACK_TITLE: \"Something went wrong\",\n FALLBACK_MSG: \"This section couldn't be loaded. Please try again\",\n} as const);\n\nexport const MAX_CONTEXT = 10;\nexport const MAX_FINGERPRINTS = 100;\nexport const DEFAULT_DEDUPE_WINDOW = 60000;\n\nexport const ERROR_LISTENER_CONFIG = Object.freeze({\n maxErrors: 10,\n throttle: 2000,\n ignored: Object.freeze([\n /ResizeObserver loop/i,\n /Network request failed/i,\n /Loading chunk/i,\n /Unexpected end of input/i,\n /Failed to fetch/i,\n /Script error/i,\n /HTTP\\s*404/i,\n ]),\n} as const);\n","import type { ErrorInfo } from \"react\";\nimport { DEFAULT_DEDUPE_WINDOW, ERROR_LISTENER_CONFIG } from \"./constants\";\nimport type {\n BrowserEnvironment,\n ErrorContextData,\n ErrorReport,\n} from \"./types\";\n\nconst IS_BROWSER = typeof window !== \"undefined\";\nconst HAS_NAVIGATOR = typeof navigator !== \"undefined\";\n\nexport const getRuntimePath = (): string | null =>\n typeof window !== \"undefined\" ? window.location.pathname : null;\n\nexport const getUserAgent = (): string | null =>\n typeof navigator !== \"undefined\" ? navigator.userAgent : null;\n\nexport function createErrorContext({\n errorInfo,\n name,\n title,\n variant,\n}: {\n errorInfo?: ErrorInfo | null;\n name?: string;\n title?: string;\n variant?: string;\n}): ErrorContextData {\n return {\n componentStack: errorInfo?.componentStack || null,\n route: getRuntimePath(),\n userAgent: getUserAgent(),\n timestamp: new Date().toISOString(),\n name: name || title || \"ErrorBoundary\",\n variant: variant || \"default\",\n source: \"ErrorBoundary\",\n };\n}\n\nexport function normalizeSampleRate(value: unknown): number {\n const sampleRate = Number(value);\n return Number.isFinite(sampleRate) ? Math.min(1, Math.max(0, sampleRate)) : 1;\n}\n\nexport function normalizeDedupeWindow(value: unknown): number {\n const dedupeWindow = Number(value);\n return Number.isFinite(dedupeWindow)\n ? Math.max(0, dedupeWindow)\n : DEFAULT_DEDUPE_WINDOW;\n}\n\nexport function getBrowserEnvironment(\n route?: string | null,\n): BrowserEnvironment {\n return {\n route: route || (IS_BROWSER ? window.location.pathname : null),\n userAgent: HAS_NAVIGATOR ? navigator.userAgent : null,\n platform: HAS_NAVIGATOR ? navigator.platform : null,\n language: HAS_NAVIGATOR ? navigator.language : null,\n online: HAS_NAVIGATOR ? navigator.onLine : true,\n url: IS_BROWSER ? window.location.href : null,\n };\n}\n\nexport function fingerprint(\n error: unknown,\n context: Partial<ErrorContextData> = {},\n): string {\n const stackTop =\n typeof context.componentStack === \"string\"\n ? context.componentStack.split(\"\\n\").find(Boolean) || \"\"\n : \"\";\n\n const errObj = error as { message?: string; name?: string } | null;\n const errorMessage = (errObj?.message || String(error || \"\")).slice(0, 100);\n const errorName = errObj?.name || \"UnknownError\";\n const route = context.route || \"\";\n\n return [stackTop, errorMessage, errorName, route].filter(Boolean).join(\"::\");\n}\n\nexport function createReport(\n error: unknown,\n {\n context = {},\n tags = {},\n }: {\n context?: Record<string, unknown>;\n tags?: Record<string, string>;\n } = {},\n): ErrorReport {\n const errObj = error as {\n message?: string;\n name?: string;\n stack?: string;\n } | null;\n return {\n error: {\n message: errObj?.message || String(error),\n stack: errObj?.stack || null,\n name: errObj?.name || \"UnknownError\",\n },\n fingerprint: fingerprint(error, context as Partial<ErrorContextData>),\n timestamp: new Date().toISOString(),\n environment: getBrowserEnvironment(context.route as string | undefined),\n componentStack: (context.componentStack as string) || null,\n context,\n tags,\n };\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (!error) return \"\";\n if (typeof error === \"string\") return error.trim();\n if (error instanceof Error) return error.message.trim();\n\n const errObj = error as { message?: string; toString?: () => string };\n return String(errObj?.message || errObj?.toString?.() || error).trim();\n}\n\nexport function shouldIgnoreError(error: unknown): boolean {\n if (!error) return true;\n\n const errWithNotFound = error as { isNotFound?: () => boolean };\n if (\n typeof errWithNotFound?.isNotFound === \"function\" &&\n errWithNotFound.isNotFound()\n ) {\n return true;\n }\n\n const message = getErrorMessage(error);\n return ERROR_LISTENER_CONFIG.ignored.some((pattern) => pattern.test(message));\n}\n","import {\n DEFAULT_DEDUPE_WINDOW,\n MAX_CONTEXT,\n MAX_FINGERPRINTS,\n} from \"./constants\";\nimport type {\n ErrorReport,\n ErrorReporterHandler,\n ErrorReporterOptions,\n SentryScope,\n} from \"./types\";\nimport {\n createReport,\n normalizeDedupeWindow,\n normalizeSampleRate,\n} from \"./utils\";\n\nconst IS_PRODUCTION = process.env.NODE_ENV === \"production\";\nconst IS_BROWSER = typeof window !== \"undefined\";\n\ndeclare global {\n interface Window {\n Sentry?: {\n captureException: (error: unknown) => void;\n withScope: (callback: (scope: SentryScope) => void) => void;\n };\n }\n}\n\nclass ErrorReporter {\n private handlers: ErrorReporterHandler[] = [];\n private context: Record<string, unknown> = {};\n private tags: Record<string, string> = {};\n private seen = new Set<string>();\n private enabled: boolean;\n private sampleRate: number;\n private beforeSend: ((report: ErrorReport) => ErrorReport | null) | null;\n private dedupeWindow: number;\n\n constructor(options: ErrorReporterOptions = {}) {\n this.enabled = options.enabled ?? true;\n this.sampleRate = normalizeSampleRate(options.sampleRate ?? 1);\n this.beforeSend = options.beforeSend || null;\n this.dedupeWindow = normalizeDedupeWindow(\n options.deduplicateWindow ?? DEFAULT_DEDUPE_WINDOW,\n );\n }\n\n addHandler(handler: ErrorReporterHandler): this {\n if (typeof handler?.handle === \"function\") {\n this.handlers.push(handler);\n }\n return this;\n }\n\n removeHandler(name: string): this {\n this.handlers = this.handlers.filter((handler) => handler.name !== name);\n return this;\n }\n\n setContext(key: string, value: unknown): this {\n if (\n Object.hasOwn(this.context, key) ||\n Object.keys(this.context).length < MAX_CONTEXT\n ) {\n this.context[key] = value;\n }\n return this;\n }\n\n setTag(key: string, value: unknown): this {\n this.tags[key] = String(value);\n return this;\n }\n\n captureError(\n error: unknown,\n extraContext: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n if (!this.enabled || Math.random() > this.sampleRate) return;\n\n this.ensureDefaultHandlers();\n\n const context = { ...this.context, ...extraContext };\n let report = createReport(error, { context, tags: { ...this.tags } });\n const dedupeKey = report.fingerprint;\n\n if (this.seen.has(dedupeKey)) return;\n\n if (this.seen.size >= MAX_FINGERPRINTS) {\n const first = this.seen.keys().next().value;\n if (first) this.seen.delete(first);\n }\n\n this.seen.add(dedupeKey);\n setTimeout(() => this.seen.delete(dedupeKey), this.dedupeWindow);\n\n if (typeof this.beforeSend === \"function\") {\n try {\n const transformed = this.beforeSend(report);\n if (!transformed) return;\n report = transformed;\n } catch {}\n }\n\n this.handlers.forEach((handler) => {\n try {\n handler.handle(report);\n } catch {}\n });\n\n return report;\n }\n\n captureMessage(\n message: string,\n level = \"info\",\n context: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n const error = new Error(message);\n error.name = \"Message\";\n return this.captureError(error, { ...context, level });\n }\n\n ensureDefaultHandlers(): void {\n if (this.handlers.length || !IS_BROWSER) return;\n\n this.handlers.push(createConsoleHandler());\n\n if (window.Sentry) {\n const sentryHandler = createSentryHandler(window.Sentry);\n if (sentryHandler.name === \"sentry\") {\n this.handlers.push(sentryHandler);\n }\n }\n }\n}\n\nlet instance: ErrorReporter | null = null;\n\nexport function getErrorReporter(\n options: ErrorReporterOptions = {},\n): ErrorReporter {\n if (!instance) {\n instance = new ErrorReporter(options);\n }\n return instance;\n}\n\nexport function createConsoleHandler(): ErrorReporterHandler {\n return {\n name: \"console\",\n handle(report: ErrorReport) {\n if (IS_PRODUCTION) return;\n console.error(\"[ErrorReporter]\", {\n error: report.error.message,\n fingerprint: report.fingerprint,\n route: report.environment.route,\n });\n },\n };\n}\n\nexport function createSentryHandler(Sentry: unknown): ErrorReporterHandler {\n const sentryObj = Sentry as {\n captureException?: (err: Error) => void;\n withScope?: (cb: (scope: SentryScope) => void) => void;\n } | null;\n\n if (\n !sentryObj ||\n typeof sentryObj.captureException !== \"function\" ||\n typeof sentryObj.withScope !== \"function\"\n ) {\n return createConsoleHandler();\n }\n\n return {\n name: \"sentry\",\n handle(report: ErrorReport) {\n sentryObj.withScope!((scope: SentryScope) => {\n if (report.fingerprint) scope.setFingerprint([report.fingerprint]);\n if (report.user) scope.setUser(report.user);\n\n if (report.tags && typeof report.tags === \"object\") {\n Object.entries(report.tags).forEach(([key, value]) =>\n scope.setTag(key, String(value)),\n );\n }\n\n if (report.environment)\n scope.setContext(\"environment\", report.environment);\n if (report.context) scope.setContext(\"custom\", report.context);\n if (report.componentStack)\n scope.setExtra(\"componentStack\", report.componentStack);\n\n const error = new Error(report.error.message);\n error.name = report.error.name || \"Error\";\n error.stack = report.error.stack || undefined;\n\n sentryObj.captureException!(error);\n });\n },\n };\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n","\"use client\";\n\nimport { Icon as IconifyIcon } from \"@iconify-icon/react\";\nimport type { ComponentProps, CSSProperties } from \"react\";\n\nexport interface IconProps\n extends Omit<ComponentProps<typeof IconifyIcon>, \"icon\" | \"size\"> {\n icon: string | ComponentProps<typeof IconifyIcon>[\"icon\"];\n size?: number | string;\n color?: string;\n className?: string;\n style?: CSSProperties;\n onClick?: () => void;\n}\n\nexport function Icon({\n className = \"center\",\n color,\n icon,\n onClick,\n size = 20,\n style,\n ...props\n}: IconProps) {\n return (\n <IconifyIcon\n className={className}\n height={size}\n icon={icon}\n onClick={onClick}\n style={{ color, ...style }}\n width={size}\n {...props}\n />\n );\n}\n\nIcon.displayName = \"Icon\";\n","\"use client\";\n\nimport type { ButtonHTMLAttributes, ReactNode, Ref } from \"react\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n children?: ReactNode;\n loading?: boolean;\n}\n\nexport function Button({\n ref,\n children,\n className,\n disabled = false,\n loading = false,\n type = \"button\",\n ...props\n}: ButtonProps) {\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading ? true : undefined}\n className={className}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nButton.displayName = \"Button\";\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","export const USER_MESSAGES = Object.freeze({\n generic: \"Something went wrong. Please try again\",\n network: \"You appear to be offline. Check your connection and try again\",\n timeout: \"That took too long. Please try again\",\n unauthorized: \"Your session has expired. Please sign in again\",\n forbidden: \"You don't have permission to do that\",\n notFound: \"We couldn't find what you were looking for\",\n rateLimited: \"Too many attempts. Please wait a moment and try again\",\n server: \"We're having trouble on our end. Please try again in a moment\",\n} as const);\n\nexport class UserError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"UserError\";\n this.status = status;\n }\n}\n\nexport interface UserMessageOptions {\n fallback?: string;\n codes?: Readonly<Record<string, string>>;\n}\n\nconst NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;\n\nfunction readField<T>(\n source: unknown,\n field: string,\n type: \"string\" | \"number\",\n): T | undefined {\n const value = (source as Record<string, unknown> | null)?.[field];\n return typeof value === type ? (value as T) : undefined;\n}\n\nfunction readPayloadMessage(error: unknown): string | undefined {\n const payload = (error as { payload?: unknown } | null)?.payload;\n const message = readField<string>(payload, \"error\", \"string\")?.trim();\n return message || undefined;\n}\n\nexport function toUserMessage(\n error: unknown,\n { codes, fallback = USER_MESSAGES.generic }: UserMessageOptions = {},\n): string {\n if (typeof error === \"string\") return error.trim() || fallback;\n if (!error || typeof error !== \"object\") return fallback;\n\n if (error instanceof UserError) {\n if (error.status === 401) return USER_MESSAGES.unauthorized;\n return error.message || fallback;\n }\n if ((error as { name?: string }).name === \"AbortError\") return fallback;\n\n const code = readField<string>(error, \"code\", \"string\");\n if (code && codes?.[code]) return codes[code];\n\n const status = readField<number>(error, \"status\", \"number\");\n\n if (status === 401) return USER_MESSAGES.unauthorized;\n if (status === 429) return USER_MESSAGES.rateLimited;\n if (status === 408 || status === 504) return USER_MESSAGES.timeout;\n if (status !== undefined && status >= 500) return USER_MESSAGES.server;\n\n if (status !== undefined && status >= 400) {\n const authored = readPayloadMessage(error);\n if (authored) return authored;\n if (status === 403) return USER_MESSAGES.forbidden;\n if (status === 404) return USER_MESSAGES.notFound;\n return fallback;\n }\n\n const isOffline =\n typeof navigator !== \"undefined\" && navigator.onLine === false;\n if (\n isOffline ||\n (NETWORK_FAILURE.test((error as Error).message ?? \"\") &&\n (error instanceof TypeError || /fetch/i.test((error as Error).name)))\n ) {\n return USER_MESSAGES.network;\n }\n\n return fallback;\n}\n","\"use client\";\n\nimport {\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Ensure its theme configuration is provided to <ThemeProvider themes={[...]}> (e.g. in src/config/ or your theme setup).`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n\nexport { useTheme as useModuleTheme };\n\n","import { defineThemeSpec } from \"@/theme\";\n\nexport type ErrorThemeSlot = \"screen\" | \"icon\" | \"title\" | \"retryButton\";\n\nexport const errorTheme = defineThemeSpec<ErrorThemeSlot>(\"error\");\n","\"use client\";\n\nimport React, { type ErrorInfo, type ReactNode } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { Button, Icon } from \"@/atoms\";\nimport { useTheme } from \"@/theme\";\nimport { ERROR_MESSAGES } from \"./constants\";\nimport { errorTheme } from \"./theme\";\nimport { getErrorReporter } from \"./reporter\";\nimport type {\n ComponentErrorProps,\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState,\n GlobalErrorProps,\n ModuleErrorProps,\n} from \"./types\";\nimport { createErrorContext } from \"./utils\";\nimport { report, toUserMessage } from \"@/utils\";\n\nconst ActionButton = Button as React.ComponentType<{\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n type?: \"button\" | \"submit\" | \"reset\";\n}>;\n\nfunction DefaultErrorFallback({\n error,\n message,\n resetError,\n title,\n}: {\n error: Error | null;\n message?: string;\n resetError: () => void;\n title?: string;\n}) {\n const theme = useTheme(errorTheme);\n\n return (\n <div className={theme.slots.screen}>\n <div className={theme.slots.icon}>\n <Icon icon={\"solar:danger-circle-bold\"} size={30} />\n </div>\n <h3 className={theme.slots.title}>\n {message ||\n toUserMessage(error, { fallback: ERROR_MESSAGES.FALLBACK_MSG })}\n </h3>\n <ActionButton\n className={theme.slots.retryButton}\n onClick={resetError}\n type=\"button\"\n >\n Try again\n </ActionButton>\n </div>\n );\n}\n\nexport class ErrorBoundaryCore extends React.Component<\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState\n> {\n constructor(props: ErrorBoundaryCoreProps) {\n super(props);\n this.state = {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n\n static getDerivedStateFromError(\n error: Error,\n ): Partial<ErrorBoundaryCoreState> {\n return { error, hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: ErrorBoundaryCoreProps,\n state: ErrorBoundaryCoreState,\n ): Partial<ErrorBoundaryCoreState> | null {\n if (props.resetKey !== state.lastResetKey) {\n return {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n return null;\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ errorInfo });\n\n const { message, name, onError, silent, title, variant } = this.props;\n const context = createErrorContext({ errorInfo, name, title, variant });\n\n try {\n onError?.(error, errorInfo, context);\n } catch (callbackError) {\n report(\"ErrorBoundary onError callback\", callbackError, \"warn\");\n }\n\n if (!silent) {\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n errorInfo,\n message: message || toUserMessage(error),\n resetError: this.resetError,\n });\n }\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, context);\n } catch (reportingError) {\n report(\"ErrorBoundary reporting\", reportingError, \"warn\");\n }\n }\n\n resetError = () => {\n this.setState({\n error: null,\n errorInfo: null,\n hasError: false,\n });\n this.props.onReset?.();\n };\n\n render(): ReactNode {\n if (!this.state.hasError) return this.props.children;\n\n const { fallback, message, title } = this.props;\n const { error } = this.state;\n\n if (typeof fallback === \"function\") {\n return fallback({ error, resetError: this.resetError });\n }\n\n if (fallback) {\n return fallback;\n }\n\n return (\n <DefaultErrorFallback\n error={error}\n message={message}\n resetError={this.resetError}\n title={title}\n />\n );\n }\n}\n\nexport function GlobalError({ children, fallback, onReset }: GlobalErrorProps) {\n const pathname = usePathname();\n\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.GLOBAL_MSG}\n onReset={onReset}\n resetKey={pathname}\n title={ERROR_MESSAGES.GLOBAL_TITLE}\n variant=\"full\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ModuleError({\n children,\n fallback,\n name,\n onReset,\n}: ModuleErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.MODULE_MSG}\n name={name}\n onReset={onReset}\n title={name ? `${name} Error` : ERROR_MESSAGES.MODULE_TITLE}\n variant=\"module\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ComponentError({\n children,\n fallback,\n message,\n onReset,\n}: ComponentErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={message || ERROR_MESSAGES.COMPONENT_MSG}\n onReset={onReset}\n variant=\"inline\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { ERROR_LISTENER_CONFIG } from \"./constants\";\nimport { getErrorReporter } from \"./reporter\";\nimport { getErrorMessage, shouldIgnoreError } from \"./utils\";\nimport { report, setReportSink, toUserMessage } from \"@/utils\";\n\nexport function GlobalErrorListener(): null {\n const lastError = useRef<number>(0);\n const count = useRef<number>(0);\n const shown = useRef<Set<string>>(new Set());\n\n const handleError = useCallback((error: unknown, source = \"runtime\") => {\n if (shouldIgnoreError(error)) return;\n\n const now = Date.now();\n\n if (count.current >= ERROR_LISTENER_CONFIG.maxErrors) return;\n if (now - lastError.current < ERROR_LISTENER_CONFIG.throttle) return;\n\n const message = getErrorMessage(error);\n const key = message || String(error);\n\n if (shown.current.has(key)) return;\n shown.current.add(key);\n\n lastError.current = now;\n count.current += 1;\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, {\n globalListener: true,\n source,\n });\n } catch (reportingError) {\n report(\"GlobalError reporting\", reportingError, \"warn\");\n }\n\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n message: toUserMessage(error),\n });\n }, []);\n\n useEffect(() => {\n const removeSink = setReportSink((scope, error, level) => {\n try {\n getErrorReporter().captureError(error, { level, scope });\n } catch {}\n });\n const onError = (event: ErrorEvent) =>\n handleError(event.error || event.message, \"window.onerror\");\n const onRejection = (event: PromiseRejectionEvent) =>\n handleError(event.reason, \"unhandledrejection\");\n\n window.addEventListener(\"error\", onError);\n window.addEventListener(\"unhandledrejection\", onRejection);\n\n return () => {\n removeSink();\n window.removeEventListener(\"error\", onError);\n window.removeEventListener(\"unhandledrejection\", onRejection);\n };\n }, [handleError]);\n\n return null;\n}\n"]}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -2,16 +2,9 @@ export { useRequiredContext } from "./use-required-context";
|
|
|
2
2
|
export { useStore } from "./use-store";
|
|
3
3
|
export { useClickOutside } from "./use-click-outside";
|
|
4
4
|
export { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect";
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export { useMediaQuery } from "./use-media-query";
|
|
5
|
+
export { useGlobalEvent } from "./use-global-event";
|
|
6
|
+
export { useIsFullscreenStateActive } from "./use-fullscreen-state";
|
|
8
7
|
export { useControllableState } from "./use-controllable-state";
|
|
9
8
|
export { useHotkey, useEscapeKey } from "./use-hotkey";
|
|
10
|
-
export { useGlobalEvent, useEventState } from "./use-global-event";
|
|
11
|
-
export { useAsyncAction } from "./use-async-action";
|
|
12
|
-
export { useServerAction } from "./use-server-action";
|
|
13
|
-
export { useStorageState, useLocalStorage, useSessionStorage, } from "./use-storage-state";
|
|
14
|
-
export { useIntersectionObserver } from "./use-intersection-observer";
|
|
15
|
-
export { useIsFullscreenStateActive } from "./use-fullscreen-state";
|
|
16
9
|
export type * from "./types";
|
|
17
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvD,mBAAmB,SAAS,CAAC"}
|