@zaplier/sdk 1.8.0 → 1.8.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.
Files changed (144) hide show
  1. package/dist/core-ultra.min.js +10 -0
  2. package/dist/index.cjs +1615 -34
  3. package/dist/index.d.ts +11 -7
  4. package/dist/index.esm.js +1615 -34
  5. package/dist/v2/chunks/browser-apis-AyU2utpF.min.js +6 -0
  6. package/dist/v2/chunks/confidence-BslwbUCt.min.js +6 -0
  7. package/dist/v2/chunks/device-signals-2L_62qNZ.min.js +6 -0
  8. package/dist/v2/chunks/dom-blockers-C467-IRd.min.js +6 -0
  9. package/dist/v2/chunks/fingerprint-FfUEEIAd.min.js +6 -0
  10. package/dist/v2/chunks/hardware-9ikfSEs-.min.js +6 -0
  11. package/dist/v2/chunks/incognito-CkKAdE8Z.min.js +6 -0
  12. package/dist/v2/chunks/math-Q4s6nkVD.min.js +6 -0
  13. package/dist/v2/chunks/plugins-enhanced-mUjU1EXe.min.js +6 -0
  14. package/dist/v2/chunks/session-replay-C5Tp0d16.min.js +6 -0
  15. package/dist/v2/chunks/storage-Bl_8oytT.min.js +6 -0
  16. package/dist/v2/chunks/system-DTjxyOZF.min.js +6 -0
  17. package/dist/v2/core.d.ts +7 -0
  18. package/dist/v2/core.js +2 -2
  19. package/dist/v2/core.min.js +2 -2
  20. package/dist/v2/modules/anti-adblock.js +2 -2
  21. package/dist/v2/modules/browser-apis-C32PGYAh.js +6 -0
  22. package/dist/v2/modules/browser-apis-DzzjRXFN.js +6 -0
  23. package/dist/v2/modules/confidence-CLylpqVh.js +6 -0
  24. package/dist/v2/modules/device-signals-ChNkNSJR.js +6 -0
  25. package/dist/v2/modules/device-signals-D-VQg-o6.js +6 -0
  26. package/dist/v2/modules/dom-blockers-BamKJxCs.js +6 -0
  27. package/dist/v2/modules/dom-blockers-D9M2aO9M.js +6 -0
  28. package/dist/v2/modules/fingerprint-CRCL21-p.js +6 -0
  29. package/dist/v2/modules/fingerprint-Ddq30bun.js +6 -0
  30. package/dist/v2/modules/fingerprint.js +2 -2
  31. package/dist/v2/modules/hardware-BxWqOjae.js +6 -0
  32. package/dist/v2/modules/heatmap.js +1 -1
  33. package/dist/v2/modules/incognito-CBxUhUOT.js +6 -0
  34. package/dist/v2/modules/incognito-DpuYoC8S.js +6 -0
  35. package/dist/v2/modules/math-B13vt1ND.js +6 -0
  36. package/dist/v2/modules/plugins-enhanced-CnBdC9_k.js +6 -0
  37. package/dist/v2/modules/plugins-enhanced-D5ft0k0e.js +6 -0
  38. package/dist/v2/modules/replay.js +2 -2
  39. package/dist/v2/modules/storage-D8dcMojB.js +6 -0
  40. package/dist/v2/modules/system-ZMflVbka.js +6 -0
  41. package/package.json +47 -22
  42. package/dist/index.cjs.map +0 -1
  43. package/dist/index.esm.js.map +0 -1
  44. package/dist/index.js +0 -3517
  45. package/dist/index.js.map +0 -1
  46. package/dist/sdk.js +0 -26960
  47. package/dist/sdk.js.map +0 -1
  48. package/dist/sdk.legacy.min.js +0 -6
  49. package/dist/sdk.min.js +0 -7
  50. package/dist/src/core.d.ts +0 -87
  51. package/dist/src/core.d.ts.map +0 -1
  52. package/dist/src/index.d.ts +0 -15
  53. package/dist/src/index.d.ts.map +0 -1
  54. package/dist/src/modules/anti-adblock.d.ts +0 -113
  55. package/dist/src/modules/anti-adblock.d.ts.map +0 -1
  56. package/dist/src/modules/auto-tracker.d.ts +0 -240
  57. package/dist/src/modules/auto-tracker.d.ts.map +0 -1
  58. package/dist/src/modules/bot-detection.d.ts +0 -15
  59. package/dist/src/modules/bot-detection.d.ts.map +0 -1
  60. package/dist/src/modules/fingerprint/accessibility.d.ts +0 -155
  61. package/dist/src/modules/fingerprint/accessibility.d.ts.map +0 -1
  62. package/dist/src/modules/fingerprint/audio.d.ts +0 -15
  63. package/dist/src/modules/fingerprint/audio.d.ts.map +0 -1
  64. package/dist/src/modules/fingerprint/browser-apis.d.ts +0 -108
  65. package/dist/src/modules/fingerprint/browser-apis.d.ts.map +0 -1
  66. package/dist/src/modules/fingerprint/browser.d.ts +0 -14
  67. package/dist/src/modules/fingerprint/browser.d.ts.map +0 -1
  68. package/dist/src/modules/fingerprint/canvas.d.ts +0 -14
  69. package/dist/src/modules/fingerprint/canvas.d.ts.map +0 -1
  70. package/dist/src/modules/fingerprint/confidence.d.ts +0 -89
  71. package/dist/src/modules/fingerprint/confidence.d.ts.map +0 -1
  72. package/dist/src/modules/fingerprint/datetime-locale.d.ts +0 -76
  73. package/dist/src/modules/fingerprint/datetime-locale.d.ts.map +0 -1
  74. package/dist/src/modules/fingerprint/device-signals.d.ts +0 -29
  75. package/dist/src/modules/fingerprint/device-signals.d.ts.map +0 -1
  76. package/dist/src/modules/fingerprint/dom-blockers.d.ts +0 -56
  77. package/dist/src/modules/fingerprint/dom-blockers.d.ts.map +0 -1
  78. package/dist/src/modules/fingerprint/font-preferences.d.ts +0 -70
  79. package/dist/src/modules/fingerprint/font-preferences.d.ts.map +0 -1
  80. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts +0 -43
  81. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts.map +0 -1
  82. package/dist/src/modules/fingerprint/fonts.d.ts +0 -14
  83. package/dist/src/modules/fingerprint/fonts.d.ts.map +0 -1
  84. package/dist/src/modules/fingerprint/hardware.d.ts +0 -40
  85. package/dist/src/modules/fingerprint/hardware.d.ts.map +0 -1
  86. package/dist/src/modules/fingerprint/hashing.d.ts +0 -29
  87. package/dist/src/modules/fingerprint/hashing.d.ts.map +0 -1
  88. package/dist/src/modules/fingerprint/incognito.d.ts +0 -6
  89. package/dist/src/modules/fingerprint/incognito.d.ts.map +0 -1
  90. package/dist/src/modules/fingerprint/math-enhanced.d.ts +0 -70
  91. package/dist/src/modules/fingerprint/math-enhanced.d.ts.map +0 -1
  92. package/dist/src/modules/fingerprint/math.d.ts +0 -32
  93. package/dist/src/modules/fingerprint/math.d.ts.map +0 -1
  94. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts +0 -97
  95. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts.map +0 -1
  96. package/dist/src/modules/fingerprint/screen.d.ts +0 -15
  97. package/dist/src/modules/fingerprint/screen.d.ts.map +0 -1
  98. package/dist/src/modules/fingerprint/storage.d.ts +0 -45
  99. package/dist/src/modules/fingerprint/storage.d.ts.map +0 -1
  100. package/dist/src/modules/fingerprint/system.d.ts +0 -40
  101. package/dist/src/modules/fingerprint/system.d.ts.map +0 -1
  102. package/dist/src/modules/fingerprint/webgl.d.ts +0 -15
  103. package/dist/src/modules/fingerprint/webgl.d.ts.map +0 -1
  104. package/dist/src/modules/fingerprint.d.ts +0 -35
  105. package/dist/src/modules/fingerprint.d.ts.map +0 -1
  106. package/dist/src/modules/global-interface.d.ts +0 -157
  107. package/dist/src/modules/global-interface.d.ts.map +0 -1
  108. package/dist/src/modules/heatmap.d.ts +0 -145
  109. package/dist/src/modules/heatmap.d.ts.map +0 -1
  110. package/dist/src/modules/incognito-detection.d.ts +0 -23
  111. package/dist/src/modules/incognito-detection.d.ts.map +0 -1
  112. package/dist/src/modules/session-replay.d.ts +0 -93
  113. package/dist/src/modules/session-replay.d.ts.map +0 -1
  114. package/dist/src/modules/user-agent.d.ts +0 -35
  115. package/dist/src/modules/user-agent.d.ts.map +0 -1
  116. package/dist/src/modules/visitor-persistence.d.ts +0 -51
  117. package/dist/src/modules/visitor-persistence.d.ts.map +0 -1
  118. package/dist/src/sdk.d.ts +0 -289
  119. package/dist/src/sdk.d.ts.map +0 -1
  120. package/dist/src/types/config.d.ts +0 -44
  121. package/dist/src/types/config.d.ts.map +0 -1
  122. package/dist/src/types/detection.d.ts +0 -114
  123. package/dist/src/types/detection.d.ts.map +0 -1
  124. package/dist/src/types/events.d.ts +0 -174
  125. package/dist/src/types/events.d.ts.map +0 -1
  126. package/dist/src/types/fingerprint.d.ts +0 -252
  127. package/dist/src/types/fingerprint.d.ts.map +0 -1
  128. package/dist/src/types/index.d.ts +0 -83
  129. package/dist/src/types/index.d.ts.map +0 -1
  130. package/dist/src/types/methods.d.ts +0 -83
  131. package/dist/src/types/methods.d.ts.map +0 -1
  132. package/dist/src/types/visitor.d.ts +0 -90
  133. package/dist/src/types/visitor.d.ts.map +0 -1
  134. package/dist/src/utils/browser.d.ts +0 -114
  135. package/dist/src/utils/browser.d.ts.map +0 -1
  136. package/dist/src/utils/lazy-loader.d.ts +0 -60
  137. package/dist/src/utils/lazy-loader.d.ts.map +0 -1
  138. package/dist/src/utils/session-utils.d.ts +0 -58
  139. package/dist/src/utils/session-utils.d.ts.map +0 -1
  140. package/dist/src/utils/webgl-cache.d.ts +0 -43
  141. package/dist/src/utils/webgl-cache.d.ts.map +0 -1
  142. package/dist/v2/chunks/fingerprint-ergvAID6.js +0 -8461
  143. package/dist/v2/chunks/replay-CM8dTFmL.js +0 -12158
  144. package/dist/v2/chunks/session-replay-C_UkGoTj.js +0 -240
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/modules/fingerprint/hashing.ts","../../src/modules/fingerprint/audio.ts","../../src/utils/browser.ts","../../src/modules/fingerprint/browser.ts","../../src/modules/fingerprint/canvas.ts","../../src/modules/fingerprint/fonts.ts","../../src/modules/fingerprint/screen.ts","../../src/utils/webgl-cache.ts","../../src/modules/fingerprint/webgl.ts","../../src/modules/fingerprint/accessibility.ts","../../src/modules/fingerprint/datetime-locale.ts","../../src/modules/fingerprint/font-preferences.ts","../../src/modules/fingerprint/fonts-enhanced.ts","../../src/modules/fingerprint/math-enhanced.ts","../../src/modules/fingerprint.ts","../../src/modules/anti-adblock.ts","../../src/modules/heatmap.ts","../node_modules/rrweb/dist/rrweb.js","../../src/modules/session-replay.ts","../../src/modules/auto-tracker.ts","../../src/utils/session-utils.ts","../../src/modules/visitor-persistence.ts","../../src/sdk.ts","../../src/modules/global-interface.ts","../../src/modules/bot-detection.ts","../../src/modules/incognito-detection.ts","../../src/modules/user-agent.ts","../../src/modules/fingerprint/incognito.ts","../../src/modules/fingerprint/hardware.ts","../../src/modules/fingerprint/system.ts","../../src/modules/fingerprint/storage.ts","../../src/modules/fingerprint/math.ts","../../src/modules/fingerprint/dom-blockers.ts","../../src/modules/fingerprint/browser-apis.ts","../../src/modules/fingerprint/plugins-enhanced.ts","../../src/modules/fingerprint/confidence.ts","../../src/modules/fingerprint/device-signals.ts"],"sourcesContent":["/**\n * MurmurHash3 x64 Implementation\n * Based on FingerprintJS hashing utility for consistent fingerprint generation\n *\n * Provides 128-bit hash output using the x64 variant of MurmurHash3\n */\n\n/**\n * 64-bit number representation [high, low]\n */\ntype x64Hash = [number, number];\n\n/**\n * Adds two 64-bit numbers\n */\nfunction x64Add(a: x64Hash, b: x64Hash): x64Hash {\n const low = (a[1] + b[1]) & 0xffffffff;\n const high = (a[0] + b[0] + (low < a[1] ? 1 : 0)) & 0xffffffff;\n return [high, low];\n}\n\n/**\n * Multiplies two 64-bit numbers\n */\nfunction x64Multiply(a: x64Hash, b: x64Hash): x64Hash {\n const al = a[1] & 0xffff;\n const ah = a[1] >>> 16;\n const bl = b[1] & 0xffff;\n const bh = b[1] >>> 16;\n\n const rl = al * bl;\n const rm = (al * bh + ah * bl) & 0xffffffff;\n const rh = ah * bh + (rm >>> 16);\n\n const low = (rl + ((rm & 0xffff) << 16)) & 0xffffffff;\n const high = (a[0] * b[1] + a[1] * b[0] + rh) & 0xffffffff;\n\n return [high, low];\n}\n\n/**\n * Rotates a 64-bit number left by the specified number of bits\n */\nfunction x64Rotl(value: x64Hash, shift: number): x64Hash {\n shift %= 64;\n\n if (shift === 0) return value;\n if (shift < 32) {\n const high = (value[0] << shift) | (value[1] >>> (32 - shift));\n const low = (value[1] << shift) | (value[0] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n } else {\n shift -= 32;\n const high = (value[1] << shift) | (value[0] >>> (32 - shift));\n const low = (value[0] << shift) | (value[1] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n }\n}\n\n/**\n * XORs two 64-bit numbers\n */\nfunction x64Xor(a: x64Hash, b: x64Hash): x64Hash {\n return [a[0] ^ b[0], a[1] ^ b[1]];\n}\n\n/**\n * Finalizes a 64-bit hash value\n */\nfunction x64Fmix(hash: x64Hash): x64Hash {\n let h = hash;\n\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n\n return h;\n}\n\n/**\n * Converts a string to array of 32-bit integers (little-endian)\n */\nfunction stringToUint32Array(str: string): number[] {\n const arr: number[] = [];\n for (let i = 0; i < str.length; i += 4) {\n let value = 0;\n for (let j = Math.min(3, str.length - i - 1); j >= 0; j--) {\n value = (value << 8) | str.charCodeAt(i + j);\n }\n arr.push(value);\n }\n return arr;\n}\n\n/**\n * MurmurHash3 x64 128-bit hash function\n * Returns a 128-bit hash as a hex string\n */\nexport function x64hash128(input: string, seed: number = 0): string {\n const data = stringToUint32Array(input);\n const nblocks = Math.floor(data.length / 4);\n\n let h1: x64Hash = [0, seed];\n let h2: x64Hash = [0, seed];\n\n const c1: x64Hash = [0x87c37b91, 0x114253d5];\n const c2: x64Hash = [0x4cf5ad43, 0x2745937f];\n\n // Process 16-byte blocks\n for (let i = 0; i < nblocks; i++) {\n const k1Index = i * 4;\n const k2Index = i * 4 + 2;\n\n let k1: x64Hash = [data[k1Index + 1] || 0, data[k1Index] || 0];\n let k2: x64Hash = [data[k2Index + 1] || 0, data[k2Index] || 0];\n\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n\n h1 = x64Rotl(h1, 27);\n h1 = x64Add(h1, h2);\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n\n h2 = x64Rotl(h2, 31);\n h2 = x64Add(h2, h1);\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n }\n\n // Process remaining bytes\n const tailIndex = nblocks * 4;\n const remainingBytes = data.length - tailIndex;\n\n let k1: x64Hash = [0, 0];\n let k2: x64Hash = [0, 0];\n\n if (remainingBytes >= 12) {\n k2 = x64Xor(k2, [data[tailIndex + 3] || 0, 0]);\n }\n if (remainingBytes >= 8) {\n k2 = x64Xor(k2, [0, data[tailIndex + 2] || 0]);\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n }\n if (remainingBytes >= 4) {\n k1 = x64Xor(k1, [data[tailIndex + 1] || 0, 0]);\n }\n if (remainingBytes >= 1) {\n k1 = x64Xor(k1, [0, data[tailIndex] || 0]);\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n }\n\n // Finalization\n h1 = x64Xor(h1, [0, input.length]);\n h2 = x64Xor(h2, [0, input.length]);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n h1 = x64Fmix(h1);\n h2 = x64Fmix(h2);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n // Convert to hex string\n // CRITICAL: Use >>> 0 to convert to unsigned 32-bit integer before converting to hex\n // This prevents negative numbers from generating hashes with minus signs (e.g., \"-6b43973f\")\n const hex1 =\n (h1[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h1[1] >>> 0).toString(16).padStart(8, \"0\");\n const hex2 =\n (h2[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h2[1] >>> 0).toString(16).padStart(8, \"0\");\n\n return hex1 + hex2;\n}\n\n/**\n * Simple 32-bit hash for basic use cases\n */\nexport function hash32(input: string): string {\n let hash = 0;\n if (input.length === 0) return hash.toString(36);\n\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Hash fingerprint components into a stable identifier\n */\nexport function hashFingerprint(\n components: Record<string, any>,\n debug: boolean = false\n): string {\n // Convert components to canonical string representation using deep sorting\n // CRITICAL: Do NOT use JSON.stringify(obj, keys) as it filters out nested properties!\n // Use canonicalizeStable instead which handles deep sorting and normalization.\n const canonicalized = canonicalizeStable(components);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashFingerprint debug:\", {\n originalKeys: Object.keys(components),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n // Use MurmurHash3 x64 for consistent hashing\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated fingerprintHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n\n/**\n * Generate a visitor ID from fingerprint hash\n * Returns a proper UUID v4 format for database compatibility\n */\nexport function generateVisitorId(fingerprintHash: string): string {\n // Generate UUID v4 format from fingerprint hash\n const hash = fingerprintHash.length >= 32 ? fingerprintHash : (fingerprintHash + fingerprintHash + fingerprintHash + fingerprintHash).substring(0, 32);\n \n // Extract bytes for UUID construction\n const hex = hash.substring(0, 32);\n \n // Set version 4 and variant bits according to RFC 4122\n const chars = hex.split('');\n chars[12] = '4'; // Version 4\n chars[16] = (parseInt(chars[16] || '0', 16) & 0x3 | 0x8).toString(16); // Variant 10\n \n // Format as UUID: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n return `${chars.slice(0, 8).join('')}-${chars.slice(8, 12).join('')}-${chars.slice(12, 16).join('')}-${chars.slice(16, 20).join('')}-${chars.slice(20, 32).join('')}`;\n}\n\n/**\n * Check if a key represents an unstable component that should be excluded from hashing\n */\nfunction isUnstableKey(key: string): boolean {\n // Unstable keys that change between requests:\n // - duration: collection time varies\n // - timestamp: changes every request\n // - error: error messages can vary\n // - errors: error arrays can vary\n // - collectionTime: varies per request\n const unstableKeys = [\n \"duration\",\n \"timestamp\",\n \"error\",\n \"errors\",\n \"collectionTime\",\n \"startTime\",\n \"endTime\",\n \"_timestamp\", // internal timestamp fields\n ];\n\n return (\n unstableKeys.includes(key) ||\n key.endsWith(\"_timestamp\") ||\n key.endsWith(\"Timestamp\")\n );\n}\n\n/**\n * Canonicalize an object deeply with sorted keys and normalized primitives\n * CRITICAL: Filters out unstable components that vary between requests\n */\nfunction canonicalizeStable(input: any): any {\n if (input === null || input === undefined) return null;\n if (Array.isArray(input)) {\n return input\n .map((v) => canonicalizeStable(v))\n .filter((v) => v !== null)\n .sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));\n }\n if (typeof input === \"object\") {\n const keys = Object.keys(input).sort();\n const out: Record<string, any> = {};\n for (const k of keys) {\n // CRITICAL: Skip unstable keys that cause hash instability\n if (isUnstableKey(k)) {\n continue;\n }\n\n const v = canonicalizeStable(input[k]);\n if (v !== null) out[k] = v;\n }\n return out;\n }\n if (typeof input === \"number\") {\n // Enhanced floating point normalization for maximum stability\n if (!Number.isFinite(input)) return 0;\n \n // Handle very small numbers (round to 0)\n if (Math.abs(input) < 0.0001) return 0;\n \n // Handle very large numbers (clamp to reasonable range)\n if (Math.abs(input) > 1000000) {\n return input > 0 ? 1000000 : -1000000;\n }\n \n // For screen ratios and similar values, use more precision\n if (input >= 0.1 && input <= 10) {\n return Number(input.toFixed(3));\n }\n \n // For other numbers, use 2 decimal places\n return Number(input.toFixed(2));\n }\n if (typeof input === \"string\") {\n return input.trim().toLowerCase();\n }\n if (typeof input === \"boolean\") return input;\n return null;\n}\n\n/**\n * Compute stable core hash from a minimal, invariant vector\n */\nexport function hashStableCore(\n coreVector: Record<string, any>,\n debug: boolean = false\n): string {\n const canonicalized = canonicalizeStable(coreVector);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashStableCore debug:\", {\n originalKeys: Object.keys(coreVector),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated stableCoreHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n","/**\n * Audio Fingerprinting\n * Based on FingerprintJS audio component using AudioContext\n */\n\nimport type {\n AudioFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Enhanced audio configuration for maximum differentiation\n */\nconst AUDIO_CONFIG = {\n SAMPLE_RATE: 44100,\n DURATION: 0.1, // 100ms\n FREQUENCIES: [440, 1000, 1760, 3520], // Multiple frequencies for better differentiation\n COMPRESSOR_THRESHOLD: -50,\n COMPRESSOR_KNEE: 40,\n COMPRESSOR_RATIO: 12,\n COMPRESSOR_ATTACK: 0.003,\n COMPRESSOR_RELEASE: 0.25,\n // NEW: Additional audio processing parameters\n FILTER_FREQUENCY: 2000,\n GAIN_VALUE: 0.5,\n DELAY_TIME: 0.02,\n} as const;\n\n/**\n * Create offline audio context (doesn't require user gesture)\n * OfflineAudioContext is perfect for fingerprinting - no audio output needed\n */\nfunction createOfflineAudioContext(): OfflineAudioContext | null {\n try {\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (!OfflineAudioContextClass) return null;\n\n // Use standard sample rate (most browsers support 44100)\n const sampleRate = 44100;\n const duration = AUDIO_CONFIG.DURATION;\n const frameCount = Math.floor(sampleRate * duration);\n\n return new OfflineAudioContextClass(1, frameCount, sampleRate);\n } catch {\n return null;\n }\n}\n\n/**\n * Get sample rate (for metadata only)\n * Uses OfflineAudioContext if available (no user gesture needed)\n * Falls back to 44100 if context creation fails\n */\nfunction getDefaultSampleRate(): number {\n try {\n // Try OfflineAudioContext first (no user gesture needed)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (OfflineAudioContextClass) {\n try {\n const testContext = new OfflineAudioContextClass(1, 1, 44100);\n const sampleRate = testContext.sampleRate;\n return sampleRate;\n } catch {\n // Fall through to default\n }\n }\n\n // Fallback: try regular AudioContext (may fail due to autoplay policy)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n if (AudioContextClass) {\n try {\n const testContext = new AudioContextClass();\n const sampleRate = testContext.sampleRate;\n // Close immediately to free resources\n testContext.close().catch(() => {});\n return sampleRate;\n } catch {\n // AudioContext creation failed (likely due to autoplay policy)\n // This is fine, we'll use default\n }\n }\n } catch {\n // Any error, use default\n }\n\n return 44100; // Default fallback (standard sample rate)\n}\n\n/**\n * Generate advanced multiple oscillator fingerprint for maximum DAC/hardware differentiation\n */\nasync function generateMultiOscillatorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Create multiple oscillators with different waveforms and frequencies\n const oscillators = AUDIO_CONFIG.FREQUENCIES.map((freq, index) => {\n const osc = offlineContext.createOscillator();\n const waveforms: OscillatorType[] = ['sine', 'square', 'sawtooth', 'triangle'];\n const waveformIndex = index % waveforms.length;\n const selectedWaveform = waveforms[waveformIndex];\n // Type guard to ensure we have a valid waveform\n if (selectedWaveform) {\n osc.type = selectedWaveform;\n } else {\n osc.type = 'sine'; // Fallback to sine wave\n }\n osc.frequency.setValueAtTime(freq, offlineContext.currentTime);\n return osc;\n });\n\n // Create advanced audio processing chain\n const compressor = offlineContext.createDynamicsCompressor();\n const biquadFilter = offlineContext.createBiquadFilter();\n const gainNode = offlineContext.createGain();\n const delayNode = offlineContext.createDelay();\n const analyserNode = offlineContext.createAnalyser();\n\n // Configure compressor with specific settings\n compressor.threshold.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_THRESHOLD, offlineContext.currentTime);\n compressor.knee.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_KNEE, offlineContext.currentTime);\n compressor.ratio.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RATIO, offlineContext.currentTime);\n compressor.attack.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_ATTACK, offlineContext.currentTime);\n compressor.release.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RELEASE, offlineContext.currentTime);\n\n // Configure biquad filter for frequency response differences\n biquadFilter.type = 'bandpass';\n biquadFilter.frequency.setValueAtTime(AUDIO_CONFIG.FILTER_FREQUENCY, offlineContext.currentTime);\n biquadFilter.Q.setValueAtTime(0.7, offlineContext.currentTime);\n\n // Configure gain node\n gainNode.gain.setValueAtTime(AUDIO_CONFIG.GAIN_VALUE, offlineContext.currentTime);\n\n // Configure delay node for additional processing\n delayNode.delayTime.setValueAtTime(AUDIO_CONFIG.DELAY_TIME, offlineContext.currentTime);\n\n // Create a mixer node to combine oscillators\n const mixerGain = offlineContext.createGain();\n mixerGain.gain.setValueAtTime(0.25, offlineContext.currentTime); // Reduce volume when mixing\n\n // Connect oscillators to mixer\n oscillators.forEach(osc => {\n osc.connect(mixerGain);\n });\n\n // Create complex audio processing chain:\n // Mixed Oscillators -> Filter -> Compressor -> Gain -> Delay -> Analyser -> Destination\n mixerGain.connect(biquadFilter);\n biquadFilter.connect(compressor);\n compressor.connect(gainNode);\n gainNode.connect(delayNode);\n delayNode.connect(analyserNode);\n analyserNode.connect(offlineContext.destination);\n\n // Start all oscillators\n oscillators.forEach((osc, index) => {\n osc.start(index * 0.01); // Slightly staggered start times\n osc.stop(AUDIO_CONFIG.DURATION);\n });\n\n const buffer = await offlineContext.startRendering();\n const channelData = buffer.getChannelData(0);\n\n // Enhanced sampling for better differentiation\n const samplePoints = [];\n for (let i = 0; i < 32; i++) {\n const index = Math.floor((channelData.length / 32) * i);\n samplePoints.push(channelData[index] || 0);\n }\n\n // Calculate additional characteristics\n const rms = Math.sqrt(samplePoints.reduce((sum, val) => sum + val * val, 0) / samplePoints.length);\n const maxAmplitude = Math.max(...samplePoints.map(Math.abs));\n const averageAmplitude = samplePoints.reduce((sum, val) => sum + Math.abs(val), 0) / samplePoints.length;\n\n // Frequency domain analysis\n let spectralCentroid = 0;\n for (let i = 0; i < Math.min(samplePoints.length, 16); i++) {\n const sample = samplePoints[i];\n if (sample !== undefined) {\n spectralCentroid += i * Math.abs(sample);\n }\n }\n\n const characteristics = [\n ...samplePoints,\n rms,\n maxAmplitude,\n averageAmplitude,\n spectralCentroid\n ];\n\n return hash32(characteristics.join(\",\"));\n } catch (error) {\n return hash32(\"multi_oscillator_error\");\n }\n}\n\n/**\n * Generate frequency response fingerprint to detect DAC characteristics\n */\nasync function generateFrequencyResponseFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Test multiple frequencies to detect DAC/audio hardware frequency response\n const testFrequencies = [100, 440, 1000, 2000, 4000, 8000, 12000, 16000];\n const responses: number[] = [];\n\n for (const frequency of testFrequencies) {\n const osc = offlineContext.createOscillator();\n const analyser = offlineContext.createAnalyser();\n \n osc.type = 'sine';\n osc.frequency.setValueAtTime(frequency, offlineContext.currentTime);\n \n // Configure analyser for frequency analysis\n analyser.fftSize = 256;\n analyser.smoothingTimeConstant = 0;\n \n osc.connect(analyser);\n analyser.connect(offlineContext.destination);\n \n osc.start();\n osc.stop(0.05); // Short test for each frequency\n \n // Create a new offline context for each frequency test\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const testOsc = testContext.createOscillator();\n testOsc.type = 'sine';\n testOsc.frequency.setValueAtTime(frequency, testContext.currentTime);\n testOsc.connect(testContext.destination);\n testOsc.start();\n testOsc.stop(0.05);\n \n try {\n const testBuffer = await testContext.startRendering();\n const testData = testBuffer.getChannelData(0);\n \n // Calculate RMS for this frequency\n const rms = Math.sqrt(testData.reduce((sum, val) => sum + val * val, 0) / testData.length);\n responses.push(rms);\n } catch {\n responses.push(0);\n }\n }\n }\n\n return hash32(responses.join(\",\"));\n } catch (error) {\n return hash32(\"frequency_response_error\");\n }\n}\n\n/**\n * Generate compressor fingerprint using OfflineAudioContext (no user gesture required)\n */\nasync function generateCompressorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n const offlineOscillator = offlineContext.createOscillator();\n const offlineCompressor = offlineContext.createDynamicsCompressor();\n\n // Configure nodes\n offlineOscillator.type = \"triangle\";\n offlineOscillator.frequency.setValueAtTime(\n AUDIO_CONFIG.FREQUENCIES[0], // Use first frequency from the array\n offlineContext.currentTime\n );\n\n offlineCompressor.threshold.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_THRESHOLD,\n offlineContext.currentTime\n );\n offlineCompressor.knee.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_KNEE,\n offlineContext.currentTime\n );\n offlineCompressor.ratio.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RATIO,\n offlineContext.currentTime\n );\n offlineCompressor.attack.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_ATTACK,\n offlineContext.currentTime\n );\n offlineCompressor.release.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RELEASE,\n offlineContext.currentTime\n );\n\n // Connect and render (no audible output, no user gesture needed)\n offlineOscillator.connect(offlineCompressor);\n offlineCompressor.connect(offlineContext.destination);\n\n offlineOscillator.start();\n offlineOscillator.stop(AUDIO_CONFIG.DURATION);\n\n const renderedBuffer = await offlineContext.startRendering();\n const channelData = renderedBuffer.getChannelData(0);\n\n // Create fingerprint from specific samples\n const fingerprintSamples = [\n channelData[0] || 0,\n channelData[Math.floor(channelData.length * 0.25)] || 0,\n channelData[Math.floor(channelData.length * 0.5)] || 0,\n channelData[Math.floor(channelData.length * 0.75)] || 0,\n channelData[channelData.length - 1] || 0,\n ];\n\n return hash32(fingerprintSamples.join(\",\"));\n } catch (error) {\n // Fallback if OfflineAudioContext fails\n return hash32(\"compressor_error\");\n }\n}\n\n/**\n * Get detailed audio context characteristics\n */\nfunction getAudioContextCharacteristics(): Record<string, any> {\n const characteristics: Record<string, any> = {};\n \n try {\n // Try to get characteristics from OfflineAudioContext\n const testContext = createOfflineAudioContext();\n if (testContext) {\n characteristics.sampleRate = testContext.sampleRate;\n characteristics.length = testContext.length;\n characteristics.state = testContext.state;\n \n // Test supported sample rates\n const supportedRates = [];\n const testRates = [8000, 22050, 44100, 48000, 96000];\n \n for (const rate of testRates) {\n try {\n const testCtx = new (window.OfflineAudioContext || (window as any).webkitOfflineAudioContext)(1, 1, rate);\n if (testCtx.sampleRate === rate) {\n supportedRates.push(rate);\n }\n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testCtx && typeof (testCtx as any).close === 'function') {\n (testCtx as any).close();\n }\n } catch {\n // Rate not supported\n }\n }\n \n characteristics.supportedSampleRates = supportedRates;\n \n // Test base latency (if available)\n if ('baseLatency' in testContext) {\n characteristics.baseLatency = (testContext as any).baseLatency;\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch (error) {\n characteristics.error = 'context_characteristics_error';\n }\n \n return characteristics;\n}\n\n/**\n * Generate enhanced audio fingerprint with multiple analysis methods\n */\nexport async function getAudioFingerprint(): Promise<\n FingerprintComponent<AudioFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get sample rate and context characteristics\n const sampleRate = getDefaultSampleRate();\n const contextCharacteristics = getAudioContextCharacteristics();\n\n // Create multiple offline contexts for different analysis methods\n const contexts = {\n multiOsc: createOfflineAudioContext(),\n compressor: createOfflineAudioContext(),\n frequencyResponse: createOfflineAudioContext(),\n };\n\n // Verify all contexts are available\n if (!contexts.multiOsc || !contexts.compressor || !contexts.frequencyResponse) {\n throw new Error(\"OfflineAudioContext not available\");\n }\n\n // Generate multiple fingerprints in parallel for enhanced differentiation\n const [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash\n ] = await Promise.all([\n generateMultiOscillatorFingerprint(contexts.multiOsc).catch(() => \"multi_oscillator_error\"),\n generateCompressorFingerprint(contexts.compressor).catch(() => \"compressor_error\"),\n generateFrequencyResponseFingerprint(contexts.frequencyResponse).catch(() => \"frequency_response_error\"),\n ]);\n\n // Test audio node creation capabilities\n const nodeCapabilities: Record<string, boolean> = {};\n try {\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const nodeTypes = [\n 'createOscillator',\n 'createAnalyser',\n 'createBiquadFilter',\n 'createConvolver',\n 'createDelay',\n 'createDynamicsCompressor',\n 'createGain',\n 'createWaveShaper',\n 'createStereoPanner',\n 'createChannelSplitter',\n 'createChannelMerger'\n ];\n\n for (const nodeType of nodeTypes) {\n try {\n if (typeof (testContext as any)[nodeType] === 'function') {\n (testContext as any)[nodeType]();\n nodeCapabilities[nodeType] = true;\n }\n } catch {\n nodeCapabilities[nodeType] = false;\n }\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch {\n // Node capability testing failed\n }\n\n // Calculate audio stack fingerprint\n const audioStackComponents = [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash,\n sampleRate.toString(),\n JSON.stringify(contextCharacteristics),\n JSON.stringify(nodeCapabilities)\n ];\n\n const audioStackHash = hash32(audioStackComponents.join(\"|\"));\n\n const endTime = performance.now();\n\n const result: AudioFingerprint = {\n // Legacy fields for compatibility\n oscillator: multiOscillatorHash,\n compressor: compressorHash,\n sampleRate: sampleRate,\n maxChannelCount: contextCharacteristics.supportedSampleRates?.length || 2,\n \n // NEW: Enhanced audio analysis\n multiOscillatorFingerprint: multiOscillatorHash,\n frequencyResponseFingerprint: frequencyResponseHash,\n contextCharacteristics: contextCharacteristics,\n nodeCapabilities: nodeCapabilities,\n audioStackHash: audioStackHash,\n supportedSampleRates: contextCharacteristics.supportedSampleRates || []\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n oscillator: \"error\",\n compressor: \"error\",\n sampleRate: 0,\n maxChannelCount: 0,\n multiOscillatorFingerprint: \"error\",\n frequencyResponseFingerprint: \"error\",\n contextCharacteristics: {},\n nodeCapabilities: {},\n audioStackHash: \"error\",\n supportedSampleRates: []\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Audio fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if audio fingerprinting is available\n * Prefers OfflineAudioContext (no user gesture needed)\n */\nexport function isAudioAvailable(): boolean {\n try {\n // Check for OfflineAudioContext first (preferred for fingerprinting)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (typeof OfflineAudioContextClass === \"function\") {\n return true;\n }\n\n // Fallback to regular AudioContext (but it requires user gesture)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n return typeof AudioContextClass === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Browser Detection Utilities\n * Based on FingerprintJS browser detection patterns\n * Uses feature detection instead of user-agent parsing for reliability\n */\n\n/**\n * Detects if the browser is WebKit-based (Safari, mobile Safari)\n */\nexport function isWebKit(): boolean {\n try {\n return (\n \"WebKitAppearance\" in document.documentElement.style ||\n \"webkitRequestFileSystem\" in window ||\n \"webkitResolveLocalFileSystemURL\" in window ||\n Boolean((window as any).safari)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is running on Android\n */\nexport function isAndroid(): boolean {\n try {\n return (\n \"ontouchstart\" in window &&\n (\"orientation\" in window || \"onorientationchange\" in window) &&\n /android/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Brave\n * Brave masquerades as Chrome but has specific APIs\n */\nexport function isBrave(): boolean {\n try {\n // Brave has navigator.brave API (most reliable method)\n if (\"brave\" in navigator && (navigator as any).brave) {\n return true;\n }\n\n // Secondary check: Brave blocks certain APIs that Chrome doesn't\n // Brave has specific user agent string patterns (less reliable)\n const ua = navigator.userAgent;\n if (ua.includes(\"Brave\")) {\n return true;\n }\n\n // Brave detection through missing APIs that Chrome has\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n !(window as any).chrome.webstore &&\n !(window as any).navigator.getBattery && // Brave removes some APIs for privacy\n /Chrome/.test(ua)\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Arc\n * Arc browser is Chromium-based but has unique characteristics\n */\nexport function isArc(): boolean {\n try {\n const ua = navigator.userAgent;\n\n // Arc specific detection\n if (ua.includes(\"Arc/\")) {\n return true;\n }\n\n // Arc may have specific window properties\n if ((window as any).arc || (window as any).Arc) {\n return true;\n }\n\n // Arc modifies some Chrome APIs\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n /Chrome/.test(ua) &&\n // Arc specific user agent patterns or missing features\n (ua.includes(\"ArcBrowser\") || window.location.protocol === \"arc:\")\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Opera (modern Chromium-based)\n */\nexport function isOpera(): boolean {\n try {\n // Opera has specific properties\n if ((window as any).opr || (window as any).opera) {\n return true;\n }\n\n const ua = navigator.userAgent;\n if (ua.includes(\"OPR/\") || ua.includes(\"Opera/\")) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Vivaldi\n */\nexport function isVivaldi(): boolean {\n try {\n const ua = navigator.userAgent;\n if (ua.includes(\"Vivaldi/\")) {\n return true;\n }\n\n // Vivaldi has specific window properties\n if ((window as any).vivaldi) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Samsung Internet\n */\nexport function isSamsungInternet(): boolean {\n try {\n const ua = navigator.userAgent;\n return ua.includes(\"SamsungBrowser/\") || ua.includes(\"Samsung Internet\");\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Chrome/Chromium-based (pure Chrome, not derivatives)\n */\nexport function isChrome(): boolean {\n try {\n // First, exclude known Chromium derivatives\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isEdge() ||\n isSamsungInternet()\n ) {\n return false;\n }\n\n return Boolean(\n (window as any).chrome &&\n ((window as any).chrome.webstore || (window as any).chrome.runtime) &&\n /Chrome/.test(navigator.userAgent) &&\n !/Edg|OPR|Opera|Vivaldi|SamsungBrowser|Arc|Brave/.test(\n navigator.userAgent\n )\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Firefox\n */\nexport function isFirefox(): boolean {\n try {\n return (\n \"InstallTrigger\" in window ||\n \"mozInnerScreenX\" in window ||\n \"mozPaintCount\" in window ||\n Boolean((navigator as any).mozApps)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Edge (legacy or Chromium)\n */\nexport function isEdge(): boolean {\n try {\n return (\n \"msCredentials\" in navigator ||\n Boolean((window as any).StyleMedia) ||\n (isChrome() && /edg/i.test(navigator.userAgent))\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Safari (not just WebKit)\n */\nexport function isSafari(): boolean {\n try {\n return (\n isWebKit() &&\n !isChrome() &&\n !isEdge() &&\n Boolean((window as any).safari) &&\n /safari/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser supports specific APIs safely\n */\nexport function supportsAPI(apiName: string): boolean {\n try {\n const parts = apiName.split(\".\");\n let obj: any = window;\n\n for (const part of parts) {\n if (!(part in obj)) {\n return false;\n }\n obj = obj[part];\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is in a secure context\n */\nexport function isSecureContext(): boolean {\n try {\n return window.isSecureContext || location.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is likely in private/incognito mode\n * This is a best-effort detection and not 100% reliable\n */\nexport function isLikelyPrivateMode(): boolean {\n try {\n // Quick checks for obvious private mode indicators\n if (\"webkitTemporaryStorage\" in navigator) {\n return false; // Likely not private\n }\n\n // Check for reduced storage quotas (common in private mode)\n if (navigator.storage && navigator.storage.estimate) {\n navigator.storage.estimate().then((estimate) => {\n const quota = estimate.quota || 0;\n return quota < 1024 * 1024 * 100; // Less than 100MB likely indicates private mode\n });\n }\n\n return false; // Default to not private if we can't determine\n } catch {\n return false;\n }\n}\n\n/**\n * Gets the exact browser name with proper Chromium-based browser detection\n */\nexport function getBrowserName(): string {\n try {\n // Check specific Chromium-based browsers first (order matters!)\n if (isBrave()) return \"Brave\";\n if (isArc()) return \"Arc\";\n if (isOpera()) return \"Opera\";\n if (isVivaldi()) return \"Vivaldi\";\n if (isSamsungInternet()) return \"Samsung Internet\";\n if (isEdge()) return \"Edge\";\n\n // Check non-Chromium browsers\n if (isFirefox()) return \"Firefox\";\n if (isSafari()) return \"Safari\";\n\n // Finally check pure Chrome (after excluding derivatives)\n if (isChrome()) return \"Chrome\";\n\n // Fallback: try to parse from user agent\n const ua = navigator.userAgent;\n if (/Firefox/i.test(ua) && !isChrome()) return \"Firefox\";\n if (/Safari/i.test(ua) && !isChrome()) return \"Safari\";\n if (/Chrome/i.test(ua)) return \"Chrome\"; // Last resort fallback\n\n return \"Unknown\";\n } catch {\n return \"Unknown\";\n }\n}\n\n/**\n * Gets browser engine name for debugging\n */\nexport function getBrowserEngine(): string {\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isSamsungInternet() ||\n isChrome()\n )\n return \"Blink\";\n if (isEdge()) return \"EdgeHTML/Blink\";\n if (isFirefox()) return \"Gecko\";\n if (isWebKit() || isSafari()) return \"WebKit\";\n return \"Unknown\";\n}\n\n/**\n * Gets detailed browser information with accurate Chromium-based detection\n */\nexport function getBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n const name = getBrowserName();\n const engine = getBrowserEngine();\n\n const chromiumBased = [\n \"Brave\",\n \"Arc\",\n \"Opera\",\n \"Vivaldi\",\n \"Samsung Internet\",\n \"Edge\",\n \"Chrome\",\n ].includes(name);\n\n // Browser family for fingerprinting stability\n let family = name.toLowerCase();\n if (chromiumBased && name !== \"Chrome\") {\n family = `${name.toLowerCase()}-chromium`; // e.g., \"brave-chromium\"\n }\n\n return {\n name,\n engine,\n isChromiumBased: chromiumBased,\n family,\n };\n}\n\n/**\n * Checks if the current environment supports DOM manipulation\n */\nexport function supportsDOMManipulation(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the current environment supports media queries\n */\nexport function supportsMediaQueries(): boolean {\n try {\n return (\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if WebGL is likely to be available and stable\n */\nexport function supportsWebGL(): boolean {\n try {\n if (!supportsDOMManipulation()) return false;\n\n const canvas = document.createElement(\"canvas\");\n const gl =\n canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\");\n\n if (!gl) return false;\n\n // Quick stability check\n const webglContext = gl as WebGLRenderingContext;\n const renderer = webglContext.getParameter(webglContext.RENDERER);\n const isSupported = Boolean(renderer && typeof renderer === \"string\");\n\n // Cleanup context to avoid \"Too many active WebGL contexts\" warning\n const ext = webglContext.getExtension(\"WEBGL_lose_context\");\n if (ext) {\n ext.loseContext();\n }\n\n return isSupported;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if audio context is available and not suspended\n */\nexport function supportsAudioContext(): boolean {\n try {\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) return false;\n\n // Don't create context here, just check availability\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Comprehensive browser capability check\n */\nexport interface BrowserCapabilities {\n engine: string;\n supportsDOM: boolean;\n supportsMediaQueries: boolean;\n supportsWebGL: boolean;\n supportsAudio: boolean;\n isSecure: boolean;\n isPrivateMode: boolean;\n canRunDOMBlockers: boolean;\n canRunAccessibility: boolean;\n canRunBrowserAPIs: boolean;\n}\n\nexport function getBrowserCapabilities(): BrowserCapabilities {\n const supportsDOM = supportsDOMManipulation();\n const supportsMedia = supportsMediaQueries();\n\n return {\n engine: getBrowserEngine(),\n supportsDOM,\n supportsMediaQueries: supportsMedia,\n supportsWebGL: supportsWebGL(),\n supportsAudio: supportsAudioContext(),\n isSecure: isSecureContext(),\n isPrivateMode: isLikelyPrivateMode(),\n // DOM blockers work best on WebKit and Android\n canRunDOMBlockers: (isWebKit() || isAndroid()) && supportsDOM,\n // Accessibility requires media queries\n canRunAccessibility: supportsMedia,\n // Browser APIs need secure context for many features\n canRunBrowserAPIs: supportsDOM && typeof navigator !== \"undefined\",\n };\n}\n","/**\n * Browser and System Information Fingerprinting\n * Based on FingerprintJS browser component with enhanced detection\n */\n\nimport type { FingerprintComponent, BrowserFingerprint } from '../../types/fingerprint';\nimport { getBrowserInfo } from '../../utils/browser';\n\n/**\n * Get touch support information\n */\nfunction getTouchSupport(): { maxTouchPoints: number; touchEvent: boolean; touchStart: boolean } {\n try {\n let maxTouchPoints = 0;\n let touchEvent = false;\n let touchStart = false;\n \n // Check maxTouchPoints\n if ('maxTouchPoints' in navigator) {\n maxTouchPoints = navigator.maxTouchPoints;\n } else if ('msMaxTouchPoints' in navigator) {\n maxTouchPoints = (navigator as any).msMaxTouchPoints;\n }\n \n // Check touch events\n try {\n touchEvent = 'TouchEvent' in window;\n } catch {\n touchEvent = 'ontouchstart' in window;\n }\n \n // Check touch start\n touchStart = 'ontouchstart' in window;\n \n return { maxTouchPoints, touchEvent, touchStart };\n } catch {\n return { maxTouchPoints: 0, touchEvent: false, touchStart: false };\n }\n}\n\n/**\n * Get plugin information (mostly for legacy browser detection)\n */\nfunction getPluginInfo(): { length: number; names: string[] } {\n try {\n if (!navigator.plugins) {\n return { length: 0, names: [] };\n }\n \n const plugins = Array.from(navigator.plugins);\n const names = plugins\n .map(plugin => plugin.name)\n .filter(name => name)\n .sort();\n \n return {\n length: navigator.plugins.length,\n names: names.slice(0, 10) // Limit to first 10 to avoid huge fingerprints\n };\n } catch {\n return { length: 0, names: [] };\n }\n}\n\n/**\n * Get language and locale information\n */\nfunction getLanguageInfo(): { language: string; languages: string[] } {\n try {\n const language = navigator.language || '';\n let languages: string[] = [];\n \n if (navigator.languages) {\n languages = Array.from(navigator.languages);\n } else if (navigator.language) {\n languages = [navigator.language];\n }\n \n // Add fallback language properties\n const additionalLanguages = [\n (navigator as any).userLanguage,\n (navigator as any).browserLanguage,\n (navigator as any).systemLanguage\n ].filter(Boolean);\n \n languages = [...new Set([...languages, ...additionalLanguages])];\n \n return { language, languages };\n } catch {\n return { language: '', languages: [] };\n }\n}\n\n/**\n * Get timezone information\n */\nfunction getTimezoneInfo(): { timezone: string; timezoneOffset: number } {\n try {\n let timezone = '';\n \n // Modern API\n if (Intl && Intl.DateTimeFormat) {\n try {\n timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n // Fallback\n }\n }\n \n // Fallback: use timezone offset (STABLE - use standard time offset to avoid DST changes)\n if (!timezone) {\n // Use January date to get standard time offset (avoiding DST variations)\n const januaryDate = new Date(2024, 0, 1); // January 1st\n const offset = januaryDate.getTimezoneOffset();\n const sign = offset > 0 ? '-' : '+';\n const hours = Math.floor(Math.abs(offset) / 60);\n const minutes = Math.abs(offset) % 60;\n timezone = `UTC${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n }\n \n // Use January date for stable timezone offset (avoiding DST fluctuations)\n const timezoneOffset = new Date(2024, 0, 1).getTimezoneOffset();\n \n return { timezone, timezoneOffset };\n } catch {\n return { timezone: '', timezoneOffset: 0 };\n }\n}\n\n/**\n * Get hardware information\n */\nfunction getHardwareInfo(): { hardwareConcurrency: number; deviceMemory?: number } {\n try {\n const hardwareConcurrency = navigator.hardwareConcurrency || 0;\n \n // Device memory (Chrome-specific)\n let deviceMemory: number | undefined;\n if ('deviceMemory' in navigator) {\n deviceMemory = (navigator as any).deviceMemory;\n }\n \n const result: { hardwareConcurrency: number; deviceMemory?: number } = { hardwareConcurrency };\n if (deviceMemory !== undefined) {\n result.deviceMemory = deviceMemory;\n }\n return result;\n } catch {\n return { hardwareConcurrency: 0 };\n }\n}\n\n/**\n * Get platform information with enhanced detection\n */\nfunction getPlatformInfo(): { platform: string; userAgent: string } {\n try {\n const platform = navigator.platform || '';\n const userAgent = navigator.userAgent || '';\n \n return { platform, userAgent };\n } catch {\n return { platform: '', userAgent: '' };\n }\n}\n\n/**\n * Get precise browser information with Chromium-based browser detection\n */\nfunction getEnhancedBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n try {\n return getBrowserInfo();\n } catch {\n // Fallback if detection fails\n return {\n name: 'Unknown',\n engine: 'Unknown',\n isChromiumBased: false,\n family: 'unknown'\n };\n }\n}\n\n/**\n * Get browser capabilities\n */\nfunction getBrowserCapabilities(): { cookieEnabled: boolean; doNotTrack: string | null } {\n try {\n const cookieEnabled = navigator.cookieEnabled !== false;\n \n // Do Not Track\n let doNotTrack: string | null = null;\n if ('doNotTrack' in navigator) {\n doNotTrack = navigator.doNotTrack;\n } else if ('msDoNotTrack' in navigator) {\n doNotTrack = (navigator as any).msDoNotTrack;\n } else if ('mozDoNotTrack' in window) {\n doNotTrack = (window as any).mozDoNotTrack;\n }\n \n return { cookieEnabled, doNotTrack };\n } catch {\n return { cookieEnabled: true, doNotTrack: null };\n }\n}\n\n/**\n * Generate browser fingerprint\n */\nexport async function getBrowserFingerprint(): Promise<FingerprintComponent<BrowserFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Collect all browser information\n const languageInfo = getLanguageInfo();\n const timezoneInfo = getTimezoneInfo();\n const platformInfo = getPlatformInfo();\n const hardwareInfo = getHardwareInfo();\n const capabilities = getBrowserCapabilities();\n const pluginInfo = getPluginInfo();\n const touchSupport = getTouchSupport();\n const enhancedBrowserInfo = getEnhancedBrowserInfo();\n \n const endTime = performance.now();\n \n const result: BrowserFingerprint = {\n // Language and locale\n language: languageInfo.language,\n languages: languageInfo.languages,\n \n // Timezone\n timezone: timezoneInfo.timezone,\n timezoneOffset: timezoneInfo.timezoneOffset,\n \n // Platform information\n platform: platformInfo.platform,\n userAgent: platformInfo.userAgent,\n \n // Enhanced browser identification (solves Chromium masquerading!)\n browserInfo: enhancedBrowserInfo,\n \n // Hardware information\n hardwareConcurrency: hardwareInfo.hardwareConcurrency,\n \n // Browser capabilities\n cookieEnabled: capabilities.cookieEnabled,\n doNotTrack: capabilities.doNotTrack,\n \n // Plugin information\n plugins: pluginInfo,\n \n // Touch support\n touchSupport\n };\n \n // Add optional properties conditionally\n if (hardwareInfo.deviceMemory !== undefined) {\n result.deviceMemory = hardwareInfo.deviceMemory;\n }\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n language: '',\n languages: [],\n timezone: '',\n timezoneOffset: 0,\n platform: '',\n userAgent: '',\n hardwareConcurrency: 0,\n cookieEnabled: true,\n doNotTrack: null,\n plugins: { length: 0, names: [] },\n touchSupport: { maxTouchPoints: 0, touchEvent: false, touchStart: false }\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Browser fingerprinting failed'\n };\n }\n}\n\n/**\n * Check if browser fingerprinting is available\n */\nexport function isBrowserFingerprintingAvailable(): boolean {\n try {\n return typeof navigator === 'object' && navigator !== null;\n } catch {\n return false;\n }\n}","/**\n * Canvas Fingerprinting\n * Based on FingerprintJS canvas component with incognito detection\n */\n\nimport type {\n CanvasFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Text to render for canvas fingerprinting with maximum differentiation\n */\nconst CANVAS_TEXTS = [\n \"Zap Canvas 🎨🔒2024\",\n \"Żółć gęślą jaźń €$¢£¥\",\n \"αβγδεζηθικλμνξο\",\n \"中文测试字体渲染\",\n \"🌟🎯🚀💎🌊🎨\",\n];\n\n/**\n * Enhanced geometric shapes for canvas fingerprinting with sub-pixel precision\n */\nfunction drawAdvancedGeometry(ctx: CanvasRenderingContext2D): void {\n // Enable high-quality rendering for sub-pixel differences\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n // Complex gradient with multiple stops\n const radialGradient = ctx.createRadialGradient(75, 75, 0, 75, 75, 50);\n radialGradient.addColorStop(0, \"rgba(255, 0, 0, 0.8)\");\n radialGradient.addColorStop(0.3, \"rgba(0, 255, 0, 0.6)\");\n radialGradient.addColorStop(0.7, \"rgba(0, 0, 255, 0.4)\");\n radialGradient.addColorStop(1, \"rgba(255, 255, 0, 0.2)\");\n\n ctx.fillStyle = radialGradient;\n ctx.fillRect(10, 10, 130, 100);\n\n // Sub-pixel positioned shapes for GPU/anti-aliasing differentiation\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\n ctx.fillRect(15.5, 15.3, 49.7, 49.2);\n\n ctx.fillStyle = \"#f60\";\n ctx.fillRect(70.3, 10.7, 50.1, 50.9);\n\n // Complex bezier curves that stress different rendering engines\n ctx.beginPath();\n ctx.moveTo(25.2, 120.1);\n ctx.bezierCurveTo(25.2, 120.1, 75.8, 90.3, 125.5, 120.7);\n ctx.bezierCurveTo(125.5, 120.7, 90.1, 150.2, 60.8, 140.9);\n ctx.closePath();\n ctx.fillStyle = \"rgba(200, 100, 50, 0.6)\";\n ctx.fill();\n\n // Overlapping circles with complex blending\n ctx.globalCompositeOperation = \"multiply\";\n\n ctx.beginPath();\n ctx.arc(50.7, 80.3, 20.1, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(255, 0, 100, 0.5)\";\n ctx.fill();\n\n ctx.beginPath();\n ctx.arc(70.3, 80.7, 20.9, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(0, 255, 100, 0.5)\";\n ctx.fill();\n\n ctx.globalCompositeOperation = \"source-over\";\n\n // Thin lines to test anti-aliasing\n ctx.strokeStyle = \"rgba(50, 50, 50, 0.8)\";\n ctx.lineWidth = 0.5;\n ctx.setLineDash([2.3, 1.7]);\n\n for (let i = 0; i < 10; i++) {\n ctx.beginPath();\n ctx.moveTo(10 + i * 13.7, 160);\n ctx.lineTo(50 + i * 11.3, 200);\n ctx.stroke();\n }\n\n // Reset line dash\n ctx.setLineDash([]);\n\n // Pattern with complex repeating elements\n const patternCanvas = document.createElement(\"canvas\");\n patternCanvas.width = 20;\n patternCanvas.height = 20;\n const patternCtx = patternCanvas.getContext(\"2d\");\n\n if (patternCtx) {\n patternCtx.fillStyle = \"rgba(150, 75, 200, 0.3)\";\n patternCtx.fillRect(0, 0, 10, 10);\n patternCtx.fillRect(10, 10, 10, 10);\n\n const pattern = ctx.createPattern(patternCanvas, \"repeat\");\n if (pattern) {\n ctx.fillStyle = pattern;\n ctx.fillRect(150, 120, 80, 60);\n }\n }\n\n // Shadow effects for additional GPU differentiation\n ctx.shadowColor = \"rgba(0, 0, 0, 0.5)\";\n ctx.shadowBlur = 3.2;\n ctx.shadowOffsetX = 2.1;\n ctx.shadowOffsetY = 2.7;\n\n ctx.fillStyle = \"rgba(100, 200, 150, 0.8)\";\n ctx.fillRect(160, 30, 60, 40);\n\n // Reset shadow\n ctx.shadowColor = \"transparent\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n}\n\n/**\n * Draw multiple text samples with different fonts and effects for maximum differentiation\n */\nfunction drawAdvancedText(ctx: CanvasRenderingContext2D): void {\n const fonts = [\n \"14px Arial, sans-serif\",\n '13px \"Times New Roman\", serif',\n \"12px Georgia, serif\",\n \"15px Helvetica, Arial, sans-serif\",\n '11px \"Courier New\", monospace',\n \"13px Verdana, sans-serif\",\n \"16px Impact, fantasy\",\n '12px \"Comic Sans MS\", cursive',\n ];\n\n const colors = [\n \"#000\",\n \"#333\",\n \"#666\",\n \"#999\",\n \"rgba(255, 0, 0, 0.8)\",\n \"rgba(0, 255, 0, 0.7)\",\n \"rgba(0, 0, 255, 0.6)\",\n \"rgba(128, 64, 192, 0.9)\",\n ];\n\n // Test different text baselines and alignments\n const baselines: CanvasTextBaseline[] = [\n \"top\",\n \"hanging\",\n \"middle\",\n \"alphabetic\",\n \"bottom\",\n ];\n const alignments: CanvasTextAlign[] = [\"left\", \"center\", \"right\"];\n\n let y = 250;\n\n CANVAS_TEXTS.forEach((text, textIndex) => {\n fonts.forEach((font, fontIndex) => {\n const colorIndex = (textIndex + fontIndex) % colors.length;\n const baselineIndex = fontIndex % baselines.length;\n const alignIndex = fontIndex % alignments.length;\n\n ctx.font = font;\n ctx.fillStyle = colors[colorIndex] || colors[0] || \"#000\";\n ctx.textBaseline = baselines[baselineIndex] || \"top\";\n ctx.textAlign = alignments[alignIndex] || \"left\";\n\n // Sub-pixel positioning for enhanced differentiation\n const x = 10 + ((fontIndex * 0.7) % 200);\n const yPos = y + ((fontIndex * 18.3) % 100);\n\n ctx.fillText(text, x, yPos);\n\n // Add stroke text for additional GPU stress testing\n if (fontIndex % 2 === 0) {\n ctx.strokeStyle = `rgba(${100 + fontIndex * 20}, ${50 + fontIndex * 15}, ${150 + fontIndex * 10}, 0.5)`;\n ctx.lineWidth = 0.3;\n ctx.strokeText(text, x + 0.5, yPos + 0.5);\n }\n });\n y += 120;\n });\n\n // Test text with transformations that stress different rendering engines\n ctx.save();\n ctx.translate(100, 400);\n ctx.rotate(Math.PI / 6);\n ctx.scale(1.2, 0.8);\n ctx.font = \"italic 14px Arial\";\n ctx.fillStyle = \"rgba(200, 100, 50, 0.8)\";\n ctx.fillText(\"Transformed & Rotated Text\", 0, 0);\n ctx.restore();\n\n // Test very small and very large text\n ctx.font = \"6px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(\"Tiny text rendering test\", 10, 500);\n\n ctx.font = \"32px Arial\";\n ctx.fillStyle = \"rgba(255, 0, 0, 0.5)\";\n ctx.fillText(\"Large\", 10, 540);\n\n // Reset text properties\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"top\";\n}\n\n/**\n * Analyze sub-pixel differences for enhanced GPU/anti-aliasing detection\n */\nfunction analyzeSubPixels(\n ctx: CanvasRenderingContext2D,\n canvas: HTMLCanvasElement\n): string {\n try {\n // Create test pattern for sub-pixel analysis\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw shapes at sub-pixel coordinates to stress anti-aliasing\n ctx.fillStyle = \"rgb(100, 150, 200)\";\n ctx.fillRect(10.3, 10.7, 20.1, 20.9);\n\n ctx.strokeStyle = \"rgb(200, 100, 50)\";\n ctx.lineWidth = 1.3;\n ctx.beginPath();\n ctx.moveTo(15.2, 35.8);\n ctx.lineTo(25.7, 45.1);\n ctx.stroke();\n\n // Get pixel data for analysis\n const imageData = ctx.getImageData(10, 10, 30, 40);\n const pixels = imageData.data;\n\n // Calculate sub-pixel characteristics with enhanced stability\n let redSum = 0,\n greenSum = 0,\n blueSum = 0;\n let edgeVariance = 0;\n let validPixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const a = pixels[i + 3] || 0;\n\n // Only process non-transparent pixels for stability\n if (a > 25) { // Higher threshold than before\n redSum += r;\n greenSum += g;\n blueSum += b;\n validPixels++;\n\n // Calculate edge variance with larger step for stability\n if (i >= 16) { // Skip more pixels for stability\n const prevR = pixels[i - 16] || 0;\n const diff = Math.abs(r - prevR);\n // Only count significant differences to reduce noise\n if (diff >= 8) { // Higher threshold\n edgeVariance += diff;\n }\n }\n }\n }\n\n if (validPixels === 0) {\n return \"no-valid-pixels\";\n }\n\n // Round to nearest 10 for maximum stability\n const avgRed = Math.round((redSum / validPixels) / 10) * 10;\n const avgGreen = Math.round((greenSum / validPixels) / 10) * 10;\n const avgBlue = Math.round((blueSum / validPixels) / 10) * 10;\n const avgVariance = Math.round((edgeVariance / validPixels) / 10) * 10;\n\n return `${avgRed}-${avgGreen}-${avgBlue}-${avgVariance}`;\n } catch (error) {\n return \"subpixel-error\";\n }\n}\n\n/**\n * Detect potential incognito mode and canvas blocking through multiple methods\n */\nfunction detectAdvancedInconsistencies(\n textHash: string,\n geometryHash: string,\n subPixelData: string,\n ctx: CanvasRenderingContext2D\n): { isInconsistent: boolean; confidence: number; reasons: string[] } {\n const reasons: string[] = [];\n let suspiciousSignals = 0;\n\n try {\n // Test 1: Check if getImageData works consistently\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (!imageData || imageData.data.length === 0) {\n reasons.push(\"getImageData-blocked\");\n suspiciousSignals += 3;\n }\n\n // Test 2: Check hash lengths (blocked canvas often returns default values)\n if (textHash.length < 8 || geometryHash.length < 8) {\n reasons.push(\"short-hash\");\n suspiciousSignals += 2;\n }\n\n // Test 3: Check for known blocked patterns\n const knownBlockedHashes = [\n \"error\",\n \"blocked\",\n \"disabled\",\n \"00000000\",\n \"ffffffff\",\n \"12345678\",\n ];\n\n if (\n knownBlockedHashes.includes(textHash) ||\n knownBlockedHashes.includes(geometryHash)\n ) {\n reasons.push(\"known-blocked-hash\");\n suspiciousSignals += 3;\n }\n\n // Test 4: Sub-pixel analysis indicates blocking\n if (subPixelData === \"subpixel-error\" || subPixelData.includes(\"0-0-0\")) {\n reasons.push(\"subpixel-anomaly\");\n suspiciousSignals += 2;\n }\n\n // Test 5: Same hash for different operations (indicates fake canvas)\n if (textHash === geometryHash && textHash !== \"error\") {\n reasons.push(\"identical-hashes\");\n suspiciousSignals += 2;\n }\n\n // Test 6: toDataURL performance (some privacy tools slow it down)\n const canvas = document.createElement(\"canvas\");\n canvas.width = 10;\n canvas.height = 10;\n const testCtx = canvas.getContext(\"2d\");\n\n if (testCtx) {\n const start = performance.now();\n testCtx.fillStyle = \"red\";\n testCtx.fillRect(0, 0, 10, 10);\n canvas.toDataURL();\n const duration = performance.now() - start;\n\n // Suspiciously slow canvas operations\n if (duration > 50) {\n reasons.push(\"slow-canvas\");\n suspiciousSignals += 1;\n }\n }\n\n const confidence = Math.min(suspiciousSignals / 5, 1); // Normalize to 0-1\n const isInconsistent = suspiciousSignals >= 2; // Threshold for inconsistency\n\n return { isInconsistent, confidence, reasons };\n } catch (error) {\n return {\n isInconsistent: true,\n confidence: 1,\n reasons: [\"detection-error\"],\n };\n }\n}\n\n/**\n * Generate enhanced canvas fingerprint with multiple primitives and sub-pixel analysis\n */\nexport async function getCanvasFingerprint(): Promise<\n FingerprintComponent<CanvasFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Create larger canvas for more detailed fingerprinting\n const canvas = document.createElement(\"canvas\");\n canvas.width = 300;\n canvas.height = 600;\n\n const ctx = canvas.getContext(\"2d\", {\n alpha: true,\n desynchronized: false,\n colorSpace: \"srgb\",\n willReadFrequently: true,\n });\n\n if (!ctx) {\n throw new Error(\"Canvas 2D context not available\");\n }\n\n // Test canvas winding (different behavior across browsers/GPUs)\n ctx.rect(0, 0, 10, 10);\n ctx.rect(2, 2, 6, 6);\n const isClockwise = ctx.isPointInPath(5, 5, \"evenodd\");\n\n // ENHANCED: Draw advanced text with multiple fonts and effects\n drawAdvancedText(ctx);\n const textData = canvas.toDataURL(\"image/png\");\n const textHash = hash32(textData);\n\n // Clear and draw advanced geometry\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n drawAdvancedGeometry(ctx);\n const geometryData = canvas.toDataURL(\"image/png\");\n const geometryHash = hash32(geometryData);\n\n // ENHANCED: Analyze sub-pixels for GPU/anti-aliasing differentiation\n const subPixelAnalysis = analyzeSubPixels(ctx, canvas);\n\n // ENHANCED: Advanced inconsistency detection\n const inconsistencyAnalysis = detectAdvancedInconsistencies(\n textHash,\n geometryHash,\n subPixelAnalysis,\n ctx\n );\n\n // Create composite canvas with both text and geometry for additional hash\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw both text and geometry together\n drawAdvancedText(ctx);\n ctx.globalCompositeOperation = \"multiply\";\n drawAdvancedGeometry(ctx);\n ctx.globalCompositeOperation = \"source-over\";\n\n const compositeData = canvas.toDataURL(\"image/png\");\n const compositeHash = hash32(compositeData);\n\n const endTime = performance.now();\n\n const result: CanvasFingerprint = {\n text: textHash,\n geometry: geometryHash,\n winding: isClockwise,\n isInconsistent: inconsistencyAnalysis.isInconsistent,\n // NEW FIELDS\n subPixelAnalysis, // Sub-pixel characteristics for GPU differentiation\n compositeHash, // Combined text+geometry hash\n inconsistencyConfidence: inconsistencyAnalysis.confidence,\n blockingReasons: inconsistencyAnalysis.reasons,\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n text: \"error\",\n geometry: \"error\",\n winding: false,\n isInconsistent: true,\n subPixelAnalysis: \"error\",\n compositeHash: \"error\",\n inconsistencyConfidence: 1,\n blockingReasons: [\"canvas-error\"],\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Canvas fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if canvas fingerprinting is available\n */\nexport function isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n return ctx !== null && typeof ctx.fillText === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Font Detection Fingerprinting\n * Based on FingerprintJS font detection techniques\n */\n\nimport type { FingerprintComponent, FontFingerprint } from '../../types/fingerprint';\n\n/**\n * Font list for detection (commonly available system fonts)\n */\nconst FONT_LIST = [\n // Windows fonts\n 'Arial', 'Arial Black', 'Calibri', 'Cambria', 'Comic Sans MS', 'Consolas',\n 'Courier New', 'Georgia', 'Impact', 'Lucida Console', 'Lucida Sans Unicode',\n 'Microsoft Sans Serif', 'Palatino Linotype', 'Segoe UI', 'Tahoma', 'Times New Roman',\n 'Trebuchet MS', 'Verdana',\n \n // macOS fonts\n 'American Typewriter', 'Avenir', 'Baskerville', 'Big Caslon', 'Brush Script MT',\n 'Copperplate', 'Didot', 'Futura', 'Gill Sans', 'Helvetica', 'Helvetica Neue',\n 'Hoefler Text', 'Lucida Grande', 'Marker Felt', 'Optima', 'Papyrus',\n 'Phosphate', 'Rockwell', 'Savoye LET', 'SignPainter', 'Skia', 'Snell Roundhand',\n 'System Font', 'Zapfino',\n \n // Linux fonts\n 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif', 'Droid Sans', 'Droid Sans Mono',\n 'Droid Serif', 'Liberation Sans', 'Liberation Sans Narrow', 'Liberation Serif',\n 'Ubuntu', 'Ubuntu Mono',\n \n // Android fonts\n 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Droid Sans',\n 'Droid Sans Mono', 'Droid Serif',\n \n // iOS fonts\n 'Helvetica Neue', 'Arial', 'Helvetica', 'Courier New', 'Times New Roman',\n 'San Francisco', 'Avenir Next',\n \n // Common web fonts\n 'Open Sans', 'Lato', 'Montserrat', 'Source Sans Pro', 'Raleway', 'PT Sans',\n 'Lora', 'Playfair Display', 'Oswald', 'Slabo 27px', 'Fira Sans',\n \n // East Asian fonts\n 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Meiryo', 'MS Gothic', 'MS Mincho',\n 'SimSun', 'SimHei', 'Microsoft YaHei', 'Malgun Gothic', 'Apple SD Gothic Neo'\n];\n\n/**\n * Fallback fonts for measurement\n */\nconst FALLBACK_FONTS = ['monospace', 'sans-serif', 'serif'];\n\n/**\n * Test text for font measurement\n */\nconst TEST_TEXT = 'mmMwWLliI0O&1 ※';\n\n/**\n * Font measurement using canvas\n */\nfunction measureText(text: string, fontFamily: string): { width: number; height: number } {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n return { width: 0, height: 0 };\n }\n \n ctx.font = `12px ${fontFamily}`;\n const metrics = ctx.measureText(text);\n \n return {\n width: metrics.width,\n height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n };\n}\n\n/**\n * Font measurement using DOM (fallback method)\n */\nfunction measureTextDOM(text: string, fontFamily: string): { width: number; height: number } {\n const element = document.createElement('span');\n element.style.position = 'absolute';\n element.style.left = '-9999px';\n element.style.top = '-9999px';\n element.style.fontSize = '12px';\n element.style.fontFamily = fontFamily;\n element.style.whiteSpace = 'nowrap';\n element.textContent = text;\n \n document.body.appendChild(element);\n \n const rect = element.getBoundingClientRect();\n const result = {\n width: rect.width,\n height: rect.height\n };\n \n document.body.removeChild(element);\n \n return result;\n}\n\n/**\n * Detect if a font is available by comparing measurements\n */\nfunction isFontAvailable(fontName: string, method: 'canvas' | 'dom' = 'canvas'): boolean {\n const measureFunc = method === 'canvas' ? measureText : measureTextDOM;\n \n // Measure with fallback fonts first\n const fallbackMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, fallback)\n );\n \n // Measure with target font + fallback\n const targetMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, `${fontName}, ${fallback}`)\n );\n \n // Compare measurements - if font is available, measurements should differ\n for (let i = 0; i < fallbackMeasurements.length; i++) {\n const fallback = fallbackMeasurements[i];\n const target = targetMeasurements[i];\n \n if (fallback && target) {\n // Allow small tolerance for measurement differences\n const widthDiff = Math.abs(fallback.width - target.width);\n const heightDiff = Math.abs(fallback.height - target.height);\n \n if (widthDiff > 0.1 || heightDiff > 0.1) {\n return true; // Font likely available\n }\n }\n }\n \n return false;\n}\n\n/**\n * Advanced font detection with measurements\n */\nfunction detectFontsWithMeasurements(): { available: string[]; measurements: Record<string, { width: number; height: number }> } {\n const available: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FONT_LIST) {\n try {\n const measurement = measureText(TEST_TEXT, font);\n measurements[font] = measurement;\n \n if (isFontAvailable(font, 'canvas')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return { available, measurements };\n}\n\n/**\n * Basic font detection (faster but less detailed)\n */\nfunction detectFontsBasic(): string[] {\n const available: string[] = [];\n \n for (const font of FONT_LIST) {\n try {\n if (isFontAvailable(font, 'dom')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return available;\n}\n\n/**\n * Generate font fingerprint\n */\nexport async function getFontFingerprint(useAdvanced: boolean = true): Promise<FingerprintComponent<FontFingerprint>> {\n const startTime = performance.now();\n \n try {\n let result: FontFingerprint;\n \n if (useAdvanced && isCanvasAvailable()) {\n // Advanced detection with measurements\n const { available, measurements } = detectFontsWithMeasurements();\n result = {\n available: available.sort(),\n method: 'advanced',\n measurements\n };\n } else {\n // Basic detection\n const available = detectFontsBasic();\n result = {\n available: available.sort(),\n method: 'basic'\n };\n }\n \n const endTime = performance.now();\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n available: [],\n method: 'basic'\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Font detection failed'\n };\n }\n}\n\n/**\n * Check if canvas is available for font measurement\n */\nfunction isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n return ctx !== null && typeof ctx.measureText === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Check if font detection is available\n */\nexport function isFontDetectionAvailable(): boolean {\n try {\n // Check if we can create DOM elements for measurement\n const element = document.createElement('span');\n return element && typeof element.style === 'object';\n } catch {\n return false;\n }\n}","/**\n * Screen and Viewport Fingerprinting\n * Based on FingerprintJS screen components\n */\n\nimport type {\n FingerprintComponent,\n ScreenFingerprint,\n} from \"../../types/fingerprint\";\n\n/**\n * Get screen orientation information\n */\nfunction getScreenOrientation(): { angle: number; type: string } | undefined {\n try {\n // Modern API\n if (screen.orientation) {\n return {\n angle: screen.orientation.angle,\n type: screen.orientation.type,\n };\n }\n\n // Legacy API\n const orientation =\n (screen as any).mozOrientation ||\n (screen as any).msOrientation ||\n (screen as any).webkitOrientation;\n\n if (orientation !== undefined) {\n return {\n angle: orientation,\n type: \"unknown\",\n };\n }\n\n // Fallback: estimate from dimensions\n const isLandscape = screen.width > screen.height;\n return {\n angle: isLandscape ? 90 : 0,\n type: isLandscape ? \"landscape-primary\" : \"portrait-primary\",\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get device pixel ratio with fallbacks\n */\nfunction getPixelRatio(): number {\n try {\n return window.devicePixelRatio || 1;\n } catch {\n return 1;\n }\n}\n\n/**\n * Round dimensions to mitigate small variations (like macOS Dock appearing/disappearing)\n * Based on FingerprintJS stabilization technique\n */\nfunction roundDimension(value: number): number {\n // Round to nearest 10 to mitigate small variations\n // This handles cases like 1900x1440 -> 1900x1439 when Dock appears\n return Math.round(value / 10) * 10;\n}\n\n/**\n * Get screen frame with stabilization (rounded dimensions)\n * This is more stable than raw screen.availWidth/availHeight\n */\nfunction getScreenFrame(): { width: number; height: number } {\n try {\n // Check Safari 17+ privacy mode (always returns 0)\n const availWidth = screen.availWidth || 0;\n const availHeight = screen.availHeight || 0;\n\n if (availWidth === 0 && availHeight === 0) {\n // Safari private mode or unavailable, use screen dimensions\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n\n return {\n width: roundDimension(availWidth),\n height: roundDimension(availHeight),\n };\n } catch {\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n}\n\n/**\n * Get screen resolution (stable - doesn't change)\n * Screen resolution is consistent across sessions and orientations\n */\nfunction getScreenResolution(): { width: number; height: number } {\n try {\n return {\n width: screen.width || 0,\n height: screen.height || 0,\n };\n } catch {\n return { width: 0, height: 0 };\n }\n}\n\n/**\n * Get viewport dimensions with stabilization\n * Uses rounding to mitigate small variations from console, zoom, etc.\n */\nfunction getViewportDimensions(): { width: number; height: number } {\n try {\n // Use document.documentElement for more accurate measurements\n const element = document.documentElement;\n\n const width = Math.max(element.clientWidth || 0, window.innerWidth || 0);\n\n const height = Math.max(element.clientHeight || 0, window.innerHeight || 0);\n\n // Apply rounding to stabilize viewport (mitigates console/zoom changes)\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n } catch {\n const width = window.innerWidth || 0;\n const height = window.innerHeight || 0;\n\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n }\n}\n\n/**\n * Generate screen fingerprint with stabilization techniques\n * Based on FingerprintJS approach: uses rounding and consistent ordering\n */\nexport async function getScreenFingerprint(): Promise<\n FingerprintComponent<ScreenFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get screen resolution with consistent ordering (stable)\n const resolution = getScreenResolution();\n\n // Get color depth\n const colorDepth = screen.colorDepth || screen.pixelDepth || 0;\n\n // Get pixel ratio\n const pixelRatio = getPixelRatio();\n\n // Get screen frame (available space) with stabilization\n const screenFrame = getScreenFrame();\n\n // Get viewport dimensions with stabilization (rounded)\n const viewport = getViewportDimensions();\n\n // Get orientation\n const orientation = getScreenOrientation();\n\n const endTime = performance.now();\n\n const result: ScreenFingerprint = {\n // Screen resolution (stable - doesn't change)\n width: resolution.width,\n height: resolution.height,\n colorDepth,\n pixelRatio,\n\n // Screen frame (available space, stabilized with rounding)\n // Mitigates small variations like macOS Dock appearing/disappearing\n availableWidth: screenFrame.width,\n availableHeight: screenFrame.height,\n\n // Viewport dimensions (stabilized with rounding)\n // Mitigates variations from console open/closed, zoom changes, etc.\n viewportWidth: viewport.width,\n viewportHeight: viewport.height,\n };\n\n // Add optional properties conditionally\n if (orientation) {\n result.orientation = orientation;\n }\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n width: 0,\n height: 0,\n colorDepth: 0,\n pixelRatio: 1,\n viewportWidth: 0,\n viewportHeight: 0,\n availableWidth: 0,\n availableHeight: 0,\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Screen fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if screen fingerprinting is available\n */\nexport function isScreenAvailable(): boolean {\n try {\n return (\n typeof screen === \"object\" &&\n typeof screen.width === \"number\" &&\n typeof screen.height === \"number\"\n );\n } catch {\n return false;\n }\n}\n","/**\n * WebGL Context Caching Utility\n * Based on FingerprintJS WebGL optimization patterns\n * Prevents expensive WebGL context recreation\n */\n\ninterface WebGLContextCache {\n context: WebGLRenderingContext | null;\n canvas: HTMLCanvasElement | null;\n timestamp: number;\n isValid: boolean;\n usageCount: number;\n lastUsed: number;\n}\n\n// Global cache for WebGL context\nlet webglCache: WebGLContextCache | null = null;\n\n// Monitoring counters\nlet activeContextCount = 0;\nlet totalContextsCreated = 0;\n\n// Cache timeout (30 minutes) - increased from 5 minutes\nconst CACHE_TIMEOUT = 30 * 60 * 1000;\n\n// Maximum number of contexts to prevent memory leaks\nconst MAX_CONTEXTS = 8;\n\n/**\n * Gets or creates a cached WebGL context with intelligent reuse\n */\nexport function getCachedWebGLContext(): WebGLRenderingContext | null {\n try {\n // Use performance.now() for more stable timing measurements\n const now = performance.now();\n\n // Check if cache is valid and not expired\n if (webglCache && webglCache.isValid) {\n if (now - webglCache.timestamp < CACHE_TIMEOUT) {\n // Verify context is still valid\n if (webglCache.context && !webglCache.context.isContextLost()) {\n // Update usage statistics\n webglCache.usageCount++;\n webglCache.lastUsed = now;\n return webglCache.context;\n } else {\n // Context was lost, invalidate cache\n invalidateWebGLCache();\n }\n } else {\n // Cache expired, clean up old context\n invalidateWebGLCache();\n }\n }\n\n // Check if we're approaching the maximum context limit\n if (activeContextCount >= MAX_CONTEXTS) {\n console.warn('[WebGL Cache] Maximum context limit reached, reusing existing contexts');\n return null;\n }\n\n // Create new context\n const canvas = createWebGLCanvas();\n if (!canvas) {\n return null;\n }\n\n const context = getWebGLContext(canvas);\n if (!context) {\n return null;\n }\n\n // Update counters\n activeContextCount++;\n totalContextsCreated++;\n\n // Cache the context\n webglCache = {\n context,\n canvas,\n timestamp: now,\n isValid: true,\n usageCount: 1,\n lastUsed: now,\n };\n\n return context;\n } catch (error) {\n // Invalidate cache on error\n invalidateWebGLCache();\n return null;\n }\n}\n\n/**\n * Creates a WebGL canvas element\n */\nfunction createWebGLCanvas(): HTMLCanvasElement | null {\n try {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n \n // Set minimal size to reduce memory usage\n canvas.width = 1;\n canvas.height = 1;\n \n return canvas;\n } catch {\n return null;\n }\n}\n\n/**\n * Gets WebGL context from canvas with optimized settings for fingerprinting\n */\nfunction getWebGLContext(canvas: HTMLCanvasElement): WebGLRenderingContext | null {\n try {\n // Optimized context attributes for fingerprinting (minimal overhead)\n const contextAttributes: WebGLContextAttributes = {\n alpha: false,\n antialias: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false,\n failIfMajorPerformanceCaveat: true,\n powerPreference: 'default'\n };\n\n // Try standard WebGL first, then experimental\n const context = canvas.getContext('webgl', contextAttributes) || \n canvas.getContext('experimental-webgl', contextAttributes);\n \n return context as WebGLRenderingContext | null;\n } catch {\n return null;\n }\n}\n\n/**\n * Invalidates the WebGL cache with proper cleanup and monitoring\n */\nexport function invalidateWebGLCache(): void {\n if (webglCache) {\n try {\n // Properly dispose of WebGL context\n if (webglCache.context) {\n const ext = webglCache.context.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n }\n \n // Clean up canvas\n if (webglCache.canvas) {\n webglCache.canvas.width = 0;\n webglCache.canvas.height = 0;\n }\n \n // Update monitoring counters\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n } catch {\n // Ignore disposal errors but still decrement counter\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n }\n\n webglCache.isValid = false;\n webglCache = null;\n }\n}\n\n/**\n * Checks if WebGL context is still valid\n */\nexport function isWebGLContextValid(): boolean {\n if (!webglCache || !webglCache.context) {\n return false;\n }\n\n try {\n // Check if context is lost\n return !webglCache.context.isContextLost();\n } catch {\n return false;\n }\n}\n\n/**\n * Gets WebGL extensions with caching\n */\nexport function getCachedWebGLExtensions(): string[] {\n const context = getCachedWebGLContext();\n if (!context) {\n return [];\n }\n\n try {\n const extensions = context.getSupportedExtensions();\n return extensions ? Array.from(extensions).sort() : [];\n } catch {\n return [];\n }\n}\n\n/**\n * Gets WebGL parameters with caching\n */\nexport function getCachedWebGLParameters(): Record<string, any> {\n const context = getCachedWebGLContext();\n if (!context) {\n return {};\n }\n\n try {\n const parameters: Record<string, any> = {};\n \n // Safe parameter list that won't trigger console warnings\n const safeParameters = [\n 'VERSION',\n 'VENDOR',\n 'RENDERER',\n 'SHADING_LANGUAGE_VERSION',\n 'MAX_TEXTURE_SIZE',\n 'MAX_RENDERBUFFER_SIZE',\n 'MAX_VIEWPORT_DIMS',\n 'MAX_VERTEX_ATTRIBS',\n 'MAX_VERTEX_UNIFORM_VECTORS',\n 'MAX_FRAGMENT_UNIFORM_VECTORS',\n 'MAX_VARYING_VECTORS',\n ];\n\n for (const paramName of safeParameters) {\n try {\n const paramValue = (context as any)[paramName];\n if (paramValue !== undefined) {\n parameters[paramName] = context.getParameter(paramValue);\n }\n } catch {\n // Skip problematic parameters\n }\n }\n\n return parameters;\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL cache monitoring statistics\n */\nexport function getWebGLCacheStats(): {\n activeContexts: number;\n totalCreated: number;\n cacheHits: number;\n lastUsed: number | null;\n} {\n return {\n activeContexts: activeContextCount,\n totalCreated: totalContextsCreated,\n cacheHits: webglCache?.usageCount || 0,\n lastUsed: webglCache?.lastUsed || null,\n };\n}\n\n/**\n * Force cleanup all WebGL resources\n */\nexport function forceCleanupWebGL(): void {\n invalidateWebGLCache();\n activeContextCount = 0; // Reset counter\n}\n\n/**\n * Cleanup function to be called on page unload with better error handling\n */\nexport function cleanupWebGLCache(): void {\n try {\n invalidateWebGLCache();\n \n // Reset monitoring counters\n activeContextCount = 0;\n totalContextsCreated = 0;\n } catch (error) {\n console.warn('[WebGL Cache] Cleanup error:', error);\n }\n}\n\n// Enhanced auto-cleanup on page unload with better browser support\nif (typeof window !== 'undefined') {\n // Standard page unload events\n window.addEventListener('beforeunload', cleanupWebGLCache);\n window.addEventListener('pagehide', cleanupWebGLCache);\n window.addEventListener('unload', cleanupWebGLCache);\n \n // Visibility API for better cleanup on tab switch\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n // Optional: Clean up on tab switch (uncomment if needed)\n // cleanupWebGLCache();\n }\n });\n \n // Memory pressure cleanup (if supported)\n if ('memory' in performance && typeof (performance as any).memory.addEventListener === 'function') {\n try {\n (performance as any).memory.addEventListener('memorypressure', cleanupWebGLCache);\n } catch (e) {\n // Not all browsers support this\n }\n }\n}","/**\n * WebGL Fingerprinting\n * Based on FingerprintJS WebGL component for GPU and driver detection\n * Enhanced with context caching for performance\n */\n\nimport type { FingerprintComponent, WebGLFingerprint } from '../../types/fingerprint';\nimport { \n getCachedWebGLContext, \n getCachedWebGLExtensions, \n getCachedWebGLParameters,\n isWebGLContextValid \n} from '../../utils/webgl-cache';\n\n/**\n * WebGL parameter constants for fingerprinting\n */\nconst WEBGL_PARAMS = {\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n} as const;\n\n\n/**\n * Get WebGL extensions (cached)\n */\nfunction getWebGLExtensions(): string[] {\n try {\n return getCachedWebGLExtensions();\n } catch {\n return [];\n }\n}\n\n/**\n * Get WebGL parameters (cached)\n */\nfunction getWebGLParameters(): Record<string, any> {\n try {\n return getCachedWebGLParameters();\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL parameter value safely\n */\nfunction getWebGLParameter(gl: WebGLRenderingContext, param: number): any {\n try {\n return gl.getParameter(param);\n } catch {\n return null;\n }\n}\n\n/**\n * Get shader precision information\n */\nfunction getShaderPrecision(gl: WebGLRenderingContext): { vertex: string; fragment: string } {\n const vertex: string[] = [];\n const fragment: string[] = [];\n \n try {\n const precisionTypes = [gl.LOW_FLOAT, gl.MEDIUM_FLOAT, gl.HIGH_FLOAT, gl.LOW_INT, gl.MEDIUM_INT, gl.HIGH_INT];\n const precisionNames = ['LOW_FLOAT', 'MEDIUM_FLOAT', 'HIGH_FLOAT', 'LOW_INT', 'MEDIUM_INT', 'HIGH_INT'];\n \n for (let i = 0; i < precisionTypes.length; i++) {\n const precisionType = precisionTypes[i];\n if (precisionType === undefined) continue;\n \n const vertexPrecision = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, precisionType);\n const fragmentPrecision = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, precisionType);\n \n if (vertexPrecision) {\n vertex.push(`${precisionNames[i]}:${vertexPrecision.precision},${vertexPrecision.rangeMin},${vertexPrecision.rangeMax}`);\n }\n \n if (fragmentPrecision) {\n fragment.push(`${precisionNames[i]}:${fragmentPrecision.precision},${fragmentPrecision.rangeMin},${fragmentPrecision.rangeMax}`);\n }\n }\n } catch {\n // Precision format not available\n }\n \n return {\n vertex: vertex.join(';'),\n fragment: fragment.join(';')\n };\n}\n\n/**\n * Collect WebGL parameters for fingerprinting\n */\nfunction collectWebGLParameters(gl: WebGLRenderingContext): Record<string, any> {\n const parameters: Record<string, any> = {};\n \n // Collect standard parameters\n Object.entries(WEBGL_PARAMS).forEach(([name, param]) => {\n const value = getWebGLParameter(gl, param);\n if (value !== null) {\n // Convert arrays to strings for consistent serialization\n parameters[name] = Array.isArray(value) ? value.join(',') : value;\n }\n });\n \n // Additional parameters that might be available\n const additionalParams = [\n 'UNMASKED_VENDOR_WEBGL',\n 'UNMASKED_RENDERER_WEBGL'\n ];\n \n additionalParams.forEach(paramName => {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const param = (debugInfo as any)[paramName];\n if (param !== undefined) {\n const value = gl.getParameter(param);\n if (value) {\n parameters[paramName] = value;\n }\n }\n }\n } catch {\n // Debug renderer info not available\n }\n });\n \n return parameters;\n}\n\n/**\n * Create and compile a shader\n */\nfunction createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n \n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n \n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n gl.deleteShader(shader);\n return null;\n }\n \n return shader;\n}\n\n/**\n * Create and link a shader program\n */\nfunction createProgram(gl: WebGLRenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader): WebGLProgram | null {\n const program = gl.createProgram();\n if (!program) return null;\n \n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n \n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return null;\n }\n \n return program;\n}\n\n/**\n * Render 3D scene to generate GPU-specific hash\n * Based on FingerprintJS methodology for maximum differentiation\n */\nfunction render3DScene(gl: WebGLRenderingContext): string {\n try {\n // Vertex shader with complex calculations for GPU differentiation\n const vertexShaderSource = `\n attribute vec2 a_position;\n attribute vec3 a_color;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex mathematical operations to differentiate GPUs\n float wave = sin(a_position.x * 10.0 + u_time) * 0.1;\n vec2 position = a_position + vec2(wave, cos(a_position.y * 8.0) * 0.1);\n \n // GPU-specific floating point calculations\n float precision = sin(position.x * 123.456) + cos(position.y * 789.012);\n position += vec2(precision * 0.001);\n \n gl_Position = vec4(position, 0.0, 1.0);\n v_color = a_color;\n }\n `;\n \n // Fragment shader with GPU-specific precision differences\n const fragmentShaderSource = `\n precision mediump float;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex color calculations that vary between GPU vendors\n vec3 color = v_color;\n color.r += sin(gl_FragCoord.x * 0.1 + u_time) * 0.1;\n color.g += cos(gl_FragCoord.y * 0.1 + u_time) * 0.1;\n color.b += sin((gl_FragCoord.x + gl_FragCoord.y) * 0.05) * 0.1;\n \n // GPU-specific precision in color calculations\n color = normalize(color) * length(v_color);\n \n gl_FragColor = vec4(color, 1.0);\n }\n `;\n \n // Create shaders\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);\n \n if (!vertexShader || !fragmentShader) {\n // Fallback to basic parameters hash if shader compilation fails\n return generateFallbackWebGLHash(gl);\n }\n \n // Create program\n const program = createProgram(gl, vertexShader, fragmentShader);\n if (!program) {\n // Fallback to basic parameters hash if program creation fails\n return generateFallbackWebGLHash(gl);\n }\n \n gl.useProgram(program);\n \n // Create complex geometry that differentiates GPU rendering\n const vertices = new Float32Array([\n // Triangle 1 (with colors)\n -0.8, -0.6, 1.0, 0.2, 0.3,\n 0.0, 0.8, 0.3, 1.0, 0.2,\n 0.8, -0.6, 0.2, 0.3, 1.0,\n // Triangle 2 (overlapping for blend complexity)\n -0.5, -0.2, 0.8, 0.9, 0.1,\n 0.3, 0.6, 0.1, 0.8, 0.9,\n 0.7, -0.3, 0.9, 0.1, 0.8,\n ]);\n \n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n \n // Set up attributes\n const positionLocation = gl.getAttribLocation(program, 'a_position');\n const colorLocation = gl.getAttribLocation(program, 'a_color');\n const timeLocation = gl.getUniformLocation(program, 'u_time');\n \n gl.enableVertexAttribArray(positionLocation);\n gl.enableVertexAttribArray(colorLocation);\n \n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 20, 0);\n gl.vertexAttribPointer(colorLocation, 3, gl.FLOAT, false, 20, 8);\n \n // Set time uniform to create animation-like effects\n gl.uniform1f(timeLocation, 1.23456789);\n \n // Enable blending for more complex GPU calculations\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n \n // Clear with specific color to affect background\n gl.clearColor(0.1, 0.2, 0.3, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n \n // Draw triangles\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n \n // Read pixels to generate hash\n const pixels = new Uint8Array(gl.canvas.width * gl.canvas.height * 4);\n gl.readPixels(0, 0, gl.canvas.width, gl.canvas.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n \n // Generate hash from rendered pixels\n let hash = 0;\n for (let i = 0; i < pixels.length; i += 4) {\n // Combine RGBA values with different weights (with null checks)\n const r = (pixels[i] ?? 0) * 1;\n const g = (pixels[i + 1] ?? 0) * 256;\n const b = (pixels[i + 2] ?? 0) * 65536;\n const a = (pixels[i + 3] ?? 0) * 16777216;\n const pixelValue = r + g + b + a;\n hash = (hash * 33 + pixelValue) >>> 0; // Use unsigned 32-bit arithmetic\n }\n \n // Cleanup\n gl.deleteProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n gl.deleteBuffer(buffer);\n \n return hash.toString(16);\n \n } catch (error) {\n // Fallback to basic parameters hash if rendering fails\n return generateFallbackWebGLHash(gl);\n }\n}\n\n/**\n * Generate fallback WebGL hash when rendering fails\n * Uses basic WebGL parameters to ensure consistent fingerprinting\n */\nfunction generateFallbackWebGLHash(gl: WebGLRenderingContext): string {\n try {\n // Collect basic but stable WebGL parameters\n const vendor = gl.getParameter(gl.VENDOR) || 'unknown';\n const renderer = gl.getParameter(gl.RENDERER) || 'unknown';\n const version = gl.getParameter(gl.VERSION) || 'unknown';\n const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) || 0;\n const maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS) || 0;\n const maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS) || [0, 0];\n \n // Combine parameters into string\n const combined = `${vendor}|${renderer}|${version}|${maxTextureSize}|${maxVertexAttribs}|${maxViewportDims}`;\n \n // Generate simple hash\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n \n return `fallback_${Math.abs(hash).toString(16)}`;\n } catch {\n return 'webgl_unavailable';\n }\n}\n\n/**\n * Get advanced WebGL capabilities for differentiation\n */\nfunction getAdvancedWebGLCapabilities(gl: WebGLRenderingContext): Record<string, any> {\n const capabilities: Record<string, any> = {};\n \n try {\n // GPU Memory information (if available)\n const memoryInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (memoryInfo) {\n capabilities.unmaskedVendor = gl.getParameter(memoryInfo.UNMASKED_VENDOR_WEBGL);\n capabilities.unmaskedRenderer = gl.getParameter(memoryInfo.UNMASKED_RENDERER_WEBGL);\n }\n \n // Texture capabilities\n capabilities.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n capabilities.maxCombinedTextureImageUnits = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n \n // Viewport and rendering capabilities\n capabilities.maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n capabilities.maxRenderbufferSize = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);\n \n // Vertex and fragment shader limits\n capabilities.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n capabilities.maxVertexUniformVectors = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n capabilities.maxFragmentUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n capabilities.maxVaryingVectors = gl.getParameter(gl.MAX_VARYING_VECTORS);\n \n // Antialiasing support\n capabilities.antialias = gl.getContextAttributes()?.antialias || false;\n \n // Floating point texture support\n const floatTextureExt = gl.getExtension('OES_texture_float');\n capabilities.floatTextures = !!floatTextureExt;\n \n // Half float texture support\n const halfFloatTextureExt = gl.getExtension('OES_texture_half_float');\n capabilities.halfFloatTextures = !!halfFloatTextureExt;\n \n // Compressed texture formats\n const compressedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);\n capabilities.compressedTextureFormats = Array.isArray(compressedFormats) ? compressedFormats.length : 0;\n \n // WebGL 2.0 specific features (if available)\n const isWebGL2 = gl instanceof WebGL2RenderingContext;\n capabilities.webgl2 = isWebGL2;\n \n if (isWebGL2) {\n const gl2 = gl as WebGL2RenderingContext;\n capabilities.maxColorAttachments = gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n capabilities.maxDrawBuffers = gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n capabilities.maxTexture3DSize = gl2.getParameter(gl2.MAX_3D_TEXTURE_SIZE);\n }\n \n // Line width range\n const lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);\n capabilities.lineWidthRange = Array.isArray(lineWidthRange) ? lineWidthRange.join(',') : '';\n \n // Point size range\n const pointSizeRange = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);\n capabilities.pointSizeRange = Array.isArray(pointSizeRange) ? pointSizeRange.join(',') : '';\n \n } catch (error) {\n // Capabilities detection failed\n }\n \n return capabilities;\n}\n\n/**\n * Generate WebGL fingerprint (enhanced with 3D rendering and advanced capabilities)\n */\nexport async function getWebGLFingerprint(): Promise<FingerprintComponent<WebGLFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Check if WebGL is available for this browser\n if (!isWebGLAvailable()) {\n throw new Error('WebGL not supported in this browser');\n }\n\n const gl = getCachedWebGLContext();\n if (!gl) {\n throw new Error('WebGL context not available');\n }\n\n // Verify context is still valid\n if (!isWebGLContextValid()) {\n throw new Error('WebGL context lost');\n }\n \n // Get basic WebGL information using cached parameters\n const cachedParams = getWebGLParameters();\n const vendor = cachedParams.VENDOR || 'unknown';\n const renderer = cachedParams.RENDERER || 'unknown';\n const version = cachedParams.VERSION || 'unknown';\n \n // ENHANCED: Get unmasked vendor/renderer with retry logic\n let unmaskedVendor = vendor;\n let unmaskedRenderer = renderer;\n \n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\n const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n \n if (vendor && vendor !== 'unknown') unmaskedVendor = vendor;\n if (renderer && renderer !== 'unknown') unmaskedRenderer = renderer;\n break; // Success, exit retry loop\n }\n } catch (error) {\n if (attempt === 2) {\n // Final attempt failed, use fallback\n break;\n }\n // Wait a bit before retry\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n }\n \n // Collect extensions (cached)\n const extensions = getWebGLExtensions();\n \n // Collect parameters (cached)\n const parameters = collectWebGLParameters(gl);\n \n // Get shader precision\n const shaderPrecision = getShaderPrecision(gl);\n \n // ENHANCED: Render 3D scene for GPU-specific hash\n const renderHash = render3DScene(gl);\n \n // ENHANCED: Get advanced capabilities\n const capabilities = getAdvancedWebGLCapabilities(gl);\n \n // ENHANCED: Create vendor/renderer hash for stable identification\n const vendorRendererHash = (() => {\n const vendorStr = unmaskedVendor || vendor || '';\n const rendererStr = unmaskedRenderer || renderer || '';\n const combined = `${vendorStr}|${rendererStr}`.toLowerCase();\n \n // Simple hash function for consistent results\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n return Math.abs(hash).toString(16);\n })();\n \n const endTime = performance.now();\n \n const result: WebGLFingerprint = {\n vendor: unmaskedVendor,\n renderer: unmaskedRenderer,\n version,\n extensions,\n parameters,\n shaderPrecision,\n renderHash, // NEW: GPU-specific 3D rendering hash\n capabilities, // NEW: Advanced WebGL capabilities\n vendorRendererHash, // NEW: Stable vendor/renderer identification\n contextAttributes: gl.getContextAttributes() || {} // NEW: Context configuration\n };\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n vendor: 'unknown',\n renderer: 'unknown',\n version: 'unknown',\n extensions: [],\n parameters: {},\n shaderPrecision: { vertex: '', fragment: '' },\n renderHash: '',\n capabilities: {},\n vendorRendererHash: '',\n contextAttributes: {}\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'WebGL fingerprinting failed'\n };\n }\n}\n\n/**\n * Singleton instance for WebGL availability check\n */\nlet webglAvailabilityCache: boolean | null = null;\n\n/**\n * Check if WebGL fingerprinting is available (with proper cleanup)\n */\nexport function isWebGLAvailable(): boolean {\n // Use cached result if available\n if (webglAvailabilityCache !== null) {\n return webglAvailabilityCache;\n }\n\n try {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n \n const gl = canvas.getContext('webgl', { \n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n }) || canvas.getContext('experimental-webgl', {\n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n });\n \n const isAvailable = gl !== null;\n \n // Proper cleanup to prevent context leak\n if (gl && 'getExtension' in gl) {\n try {\n const webglContext = gl as WebGLRenderingContext;\n const ext = webglContext.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n \n // Clean up canvas\n canvas.width = 0;\n canvas.height = 0;\n \n // Cache the result\n webglAvailabilityCache = isAvailable;\n return isAvailable;\n } catch {\n webglAvailabilityCache = false;\n return false;\n }\n}","/**\n * Enhanced Accessibility & Media Queries Detection Module\n * Based on FingerprintJS accessibility and preference detection with additional queries\n * \n * Detects comprehensive user accessibility preferences and display capabilities:\n * - Motion preferences (reduced motion, prefers animation)\n * - Color preferences (contrast, inverted colors, forced colors)\n * - Display capabilities (color gamut, HDR, monochrome)\n * - Transparency and visual effects preferences\n * - System-level accessibility settings\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\n/**\n * Error types for accessibility detection\n */\nexport const enum AccessibilityError {\n NotSupported = 'NOT_SUPPORTED',\n MediaQueriesUnavailable = 'MEDIA_QUERIES_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * Color Gamut Detection\n * Detects the range of colors that the display can show\n */\nexport type ColorGamut = 'srgb' | 'p3' | 'rec2020' | 'unknown';\n\nexport function getColorGamut(): ColorGamut {\n try {\n // Check from widest to narrowest (rec2020 includes p3, p3 includes srgb)\n for (const gamut of ['rec2020', 'p3', 'srgb'] as const) {\n const mq = safeMatchMedia(`(color-gamut: ${gamut})`);\n if (mq?.matches) {\n return gamut;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Forced Colors Detection\n * Detects if the user has enabled high contrast mode\n */\nexport function getForcedColors(): boolean | null {\n try {\n const activeMq = safeMatchMedia('(forced-colors: active)');\n if (activeMq?.matches) {\n return true;\n }\n const noneMq = safeMatchMedia('(forced-colors: none)');\n if (noneMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Contrast Preference Detection\n * Detects user's contrast preference\n */\nexport type ContrastPreference = 'no-preference' | 'more' | 'less' | 'forced' | 'unknown';\n\nexport function getContrastPreference(): ContrastPreference {\n try {\n const preferences = ['no-preference', 'high', 'more', 'low', 'less', 'forced'] as const;\n \n for (const preference of preferences) {\n const mq = safeMatchMedia(`(prefers-contrast: ${preference})`);\n if (mq?.matches) {\n // Normalize 'high' to 'more' and 'low' to 'less'\n if (preference === 'high') return 'more';\n if (preference === 'low') return 'less';\n return preference as ContrastPreference;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Reduced Motion Detection\n * Detects if user prefers reduced motion (accessibility feature)\n */\nexport function getReducedMotion(): boolean | null {\n try {\n const reduceMq = safeMatchMedia('(prefers-reduced-motion: reduce)');\n if (reduceMq?.matches) {\n return true;\n }\n const noPrefMq = safeMatchMedia('(prefers-reduced-motion: no-preference)');\n if (noPrefMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Reduced Transparency Detection\n * Detects if user prefers reduced transparency\n */\nexport function getReducedTransparency(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-transparency: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-transparency: no-preference)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Monochrome Detection\n * Detects monochrome displays and their bit depth\n */\nexport function getMonochromeDepth(): number {\n try {\n // Test common monochrome bit depths\n for (let depth = 8; depth >= 0; depth--) {\n if (matchMedia(`(monochrome: ${depth})`).matches) {\n return depth;\n }\n }\n return 0; // Color display\n } catch {\n return 0;\n }\n}\n\n/**\n * Inverted Colors Detection\n * Detects if the user has inverted colors enabled\n */\nexport function getInvertedColors(): boolean | null {\n try {\n if (matchMedia('(inverted-colors: inverted)').matches) {\n return true;\n }\n if (matchMedia('(inverted-colors: none)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * HDR Support Detection\n * Detects High Dynamic Range display support\n */\nexport function getHDRSupport(): boolean | null {\n try {\n // Check for HDR support using dynamic-range media query\n if (matchMedia('(dynamic-range: high)').matches) {\n return true;\n }\n if (matchMedia('(dynamic-range: standard)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Color Depth Detection\n * Enhanced color depth detection with more granular values\n */\nexport function getEnhancedColorDepth(): number {\n try {\n // Test various color depths\n const depths = [48, 36, 30, 24, 16, 15, 8];\n for (const depth of depths) {\n if (matchMedia(`(color: ${depth})`).matches) {\n return depth;\n }\n }\n return screen.colorDepth || 24; // Fallback to screen property\n } catch {\n return screen.colorDepth || 24;\n }\n}\n\n/**\n * Hover Capability Detection\n * Detects if the primary input mechanism can hover\n */\nexport type HoverCapability = 'none' | 'hover' | 'unknown';\n\nexport function getHoverCapability(): HoverCapability {\n try {\n if (matchMedia('(hover: hover)').matches) {\n return 'hover';\n }\n if (matchMedia('(hover: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Pointer Capability Detection\n * Detects the accuracy of the primary input mechanism\n */\nexport type PointerCapability = 'none' | 'coarse' | 'fine' | 'unknown';\n\nexport function getPointerCapability(): PointerCapability {\n try {\n if (matchMedia('(pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Check if accessibility detection is available\n * Enhanced with browser compatibility checks\n */\nexport function isAccessibilityDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunAccessibility;\n}\n\n/**\n * Safe media query matcher with error handling\n */\nfunction safeMatchMedia(query: string): MediaQueryList | null {\n try {\n if (!isAccessibilityDetectionAvailable()) {\n return null;\n }\n return matchMedia(query);\n } catch (error) {\n // Some browsers might not support specific media queries\n return null;\n }\n}\n\n/**\n * Additional accessibility media queries from FingerprintJS\n */\n\n/**\n * Reduced Data Mode Detection\n * Detects if user has enabled data saving mode\n */\nexport function getReducedData(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-data: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-data: no-preference)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Display Mode Detection \n * Detects if the application is running in a standalone display mode\n */\nexport type DisplayMode = 'browser' | 'minimal-ui' | 'standalone' | 'fullscreen' | 'unknown';\n\nexport function getDisplayMode(): DisplayMode {\n try {\n const modes: DisplayMode[] = ['fullscreen', 'standalone', 'minimal-ui', 'browser'];\n for (const mode of modes) {\n if (matchMedia(`(display-mode: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Environment Blending Detection\n * Detects how the display is integrated with the environment\n */\nexport type EnvironmentBlending = 'opaque' | 'additive' | 'subtractive' | 'unknown';\n\nexport function getEnvironmentBlending(): EnvironmentBlending {\n try {\n const modes: EnvironmentBlending[] = ['opaque', 'additive', 'subtractive'];\n for (const mode of modes) {\n if (matchMedia(`(environment-blending: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Any Hover Capability Detection\n * Detects if any available input mechanism can hover\n */\nexport function getAnyHover(): boolean | null {\n try {\n if (matchMedia('(any-hover: hover)').matches) {\n return true;\n }\n if (matchMedia('(any-hover: none)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Any Pointer Capability Detection\n * Detects the accuracy of any available input mechanism\n */\nexport function getAnyPointer(): PointerCapability {\n try {\n if (matchMedia('(any-pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(any-pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(any-pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Color Scheme Preference Detection\n * Detects user's preferred color scheme (light/dark mode)\n */\nexport type ColorScheme = 'light' | 'dark' | 'no-preference' | 'unknown';\n\nexport function getColorScheme(): ColorScheme {\n try {\n if (matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n if (matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n if (matchMedia('(prefers-color-scheme: no-preference)').matches) {\n return 'no-preference';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Complete accessibility fingerprint\n */\nexport interface AccessibilityFingerprint {\n // Original properties\n colorGamut: ColorGamut;\n forcedColors: boolean | null;\n contrastPreference: ContrastPreference;\n reducedMotion: boolean | null;\n reducedTransparency: boolean | null;\n monochromeDepth: number;\n invertedColors: boolean | null;\n hdrSupport: boolean | null;\n enhancedColorDepth: number;\n hoverCapability: HoverCapability;\n pointerCapability: PointerCapability;\n \n // New FingerprintJS-inspired properties\n reducedData: boolean | null;\n displayMode: DisplayMode;\n environmentBlending: EnvironmentBlending;\n anyHover: boolean | null;\n anyPointer: PointerCapability;\n colorScheme: ColorScheme;\n \n // Computed properties\n hasAccessibilityFeatures: boolean;\n displayCapabilities: string;\n interactionCapabilities: string;\n}\n\nexport function getAccessibilityFingerprint(): AccessibilityFingerprint {\n // Original properties\n const colorGamut = getColorGamut();\n const forcedColors = getForcedColors();\n const contrastPreference = getContrastPreference();\n const reducedMotion = getReducedMotion();\n const reducedTransparency = getReducedTransparency();\n const monochromeDepth = getMonochromeDepth();\n const invertedColors = getInvertedColors();\n const hdrSupport = getHDRSupport();\n const enhancedColorDepth = getEnhancedColorDepth();\n const hoverCapability = getHoverCapability();\n const pointerCapability = getPointerCapability();\n \n // New FingerprintJS-inspired properties\n const reducedData = getReducedData();\n const displayMode = getDisplayMode();\n const environmentBlending = getEnvironmentBlending();\n const anyHover = getAnyHover();\n const anyPointer = getAnyPointer();\n const colorScheme = getColorScheme();\n\n // Determine if user has accessibility features enabled\n const hasAccessibilityFeatures = Boolean(\n forcedColors ||\n reducedMotion ||\n reducedTransparency ||\n invertedColors ||\n reducedData ||\n contrastPreference !== 'no-preference' ||\n colorScheme !== 'no-preference' ||\n monochromeDepth > 0\n );\n\n // Create display capabilities signature\n const displayCapabilities = [\n colorGamut,\n hdrSupport ? 'hdr' : 'sdr',\n `${enhancedColorDepth}bit`,\n monochromeDepth > 0 ? `mono${monochromeDepth}` : 'color',\n colorScheme,\n displayMode,\n environmentBlending\n ].join('-');\n\n // Create interaction capabilities signature\n const interactionCapabilities = [\n hoverCapability,\n pointerCapability,\n anyHover ? 'anyhover' : 'nohover',\n anyPointer\n ].join('-');\n\n return {\n // Original properties\n colorGamut,\n forcedColors,\n contrastPreference,\n reducedMotion,\n reducedTransparency,\n monochromeDepth,\n invertedColors,\n hdrSupport,\n enhancedColorDepth,\n hoverCapability,\n pointerCapability,\n \n // New properties\n reducedData,\n displayMode,\n environmentBlending,\n anyHover,\n anyPointer,\n colorScheme,\n \n // Computed properties\n hasAccessibilityFeatures,\n displayCapabilities,\n interactionCapabilities,\n };\n}\n\n/**\n * Analyze accessibility fingerprint for confidence and uniqueness\n */\nexport function analyzeAccessibilityFingerprint(fingerprint: AccessibilityFingerprint): {\n confidence: number;\n uniqueness: number;\n accessibilityScore: number;\n modernBrowserScore: number;\n} {\n const features = [\n fingerprint.colorGamut !== 'unknown',\n fingerprint.forcedColors !== null,\n fingerprint.contrastPreference !== 'unknown',\n fingerprint.reducedMotion !== null,\n fingerprint.reducedTransparency !== null,\n fingerprint.invertedColors !== null,\n fingerprint.hdrSupport !== null,\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.anyHover !== null,\n fingerprint.colorScheme !== 'unknown',\n ];\n\n const supportedFeatures = features.filter(Boolean).length;\n const totalFeatures = features.length;\n const confidence = supportedFeatures / totalFeatures;\n\n // Modern browser score based on support for newer features\n const modernFeatures = [\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.colorScheme !== 'unknown',\n fingerprint.hdrSupport !== null,\n ];\n const modernBrowserScore = modernFeatures.filter(Boolean).length / modernFeatures.length;\n\n // Accessibility score based on enabled features\n const accessibilityFeatures = [\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.contrastPreference !== 'no-preference',\n fingerprint.colorScheme === 'dark',\n fingerprint.monochromeDepth > 0,\n ];\n const accessibilityScore = accessibilityFeatures.filter(Boolean).length / accessibilityFeatures.length;\n\n // Uniqueness based on variation from defaults\n const nonDefaultValues = [\n fingerprint.colorGamut !== 'srgb',\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.monochromeDepth > 0,\n fingerprint.hdrSupport === true,\n fingerprint.displayMode !== 'browser',\n fingerprint.environmentBlending !== 'opaque',\n fingerprint.colorScheme === 'dark',\n ];\n const uniqueness = nonDefaultValues.filter(Boolean).length / nonDefaultValues.length;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n accessibilityScore: Math.round(accessibilityScore * 100) / 100,\n modernBrowserScore: Math.round(modernBrowserScore * 100) / 100,\n };\n}","/**\n * DateTime Locale Detection\n * Based on FingerprintJS datetime locale detection\n * \n * This component uses the Intl API to detect user's actual locale preferences\n * which is more accurate than navigator.language and reveals true user settings.\n * \n * Key advantages:\n * - More accurate than navigator.language\n * - Reveals actual system locale settings\n * - Detects number formatting preferences\n * - Shows date/time formatting preferences\n * - Captures currency and timezone preferences\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions\n */\n\nexport interface DateTimeLocaleData {\n // Basic locale information\n locale: string;\n calendar: string;\n numberingSystem: string;\n timeZone: string;\n \n // Date/time formatting preferences\n dateStyle: string;\n timeStyle: string;\n hourCycle: string;\n hour12: boolean;\n \n // Number formatting\n numberLocale: string;\n currencyDisplay: string;\n currencySign: string;\n notation: string;\n signDisplay: string;\n \n // Advanced formatting\n listStyle: string;\n relativeTimeStyle: string;\n pluralRules: string;\n \n // Comparison with navigator locale\n navigatorLanguage: string;\n localeMatch: boolean;\n \n // Availability flags\n intlSupport: {\n DateTimeFormat: boolean;\n NumberFormat: boolean;\n RelativeTimeFormat: boolean;\n ListFormat: boolean;\n PluralRules: boolean;\n Collator: boolean;\n };\n}\n\nexport const enum LocaleStatus {\n /** The browser doesn't support Intl API */\n IntlAPINotSupported = -1,\n /** The browser doesn't support DateTimeFormat constructor */\n DateTimeFormatNotSupported = -2,\n /** DateTimeFormat locale is undefined or null */\n LocaleNotAvailable = -3,\n /** NumberFormat is not supported */\n NumberFormatNotSupported = -4,\n}\n\n/**\n * Safely get DateTimeFormat options\n */\nfunction getDateTimeFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl) {\n return LocaleStatus.IntlAPINotSupported;\n }\n\n const DateTimeFormat = window.Intl.DateTimeFormat;\n if (!DateTimeFormat) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n\n const dtf = new DateTimeFormat();\n const options = dtf.resolvedOptions();\n\n if (!options.locale && options.locale !== '') {\n return LocaleStatus.LocaleNotAvailable;\n }\n\n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n hourCycle: (options as any).hourCycle || 'unknown',\n hour12: options.hour12 !== undefined ? options.hour12 : false,\n };\n } catch (error) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n}\n\n/**\n * Safely get NumberFormat options\n */\nfunction getNumberFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl || !window.Intl.NumberFormat) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n\n const nf = new Intl.NumberFormat();\n const options = nf.resolvedOptions();\n\n // Test currency formatting\n const currencyFormatter = new Intl.NumberFormat(undefined, { \n style: 'currency', \n currency: 'USD' \n });\n const currencyOptions = currencyFormatter.resolvedOptions();\n\n return {\n numberLocale: options.locale || 'unknown',\n currencyDisplay: currencyOptions.currencyDisplay || 'unknown',\n currencySign: (currencyOptions as any).currencySign || 'unknown',\n notation: (options as any).notation || 'unknown',\n signDisplay: (options as any).signDisplay || 'unknown',\n };\n } catch (error) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n}\n\n/**\n * Get advanced Intl API features\n */\nfunction getAdvancedIntlFeatures(): Partial<DateTimeLocaleData> {\n const features: Partial<DateTimeLocaleData> = {\n listStyle: 'unknown',\n relativeTimeStyle: 'unknown',\n pluralRules: 'unknown',\n };\n\n // Test ListFormat\n try {\n if (window.Intl && (window.Intl as any).ListFormat) {\n const lf = new (window.Intl as any).ListFormat();\n const options = lf.resolvedOptions();\n features.listStyle = options.style || 'unknown';\n }\n } catch (error) {\n // ListFormat not supported\n }\n\n // Test RelativeTimeFormat\n try {\n if (window.Intl && (window.Intl as any).RelativeTimeFormat) {\n const rtf = new (window.Intl as any).RelativeTimeFormat();\n const options = rtf.resolvedOptions();\n features.relativeTimeStyle = options.style || 'unknown';\n }\n } catch (error) {\n // RelativeTimeFormat not supported\n }\n\n // Test PluralRules\n try {\n if (window.Intl && (window.Intl as any).PluralRules) {\n const pr = new (window.Intl as any).PluralRules();\n const rule = pr.select(1);\n features.pluralRules = rule || 'unknown';\n }\n } catch (error) {\n // PluralRules not supported\n }\n\n return features;\n}\n\n/**\n * Check availability of Intl API components\n */\nfunction checkIntlSupport(): DateTimeLocaleData['intlSupport'] {\n const support = {\n DateTimeFormat: false,\n NumberFormat: false,\n RelativeTimeFormat: false,\n ListFormat: false,\n PluralRules: false,\n Collator: false,\n };\n\n try {\n if (window.Intl) {\n support.DateTimeFormat = typeof window.Intl.DateTimeFormat === 'function';\n support.NumberFormat = typeof window.Intl.NumberFormat === 'function';\n support.RelativeTimeFormat = typeof (window.Intl as any).RelativeTimeFormat === 'function';\n support.ListFormat = typeof (window.Intl as any).ListFormat === 'function';\n support.PluralRules = typeof (window.Intl as any).PluralRules === 'function';\n support.Collator = typeof window.Intl.Collator === 'function';\n }\n } catch (error) {\n // All remain false\n }\n\n return support;\n}\n\n/**\n * Get comprehensive datetime locale information\n */\nexport function getDateTimeLocale(): DateTimeLocaleData | LocaleStatus {\n // Get basic datetime formatting\n const dtfOptions = getDateTimeFormatOptions();\n if (typeof dtfOptions === 'number') {\n return dtfOptions; // Return error status\n }\n\n // Get number formatting\n const nfOptions = getNumberFormatOptions();\n const numberOptions = typeof nfOptions === 'number' ? {} : nfOptions;\n\n // Get advanced features\n const advancedFeatures = getAdvancedIntlFeatures();\n\n // Get Intl support information\n const intlSupport = checkIntlSupport();\n\n // Compare with navigator.language\n const navigatorLanguage = navigator.language || 'unknown';\n const localeMatch = dtfOptions.locale === navigatorLanguage;\n\n // Try to get more detailed formatting options\n let dateStyle = 'unknown';\n let timeStyle = 'unknown';\n\n try {\n if (window.Intl && typeof window.Intl.DateTimeFormat === 'function') {\n // Test with specific options to reveal more about formatting preferences\n const longDateFormatter = new Intl.DateTimeFormat(undefined, { dateStyle: 'long' });\n const longTimeFormatter = new Intl.DateTimeFormat(undefined, { timeStyle: 'long' });\n \n const longDateOptions = longDateFormatter.resolvedOptions();\n const longTimeOptions = longTimeFormatter.resolvedOptions();\n \n dateStyle = (longDateOptions as any).dateStyle || 'unknown';\n timeStyle = (longTimeOptions as any).timeStyle || 'unknown';\n }\n } catch (error) {\n // Use defaults\n }\n\n return {\n // Basic information\n locale: dtfOptions.locale || 'unknown',\n calendar: dtfOptions.calendar || 'unknown',\n numberingSystem: dtfOptions.numberingSystem || 'unknown',\n timeZone: dtfOptions.timeZone || 'unknown',\n \n // Date/time formatting\n dateStyle,\n timeStyle,\n hourCycle: dtfOptions.hourCycle || 'unknown',\n hour12: dtfOptions.hour12 || false,\n \n // Number formatting\n numberLocale: numberOptions.numberLocale || dtfOptions.locale || 'unknown',\n currencyDisplay: numberOptions.currencyDisplay || 'unknown',\n currencySign: numberOptions.currencySign || 'unknown',\n notation: numberOptions.notation || 'unknown',\n signDisplay: numberOptions.signDisplay || 'unknown',\n \n // Advanced features\n listStyle: advancedFeatures.listStyle || 'unknown',\n relativeTimeStyle: advancedFeatures.relativeTimeStyle || 'unknown',\n pluralRules: advancedFeatures.pluralRules || 'unknown',\n \n // Comparison data\n navigatorLanguage,\n localeMatch,\n \n // Support information\n intlSupport,\n };\n}\n\n/**\n * Check if datetime locale detection is available\n */\nexport function isDateTimeLocaleAvailable(): boolean {\n try {\n return typeof window !== 'undefined' && \n typeof window.Intl !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze datetime locale data for confidence and uniqueness\n */\nexport function analyzeDateTimeLocale(localeData: DateTimeLocaleData): {\n confidence: number;\n uniqueness: number;\n intlApiSupport: number;\n localeComplexity: number;\n} {\n if (typeof localeData === 'number') {\n // It's an error status\n return {\n confidence: 0,\n uniqueness: 0,\n intlApiSupport: 0,\n localeComplexity: 0,\n };\n }\n\n // Count supported Intl features\n const supportedFeatures = Object.values(localeData.intlSupport).filter(Boolean).length;\n const totalFeatures = Object.keys(localeData.intlSupport).length;\n const intlApiSupport = supportedFeatures / totalFeatures;\n\n // Count non-unknown values\n const values = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.dateStyle,\n localeData.timeStyle,\n localeData.hourCycle,\n localeData.numberLocale,\n localeData.currencyDisplay,\n localeData.currencySign,\n localeData.notation,\n localeData.signDisplay,\n localeData.listStyle,\n localeData.relativeTimeStyle,\n localeData.pluralRules,\n ];\n\n const knownValues = values.filter(val => val !== 'unknown' && val !== '').length;\n const confidence = knownValues / values.length;\n\n // Measure locale complexity (more specific = more unique)\n const localeComplexity = [\n localeData.locale.length > 2 ? 1 : 0,\n localeData.calendar !== 'gregory' ? 1 : 0,\n localeData.numberingSystem !== 'latn' ? 1 : 0,\n localeData.hour12 ? 1 : 0,\n !localeData.localeMatch ? 1 : 0,\n ].reduce((sum, val) => sum + val, 0) / 5;\n\n const uniqueness = (confidence + intlApiSupport + localeComplexity) / 3;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n intlApiSupport: Math.round(intlApiSupport * 100) / 100,\n localeComplexity: Math.round(localeComplexity * 100) / 100,\n };\n}\n\n/**\n * Get a compact hash of datetime locale for quick comparison\n */\nexport function getDateTimeLocaleHash(localeData: DateTimeLocaleData): string {\n if (typeof localeData === 'number') {\n return `status-${localeData}`;\n }\n\n const keyValues = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.hourCycle,\n localeData.hour12 ? '1' : '0',\n localeData.localeMatch ? '1' : '0',\n Object.values(localeData.intlSupport).map(b => b ? '1' : '0').join(''),\n ];\n\n return keyValues.join('|');\n}","/**\n * Enhanced Font Preferences Detection with Iframe Isolation\n * Based on FingerprintJS font preferences detection with enhanced security and accuracy\n *\n * This component measures text rendering with different font settings using isolated iframes\n * to detect user's font preferences, OS-specific fonts, and browser rendering differences.\n *\n * Key advantages:\n * - Iframe isolation prevents external interference\n * - Detects OS-specific font rendering and anti-aliasing\n * - Captures user font size preferences and system settings\n * - Reveals browser-specific text rendering differences\n * - Very stable across sessions and difficult to spoof\n * - Enhanced with sub-pixel rendering analysis\n */\n\nimport { isChrome, isWebKit } from \"../../utils/browser\";\nimport { hash32 } from \"./hashing\";\n\nexport interface FontPreferences {\n // Font family measurements\n default: number;\n serif: number;\n sans: number;\n mono: number;\n\n // OS-specific fonts\n apple: number;\n system: number;\n\n // Size tests\n min: number;\n large: number;\n\n // Browser-specific measurements\n ui: number;\n emoji: number;\n math: number;\n\n // Advanced measurements\n cjk: number; // Chinese/Japanese/Korean fonts\n arabic: number; // Arabic script fonts\n hebrew: number; // Hebrew script fonts\n\n // Rendering characteristics\n subpixel: number; // Subpixel rendering differences\n kerning: number; // Kerning differences\n ligatures: number; // Ligature support\n\n // NEW: Enhanced rendering analysis\n antiAliasing: {\n enabled: boolean;\n type: string;\n smoothingLevel: number;\n };\n systemFontHints: {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n };\n fallbackBehavior: Record<string, string>;\n isolatedHash: string;\n}\n\n/**\n * Text content for measurements - chosen for maximum variation\n */\nconst defaultText = \"mmMwWLliI0fiflO&1\";\nconst cjkText = \"中文测试\";\nconst arabicText = \"اختبار\";\nconst hebrewText = \"בדיקה\";\nconst emojiText = \"🎯🔥💯\";\nconst mathText = \"∑∆∇∂\";\nconst ligatureText = \"ffi ffl fi fl\";\n\n/**\n * Font measurement presets\n */\ninterface FontPreset {\n style?: Partial<CSSStyleDeclaration>;\n text?: string;\n}\n\nconst presets: Partial<Record<keyof FontPreferences, FontPreset>> = {\n // Basic font families\n default: { text: defaultText },\n serif: {\n style: { fontFamily: \"serif\" },\n text: defaultText,\n },\n sans: {\n style: { fontFamily: \"sans-serif\" },\n text: defaultText,\n },\n mono: {\n style: { fontFamily: \"monospace\" },\n text: defaultText,\n },\n\n // OS-specific fonts\n apple: {\n style: { font: \"-apple-system-body\" },\n text: defaultText,\n },\n system: {\n style: { fontFamily: \"system-ui\" },\n text: defaultText,\n },\n\n // Size variations\n min: {\n style: { fontSize: \"1px\" },\n text: defaultText,\n },\n large: {\n style: { fontSize: \"72px\" },\n text: defaultText,\n },\n\n // Browser UI fonts\n ui: {\n style: { fontFamily: \"ui-serif\" },\n text: defaultText,\n },\n emoji: {\n style: {\n fontFamily: \"Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji\",\n },\n text: emojiText,\n },\n math: {\n style: { fontFamily: \"STIX Two Math, Cambria Math\" },\n text: mathText,\n },\n\n // Script-specific fonts\n cjk: {\n style: { fontFamily: \"Hiragino Sans, Microsoft YaHei, SimSun\" },\n text: cjkText,\n },\n arabic: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: arabicText,\n },\n hebrew: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: hebrewText,\n },\n\n // Advanced rendering features\n subpixel: {\n style: {\n fontFamily: \"Arial\",\n fontSize: \"11px\",\n textRendering: \"optimizeLegibility\",\n },\n text: defaultText,\n },\n kerning: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontKerning: \"normal\",\n },\n text: \"AV To\",\n },\n ligatures: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontVariantLigatures: \"common-ligatures\",\n },\n text: ligatureText,\n },\n};\n\n/**\n * Analyze rendering quality to detect anti-aliasing and font smoothing\n */\nfunction analyzeRenderingQuality(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string = \"Arial\"\n): { quality: number; antiAliasing: boolean; smoothing: number } {\n try {\n // Create canvas for pixel analysis\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) return { quality: 0, antiAliasing: false, smoothing: 0 };\n\n // Draw text at sub-pixel position to trigger anti-aliasing\n ctx.font = `24px \"${fontFamily}\"`;\n ctx.fillStyle = \"#000000\";\n ctx.fillText(\"Wg\", 10.5, 30.7);\n\n // Analyze pixel data for anti-aliasing detection\n const imageData = ctx.getImageData(10, 20, 30, 20);\n const pixels = imageData.data;\n\n let edgePixels = 0;\n let grayscalePixels = 0;\n let totalNonWhitePixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const alpha = pixels[i + 3] || 0;\n\n // Skip transparent pixels\n if (alpha < 10) continue;\n\n totalNonWhitePixels++;\n\n // Detect grayscale pixels (anti-aliasing indicator)\n if (r === g && g === b && r > 0 && r < 255) {\n grayscalePixels++;\n }\n\n // Detect edge transitions\n if (i > 4 && Math.abs(r - (pixels[i - 4] || 0)) > 50) {\n edgePixels++;\n }\n }\n\n const antiAliasingRatio =\n totalNonWhitePixels > 0 ? grayscalePixels / totalNonWhitePixels : 0;\n const smoothingLevel =\n totalNonWhitePixels > 0\n ? (grayscalePixels * 100) / totalNonWhitePixels\n : 0;\n\n return {\n quality: Math.round(smoothingLevel),\n antiAliasing: antiAliasingRatio > 0.1,\n smoothing: Math.round(smoothingLevel * 100) / 100,\n };\n } catch (error) {\n return { quality: 0, antiAliasing: false, smoothing: 0 };\n }\n}\n\n/**\n * Detect system font hinting and ClearType\n */\nfunction detectSystemFontHints(\n iframeDoc: Document,\n container: HTMLElement\n): {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n} {\n try {\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) {\n return { clearType: false, hintingLevel: 0, subpixelRendering: false };\n }\n\n // Test with known problematic character combinations\n const testTexts = [\"rn\", \"il\", \"WW\", \"mm\"];\n let clearTypeIndicators = 0;\n let subpixelIndicators = 0;\n let hintingScore = 0;\n\n for (const text of testTexts) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = \"16px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(text, 10, 25);\n\n const imageData = ctx.getImageData(10, 15, 40, 20);\n const pixels = imageData.data;\n\n // Analyze RGB sub-pixel rendering patterns\n for (let i = 0; i < pixels.length; i += 12) {\n // Check every 3rd pixel\n const r1 = pixels[i] || 0;\n const g1 = pixels[i + 1] || 0;\n const b1 = pixels[i + 2] || 0;\n const r2 = pixels[i + 4] || 0;\n const g2 = pixels[i + 5] || 0;\n const b2 = pixels[i + 6] || 0;\n\n // ClearType creates RGB fringing\n if (Math.abs(r1 - g1) > 20 || Math.abs(g1 - b1) > 20) {\n clearTypeIndicators++;\n }\n\n // Sub-pixel rendering shows color channel differences\n if (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2) > 50) {\n subpixelIndicators++;\n }\n\n // Font hinting creates consistent patterns\n if (\n (r1 > 0 && r1 < 255) ||\n (g1 > 0 && g1 < 255) ||\n (b1 > 0 && b1 < 255)\n ) {\n hintingScore++;\n }\n }\n }\n\n return {\n clearType: clearTypeIndicators > 10,\n hintingLevel: Math.min(Math.round(hintingScore / 10), 5),\n subpixelRendering: subpixelIndicators > 5,\n };\n } catch (error) {\n return {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n };\n }\n}\n\n/**\n * Test font fallback behavior\n */\nfunction testFontFallback(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string\n): string {\n try {\n const testString = \"mmmmmmmmmmlli\"; // Characters that vary significantly between fonts\n\n // Measure with specified font\n const withFont = measureText(iframeDoc, container, {\n style: { fontFamily },\n text: testString,\n });\n\n // Measure with known fallback\n const withFallback = measureText(iframeDoc, container, {\n style: { fontFamily: \"monospace\" },\n text: testString,\n });\n\n // Compare dimensions to detect fallback\n const widthDiff = Math.abs(withFont - withFallback);\n\n if (widthDiff < 1) {\n return \"monospace-fallback\";\n }\n\n const withSansSerif = measureText(iframeDoc, container, {\n style: { fontFamily: \"sans-serif\" },\n text: testString,\n });\n\n const sansWidthDiff = Math.abs(withFont - withSansSerif);\n\n if (sansWidthDiff < 1) {\n return \"sans-serif-fallback\";\n }\n\n return \"native-font\";\n } catch (error) {\n return \"fallback-error\";\n }\n}\n\n/**\n * Create measurement iframe for isolated font rendering\n */\nfunction createMeasurementIframe(): Promise<{\n document: Document;\n container: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement(\"iframe\");\n\n // Iframe HTML with proper viewport for Android font size detection\n const iframeHtml = `<!doctype html>\n <html>\n <head>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n body { \n margin: 0; \n padding: 20px; \n width: 4000px;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n }\n </style>\n </head>\n <body></body>\n </html>`;\n\n // Hide iframe\n iframe.style.cssText =\n \"position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0;\";\n iframe.srcdoc = iframeHtml;\n\n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n const iframeWindow = iframe.contentWindow;\n\n if (!iframeDocument || !iframeWindow) {\n reject(new Error(\"Cannot access iframe content\"));\n return;\n }\n\n const body = iframeDocument.body;\n\n // Apply zoom correction for better precision\n if (isChrome()) {\n body.style.zoom = `${1 / iframeWindow.devicePixelRatio}`;\n } else if (isWebKit()) {\n body.style.zoom = \"reset\";\n }\n\n // Add dummy content for Android font size detection\n const dummyText = iframeDocument.createElement(\"div\");\n dummyText.textContent = Array(200).fill(\"word\").join(\" \");\n body.appendChild(dummyText);\n\n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n\n resolve({\n document: iframeDocument,\n container: body,\n cleanup,\n });\n } catch (error) {\n reject(error);\n }\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load iframe\"));\n };\n\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Measure text width with specific font settings\n */\nfunction measureText(\n document: Document,\n container: HTMLElement,\n preset: FontPreset\n): number {\n const element = document.createElement(\"span\");\n const { style = {}, text = defaultText } = preset;\n\n // Set text content\n element.textContent = text;\n\n // Apply base styles\n element.style.cssText =\n \"position: absolute; left: 0; top: 0; white-space: nowrap; visibility: hidden;\";\n\n // Apply preset styles\n Object.entries(style).forEach(([key, value]) => {\n if (value !== undefined) {\n (element.style as any)[key] = value;\n }\n });\n\n // Add to DOM and measure\n container.appendChild(element);\n const width = element.getBoundingClientRect().width;\n container.removeChild(element);\n\n return Math.round(width * 100) / 100; // Round to 2 decimal places\n}\n\n/**\n * Get enhanced font preferences fingerprint with iframe isolation\n */\nexport async function getFontPreferences(): Promise<FontPreferences> {\n try {\n const {\n document: iframeDoc,\n container,\n cleanup,\n } = await createMeasurementIframe();\n\n const measurements: Partial<FontPreferences> = {};\n\n // Measure all presets\n for (const [key, preset] of Object.entries(presets)) {\n try {\n (measurements as any)[key] = measureText(iframeDoc, container, preset);\n } catch (error) {\n // Fallback to 0 if measurement fails\n (measurements as any)[key] = 0;\n }\n }\n\n // NEW: Enhanced rendering analysis\n const renderingAnalysis = analyzeRenderingQuality(\n iframeDoc,\n container,\n \"Arial\"\n );\n const systemHints = detectSystemFontHints(iframeDoc, container);\n\n // NEW: Test fallback behavior for common fonts\n const fallbackBehavior: Record<string, string> = {};\n const commonFonts = [\n \"Arial\",\n \"Helvetica\",\n \"Times New Roman\",\n \"Georgia\",\n \"Courier New\",\n ];\n\n for (const font of commonFonts) {\n try {\n fallbackBehavior[font] = testFontFallback(iframeDoc, container, font);\n } catch (error) {\n fallbackBehavior[font] = \"fallback-error\";\n }\n }\n\n // NEW: Create comprehensive hash for isolation verification\n const hashComponents = [\n JSON.stringify(measurements),\n JSON.stringify(renderingAnalysis),\n JSON.stringify(systemHints),\n JSON.stringify(fallbackBehavior),\n ];\n\n const isolatedHash = hash32(hashComponents.join(\"|\"));\n\n cleanup();\n\n return {\n ...(measurements as Omit<\n FontPreferences,\n \"antiAliasing\" | \"systemFontHints\" | \"fallbackBehavior\" | \"isolatedHash\"\n >),\n antiAliasing: {\n enabled: renderingAnalysis.antiAliasing,\n type: systemHints.clearType\n ? \"cleartype\"\n : renderingAnalysis.antiAliasing\n ? \"standard\"\n : \"none\",\n smoothingLevel: renderingAnalysis.smoothing,\n },\n systemFontHints: systemHints,\n fallbackBehavior,\n isolatedHash,\n };\n } catch (error) {\n // Return fallback measurements if iframe creation fails\n const fallbackMeasurements = Object.keys(presets).reduce((acc, key) => {\n acc[key as keyof FontPreferences] = 0;\n return acc;\n }, {} as any);\n\n return {\n ...fallbackMeasurements,\n antiAliasing: { enabled: false, type: \"unknown\", smoothingLevel: 0 },\n systemFontHints: {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n },\n fallbackBehavior: {},\n isolatedHash: \"error\",\n };\n }\n}\n\n/**\n * Check if font preferences detection is available\n */\nexport function isFontPreferencesAvailable(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font preferences for confidence and uniqueness\n */\nexport function analyzeFontPreferences(preferences: FontPreferences): {\n confidence: number;\n uniqueness: number;\n hasSystemFonts: boolean;\n hasAdvancedFeatures: boolean;\n renderingQuality: \"high\" | \"medium\" | \"low\";\n isolationIntegrity: boolean;\n} {\n // Get numeric measurements (excluding enhanced objects)\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ];\n\n // Check if we have real measurements (not all zeros)\n const hasRealValues = numericValues.some((val) => val > 0);\n const nonZeroCount = numericValues.filter((val) => val > 0).length;\n const totalCount = numericValues.length;\n\n let confidence = hasRealValues ? nonZeroCount / totalCount : 0;\n\n // Boost confidence if enhanced features are working\n if (\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType\n ) {\n confidence += 0.2;\n }\n\n if (Object.keys(preferences.fallbackBehavior).length > 0) {\n confidence += 0.1;\n }\n\n confidence = Math.min(confidence, 1);\n\n // Check for system font support\n const hasSystemFonts = preferences.apple > 0 || preferences.system > 0;\n\n // Check for advanced rendering features\n const hasAdvancedFeatures =\n [\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n preferences.emoji,\n preferences.math,\n ].some((val) => val > 0) ||\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType;\n\n // Calculate uniqueness based on measurement variance\n const average =\n numericValues.reduce((sum, val) => sum + val, 0) / numericValues.length;\n const variance =\n numericValues.reduce((sum, val) => sum + Math.pow(val - average, 2), 0) /\n numericValues.length;\n let uniqueness = Math.min(variance / 100, 1); // Normalize to 0-1\n\n // Boost uniqueness with enhanced features\n if (preferences.antiAliasing.smoothingLevel > 0) {\n uniqueness += 0.1;\n }\n\n if (preferences.systemFontHints.hintingLevel > 0) {\n uniqueness += 0.1;\n }\n\n uniqueness = Math.min(uniqueness, 1);\n\n // Determine rendering quality\n let renderingQuality: \"high\" | \"medium\" | \"low\" = \"low\";\n const smoothingLevel = preferences.antiAliasing.smoothingLevel;\n\n if (smoothingLevel > 50 || preferences.systemFontHints.clearType) {\n renderingQuality = \"high\";\n } else if (\n smoothingLevel > 20 ||\n preferences.systemFontHints.hintingLevel > 2\n ) {\n renderingQuality = \"medium\";\n }\n\n // Check isolation integrity\n const isolationIntegrity =\n preferences.isolatedHash !== \"error\" && preferences.isolatedHash.length > 0;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n hasSystemFonts,\n hasAdvancedFeatures,\n renderingQuality,\n isolationIntegrity,\n };\n}\n\n/**\n * Get a compact hash of enhanced font preferences for quick comparison\n */\nexport function getFontPreferencesHash(preferences: FontPreferences): string {\n // Use the isolated hash if available (most comprehensive)\n if (preferences.isolatedHash && preferences.isolatedHash !== \"error\") {\n return preferences.isolatedHash;\n }\n\n // Fallback to creating hash from numeric values\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ].map((val) => Math.round(val));\n\n // Include rendering characteristics in fallback hash\n const renderingIndicators = [\n preferences.antiAliasing.enabled ? 1 : 0,\n preferences.systemFontHints.clearType ? 1 : 0,\n preferences.systemFontHints.hintingLevel,\n Math.round(preferences.antiAliasing.smoothingLevel),\n ];\n\n return [...numericValues, ...renderingIndicators].join(\",\");\n}\n","/**\n * Enhanced Font Detection with Iframe Isolation\n * Based on FingerprintJS advanced font detection techniques\n * \n * Key improvements over basic font detection:\n * - Uses iframe isolation to prevent CSS interference\n * - More comprehensive font list from FingerprintJS\n * - Better measurement precision\n * - Fallback compatibility for various browsers\n */\n\nexport interface EnhancedFontFingerprint {\n available: string[];\n method: 'iframe' | 'dom' | 'fallback';\n measurements: Record<string, { width: number; height: number }>;\n precision: number;\n totalTested: number;\n detectionTime: number;\n}\n\n/**\n * Comprehensive font list from FingerprintJS\n * These fonts are carefully chosen to maximize OS and browser differentiation\n */\nconst FINGERPRINT_FONTS = [\n // Android-specific font\n 'sans-serif-thin',\n \n // Professional fonts\n 'ARNO PRO',\n 'Agency FB', \n 'Arabic Typesetting',\n 'Arial Unicode MS',\n 'AvantGarde Bk BT',\n 'BankGothic Md BT',\n 'Batang',\n 'Bitstream Vera Sans Mono',\n 'Calibri',\n 'Century',\n 'Century Gothic',\n 'Clarendon',\n 'EUROSTILE',\n 'Franklin Gothic',\n 'Futura Bk BT',\n 'Futura Md BT',\n 'GOTHAM',\n 'Gill Sans',\n 'HELV',\n 'Haettenschweiler',\n 'Helvetica Neue',\n 'Humanst521 BT',\n 'Leelawadee',\n 'Letter Gothic',\n 'Levenim MT',\n 'Lucida Bright',\n 'Lucida Sans',\n 'Menlo',\n 'MS Mincho',\n 'MS Outlook',\n 'MS Reference Specialty',\n 'MS UI Gothic',\n 'MT Extra',\n 'MYRIAD PRO',\n 'Marlett',\n 'Meiryo UI',\n 'Microsoft Uighur',\n 'Minion Pro',\n 'Monotype Corsiva',\n 'PMingLiU',\n 'Pristina',\n 'SCRIPTINA',\n 'Segoe UI Light',\n 'Serifa',\n 'SimHei',\n 'Small Fonts',\n 'Staccato222 BT',\n 'TRAJAN PRO',\n 'Univers CE 55 Medium',\n 'Vrinda',\n 'ZWAdobeF',\n \n // Additional commonly available system fonts\n 'Arial',\n 'Arial Black',\n 'Comic Sans MS',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Palatino Linotype',\n 'Tahoma',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana',\n \n // macOS specific\n 'American Typewriter',\n 'Avenir',\n 'Baskerville',\n 'Big Caslon',\n 'Brush Script MT',\n 'Copperplate',\n 'Didot',\n 'Futura',\n 'Helvetica',\n 'Hoefler Text',\n 'Lucida Grande',\n 'Marker Felt',\n 'Optima',\n 'Papyrus',\n 'Phosphate',\n 'Rockwell',\n 'Savoye LET',\n 'SignPainter',\n 'Skia',\n 'Snell Roundhand',\n 'Zapfino',\n \n // Linux specific\n 'DejaVu Sans',\n 'DejaVu Sans Mono',\n 'DejaVu Serif',\n 'Liberation Sans',\n 'Liberation Serif',\n 'Ubuntu',\n 'Ubuntu Mono',\n] as const;\n\n// Text chosen for maximum width variation between fonts\nconst TEST_STRING = 'mmMwWLliI0O&1';\nconst TEXT_SIZE = '48px';\nconst BASE_FONTS = ['monospace', 'sans-serif', 'serif'] as const;\n\n/**\n * Create isolated iframe for font measurement\n * This prevents page CSS from affecting measurements\n */\nfunction createFontMeasurementIframe(): Promise<{\n document: Document;\n body: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement('iframe');\n \n // Hide iframe completely\n iframe.style.cssText = 'position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none;';\n \n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n if (!iframeDocument) {\n throw new Error('Cannot access iframe document');\n }\n \n const body = iframeDocument.body;\n if (!body) {\n throw new Error('Iframe body not available');\n }\n \n // Set up measurement environment\n body.style.fontSize = TEXT_SIZE;\n body.style.margin = '0';\n body.style.padding = '0';\n \n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n \n resolve({\n document: iframeDocument,\n body,\n cleanup\n });\n } catch (error) {\n reject(error);\n }\n };\n \n iframe.onerror = () => {\n reject(new Error('Failed to load font measurement iframe'));\n };\n \n // Add to DOM to trigger load\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Create measurement span in iframe\n */\nfunction createMeasurementSpan(\n document: Document,\n fontFamily: string\n): HTMLSpanElement {\n const span = document.createElement('span');\n span.style.position = 'absolute';\n span.style.top = '0';\n span.style.left = '0';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n return span;\n}\n\n/**\n * Create span with font to detect and base font fallback\n */\nfunction createSpanWithFonts(\n document: Document,\n fontToDetect: string,\n baseFont: string\n): HTMLSpanElement {\n return createMeasurementSpan(document, `'${fontToDetect}',${baseFont}`);\n}\n\n/**\n * Check if font is available by comparing measurements\n */\nfunction isFontAvailable(\n fontSpans: HTMLSpanElement[],\n defaultMeasurements: Record<string, { width: number; height: number }>\n): boolean {\n return BASE_FONTS.some((baseFont, index) => {\n const span = fontSpans[index];\n const defaultSize = defaultMeasurements[baseFont];\n \n // Check if span exists before accessing properties\n if (!span || !defaultSize) {\n return false;\n }\n \n return (\n span.offsetWidth !== defaultSize.width ||\n span.offsetHeight !== defaultSize.height\n );\n });\n}\n\n/**\n * Enhanced font detection using iframe isolation\n */\nexport async function getEnhancedFontFingerprint(): Promise<EnhancedFontFingerprint> {\n const startTime = performance.now();\n \n try {\n const { document: iframeDoc, body, cleanup } = await createFontMeasurementIframe();\n \n try {\n // Create container for spans\n const spansContainer = iframeDoc.createElement('div');\n spansContainer.style.setProperty('visibility', 'hidden', 'important');\n \n // Measure base fonts first\n const baseFontSpans = BASE_FONTS.map(font => createMeasurementSpan(iframeDoc, font));\n baseFontSpans.forEach(span => spansContainer.appendChild(span));\n \n // Create spans for fonts to detect\n const fontSpans: Record<string, HTMLSpanElement[]> = {};\n for (const font of FINGERPRINT_FONTS) {\n fontSpans[font] = BASE_FONTS.map(baseFont => \n createSpanWithFonts(iframeDoc, font, baseFont)\n );\n fontSpans[font].forEach(span => spansContainer.appendChild(span));\n }\n \n // Add all spans to DOM\n body.appendChild(spansContainer);\n \n // Get default measurements for base fonts\n const defaultMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach((font, index) => {\n const span = baseFontSpans[index];\n if (span) {\n defaultMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n }\n });\n \n // Check which fonts are available and collect measurements\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FINGERPRINT_FONTS) {\n const spans = fontSpans[font];\n if (!spans) continue; // Skip if spans are undefined\n \n const isAvailable = isFontAvailable(spans, defaultMeasurements);\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n \n // Store measurement from first span for analysis\n if (spans.length > 0 && spans[0]) {\n measurements[font] = {\n width: spans[0].offsetWidth,\n height: spans[0].offsetHeight\n };\n }\n }\n \n const detectionTime = performance.now() - startTime;\n \n // Calculate precision based on measurement variance\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = uniqueWidths / widths.length;\n \n return {\n available: availableFonts,\n method: 'iframe',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n \n } finally {\n cleanup();\n }\n \n } catch (error) {\n // Fallback to DOM-based detection if iframe fails\n return getFallbackFontDetection(startTime);\n }\n}\n\n/**\n * Fallback font detection using direct DOM manipulation\n */\nfunction getFallbackFontDetection(startTime: number): EnhancedFontFingerprint {\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n try {\n // Create measurement container\n const container = document.createElement('div');\n container.style.cssText = 'position: absolute; left: -9999px; top: -9999px; visibility: hidden;';\n \n // Create base font spans\n const baseMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach(font => {\n const span = document.createElement('span');\n span.style.fontFamily = font;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n baseMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n document.body.removeChild(container);\n container.removeChild(span);\n });\n \n // Test each font\n for (const font of FINGERPRINT_FONTS) {\n let isAvailable = false;\n \n for (const baseFont of BASE_FONTS) {\n const span = document.createElement('span');\n span.style.fontFamily = `'${font}',${baseFont}`;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n const measurement = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n measurements[font] = measurement;\n \n // Check if different from base font\n const baseSize = baseMeasurements[baseFont];\n if (baseSize && (measurement.width !== baseSize.width || measurement.height !== baseSize.height)) {\n isAvailable = true;\n }\n \n document.body.removeChild(container);\n container.removeChild(span);\n \n if (isAvailable) break; // Found difference, font is available\n }\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n }\n \n } catch (error) {\n // If everything fails, return minimal data\n }\n \n const detectionTime = performance.now() - startTime;\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = widths.length > 0 ? uniqueWidths / widths.length : 0;\n \n return {\n available: availableFonts,\n method: 'dom',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n}\n\n/**\n * Check if enhanced font detection is available\n */\nexport function isEnhancedFontDetectionAvailable(): boolean {\n try {\n return typeof document !== 'undefined' &&\n typeof document.createElement === 'function' &&\n typeof document.body !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font fingerprint for confidence and uniqueness\n */\nexport function analyzeEnhancedFontFingerprint(fingerprint: EnhancedFontFingerprint): {\n confidence: number;\n uniqueness: number;\n osSignature: string;\n browserCapabilities: number;\n} {\n const { available, method, precision, totalTested, detectionTime } = fingerprint;\n \n // Confidence based on method used and precision\n let confidence = 0.5;\n if (method === 'iframe') confidence = 0.9;\n else if (method === 'dom') confidence = 0.7;\n \n confidence *= precision; // Adjust by measurement precision\n \n // OS signature based on font patterns\n const windowsFonts = available.filter(f => \n ['Calibri', 'Segoe UI Light', 'MS UI Gothic', 'Arial Unicode MS'].includes(f)\n ).length;\n \n const macOSFonts = available.filter(f =>\n ['Helvetica Neue', 'Avenir', 'Menlo', 'Zapfino', 'Baskerville'].includes(f)\n ).length;\n \n const linuxFonts = available.filter(f =>\n ['DejaVu Sans', 'Liberation Sans', 'Ubuntu'].includes(f)\n ).length;\n \n const androidFonts = available.filter(f =>\n ['sans-serif-thin', 'Roboto'].includes(f)\n ).length;\n \n let osSignature = 'unknown';\n if (windowsFonts >= 2) osSignature = 'windows';\n else if (macOSFonts >= 2) osSignature = 'macos';\n else if (linuxFonts >= 1) osSignature = 'linux';\n else if (androidFonts >= 1) osSignature = 'android';\n \n // Browser capabilities score\n const browserCapabilities = Math.min(detectionTime < 100 ? 1 : 0.8, 1);\n \n // Uniqueness based on font combination rarity\n const commonFonts = ['Arial', 'Times New Roman', 'Helvetica'];\n const rareFonts = available.filter(f => !commonFonts.includes(f));\n const uniqueness = Math.min(rareFonts.length / 10, 1);\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n osSignature,\n browserCapabilities: Math.round(browserCapabilities * 100) / 100\n };\n}\n\n/**\n * Get a compact hash of the font fingerprint\n */\nexport function getEnhancedFontFingerprintHash(fingerprint: EnhancedFontFingerprint): string {\n const sortedFonts = fingerprint.available.sort();\n return `${sortedFonts.join(',')}|${fingerprint.method}|${fingerprint.precision.toFixed(2)}`;\n}","/**\n * Enhanced Math Fingerprinting\n * Based on FingerprintJS math fingerprinting with additional precision tests\n * \n * This component tests JavaScript math operations precision which varies between:\n * - Different JavaScript engines (V8, SpiderMonkey, JavaScriptCore)\n * - Different hardware architectures (x86, ARM, etc.)\n * - Different operating systems\n * - Different browser versions\n * \n * @see https://gitlab.torproject.org/legacy/trac/-/issues/13018\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=531915\n */\n\nexport interface MathFingerprint {\n // Basic trigonometric functions\n acos: number;\n asin: number;\n atan: number;\n cos: number;\n sin: number;\n tan: number;\n \n // Hyperbolic functions\n acosh: number;\n asinh: number;\n atanh: number;\n cosh: number;\n sinh: number;\n tanh: number;\n \n // Exponential and logarithmic functions\n exp: number;\n expm1: number;\n log1p: number;\n \n // Advanced mathematical operations\n powPI: number;\n cbrt: number;\n hypot: number;\n log10: number;\n log2: number;\n \n // Polyfill implementations for comparison\n acoshPf: number;\n asinhPf: number;\n atanhPf: number;\n sinhPf: number;\n coshPf: number;\n expm1Pf: number;\n tanhPf: number;\n log1pPf: number;\n \n // Engine-specific precision tests\n precision: {\n float32: number;\n float64: number;\n bigNumbers: number;\n smallNumbers: number;\n };\n}\n\nconst M = Math; // Minification optimization\nconst fallbackFn = () => 0;\n\n/**\n * Enhanced math fingerprinting with additional precision tests\n */\nexport function getMathFingerprint(): MathFingerprint {\n // Native operations with fallbacks\n const acos = M.acos || fallbackFn;\n const acosh = M.acosh || fallbackFn;\n const asin = M.asin || fallbackFn;\n const asinh = M.asinh || fallbackFn;\n const atanh = M.atanh || fallbackFn;\n const atan = M.atan || fallbackFn;\n const sin = M.sin || fallbackFn;\n const sinh = M.sinh || fallbackFn;\n const cos = M.cos || fallbackFn;\n const cosh = M.cosh || fallbackFn;\n const tan = M.tan || fallbackFn;\n const tanh = M.tanh || fallbackFn;\n const exp = M.exp || fallbackFn;\n const expm1 = M.expm1 || fallbackFn;\n const log1p = M.log1p || fallbackFn;\n const cbrt = M.cbrt || fallbackFn;\n const hypot = M.hypot || fallbackFn;\n const log10 = M.log10 || fallbackFn;\n const log2 = M.log2 || fallbackFn;\n\n // Polyfill implementations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - M.exp(-value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + M.exp(-value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n // Precision tests for different number ranges\n const testFloat32 = () => {\n // Test 32-bit float precision\n const a = 1.0000001;\n const b = 1.0000002;\n return M.abs(a + b - 2.0000003);\n };\n\n const testFloat64 = () => {\n // Test 64-bit float precision\n const a = 1.0000000000000001;\n const b = 1.0000000000000002;\n return M.abs(a + b - 2.0000000000000003);\n };\n\n const testBigNumbers = () => {\n // Test precision with large numbers\n const big1 = 1e15;\n const big2 = 1e15 + 1;\n return M.abs(big2 - big1);\n };\n\n const testSmallNumbers = () => {\n // Test precision with very small numbers\n const small1 = 1e-15;\n const small2 = 2e-15;\n return M.abs(small1 + small2 - 3e-15);\n };\n\n // Empirically chosen constants for maximum fingerprint stability\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n \n // Hyperbolic functions\n acosh: acosh(1e308),\n asinh: asinh(1),\n atanh: atanh(0.5),\n cosh: cosh(1),\n sinh: sinh(1),\n tanh: tanh(1),\n \n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n log1p: log1p(10),\n \n // Advanced mathematical operations\n powPI: powPI(-100),\n cbrt: cbrt(27),\n hypot: hypot(3, 4),\n log10: log10(100),\n log2: log2(8),\n \n // Polyfill implementations\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinhPf: asinhPf(1),\n atanhPf: atanhPf(0.5),\n sinhPf: sinhPf(1),\n coshPf: coshPf(1),\n expm1Pf: expm1Pf(1),\n tanhPf: tanhPf(1),\n log1pPf: log1pPf(10),\n \n // Precision tests\n precision: {\n float32: testFloat32(),\n float64: testFloat64(),\n bigNumbers: testBigNumbers(),\n smallNumbers: testSmallNumbers(),\n }\n };\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathFingerprintingAvailable(): boolean {\n try {\n return typeof Math !== 'undefined' && \n typeof Math.sin === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Get a hash of the math fingerprint for quick comparison\n */\nexport function getMathFingerprintHash(): string {\n try {\n const mathData = getMathFingerprint();\n \n // Create a stable string representation\n const values = [\n mathData.acos, mathData.asin, mathData.atan,\n mathData.cos, mathData.sin, mathData.tan,\n mathData.acosh, mathData.asinh, mathData.atanh,\n mathData.cosh, mathData.sinh, mathData.tanh,\n mathData.exp, mathData.expm1, mathData.log1p,\n mathData.powPI, mathData.cbrt, mathData.hypot,\n mathData.log10, mathData.log2,\n mathData.precision.float32, mathData.precision.float64,\n mathData.precision.bigNumbers, mathData.precision.smallNumbers\n ];\n \n return values.join(',');\n } catch {\n return 'math-unavailable';\n }\n}\n\n/**\n * Analyze math fingerprint stability and provide confidence score\n */\nexport function analyzeMathFingerprint(mathData: MathFingerprint): {\n confidence: number;\n stability: 'high' | 'medium' | 'low';\n uniqueness: number;\n} {\n let confidence = 0.9; // Start with high confidence\n let uniqueness = 0.8;\n \n // Check for obvious fallback values (all zeros)\n const hasRealValues = Object.values(mathData).some(val => \n typeof val === 'number' && val !== 0\n );\n \n if (!hasRealValues) {\n confidence = 0.1;\n uniqueness = 0.1;\n }\n \n // Check precision test results\n const precisionScore = Object.values(mathData.precision).reduce((sum, val) => {\n return sum + (typeof val === 'number' && !isNaN(val) ? 1 : 0);\n }, 0) / 4;\n \n confidence *= precisionScore;\n \n // Determine stability based on confidence\n let stability: 'high' | 'medium' | 'low' = 'high';\n if (confidence < 0.3) stability = 'low';\n else if (confidence < 0.7) stability = 'medium';\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n stability,\n uniqueness: Math.round(uniqueness * 100) / 100\n };\n}","/**\n * Fingerprint Orchestrator\n * Main fingerprinting engine that coordinates all components\n * Based on FingerprintJS architecture with privacy-first approach\n */\n\nimport type {\n FingerprintComponent,\n FingerprintComponentType,\n FingerprintData,\n FingerprintOptions,\n FingerprintResult,\n} from \"../types/fingerprint\";\n\n// Import individual fingerprinting components\nimport { getAudioFingerprint, isAudioAvailable } from \"./fingerprint/audio\";\nimport {\n getBrowserFingerprint,\n isBrowserFingerprintingAvailable,\n} from \"./fingerprint/browser\";\nimport { getCanvasFingerprint, isCanvasAvailable } from \"./fingerprint/canvas\";\nimport {\n getFontFingerprint,\n isFontDetectionAvailable,\n} from \"./fingerprint/fonts\";\nimport {\n generateVisitorId,\n hashFingerprint,\n hashStableCore,\n} from \"./fingerprint/hashing\";\nimport { getScreenFingerprint, isScreenAvailable } from \"./fingerprint/screen\";\nimport { getWebGLFingerprint, isWebGLAvailable } from \"./fingerprint/webgl\";\n\n// Import new enhanced components from FingerprintJS\nimport {\n analyzeAccessibilityFingerprint,\n getAccessibilityFingerprint,\n isAccessibilityDetectionAvailable,\n} from \"./fingerprint/accessibility\";\nimport {\n analyzeDateTimeLocale,\n getDateTimeLocale,\n getDateTimeLocaleHash,\n isDateTimeLocaleAvailable,\n} from \"./fingerprint/datetime-locale\";\nimport {\n analyzeFontPreferences,\n getFontPreferences,\n getFontPreferencesHash,\n isFontPreferencesAvailable,\n} from \"./fingerprint/font-preferences\";\nimport {\n analyzeEnhancedFontFingerprint,\n getEnhancedFontFingerprint,\n getEnhancedFontFingerprintHash,\n isEnhancedFontDetectionAvailable,\n} from \"./fingerprint/fonts-enhanced\";\nimport {\n analyzeMathFingerprint,\n getMathFingerprint,\n getMathFingerprintHash,\n isMathFingerprintingAvailable,\n} from \"./fingerprint/math-enhanced\";\n\n// Import enhanced browser detection utilities\nimport { getBrowserInfo } from \"../utils/browser\";\n\n/**\n * Default fingerprint options (cookieless - memory cache only)\n */\nconst DEFAULT_OPTIONS: Required<FingerprintOptions> = {\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n debug: false,\n excludeComponents: [],\n};\n\n/**\n * Session-only cache for fingerprint components (memory only, no persistence)\n */\nconst sessionCache = new Map<string, any>();\n\n/**\n * Check if component should be included based on options\n */\nfunction shouldIncludeComponent(\n component: FingerprintComponentType,\n options: Required<FingerprintOptions>\n): boolean {\n // Check if component is excluded\n if (options.excludeComponents.includes(component)) {\n return false;\n }\n\n // In GDPR mode, exclude invasive components unless explicitly allowed\n if (options.gdprMode && !options.includeInvasive) {\n const invasiveComponents: FingerprintComponentType[] = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"fontPreferences\", // Uses iframe, could be considered invasive\n \"enhancedFonts\", // Uses iframe, could be considered invasive\n ];\n if (invasiveComponents.includes(component)) {\n return false;\n }\n }\n\n // New FingerprintJS components are enabled by default in non-GDPR mode\n const fingerprintJSComponents: FingerprintComponentType[] = [\n \"mathFingerprint\",\n \"dateTimeLocale\",\n \"accessibilityEnhanced\",\n \"fontPreferences\",\n \"enhancedFonts\",\n ];\n\n // Always allow FingerprintJS components unless specifically excluded\n if (fingerprintJSComponents.includes(component)) {\n return true;\n }\n\n return true;\n}\n\n/**\n * Get cached component data from session cache (memory only)\n */\nfunction getSessionCachedComponent(key: string): any | null {\n return sessionCache.get(key) || null;\n}\n\n/**\n * Cache component data in session memory only\n */\nfunction setSessionCachedComponent(key: string, data: any): void {\n sessionCache.set(key, data);\n}\n\n/**\n * Collect fingerprint component with timeout, intelligent retry logic, and session caching\n * Enhanced to prevent WebGL context leaks during retries\n */\nasync function collectComponent<T>(\n componentType: FingerprintComponentType,\n collector: () => Promise<T>,\n options: Required<FingerprintOptions>\n): Promise<T | null> {\n const cacheKey = `${componentType}_${options.gdprMode}`;\n\n // Check session cache first (memory only)\n const cached = getSessionCachedComponent(cacheKey);\n if (cached) {\n return cached;\n }\n\n // Enhanced retry logic - limit retries for WebGL to prevent context leaks\n const isWebGLComponent = componentType === \"webgl\";\n const isCriticalComponent = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"hardware\",\n \"system\",\n ].includes(componentType);\n\n // Reduce retries for WebGL to prevent context leaks\n const maxRetries = isWebGLComponent ? 2 : isCriticalComponent ? 3 : 1;\n const retryDelays = isWebGLComponent ? [200, 500] : [100, 250, 500]; // Longer delays for WebGL\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Create timeout promise with progressive timeout increase\n const timeoutDuration =\n options.timeout + attempt * (isWebGLComponent ? 2000 : 1000);\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(\n () =>\n reject(\n new Error(\n `${componentType} timeout after ${timeoutDuration}ms (attempt ${attempt + 1})`\n )\n ),\n timeoutDuration\n );\n });\n\n // Race collection vs timeout\n const result = await Promise.race([collector(), timeoutPromise]);\n\n // Validate result before caching\n if (result !== null && result !== undefined) {\n // Cache successful result in session memory only\n setSessionCachedComponent(cacheKey, result);\n return result;\n } else {\n throw new Error(`${componentType} returned null/undefined result`);\n }\n } catch (error) {\n const isLastAttempt = attempt === maxRetries - 1;\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n // Special handling for WebGL context issues\n if (isWebGLComponent && errorMessage.includes(\"context\")) {\n console.warn(\n `[RabbitTracker] WebGL context issue detected: ${errorMessage}`\n );\n // Force cleanup WebGL cache to prevent context accumulation\n try {\n const { forceCleanupWebGL } = await import(\"../utils/webgl-cache\");\n forceCleanupWebGL();\n } catch (cleanupError) {\n // Ignore cleanup errors\n }\n // Don't retry on context issues - they're unlikely to resolve quickly\n return null;\n }\n\n if (isLastAttempt) {\n // Log final failure for debugging\n console.warn(\n `[RabbitTracker] Component ${componentType} failed after ${maxRetries} attempts: ${errorMessage}`\n );\n return null;\n } else {\n // Wait before retry (with longer delays for WebGL)\n if (!errorMessage.includes(\"timeout\") && attempt < retryDelays.length) {\n await new Promise((resolve) =>\n setTimeout(resolve, retryDelays[attempt])\n );\n }\n\n // For WebGL, add small additional delay to let contexts settle\n if (isWebGLComponent) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Main fingerprint collection function\n */\nexport async function collectFingerprint(\n options: Partial<FingerprintOptions> = {}\n): Promise<FingerprintResult> {\n const startTime = performance.now();\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const collectedComponents: FingerprintComponentType[] = [];\n const failedComponents: {\n component: FingerprintComponentType;\n error: string;\n }[] = [];\n\n const fingerprintData: Partial<FingerprintData> = {\n collectionTime: startTime,\n gdprMode: opts.gdprMode,\n components: [],\n };\n\n // OPTIMIZATION: Collect independent fingerprint components in parallel\n // This reduces total collection time from 3-5s to 500ms-1s\n const parallelTasks: Promise<{ component: string; result: any }>[] = [];\n\n // Group 1: Independent rendering components (can run in parallel)\n if (shouldIncludeComponent(\"canvas\", opts) && isCanvasAvailable()) {\n parallelTasks.push(\n collectComponent(\"canvas\", getCanvasFingerprint, opts).then((result) => ({\n component: \"canvas\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"webgl\", opts) && isWebGLAvailable()) {\n parallelTasks.push(\n collectComponent(\"webgl\", getWebGLFingerprint, opts).then((result) => ({\n component: \"webgl\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"audio\", opts) && isAudioAvailable()) {\n parallelTasks.push(\n collectComponent(\"audio\", getAudioFingerprint, opts).then((result) => ({\n component: \"audio\",\n result,\n }))\n );\n }\n\n // Group 2: Fast synchronous components (can run in parallel)\n if (shouldIncludeComponent(\"fonts\", opts) && isFontDetectionAvailable()) {\n parallelTasks.push(\n collectComponent(\n \"fonts\",\n () => getFontFingerprint(!opts.gdprMode),\n opts\n ).then((result) => ({\n component: \"fonts\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"screen\", opts) && isScreenAvailable()) {\n parallelTasks.push(\n collectComponent(\"screen\", getScreenFingerprint, opts).then((result) => ({\n component: \"screen\",\n result,\n }))\n );\n }\n\n if (\n shouldIncludeComponent(\"browser\", opts) &&\n isBrowserFingerprintingAvailable()\n ) {\n parallelTasks.push(\n collectComponent(\"browser\", getBrowserFingerprint, opts).then(\n (result) => ({\n component: \"browser\",\n result,\n })\n )\n );\n }\n\n // Execute all parallel tasks and handle results\n const parallelResults = await Promise.allSettled(parallelTasks);\n\n parallelResults.forEach((promiseResult, index) => {\n if (promiseResult.status === \"fulfilled\" && promiseResult.value.result) {\n const { component, result } = promiseResult.value;\n (fingerprintData as any)[component] = result;\n collectedComponents.push(component as any);\n } else {\n // Extract component name from the corresponding task\n const taskComponent = parallelTasks[index];\n const componentName =\n taskComponent?.toString().match(/component: \"(\\w+)\"/)?.[1] || \"unknown\";\n failedComponents.push({\n component: componentName as any,\n error:\n promiseResult.status === \"rejected\"\n ? promiseResult.reason?.message || \"Promise rejected\"\n : \"Collection failed or timeout\",\n });\n }\n });\n\n // ADDED: Collect Incognito Detection (IMPROVED - 2024)\n // Only in enhanced mode for better accuracy\n if (!opts.gdprMode) {\n try {\n // Import incognito detection module\n const { detectIncognitoHeuristics } = await import(\n \"./fingerprint/incognito\"\n );\n const incognitoResult = await detectIncognitoHeuristics();\n\n if (incognitoResult) {\n (fingerprintData as any).incognitoDetection = {\n likelihood: incognitoResult.likelihood,\n methods: incognitoResult.methods,\n };\n\n // Add incognito to collected components for tracking\n collectedComponents.push(\"incognito\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"incognito\",\n error:\n error instanceof Error ? error.message : \"Incognito detection failed\",\n });\n }\n }\n\n // Collect Hardware fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"hardware\", opts)) {\n try {\n const hardwareModule = await import(\"./fingerprint/hardware\").catch(\n () => null\n );\n if (hardwareModule?.isHardwareDetectionAvailable?.()) {\n const result = hardwareModule.getHardwareFingerprint?.();\n if (result) {\n (fingerprintData as any).hardware = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"hardware\");\n }\n } else if (!hardwareModule) {\n // Fallback for when module fails to load\n const fallbackHardware = {\n hardwareConcurrency: navigator.hardwareConcurrency || 0,\n deviceMemory: (navigator as any).deviceMemory || 0,\n platform: navigator.platform || \"unknown\",\n };\n (fingerprintData as any).hardware = {\n value: fallbackHardware,\n duration: 0,\n };\n collectedComponents.push(\"hardware\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"hardware\",\n error:\n error instanceof Error ? error.message : \"Hardware detection failed\",\n });\n }\n }\n\n // Collect System fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"system\", opts)) {\n try {\n const { getSystemFingerprint, isSystemDetectionAvailable } = await import(\n \"./fingerprint/system\"\n );\n if (isSystemDetectionAvailable()) {\n const result = getSystemFingerprint();\n if (result) {\n (fingerprintData as any).system = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"system\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"system\",\n error:\n error instanceof Error ? error.message : \"System detection failed\",\n });\n }\n }\n\n // Collect Storage fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"storage\", opts)) {\n try {\n const { getStorageFingerprint, isStorageDetectionAvailable } =\n await import(\"./fingerprint/storage\");\n if (isStorageDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getStorageFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).storage = {\n value: result,\n duration,\n };\n collectedComponents.push(\"storage\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"storage\",\n error:\n error instanceof Error ? error.message : \"Storage detection failed\",\n });\n }\n }\n\n // Collect Math fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"math\", opts)) {\n try {\n const { getCompleteMathFingerprint, isMathDetectionAvailable } =\n await import(\"./fingerprint/math\");\n if (isMathDetectionAvailable()) {\n const startTime = performance.now();\n const result = getCompleteMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).math = {\n value: result,\n duration,\n };\n collectedComponents.push(\"math\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"math\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect DOM Blockers fingerprint (NEW - advanced FingerprintJS technique)\n if (shouldIncludeComponent(\"domBlockers\", opts)) {\n try {\n const { getDomBlockersFingerprint, isDomBlockersDetectionAvailable } =\n await import(\"./fingerprint/dom-blockers\");\n if (isDomBlockersDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getDomBlockersFingerprint({ debug: opts.debug });\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).domBlockers = {\n value: result,\n duration,\n };\n collectedComponents.push(\"domBlockers\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"domBlockers\",\n error:\n error instanceof Error\n ? error.message\n : \"DOM blockers detection failed\",\n });\n }\n }\n\n // Collect Accessibility fingerprint (NEW - media queries and preferences)\n if (shouldIncludeComponent(\"accessibility\", opts)) {\n try {\n const { getAccessibilityFingerprint, isAccessibilityDetectionAvailable } =\n await import(\"./fingerprint/accessibility\");\n if (isAccessibilityDetectionAvailable()) {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibility = {\n value: result,\n duration,\n };\n collectedComponents.push(\"accessibility\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibility\",\n error:\n error instanceof Error\n ? error.message\n : \"Accessibility detection failed\",\n });\n }\n }\n\n // Collect Browser APIs fingerprint (NEW - browser-specific APIs)\n if (shouldIncludeComponent(\"browserApis\", opts)) {\n try {\n const { getBrowserApisFingerprint, isBrowserApisDetectionAvailable } =\n await import(\"./fingerprint/browser-apis\");\n if (isBrowserApisDetectionAvailable()) {\n const startTime = performance.now();\n const result = getBrowserApisFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).browserApis = {\n value: result,\n duration,\n };\n collectedComponents.push(\"browserApis\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"browserApis\",\n error:\n error instanceof Error\n ? error.message\n : \"Browser APIs detection failed\",\n });\n }\n }\n\n // Collect Enhanced Plugins fingerprint (NEW - enhanced plugin detection)\n if (shouldIncludeComponent(\"pluginsEnhanced\", opts)) {\n try {\n const {\n getEnhancedPluginFingerprint,\n isEnhancedPluginDetectionAvailable,\n } = await import(\"./fingerprint/plugins-enhanced\");\n if (isEnhancedPluginDetectionAvailable()) {\n const startTime = performance.now();\n const result = getEnhancedPluginFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).pluginsEnhanced = {\n value: result,\n duration,\n };\n collectedComponents.push(\"pluginsEnhanced\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"pluginsEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced plugin detection failed\",\n });\n }\n }\n\n // ===== NEW FINGERPRINTJS-INSPIRED COMPONENTS =====\n\n // Collect Math fingerprinting (PRIORITY 1 - Maximum stability)\n if (\n shouldIncludeComponent(\"mathFingerprint\", opts) &&\n isMathFingerprintingAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).mathFingerprint = {\n value: result,\n duration,\n analysis: analyzeMathFingerprint(result),\n hash: getMathFingerprintHash(),\n };\n collectedComponents.push(\"mathFingerprint\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"mathFingerprint\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect Font Preferences (PRIORITY 2 - High differentiation)\n if (\n shouldIncludeComponent(\"fontPreferences\", opts) &&\n isFontPreferencesAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getFontPreferences();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).fontPreferences = {\n value: result,\n duration,\n analysis: analyzeFontPreferences(result),\n hash: getFontPreferencesHash(result),\n };\n collectedComponents.push(\"fontPreferences\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"fontPreferences\",\n error:\n error instanceof Error\n ? error.message\n : \"Font preferences detection failed\",\n });\n }\n }\n\n // Collect DateTime Locale (PRIORITY 3 - Improved precision)\n if (\n shouldIncludeComponent(\"dateTimeLocale\", opts) &&\n isDateTimeLocaleAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getDateTimeLocale();\n const duration = performance.now() - startTime;\n\n if (result && typeof result === \"object\") {\n (fingerprintData as any).dateTimeLocale = {\n value: result,\n duration,\n analysis: analyzeDateTimeLocale(result),\n hash: getDateTimeLocaleHash(result),\n };\n collectedComponents.push(\"dateTimeLocale\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"dateTimeLocale\",\n error:\n error instanceof Error\n ? error.message\n : \"DateTime locale detection failed\",\n });\n }\n }\n\n // Collect Enhanced Accessibility (PRIORITY 4 - Additional entropy)\n if (\n shouldIncludeComponent(\"accessibilityEnhanced\", opts) &&\n isAccessibilityDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibilityEnhanced = {\n value: result,\n duration,\n analysis: analyzeAccessibilityFingerprint(result),\n };\n collectedComponents.push(\"accessibilityEnhanced\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibilityEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced accessibility detection failed\",\n });\n }\n }\n\n // Collect Enhanced Font Detection with iframe isolation (PRIORITY 5)\n if (\n shouldIncludeComponent(\"enhancedFonts\", opts) &&\n isEnhancedFontDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getEnhancedFontFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).enhancedFonts = {\n value: result,\n duration,\n analysis: analyzeEnhancedFontFingerprint(result),\n hash: getEnhancedFontFingerprintHash(result),\n };\n collectedComponents.push(\"enhancedFonts\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"enhancedFonts\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced font detection failed\",\n });\n }\n }\n\n // Generate hash from collected components\n const componentValues: Record<string, any> = {};\n\n collectedComponents.forEach((component) => {\n const componentData = fingerprintData[\n component as keyof FingerprintData\n ] as FingerprintComponent<any>;\n if (componentData && componentData.value) {\n componentValues[component] = componentData.value;\n }\n });\n\n // PLACEHOLDER: Final fingerprint hash will be generated after stable core vector\n const hash = \"\";\n\n // Calculate confidence score using the new confidence system\n let confidenceResult;\n try {\n const { calculateConfidence } = await import(\"./fingerprint/confidence\");\n const componentResults = [\n ...collectedComponents.map((comp) => ({\n component: comp,\n success: true,\n duration: (fingerprintData as any)[comp]?.duration || 0,\n value: (fingerprintData as any)[comp]?.value,\n })),\n ...failedComponents.map((fail) => ({\n component: fail.component,\n success: false,\n duration: 0,\n error: fail.error,\n })),\n ];\n\n confidenceResult = calculateConfidence(componentResults, {\n requireMinimumComponents: 6,\n penalizeMissingCore: true,\n adjustForIncognito: true,\n });\n\n // Add confidence data to fingerprint\n (fingerprintData as any).confidence = {\n score: confidenceResult.score,\n level: confidenceResult.level,\n factors: confidenceResult.factors,\n recommendations: confidenceResult.recommendations,\n };\n } catch (error) {\n // Fallback confidence calculation\n const successRate =\n collectedComponents.length /\n (collectedComponents.length + failedComponents.length || 1);\n (fingerprintData as any).confidence = {\n score: successRate >= 0.8 ? 0.95 : successRate >= 0.6 ? 0.8 : 0.5,\n level:\n successRate >= 0.8 ? \"High\" : successRate >= 0.6 ? \"Medium\" : \"Low\",\n factors: {\n componentCount: collectedComponents.length,\n weightedScore: successRate,\n stabilityScore: successRate,\n entropyScore: successRate,\n spoofResistanceScore: successRate,\n },\n recommendations:\n successRate < 0.8 ? [\"Enable more fingerprinting components\"] : [],\n };\n }\n\n // Finalize fingerprint data\n const finalData: FingerprintData = {\n ...(fingerprintData as FingerprintData),\n hash,\n components: collectedComponents,\n collectionTime: performance.now() - startTime,\n };\n\n const result: FingerprintResult = {\n success: collectedComponents.length > 0,\n collectedComponents,\n failedComponents,\n confidence: confidenceResult || (fingerprintData as any).confidence,\n };\n\n if (collectedComponents.length > 0) {\n // Build stable core vector (invariants only)\n const browser = finalData.browser?.value;\n const screen = finalData.screen?.value;\n const uaStr = browser?.userAgent || \"\";\n const isSafari =\n /safari/i.test(uaStr) && !/chrome|chromium|opr|edg|edge/i.test(uaStr);\n const deviceType = (() => {\n const isMobileCH = (navigator as any).userAgentData?.mobile === true;\n const touch = (navigator as any).maxTouchPoints || 0;\n const w = screen?.width || 0;\n const h = screen?.height || 0;\n const minDim = Math.min(w, h);\n const maxDim = Math.max(w, h);\n\n // More precise detection: differentiate mobile, tablet, and desktop\n if (isMobileCH) {\n // Client Hints says mobile = definitely mobile\n return \"mobile\";\n }\n\n if (touch > 0) {\n // Has touch capability\n if (minDim <= 480) {\n return \"mobile\"; // Small screen = phone\n } else if (minDim <= 1024 && maxDim <= 1366) {\n return \"tablet\"; // Medium screen = tablet\n } else {\n return \"tablet\"; // Large touch device = tablet\n }\n }\n\n // No touch, large screen = desktop\n if (minDim > 1024) {\n return \"desktop\";\n }\n\n // Small screen without touch = could be mobile in desktop mode\n // Default to mobile for safety\n return minDim <= 480 ? \"mobile\" : \"desktop\";\n })();\n\n // Collect device-specific signals (FingerprintJS-inspired)\n let deviceSignals: any = {};\n try {\n const { collectDeviceSignals } = await import(\n \"./fingerprint/device-signals\"\n );\n deviceSignals = collectDeviceSignals();\n } catch (error) {\n // Silently fail - device signals are optional\n }\n\n const coreVector: Record<string, any> = {\n // PRIORITY 1: Enhanced browser detection with precise Chromium-based browser identification\n ua: (() => {\n try {\n const browserInfo = getBrowserInfo();\n\n // Use the precise browser family for maximum differentiation\n // This properly distinguishes Brave, Arc, Opera, etc. from Chrome\n return browserInfo.family; // e.g., \"brave-chromium\", \"arc-chromium\", \"chrome\", \"firefox\"\n } catch {\n // Fallback to legacy detection if imports fail\n const ua = uaStr;\n const m = ua.match(\n /(chrome|safari|firefox|edge|edg|brave|opera|opr|chromium)/i\n );\n const family = (\n m?.[1] ||\n ua.split(\" \")[0] ||\n \"unknown\"\n ).toLowerCase();\n return family;\n }\n })(),\n // PRIORITY 2: Timezone (very stable, changes rarely)\n timezone: browser?.timezone || \"unknown\",\n\n // PRIORITY 3: Primary language only (most stable language preference)\n // Remove secondary languages as they can change more frequently\n primaryLanguage: (() => {\n try {\n const languages = browser?.languages;\n if (Array.isArray(languages) && languages.length > 0 && languages[0]) {\n return languages[0].toLowerCase().split(\"-\")[0]; // Only language code (en, pt, fr), not region\n }\n // Fallback to navigator.language if browser.languages is not available\n if (typeof navigator !== 'undefined' && navigator.language) {\n return navigator.language.toLowerCase().split(\"-\")[0];\n }\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n })(),\n // PRIORITY 4: Platform (ultra-stable - OS doesn't change)\n platform: (browser?.platform || \"unknown\").toLowerCase(),\n\n // PRIORITY 5: Device type (critical for differentiation, ultra-stable)\n deviceType,\n\n // ❌ PRIORITY 6: Screen - REMOVED FROM stableCoreVector\n // REASON: Screen properties are UNSTABLE across all device types:\n //\n // Desktop:\n // - DevTools changes viewport (lateral vs bottom)\n // - Browser zoom changes dimensions\n // - Window resize changes available space\n //\n // Mobile:\n // - Address bar appears/disappears on scroll\n // - Virtual keyboard opens/closes\n // - Screen rotation (portrait ↔ landscape)\n // - Pull-to-refresh changes viewport\n //\n // RESULT: Even \"bucket\" detection is unreliable due to viewport changes\n //\n // SOLUTION: Device differentiation now relies ONLY on:\n // 1. screenFrame (bezel measurements - MORE stable)\n // 2. hardware (cores, memory, arch - STABLE)\n // 3. display (color depth, gamut - STABLE)\n // 4. platform + deviceType + ua (ULTRA-STABLE)\n // 5. timezone + primaryLanguage (USER-STABLE)\n //\n // Note: screen is still collected in full fingerprint for analytics,\n // but excluded from stableCoreHash to ensure visitor identification stability\n // CRITICAL: Do NOT include availability flags (canvas/webgl/audio) in stableCoreVector\n // These flags can change between requests due to timeouts, permissions, or hardware issues\n // and would cause the stableCoreHash to change, breaking visitor identification\n // CRITICAL: Plugins removed from stableCoreVector - they are unstable:\n // - Can vary between normal/incognito mode\n // - Can be blocked/hidden in private mode\n // - Can be installed/uninstalled by users\n // - Extensions can change plugin list\n // - Order may vary despite sorting\n // Keep plugins only in full fingerprint for analysis, not in stableCoreHash\n // plugins: removed for stability\n\n // PRIORITY 7: Enhanced hardware characteristics with precise 2024 buckets\n // Use advanced hardware buckets based on current hardware landscape for maximum stability\n hardware: (() => {\n const cores = deviceSignals.hardwareConcurrency;\n const memory = deviceSignals.deviceMemory;\n\n if (!cores && !memory) return undefined;\n\n // Enhanced CPU core buckets based on 2024 hardware trends\n const getCoreBucket = (cores: number) => {\n // High-end workstations and servers (2024: up to 128 cores available)\n if (cores >= 32) return \"workstation\"; // 32+ cores: Threadripper, Xeon\n if (cores >= 20) return \"ultra\"; // 20-31 cores: High-end desktop\n if (cores >= 16) return \"high\"; // 16-19 cores: Gaming/content creation\n if (cores >= 12) return \"premium\"; // 12-15 cores: Modern mid-high desktop\n if (cores >= 8) return \"mid\"; // 8-11 cores: Standard desktop/laptop\n if (cores >= 6) return \"normal\"; // 6-7 cores: Entry-level modern\n if (cores >= 4) return \"basic\"; // 4-5 cores: Older desktop/budget laptop\n if (cores >= 2) return \"low\"; // 2-3 cores: Older mobile/budget\n return \"minimal\"; // 1 core: Legacy/embedded\n };\n\n // Enhanced memory buckets based on 2024 standards\n const getMemoryBucket = (memory: number) => {\n // Professional/Gaming systems (2024: up to 256GB+ available)\n if (memory >= 64) return \"workstation\"; // 64GB+: Professional/content creation\n if (memory >= 32) return \"ultra\"; // 32-63GB: High-end gaming/work\n if (memory >= 24) return \"high\"; // 24-31GB: Premium gaming\n if (memory >= 16) return \"premium\"; // 16-23GB: Standard gaming/work\n if (memory >= 12) return \"mid\"; // 12-15GB: Good performance\n if (memory >= 8) return \"normal\"; // 8-11GB: Acceptable performance\n if (memory >= 4) return \"basic\"; // 4-7GB: Budget desktop/laptop\n if (memory >= 2) return \"low\"; // 2-3GB: Older mobile devices\n return \"minimal\"; // <2GB: Legacy/embedded devices\n };\n\n // CPU architecture detection for additional differentiation\n const getArchitectureBucket = (arch?: number) => {\n if (arch === undefined) return \"unknown\";\n // Based on floating point NaN behavior patterns\n if (arch === 255) return \"arm64\"; // ARM processors\n if (arch === 0) return \"x86_64\"; // Intel/AMD x86-64\n return \"other\"; // Other architectures\n };\n\n // Combined hardware profile for enhanced bucketing\n const coresBucket = cores ? getCoreBucket(cores) : \"unknown\";\n const memoryBucket = memory ? getMemoryBucket(memory) : \"unknown\";\n const archBucket = getArchitectureBucket(deviceSignals.architecture);\n\n // Create hardware class based on combined characteristics\n const getHardwareClass = (\n cores: string,\n memory: string,\n arch: string\n ) => {\n // Professional workstation patterns\n if (\n (cores === \"workstation\" || cores === \"ultra\") &&\n (memory === \"workstation\" || memory === \"ultra\")\n ) {\n return \"professional\";\n }\n\n // High-end gaming/content creation\n if (\n (cores === \"high\" || cores === \"premium\") &&\n (memory === \"high\" || memory === \"premium\" || memory === \"ultra\")\n ) {\n return \"enthusiast\";\n }\n\n // Standard desktop/laptop\n if (\n (cores === \"mid\" || cores === \"normal\") &&\n (memory === \"mid\" || memory === \"normal\" || memory === \"premium\")\n ) {\n return \"mainstream\";\n }\n\n // Budget/older systems\n if (\n (cores === \"basic\" || cores === \"low\") &&\n (memory === \"basic\" || memory === \"low\" || memory === \"normal\")\n ) {\n return \"budget\";\n }\n\n // Mobile/embedded devices\n if (cores === \"minimal\" || memory === \"minimal\") {\n return \"mobile\";\n }\n\n // Mixed/uncertain configuration\n return \"mixed\";\n };\n\n return {\n cores: coresBucket,\n memory: memoryBucket,\n arch: archBucket,\n class: getHardwareClass(coresBucket, memoryBucket, archBucket),\n // Touch capability for mobile/desktop differentiation\n touch: deviceSignals.touchSupport?.maxTouchPoints\n ? deviceSignals.touchSupport.maxTouchPoints >= 10\n ? \"multi\"\n : deviceSignals.touchSupport.maxTouchPoints >= 5\n ? \"standard\"\n : \"basic\"\n : \"none\",\n };\n })(),\n\n // PRIORITY 8: Screen frame (bezel measurements) for mobile device differentiation\n // CRITICAL: This is STABLE across page loads and provides device-specific fingerprint\n // Samsung S22 vs A54 have different screen frames despite similar resolutions\n screenFrame: deviceSignals?.screenFrame\n ? {\n top: deviceSignals.screenFrame.top || 0,\n right: deviceSignals.screenFrame.right || 0,\n bottom: deviceSignals.screenFrame.bottom || 0,\n left: deviceSignals.screenFrame.left || 0,\n }\n : undefined,\n\n // PRIORITY 9: Enhanced color and display capabilities bucketing\n display: (() => {\n const depth = deviceSignals.colorDepth;\n const gamut = deviceSignals.colorGamut;\n\n // Enhanced color depth classification\n const getDepthClass = (depth?: number) => {\n if (!depth) return \"unknown\";\n if (depth >= 48) return \"ultra_high\"; // 48-bit+ (professional displays)\n if (depth >= 32) return \"high\"; // 32-bit (high-end displays)\n if (depth >= 24) return \"normal\"; // 24-bit (standard displays)\n if (depth >= 16) return \"basic\"; // 16-bit (older displays)\n return \"low\"; // <16-bit (legacy displays)\n };\n\n // Color gamut classification for display capabilities\n const getGamutClass = (gamut?: string) => {\n if (!gamut) return \"unknown\";\n switch (gamut) {\n case \"rec2020\":\n return \"professional\"; // Professional/HDR displays\n case \"p3\":\n return \"enhanced\"; // Modern displays (Apple, etc.)\n case \"srgb\":\n return \"standard\"; // Standard displays\n default:\n return \"unknown\";\n }\n };\n\n // Combined display quality classification\n const getDisplayClass = (depthClass: string, gamutClass: string) => {\n if (depthClass === \"ultra_high\" || gamutClass === \"professional\") {\n return \"professional\"; // Pro displays\n }\n if (depthClass === \"high\" || gamutClass === \"enhanced\") {\n return \"premium\"; // High-end displays\n }\n if (depthClass === \"normal\" && gamutClass === \"standard\") {\n return \"standard\"; // Standard displays\n }\n if (depthClass === \"basic\") {\n return \"basic\"; // Older displays\n }\n return \"legacy\"; // Legacy displays\n };\n\n const depthClass = getDepthClass(depth);\n const gamutClass = getGamutClass(gamut);\n\n return {\n depth: depthClass,\n gamut: gamutClass,\n class: getDisplayClass(depthClass, gamutClass),\n };\n })(),\n };\n\n // ADDITIONAL ENTROPY: Add a deterministic but unique component based on ultra-stable signals\n // This helps prevent collisions while maintaining deterministic behavior\n // Note: screen removed as it's unstable (viewport changes)\n const entropyComponents = [\n coreVector.ua || \"\",\n coreVector.platform || \"\",\n coreVector.deviceType || \"\",\n coreVector.timezone || \"\",\n coreVector.primaryLanguage || \"\",\n ].filter(Boolean);\n\n if (entropyComponents.length >= 3) {\n // Create a stable entropy string from the most stable components\n const entropyString = entropyComponents.join(\"|\");\n // Add a simple checksum for additional uniqueness (deterministic)\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum =\n ((checksum << 5) - checksum + entropyString.charCodeAt(i)) &\n 0xffffffff;\n }\n coreVector._entropy = Math.abs(checksum).toString(36).substring(0, 8);\n }\n\n // EXCLUSIONS from stableCoreVector for maximum stability:\n // - Exact screen dimensions (use buckets instead)\n // - Browser versions (use family only)\n // - Secondary languages (use primary only)\n // - Pixel ratio (varies with zoom)\n // - Plugin lists (change frequently)\n // - Canvas/WebGL availability (can timeout)\n // - Color gamut (varies with settings)\n // - Screen frame (can vary slightly)\n // - Vendor flavors (can change)\n // - Exact hardware values (use buckets)\n\n // DEBUG: Log coreVector components for monitoring\n if (\n opts.debug ||\n (typeof window !== \"undefined\" && (window as any)._rabbitTrackerDebug)\n ) {\n console.log(\"[RabbitTracker DEBUG] coreVector components:\", {\n ua: coreVector.ua,\n platform: coreVector.platform,\n deviceType: coreVector.deviceType,\n timezone: coreVector.timezone,\n primaryLanguage: coreVector.primaryLanguage,\n hasHardware: !!coreVector.hardware,\n hasDisplay: !!coreVector.display,\n hasScreenFrame: !!coreVector.screenFrame,\n _entropy: coreVector._entropy,\n });\n }\n\n // Generate ultra-stable hash with additional collision resistance\n const stableCoreHash = hashStableCore(coreVector, opts.debug);\n\n // CRITICAL: Generate enhanced fingerprint hash combining STABLE components only\n // Filter out unstable components that change between requests (canvas, webgl, audio)\n // These components can vary due to GPU state, rendering context, permissions, etc.\n const unstableComponentKeys = [\n \"canvas\",\n \"webgl\",\n \"audio\", // Visual/audio fingerprints (vary with context)\n \"mathFingerprint\",\n \"fontPreferences\",\n \"enhancedFonts\", // Measurement-based (can timeout/vary)\n \"dateTimeLocale\",\n \"accessibilityEnhanced\", // Locale/accessibility (can change)\n \"domBlockers\",\n \"pluginsEnhanced\", // Privacy tools detection (can change)\n ];\n\n const stableComponentValues: Record<string, any> = {};\n for (const [key, value] of Object.entries(componentValues)) {\n if (!unstableComponentKeys.includes(key)) {\n stableComponentValues[key] = value;\n }\n }\n\n const enhancedComponentValues = {\n ...stableComponentValues, // STABLE components only (screen, browser, system, etc.)\n _stableCore: coreVector, // + Ultra-stable components (ua, platform, deviceType, etc.)\n // REMOVED: _hourlyEntropy - was causing visitor ID instability (same user = different IDs)\n };\n\n // Generate collision-resistant fingerprint hash\n const enhancedHash = hashFingerprint(enhancedComponentValues, opts.debug);\n\n // Update finalData with the enhanced hash\n finalData.hash = enhancedHash;\n\n // Log stable core components for debugging collision issues\n if (opts.debug) {\n console.log(\"[RabbitTracker] Ultra-stable core vector:\", {\n components: Object.keys(coreVector),\n entropy: coreVector._entropy,\n stableCoreHash: stableCoreHash.substring(0, 16),\n enhancedFingerprintHash: enhancedHash.substring(0, 16),\n ua: coreVector.ua,\n deviceType: coreVector.deviceType,\n platform: coreVector.platform,\n timezone: coreVector.timezone,\n hasScreenFrame: !!coreVector.screenFrame,\n hardwareClass: coreVector.hardware?.class,\n displayClass: coreVector.display?.class,\n totalComponentsInHash: Object.keys(enhancedComponentValues).length,\n });\n }\n\n result.data = {\n ...finalData,\n stableCoreHash,\n stableCoreVector: coreVector,\n } as any;\n\n // Log collection summary if debug mode\n if (opts.debug) {\n console.log(\"[RabbitTracker] Fingerprint collection completed:\", {\n collected: collectedComponents.length,\n failed: failedComponents.length,\n duration: finalData.collectionTime,\n enhancedFingerprintHash: finalData.hash,\n stableCoreHash,\n confidence: confidenceResult?.level || \"Unknown\",\n score: confidenceResult?.score || 0,\n collisionResistance:\n \"Enhanced with stable + unstable components (no temporal entropy)\",\n });\n\n if (confidenceResult?.recommendations.length) {\n console.log(\n \"[RabbitTracker] Confidence recommendations:\",\n confidenceResult.recommendations\n );\n }\n }\n } else {\n result.error = \"No components could be collected\";\n }\n\n return result;\n}\n\n/**\n * Generate visitor ID from fingerprint\n */\nexport function generateVisitorIdFromFingerprint(\n fingerprintData: FingerprintData\n): string {\n return generateVisitorId(fingerprintData.hash);\n}\n\n/**\n * Get a lightweight fingerprint (GDPR-compliant)\n */\nexport async function getLightweightFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: true,\n includeInvasive: false,\n excludeComponents: [\"canvas\", \"webgl\", \"audio\"],\n timeout: 2000,\n });\n}\n\n/**\n * Get a complete fingerprint (enhanced mode)\n */\nexport async function getCompleteFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n });\n}\n\n/**\n * Clear session fingerprint cache (memory only)\n */\nexport function clearFingerprintCache(): void {\n sessionCache.clear();\n}\n\n/**\n * Check if fingerprinting is available\n */\nexport function isFingerprintingAvailable(): boolean {\n // At minimum, we need screen and browser fingerprinting\n return isScreenAvailable() && isBrowserFingerprintingAvailable();\n}\n\n/**\n * Get available fingerprinting components\n */\nexport function getAvailableComponents(): FingerprintComponentType[] {\n const available: FingerprintComponentType[] = [];\n\n if (isCanvasAvailable()) available.push(\"canvas\");\n if (isWebGLAvailable()) available.push(\"webgl\");\n if (isAudioAvailable()) available.push(\"audio\");\n if (isFontDetectionAvailable()) available.push(\"fonts\");\n if (isScreenAvailable()) available.push(\"screen\");\n if (isBrowserFingerprintingAvailable()) available.push(\"browser\");\n\n return available;\n}\n","/**\n * Anti-Adblock Manager\n * Implements multiple transport methods to bypass adblockers\n * Includes WebSocket, Resource Spoofing, and WebRTC fallbacks\n */\n\nexport interface TransportResponse {\n success: boolean;\n method: string;\n latency?: number;\n error?: string;\n}\n\nexport interface AntiAdblockConfig {\n enabled: boolean;\n methods: (\"elysia-websocket\" | \"fetch\" | \"webrtc\")[];\n fallbackDelay: number;\n maxRetries: number;\n debug: boolean;\n}\n\n/**\n * Base Transport Interface\n */\nexport interface Transport {\n name: string;\n available: boolean;\n send(data: any, endpoint: string): Promise<TransportResponse>;\n destroy?(): void;\n}\n\n/**\n * Standard Fetch Transport\n */\nexport class FetchTransport implements Transport {\n name = \"fetch\";\n available = typeof fetch !== \"undefined\";\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n try {\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start,\n };\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n}\n\n/**\n * WebSocket Transport\n */\nexport class WebSocketTransport implements Transport {\n name = \"websocket\";\n available = typeof WebSocket !== \"undefined\";\n private ws?: WebSocket;\n private connected = false;\n private messageQueue: Array<{\n data: any;\n resolve: (value: TransportResponse) => void;\n }> = [];\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/^http/, \"ws\");\n }\n\n private async connect(): Promise<void> {\n if (this.connected || !this.available) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(`${this.baseUrl}/ws/track`);\n\n this.ws.onopen = () => {\n this.connected = true;\n this.processQueue();\n resolve();\n };\n\n this.ws.onerror = () => {\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n // Try to reconnect after 5 seconds\n setTimeout(() => this.connect().catch(() => {}), 5000);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n private processQueue(): void {\n while (this.messageQueue.length > 0 && this.connected) {\n const item = this.messageQueue.shift();\n if (item && this.ws) {\n try {\n this.ws.send(JSON.stringify(item.data));\n item.resolve({ success: true, method: this.name });\n } catch (error) {\n item.resolve({\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return {\n success: false,\n method: this.name,\n error: \"WebSocket not available\",\n };\n }\n\n // Try to connect if not connected\n if (!this.connected) {\n try {\n await this.connect();\n } catch (error) {\n return {\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return new Promise((resolve) => {\n if (this.connected && this.ws) {\n try {\n this.ws.send(JSON.stringify(data));\n resolve({\n success: true,\n method: this.name,\n latency: Date.now() - start,\n });\n } catch (error) {\n resolve({\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else {\n // Queue message for later\n this.messageQueue.push({\n data,\n resolve: (response) =>\n resolve({\n ...response,\n latency: Date.now() - start,\n }),\n });\n }\n });\n }\n\n destroy(): void {\n if (this.ws) {\n this.ws.close();\n this.connected = false;\n }\n }\n}\n\n/**\n * Elysia WebSocket Transport (Native WebSocket for anti-adblock)\n */\nexport class ElysiaWebSocketTransport implements Transport {\n name = \"elysia-websocket\";\n available = typeof WebSocket !== \"undefined\";\n private ws?: WebSocket;\n private connected = false;\n private baseUrl: string;\n private token: string;\n\n constructor(baseUrl: string, token: string) {\n this.baseUrl = baseUrl;\n this.token = token;\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n try {\n if (!this.token) {\n throw new Error(\"Missing token for WebSocket connection\");\n }\n\n await this.connect();\n\n if (!this.ws || !this.connected) {\n throw new Error(\"WebSocket not connected\");\n }\n\n return new Promise((resolve, reject) => {\n const messageHandler = (event: MessageEvent) => {\n try {\n const response = JSON.parse(event.data);\n this.ws?.removeEventListener(\"message\", messageHandler);\n\n resolve({\n success: response.success || false,\n method: this.name,\n latency: Date.now() - start,\n });\n } catch (error) {\n this.ws?.removeEventListener(\"message\", messageHandler);\n reject(new Error(\"Failed to parse WebSocket response\"));\n }\n };\n\n this.ws?.addEventListener(\"message\", messageHandler);\n\n // Send the complete tracking data payload (includes fingerprintHash, stableCoreHash, etc.)\n this.ws?.send(\n JSON.stringify({\n // Include all data from the SDK payload\n ...data,\n // Override/ensure essential fields for WebSocket transport\n eventId: data.eventId || crypto.randomUUID(),\n sessionId: data.sessionId || data.s,\n eventType: data.eventType || data.type || \"websocket_event\",\n eventName: data.eventName || data.name,\n url: data.url,\n userAgent: data.userAgent || navigator.userAgent,\n timestamp: new Date().toISOString(),\n // Ensure these critical fields are included for identity resolution\n fingerprintHash: data.fingerprintHash,\n stableCoreHash: data.stableCoreHash,\n stableCoreVector: data.stableCoreVector,\n })\n );\n\n // Timeout after 5 seconds\n setTimeout(() => {\n this.ws?.removeEventListener(\"message\", messageHandler);\n reject(new Error(\"WebSocket response timeout\"));\n }, 5000);\n });\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async connect(): Promise<void> {\n if (this.connected && this.ws?.readyState === WebSocket.OPEN) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Convert HTTP/HTTPS to WS/WSS\n const url = new URL(this.baseUrl);\n const protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const wsUrl = `${protocol}//${url.host}/ws/track?token=${encodeURIComponent(this.token)}`;\n\n this.ws = new WebSocket(wsUrl);\n\n this.ws.onopen = () => {\n this.connected = true;\n resolve();\n };\n\n this.ws.onerror = () => {\n this.connected = false;\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n };\n\n // Timeout after 5 seconds\n setTimeout(() => {\n if (!this.connected) {\n this.ws?.close();\n reject(new Error(\"WebSocket connection timeout\"));\n }\n }, 5000);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n cleanup(): void {\n if (this.ws) {\n this.ws.close();\n this.connected = false;\n }\n }\n}\n\n/**\n * WebRTC DataChannel Transport (experimental - legacy)\n */\nexport class WebRTCTransport implements Transport {\n name = \"webrtc\";\n available = typeof (globalThis as any).RTCPeerConnection !== \"undefined\";\n private pc?: any;\n private dataChannel?: any;\n private connected = false;\n\n async send(data: any, _endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return {\n success: false,\n method: this.name,\n error: \"WebRTC not available\",\n };\n }\n\n try {\n await this.setupConnection();\n\n if (this.dataChannel && this.connected) {\n this.dataChannel.send(JSON.stringify(data));\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start,\n };\n } else {\n return {\n success: false,\n method: this.name,\n error: \"DataChannel not ready\",\n };\n }\n } catch (error) {\n return {\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async setupConnection(): Promise<void> {\n if (this.connected) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.pc = new (globalThis as any).RTCPeerConnection({\n iceServers: [{ urls: \"stun:stun.l.google.com:19302\" }],\n });\n\n this.dataChannel = this.pc.createDataChannel(\"tracking\", {\n ordered: false,\n maxRetransmits: 0,\n });\n\n this.dataChannel.onopen = () => {\n this.connected = true;\n resolve();\n };\n\n this.dataChannel.onerror = (error: any) => {\n reject(error);\n };\n\n // Note: This is a simplified WebRTC setup\n // In practice, you'd need a signaling server for full P2P\n } catch (error) {\n reject(error);\n }\n });\n }\n\n destroy(): void {\n if (this.dataChannel) {\n this.dataChannel.close();\n }\n if (this.pc) {\n this.pc.close();\n }\n this.connected = false;\n }\n}\n\n/**\n * Main Anti-Adblock Manager\n */\nexport class AntiAdblockManager {\n private config: AntiAdblockConfig;\n private transports: Transport[] = [];\n private baseUrl: string;\n private token: string;\n private stats = {\n totalRequests: 0,\n successfulRequests: 0,\n methodSuccess: new Map<string, number>(),\n methodFailures: new Map<string, number>(),\n };\n\n constructor(\n baseUrl: string,\n token: string,\n config: Partial<AntiAdblockConfig> = {}\n ) {\n this.baseUrl = baseUrl;\n this.token = token;\n this.config = {\n enabled: true,\n methods: [\"elysia-websocket\", \"fetch\"],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: false,\n ...config,\n };\n\n this.initializeTransports();\n }\n\n private initializeTransports(): void {\n const transportMap = {\n \"elysia-websocket\": () =>\n new ElysiaWebSocketTransport(this.baseUrl, this.token),\n fetch: () => new FetchTransport(),\n webrtc: () => new WebRTCTransport(),\n };\n\n this.transports = this.config.methods\n .map((method) => transportMap[method]?.())\n .filter(\n (transport): transport is Transport =>\n transport !== undefined && transport.available\n );\n\n if (this.config.debug) {\n console.log(\n \"[Zaplier] Anti-adblock initialized with transports:\",\n this.transports.map((t) => t.name)\n );\n }\n }\n\n /**\n * Send data using the best available transport\n */\n async send(\n data: any,\n endpoint: string = \"/tracking/event\"\n ): Promise<TransportResponse> {\n this.stats.totalRequests++;\n\n if (!this.config.enabled || this.transports.length === 0) {\n return {\n success: false,\n method: \"none\",\n error: \"No transports available\",\n };\n }\n\n let lastError = \"\";\n\n // Try each transport in order (sequential, not parallel)\n for (const transport of this.transports) {\n if (this.config.debug) {\n console.log(`[Zaplier] Trying transport: ${transport.name}`);\n }\n\n try {\n const result = await transport.send(data, `${this.baseUrl}${endpoint}`);\n\n // Update stats\n if (result.success) {\n this.stats.successfulRequests++;\n this.updateMethodStats(transport.name, true);\n\n if (this.config.debug) {\n console.log(\n `[Zaplier] ✅ Data sent successfully via ${transport.name} - STOPPING fallback chain`,\n result\n );\n }\n\n return result; // SUCCESS - stop trying other transports\n } else {\n this.updateMethodStats(transport.name, false);\n lastError = result.error || \"Unknown error\";\n\n if (this.config.debug) {\n console.warn(\n `[Zaplier] ❌ Transport ${transport.name} failed:`,\n result.error\n );\n }\n }\n } catch (error) {\n lastError = error instanceof Error ? error.message : String(error);\n this.updateMethodStats(transport.name, false);\n\n if (this.config.debug) {\n console.warn(\n `[Zaplier] ❌ Transport ${transport.name} threw error:`,\n error\n );\n }\n }\n\n // Wait before trying next transport\n if (this.config.fallbackDelay > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.config.fallbackDelay)\n );\n }\n }\n\n return {\n success: false,\n method: \"all_failed\",\n error: `All transports failed. Last error: ${lastError}`,\n };\n }\n\n private updateMethodStats(method: string, success: boolean): void {\n if (success) {\n this.stats.methodSuccess.set(\n method,\n (this.stats.methodSuccess.get(method) || 0) + 1\n );\n } else {\n this.stats.methodFailures.set(\n method,\n (this.stats.methodFailures.get(method) || 0) + 1\n );\n }\n }\n\n /**\n * Get transport statistics\n */\n getStats(): typeof this.stats {\n return { ...this.stats };\n }\n\n /**\n * Get success rate by method\n */\n getSuccessRates(): Record<string, number> {\n const rates: Record<string, number> = {};\n\n for (const transport of this.transports) {\n const successes = this.stats.methodSuccess.get(transport.name) || 0;\n const failures = this.stats.methodFailures.get(transport.name) || 0;\n const total = successes + failures;\n\n rates[transport.name] = total > 0 ? (successes / total) * 100 : 0;\n }\n\n return rates;\n }\n\n /**\n * Destroy all transports\n */\n destroy(): void {\n this.transports.forEach((transport) => {\n if (transport.destroy) {\n transport.destroy();\n }\n });\n this.transports = [];\n }\n\n /**\n * Test transport effectiveness\n */\n async testTransports(): Promise<Record<string, TransportResponse>> {\n const results: Record<string, TransportResponse> = {};\n const testData = { test: true, timestamp: Date.now() };\n\n for (const transport of this.transports) {\n try {\n results[transport.name] = await transport.send(\n testData,\n `${this.baseUrl}/test`\n );\n } catch (error) {\n results[transport.name] = {\n success: false,\n method: transport.name,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return results;\n }\n}\n","/**\n * Heatmap Engine\n * Captures click coordinates, scroll depth, mouse movements and rage clicks\n * for visual analytics and user behavior insights\n */\n\nexport interface HeatmapClick {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n element: string;\n timestamp: number;\n button: number;\n rageClick?: boolean;\n}\n\nexport interface HeatmapScroll {\n depth: number;\n maxDepth: number;\n timestamp: number;\n viewport: { width: number; height: number };\n}\n\nexport interface HeatmapMouseMove {\n path: Array<{ x: number; y: number; timestamp: number }>;\n timestamp: number;\n}\n\nexport interface HeatmapConfig {\n enabled: boolean;\n trackClicks: boolean;\n trackScrollDepth: boolean;\n trackMouseMoves: boolean;\n trackRageClicks: boolean;\n mouseMoveThrottle: number;\n batchInterval: number;\n maxClickBuffer: number;\n rageClickThreshold: number;\n rageClickTimeWindow: number;\n}\n\nexport class HeatmapEngine {\n private config: HeatmapConfig;\n private clicks: HeatmapClick[] = [];\n private scrollData: HeatmapScroll[] = [];\n private mouseMoves: Array<{ x: number; y: number; timestamp: number }> = [];\n private lastMouseMove = 0;\n private maxScrollDepth = 0;\n private batchTimer?: number;\n private isActive = false;\n private sessionId: string;\n private antiAdblockManager?: any;\n \n // Rage click detection\n private recentClicks: Array<{ x: number; y: number; timestamp: number }> = [];\n \n constructor(sessionId: string, config: Partial<HeatmapConfig> = {}) {\n this.sessionId = sessionId;\n this.config = {\n enabled: true,\n trackClicks: true,\n trackScrollDepth: true,\n trackMouseMoves: false, // Disabled by default for performance\n trackRageClicks: true,\n mouseMoveThrottle: 200,\n batchInterval: 10000, // 10 seconds\n maxClickBuffer: 500,\n rageClickThreshold: 3, // 3 clicks in time window = rage\n rageClickTimeWindow: 1000, // 1 second\n ...config\n };\n }\n\n /**\n * Start heatmap tracking\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n this.isActive = true;\n this.setupEventListeners();\n this.startBatchTimer();\n this.trackInitialViewport();\n\n return true;\n }\n\n /**\n * Stop heatmap tracking\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n this.removeEventListeners();\n \n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (this.config.trackClicks) {\n document.addEventListener('click', this.handleClick, true);\n }\n\n if (this.config.trackScrollDepth) {\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n document.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n if (this.config.trackMouseMoves) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n\n // Track viewport changes\n window.addEventListener('resize', this.handleResize);\n window.addEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n document.removeEventListener('click', this.handleClick, true);\n window.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleResize);\n window.removeEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Track initial viewport for context\n */\n private trackInitialViewport(): void {\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: scrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n }\n\n /**\n * Handle click events\n */\n private handleClick = (event: MouseEvent): void => {\n if (!this.config.trackClicks) return;\n\n const target = event.target as Element;\n const rect = target.getBoundingClientRect();\n const scrollX = window.pageXOffset || document.documentElement.scrollLeft;\n const scrollY = window.pageYOffset || document.documentElement.scrollTop;\n \n const click: HeatmapClick = {\n x: event.clientX,\n y: event.clientY,\n absoluteX: event.clientX + scrollX,\n absoluteY: event.clientY + scrollY,\n element: this.getElementSelector(target),\n timestamp: Date.now(),\n button: event.button\n };\n\n // Check for rage clicks\n if (this.config.trackRageClicks) {\n const isRage = this.detectRageClick(click.x, click.y, click.timestamp);\n if (isRage) {\n click.rageClick = true;\n }\n }\n\n this.clicks.push(click);\n\n // Prevent buffer overflow\n if (this.clicks.length > this.config.maxClickBuffer) {\n this.clicks = this.clicks.slice(-this.config.maxClickBuffer);\n }\n };\n\n /**\n * Handle scroll events\n */\n private handleScroll = (): void => {\n if (!this.config.trackScrollDepth) return;\n\n const scrollDepth = this.calculateScrollDepth();\n this.maxScrollDepth = Math.max(this.maxScrollDepth, scrollDepth);\n\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n\n // Limit scroll data points\n if (this.scrollData.length > 100) {\n this.scrollData = this.scrollData.slice(-50);\n }\n };\n\n /**\n * Handle mouse move events (throttled)\n */\n private handleMouseMove = (event: MouseEvent): void => {\n if (!this.config.trackMouseMoves) return;\n\n const now = Date.now();\n if (now - this.lastMouseMove < this.config.mouseMoveThrottle) {\n return;\n }\n this.lastMouseMove = now;\n\n this.mouseMoves.push({\n x: event.clientX,\n y: event.clientY,\n timestamp: now\n });\n\n // Limit mouse move data\n if (this.mouseMoves.length > 200) {\n this.mouseMoves = this.mouseMoves.slice(-100);\n }\n };\n\n /**\n * Handle viewport resize\n */\n private handleResize = (): void => {\n // Update scroll depth calculation on resize\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n };\n\n /**\n * Calculate current scroll depth as percentage\n */\n private calculateScrollDepth(): number {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const documentHeight = Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n );\n const viewportHeight = window.innerHeight;\n \n if (documentHeight <= viewportHeight) {\n return 100; // Page fits entirely in viewport\n }\n\n return Math.min(100, Math.round(((scrollTop + viewportHeight) / documentHeight) * 100));\n }\n\n /**\n * Detect rage clicks (multiple clicks in same area within time window)\n */\n private detectRageClick(x: number, y: number, timestamp: number): boolean {\n const clickRadius = 50; // pixels\n const timeWindow = this.config.rageClickTimeWindow;\n\n // Clean old clicks outside time window\n this.recentClicks = this.recentClicks.filter(\n click => timestamp - click.timestamp <= timeWindow\n );\n\n // Count clicks in the same area\n const nearbyClicks = this.recentClicks.filter(click => {\n const distance = Math.sqrt(\n Math.pow(click.x - x, 2) + Math.pow(click.y - y, 2)\n );\n return distance <= clickRadius;\n });\n\n // Add current click\n this.recentClicks.push({ x, y, timestamp });\n\n return nearbyClicks.length >= this.config.rageClickThreshold - 1;\n }\n\n /**\n * Get element selector for targeting\n */\n private getElementSelector(element: Element): string {\n // Try ID first\n if (element.id) {\n return `#${element.id}`;\n }\n\n // Try classes\n if (element.className && typeof element.className === 'string') {\n const classes = element.className.split(' ').filter(c => c.length > 0);\n if (classes.length > 0) {\n return `.${classes.slice(0, 2).join('.')}`;\n }\n }\n\n // Fallback to tag + nth-child\n const tag = element.tagName.toLowerCase();\n if (element.parentElement) {\n const siblings = Array.from(element.parentElement.children);\n const index = siblings.indexOf(element);\n return `${tag}:nth-child(${index + 1})`;\n }\n\n return tag;\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of heatmap data\n */\n private sendBatch(): void {\n if (this.clicks.length === 0 && this.scrollData.length === 0 && this.mouseMoves.length === 0) {\n return;\n }\n\n const payload = {\n sessionId: this.sessionId,\n pageMetadata: {\n url: window.location.href,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n documentSize: {\n width: Math.max(\n document.body.scrollWidth,\n document.body.offsetWidth,\n document.documentElement.clientWidth,\n document.documentElement.scrollWidth,\n document.documentElement.offsetWidth\n ),\n height: Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n )\n }\n },\n clicks: [...this.clicks],\n scrollData: [...this.scrollData],\n mouseMoves: this.config.trackMouseMoves ? [...this.mouseMoves] : [],\n maxScrollDepth: this.maxScrollDepth,\n timestamp: Date.now()\n };\n\n // Clear data after copying\n this.clicks = [];\n this.scrollData = [];\n this.mouseMoves = [];\n\n // Send to backend\n this.sendToBackend(payload);\n }\n\n /**\n * Set anti-adblock manager for WebRTC transport\n */\n setAntiAdblockManager(manager: any): void {\n this.antiAdblockManager = manager;\n }\n\n /**\n * Send data via WebRTC (anti-adblock) or fallback to standard fetch\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n // Try WebRTC first if anti-adblock manager is available\n if (this.antiAdblockManager) {\n const result = await this.antiAdblockManager.send(payload, '/api/heatmap/record');\n if (result.success) {\n return; // Success via WebRTC\n }\n }\n\n // Fallback to standard fetch\n const response = await fetch('/api/heatmap/track', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n if (!response.ok) {\n console.warn('[Zaplier] Heatmap batch failed to send');\n }\n } catch (error) {\n console.warn('[Zaplier] Heatmap error:', error);\n }\n }\n\n /**\n * Get current statistics\n */\n getStats(): {\n clickCount: number;\n maxScrollDepth: number;\n isRecording: boolean;\n mouseMovements: number;\n rageClicks: number;\n } {\n const rageClicks = this.clicks.filter(click => click.rageClick).length;\n \n return {\n clickCount: this.clicks.length,\n maxScrollDepth: this.maxScrollDepth,\n isRecording: this.isActive,\n mouseMovements: this.mouseMoves.length,\n rageClicks\n };\n }\n\n /**\n * Enable mouse movement tracking\n */\n enableMouseTracking(): void {\n if (this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = true;\n if (this.isActive) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n }\n\n /**\n * Disable mouse movement tracking\n */\n disableMouseTracking(): void {\n if (!this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = false;\n document.removeEventListener('mousemove', this.handleMouseMove);\n this.mouseMoves = [];\n }\n\n /**\n * Check if heatmap is recording\n */\n isRecording(): boolean {\n return this.isActive;\n }\n}","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$3 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$3 || {});\nconst testableAccessors$1 = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods$1 = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype$1 = {};\nconst isAngularZonePresent$1 = () => {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key])\n return untaintedBasePrototype$1[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent$1()) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache$1[cacheKey])\n return untaintedAccessorCache$1[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache$1[cacheKey])\n return untaintedMethodCache$1[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nconst index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n const hostEl = (\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null\n );\n return Boolean(\n hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2\n );\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(\n /\\sbackground-clip:\\s*text;/g,\n \" -webkit-background-clip: text; background-clip: text;\"\n );\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n const { cssText } = rule2;\n if (cssText.split('\"').length < 3) return cssText;\n const statement = [\"@import\", `url(${JSON.stringify(rule2.href)})`];\n if (rule2.layerName === \"\") {\n statement.push(`layer`);\n } else if (rule2.layerName) {\n statement.push(`layer(${rule2.layerName})`);\n }\n if (rule2.supportsText) {\n statement.push(`supports(${rule2.supportsText})`);\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n const rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n let sheetHref = s2.href;\n if (!sheetHref && s2.ownerNode && s2.ownerNode.ownerDocument) {\n sheetHref = s2.ownerNode.ownerDocument.location.href;\n }\n const stringifiedRules = Array.from(\n rules2,\n (rule2) => stringifyRule(rule2, sheetHref)\n ).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n let importStringified;\n try {\n importStringified = // for same-origin stylesheets,\n // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n let ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue({\n element,\n maskInputOptions,\n tagName,\n type,\n value,\n maskInputFn\n}) {\n let text = value || \"\";\n const actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n const chunkSize = 50;\n for (let x2 = 0; x2 < canvas.width; x2 += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n const pixelBuffer = new Uint32Array(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(\n ctx,\n x2,\n y,\n Math.min(chunkSize, canvas.width - x2),\n Math.min(chunkSize, canvas.height - y)\n ).data.buffer\n );\n if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n }\n }\n return true;\n}\nfunction isNodeMetaEqual(a2, b) {\n if (!a2 || !b || a2.type !== b.type) return false;\n if (a2.type === NodeType$3.Document)\n return a2.compatMode === b.compatMode;\n else if (a2.type === NodeType$3.DocumentType)\n return a2.name === b.name && a2.publicId === b.publicId && a2.systemId === b.systemId;\n else if (a2.type === NodeType$3.Comment || a2.type === NodeType$3.Text || a2.type === NodeType$3.CDATA)\n return a2.textContent === b.textContent;\n else if (a2.type === NodeType$3.Element)\n return a2.tagName === b.tagName && JSON.stringify(a2.attributes) === JSON.stringify(b.attributes) && a2.isSVG === b.isSVG && a2.needBlock === b.needBlock;\n return false;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n ) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, baseURL ?? window.location.href);\n } catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return (match == null ? void 0 : match[1]) ?? null;\n}\nfunction extractOrigin(url) {\n let origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(\n URL_IN_CSS_REF,\n (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === \"/\") {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split(\"/\");\n const parts = filePath.split(\"/\");\n stack.pop();\n for (const part of parts) {\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n }\n );\n}\nfunction normalizeCssString(cssText) {\n return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, \"\");\n}\nfunction splitCssText(cssText, style) {\n const childNodes2 = Array.from(style.childNodes);\n const splits = [];\n if (childNodes2.length > 1 && cssText && typeof cssText === \"string\") {\n const cssTextNorm = normalizeCssString(cssText);\n for (let i2 = 1; i2 < childNodes2.length; i2++) {\n if (childNodes2[i2].textContent && typeof childNodes2[i2].textContent === \"string\") {\n const textContentNorm = normalizeCssString(childNodes2[i2].textContent);\n for (let j = 3; j < textContentNorm.length; j++) {\n const bit = textContentNorm.substring(0, j);\n if (cssTextNorm.split(bit).length === 2) {\n const splitNorm = cssTextNorm.indexOf(bit);\n for (let k = splitNorm; k < cssText.length; k++) {\n if (normalizeCssString(cssText.substring(0, k)).length === splitNorm) {\n splits.push(cssText.substring(0, k));\n cssText = cssText.substring(k);\n break;\n }\n }\n break;\n }\n }\n }\n }\n }\n splits.push(cssText);\n return splits;\n}\nfunction markCssSplits(cssText, style) {\n return splitCssText(cssText, style).join(\"/* rr_split */\");\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (element instanceof HTMLFormElement) {\n return \"form\";\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nlet canvasService;\nlet canvasCtx;\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars2;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n let descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for (let eIndex = element.classList.length; eIndex--; ) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {\n }\n return false;\n}\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n }\n for (let eIndex = node2.classList.length; eIndex--; ) {\n const className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n let el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(`.${maskTextClass}`)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {\n }\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false,\n cssCaptured = false\n } = options;\n const rootId = getRootId(doc, mirror2);\n switch (n2.nodeType) {\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n2.compatMode\n // probably \"BackCompat\"\n };\n } else {\n return {\n type: NodeType$3.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc,\n needsMask,\n maskTextFn,\n rootId,\n cssCaptured\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: \"\",\n rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n const docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n const { needsMask, maskTextFn, rootId, cssCaptured } = options;\n const parent = index$1.parentNode(n2);\n const parentTagName = parent && parent.tagName;\n let textContent2 = \"\";\n const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isScript) {\n textContent2 = \"SCRIPT_PLACEHOLDER\";\n } else if (!cssCaptured) {\n textContent2 = index$1.textContent(n2);\n if (isStyle && textContent2) {\n textContent2 = absolutifyURLs(textContent2, getHref(options.doc));\n }\n }\n if (!isStyle && !isScript && textContent2 && needsMask) {\n textContent2 = maskTextFn ? maskTextFn(textContent2, index$1.parentElement(n2)) : textContent2.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent2 || \"\",\n rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n const {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions = {},\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false,\n rootId\n } = options;\n const needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n const tagName = getValidTagName$1(n2);\n let attributes = {};\n const len = n2.attributes.length;\n for (let i2 = 0; i2 < len; i2++) {\n const attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(\n doc,\n tagName,\n toLowerCase(attr.name),\n attr.value\n );\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s2) => {\n return s2.href === n2.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"style\" && n2.sheet) {\n let cssText = stringifyStylesheet(\n n2.sheet\n );\n if (cssText) {\n if (n2.childNodes.length > 1) {\n cssText = markCssSplits(cssText, n2);\n }\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n const value = n2.value;\n const checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName,\n value,\n maskInputOptions,\n maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n }\n } else if (!(\"__context\" in n2)) {\n const canvasDataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n const blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n const image = n2;\n const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n const priorCrossOrigin = image.crossOrigin;\n const recordInlineImage = () => {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\n `Cannot inline img src=${imageSrc}! Error: ${err}`\n );\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n const mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n2.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {\n }\n return {\n type: NodeType$3.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock,\n rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n } else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") && sn.attributes.as === \"script\" || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n /^msapplication-tile(image|color)$/\n ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild = false,\n inlineStylesheet = true,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions = {},\n inlineImages = false,\n recordCanvas = false,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout = 5e3,\n onStylesheetLoad,\n stylesheetLoadTimeout = 5e3,\n keepIframeSrcFn = () => false,\n newlyAddedElement = false,\n cssCaptured = false\n } = options;\n let { needsMask } = options;\n let { preserveWhiteSpace = true } = options;\n if (!needsMask) {\n const checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(\n n2,\n maskTextClass,\n maskTextSelector,\n checkAncestors\n );\n }\n const _serializedNode = serializeNode(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n cssCaptured\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n let id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n cssCaptured: false\n };\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n if (serializedNode.type === NodeType$3.Element && serializedNode.attributes._cssText !== void 0 && typeof serializedNode.attributes._cssText === \"string\") {\n bypassOptions.cssCaptured = true;\n }\n for (const childN of Array.from(index$1.childNodes(n2))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n let shadowRootEl = null;\n if (isElement(n2) && (shadowRootEl = index$1.shadowRoot(n2))) {\n for (const childN of Array.from(index$1.childNodes(shadowRootEl))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(shadowRootEl) && (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n const parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(\n n2,\n () => {\n const iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(\n n2,\n serializedIframeNode\n );\n }\n }\n },\n iframeLoadTimeout\n );\n }\n if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(\n n2,\n () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(\n n2,\n serializedLinkNode\n );\n }\n }\n },\n stylesheetLoadTimeout\n );\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n const {\n mirror: mirror2 = new Mirror(),\n blockClass = \"rr-block\",\n blockSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n inlineImages = false,\n recordCanvas = false,\n maskAllInputs = false,\n maskTextFn,\n maskInputFn,\n slimDOM = false,\n dataURLOptions,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn = () => false\n } = options || {};\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n }\n ) : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, \"g\");\nconst mediaSelectorPlugin = {\n postcssPlugin: \"postcss-custom-selectors\",\n prepare() {\n return {\n postcssPlugin: \"postcss-custom-selectors\",\n AtRule: function(atrule) {\n if (atrule.params.match(MEDIA_SELECTOR_GLOBAL)) {\n atrule.params = atrule.params.replace(MEDIA_SELECTOR_GLOBAL, \"$1-$2\");\n }\n }\n };\n }\n};\nconst pseudoClassPlugin = {\n postcssPlugin: \"postcss-hover-classes\",\n prepare: function() {\n const fixed = [];\n return {\n Rule: function(rule2) {\n if (fixed.indexOf(rule2) !== -1) {\n return;\n }\n fixed.push(rule2);\n rule2.selectors.forEach(function(selector) {\n if (selector.includes(\":hover\")) {\n rule2.selector += \",\\n\" + selector.replace(/:hover/g, \".\\\\:hover\");\n }\n });\n }\n };\n }\n};\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser$1 = { exports: {} };\nvar x$1 = String;\nvar create$1 = function() {\n return { isColorSupported: false, reset: x$1, bold: x$1, dim: x$1, italic: x$1, underline: x$1, inverse: x$1, hidden: x$1, strikethrough: x$1, black: x$1, red: x$1, green: x$1, yellow: x$1, blue: x$1, magenta: x$1, cyan: x$1, white: x$1, gray: x$1, bgBlack: x$1, bgRed: x$1, bgGreen: x$1, bgYellow: x$1, bgBlue: x$1, bgMagenta: x$1, bgCyan: x$1, bgWhite: x$1 };\n};\npicocolors_browser$1.exports = create$1();\npicocolors_browser$1.exports.createColors = create$1;\nvar picocolors_browserExports$1 = picocolors_browser$1.exports;\nconst __viteBrowserExternal$2 = {};\nconst __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal$2\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nlet pico$1 = picocolors_browserExports$1;\nlet terminalHighlight$1$1 = require$$2$1;\nlet CssSyntaxError$3$1 = class CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin22) {\n super(message);\n this.name = \"CssSyntaxError\";\n this.reason = message;\n if (file) {\n this.file = file;\n }\n if (source) {\n this.source = source;\n }\n if (plugin22) {\n this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n this.line = line;\n this.column = column;\n } else {\n this.line = line.line;\n this.column = line.column;\n this.endLine = column.line;\n this.endColumn = column.column;\n }\n }\n this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError);\n }\n }\n setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"<css input>\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n }\n showSourceCode(color) {\n if (!this.source) return \"\";\n let css = this.source;\n if (color == null) color = pico$1.isColorSupported;\n if (terminalHighlight$1$1) {\n if (color) css = terminalHighlight$1$1(css);\n }\n let lines = css.split(/\\r?\\n/);\n let start = Math.max(this.line - 3, 0);\n let end = Math.min(this.line + 2, lines.length);\n let maxWidth = String(end).length;\n let mark, aside;\n if (color) {\n let { bold, gray, red } = pico$1.createColors(true);\n mark = (text) => bold(red(text));\n aside = (text) => gray(text);\n } else {\n mark = aside = (str) => str;\n }\n return lines.slice(start, end).map((line, index2) => {\n let number = start + 1 + index2;\n let gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === this.line) {\n let spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n }\n toString() {\n let code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n }\n};\nvar cssSyntaxError$1 = CssSyntaxError$3$1;\nCssSyntaxError$3$1.default = CssSyntaxError$3$1;\nvar symbols$1 = {};\nsymbols$1.isClean = Symbol(\"isClean\");\nsymbols$1.my = Symbol(\"my\");\nconst DEFAULT_RAW$1 = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize$1(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nlet Stringifier$2$1 = class Stringifier {\n constructor(builder) {\n this.builder = builder;\n }\n atrule(node2, semicolon) {\n let name = \"@\" + node2.name;\n let params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n let end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n }\n beforeAfter(node2, detect) {\n let value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n let buf = node2.parent;\n let depth = 0;\n while (buf && buf.type !== \"root\") {\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n let indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent;\n }\n }\n return value;\n }\n block(node2, start) {\n let between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n let after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n }\n body(node2) {\n let last = node2.nodes.length - 1;\n while (last > 0) {\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n let semicolon = this.raw(node2, \"semicolon\");\n for (let i2 = 0; i2 < node2.nodes.length; i2++) {\n let child = node2.nodes[i2];\n let before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n }\n comment(node2) {\n let left = this.raw(node2, \"left\", \"commentLeft\");\n let right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n }\n decl(node2, semicolon) {\n let between = this.raw(node2, \"between\", \"colon\");\n let string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n }\n document(node2) {\n this.body(node2);\n }\n raw(node2, own, detect) {\n let value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n let parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW$1[detect];\n let root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n let method = \"raw\" + capitalize$1(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk((i2) => {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW$1[detect];\n root2.rawCache[detect] = value;\n return value;\n }\n rawBeforeClose(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n }\n rawBeforeComment(root2, node2) {\n let value;\n root2.walkComments((i2) => {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n }\n rawBeforeDecl(root2, node2) {\n let value;\n root2.walkDecls((i2) => {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n }\n rawBeforeOpen(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawBeforeRule(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n }\n rawColon(root2) {\n let value;\n root2.walkDecls((i2) => {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n }\n rawEmptyBody(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n let value;\n root2.walk((i2) => {\n let p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n let parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n }\n rawSemicolon(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawValue(node2, prop) {\n let value = node2[prop];\n let raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n }\n root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n }\n rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n }\n stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\n \"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\"\n );\n }\n this[node2.type](node2, semicolon);\n }\n};\nvar stringifier$1 = Stringifier$2$1;\nStringifier$2$1.default = Stringifier$2$1;\nlet Stringifier$1$1 = stringifier$1;\nfunction stringify$4$1(node2, builder) {\n let str = new Stringifier$1$1(builder);\n str.stringify(node2);\n}\nvar stringify_1$1 = stringify$4$1;\nstringify$4$1.default = stringify$4$1;\nlet { isClean: isClean$2$1, my: my$2$1 } = symbols$1;\nlet CssSyntaxError$2$1 = cssSyntaxError$1;\nlet Stringifier2$1 = stringifier$1;\nlet stringify$3$1 = stringify_1$1;\nfunction cloneNode$1(obj, parent) {\n let cloned = new obj.constructor();\n for (let i2 in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n let value = obj[i2];\n let type = typeof value;\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map((j) => cloneNode$1(j, cloned));\n } else {\n if (type === \"object\" && value !== null) value = cloneNode$1(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nlet Node$4$1 = class Node2 {\n constructor(defaults = {}) {\n this.raws = {};\n this[isClean$2$1] = false;\n this[my$2$1] = true;\n for (let name in defaults) {\n if (name === \"nodes\") {\n this.nodes = [];\n for (let node2 of defaults[name]) {\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s2 = this.source;\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s2.input.from}:${s2.start.line}:${s2.start.column}$&`\n );\n }\n return error;\n }\n after(add) {\n this.parent.insertAfter(this, add);\n return this;\n }\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name];\n }\n return this;\n }\n before(add) {\n this.parent.insertBefore(this, add);\n return this;\n }\n cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n }\n clone(overrides = {}) {\n let cloned = cloneNode$1(this);\n for (let name in overrides) {\n cloned[name] = overrides[name];\n }\n return cloned;\n }\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n }\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n }\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts);\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n );\n }\n return new CssSyntaxError$2$1(message);\n }\n getProxyProcessor() {\n return {\n get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return () => node2.root().toProxy();\n } else {\n return node2[prop];\n }\n },\n set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */\n prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n }\n markDirty() {\n if (this[isClean$2$1]) {\n this[isClean$2$1] = false;\n let next = this;\n while (next = next.parent) {\n next[isClean$2$1] = false;\n }\n }\n }\n next() {\n if (!this.parent) return void 0;\n let index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n }\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n let index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n }\n positionInside(index2, stringRepresentation) {\n let string = stringRepresentation || this.toString();\n let column = this.source.start.column;\n let line = this.source.start.line;\n for (let i2 = 0; i2 < index2; i2++) {\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return { column, line };\n }\n prev() {\n if (!this.parent) return void 0;\n let index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n }\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n let end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n let stringRepresentation = this.toString();\n let index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = { column: start.column + 1, line: start.line };\n }\n return { end, start };\n }\n raw(prop, defaultType) {\n let str = new Stringifier2$1();\n return str.raw(this, prop, defaultType);\n }\n remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n }\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this;\n let foundSelf = false;\n for (let node2 of nodes) {\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n }\n root() {\n let result2 = this;\n while (result2.parent && result2.parent.type !== \"document\") {\n result2 = result2.parent;\n }\n return result2;\n }\n toJSON(_, inputs) {\n let fixed = {};\n let emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n let inputsNextIndex = 0;\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n let value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map((i2) => {\n if (typeof i2 === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if (typeof value === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n let inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map((input2) => input2.toJSON());\n }\n return fixed;\n }\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n }\n toString(stringifier2 = stringify$3$1) {\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n let result2 = \"\";\n stringifier2(this, (i2) => {\n result2 += i2;\n });\n return result2;\n }\n warn(result2, text, opts) {\n let data = { node: this };\n for (let i2 in opts) data[i2] = opts[i2];\n return result2.warn(text, data);\n }\n get proxyOf() {\n return this;\n }\n};\nvar node$1 = Node$4$1;\nNode$4$1.default = Node$4$1;\nlet Node$3$1 = node$1;\nlet Declaration$4$1 = class Declaration extends Node$3$1 {\n constructor(defaults) {\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = { ...defaults, value: String(defaults.value) };\n }\n super(defaults);\n this.type = \"decl\";\n }\n get variable() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n};\nvar declaration$1 = Declaration$4$1;\nDeclaration$4$1.default = Declaration$4$1;\nlet urlAlphabet$1 = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nlet customAlphabet$1 = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = \"\";\n let i2 = size;\n while (i2--) {\n id += alphabet[Math.random() * alphabet.length | 0];\n }\n return id;\n };\n};\nlet nanoid$1$1 = (size = 21) => {\n let id = \"\";\n let i2 = size;\n while (i2--) {\n id += urlAlphabet$1[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure$1 = { nanoid: nanoid$1$1, customAlphabet: customAlphabet$1 };\nlet { SourceMapConsumer: SourceMapConsumer$2$1, SourceMapGenerator: SourceMapGenerator$2$1 } = require$$2$1;\nlet { existsSync: existsSync$1, readFileSync: readFileSync$1 } = require$$2$1;\nlet { dirname: dirname$1$1, join: join$1 } = require$$2$1;\nfunction fromBase64$1(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nlet PreviousMap$2$1 = class PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n let prev = opts.map ? opts.map.prev : void 0;\n let text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1$1(this.mapFile);\n if (text) this.text = text;\n }\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2$1(this.text);\n }\n return this.consumerCache;\n }\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n let baseUri = /^data:application\\/json;base64,/;\n let charsetUri = /^data:application\\/json;charset=utf-?8,/;\n let uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64$1(text.substr(RegExp.lastMatch.length));\n }\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n }\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n }\n isMap(map) {\n if (typeof map !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n }\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n let start = css.lastIndexOf(comments.pop());\n let end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n }\n loadFile(path) {\n this.root = dirname$1$1(path);\n if (existsSync$1(path)) {\n this.mapFile = path;\n return readFileSync$1(path, \"utf-8\").toString().trim();\n }\n }\n loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n let prevPath = prev(file);\n if (prevPath) {\n let map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\n \"Unable to load previous source map: \" + prevPath.toString()\n );\n }\n return map;\n }\n } else if (prev instanceof SourceMapConsumer$2$1) {\n return SourceMapGenerator$2$1.fromSourceMap(prev).toString();\n } else if (prev instanceof SourceMapGenerator$2$1) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\n \"Unsupported previous source map format: \" + prev.toString()\n );\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n let map = this.annotation;\n if (file) map = join$1(dirname$1$1(file), map);\n return this.loadFile(map);\n }\n }\n startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n }\n withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n }\n};\nvar previousMap$1 = PreviousMap$2$1;\nPreviousMap$2$1.default = PreviousMap$2$1;\nlet { SourceMapConsumer: SourceMapConsumer$1$1, SourceMapGenerator: SourceMapGenerator$1$1 } = require$$2$1;\nlet { fileURLToPath: fileURLToPath$1, pathToFileURL: pathToFileURL$1$1 } = require$$2$1;\nlet { isAbsolute: isAbsolute$1, resolve: resolve$1$1 } = require$$2$1;\nlet { nanoid: nanoid$2 } = nonSecure$1;\nlet terminalHighlight$2 = require$$2$1;\nlet CssSyntaxError$1$1 = cssSyntaxError$1;\nlet PreviousMap$1$1 = previousMap$1;\nlet fromOffsetCache$1 = Symbol(\"fromOffsetCache\");\nlet sourceMapAvailable$1$1 = Boolean(SourceMapConsumer$1$1 && SourceMapGenerator$1$1);\nlet pathAvailable$1$1 = Boolean(resolve$1$1 && isAbsolute$1);\nlet Input$4$1 = class Input {\n constructor(css, opts = {}) {\n if (css === null || typeof css === \"undefined\" || typeof css === \"object\" && !css.toString) {\n throw new Error(`PostCSS received ${css} instead of CSS string`);\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute$1(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1$1(opts.from);\n }\n }\n if (pathAvailable$1$1 && sourceMapAvailable$1$1) {\n let map = new PreviousMap$1$1(this.css, opts);\n if (map.text) {\n this.map = map;\n let file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"<input css \" + nanoid$2(6) + \">\";\n }\n if (this.map) this.map.file = this.from;\n }\n error(message, line, column, opts = {}) {\n let result2, endLine, endColumn;\n if (line && typeof line === \"object\") {\n let start = line;\n let end = column;\n if (typeof start.offset === \"number\") {\n let pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n let pos = this.fromOffset(end.offset);\n endLine = pos.line;\n endColumn = pos.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n let pos = this.fromOffset(line);\n line = pos.line;\n column = pos.col;\n }\n let origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1$1(\n message,\n origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line },\n origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n );\n } else {\n result2 = new CssSyntaxError$1$1(\n message,\n endLine === void 0 ? line : { column, line },\n endLine === void 0 ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n );\n }\n result2.input = { column, endColumn, endLine, line, source: this.css };\n if (this.file) {\n if (pathToFileURL$1$1) {\n result2.input.url = pathToFileURL$1$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n }\n fromOffset(offset) {\n let lastLine, lineToIndex;\n if (!this[fromOffsetCache$1]) {\n let lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n let prevIndex = 0;\n for (let i2 = 0, l2 = lines.length; i2 < l2; i2++) {\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache$1] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache$1];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n let min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n let max = lineToIndex.length - 2;\n let mid;\n while (min < max) {\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n }\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n }\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n let consumer = this.map.consumer();\n let from = consumer.originalPositionFor({ column, line });\n if (!from.source) return false;\n let to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine });\n }\n let fromUrl;\n if (isAbsolute$1(from.source)) {\n fromUrl = pathToFileURL$1$1(from.source);\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL$1$1(this.map.mapFile)\n );\n }\n let result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath$1) {\n result2.file = fileURLToPath$1(fromUrl);\n } else {\n throw new Error(`file: protocol is not available in this PostCSS build`);\n }\n }\n let source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n }\n toJSON() {\n let json = {};\n for (let name of [\"hasBOM\", \"css\", \"file\", \"id\"]) {\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = { ...this.map };\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n }\n get from() {\n return this.file || this.id;\n }\n};\nvar input$1 = Input$4$1;\nInput$4$1.default = Input$4$1;\nif (terminalHighlight$2 && terminalHighlight$2.registerInput) {\n terminalHighlight$2.registerInput(Input$4$1);\n}\nlet { SourceMapConsumer: SourceMapConsumer$3, SourceMapGenerator: SourceMapGenerator$3 } = require$$2$1;\nlet { dirname: dirname$2, relative: relative$1, resolve: resolve$2, sep: sep$1 } = require$$2$1;\nlet { pathToFileURL: pathToFileURL$2 } = require$$2$1;\nlet Input$3$1 = input$1;\nlet sourceMapAvailable$2 = Boolean(SourceMapConsumer$3 && SourceMapGenerator$3);\nlet pathAvailable$2 = Boolean(dirname$2 && resolve$2 && relative$1 && sep$1);\nlet MapGenerator$2$1 = class MapGenerator {\n constructor(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n addAnnotation() {\n let content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n let eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n }\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file));\n let root2 = prev.root || dirname$2(prev.file);\n let map;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer$3(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n }\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n let node2;\n for (let i2 = this.root.nodes.length - 1; i2 >= 0; i2--) {\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n }\n generate() {\n this.clearAnnotation();\n if (pathAvailable$2 && sourceMapAvailable$2 && this.isMap()) {\n return this.generateMap();\n } else {\n let result2 = \"\";\n this.stringify(this.root, (i2) => {\n result2 += i2;\n });\n return [result2];\n }\n }\n generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator$3.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [this.css];\n } else {\n return [this.css, this.map];\n }\n }\n generateString() {\n this.css = \"\";\n this.map = new SourceMapGenerator$3({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n let line = 1;\n let column = 1;\n let noSource = \"<no source>\";\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: \"\"\n };\n let lines, last;\n this.stringify(this.root, (str, node2, type) => {\n this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n let p = node2.parent || { raws: {} };\n let childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n this.map.addMapping(mapping);\n }\n }\n }\n });\n }\n isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.annotation);\n }\n return true;\n }\n isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n let annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.inline);\n }\n return true;\n }\n isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n }\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.withContent());\n }\n return true;\n }\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n }\n path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n let cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n let from = this.opts.to ? dirname$2(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname$2(resolve$2(from, this.mapOpts.annotation));\n }\n let path = relative$1(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n }\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk((node2) => {\n if (node2.source && node2.source.input.map) {\n let map = node2.source.input.map;\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map);\n }\n }\n });\n } else {\n let input2 = new Input$3$1(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n }\n setSourcesContent() {\n let already = {};\n if (this.root) {\n this.root.walk((node2) => {\n if (node2.source) {\n let from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\";\n this.map.setSourceContent(from, this.css);\n }\n }\n sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n }\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n }\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL$2) {\n let fileURL = pathToFileURL$2(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\n \"`map.absolute` option is not available in this PostCSS build\"\n );\n }\n }\n toUrl(path) {\n let cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep$1 === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n }\n};\nvar mapGenerator$1 = MapGenerator$2$1;\nlet Node$2$1 = node$1;\nlet Comment$4$1 = class Comment extends Node$2$1 {\n constructor(defaults) {\n super(defaults);\n this.type = \"comment\";\n }\n};\nvar comment$1 = Comment$4$1;\nComment$4$1.default = Comment$4$1;\nlet { isClean: isClean$1$1, my: my$1$1 } = symbols$1;\nlet Declaration$3$1 = declaration$1;\nlet Comment$3$1 = comment$1;\nlet Node$1$1 = node$1;\nlet parse$4$1, Rule$4$1, AtRule$4$1, Root$6$1;\nfunction cleanSource$1(nodes) {\n return nodes.map((i2) => {\n if (i2.nodes) i2.nodes = cleanSource$1(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp$1(node2) {\n node2[isClean$1$1] = false;\n if (node2.proxyOf.nodes) {\n for (let i2 of node2.proxyOf.nodes) {\n markDirtyUp$1(i2);\n }\n }\n}\nlet Container$7$1 = class Container extends Node$1$1 {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last);\n for (let node2 of nodes) this.proxyOf.nodes.push(node2);\n }\n this.markDirty();\n return this;\n }\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween);\n if (this.nodes) {\n for (let node2 of this.nodes) node2.cleanRaws(keepBetween);\n }\n }\n each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n let iterator = this.getIterator();\n let index2, result2;\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n }\n every(condition) {\n return this.nodes.every(condition);\n }\n getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n let iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n }\n getProxyProcessor() {\n return {\n get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return (...args) => {\n return node2[prop](\n ...args.map((i2) => {\n if (typeof i2 === \"function\") {\n return (child, index2) => i2(child.toProxy(), index2);\n } else {\n return i2;\n }\n })\n );\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return (cb) => {\n return node2[prop](\n (child, ...other) => cb(child.toProxy(), ...other)\n );\n };\n } else if (prop === \"root\") {\n return () => node2.root().toProxy();\n } else if (prop === \"nodes\") {\n return node2.nodes.map((i2) => i2.toProxy());\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n }\n index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n }\n insertAfter(exist, add) {\n let existIndex = this.index(exist);\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n insertBefore(exist, add) {\n let existIndex = this.index(exist);\n let type = existIndex === 0 ? \"prepend\" : false;\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex, 0, node2);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n normalize(nodes, sample) {\n if (typeof nodes === \"string\") {\n nodes = cleanSource$1(parse$4$1(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for (let i2 of nodes) {\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for (let i2 of nodes) {\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [nodes];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [new Declaration$3$1(nodes)];\n } else if (nodes.selector) {\n nodes = [new Rule$4$1(nodes)];\n } else if (nodes.name) {\n nodes = [new AtRule$4$1(nodes)];\n } else if (nodes.text) {\n nodes = [new Comment$3$1(nodes)];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n let processed = nodes.map((i2) => {\n if (!i2[my$1$1]) Container.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1$1]) markDirtyUp$1(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = this.proxyOf;\n return i2;\n });\n return processed;\n }\n prepend(...children) {\n children = children.reverse();\n for (let child of children) {\n let nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for (let node2 of nodes) this.proxyOf.nodes.unshift(node2);\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n }\n removeAll() {\n for (let node2 of this.proxyOf.nodes) node2.parent = void 0;\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n }\n removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n }\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls((decl) => {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n }\n some(condition) {\n return this.nodes.some(condition);\n }\n walk(callback) {\n return this.each((child, i2) => {\n let result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n }\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk((child, i2) => {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (name instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n }\n walkComments(callback) {\n return this.walk((child, i2) => {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n }\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk((child, i2) => {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n }\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk((child, i2) => {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n }\n get first() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n get last() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n};\nContainer$7$1.registerParse = (dependant) => {\n parse$4$1 = dependant;\n};\nContainer$7$1.registerRule = (dependant) => {\n Rule$4$1 = dependant;\n};\nContainer$7$1.registerAtRule = (dependant) => {\n AtRule$4$1 = dependant;\n};\nContainer$7$1.registerRoot = (dependant) => {\n Root$6$1 = dependant;\n};\nvar container$1 = Container$7$1;\nContainer$7$1.default = Container$7$1;\nContainer$7$1.rebuild = (node2) => {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4$1.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4$1.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3$1.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3$1.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6$1.prototype);\n }\n node2[my$1$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach((child) => {\n Container$7$1.rebuild(child);\n });\n }\n};\nlet Container$6$1 = container$1;\nlet LazyResult$4$1, Processor$3$1;\nlet Document$3$1 = class Document2 extends Container$6$1 {\n constructor(defaults) {\n super({ type: \"document\", ...defaults });\n if (!this.nodes) {\n this.nodes = [];\n }\n }\n toResult(opts = {}) {\n let lazy = new LazyResult$4$1(new Processor$3$1(), this, opts);\n return lazy.stringify();\n }\n};\nDocument$3$1.registerLazyResult = (dependant) => {\n LazyResult$4$1 = dependant;\n};\nDocument$3$1.registerProcessor = (dependant) => {\n Processor$3$1 = dependant;\n};\nvar document$1$1 = Document$3$1;\nDocument$3$1.default = Document$3$1;\nlet printed$1 = {};\nvar warnOnce$2$1 = function warnOnce(message) {\n if (printed$1[message]) return;\n printed$1[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nlet Warning$2$1 = class Warning {\n constructor(text, opts = {}) {\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for (let opt in opts) this[opt] = opts[opt];\n }\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n }\n};\nvar warning$1 = Warning$2$1;\nWarning$2$1.default = Warning$2$1;\nlet Warning$1$1 = warning$1;\nlet Result$3$1 = class Result {\n constructor(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n toString() {\n return this.css;\n }\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n let warning2 = new Warning$1$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n }\n warnings() {\n return this.messages.filter((i2) => i2.type === \"warning\");\n }\n get content() {\n return this.css;\n }\n};\nvar result$1 = Result$3$1;\nResult$3$1.default = Result$3$1;\nconst SINGLE_QUOTE$1 = \"'\".charCodeAt(0);\nconst DOUBLE_QUOTE$1 = '\"'.charCodeAt(0);\nconst BACKSLASH$1 = \"\\\\\".charCodeAt(0);\nconst SLASH$1 = \"/\".charCodeAt(0);\nconst NEWLINE$1 = \"\\n\".charCodeAt(0);\nconst SPACE$1 = \" \".charCodeAt(0);\nconst FEED$1 = \"\\f\".charCodeAt(0);\nconst TAB$1 = \"\t\".charCodeAt(0);\nconst CR$1 = \"\\r\".charCodeAt(0);\nconst OPEN_SQUARE$1 = \"[\".charCodeAt(0);\nconst CLOSE_SQUARE$1 = \"]\".charCodeAt(0);\nconst OPEN_PARENTHESES$1 = \"(\".charCodeAt(0);\nconst CLOSE_PARENTHESES$1 = \")\".charCodeAt(0);\nconst OPEN_CURLY$1 = \"{\".charCodeAt(0);\nconst CLOSE_CURLY$1 = \"}\".charCodeAt(0);\nconst SEMICOLON$1 = \";\".charCodeAt(0);\nconst ASTERISK$1 = \"*\".charCodeAt(0);\nconst COLON$1 = \":\".charCodeAt(0);\nconst AT$1 = \"@\".charCodeAt(0);\nconst RE_AT_END$1 = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nconst RE_WORD_END$1 = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nconst RE_BAD_BRACKET$1 = /.[\\r\\n\"'(/\\\\]/;\nconst RE_HEX_ESCAPE$1 = /[\\da-f]/i;\nvar tokenize$1 = function tokenizer(input2, options = {}) {\n let css = input2.css.valueOf();\n let ignore = options.ignoreErrors;\n let code, next, quote, content, escape;\n let escaped, escapePos, prev, n2, currentToken;\n let length = css.length;\n let pos = 0;\n let buffer = [];\n let returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch (code) {\n case NEWLINE$1:\n case SPACE$1:\n case TAB$1:\n case CR$1:\n case FEED$1: {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n } while (code === SPACE$1 || code === NEWLINE$1 || code === TAB$1 || code === CR$1 || code === FEED$1);\n currentToken = [\"space\", css.slice(pos, next)];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE$1:\n case CLOSE_SQUARE$1:\n case OPEN_CURLY$1:\n case CLOSE_CURLY$1:\n case COLON$1:\n case SEMICOLON$1:\n case CLOSE_PARENTHESES$1: {\n let controlChar = String.fromCharCode(code);\n currentToken = [controlChar, controlChar, pos];\n break;\n }\n case OPEN_PARENTHESES$1: {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE$1 && n2 !== DOUBLE_QUOTE$1 && n2 !== SPACE$1 && n2 !== NEWLINE$1 && n2 !== TAB$1 && n2 !== FEED$1 && n2 !== CR$1) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while (css.charCodeAt(escapePos - 1) === BACKSLASH$1) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n currentToken = [\"brackets\", css.slice(pos, next + 1), pos, next];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET$1.test(content)) {\n currentToken = [\"(\", \"(\", pos];\n } else {\n currentToken = [\"brackets\", content, pos, next];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE$1:\n case DOUBLE_QUOTE$1: {\n quote = code === SINGLE_QUOTE$1 ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while (css.charCodeAt(escapePos - 1) === BACKSLASH$1) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n currentToken = [\"string\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n case AT$1: {\n RE_AT_END$1.lastIndex = pos + 1;\n RE_AT_END$1.test(css);\n if (RE_AT_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END$1.lastIndex - 2;\n }\n currentToken = [\"at-word\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n case BACKSLASH$1: {\n next = pos;\n escape = true;\n while (css.charCodeAt(next + 1) === BACKSLASH$1) {\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH$1 && code !== SPACE$1 && code !== NEWLINE$1 && code !== TAB$1 && code !== CR$1 && code !== FEED$1) {\n next += 1;\n if (RE_HEX_ESCAPE$1.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE$1.test(css.charAt(next + 1))) {\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE$1) {\n next += 1;\n }\n }\n }\n currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n default: {\n if (code === SLASH$1 && css.charCodeAt(pos + 1) === ASTERISK$1) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\"comment\", css.slice(pos, next + 1), pos, next];\n pos = next;\n } else {\n RE_WORD_END$1.lastIndex = pos + 1;\n RE_WORD_END$1.test(css);\n if (RE_WORD_END$1.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END$1.lastIndex - 2;\n }\n currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back,\n endOfFile,\n nextToken,\n position\n };\n};\nlet Container$5$1 = container$1;\nlet AtRule$3$1 = class AtRule extends Container$5$1 {\n constructor(defaults) {\n super(defaults);\n this.type = \"atrule\";\n }\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = [];\n return super.append(...children);\n }\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = [];\n return super.prepend(...children);\n }\n};\nvar atRule$1 = AtRule$3$1;\nAtRule$3$1.default = AtRule$3$1;\nContainer$5$1.registerAtRule(AtRule$3$1);\nlet Container$4$1 = container$1;\nlet LazyResult$3$1, Processor$2$1;\nlet Root$5$1 = class Root extends Container$4$1 {\n constructor(defaults) {\n super(defaults);\n this.type = \"root\";\n if (!this.nodes) this.nodes = [];\n }\n normalize(child, sample, type) {\n let nodes = super.normalize(child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for (let node2 of nodes) {\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n }\n removeChild(child, ignore) {\n let index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return super.removeChild(child);\n }\n toResult(opts = {}) {\n let lazy = new LazyResult$3$1(new Processor$2$1(), this, opts);\n return lazy.stringify();\n }\n};\nRoot$5$1.registerLazyResult = (dependant) => {\n LazyResult$3$1 = dependant;\n};\nRoot$5$1.registerProcessor = (dependant) => {\n Processor$2$1 = dependant;\n};\nvar root$1 = Root$5$1;\nRoot$5$1.default = Root$5$1;\nContainer$4$1.registerRoot(Root$5$1);\nlet list$2$1 = {\n comma(string) {\n return list$2$1.split(string, [\",\"], true);\n },\n space(string) {\n let spaces = [\" \", \"\\n\", \"\t\"];\n return list$2$1.split(string, spaces);\n },\n split(string, separators, last) {\n let array = [];\n let current = \"\";\n let split = false;\n let func = 0;\n let inQuote = false;\n let prevQuote = \"\";\n let escape = false;\n for (let letter of string) {\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1$1 = list$2$1;\nlist$2$1.default = list$2$1;\nlet Container$3$1 = container$1;\nlet list$1$1 = list_1$1;\nlet Rule$3$1 = class Rule extends Container$3$1 {\n constructor(defaults) {\n super(defaults);\n this.type = \"rule\";\n if (!this.nodes) this.nodes = [];\n }\n get selectors() {\n return list$1$1.comma(this.selector);\n }\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null;\n let sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n};\nvar rule$1 = Rule$3$1;\nRule$3$1.default = Rule$3$1;\nContainer$3$1.registerRule(Rule$3$1);\nlet Declaration$2$1 = declaration$1;\nlet tokenizer2$1 = tokenize$1;\nlet Comment$2$1 = comment$1;\nlet AtRule$2$1 = atRule$1;\nlet Root$4$1 = root$1;\nlet Rule$2$1 = rule$1;\nconst SAFE_COMMENT_NEIGHBOR$1 = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition$1(tokens) {\n for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n let token = tokens[i2];\n let pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nlet Parser$1$1 = class Parser {\n constructor(input2) {\n this.input = input2;\n this.root = new Root$4$1();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = { input: input2, start: { column: 1, line: 1, offset: 0 } };\n }\n atrule(token) {\n let node2 = new AtRule$2$1();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n let type;\n let prev;\n let shift;\n let last = false;\n let open = false;\n let params = [];\n let brackets = [];\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while (prev && prev[0] === \"space\") {\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n }\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens);\n if (colon === false) return;\n let founded = 0;\n let token;\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\n \"Missed semicolon\",\n token[0] === \"word\" ? token[3] + 1 : token[2]\n );\n }\n colon(tokens) {\n let brackets = 0;\n let token, type, prev;\n for (let [i2, element] of tokens.entries()) {\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n }\n comment(token) {\n let node2 = new Comment$2$1();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n let text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n }\n createTokenizer() {\n this.tokenizer = tokenizer2$1(this.input);\n }\n decl(tokens, customProperty) {\n let node2 = new Declaration$2$1();\n this.init(node2, tokens[0][2]);\n let last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition$1(tokens)\n );\n node2.source.end.offset++;\n while (tokens[0][0] !== \"word\") {\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while (tokens.length) {\n let type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n let token;\n while (tokens.length) {\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([token]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n let firstSpaces = [];\n let next;\n while (tokens.length) {\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n let string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n let cache = tokens.slice(0);\n let str = \"\";\n for (let j = i2; j > 0; j--) {\n let type = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n let hasWord = tokens.some((i2) => i2[0] !== \"space\" && i2[0] !== \"comment\");\n if (hasWord) {\n node2.raws.between += firstSpaces.map((i2) => i2[1]).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n }\n doubleColon(token) {\n throw this.input.error(\n \"Double colon\",\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n );\n }\n emptyRule(token) {\n let node2 = new Rule$2$1();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n }\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n }\n endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n }\n freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n }\n // Helpers\n getPosition(offset) {\n let pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset\n };\n }\n init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n }\n other(start) {\n let end = false;\n let type = null;\n let colon = false;\n let bracket = null;\n let brackets = [];\n let customProperty = start[1].startsWith(\"--\");\n let tokens = [];\n let token = start;\n while (token) {\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n }\n parse() {\n let token;\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken();\n switch (token[0]) {\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n }\n precheckMissedSemicolon() {\n }\n raw(node2, prop, tokens, customProperty) {\n let token, type;\n let length = tokens.length;\n let value = \"\";\n let clean = true;\n let next, prev;\n for (let i2 = 0; i2 < length; i2 += 1) {\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR$1[prev] && !SAFE_COMMENT_NEIGHBOR$1[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i2) => all + i2[1], \"\");\n node2.raws[prop] = { raw, value };\n }\n node2[prop] = value;\n }\n rule(tokens) {\n tokens.pop();\n let node2 = new Rule$2$1();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n }\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType;\n let spaces = \"\";\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n }\n // Errors\n spacesAndCommentsFromStart(tokens) {\n let next;\n let spaces = \"\";\n while (tokens.length) {\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n }\n spacesFromEnd(tokens) {\n let lastTokenType;\n let spaces = \"\";\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n }\n stringFrom(tokens, from) {\n let result2 = \"\";\n for (let i2 = from; i2 < tokens.length; i2++) {\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n }\n unclosedBlock() {\n let pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n }\n unclosedBracket(bracket) {\n throw this.input.error(\n \"Unclosed bracket\",\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n );\n }\n unexpectedClose(token) {\n throw this.input.error(\n \"Unexpected }\",\n { offset: token[2] },\n { offset: token[2] + 1 }\n );\n }\n unknownWord(tokens) {\n throw this.input.error(\n \"Unknown word\",\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n );\n }\n unnamedAtrule(node2, token) {\n throw this.input.error(\n \"At-rule without name\",\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n );\n }\n};\nvar parser$1 = Parser$1$1;\nlet Container$2$1 = container$1;\nlet Parser2$1 = parser$1;\nlet Input$2$1 = input$1;\nfunction parse$3$1(css, opts) {\n let input2 = new Input$2$1(css, opts);\n let parser2 = new Parser2$1(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1$1 = parse$3$1;\nparse$3$1.default = parse$3$1;\nContainer$2$1.registerParse(parse$3$1);\nlet { isClean: isClean$3, my: my$3 } = symbols$1;\nlet MapGenerator$1$1 = mapGenerator$1;\nlet stringify$2$1 = stringify_1$1;\nlet Container$1$1 = container$1;\nlet Document$2$1 = document$1$1;\nlet warnOnce$1$1 = warnOnce$2$1;\nlet Result$2$1 = result$1;\nlet parse$2$1 = parse_1$1;\nlet Root$3$1 = root$1;\nconst TYPE_TO_CLASS_NAME$1 = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nconst PLUGIN_PROPS$1 = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nconst NOT_VISITORS$1 = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nconst CHILDREN$1 = 0;\nfunction isPromise$1(obj) {\n return typeof obj === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents$1(node2) {\n let key = false;\n let type = TYPE_TO_CLASS_NAME$1[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN$1,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [type, type + \"-\" + key, type + \"Exit\", type + \"Exit-\" + key];\n } else if (node2.append) {\n return [type, CHILDREN$1, type + \"Exit\"];\n } else {\n return [type, type + \"Exit\"];\n }\n}\nfunction toStack$1(node2) {\n let events;\n if (node2.type === \"document\") {\n events = [\"Document\", CHILDREN$1, \"DocumentExit\"];\n } else if (node2.type === \"root\") {\n events = [\"Root\", CHILDREN$1, \"RootExit\"];\n } else {\n events = getEvents$1(node2);\n }\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks$1(node2) {\n node2[isClean$3] = false;\n if (node2.nodes) node2.nodes.forEach((i2) => cleanMarks$1(i2));\n return node2;\n}\nlet postcss$2$1 = {};\nlet LazyResult$2$1 = class LazyResult {\n constructor(processor2, css, opts) {\n this.stringified = false;\n this.processed = false;\n let root2;\n if (typeof css === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks$1(css);\n } else if (css instanceof LazyResult || css instanceof Result$2$1) {\n root2 = cleanMarks$1(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n let parser2 = parse$2$1;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my$3]) {\n Container$1$1.rebuild(root2);\n }\n }\n this.result = new Result$2$1(processor2, root2, opts);\n this.helpers = { ...postcss$2$1, postcss: postcss$2$1, result: this.result };\n this.plugins = this.processor.plugins.map((plugin22) => {\n if (typeof plugin22 === \"object\" && plugin22.prepare) {\n return { ...plugin22, ...plugin22.prepare(this.result) };\n } else {\n return plugin22;\n }\n });\n }\n async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n }\n catch(onRejected) {\n return this.async().catch(onRejected);\n }\n finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n }\n getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n }\n handleError(error, node2) {\n let plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n let pluginName = plugin22.postcssPlugin;\n let pluginVer = plugin22.postcssVersion;\n let runtimeVer = this.result.processor.version;\n let a2 = pluginVer.split(\".\");\n let b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\n \"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\"\n );\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n }\n prepareVisitors() {\n this.listeners = {};\n let add = (plugin22, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = [];\n this.listeners[type].push([plugin22, cb]);\n };\n for (let plugin22 of this.plugins) {\n if (typeof plugin22 === \"object\") {\n for (let event in plugin22) {\n if (!PLUGIN_PROPS$1[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin22.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`\n );\n }\n if (!NOT_VISITORS$1[event]) {\n if (typeof plugin22[event] === \"object\") {\n for (let filter in plugin22[event]) {\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(\n plugin22,\n event + \"-\" + filter.toLowerCase(),\n plugin22[event][filter]\n );\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n }\n async runAsync() {\n this.plugin = 0;\n for (let i2 = 0; i2 < this.plugins.length; i2++) {\n let plugin22 = this.plugins[i2];\n let promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n try {\n await promise;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n let root2 = this.result.root;\n while (!root2[isClean$3]) {\n root2[isClean$3] = true;\n let stack = [toStack$1(root2)];\n while (stack.length > 0) {\n let promise = this.visitTick(stack);\n if (isPromise$1(promise)) {\n try {\n await promise;\n } catch (e2) {\n let node2 = stack[stack.length - 1].node;\n throw this.handleError(e2, node2);\n }\n }\n }\n }\n if (this.listeners.OnceExit) {\n for (let [plugin22, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin22;\n try {\n if (root2.type === \"document\") {\n let roots = root2.nodes.map(\n (subRoot) => visitor(subRoot, this.helpers)\n );\n await Promise.all(roots);\n } else {\n await visitor(root2, this.helpers);\n }\n } catch (e2) {\n throw this.handleError(e2);\n }\n }\n }\n }\n this.processed = true;\n return this.stringify();\n }\n runOnRoot(plugin22) {\n this.result.lastPlugin = plugin22;\n try {\n if (typeof plugin22 === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n let roots = this.result.root.nodes.map(\n (root2) => plugin22.Once(root2, this.helpers)\n );\n if (isPromise$1(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n }\n stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n let opts = this.result.opts;\n let str = stringify$2$1;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n let map = new MapGenerator$1$1(str, this.result.root, this.result.opts);\n let data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n }\n sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for (let plugin22 of this.plugins) {\n let promise = this.runOnRoot(plugin22);\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n let root2 = this.result.root;\n while (!root2[isClean$3]) {\n root2[isClean$3] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for (let subRoot of root2.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n }\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1$1(\n \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n );\n }\n }\n return this.async().then(onFulfilled, onRejected);\n }\n toString() {\n return this.css;\n }\n visitSync(visitors, node2) {\n for (let [plugin22, visitor] of visitors) {\n this.result.lastPlugin = plugin22;\n let promise;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise$1(promise)) {\n throw this.getAsyncError();\n }\n }\n }\n visitTick(stack) {\n let visit2 = stack[stack.length - 1];\n let { node: node2, visitors } = visit2;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n let [plugin22, visitor] = visitors[visit2.visitorIndex];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n let iterator = visit2.iterator;\n let child;\n while (child = node2.nodes[node2.indexes[iterator]]) {\n node2.indexes[iterator] += 1;\n if (!child[isClean$3]) {\n child[isClean$3] = true;\n stack.push(toStack$1(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n let events = visit2.events;\n while (visit2.eventIndex < events.length) {\n let event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN$1) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean$3] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n }\n walkSync(node2) {\n node2[isClean$3] = true;\n let events = getEvents$1(node2);\n for (let event of events) {\n if (event === CHILDREN$1) {\n if (node2.nodes) {\n node2.each((child) => {\n if (!child[isClean$3]) this.walkSync(child);\n });\n }\n } else {\n let visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n }\n warnings() {\n return this.sync().warnings();\n }\n get content() {\n return this.stringify().content;\n }\n get css() {\n return this.stringify().css;\n }\n get map() {\n return this.stringify().map;\n }\n get messages() {\n return this.sync().messages;\n }\n get opts() {\n return this.result.opts;\n }\n get processor() {\n return this.result.processor;\n }\n get root() {\n return this.sync().root;\n }\n get [Symbol.toStringTag]() {\n return \"LazyResult\";\n }\n};\nLazyResult$2$1.registerPostcss = (dependant) => {\n postcss$2$1 = dependant;\n};\nvar lazyResult$1 = LazyResult$2$1;\nLazyResult$2$1.default = LazyResult$2$1;\nRoot$3$1.registerLazyResult(LazyResult$2$1);\nDocument$2$1.registerLazyResult(LazyResult$2$1);\nlet MapGenerator2$1 = mapGenerator$1;\nlet stringify$1$1 = stringify_1$1;\nlet warnOnce2$1 = warnOnce$2$1;\nlet parse$1$1 = parse_1$1;\nconst Result$1$1 = result$1;\nlet NoWorkResult$1$1 = class NoWorkResult {\n constructor(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n let root2;\n let str = stringify$1$1;\n this.result = new Result$1$1(this._processor, root2, this._opts);\n this.result.css = css;\n let self = this;\n Object.defineProperty(this.result, \"root\", {\n get() {\n return self.root;\n }\n });\n let map = new MapGenerator2$1(str, root2, this._opts, css);\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate();\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n }\n catch(onRejected) {\n return this.async().catch(onRejected);\n }\n finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n }\n sync() {\n if (this.error) throw this.error;\n return this.result;\n }\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce2$1(\n \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n );\n }\n }\n return this.async().then(onFulfilled, onRejected);\n }\n toString() {\n return this._css;\n }\n warnings() {\n return [];\n }\n get content() {\n return this.result.css;\n }\n get css() {\n return this.result.css;\n }\n get map() {\n return this.result.map;\n }\n get messages() {\n return [];\n }\n get opts() {\n return this.result.opts;\n }\n get processor() {\n return this.result.processor;\n }\n get root() {\n if (this._root) {\n return this._root;\n }\n let root2;\n let parser2 = parse$1$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n get [Symbol.toStringTag]() {\n return \"NoWorkResult\";\n }\n};\nvar noWorkResult$1 = NoWorkResult$1$1;\nNoWorkResult$1$1.default = NoWorkResult$1$1;\nlet NoWorkResult2$1 = noWorkResult$1;\nlet LazyResult$1$1 = lazyResult$1;\nlet Document$1$1 = document$1$1;\nlet Root$2$1 = root$1;\nlet Processor$1$1 = class Processor {\n constructor(plugins = []) {\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n normalize(plugins) {\n let normalized = [];\n for (let i2 of plugins) {\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if (typeof i2 === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if (typeof i2 === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if (typeof i2 === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\n \"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\"\n );\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n }\n process(css, opts = {}) {\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult2$1(this, css, opts);\n } else {\n return new LazyResult$1$1(this, css, opts);\n }\n }\n use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([plugin22]));\n return this;\n }\n};\nvar processor$1 = Processor$1$1;\nProcessor$1$1.default = Processor$1$1;\nRoot$2$1.registerProcessor(Processor$1$1);\nDocument$1$1.registerProcessor(Processor$1$1);\nlet Declaration$1$1 = declaration$1;\nlet PreviousMap2$1 = previousMap$1;\nlet Comment$1$1 = comment$1;\nlet AtRule$1$1 = atRule$1;\nlet Input$1$1 = input$1;\nlet Root$1$1 = root$1;\nlet Rule$1$1 = rule$1;\nfunction fromJSON$1$1(json, inputs) {\n if (Array.isArray(json)) return json.map((n2) => fromJSON$1$1(n2));\n let { inputs: ownInputs, ...defaults } = json;\n if (ownInputs) {\n inputs = [];\n for (let input2 of ownInputs) {\n let inputHydrated = { ...input2, __proto__: Input$1$1.prototype };\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap2$1.prototype\n };\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map((n2) => fromJSON$1$1(n2, inputs));\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source;\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1$1 = fromJSON$1$1;\nfromJSON$1$1.default = fromJSON$1$1;\nlet CssSyntaxError2$1 = cssSyntaxError$1;\nlet Declaration2$1 = declaration$1;\nlet LazyResult2$1 = lazyResult$1;\nlet Container2$1 = container$1;\nlet Processor2$1 = processor$1;\nlet stringify$5 = stringify_1$1;\nlet fromJSON$2 = fromJSON_1$1;\nlet Document22 = document$1$1;\nlet Warning2$1 = warning$1;\nlet Comment2$1 = comment$1;\nlet AtRule2$1 = atRule$1;\nlet Result2$1 = result$1;\nlet Input2$1 = input$1;\nlet parse$5 = parse_1$1;\nlet list$3 = list_1$1;\nlet Rule2$1 = rule$1;\nlet Root2$1 = root$1;\nlet Node2$1 = node$1;\nfunction postcss$3(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor2$1(plugins);\n}\npostcss$3.plugin = function plugin(name, initializer) {\n let warningPrinted = false;\n function creator(...args) {\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(\n name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"\n );\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(\n name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\"\n );\n }\n }\n let transformer = initializer(...args);\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor2$1().version;\n return transformer;\n }\n let cache;\n Object.defineProperty(creator, \"postcss\", {\n get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss$3([creator(pluginOpts)]).process(css, processOpts);\n };\n return creator;\n};\npostcss$3.stringify = stringify$5;\npostcss$3.parse = parse$5;\npostcss$3.fromJSON = fromJSON$2;\npostcss$3.list = list$3;\npostcss$3.comment = (defaults) => new Comment2$1(defaults);\npostcss$3.atRule = (defaults) => new AtRule2$1(defaults);\npostcss$3.decl = (defaults) => new Declaration2$1(defaults);\npostcss$3.rule = (defaults) => new Rule2$1(defaults);\npostcss$3.root = (defaults) => new Root2$1(defaults);\npostcss$3.document = (defaults) => new Document22(defaults);\npostcss$3.CssSyntaxError = CssSyntaxError2$1;\npostcss$3.Declaration = Declaration2$1;\npostcss$3.Container = Container2$1;\npostcss$3.Processor = Processor2$1;\npostcss$3.Document = Document22;\npostcss$3.Comment = Comment2$1;\npostcss$3.Warning = Warning2$1;\npostcss$3.AtRule = AtRule2$1;\npostcss$3.Result = Result2$1;\npostcss$3.Input = Input2$1;\npostcss$3.Rule = Rule2$1;\npostcss$3.Root = Root2$1;\npostcss$3.Node = Node2$1;\nLazyResult2$1.registerPostcss(postcss$3);\nvar postcss_1$1 = postcss$3;\npostcss$3.default = postcss$3;\nconst postcss$1$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcss_1$1);\npostcss$1$1.stringify;\npostcss$1$1.fromJSON;\npostcss$1$1.plugin;\npostcss$1$1.parse;\npostcss$1$1.list;\npostcss$1$1.document;\npostcss$1$1.comment;\npostcss$1$1.atRule;\npostcss$1$1.rule;\npostcss$1$1.decl;\npostcss$1$1.root;\npostcss$1$1.CssSyntaxError;\npostcss$1$1.Declaration;\npostcss$1$1.Container;\npostcss$1$1.Processor;\npostcss$1$1.Document;\npostcss$1$1.Comment;\npostcss$1$1.Warning;\npostcss$1$1.AtRule;\npostcss$1$1.Result;\npostcss$1$1.Input;\npostcss$1$1.Rule;\npostcss$1$1.Root;\npostcss$1$1.Node;\nconst tagMap = {\n script: \"noscript\",\n // camel case svg element tag names\n altglyph: \"altGlyph\",\n altglyphdef: \"altGlyphDef\",\n altglyphitem: \"altGlyphItem\",\n animatecolor: \"animateColor\",\n animatemotion: \"animateMotion\",\n animatetransform: \"animateTransform\",\n clippath: \"clipPath\",\n feblend: \"feBlend\",\n fecolormatrix: \"feColorMatrix\",\n fecomponenttransfer: \"feComponentTransfer\",\n fecomposite: \"feComposite\",\n feconvolvematrix: \"feConvolveMatrix\",\n fediffuselighting: \"feDiffuseLighting\",\n fedisplacementmap: \"feDisplacementMap\",\n fedistantlight: \"feDistantLight\",\n fedropshadow: \"feDropShadow\",\n feflood: \"feFlood\",\n fefunca: \"feFuncA\",\n fefuncb: \"feFuncB\",\n fefuncg: \"feFuncG\",\n fefuncr: \"feFuncR\",\n fegaussianblur: \"feGaussianBlur\",\n feimage: \"feImage\",\n femerge: \"feMerge\",\n femergenode: \"feMergeNode\",\n femorphology: \"feMorphology\",\n feoffset: \"feOffset\",\n fepointlight: \"fePointLight\",\n fespecularlighting: \"feSpecularLighting\",\n fespotlight: \"feSpotLight\",\n fetile: \"feTile\",\n feturbulence: \"feTurbulence\",\n foreignobject: \"foreignObject\",\n glyphref: \"glyphRef\",\n lineargradient: \"linearGradient\",\n radialgradient: \"radialGradient\"\n};\nfunction getTagName(n2) {\n let tagName = tagMap[n2.tagName] ? tagMap[n2.tagName] : n2.tagName;\n if (tagName === \"link\" && n2.attributes._cssText) {\n tagName = \"style\";\n }\n return tagName;\n}\nfunction adaptCssForReplay(cssText, cache) {\n const cachedStyle = cache == null ? void 0 : cache.stylesWithHoverClass.get(cssText);\n if (cachedStyle) return cachedStyle;\n const ast = postcss$1$1([\n mediaSelectorPlugin,\n pseudoClassPlugin\n ]).process(cssText);\n const result2 = ast.css;\n cache == null ? void 0 : cache.stylesWithHoverClass.set(cssText, result2);\n return result2;\n}\nfunction createCache() {\n const stylesWithHoverClass = /* @__PURE__ */ new Map();\n return {\n stylesWithHoverClass\n };\n}\nfunction applyCssSplits(n2, cssText, hackCss, cache) {\n const childTextNodes = [];\n for (const scn of n2.childNodes) {\n if (scn.type === NodeType$3.Text) {\n childTextNodes.push(scn);\n }\n }\n const cssTextSplits = cssText.split(\"/* rr_split */\");\n while (cssTextSplits.length > 1 && cssTextSplits.length > childTextNodes.length) {\n cssTextSplits.splice(-2, 2, cssTextSplits.slice(-2).join(\"\"));\n }\n for (let i2 = 0; i2 < childTextNodes.length; i2++) {\n const childTextNode = childTextNodes[i2];\n const cssTextSection = cssTextSplits[i2];\n if (childTextNode && cssTextSection) {\n childTextNode.textContent = hackCss ? adaptCssForReplay(cssTextSection, cache) : cssTextSection;\n }\n }\n}\nfunction buildStyleNode(n2, styleEl, cssText, options) {\n const { doc, hackCss, cache } = options;\n if (n2.childNodes.length) {\n applyCssSplits(n2, cssText, hackCss, cache);\n } else {\n if (hackCss) {\n cssText = adaptCssForReplay(cssText, cache);\n }\n styleEl.appendChild(doc.createTextNode(cssText));\n }\n}\nfunction buildNode(n2, options) {\n var _a2;\n const { doc, hackCss, cache } = options;\n switch (n2.type) {\n case NodeType$3.Document:\n return doc.implementation.createDocument(null, \"\", null);\n case NodeType$3.DocumentType:\n return doc.implementation.createDocumentType(\n n2.name || \"html\",\n n2.publicId,\n n2.systemId\n );\n case NodeType$3.Element: {\n const tagName = getTagName(n2);\n let node2;\n if (n2.isSVG) {\n node2 = doc.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n } else {\n if (\n // If the tag name is a custom element name\n n2.isCustom && // If the browser supports custom elements\n ((_a2 = doc.defaultView) == null ? void 0 : _a2.customElements) && // If the custom element hasn't been defined yet\n !doc.defaultView.customElements.get(n2.tagName)\n )\n doc.defaultView.customElements.define(\n n2.tagName,\n class extends doc.defaultView.HTMLElement {\n }\n );\n node2 = doc.createElement(tagName);\n }\n const specialAttributes = {};\n for (const name in n2.attributes) {\n if (!Object.prototype.hasOwnProperty.call(n2.attributes, name)) {\n continue;\n }\n let value = n2.attributes[name];\n if (tagName === \"option\" && name === \"selected\" && value === false) {\n continue;\n }\n if (value === null) {\n continue;\n }\n if (value === true) value = \"\";\n if (name.startsWith(\"rr_\")) {\n specialAttributes[name] = value;\n continue;\n }\n if (typeof value !== \"string\") ;\n else if (tagName === \"style\" && name === \"_cssText\") {\n buildStyleNode(n2, node2, value, options);\n continue;\n } else if (tagName === \"textarea\" && name === \"value\") {\n node2.appendChild(doc.createTextNode(value));\n n2.childNodes = [];\n continue;\n }\n try {\n if (n2.isSVG && name === \"xlink:href\") {\n node2.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n name,\n value.toString()\n );\n } else if (name === \"onload\" || name === \"onclick\" || name.substring(0, 7) === \"onmouse\") {\n node2.setAttribute(\"_\" + name, value.toString());\n } else if (tagName === \"meta\" && n2.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n node2.setAttribute(\"csp-content\", value.toString());\n continue;\n } else if (tagName === \"link\" && (n2.attributes.rel === \"preload\" || n2.attributes.rel === \"modulepreload\") && n2.attributes.as === \"script\") {\n } else if (tagName === \"link\" && n2.attributes.rel === \"prefetch\" && typeof n2.attributes.href === \"string\" && n2.attributes.href.endsWith(\".js\")) {\n } else if (tagName === \"img\" && n2.attributes.srcset && n2.attributes.rr_dataURL) {\n node2.setAttribute(\n \"rrweb-original-srcset\",\n n2.attributes.srcset\n );\n } else {\n node2.setAttribute(name, value.toString());\n }\n } catch (error) {\n }\n }\n for (const name in specialAttributes) {\n const value = specialAttributes[name];\n if (tagName === \"canvas\" && name === \"rr_dataURL\") {\n const image = doc.createElement(\"img\");\n image.onload = () => {\n const ctx = node2.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n image.src = value.toString();\n if (node2.RRNodeType)\n node2.rr_dataURL = value.toString();\n } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n const image = node2;\n if (!image.currentSrc.startsWith(\"data:\")) {\n image.setAttribute(\n \"rrweb-original-src\",\n n2.attributes.src\n );\n image.src = value.toString();\n }\n }\n if (name === \"rr_width\") {\n node2.style.setProperty(\"width\", value.toString());\n } else if (name === \"rr_height\") {\n node2.style.setProperty(\"height\", value.toString());\n } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n node2.currentTime = value;\n } else if (name === \"rr_mediaState\") {\n switch (value) {\n case \"played\":\n node2.play().catch((e2) => console.warn(\"media playback error\", e2));\n break;\n case \"paused\":\n node2.pause();\n break;\n }\n } else if (name === \"rr_mediaPlaybackRate\" && typeof value === \"number\") {\n node2.playbackRate = value;\n } else if (name === \"rr_mediaMuted\" && typeof value === \"boolean\") {\n node2.muted = value;\n } else if (name === \"rr_mediaLoop\" && typeof value === \"boolean\") {\n node2.loop = value;\n } else if (name === \"rr_mediaVolume\" && typeof value === \"number\") {\n node2.volume = value;\n } else if (name === \"rr_open_mode\") {\n node2.setAttribute(\n \"rr_open_mode\",\n value\n );\n }\n }\n if (n2.isShadowHost) {\n if (!node2.shadowRoot) {\n node2.attachShadow({ mode: \"open\" });\n } else {\n while (node2.shadowRoot.firstChild) {\n node2.shadowRoot.removeChild(node2.shadowRoot.firstChild);\n }\n }\n }\n return node2;\n }\n case NodeType$3.Text:\n if (n2.isStyle && hackCss) {\n return doc.createTextNode(adaptCssForReplay(n2.textContent, cache));\n }\n return doc.createTextNode(n2.textContent);\n case NodeType$3.CDATA:\n return doc.createCDATASection(n2.textContent);\n case NodeType$3.Comment:\n return doc.createComment(n2.textContent);\n default:\n return null;\n }\n}\nfunction buildNodeWithSN(n2, options) {\n const {\n doc,\n mirror: mirror2,\n skipChild = false,\n hackCss = true,\n afterAppend,\n cache\n } = options;\n if (mirror2.has(n2.id)) {\n const nodeInMirror = mirror2.getNode(n2.id);\n const meta = mirror2.getMeta(nodeInMirror);\n if (isNodeMetaEqual(meta, n2)) return mirror2.getNode(n2.id);\n }\n let node2 = buildNode(n2, { doc, hackCss, cache });\n if (!node2) {\n return null;\n }\n if (n2.rootId && mirror2.getNode(n2.rootId) !== doc) {\n mirror2.replace(n2.rootId, doc);\n }\n if (n2.type === NodeType$3.Document) {\n doc.close();\n doc.open();\n if (n2.compatMode === \"BackCompat\" && n2.childNodes && n2.childNodes[0].type !== NodeType$3.DocumentType) {\n if (n2.childNodes[0].type === NodeType$3.Element && \"xmlns\" in n2.childNodes[0].attributes && n2.childNodes[0].attributes.xmlns === \"http://www.w3.org/1999/xhtml\") {\n doc.write(\n '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">'\n );\n } else {\n doc.write(\n '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">'\n );\n }\n }\n node2 = doc;\n }\n mirror2.add(node2, n2);\n if ((n2.type === NodeType$3.Document || n2.type === NodeType$3.Element) && !skipChild) {\n for (const childN of n2.childNodes) {\n const childNode = buildNodeWithSN(childN, {\n doc,\n mirror: mirror2,\n skipChild: false,\n hackCss,\n afterAppend,\n cache\n });\n if (!childNode) {\n console.warn(\"Failed to rebuild\", childN);\n continue;\n }\n if (childN.isShadow && isElement(node2) && node2.shadowRoot) {\n node2.shadowRoot.appendChild(childNode);\n } else if (n2.type === NodeType$3.Document && childN.type == NodeType$3.Element) {\n const htmlElement = childNode;\n let body = null;\n htmlElement.childNodes.forEach((child) => {\n if (child.nodeName === \"BODY\") body = child;\n });\n if (body) {\n htmlElement.removeChild(body);\n node2.appendChild(childNode);\n htmlElement.appendChild(body);\n } else {\n node2.appendChild(childNode);\n }\n } else {\n node2.appendChild(childNode);\n }\n if (afterAppend) {\n afterAppend(childNode, childN.id);\n }\n }\n }\n return node2;\n}\nfunction visit(mirror2, onVisit) {\n function walk(node2) {\n onVisit(node2);\n }\n for (const id of mirror2.getIds()) {\n if (mirror2.has(id)) {\n walk(mirror2.getNode(id));\n }\n }\n}\nfunction handleScroll(node2, mirror2) {\n const n2 = mirror2.getMeta(node2);\n if ((n2 == null ? void 0 : n2.type) !== NodeType$3.Element) {\n return;\n }\n const el = node2;\n for (const name in n2.attributes) {\n if (!(Object.prototype.hasOwnProperty.call(n2.attributes, name) && name.startsWith(\"rr_\"))) {\n continue;\n }\n const value = n2.attributes[name];\n if (name === \"rr_scrollLeft\") {\n el.scrollLeft = value;\n }\n if (name === \"rr_scrollTop\") {\n el.scrollTop = value;\n }\n }\n}\nfunction rebuild(n2, options) {\n const {\n doc,\n onVisit,\n hackCss = true,\n afterAppend,\n cache,\n mirror: mirror2 = new Mirror()\n } = options;\n const node2 = buildNodeWithSN(n2, {\n doc,\n mirror: mirror2,\n skipChild: false,\n hackCss,\n afterAppend,\n cache\n });\n visit(mirror2, (visitedNode) => {\n if (onVisit) {\n onVisit(visitedNode);\n }\n handleScroll(visitedNode, mirror2);\n });\n return node2;\n}\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __defProp22 = Object.defineProperty;\nvar __defNormalProp22 = (obj, key, value) => key in obj ? __defProp22(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField22 = (obj, key, value) => __defNormalProp22(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nlet Mirror$1 = class Mirror2 {\n constructor() {\n __publicField22(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField22(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n};\nfunction createMirror$1() {\n return new Mirror$1();\n}\nfunction getDefaultExportFromCjs(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\nvar picocolors_browser = { exports: {} };\nvar x = String;\nvar create = function() {\n return { isColorSupported: false, reset: x, bold: x, dim: x, italic: x, underline: x, inverse: x, hidden: x, strikethrough: x, black: x, red: x, green: x, yellow: x, blue: x, magenta: x, cyan: x, white: x, gray: x, bgBlack: x, bgRed: x, bgGreen: x, bgYellow: x, bgBlue: x, bgMagenta: x, bgCyan: x, bgWhite: x };\n};\npicocolors_browser.exports = create();\npicocolors_browser.exports.createColors = create;\nvar picocolors_browserExports = picocolors_browser.exports;\nconst __viteBrowserExternal = {};\nconst __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: __viteBrowserExternal\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nlet pico = picocolors_browserExports;\nlet terminalHighlight$1 = require$$2;\nlet CssSyntaxError$3 = class CssSyntaxError2 extends Error {\n constructor(message, line, column, source, file, plugin22) {\n super(message);\n this.name = \"CssSyntaxError\";\n this.reason = message;\n if (file) {\n this.file = file;\n }\n if (source) {\n this.source = source;\n }\n if (plugin22) {\n this.plugin = plugin22;\n }\n if (typeof line !== \"undefined\" && typeof column !== \"undefined\") {\n if (typeof line === \"number\") {\n this.line = line;\n this.column = column;\n } else {\n this.line = line.line;\n this.column = line.column;\n this.endLine = column.line;\n this.endColumn = column.column;\n }\n }\n this.setMessage();\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError2);\n }\n }\n setMessage() {\n this.message = this.plugin ? this.plugin + \": \" : \"\";\n this.message += this.file ? this.file : \"<css input>\";\n if (typeof this.line !== \"undefined\") {\n this.message += \":\" + this.line + \":\" + this.column;\n }\n this.message += \": \" + this.reason;\n }\n showSourceCode(color) {\n if (!this.source) return \"\";\n let css = this.source;\n if (color == null) color = pico.isColorSupported;\n if (terminalHighlight$1) {\n if (color) css = terminalHighlight$1(css);\n }\n let lines = css.split(/\\r?\\n/);\n let start = Math.max(this.line - 3, 0);\n let end = Math.min(this.line + 2, lines.length);\n let maxWidth = String(end).length;\n let mark, aside;\n if (color) {\n let { bold, gray, red } = pico.createColors(true);\n mark = (text) => bold(red(text));\n aside = (text) => gray(text);\n } else {\n mark = aside = (str) => str;\n }\n return lines.slice(start, end).map((line, index2) => {\n let number = start + 1 + index2;\n let gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n if (number === this.line) {\n let spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, this.column - 1).replace(/[^\\t]/g, \" \");\n return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n }\n return \" \" + aside(gutter) + line;\n }).join(\"\\n\");\n }\n toString() {\n let code = this.showSourceCode();\n if (code) {\n code = \"\\n\\n\" + code + \"\\n\";\n }\n return this.name + \": \" + this.message + code;\n }\n};\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\nvar symbols = {};\nsymbols.isClean = Symbol(\"isClean\");\nsymbols.my = Symbol(\"my\");\nconst DEFAULT_RAW = {\n after: \"\\n\",\n beforeClose: \"\\n\",\n beforeComment: \"\\n\",\n beforeDecl: \"\\n\",\n beforeOpen: \" \",\n beforeRule: \"\\n\",\n colon: \": \",\n commentLeft: \" \",\n commentRight: \" \",\n emptyBody: \"\",\n indent: \" \",\n semicolon: false\n};\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\nlet Stringifier$2 = class Stringifier2 {\n constructor(builder) {\n this.builder = builder;\n }\n atrule(node2, semicolon) {\n let name = \"@\" + node2.name;\n let params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n if (typeof node2.raws.afterName !== \"undefined\") {\n name += node2.raws.afterName;\n } else if (params) {\n name += \" \";\n }\n if (node2.nodes) {\n this.block(node2, name + params);\n } else {\n let end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n this.builder(name + params + end, node2);\n }\n }\n beforeAfter(node2, detect) {\n let value;\n if (node2.type === \"decl\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (node2.type === \"comment\") {\n value = this.raw(node2, null, \"beforeComment\");\n } else if (detect === \"before\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else {\n value = this.raw(node2, null, \"beforeClose\");\n }\n let buf = node2.parent;\n let depth = 0;\n while (buf && buf.type !== \"root\") {\n depth += 1;\n buf = buf.parent;\n }\n if (value.includes(\"\\n\")) {\n let indent = this.raw(node2, null, \"indent\");\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent;\n }\n }\n return value;\n }\n block(node2, start) {\n let between = this.raw(node2, \"between\", \"beforeOpen\");\n this.builder(start + between + \"{\", node2, \"start\");\n let after;\n if (node2.nodes && node2.nodes.length) {\n this.body(node2);\n after = this.raw(node2, \"after\");\n } else {\n after = this.raw(node2, \"after\", \"emptyBody\");\n }\n if (after) this.builder(after);\n this.builder(\"}\", node2, \"end\");\n }\n body(node2) {\n let last = node2.nodes.length - 1;\n while (last > 0) {\n if (node2.nodes[last].type !== \"comment\") break;\n last -= 1;\n }\n let semicolon = this.raw(node2, \"semicolon\");\n for (let i2 = 0; i2 < node2.nodes.length; i2++) {\n let child = node2.nodes[i2];\n let before = this.raw(child, \"before\");\n if (before) this.builder(before);\n this.stringify(child, last !== i2 || semicolon);\n }\n }\n comment(node2) {\n let left = this.raw(node2, \"left\", \"commentLeft\");\n let right = this.raw(node2, \"right\", \"commentRight\");\n this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n }\n decl(node2, semicolon) {\n let between = this.raw(node2, \"between\", \"colon\");\n let string = node2.prop + between + this.rawValue(node2, \"value\");\n if (node2.important) {\n string += node2.raws.important || \" !important\";\n }\n if (semicolon) string += \";\";\n this.builder(string, node2);\n }\n document(node2) {\n this.body(node2);\n }\n raw(node2, own, detect) {\n let value;\n if (!detect) detect = own;\n if (own) {\n value = node2.raws[own];\n if (typeof value !== \"undefined\") return value;\n }\n let parent = node2.parent;\n if (detect === \"before\") {\n if (!parent || parent.type === \"root\" && parent.first === node2) {\n return \"\";\n }\n if (parent && parent.type === \"document\") {\n return \"\";\n }\n }\n if (!parent) return DEFAULT_RAW[detect];\n let root2 = node2.root();\n if (!root2.rawCache) root2.rawCache = {};\n if (typeof root2.rawCache[detect] !== \"undefined\") {\n return root2.rawCache[detect];\n }\n if (detect === \"before\" || detect === \"after\") {\n return this.beforeAfter(node2, detect);\n } else {\n let method = \"raw\" + capitalize(detect);\n if (this[method]) {\n value = this[method](root2, node2);\n } else {\n root2.walk((i2) => {\n value = i2.raws[own];\n if (typeof value !== \"undefined\") return false;\n });\n }\n }\n if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n root2.rawCache[detect] = value;\n return value;\n }\n rawBeforeClose(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length > 0) {\n if (typeof i2.raws.after !== \"undefined\") {\n value = i2.raws.after;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n }\n rawBeforeComment(root2, node2) {\n let value;\n root2.walkComments((i2) => {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeDecl\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n }\n rawBeforeDecl(root2, node2) {\n let value;\n root2.walkDecls((i2) => {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n });\n if (typeof value === \"undefined\") {\n value = this.raw(node2, null, \"beforeRule\");\n } else if (value) {\n value = value.replace(/\\S/g, \"\");\n }\n return value;\n }\n rawBeforeOpen(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.type !== \"decl\") {\n value = i2.raws.between;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawBeforeRule(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n if (typeof i2.raws.before !== \"undefined\") {\n value = i2.raws.before;\n if (value.includes(\"\\n\")) {\n value = value.replace(/[^\\n]+$/, \"\");\n }\n return false;\n }\n }\n });\n if (value) value = value.replace(/\\S/g, \"\");\n return value;\n }\n rawColon(root2) {\n let value;\n root2.walkDecls((i2) => {\n if (typeof i2.raws.between !== \"undefined\") {\n value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n return false;\n }\n });\n return value;\n }\n rawEmptyBody(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length === 0) {\n value = i2.raws.after;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawIndent(root2) {\n if (root2.raws.indent) return root2.raws.indent;\n let value;\n root2.walk((i2) => {\n let p = i2.parent;\n if (p && p !== root2 && p.parent && p.parent === root2) {\n if (typeof i2.raws.before !== \"undefined\") {\n let parts = i2.raws.before.split(\"\\n\");\n value = parts[parts.length - 1];\n value = value.replace(/\\S/g, \"\");\n return false;\n }\n }\n });\n return value;\n }\n rawSemicolon(root2) {\n let value;\n root2.walk((i2) => {\n if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n value = i2.raws.semicolon;\n if (typeof value !== \"undefined\") return false;\n }\n });\n return value;\n }\n rawValue(node2, prop) {\n let value = node2[prop];\n let raw = node2.raws[prop];\n if (raw && raw.value === value) {\n return raw.raw;\n }\n return value;\n }\n root(node2) {\n this.body(node2);\n if (node2.raws.after) this.builder(node2.raws.after);\n }\n rule(node2) {\n this.block(node2, this.rawValue(node2, \"selector\"));\n if (node2.raws.ownSemicolon) {\n this.builder(node2.raws.ownSemicolon, node2, \"end\");\n }\n }\n stringify(node2, semicolon) {\n if (!this[node2.type]) {\n throw new Error(\n \"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\"\n );\n }\n this[node2.type](node2, semicolon);\n }\n};\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\nlet Stringifier$1 = stringifier;\nfunction stringify$4(node2, builder) {\n let str = new Stringifier$1(builder);\n str.stringify(node2);\n}\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\nlet { isClean: isClean$2, my: my$2 } = symbols;\nlet CssSyntaxError$2 = cssSyntaxError;\nlet Stringifier22 = stringifier;\nlet stringify$3 = stringify_1;\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor();\n for (let i2 in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n continue;\n }\n if (i2 === \"proxyCache\") continue;\n let value = obj[i2];\n let type = typeof value;\n if (i2 === \"parent\" && type === \"object\") {\n if (parent) cloned[i2] = parent;\n } else if (i2 === \"source\") {\n cloned[i2] = value;\n } else if (Array.isArray(value)) {\n cloned[i2] = value.map((j) => cloneNode(j, cloned));\n } else {\n if (type === \"object\" && value !== null) value = cloneNode(value);\n cloned[i2] = value;\n }\n }\n return cloned;\n}\nlet Node$4 = class Node3 {\n constructor(defaults = {}) {\n this.raws = {};\n this[isClean$2] = false;\n this[my$2] = true;\n for (let name in defaults) {\n if (name === \"nodes\") {\n this.nodes = [];\n for (let node2 of defaults[name]) {\n if (typeof node2.clone === \"function\") {\n this.append(node2.clone());\n } else {\n this.append(node2);\n }\n }\n } else {\n this[name] = defaults[name];\n }\n }\n }\n addToError(error) {\n error.postcssNode = this;\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s2 = this.source;\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s2.input.from}:${s2.start.line}:${s2.start.column}$&`\n );\n }\n return error;\n }\n after(add) {\n this.parent.insertAfter(this, add);\n return this;\n }\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name];\n }\n return this;\n }\n before(add) {\n this.parent.insertBefore(this, add);\n return this;\n }\n cleanRaws(keepBetween) {\n delete this.raws.before;\n delete this.raws.after;\n if (!keepBetween) delete this.raws.between;\n }\n clone(overrides = {}) {\n let cloned = cloneNode(this);\n for (let name in overrides) {\n cloned[name] = overrides[name];\n }\n return cloned;\n }\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides);\n this.parent.insertAfter(this, cloned);\n return cloned;\n }\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides);\n this.parent.insertBefore(this, cloned);\n return cloned;\n }\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts);\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n );\n }\n return new CssSyntaxError$2(message);\n }\n getProxyProcessor() {\n return {\n get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (prop === \"root\") {\n return () => node2.root().toProxy();\n } else {\n return node2[prop];\n }\n },\n set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */\n prop === \"text\") {\n node2.markDirty();\n }\n return true;\n }\n };\n }\n markDirty() {\n if (this[isClean$2]) {\n this[isClean$2] = false;\n let next = this;\n while (next = next.parent) {\n next[isClean$2] = false;\n }\n }\n }\n next() {\n if (!this.parent) return void 0;\n let index2 = this.parent.index(this);\n return this.parent.nodes[index2 + 1];\n }\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start;\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation);\n } else if (opts.word) {\n stringRepresentation = this.toString();\n let index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n }\n return pos;\n }\n positionInside(index2, stringRepresentation) {\n let string = stringRepresentation || this.toString();\n let column = this.source.start.column;\n let line = this.source.start.line;\n for (let i2 = 0; i2 < index2; i2++) {\n if (string[i2] === \"\\n\") {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n }\n return { column, line };\n }\n prev() {\n if (!this.parent) return void 0;\n let index2 = this.parent.index(this);\n return this.parent.nodes[index2 - 1];\n }\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n };\n let end = this.source.end ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n } : {\n column: start.column + 1,\n line: start.line\n };\n if (opts.word) {\n let stringRepresentation = this.toString();\n let index2 = stringRepresentation.indexOf(opts.word);\n if (index2 !== -1) {\n start = this.positionInside(index2, stringRepresentation);\n end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n };\n } else if (opts.index) {\n start = this.positionInside(opts.index);\n }\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n };\n } else if (typeof opts.endIndex === \"number\") {\n end = this.positionInside(opts.endIndex);\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1);\n }\n }\n if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n end = { column: start.column + 1, line: start.line };\n }\n return { end, start };\n }\n raw(prop, defaultType) {\n let str = new Stringifier22();\n return str.raw(this, prop, defaultType);\n }\n remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.parent = void 0;\n return this;\n }\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this;\n let foundSelf = false;\n for (let node2 of nodes) {\n if (node2 === this) {\n foundSelf = true;\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node2);\n bookmark = node2;\n } else {\n this.parent.insertBefore(bookmark, node2);\n }\n }\n if (!foundSelf) {\n this.remove();\n }\n }\n return this;\n }\n root() {\n let result2 = this;\n while (result2.parent && result2.parent.type !== \"document\") {\n result2 = result2.parent;\n }\n return result2;\n }\n toJSON(_, inputs) {\n let fixed = {};\n let emitInputs = inputs == null;\n inputs = inputs || /* @__PURE__ */ new Map();\n let inputsNextIndex = 0;\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n continue;\n }\n if (name === \"parent\" || name === \"proxyCache\") continue;\n let value = this[name];\n if (Array.isArray(value)) {\n fixed[name] = value.map((i2) => {\n if (typeof i2 === \"object\" && i2.toJSON) {\n return i2.toJSON(null, inputs);\n } else {\n return i2;\n }\n });\n } else if (typeof value === \"object\" && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs);\n } else if (name === \"source\") {\n let inputId = inputs.get(value.input);\n if (inputId == null) {\n inputId = inputsNextIndex;\n inputs.set(value.input, inputsNextIndex);\n inputsNextIndex++;\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n };\n } else {\n fixed[name] = value;\n }\n }\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map((input2) => input2.toJSON());\n }\n return fixed;\n }\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor());\n }\n return this.proxyCache;\n }\n toString(stringifier2 = stringify$3) {\n if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n let result2 = \"\";\n stringifier2(this, (i2) => {\n result2 += i2;\n });\n return result2;\n }\n warn(result2, text, opts) {\n let data = { node: this };\n for (let i2 in opts) data[i2] = opts[i2];\n return result2.warn(text, data);\n }\n get proxyOf() {\n return this;\n }\n};\nvar node = Node$4;\nNode$4.default = Node$4;\nlet Node$3 = node;\nlet Declaration$4 = class Declaration2 extends Node$3 {\n constructor(defaults) {\n if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n defaults = { ...defaults, value: String(defaults.value) };\n }\n super(defaults);\n this.type = \"decl\";\n }\n get variable() {\n return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n }\n};\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\nlet urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = \"\";\n let i2 = size;\n while (i2--) {\n id += alphabet[Math.random() * alphabet.length | 0];\n }\n return id;\n };\n};\nlet nanoid$1 = (size = 21) => {\n let id = \"\";\n let i2 = size;\n while (i2--) {\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\nvar nonSecure = { nanoid: nanoid$1, customAlphabet };\nlet { SourceMapConsumer: SourceMapConsumer$2, SourceMapGenerator: SourceMapGenerator$2 } = require$$2;\nlet { existsSync, readFileSync } = require$$2;\nlet { dirname: dirname$1, join } = require$$2;\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return window.atob(str);\n }\n}\nlet PreviousMap$2 = class PreviousMap2 {\n constructor(css, opts) {\n if (opts.map === false) return;\n this.loadAnnotation(css);\n this.inline = this.startWith(this.annotation, \"data:\");\n let prev = opts.map ? opts.map.prev : void 0;\n let text = this.loadMap(opts.from, prev);\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from;\n }\n if (this.mapFile) this.root = dirname$1(this.mapFile);\n if (text) this.text = text;\n }\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer$2(this.text);\n }\n return this.consumerCache;\n }\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n let baseUri = /^data:application\\/json;base64,/;\n let charsetUri = /^data:application\\/json;charset=utf-?8,/;\n let uri = /^data:application\\/json,/;\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n }\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length));\n }\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n throw new Error(\"Unsupported source map encoding \" + encoding);\n }\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n }\n isMap(map) {\n if (typeof map !== \"object\") return false;\n return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n }\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n if (!comments) return;\n let start = css.lastIndexOf(comments.pop());\n let end = css.indexOf(\"*/\", start);\n if (start > -1 && end > -1) {\n this.annotation = this.getAnnotationURL(css.substring(start, end));\n }\n }\n loadFile(path) {\n this.root = dirname$1(path);\n if (existsSync(path)) {\n this.mapFile = path;\n return readFileSync(path, \"utf-8\").toString().trim();\n }\n }\n loadMap(file, prev) {\n if (prev === false) return false;\n if (prev) {\n if (typeof prev === \"string\") {\n return prev;\n } else if (typeof prev === \"function\") {\n let prevPath = prev(file);\n if (prevPath) {\n let map = this.loadFile(prevPath);\n if (!map) {\n throw new Error(\n \"Unable to load previous source map: \" + prevPath.toString()\n );\n }\n return map;\n }\n } else if (prev instanceof SourceMapConsumer$2) {\n return SourceMapGenerator$2.fromSourceMap(prev).toString();\n } else if (prev instanceof SourceMapGenerator$2) {\n return prev.toString();\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev);\n } else {\n throw new Error(\n \"Unsupported previous source map format: \" + prev.toString()\n );\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation);\n } else if (this.annotation) {\n let map = this.annotation;\n if (file) map = join(dirname$1(file), map);\n return this.loadFile(map);\n }\n }\n startWith(string, start) {\n if (!string) return false;\n return string.substr(0, start.length) === start;\n }\n withContent() {\n return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n }\n};\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\nlet { SourceMapConsumer: SourceMapConsumer$1, SourceMapGenerator: SourceMapGenerator$1 } = require$$2;\nlet { fileURLToPath, pathToFileURL: pathToFileURL$1 } = require$$2;\nlet { isAbsolute, resolve: resolve$1 } = require$$2;\nlet { nanoid } = nonSecure;\nlet terminalHighlight = require$$2;\nlet CssSyntaxError$1 = cssSyntaxError;\nlet PreviousMap$1 = previousMap;\nlet fromOffsetCache = Symbol(\"fromOffsetCache\");\nlet sourceMapAvailable$1 = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nlet pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\nlet Input$4 = class Input2 {\n constructor(css, opts = {}) {\n if (css === null || typeof css === \"undefined\" || typeof css === \"object\" && !css.toString) {\n throw new Error(`PostCSS received ${css} instead of CSS string`);\n }\n this.css = css.toString();\n if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n this.hasBOM = true;\n this.css = this.css.slice(1);\n } else {\n this.hasBOM = false;\n }\n if (opts.from) {\n if (!pathAvailable$1 || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n this.file = opts.from;\n } else {\n this.file = resolve$1(opts.from);\n }\n }\n if (pathAvailable$1 && sourceMapAvailable$1) {\n let map = new PreviousMap$1(this.css, opts);\n if (map.text) {\n this.map = map;\n let file = map.consumer().file;\n if (!this.file && file) this.file = this.mapResolve(file);\n }\n }\n if (!this.file) {\n this.id = \"<input css \" + nanoid(6) + \">\";\n }\n if (this.map) this.map.file = this.from;\n }\n error(message, line, column, opts = {}) {\n let result2, endLine, endColumn;\n if (line && typeof line === \"object\") {\n let start = line;\n let end = column;\n if (typeof start.offset === \"number\") {\n let pos = this.fromOffset(start.offset);\n line = pos.line;\n column = pos.col;\n } else {\n line = start.line;\n column = start.column;\n }\n if (typeof end.offset === \"number\") {\n let pos = this.fromOffset(end.offset);\n endLine = pos.line;\n endColumn = pos.col;\n } else {\n endLine = end.line;\n endColumn = end.column;\n }\n } else if (!column) {\n let pos = this.fromOffset(line);\n line = pos.line;\n column = pos.col;\n }\n let origin = this.origin(line, column, endLine, endColumn);\n if (origin) {\n result2 = new CssSyntaxError$1(\n message,\n origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line },\n origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n );\n } else {\n result2 = new CssSyntaxError$1(\n message,\n endLine === void 0 ? line : { column, line },\n endLine === void 0 ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n );\n }\n result2.input = { column, endColumn, endLine, line, source: this.css };\n if (this.file) {\n if (pathToFileURL$1) {\n result2.input.url = pathToFileURL$1(this.file).toString();\n }\n result2.input.file = this.file;\n }\n return result2;\n }\n fromOffset(offset) {\n let lastLine, lineToIndex;\n if (!this[fromOffsetCache]) {\n let lines = this.css.split(\"\\n\");\n lineToIndex = new Array(lines.length);\n let prevIndex = 0;\n for (let i2 = 0, l2 = lines.length; i2 < l2; i2++) {\n lineToIndex[i2] = prevIndex;\n prevIndex += lines[i2].length + 1;\n }\n this[fromOffsetCache] = lineToIndex;\n } else {\n lineToIndex = this[fromOffsetCache];\n }\n lastLine = lineToIndex[lineToIndex.length - 1];\n let min = 0;\n if (offset >= lastLine) {\n min = lineToIndex.length - 1;\n } else {\n let max = lineToIndex.length - 2;\n let mid;\n while (min < max) {\n mid = min + (max - min >> 1);\n if (offset < lineToIndex[mid]) {\n max = mid - 1;\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1;\n } else {\n min = mid;\n break;\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n };\n }\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file;\n }\n return resolve$1(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n }\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false;\n let consumer = this.map.consumer();\n let from = consumer.originalPositionFor({ column, line });\n if (!from.source) return false;\n let to;\n if (typeof endLine === \"number\") {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine });\n }\n let fromUrl;\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL$1(from.source);\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile)\n );\n }\n let result2 = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n };\n if (fromUrl.protocol === \"file:\") {\n if (fileURLToPath) {\n result2.file = fileURLToPath(fromUrl);\n } else {\n throw new Error(`file: protocol is not available in this PostCSS build`);\n }\n }\n let source = consumer.sourceContentFor(from.source);\n if (source) result2.source = source;\n return result2;\n }\n toJSON() {\n let json = {};\n for (let name of [\"hasBOM\", \"css\", \"file\", \"id\"]) {\n if (this[name] != null) {\n json[name] = this[name];\n }\n }\n if (this.map) {\n json.map = { ...this.map };\n if (json.map.consumerCache) {\n json.map.consumerCache = void 0;\n }\n }\n return json;\n }\n get from() {\n return this.file || this.id;\n }\n};\nvar input = Input$4;\nInput$4.default = Input$4;\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input$4);\n}\nlet { SourceMapConsumer, SourceMapGenerator } = require$$2;\nlet { dirname, relative, resolve, sep } = require$$2;\nlet { pathToFileURL } = require$$2;\nlet Input$3 = input;\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\nlet pathAvailable = Boolean(dirname && resolve && relative && sep);\nlet MapGenerator$2 = class MapGenerator2 {\n constructor(stringify2, root2, opts, cssString) {\n this.stringify = stringify2;\n this.mapOpts = opts.map || {};\n this.root = root2;\n this.opts = opts;\n this.css = cssString;\n this.originalCSS = cssString;\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n this.memoizedFileURLs = /* @__PURE__ */ new Map();\n this.memoizedPaths = /* @__PURE__ */ new Map();\n this.memoizedURLs = /* @__PURE__ */ new Map();\n }\n addAnnotation() {\n let content;\n if (this.isInline()) {\n content = \"data:application/json;base64,\" + this.toBase64(this.map.toString());\n } else if (typeof this.mapOpts.annotation === \"string\") {\n content = this.mapOpts.annotation;\n } else if (typeof this.mapOpts.annotation === \"function\") {\n content = this.mapOpts.annotation(this.opts.to, this.root);\n } else {\n content = this.outputFile() + \".map\";\n }\n let eol = \"\\n\";\n if (this.css.includes(\"\\r\\n\")) eol = \"\\r\\n\";\n this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n }\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file));\n let root2 = prev.root || dirname(prev.file);\n let map;\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text);\n if (map.sourcesContent) {\n map.sourcesContent = null;\n }\n } else {\n map = prev.consumer();\n }\n this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n }\n }\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return;\n if (this.root) {\n let node2;\n for (let i2 = this.root.nodes.length - 1; i2 >= 0; i2--) {\n node2 = this.root.nodes[i2];\n if (node2.type !== \"comment\") continue;\n if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n this.root.removeChild(i2);\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n }\n }\n generate() {\n this.clearAnnotation();\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap();\n } else {\n let result2 = \"\";\n this.stringify(this.root, (i2) => {\n result2 += i2;\n });\n return [result2];\n }\n }\n generateMap() {\n if (this.root) {\n this.generateString();\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer();\n prev.file = this.outputFile();\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n });\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\"\n });\n }\n if (this.isSourcesContent()) this.setSourcesContent();\n if (this.root && this.previous().length > 0) this.applyPrevMaps();\n if (this.isAnnotation()) this.addAnnotation();\n if (this.isInline()) {\n return [this.css];\n } else {\n return [this.css, this.map];\n }\n }\n generateString() {\n this.css = \"\";\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n });\n let line = 1;\n let column = 1;\n let noSource = \"<no source>\";\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: \"\"\n };\n let lines, last;\n this.stringify(this.root, (str, node2, type) => {\n this.css += str;\n if (node2 && type !== \"end\") {\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n if (node2.source && node2.source.start) {\n mapping.source = this.sourcePath(node2);\n mapping.original.line = node2.source.start.line;\n mapping.original.column = node2.source.start.column - 1;\n this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n this.map.addMapping(mapping);\n }\n }\n lines = str.match(/\\n/g);\n if (lines) {\n line += lines.length;\n last = str.lastIndexOf(\"\\n\");\n column = str.length - last;\n } else {\n column += str.length;\n }\n if (node2 && type !== \"start\") {\n let p = node2.parent || { raws: {} };\n let childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n if (!childless || node2 !== p.last || p.raws.semicolon) {\n if (node2.source && node2.source.end) {\n mapping.source = this.sourcePath(node2);\n mapping.original.line = node2.source.end.line;\n mapping.original.column = node2.source.end.column - 1;\n mapping.generated.line = line;\n mapping.generated.column = column - 2;\n this.map.addMapping(mapping);\n } else {\n mapping.source = noSource;\n mapping.original.line = 1;\n mapping.original.column = 0;\n mapping.generated.line = line;\n mapping.generated.column = column - 1;\n this.map.addMapping(mapping);\n }\n }\n }\n });\n }\n isAnnotation() {\n if (this.isInline()) {\n return true;\n }\n if (typeof this.mapOpts.annotation !== \"undefined\") {\n return this.mapOpts.annotation;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.annotation);\n }\n return true;\n }\n isInline() {\n if (typeof this.mapOpts.inline !== \"undefined\") {\n return this.mapOpts.inline;\n }\n let annotation = this.mapOpts.annotation;\n if (typeof annotation !== \"undefined\" && annotation !== true) {\n return false;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.inline);\n }\n return true;\n }\n isMap() {\n if (typeof this.opts.map !== \"undefined\") {\n return !!this.opts.map;\n }\n return this.previous().length > 0;\n }\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== \"undefined\") {\n return this.mapOpts.sourcesContent;\n }\n if (this.previous().length) {\n return this.previous().some((i2) => i2.withContent());\n }\n return true;\n }\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to);\n } else if (this.opts.from) {\n return this.path(this.opts.from);\n } else {\n return \"to.css\";\n }\n }\n path(file) {\n if (this.mapOpts.absolute) return file;\n if (file.charCodeAt(0) === 60) return file;\n if (/^\\w+:\\/\\//.test(file)) return file;\n let cached = this.memoizedPaths.get(file);\n if (cached) return cached;\n let from = this.opts.to ? dirname(this.opts.to) : \".\";\n if (typeof this.mapOpts.annotation === \"string\") {\n from = dirname(resolve(from, this.mapOpts.annotation));\n }\n let path = relative(from, file);\n this.memoizedPaths.set(file, path);\n return path;\n }\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = [];\n if (this.root) {\n this.root.walk((node2) => {\n if (node2.source && node2.source.input.map) {\n let map = node2.source.input.map;\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map);\n }\n }\n });\n } else {\n let input2 = new Input$3(this.originalCSS, this.opts);\n if (input2.map) this.previousMaps.push(input2.map);\n }\n }\n return this.previousMaps;\n }\n setSourcesContent() {\n let already = {};\n if (this.root) {\n this.root.walk((node2) => {\n if (node2.source) {\n let from = node2.source.input.from;\n if (from && !already[from]) {\n already[from] = true;\n let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n this.map.setSourceContent(fromUrl, node2.source.input.css);\n }\n }\n });\n } else if (this.css) {\n let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\";\n this.map.setSourceContent(from, this.css);\n }\n }\n sourcePath(node2) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from);\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node2.source.input.from);\n } else {\n return this.toUrl(this.path(node2.source.input.from));\n }\n }\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString(\"base64\");\n } else {\n return window.btoa(unescape(encodeURIComponent(str)));\n }\n }\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path);\n if (cached) return cached;\n if (pathToFileURL) {\n let fileURL = pathToFileURL(path).toString();\n this.memoizedFileURLs.set(path, fileURL);\n return fileURL;\n } else {\n throw new Error(\n \"`map.absolute` option is not available in this PostCSS build\"\n );\n }\n }\n toUrl(path) {\n let cached = this.memoizedURLs.get(path);\n if (cached) return cached;\n if (sep === \"\\\\\") {\n path = path.replace(/\\\\/g, \"/\");\n }\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n this.memoizedURLs.set(path, url);\n return url;\n }\n};\nvar mapGenerator = MapGenerator$2;\nlet Node$2 = node;\nlet Comment$4 = class Comment2 extends Node$2 {\n constructor(defaults) {\n super(defaults);\n this.type = \"comment\";\n }\n};\nvar comment = Comment$4;\nComment$4.default = Comment$4;\nlet { isClean: isClean$1, my: my$1 } = symbols;\nlet Declaration$3 = declaration;\nlet Comment$3 = comment;\nlet Node$1 = node;\nlet parse$4, Rule$4, AtRule$4, Root$6;\nfunction cleanSource(nodes) {\n return nodes.map((i2) => {\n if (i2.nodes) i2.nodes = cleanSource(i2.nodes);\n delete i2.source;\n return i2;\n });\n}\nfunction markDirtyUp(node2) {\n node2[isClean$1] = false;\n if (node2.proxyOf.nodes) {\n for (let i2 of node2.proxyOf.nodes) {\n markDirtyUp(i2);\n }\n }\n}\nlet Container$7 = class Container2 extends Node$1 {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last);\n for (let node2 of nodes) this.proxyOf.nodes.push(node2);\n }\n this.markDirty();\n return this;\n }\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween);\n if (this.nodes) {\n for (let node2 of this.nodes) node2.cleanRaws(keepBetween);\n }\n }\n each(callback) {\n if (!this.proxyOf.nodes) return void 0;\n let iterator = this.getIterator();\n let index2, result2;\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index2 = this.indexes[iterator];\n result2 = callback(this.proxyOf.nodes[index2], index2);\n if (result2 === false) break;\n this.indexes[iterator] += 1;\n }\n delete this.indexes[iterator];\n return result2;\n }\n every(condition) {\n return this.nodes.every(condition);\n }\n getIterator() {\n if (!this.lastEach) this.lastEach = 0;\n if (!this.indexes) this.indexes = {};\n this.lastEach += 1;\n let iterator = this.lastEach;\n this.indexes[iterator] = 0;\n return iterator;\n }\n getProxyProcessor() {\n return {\n get(node2, prop) {\n if (prop === \"proxyOf\") {\n return node2;\n } else if (!node2[prop]) {\n return node2[prop];\n } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n return (...args) => {\n return node2[prop](\n ...args.map((i2) => {\n if (typeof i2 === \"function\") {\n return (child, index2) => i2(child.toProxy(), index2);\n } else {\n return i2;\n }\n })\n );\n };\n } else if (prop === \"every\" || prop === \"some\") {\n return (cb) => {\n return node2[prop](\n (child, ...other) => cb(child.toProxy(), ...other)\n );\n };\n } else if (prop === \"root\") {\n return () => node2.root().toProxy();\n } else if (prop === \"nodes\") {\n return node2.nodes.map((i2) => i2.toProxy());\n } else if (prop === \"first\" || prop === \"last\") {\n return node2[prop].toProxy();\n } else {\n return node2[prop];\n }\n },\n set(node2, prop, value) {\n if (node2[prop] === value) return true;\n node2[prop] = value;\n if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n node2.markDirty();\n }\n return true;\n }\n };\n }\n index(child) {\n if (typeof child === \"number\") return child;\n if (child.proxyOf) child = child.proxyOf;\n return this.proxyOf.nodes.indexOf(child);\n }\n insertAfter(exist, add) {\n let existIndex = this.index(exist);\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n existIndex = this.index(exist);\n for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (existIndex < index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n insertBefore(exist, add) {\n let existIndex = this.index(exist);\n let type = existIndex === 0 ? \"prepend\" : false;\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n existIndex = this.index(exist);\n for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex, 0, node2);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (existIndex <= index2) {\n this.indexes[id] = index2 + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n normalize(nodes, sample) {\n if (typeof nodes === \"string\") {\n nodes = cleanSource(parse$4(nodes).nodes);\n } else if (typeof nodes === \"undefined\") {\n nodes = [];\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0);\n for (let i2 of nodes) {\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type === \"root\" && this.type !== \"document\") {\n nodes = nodes.nodes.slice(0);\n for (let i2 of nodes) {\n if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n }\n } else if (nodes.type) {\n nodes = [nodes];\n } else if (nodes.prop) {\n if (typeof nodes.value === \"undefined\") {\n throw new Error(\"Value field is missed in node creation\");\n } else if (typeof nodes.value !== \"string\") {\n nodes.value = String(nodes.value);\n }\n nodes = [new Declaration$3(nodes)];\n } else if (nodes.selector) {\n nodes = [new Rule$4(nodes)];\n } else if (nodes.name) {\n nodes = [new AtRule$4(nodes)];\n } else if (nodes.text) {\n nodes = [new Comment$3(nodes)];\n } else {\n throw new Error(\"Unknown node type in node creation\");\n }\n let processed = nodes.map((i2) => {\n if (!i2[my$1]) Container2.rebuild(i2);\n i2 = i2.proxyOf;\n if (i2.parent) i2.parent.removeChild(i2);\n if (i2[isClean$1]) markDirtyUp(i2);\n if (typeof i2.raws.before === \"undefined\") {\n if (sample && typeof sample.raws.before !== \"undefined\") {\n i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n }\n }\n i2.parent = this.proxyOf;\n return i2;\n });\n return processed;\n }\n prepend(...children) {\n children = children.reverse();\n for (let child of children) {\n let nodes = this.normalize(child, this.first, \"prepend\").reverse();\n for (let node2 of nodes) this.proxyOf.nodes.unshift(node2);\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length;\n }\n }\n this.markDirty();\n return this;\n }\n push(child) {\n child.parent = this;\n this.proxyOf.nodes.push(child);\n return this;\n }\n removeAll() {\n for (let node2 of this.proxyOf.nodes) node2.parent = void 0;\n this.proxyOf.nodes = [];\n this.markDirty();\n return this;\n }\n removeChild(child) {\n child = this.index(child);\n this.proxyOf.nodes[child].parent = void 0;\n this.proxyOf.nodes.splice(child, 1);\n let index2;\n for (let id in this.indexes) {\n index2 = this.indexes[id];\n if (index2 >= child) {\n this.indexes[id] = index2 - 1;\n }\n }\n this.markDirty();\n return this;\n }\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts;\n opts = {};\n }\n this.walkDecls((decl) => {\n if (opts.props && !opts.props.includes(decl.prop)) return;\n if (opts.fast && !decl.value.includes(opts.fast)) return;\n decl.value = decl.value.replace(pattern, callback);\n });\n this.markDirty();\n return this;\n }\n some(condition) {\n return this.nodes.some(condition);\n }\n walk(callback) {\n return this.each((child, i2) => {\n let result2;\n try {\n result2 = callback(child, i2);\n } catch (e2) {\n throw child.addToError(e2);\n }\n if (result2 !== false && child.walk) {\n result2 = child.walk(callback);\n }\n return result2;\n });\n }\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name;\n return this.walk((child, i2) => {\n if (child.type === \"atrule\") {\n return callback(child, i2);\n }\n });\n }\n if (name instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"atrule\" && name.test(child.name)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"atrule\" && child.name === name) {\n return callback(child, i2);\n }\n });\n }\n walkComments(callback) {\n return this.walk((child, i2) => {\n if (child.type === \"comment\") {\n return callback(child, i2);\n }\n });\n }\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop;\n return this.walk((child, i2) => {\n if (child.type === \"decl\") {\n return callback(child, i2);\n }\n });\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"decl\" && prop.test(child.prop)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"decl\" && child.prop === prop) {\n return callback(child, i2);\n }\n });\n }\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector;\n return this.walk((child, i2) => {\n if (child.type === \"rule\") {\n return callback(child, i2);\n }\n });\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i2) => {\n if (child.type === \"rule\" && selector.test(child.selector)) {\n return callback(child, i2);\n }\n });\n }\n return this.walk((child, i2) => {\n if (child.type === \"rule\" && child.selector === selector) {\n return callback(child, i2);\n }\n });\n }\n get first() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[0];\n }\n get last() {\n if (!this.proxyOf.nodes) return void 0;\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n }\n};\nContainer$7.registerParse = (dependant) => {\n parse$4 = dependant;\n};\nContainer$7.registerRule = (dependant) => {\n Rule$4 = dependant;\n};\nContainer$7.registerAtRule = (dependant) => {\n AtRule$4 = dependant;\n};\nContainer$7.registerRoot = (dependant) => {\n Root$6 = dependant;\n};\nvar container = Container$7;\nContainer$7.default = Container$7;\nContainer$7.rebuild = (node2) => {\n if (node2.type === \"atrule\") {\n Object.setPrototypeOf(node2, AtRule$4.prototype);\n } else if (node2.type === \"rule\") {\n Object.setPrototypeOf(node2, Rule$4.prototype);\n } else if (node2.type === \"decl\") {\n Object.setPrototypeOf(node2, Declaration$3.prototype);\n } else if (node2.type === \"comment\") {\n Object.setPrototypeOf(node2, Comment$3.prototype);\n } else if (node2.type === \"root\") {\n Object.setPrototypeOf(node2, Root$6.prototype);\n }\n node2[my$1] = true;\n if (node2.nodes) {\n node2.nodes.forEach((child) => {\n Container$7.rebuild(child);\n });\n }\n};\nlet Container$6 = container;\nlet LazyResult$4, Processor$3;\nlet Document$3 = class Document23 extends Container$6 {\n constructor(defaults) {\n super({ type: \"document\", ...defaults });\n if (!this.nodes) {\n this.nodes = [];\n }\n }\n toResult(opts = {}) {\n let lazy = new LazyResult$4(new Processor$3(), this, opts);\n return lazy.stringify();\n }\n};\nDocument$3.registerLazyResult = (dependant) => {\n LazyResult$4 = dependant;\n};\nDocument$3.registerProcessor = (dependant) => {\n Processor$3 = dependant;\n};\nvar document$1 = Document$3;\nDocument$3.default = Document$3;\nlet printed = {};\nvar warnOnce$2 = function warnOnce2(message) {\n if (printed[message]) return;\n printed[message] = true;\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(message);\n }\n};\nlet Warning$2 = class Warning2 {\n constructor(text, opts = {}) {\n this.type = \"warning\";\n this.text = text;\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts);\n this.line = range.start.line;\n this.column = range.start.column;\n this.endLine = range.end.line;\n this.endColumn = range.end.column;\n }\n for (let opt in opts) this[opt] = opts[opt];\n }\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message;\n }\n if (this.plugin) {\n return this.plugin + \": \" + this.text;\n }\n return this.text;\n }\n};\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\nlet Warning$1 = warning;\nlet Result$3 = class Result2 {\n constructor(processor2, root2, opts) {\n this.processor = processor2;\n this.messages = [];\n this.root = root2;\n this.opts = opts;\n this.css = void 0;\n this.map = void 0;\n }\n toString() {\n return this.css;\n }\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin;\n }\n }\n let warning2 = new Warning$1(text, opts);\n this.messages.push(warning2);\n return warning2;\n }\n warnings() {\n return this.messages.filter((i2) => i2.type === \"warning\");\n }\n get content() {\n return this.css;\n }\n};\nvar result = Result$3;\nResult$3.default = Result$3;\nconst SINGLE_QUOTE = \"'\".charCodeAt(0);\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0);\nconst BACKSLASH = \"\\\\\".charCodeAt(0);\nconst SLASH = \"/\".charCodeAt(0);\nconst NEWLINE = \"\\n\".charCodeAt(0);\nconst SPACE = \" \".charCodeAt(0);\nconst FEED = \"\\f\".charCodeAt(0);\nconst TAB = \"\t\".charCodeAt(0);\nconst CR = \"\\r\".charCodeAt(0);\nconst OPEN_SQUARE = \"[\".charCodeAt(0);\nconst CLOSE_SQUARE = \"]\".charCodeAt(0);\nconst OPEN_PARENTHESES = \"(\".charCodeAt(0);\nconst CLOSE_PARENTHESES = \")\".charCodeAt(0);\nconst OPEN_CURLY = \"{\".charCodeAt(0);\nconst CLOSE_CURLY = \"}\".charCodeAt(0);\nconst SEMICOLON = \";\".charCodeAt(0);\nconst ASTERISK = \"*\".charCodeAt(0);\nconst COLON = \":\".charCodeAt(0);\nconst AT = \"@\".charCodeAt(0);\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\nconst RE_HEX_ESCAPE = /[\\da-f]/i;\nvar tokenize = function tokenizer2(input2, options = {}) {\n let css = input2.css.valueOf();\n let ignore = options.ignoreErrors;\n let code, next, quote, content, escape;\n let escaped, escapePos, prev, n2, currentToken;\n let length = css.length;\n let pos = 0;\n let buffer = [];\n let returned = [];\n function position() {\n return pos;\n }\n function unclosed(what) {\n throw input2.error(\"Unclosed \" + what, pos);\n }\n function endOfFile() {\n return returned.length === 0 && pos >= length;\n }\n function nextToken(opts) {\n if (returned.length) return returned.pop();\n if (pos >= length) return;\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n code = css.charCodeAt(pos);\n switch (code) {\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED: {\n next = pos;\n do {\n next += 1;\n code = css.charCodeAt(next);\n } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n currentToken = [\"space\", css.slice(pos, next)];\n pos = next - 1;\n break;\n }\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES: {\n let controlChar = String.fromCharCode(code);\n currentToken = [controlChar, controlChar, pos];\n break;\n }\n case OPEN_PARENTHESES: {\n prev = buffer.length ? buffer.pop()[1] : \"\";\n n2 = css.charCodeAt(pos + 1);\n if (prev === \"url\" && n2 !== SINGLE_QUOTE && n2 !== DOUBLE_QUOTE && n2 !== SPACE && n2 !== NEWLINE && n2 !== TAB && n2 !== FEED && n2 !== CR) {\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(\")\", next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos;\n break;\n } else {\n unclosed(\"bracket\");\n }\n }\n escapePos = next;\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n currentToken = [\"brackets\", css.slice(pos, next + 1), pos, next];\n pos = next;\n } else {\n next = css.indexOf(\")\", pos + 1);\n content = css.slice(pos, next + 1);\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = [\"(\", \"(\", pos];\n } else {\n currentToken = [\"brackets\", content, pos, next];\n pos = next;\n }\n }\n break;\n }\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE: {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n next = pos;\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1;\n break;\n } else {\n unclosed(\"string\");\n }\n }\n escapePos = next;\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n currentToken = [\"string\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n case AT: {\n RE_AT_END.lastIndex = pos + 1;\n RE_AT_END.test(css);\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_AT_END.lastIndex - 2;\n }\n currentToken = [\"at-word\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n case BACKSLASH: {\n next = pos;\n escape = true;\n while (css.charCodeAt(next + 1) === BACKSLASH) {\n next += 1;\n escape = !escape;\n }\n code = css.charCodeAt(next + 1);\n if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n next += 1;\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n next += 1;\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1;\n }\n }\n }\n currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n pos = next;\n break;\n }\n default: {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf(\"*/\", pos + 2) + 1;\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length;\n } else {\n unclosed(\"comment\");\n }\n }\n currentToken = [\"comment\", css.slice(pos, next + 1), pos, next];\n pos = next;\n } else {\n RE_WORD_END.lastIndex = pos + 1;\n RE_WORD_END.test(css);\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1;\n } else {\n next = RE_WORD_END.lastIndex - 2;\n }\n currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n buffer.push(currentToken);\n pos = next;\n }\n break;\n }\n }\n pos++;\n return currentToken;\n }\n function back(token) {\n returned.push(token);\n }\n return {\n back,\n endOfFile,\n nextToken,\n position\n };\n};\nlet Container$5 = container;\nlet AtRule$3 = class AtRule2 extends Container$5 {\n constructor(defaults) {\n super(defaults);\n this.type = \"atrule\";\n }\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = [];\n return super.append(...children);\n }\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = [];\n return super.prepend(...children);\n }\n};\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\nContainer$5.registerAtRule(AtRule$3);\nlet Container$4 = container;\nlet LazyResult$3, Processor$2;\nlet Root$5 = class Root2 extends Container$4 {\n constructor(defaults) {\n super(defaults);\n this.type = \"root\";\n if (!this.nodes) this.nodes = [];\n }\n normalize(child, sample, type) {\n let nodes = super.normalize(child);\n if (sample) {\n if (type === \"prepend\") {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before;\n } else {\n delete sample.raws.before;\n }\n } else if (this.first !== sample) {\n for (let node2 of nodes) {\n node2.raws.before = sample.raws.before;\n }\n }\n }\n return nodes;\n }\n removeChild(child, ignore) {\n let index2 = this.index(child);\n if (!ignore && index2 === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index2].raws.before;\n }\n return super.removeChild(child);\n }\n toResult(opts = {}) {\n let lazy = new LazyResult$3(new Processor$2(), this, opts);\n return lazy.stringify();\n }\n};\nRoot$5.registerLazyResult = (dependant) => {\n LazyResult$3 = dependant;\n};\nRoot$5.registerProcessor = (dependant) => {\n Processor$2 = dependant;\n};\nvar root = Root$5;\nRoot$5.default = Root$5;\nContainer$4.registerRoot(Root$5);\nlet list$2 = {\n comma(string) {\n return list$2.split(string, [\",\"], true);\n },\n space(string) {\n let spaces = [\" \", \"\\n\", \"\t\"];\n return list$2.split(string, spaces);\n },\n split(string, separators, last) {\n let array = [];\n let current = \"\";\n let split = false;\n let func = 0;\n let inQuote = false;\n let prevQuote = \"\";\n let escape = false;\n for (let letter of string) {\n if (escape) {\n escape = false;\n } else if (letter === \"\\\\\") {\n escape = true;\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false;\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true;\n prevQuote = letter;\n } else if (letter === \"(\") {\n func += 1;\n } else if (letter === \")\") {\n if (func > 0) func -= 1;\n } else if (func === 0) {\n if (separators.includes(letter)) split = true;\n }\n if (split) {\n if (current !== \"\") array.push(current.trim());\n current = \"\";\n split = false;\n } else {\n current += letter;\n }\n }\n if (last || current !== \"\") array.push(current.trim());\n return array;\n }\n};\nvar list_1 = list$2;\nlist$2.default = list$2;\nlet Container$3 = container;\nlet list$1 = list_1;\nlet Rule$3 = class Rule2 extends Container$3 {\n constructor(defaults) {\n super(defaults);\n this.type = \"rule\";\n if (!this.nodes) this.nodes = [];\n }\n get selectors() {\n return list$1.comma(this.selector);\n }\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null;\n let sep2 = match ? match[0] : \",\" + this.raw(\"between\", \"beforeOpen\");\n this.selector = values.join(sep2);\n }\n};\nvar rule = Rule$3;\nRule$3.default = Rule$3;\nContainer$3.registerRule(Rule$3);\nlet Declaration$2 = declaration;\nlet tokenizer22 = tokenize;\nlet Comment$2 = comment;\nlet AtRule$2 = atRule;\nlet Root$4 = root;\nlet Rule$2 = rule;\nconst SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n};\nfunction findLastWithPosition(tokens) {\n for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n let token = tokens[i2];\n let pos = token[3] || token[2];\n if (pos) return pos;\n }\n}\nlet Parser$1 = class Parser2 {\n constructor(input2) {\n this.input = input2;\n this.root = new Root$4();\n this.current = this.root;\n this.spaces = \"\";\n this.semicolon = false;\n this.createTokenizer();\n this.root.source = { input: input2, start: { column: 1, line: 1, offset: 0 } };\n }\n atrule(token) {\n let node2 = new AtRule$2();\n node2.name = token[1].slice(1);\n if (node2.name === \"\") {\n this.unnamedAtrule(node2, token);\n }\n this.init(node2, token[2]);\n let type;\n let prev;\n let shift;\n let last = false;\n let open = false;\n let params = [];\n let brackets = [];\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken();\n type = token[0];\n if (type === \"(\" || type === \"[\") {\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (type === \"{\" && brackets.length > 0) {\n brackets.push(\"}\");\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n }\n if (brackets.length === 0) {\n if (type === \";\") {\n node2.source.end = this.getPosition(token[2]);\n node2.source.end.offset++;\n this.semicolon = true;\n break;\n } else if (type === \"{\") {\n open = true;\n break;\n } else if (type === \"}\") {\n if (params.length > 0) {\n shift = params.length - 1;\n prev = params[shift];\n while (prev && prev[0] === \"space\") {\n prev = params[--shift];\n }\n if (prev) {\n node2.source.end = this.getPosition(prev[3] || prev[2]);\n node2.source.end.offset++;\n }\n }\n this.end(token);\n break;\n } else {\n params.push(token);\n }\n } else {\n params.push(token);\n }\n if (this.tokenizer.endOfFile()) {\n last = true;\n break;\n }\n }\n node2.raws.between = this.spacesAndCommentsFromEnd(params);\n if (params.length) {\n node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n this.raw(node2, \"params\", params);\n if (last) {\n token = params[params.length - 1];\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n this.spaces = node2.raws.between;\n node2.raws.between = \"\";\n }\n } else {\n node2.raws.afterName = \"\";\n node2.params = \"\";\n }\n if (open) {\n node2.nodes = [];\n this.current = node2;\n }\n }\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens);\n if (colon === false) return;\n let founded = 0;\n let token;\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j];\n if (token[0] !== \"space\") {\n founded += 1;\n if (founded === 2) break;\n }\n }\n throw this.input.error(\n \"Missed semicolon\",\n token[0] === \"word\" ? token[3] + 1 : token[2]\n );\n }\n colon(tokens) {\n let brackets = 0;\n let token, type, prev;\n for (let [i2, element] of tokens.entries()) {\n token = element;\n type = token[0];\n if (type === \"(\") {\n brackets += 1;\n }\n if (type === \")\") {\n brackets -= 1;\n }\n if (brackets === 0 && type === \":\") {\n if (!prev) {\n this.doubleColon(token);\n } else if (prev[0] === \"word\" && prev[1] === \"progid\") {\n continue;\n } else {\n return i2;\n }\n }\n prev = token;\n }\n return false;\n }\n comment(token) {\n let node2 = new Comment$2();\n this.init(node2, token[2]);\n node2.source.end = this.getPosition(token[3] || token[2]);\n node2.source.end.offset++;\n let text = token[1].slice(2, -2);\n if (/^\\s*$/.test(text)) {\n node2.text = \"\";\n node2.raws.left = text;\n node2.raws.right = \"\";\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n node2.text = match[2];\n node2.raws.left = match[1];\n node2.raws.right = match[3];\n }\n }\n createTokenizer() {\n this.tokenizer = tokenizer22(this.input);\n }\n decl(tokens, customProperty) {\n let node2 = new Declaration$2();\n this.init(node2, tokens[0][2]);\n let last = tokens[tokens.length - 1];\n if (last[0] === \";\") {\n this.semicolon = true;\n tokens.pop();\n }\n node2.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition(tokens)\n );\n node2.source.end.offset++;\n while (tokens[0][0] !== \"word\") {\n if (tokens.length === 1) this.unknownWord(tokens);\n node2.raws.before += tokens.shift()[1];\n }\n node2.source.start = this.getPosition(tokens[0][2]);\n node2.prop = \"\";\n while (tokens.length) {\n let type = tokens[0][0];\n if (type === \":\" || type === \"space\" || type === \"comment\") {\n break;\n }\n node2.prop += tokens.shift()[1];\n }\n node2.raws.between = \"\";\n let token;\n while (tokens.length) {\n token = tokens.shift();\n if (token[0] === \":\") {\n node2.raws.between += token[1];\n break;\n } else {\n if (token[0] === \"word\" && /\\w/.test(token[1])) {\n this.unknownWord([token]);\n }\n node2.raws.between += token[1];\n }\n }\n if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n node2.raws.before += node2.prop[0];\n node2.prop = node2.prop.slice(1);\n }\n let firstSpaces = [];\n let next;\n while (tokens.length) {\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n firstSpaces.push(tokens.shift());\n }\n this.precheckMissedSemicolon(tokens);\n for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n token = tokens[i2];\n if (token[1].toLowerCase() === \"!important\") {\n node2.important = true;\n let string = this.stringFrom(tokens, i2);\n string = this.spacesFromEnd(tokens) + string;\n if (string !== \" !important\") node2.raws.important = string;\n break;\n } else if (token[1].toLowerCase() === \"important\") {\n let cache = tokens.slice(0);\n let str = \"\";\n for (let j = i2; j > 0; j--) {\n let type = cache[j][0];\n if (str.trim().indexOf(\"!\") === 0 && type !== \"space\") {\n break;\n }\n str = cache.pop()[1] + str;\n }\n if (str.trim().indexOf(\"!\") === 0) {\n node2.important = true;\n node2.raws.important = str;\n tokens = cache;\n }\n }\n if (token[0] !== \"space\" && token[0] !== \"comment\") {\n break;\n }\n }\n let hasWord = tokens.some((i2) => i2[0] !== \"space\" && i2[0] !== \"comment\");\n if (hasWord) {\n node2.raws.between += firstSpaces.map((i2) => i2[1]).join(\"\");\n firstSpaces = [];\n }\n this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n if (node2.value.includes(\":\") && !customProperty) {\n this.checkMissedSemicolon(tokens);\n }\n }\n doubleColon(token) {\n throw this.input.error(\n \"Double colon\",\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n );\n }\n emptyRule(token) {\n let node2 = new Rule$2();\n this.init(node2, token[2]);\n node2.selector = \"\";\n node2.raws.between = \"\";\n this.current = node2;\n }\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.semicolon = false;\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.spaces = \"\";\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2]);\n this.current.source.end.offset++;\n this.current = this.current.parent;\n } else {\n this.unexpectedClose(token);\n }\n }\n endFile() {\n if (this.current.parent) this.unclosedBlock();\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon;\n }\n this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n this.root.source.end = this.getPosition(this.tokenizer.position());\n }\n freeSemicolon(token) {\n this.spaces += token[1];\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1];\n if (prev && prev.type === \"rule\" && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces;\n this.spaces = \"\";\n }\n }\n }\n // Helpers\n getPosition(offset) {\n let pos = this.input.fromOffset(offset);\n return {\n column: pos.col,\n line: pos.line,\n offset\n };\n }\n init(node2, offset) {\n this.current.push(node2);\n node2.source = {\n input: this.input,\n start: this.getPosition(offset)\n };\n node2.raws.before = this.spaces;\n this.spaces = \"\";\n if (node2.type !== \"comment\") this.semicolon = false;\n }\n other(start) {\n let end = false;\n let type = null;\n let colon = false;\n let bracket = null;\n let brackets = [];\n let customProperty = start[1].startsWith(\"--\");\n let tokens = [];\n let token = start;\n while (token) {\n type = token[0];\n tokens.push(token);\n if (type === \"(\" || type === \"[\") {\n if (!bracket) bracket = token;\n brackets.push(type === \"(\" ? \")\" : \"]\");\n } else if (customProperty && colon && type === \"{\") {\n if (!bracket) bracket = token;\n brackets.push(\"}\");\n } else if (brackets.length === 0) {\n if (type === \";\") {\n if (colon) {\n this.decl(tokens, customProperty);\n return;\n } else {\n break;\n }\n } else if (type === \"{\") {\n this.rule(tokens);\n return;\n } else if (type === \"}\") {\n this.tokenizer.back(tokens.pop());\n end = true;\n break;\n } else if (type === \":\") {\n colon = true;\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop();\n if (brackets.length === 0) bracket = null;\n }\n token = this.tokenizer.nextToken();\n }\n if (this.tokenizer.endOfFile()) end = true;\n if (brackets.length > 0) this.unclosedBracket(bracket);\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0];\n if (token !== \"space\" && token !== \"comment\") break;\n this.tokenizer.back(tokens.pop());\n }\n }\n this.decl(tokens, customProperty);\n } else {\n this.unknownWord(tokens);\n }\n }\n parse() {\n let token;\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken();\n switch (token[0]) {\n case \"space\":\n this.spaces += token[1];\n break;\n case \";\":\n this.freeSemicolon(token);\n break;\n case \"}\":\n this.end(token);\n break;\n case \"comment\":\n this.comment(token);\n break;\n case \"at-word\":\n this.atrule(token);\n break;\n case \"{\":\n this.emptyRule(token);\n break;\n default:\n this.other(token);\n break;\n }\n }\n this.endFile();\n }\n precheckMissedSemicolon() {\n }\n raw(node2, prop, tokens, customProperty) {\n let token, type;\n let length = tokens.length;\n let value = \"\";\n let clean = true;\n let next, prev;\n for (let i2 = 0; i2 < length; i2 += 1) {\n token = tokens[i2];\n type = token[0];\n if (type === \"space\" && i2 === length - 1 && !customProperty) {\n clean = false;\n } else if (type === \"comment\") {\n prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n next = tokens[i2 + 1] ? tokens[i2 + 1][0] : \"empty\";\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === \",\") {\n clean = false;\n } else {\n value += token[1];\n }\n } else {\n clean = false;\n }\n } else {\n value += token[1];\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i2) => all + i2[1], \"\");\n node2.raws[prop] = { raw, value };\n }\n node2[prop] = value;\n }\n rule(tokens) {\n tokens.pop();\n let node2 = new Rule$2();\n this.init(node2, tokens[0][2]);\n node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n this.raw(node2, \"selector\", tokens);\n this.current = node2;\n }\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType;\n let spaces = \"\";\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\" && lastTokenType !== \"comment\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n }\n // Errors\n spacesAndCommentsFromStart(tokens) {\n let next;\n let spaces = \"\";\n while (tokens.length) {\n next = tokens[0][0];\n if (next !== \"space\" && next !== \"comment\") break;\n spaces += tokens.shift()[1];\n }\n return spaces;\n }\n spacesFromEnd(tokens) {\n let lastTokenType;\n let spaces = \"\";\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0];\n if (lastTokenType !== \"space\") break;\n spaces = tokens.pop()[1] + spaces;\n }\n return spaces;\n }\n stringFrom(tokens, from) {\n let result2 = \"\";\n for (let i2 = from; i2 < tokens.length; i2++) {\n result2 += tokens[i2][1];\n }\n tokens.splice(from, tokens.length - from);\n return result2;\n }\n unclosedBlock() {\n let pos = this.current.source.start;\n throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n }\n unclosedBracket(bracket) {\n throw this.input.error(\n \"Unclosed bracket\",\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n );\n }\n unexpectedClose(token) {\n throw this.input.error(\n \"Unexpected }\",\n { offset: token[2] },\n { offset: token[2] + 1 }\n );\n }\n unknownWord(tokens) {\n throw this.input.error(\n \"Unknown word\",\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n );\n }\n unnamedAtrule(node2, token) {\n throw this.input.error(\n \"At-rule without name\",\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n );\n }\n};\nvar parser = Parser$1;\nlet Container$2 = container;\nlet Parser22 = parser;\nlet Input$2 = input;\nfunction parse$3(css, opts) {\n let input2 = new Input$2(css, opts);\n let parser2 = new Parser22(input2);\n try {\n parser2.parse();\n } catch (e2) {\n if (process.env.NODE_ENV !== \"production\") {\n if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n } else if (/\\.sass/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n } else if (/\\.less$/i.test(opts.from)) {\n e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n }\n }\n }\n throw e2;\n }\n return parser2.root;\n}\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\nContainer$2.registerParse(parse$3);\nlet { isClean, my } = symbols;\nlet MapGenerator$1 = mapGenerator;\nlet stringify$2 = stringify_1;\nlet Container$1 = container;\nlet Document$2 = document$1;\nlet warnOnce$1 = warnOnce$2;\nlet Result$2 = result;\nlet parse$2 = parse_1;\nlet Root$3 = root;\nconst TYPE_TO_CLASS_NAME = {\n atrule: \"AtRule\",\n comment: \"Comment\",\n decl: \"Declaration\",\n document: \"Document\",\n root: \"Root\",\n rule: \"Rule\"\n};\nconst PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n};\nconst NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n};\nconst CHILDREN = 0;\nfunction isPromise(obj) {\n return typeof obj === \"object\" && typeof obj.then === \"function\";\n}\nfunction getEvents(node2) {\n let key = false;\n let type = TYPE_TO_CLASS_NAME[node2.type];\n if (node2.type === \"decl\") {\n key = node2.prop.toLowerCase();\n } else if (node2.type === \"atrule\") {\n key = node2.name.toLowerCase();\n }\n if (key && node2.append) {\n return [\n type,\n type + \"-\" + key,\n CHILDREN,\n type + \"Exit\",\n type + \"Exit-\" + key\n ];\n } else if (key) {\n return [type, type + \"-\" + key, type + \"Exit\", type + \"Exit-\" + key];\n } else if (node2.append) {\n return [type, CHILDREN, type + \"Exit\"];\n } else {\n return [type, type + \"Exit\"];\n }\n}\nfunction toStack(node2) {\n let events;\n if (node2.type === \"document\") {\n events = [\"Document\", CHILDREN, \"DocumentExit\"];\n } else if (node2.type === \"root\") {\n events = [\"Root\", CHILDREN, \"RootExit\"];\n } else {\n events = getEvents(node2);\n }\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node: node2,\n visitorIndex: 0,\n visitors: []\n };\n}\nfunction cleanMarks(node2) {\n node2[isClean] = false;\n if (node2.nodes) node2.nodes.forEach((i2) => cleanMarks(i2));\n return node2;\n}\nlet postcss$2 = {};\nlet LazyResult$2 = class LazyResult2 {\n constructor(processor2, css, opts) {\n this.stringified = false;\n this.processed = false;\n let root2;\n if (typeof css === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n root2 = cleanMarks(css);\n } else if (css instanceof LazyResult2 || css instanceof Result$2) {\n root2 = cleanMarks(css.root);\n if (css.map) {\n if (typeof opts.map === \"undefined\") opts.map = {};\n if (!opts.map.inline) opts.map.inline = false;\n opts.map.prev = css.map;\n }\n } else {\n let parser2 = parse$2;\n if (opts.syntax) parser2 = opts.syntax.parse;\n if (opts.parser) parser2 = opts.parser;\n if (parser2.parse) parser2 = parser2.parse;\n try {\n root2 = parser2(css, opts);\n } catch (error) {\n this.processed = true;\n this.error = error;\n }\n if (root2 && !root2[my]) {\n Container$1.rebuild(root2);\n }\n }\n this.result = new Result$2(processor2, root2, opts);\n this.helpers = { ...postcss$2, postcss: postcss$2, result: this.result };\n this.plugins = this.processor.plugins.map((plugin22) => {\n if (typeof plugin22 === \"object\" && plugin22.prepare) {\n return { ...plugin22, ...plugin22.prepare(this.result) };\n } else {\n return plugin22;\n }\n });\n }\n async() {\n if (this.error) return Promise.reject(this.error);\n if (this.processed) return Promise.resolve(this.result);\n if (!this.processing) {\n this.processing = this.runAsync();\n }\n return this.processing;\n }\n catch(onRejected) {\n return this.async().catch(onRejected);\n }\n finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n }\n getAsyncError() {\n throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n }\n handleError(error, node2) {\n let plugin22 = this.result.lastPlugin;\n try {\n if (node2) node2.addToError(error);\n this.error = error;\n if (error.name === \"CssSyntaxError\" && !error.plugin) {\n error.plugin = plugin22.postcssPlugin;\n error.setMessage();\n } else if (plugin22.postcssVersion) {\n if (process.env.NODE_ENV !== \"production\") {\n let pluginName = plugin22.postcssPlugin;\n let pluginVer = plugin22.postcssVersion;\n let runtimeVer = this.result.processor.version;\n let a2 = pluginVer.split(\".\");\n let b = runtimeVer.split(\".\");\n if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n console.error(\n \"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\"\n );\n }\n }\n }\n } catch (err) {\n if (console && console.error) console.error(err);\n }\n return error;\n }\n prepareVisitors() {\n this.listeners = {};\n let add = (plugin22, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = [];\n this.listeners[type].push([plugin22, cb]);\n };\n for (let plugin22 of this.plugins) {\n if (typeof plugin22 === \"object\") {\n for (let event in plugin22) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin22.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`\n );\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin22[event] === \"object\") {\n for (let filter in plugin22[event]) {\n if (filter === \"*\") {\n add(plugin22, event, plugin22[event][filter]);\n } else {\n add(\n plugin22,\n event + \"-\" + filter.toLowerCase(),\n plugin22[event][filter]\n );\n }\n }\n } else if (typeof plugin22[event] === \"function\") {\n add(plugin22, event, plugin22[event]);\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0;\n }\n async runAsync() {\n this.plugin = 0;\n for (let i2 = 0; i2 < this.plugins.length; i2++) {\n let plugin22 = this.plugins[i2];\n let promise = this.runOnRoot(plugin22);\n if (isPromise(promise)) {\n try {\n await promise;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n let root2 = this.result.root;\n while (!root2[isClean]) {\n root2[isClean] = true;\n let stack = [toStack(root2)];\n while (stack.length > 0) {\n let promise = this.visitTick(stack);\n if (isPromise(promise)) {\n try {\n await promise;\n } catch (e2) {\n let node2 = stack[stack.length - 1].node;\n throw this.handleError(e2, node2);\n }\n }\n }\n }\n if (this.listeners.OnceExit) {\n for (let [plugin22, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin22;\n try {\n if (root2.type === \"document\") {\n let roots = root2.nodes.map(\n (subRoot) => visitor(subRoot, this.helpers)\n );\n await Promise.all(roots);\n } else {\n await visitor(root2, this.helpers);\n }\n } catch (e2) {\n throw this.handleError(e2);\n }\n }\n }\n }\n this.processed = true;\n return this.stringify();\n }\n runOnRoot(plugin22) {\n this.result.lastPlugin = plugin22;\n try {\n if (typeof plugin22 === \"object\" && plugin22.Once) {\n if (this.result.root.type === \"document\") {\n let roots = this.result.root.nodes.map(\n (root2) => plugin22.Once(root2, this.helpers)\n );\n if (isPromise(roots[0])) {\n return Promise.all(roots);\n }\n return roots;\n }\n return plugin22.Once(this.result.root, this.helpers);\n } else if (typeof plugin22 === \"function\") {\n return plugin22(this.result.root, this.result);\n }\n } catch (error) {\n throw this.handleError(error);\n }\n }\n stringify() {\n if (this.error) throw this.error;\n if (this.stringified) return this.result;\n this.stringified = true;\n this.sync();\n let opts = this.result.opts;\n let str = stringify$2;\n if (opts.syntax) str = opts.syntax.stringify;\n if (opts.stringifier) str = opts.stringifier;\n if (str.stringify) str = str.stringify;\n let map = new MapGenerator$1(str, this.result.root, this.result.opts);\n let data = map.generate();\n this.result.css = data[0];\n this.result.map = data[1];\n return this.result;\n }\n sync() {\n if (this.error) throw this.error;\n if (this.processed) return this.result;\n this.processed = true;\n if (this.processing) {\n throw this.getAsyncError();\n }\n for (let plugin22 of this.plugins) {\n let promise = this.runOnRoot(plugin22);\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n this.prepareVisitors();\n if (this.hasListener) {\n let root2 = this.result.root;\n while (!root2[isClean]) {\n root2[isClean] = true;\n this.walkSync(root2);\n }\n if (this.listeners.OnceExit) {\n if (root2.type === \"document\") {\n for (let subRoot of root2.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot);\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root2);\n }\n }\n }\n return this.result;\n }\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this.opts)) {\n warnOnce$1(\n \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n );\n }\n }\n return this.async().then(onFulfilled, onRejected);\n }\n toString() {\n return this.css;\n }\n visitSync(visitors, node2) {\n for (let [plugin22, visitor] of visitors) {\n this.result.lastPlugin = plugin22;\n let promise;\n try {\n promise = visitor(node2, this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2.proxyOf);\n }\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n return true;\n }\n if (isPromise(promise)) {\n throw this.getAsyncError();\n }\n }\n }\n visitTick(stack) {\n let visit2 = stack[stack.length - 1];\n let { node: node2, visitors } = visit2;\n if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n stack.pop();\n return;\n }\n if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n let [plugin22, visitor] = visitors[visit2.visitorIndex];\n visit2.visitorIndex += 1;\n if (visit2.visitorIndex === visitors.length) {\n visit2.visitors = [];\n visit2.visitorIndex = 0;\n }\n this.result.lastPlugin = plugin22;\n try {\n return visitor(node2.toProxy(), this.helpers);\n } catch (e2) {\n throw this.handleError(e2, node2);\n }\n }\n if (visit2.iterator !== 0) {\n let iterator = visit2.iterator;\n let child;\n while (child = node2.nodes[node2.indexes[iterator]]) {\n node2.indexes[iterator] += 1;\n if (!child[isClean]) {\n child[isClean] = true;\n stack.push(toStack(child));\n return;\n }\n }\n visit2.iterator = 0;\n delete node2.indexes[iterator];\n }\n let events = visit2.events;\n while (visit2.eventIndex < events.length) {\n let event = events[visit2.eventIndex];\n visit2.eventIndex += 1;\n if (event === CHILDREN) {\n if (node2.nodes && node2.nodes.length) {\n node2[isClean] = true;\n visit2.iterator = node2.getIterator();\n }\n return;\n } else if (this.listeners[event]) {\n visit2.visitors = this.listeners[event];\n return;\n }\n }\n stack.pop();\n }\n walkSync(node2) {\n node2[isClean] = true;\n let events = getEvents(node2);\n for (let event of events) {\n if (event === CHILDREN) {\n if (node2.nodes) {\n node2.each((child) => {\n if (!child[isClean]) this.walkSync(child);\n });\n }\n } else {\n let visitors = this.listeners[event];\n if (visitors) {\n if (this.visitSync(visitors, node2.toProxy())) return;\n }\n }\n }\n }\n warnings() {\n return this.sync().warnings();\n }\n get content() {\n return this.stringify().content;\n }\n get css() {\n return this.stringify().css;\n }\n get map() {\n return this.stringify().map;\n }\n get messages() {\n return this.sync().messages;\n }\n get opts() {\n return this.result.opts;\n }\n get processor() {\n return this.result.processor;\n }\n get root() {\n return this.sync().root;\n }\n get [Symbol.toStringTag]() {\n return \"LazyResult\";\n }\n};\nLazyResult$2.registerPostcss = (dependant) => {\n postcss$2 = dependant;\n};\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\nlet MapGenerator22 = mapGenerator;\nlet stringify$1 = stringify_1;\nlet warnOnce22 = warnOnce$2;\nlet parse$1 = parse_1;\nconst Result$1 = result;\nlet NoWorkResult$1 = class NoWorkResult2 {\n constructor(processor2, css, opts) {\n css = css.toString();\n this.stringified = false;\n this._processor = processor2;\n this._css = css;\n this._opts = opts;\n this._map = void 0;\n let root2;\n let str = stringify$1;\n this.result = new Result$1(this._processor, root2, this._opts);\n this.result.css = css;\n let self = this;\n Object.defineProperty(this.result, \"root\", {\n get() {\n return self.root;\n }\n });\n let map = new MapGenerator22(str, root2, this._opts, css);\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate();\n if (generatedCSS) {\n this.result.css = generatedCSS;\n }\n if (generatedMap) {\n this.result.map = generatedMap;\n }\n } else {\n map.clearAnnotation();\n this.result.css = map.css;\n }\n }\n async() {\n if (this.error) return Promise.reject(this.error);\n return Promise.resolve(this.result);\n }\n catch(onRejected) {\n return this.async().catch(onRejected);\n }\n finally(onFinally) {\n return this.async().then(onFinally, onFinally);\n }\n sync() {\n if (this.error) throw this.error;\n return this.result;\n }\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!(\"from\" in this._opts)) {\n warnOnce22(\n \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n );\n }\n }\n return this.async().then(onFulfilled, onRejected);\n }\n toString() {\n return this._css;\n }\n warnings() {\n return [];\n }\n get content() {\n return this.result.css;\n }\n get css() {\n return this.result.css;\n }\n get map() {\n return this.result.map;\n }\n get messages() {\n return [];\n }\n get opts() {\n return this.result.opts;\n }\n get processor() {\n return this.result.processor;\n }\n get root() {\n if (this._root) {\n return this._root;\n }\n let root2;\n let parser2 = parse$1;\n try {\n root2 = parser2(this._css, this._opts);\n } catch (error) {\n this.error = error;\n }\n if (this.error) {\n throw this.error;\n } else {\n this._root = root2;\n return root2;\n }\n }\n get [Symbol.toStringTag]() {\n return \"NoWorkResult\";\n }\n};\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\nlet NoWorkResult22 = noWorkResult;\nlet LazyResult$1 = lazyResult;\nlet Document$1 = document$1;\nlet Root$2 = root;\nlet Processor$1 = class Processor2 {\n constructor(plugins = []) {\n this.version = \"8.4.38\";\n this.plugins = this.normalize(plugins);\n }\n normalize(plugins) {\n let normalized = [];\n for (let i2 of plugins) {\n if (i2.postcss === true) {\n i2 = i2();\n } else if (i2.postcss) {\n i2 = i2.postcss;\n }\n if (typeof i2 === \"object\" && Array.isArray(i2.plugins)) {\n normalized = normalized.concat(i2.plugins);\n } else if (typeof i2 === \"object\" && i2.postcssPlugin) {\n normalized.push(i2);\n } else if (typeof i2 === \"function\") {\n normalized.push(i2);\n } else if (typeof i2 === \"object\" && (i2.parse || i2.stringify)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\n \"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\"\n );\n }\n } else {\n throw new Error(i2 + \" is not a PostCSS plugin\");\n }\n }\n return normalized;\n }\n process(css, opts = {}) {\n if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n return new NoWorkResult22(this, css, opts);\n } else {\n return new LazyResult$1(this, css, opts);\n }\n }\n use(plugin22) {\n this.plugins = this.plugins.concat(this.normalize([plugin22]));\n return this;\n }\n};\nvar processor = Processor$1;\nProcessor$1.default = Processor$1;\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\nlet Declaration$1 = declaration;\nlet PreviousMap22 = previousMap;\nlet Comment$1 = comment;\nlet AtRule$1 = atRule;\nlet Input$1 = input;\nlet Root$1 = root;\nlet Rule$1 = rule;\nfunction fromJSON$1(json, inputs) {\n if (Array.isArray(json)) return json.map((n2) => fromJSON$1(n2));\n let { inputs: ownInputs, ...defaults } = json;\n if (ownInputs) {\n inputs = [];\n for (let input2 of ownInputs) {\n let inputHydrated = { ...input2, __proto__: Input$1.prototype };\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap22.prototype\n };\n }\n inputs.push(inputHydrated);\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map((n2) => fromJSON$1(n2, inputs));\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source;\n defaults.source = source;\n if (inputId != null) {\n defaults.source.input = inputs[inputId];\n }\n }\n if (defaults.type === \"root\") {\n return new Root$1(defaults);\n } else if (defaults.type === \"decl\") {\n return new Declaration$1(defaults);\n } else if (defaults.type === \"rule\") {\n return new Rule$1(defaults);\n } else if (defaults.type === \"comment\") {\n return new Comment$1(defaults);\n } else if (defaults.type === \"atrule\") {\n return new AtRule$1(defaults);\n } else {\n throw new Error(\"Unknown node type: \" + json.type);\n }\n}\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\nlet CssSyntaxError22 = cssSyntaxError;\nlet Declaration22 = declaration;\nlet LazyResult22 = lazyResult;\nlet Container22 = container;\nlet Processor22 = processor;\nlet stringify = stringify_1;\nlet fromJSON = fromJSON_1;\nlet Document222 = document$1;\nlet Warning22 = warning;\nlet Comment22 = comment;\nlet AtRule22 = atRule;\nlet Result22 = result;\nlet Input22 = input;\nlet parse = parse_1;\nlet list = list_1;\nlet Rule22 = rule;\nlet Root22 = root;\nlet Node22 = node;\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0];\n }\n return new Processor22(plugins);\n}\npostcss.plugin = function plugin2(name, initializer) {\n let warningPrinted = false;\n function creator(...args) {\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true;\n console.warn(\n name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"\n );\n if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n console.warn(\n name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\"\n );\n }\n }\n let transformer = initializer(...args);\n transformer.postcssPlugin = name;\n transformer.postcssVersion = new Processor22().version;\n return transformer;\n }\n let cache;\n Object.defineProperty(creator, \"postcss\", {\n get() {\n if (!cache) cache = creator();\n return cache;\n }\n });\n creator.process = function(css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts);\n };\n return creator;\n};\npostcss.stringify = stringify;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\npostcss.comment = (defaults) => new Comment22(defaults);\npostcss.atRule = (defaults) => new AtRule22(defaults);\npostcss.decl = (defaults) => new Declaration22(defaults);\npostcss.rule = (defaults) => new Rule22(defaults);\npostcss.root = (defaults) => new Root22(defaults);\npostcss.document = (defaults) => new Document222(defaults);\npostcss.CssSyntaxError = CssSyntaxError22;\npostcss.Declaration = Declaration22;\npostcss.Container = Container22;\npostcss.Processor = Processor22;\npostcss.Document = Document222;\npostcss.Comment = Comment22;\npostcss.Warning = Warning22;\npostcss.AtRule = AtRule22;\npostcss.Result = Result22;\npostcss.Input = Input22;\npostcss.Rule = Rule22;\npostcss.Root = Root22;\npostcss.Node = Node22;\nLazyResult22.registerPostcss(postcss);\nvar postcss_1 = postcss;\npostcss.default = postcss;\nconst postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs(postcss_1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\nvar NodeType$1 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$1 || {});\nfunction parseCSSText(cssText) {\n const res = {};\n const listDelimiter = /;(?![^(]*\\))/g;\n const propertyDelimiter = /:(.+)/;\n const comment2 = /\\/\\*.*?\\*\\//g;\n cssText.replace(comment2, \"\").split(listDelimiter).forEach(function(item) {\n if (item) {\n const tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[camelize(tmp[0].trim())] = tmp[1].trim());\n }\n });\n return res;\n}\nfunction toCSSText(style) {\n const properties = [];\n for (const name in style) {\n const value = style[name];\n if (typeof value !== \"string\") continue;\n const normalizedName = hyphenate(name);\n properties.push(`${normalizedName}: ${value};`);\n }\n return properties.join(\" \");\n}\nconst camelizeRE = /-([a-z])/g;\nconst CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nconst camelize = (str) => {\n if (CUSTOM_PROPERTY_REGEX.test(str)) return str;\n return str.replace(camelizeRE, (_, c2) => c2 ? c2.toUpperCase() : \"\");\n};\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = (str) => {\n return str.replace(hyphenateRE, \"-$1\").toLowerCase();\n};\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes2 = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n contains(node2) {\n if (!(node2 instanceof BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while (node2.parentNode) {\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nclass BaseRRDocument extends BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args) {\n super(args);\n __publicField2(this, \"nodeType\", 9);\n __publicField2(this, \"nodeName\", \"#document\");\n __publicField2(this, \"compatMode\", \"CSS1Compat\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Document);\n __publicField2(this, \"textContent\", null);\n this.ownerDocument = this;\n }\n get documentElement() {\n return this.childNodes.find(\n (node2) => node2.RRNodeType === NodeType$1.Element && node2.tagName === \"HTML\"\n ) || null;\n }\n get body() {\n var _a2;\n return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n (node2) => node2.RRNodeType === NodeType$1.Element && node2.tagName === \"BODY\"\n )) || null;\n }\n get head() {\n var _a2;\n return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n (node2) => node2.RRNodeType === NodeType$1.Element && node2.tagName === \"HEAD\"\n )) || null;\n }\n get implementation() {\n return this;\n }\n get firstElementChild() {\n return this.documentElement;\n }\n appendChild(newChild) {\n const nodeType = newChild.RRNodeType;\n if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n );\n }\n }\n const child = appendChild(this, newChild);\n child.parentElement = null;\n return child;\n }\n insertBefore(newChild, refChild) {\n const nodeType = newChild.RRNodeType;\n if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n );\n }\n }\n const child = insertBefore(this, newChild, refChild);\n child.parentElement = null;\n return child;\n }\n removeChild(node2) {\n return removeChild(this, node2);\n }\n open() {\n this.firstChild = null;\n this.lastChild = null;\n }\n close() {\n }\n /**\n * Adhoc implementation for setting xhtml namespace in rebuilt.ts (rrweb-snapshot).\n * There are two lines used this function:\n * 1. doc.write('\\<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\"\\>')\n * 2. doc.write('\\<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\"\\>')\n */\n write(content) {\n let publicId;\n if (content === '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">')\n publicId = \"-//W3C//DTD XHTML 1.0 Transitional//EN\";\n else if (content === '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">')\n publicId = \"-//W3C//DTD HTML 4.0 Transitional//EN\";\n if (publicId) {\n const doctype = this.createDocumentType(\"html\", publicId, \"\");\n this.open();\n this.appendChild(doctype);\n }\n }\n createDocument(_namespace, _qualifiedName, _doctype) {\n return new BaseRRDocument();\n }\n createDocumentType(qualifiedName, publicId, systemId) {\n const doctype = new BaseRRDocumentType(qualifiedName, publicId, systemId);\n doctype.ownerDocument = this;\n return doctype;\n }\n createElement(tagName) {\n const element = new BaseRRElement(tagName);\n element.ownerDocument = this;\n return element;\n }\n createElementNS(_namespaceURI, qualifiedName) {\n return this.createElement(qualifiedName);\n }\n createTextNode(data) {\n const text = new BaseRRText(data);\n text.ownerDocument = this;\n return text;\n }\n createComment(data) {\n const comment2 = new BaseRRComment(data);\n comment2.ownerDocument = this;\n return comment2;\n }\n createCDATASection(data) {\n const CDATASection = new BaseRRCDATASection(data);\n CDATASection.ownerDocument = this;\n return CDATASection;\n }\n toString() {\n return \"RRDocument\";\n }\n}\nclass BaseRRDocumentType extends BaseRRNode {\n constructor(qualifiedName, publicId, systemId) {\n super();\n __publicField2(this, \"nodeType\", 10);\n __publicField2(this, \"RRNodeType\", NodeType$1.DocumentType);\n __publicField2(this, \"name\");\n __publicField2(this, \"publicId\");\n __publicField2(this, \"systemId\");\n __publicField2(this, \"textContent\", null);\n this.name = qualifiedName;\n this.publicId = publicId;\n this.systemId = systemId;\n this.nodeName = qualifiedName;\n }\n toString() {\n return \"RRDocumentType\";\n }\n}\nclass BaseRRElement extends BaseRRNode {\n constructor(tagName) {\n super();\n __publicField2(this, \"nodeType\", 1);\n __publicField2(this, \"RRNodeType\", NodeType$1.Element);\n __publicField2(this, \"tagName\");\n __publicField2(this, \"attributes\", {});\n __publicField2(this, \"shadowRoot\", null);\n __publicField2(this, \"scrollLeft\");\n __publicField2(this, \"scrollTop\");\n this.tagName = tagName.toUpperCase();\n this.nodeName = tagName.toUpperCase();\n }\n get textContent() {\n let result2 = \"\";\n this.childNodes.forEach((node2) => result2 += node2.textContent);\n return result2;\n }\n set textContent(textContent2) {\n this.firstChild = null;\n this.lastChild = null;\n this.appendChild(this.ownerDocument.createTextNode(textContent2));\n }\n get classList() {\n return new ClassList(\n this.attributes.class,\n (newClassName) => {\n this.attributes.class = newClassName;\n }\n );\n }\n get id() {\n return this.attributes.id || \"\";\n }\n get className() {\n return this.attributes.class || \"\";\n }\n get style() {\n const style = this.attributes.style ? parseCSSText(this.attributes.style) : {};\n const hyphenateRE2 = /\\B([A-Z])/g;\n style.setProperty = (name, value, priority) => {\n if (hyphenateRE2.test(name)) return;\n const normalizedName = camelize(name);\n if (!value) delete style[normalizedName];\n else style[normalizedName] = value;\n if (priority === \"important\") style[normalizedName] += \" !important\";\n this.attributes.style = toCSSText(style);\n };\n style.removeProperty = (name) => {\n if (hyphenateRE2.test(name)) return \"\";\n const normalizedName = camelize(name);\n const value = style[normalizedName] || \"\";\n delete style[normalizedName];\n this.attributes.style = toCSSText(style);\n return value;\n };\n return style;\n }\n getAttribute(name) {\n if (this.attributes[name] === void 0) return null;\n return this.attributes[name];\n }\n setAttribute(name, attribute) {\n this.attributes[name] = attribute;\n }\n setAttributeNS(_namespace, qualifiedName, value) {\n this.setAttribute(qualifiedName, value);\n }\n removeAttribute(name) {\n delete this.attributes[name];\n }\n appendChild(newChild) {\n return appendChild(this, newChild);\n }\n insertBefore(newChild, refChild) {\n return insertBefore(this, newChild, refChild);\n }\n removeChild(node2) {\n return removeChild(this, node2);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n attachShadow(_init) {\n const shadowRoot2 = this.ownerDocument.createElement(\"SHADOWROOT\");\n this.shadowRoot = shadowRoot2;\n return shadowRoot2;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dispatchEvent(_event) {\n return true;\n }\n toString() {\n let attributeString = \"\";\n for (const attribute in this.attributes) {\n attributeString += `${attribute}=\"${this.attributes[attribute]}\" `;\n }\n return `${this.tagName} ${attributeString}`;\n }\n}\nclass BaseRRMediaElement extends BaseRRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"currentTime\");\n __publicField2(this, \"volume\");\n __publicField2(this, \"paused\");\n __publicField2(this, \"muted\");\n __publicField2(this, \"playbackRate\");\n __publicField2(this, \"loop\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n attachShadow(_init) {\n throw new Error(\n `RRDomException: Failed to execute 'attachShadow' on 'RRElement': This RRElement does not support attachShadow`\n );\n }\n play() {\n this.paused = false;\n }\n pause() {\n this.paused = true;\n }\n}\nclass BaseRRDialogElement extends BaseRRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"tagName\", \"DIALOG\");\n __publicField2(this, \"nodeName\", \"DIALOG\");\n }\n get isModal() {\n return this.getAttribute(\"rr_open_mode\") === \"modal\";\n }\n get open() {\n return this.getAttribute(\"open\") !== null;\n }\n close() {\n this.removeAttribute(\"open\");\n this.removeAttribute(\"rr_open_mode\");\n }\n show() {\n this.setAttribute(\"open\", \"\");\n this.setAttribute(\"rr_open_mode\", \"non-modal\");\n }\n showModal() {\n this.setAttribute(\"open\", \"\");\n this.setAttribute(\"rr_open_mode\", \"modal\");\n }\n}\nclass BaseRRText extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeType\", 3);\n __publicField2(this, \"nodeName\", \"#text\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Text);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent2) {\n this.data = textContent2;\n }\n toString() {\n return `RRText text=${JSON.stringify(this.data)}`;\n }\n}\nclass BaseRRComment extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeType\", 8);\n __publicField2(this, \"nodeName\", \"#comment\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Comment);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent2) {\n this.data = textContent2;\n }\n toString() {\n return `RRComment text=${JSON.stringify(this.data)}`;\n }\n}\nclass BaseRRCDATASection extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeName\", \"#cdata-section\");\n __publicField2(this, \"nodeType\", 4);\n __publicField2(this, \"RRNodeType\", NodeType$1.CDATA);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent2) {\n this.data = textContent2;\n }\n toString() {\n return `RRCDATASection data=${JSON.stringify(this.data)}`;\n }\n}\nclass ClassList {\n constructor(classText, onChange) {\n __publicField2(this, \"onChange\");\n __publicField2(this, \"classes\", []);\n __publicField2(this, \"add\", (...classNames) => {\n for (const item of classNames) {\n const className = String(item);\n if (this.classes.indexOf(className) >= 0) continue;\n this.classes.push(className);\n }\n this.onChange && this.onChange(this.classes.join(\" \"));\n });\n __publicField2(this, \"remove\", (...classNames) => {\n this.classes = this.classes.filter(\n (item) => classNames.indexOf(item) === -1\n );\n this.onChange && this.onChange(this.classes.join(\" \"));\n });\n if (classText) {\n const classes = classText.trim().split(/\\s+/);\n this.classes.push(...classes);\n }\n this.onChange = onChange;\n }\n}\nfunction appendChild(parent, newChild) {\n if (newChild.parentNode) newChild.parentNode.removeChild(newChild);\n if (parent.lastChild) {\n parent.lastChild.nextSibling = newChild;\n newChild.previousSibling = parent.lastChild;\n } else {\n parent.firstChild = newChild;\n newChild.previousSibling = null;\n }\n parent.lastChild = newChild;\n newChild.nextSibling = null;\n newChild.parentNode = parent;\n newChild.parentElement = parent;\n newChild.ownerDocument = parent.ownerDocument;\n return newChild;\n}\nfunction insertBefore(parent, newChild, refChild) {\n if (!refChild) return appendChild(parent, newChild);\n if (refChild.parentNode !== parent)\n throw new Error(\n \"Failed to execute 'insertBefore' on 'RRNode': The RRNode before which the new node is to be inserted is not a child of this RRNode.\"\n );\n if (newChild === refChild) return newChild;\n if (newChild.parentNode) newChild.parentNode.removeChild(newChild);\n newChild.previousSibling = refChild.previousSibling;\n refChild.previousSibling = newChild;\n newChild.nextSibling = refChild;\n if (newChild.previousSibling) newChild.previousSibling.nextSibling = newChild;\n else parent.firstChild = newChild;\n newChild.parentElement = parent;\n newChild.parentNode = parent;\n newChild.ownerDocument = parent.ownerDocument;\n return newChild;\n}\nfunction removeChild(parent, child) {\n if (child.parentNode !== parent)\n throw new Error(\n \"Failed to execute 'removeChild' on 'RRNode': The RRNode to be removed is not a child of this RRNode.\"\n );\n if (child.previousSibling)\n child.previousSibling.nextSibling = child.nextSibling;\n else parent.firstChild = child.nextSibling;\n if (child.nextSibling)\n child.nextSibling.previousSibling = child.previousSibling;\n else parent.lastChild = child.previousSibling;\n child.previousSibling = null;\n child.nextSibling = null;\n child.parentElement = null;\n child.parentNode = null;\n return child;\n}\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\n NodeType2[NodeType2[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n NodeType2[NodeType2[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\n NodeType2[NodeType2[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n NodeType2[NodeType2[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\n NodeType2[NodeType2[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\n NodeType2[NodeType2[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\n NodeType2[NodeType2[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\n NodeType2[NodeType2[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n return NodeType2;\n})(NodeType$2 || {});\nconst NAMESPACES = {\n svg: \"http://www.w3.org/2000/svg\",\n \"xlink:href\": \"http://www.w3.org/1999/xlink\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\nconst SVGTagMap = {\n altglyph: \"altGlyph\",\n altglyphdef: \"altGlyphDef\",\n altglyphitem: \"altGlyphItem\",\n animatecolor: \"animateColor\",\n animatemotion: \"animateMotion\",\n animatetransform: \"animateTransform\",\n clippath: \"clipPath\",\n feblend: \"feBlend\",\n fecolormatrix: \"feColorMatrix\",\n fecomponenttransfer: \"feComponentTransfer\",\n fecomposite: \"feComposite\",\n feconvolvematrix: \"feConvolveMatrix\",\n fediffuselighting: \"feDiffuseLighting\",\n fedisplacementmap: \"feDisplacementMap\",\n fedistantlight: \"feDistantLight\",\n fedropshadow: \"feDropShadow\",\n feflood: \"feFlood\",\n fefunca: \"feFuncA\",\n fefuncb: \"feFuncB\",\n fefuncg: \"feFuncG\",\n fefuncr: \"feFuncR\",\n fegaussianblur: \"feGaussianBlur\",\n feimage: \"feImage\",\n femerge: \"feMerge\",\n femergenode: \"feMergeNode\",\n femorphology: \"feMorphology\",\n feoffset: \"feOffset\",\n fepointlight: \"fePointLight\",\n fespecularlighting: \"feSpecularLighting\",\n fespotlight: \"feSpotLight\",\n fetile: \"feTile\",\n feturbulence: \"feTurbulence\",\n foreignobject: \"foreignObject\",\n glyphref: \"glyphRef\",\n lineargradient: \"linearGradient\",\n radialgradient: \"radialGradient\"\n};\nlet createdNodeSet = null;\nfunction diff(oldTree, newTree, replayer, rrnodeMirror = newTree.mirror || newTree.ownerDocument.mirror) {\n oldTree = diffBeforeUpdatingChildren(\n oldTree,\n newTree,\n replayer,\n rrnodeMirror\n );\n diffChildren(oldTree, newTree, replayer, rrnodeMirror);\n diffAfterUpdatingChildren(oldTree, newTree, replayer);\n}\nfunction diffBeforeUpdatingChildren(oldTree, newTree, replayer, rrnodeMirror) {\n var _a2;\n if (replayer.afterAppend && !createdNodeSet) {\n createdNodeSet = /* @__PURE__ */ new WeakSet();\n setTimeout(() => {\n createdNodeSet = null;\n }, 0);\n }\n if (!sameNodeType(oldTree, newTree)) {\n const calibratedOldTree = createOrGetNode(\n newTree,\n replayer.mirror,\n rrnodeMirror\n );\n (_a2 = oldTree.parentNode) == null ? void 0 : _a2.replaceChild(calibratedOldTree, oldTree);\n oldTree = calibratedOldTree;\n }\n switch (newTree.RRNodeType) {\n case NodeType$1.Document: {\n if (!nodeMatching(oldTree, newTree, replayer.mirror, rrnodeMirror)) {\n const newMeta = rrnodeMirror.getMeta(newTree);\n if (newMeta) {\n replayer.mirror.removeNodeFromMap(oldTree);\n oldTree.close();\n oldTree.open();\n replayer.mirror.add(oldTree, newMeta);\n createdNodeSet == null ? void 0 : createdNodeSet.add(oldTree);\n }\n }\n break;\n }\n case NodeType$1.Element: {\n const oldElement = oldTree;\n const newRRElement = newTree;\n switch (newRRElement.tagName) {\n case \"IFRAME\": {\n const oldContentDocument = oldTree.contentDocument;\n if (!oldContentDocument) break;\n diff(\n oldContentDocument,\n newTree.contentDocument,\n replayer,\n rrnodeMirror\n );\n break;\n }\n }\n if (newRRElement.shadowRoot) {\n if (!oldElement.shadowRoot) oldElement.attachShadow({ mode: \"open\" });\n diffChildren(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n oldElement.shadowRoot,\n newRRElement.shadowRoot,\n replayer,\n rrnodeMirror\n );\n }\n diffProps(oldElement, newRRElement, rrnodeMirror);\n break;\n }\n }\n return oldTree;\n}\nfunction diffAfterUpdatingChildren(oldTree, newTree, replayer) {\n var _a2;\n switch (newTree.RRNodeType) {\n case NodeType$1.Document: {\n const scrollData = newTree.scrollData;\n scrollData && replayer.applyScroll(scrollData, true);\n break;\n }\n case NodeType$1.Element: {\n const oldElement = oldTree;\n const newRRElement = newTree;\n newRRElement.scrollData && replayer.applyScroll(newRRElement.scrollData, true);\n newRRElement.inputData && replayer.applyInput(newRRElement.inputData);\n switch (newRRElement.tagName) {\n case \"AUDIO\":\n case \"VIDEO\": {\n const oldMediaElement = oldTree;\n const newMediaRRElement = newRRElement;\n if (newMediaRRElement.paused !== void 0)\n newMediaRRElement.paused ? void oldMediaElement.pause() : void oldMediaElement.play();\n if (newMediaRRElement.muted !== void 0)\n oldMediaElement.muted = newMediaRRElement.muted;\n if (newMediaRRElement.volume !== void 0)\n oldMediaElement.volume = newMediaRRElement.volume;\n if (newMediaRRElement.currentTime !== void 0)\n oldMediaElement.currentTime = newMediaRRElement.currentTime;\n if (newMediaRRElement.playbackRate !== void 0)\n oldMediaElement.playbackRate = newMediaRRElement.playbackRate;\n if (newMediaRRElement.loop !== void 0)\n oldMediaElement.loop = newMediaRRElement.loop;\n break;\n }\n case \"CANVAS\": {\n const rrCanvasElement = newTree;\n if (rrCanvasElement.rr_dataURL !== null) {\n const image = document.createElement(\"img\");\n image.onload = () => {\n const ctx = oldElement.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n image.src = rrCanvasElement.rr_dataURL;\n }\n rrCanvasElement.canvasMutations.forEach(\n (canvasMutation2) => replayer.applyCanvas(\n canvasMutation2.event,\n canvasMutation2.mutation,\n oldTree\n )\n );\n break;\n }\n case \"STYLE\": {\n const styleSheet = oldElement.sheet;\n styleSheet && newTree.rules.forEach(\n (data) => replayer.applyStyleSheetMutation(data, styleSheet)\n );\n break;\n }\n case \"DIALOG\": {\n const dialog = oldElement;\n const rrDialog = newRRElement;\n const wasOpen = dialog.open;\n const wasModal = dialog.matches(\"dialog:modal\");\n const shouldBeOpen = rrDialog.open;\n const shouldBeModal = rrDialog.isModal;\n const modalChanged = wasModal !== shouldBeModal;\n const openChanged = wasOpen !== shouldBeOpen;\n if (modalChanged || wasOpen && openChanged) dialog.close();\n if (shouldBeOpen && (openChanged || modalChanged)) {\n try {\n if (shouldBeModal) dialog.showModal();\n else dialog.show();\n } catch (e2) {\n console.warn(e2);\n }\n }\n break;\n }\n }\n break;\n }\n case NodeType$1.Text:\n case NodeType$1.Comment:\n case NodeType$1.CDATA: {\n if (oldTree.textContent !== newTree.data)\n oldTree.textContent = newTree.data;\n break;\n }\n }\n if (createdNodeSet == null ? void 0 : createdNodeSet.has(oldTree)) {\n createdNodeSet.delete(oldTree);\n (_a2 = replayer.afterAppend) == null ? void 0 : _a2.call(replayer, oldTree, replayer.mirror.getId(oldTree));\n }\n}\nfunction diffProps(oldTree, newTree, rrnodeMirror) {\n const oldAttributes = oldTree.attributes;\n const newAttributes = newTree.attributes;\n for (const name in newAttributes) {\n const newValue = newAttributes[name];\n const sn = rrnodeMirror.getMeta(newTree);\n if ((sn == null ? void 0 : sn.isSVG) && NAMESPACES[name])\n oldTree.setAttributeNS(NAMESPACES[name], name, newValue);\n else if (newTree.tagName === \"CANVAS\" && name === \"rr_dataURL\") {\n const image = document.createElement(\"img\");\n image.src = newValue;\n image.onload = () => {\n const ctx = oldTree.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n } else if (newTree.tagName === \"IFRAME\" && name === \"srcdoc\") continue;\n else {\n try {\n oldTree.setAttribute(name, newValue);\n } catch (err) {\n console.warn(err);\n }\n }\n }\n for (const { name } of Array.from(oldAttributes))\n if (!(name in newAttributes)) oldTree.removeAttribute(name);\n newTree.scrollLeft && (oldTree.scrollLeft = newTree.scrollLeft);\n newTree.scrollTop && (oldTree.scrollTop = newTree.scrollTop);\n}\nfunction diffChildren(oldTree, newTree, replayer, rrnodeMirror) {\n const oldChildren = Array.from(oldTree.childNodes);\n const newChildren = newTree.childNodes;\n if (oldChildren.length === 0 && newChildren.length === 0) return;\n let oldStartIndex = 0, oldEndIndex = oldChildren.length - 1, newStartIndex = 0, newEndIndex = newChildren.length - 1;\n let oldStartNode = oldChildren[oldStartIndex], oldEndNode = oldChildren[oldEndIndex], newStartNode = newChildren[newStartIndex], newEndNode = newChildren[newEndIndex];\n let oldIdToIndex = void 0, indexInOld = void 0;\n while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {\n if (oldStartNode === void 0) {\n oldStartNode = oldChildren[++oldStartIndex];\n } else if (oldEndNode === void 0) {\n oldEndNode = oldChildren[--oldEndIndex];\n } else if (\n // same first node?\n nodeMatching(oldStartNode, newStartNode, replayer.mirror, rrnodeMirror)\n ) {\n oldStartNode = oldChildren[++oldStartIndex];\n newStartNode = newChildren[++newStartIndex];\n } else if (\n // same last node?\n nodeMatching(oldEndNode, newEndNode, replayer.mirror, rrnodeMirror)\n ) {\n oldEndNode = oldChildren[--oldEndIndex];\n newEndNode = newChildren[--newEndIndex];\n } else if (\n // is the first old node the same as the last new node?\n nodeMatching(oldStartNode, newEndNode, replayer.mirror, rrnodeMirror)\n ) {\n try {\n oldTree.insertBefore(oldStartNode, oldEndNode.nextSibling);\n } catch (e2) {\n console.warn(e2);\n }\n oldStartNode = oldChildren[++oldStartIndex];\n newEndNode = newChildren[--newEndIndex];\n } else if (\n // is the last old node the same as the first new node?\n nodeMatching(oldEndNode, newStartNode, replayer.mirror, rrnodeMirror)\n ) {\n try {\n oldTree.insertBefore(oldEndNode, oldStartNode);\n } catch (e2) {\n console.warn(e2);\n }\n oldEndNode = oldChildren[--oldEndIndex];\n newStartNode = newChildren[++newStartIndex];\n } else {\n if (!oldIdToIndex) {\n oldIdToIndex = {};\n for (let i2 = oldStartIndex; i2 <= oldEndIndex; i2++) {\n const oldChild2 = oldChildren[i2];\n if (oldChild2 && replayer.mirror.hasNode(oldChild2))\n oldIdToIndex[replayer.mirror.getId(oldChild2)] = i2;\n }\n }\n indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];\n const nodeToMove = oldChildren[indexInOld];\n if (indexInOld !== void 0 && nodeToMove && nodeMatching(nodeToMove, newStartNode, replayer.mirror, rrnodeMirror)) {\n try {\n oldTree.insertBefore(nodeToMove, oldStartNode);\n } catch (e2) {\n console.warn(e2);\n }\n oldChildren[indexInOld] = void 0;\n } else {\n const newNode = createOrGetNode(\n newStartNode,\n replayer.mirror,\n rrnodeMirror\n );\n if (oldTree.nodeName === \"#document\" && oldStartNode && /**\n * Special case 1: one document isn't allowed to have two doctype nodes at the same time, so we need to remove the old one first before inserting the new one.\n * How this case happens: A parent document in the old tree already has a doctype node with an id e.g. #1. A new full snapshot rebuilds the replayer with a new doctype node with another id #2. According to the algorithm, the new doctype node will be inserted before the old one, which is not allowed by the Document standard.\n */\n (newNode.nodeType === newNode.DOCUMENT_TYPE_NODE && oldStartNode.nodeType === oldStartNode.DOCUMENT_TYPE_NODE || /**\n * Special case 2: one document isn't allowed to have two HTMLElements at the same time, so we need to remove the old one first before inserting the new one.\n * How this case happens: A mounted iframe element has an automatically created HTML element. We should delete it before inserting a serialized one. Otherwise, an error 'Only one element on document allowed' will be thrown.\n */\n newNode.nodeType === newNode.ELEMENT_NODE && oldStartNode.nodeType === oldStartNode.ELEMENT_NODE)) {\n oldTree.removeChild(oldStartNode);\n replayer.mirror.removeNodeFromMap(oldStartNode);\n oldStartNode = oldChildren[++oldStartIndex];\n }\n try {\n oldTree.insertBefore(newNode, oldStartNode || null);\n } catch (e2) {\n console.warn(e2);\n }\n }\n newStartNode = newChildren[++newStartIndex];\n }\n }\n if (oldStartIndex > oldEndIndex) {\n const referenceRRNode = newChildren[newEndIndex + 1];\n let referenceNode = null;\n if (referenceRRNode)\n referenceNode = replayer.mirror.getNode(\n rrnodeMirror.getId(referenceRRNode)\n );\n for (; newStartIndex <= newEndIndex; ++newStartIndex) {\n const newNode = createOrGetNode(\n newChildren[newStartIndex],\n replayer.mirror,\n rrnodeMirror\n );\n try {\n oldTree.insertBefore(newNode, referenceNode);\n } catch (e2) {\n console.warn(e2);\n }\n }\n } else if (newStartIndex > newEndIndex) {\n for (; oldStartIndex <= oldEndIndex; oldStartIndex++) {\n const node2 = oldChildren[oldStartIndex];\n if (!node2 || node2.parentNode !== oldTree) continue;\n try {\n oldTree.removeChild(node2);\n replayer.mirror.removeNodeFromMap(node2);\n } catch (e2) {\n console.warn(e2);\n }\n }\n }\n let oldChild = oldTree.firstChild;\n let newChild = newTree.firstChild;\n while (oldChild !== null && newChild !== null) {\n diff(oldChild, newChild, replayer, rrnodeMirror);\n oldChild = oldChild.nextSibling;\n newChild = newChild.nextSibling;\n }\n}\nfunction createOrGetNode(rrNode, domMirror, rrnodeMirror) {\n const nodeId = rrnodeMirror.getId(rrNode);\n const sn = rrnodeMirror.getMeta(rrNode);\n let node2 = null;\n if (nodeId > -1) node2 = domMirror.getNode(nodeId);\n if (node2 !== null && sameNodeType(node2, rrNode)) return node2;\n switch (rrNode.RRNodeType) {\n case NodeType$1.Document:\n node2 = new Document();\n break;\n case NodeType$1.DocumentType:\n node2 = document.implementation.createDocumentType(\n rrNode.name,\n rrNode.publicId,\n rrNode.systemId\n );\n break;\n case NodeType$1.Element: {\n let tagName = rrNode.tagName.toLowerCase();\n tagName = SVGTagMap[tagName] || tagName;\n if (sn && \"isSVG\" in sn && (sn == null ? void 0 : sn.isSVG)) {\n node2 = document.createElementNS(NAMESPACES[\"svg\"], tagName);\n } else node2 = document.createElement(rrNode.tagName);\n break;\n }\n case NodeType$1.Text:\n node2 = document.createTextNode(rrNode.data);\n break;\n case NodeType$1.Comment:\n node2 = document.createComment(rrNode.data);\n break;\n case NodeType$1.CDATA:\n node2 = document.createCDATASection(rrNode.data);\n break;\n }\n if (sn) domMirror.add(node2, { ...sn });\n try {\n createdNodeSet == null ? void 0 : createdNodeSet.add(node2);\n } catch (e2) {\n }\n return node2;\n}\nfunction sameNodeType(node1, node2) {\n if (node1.nodeType !== node2.nodeType) return false;\n return node1.nodeType !== node1.ELEMENT_NODE || node1.tagName.toUpperCase() === node2.tagName;\n}\nfunction nodeMatching(node1, node2, domMirror, rrdomMirror) {\n const node1Id = domMirror.getId(node1);\n const node2Id = rrdomMirror.getId(node2);\n if (node1Id === -1 || node1Id !== node2Id) return false;\n return sameNodeType(node1, node2);\n}\nclass RRDocument extends BaseRRDocument {\n constructor(mirror2) {\n super();\n __publicField2(this, \"UNSERIALIZED_STARTING_ID\", -2);\n __publicField2(this, \"_unserializedId\", this.UNSERIALIZED_STARTING_ID);\n __publicField2(this, \"mirror\", createMirror());\n __publicField2(this, \"scrollData\", null);\n if (mirror2) {\n this.mirror = mirror2;\n }\n }\n /**\n * Every time the id is used, it will minus 1 automatically to avoid collisions.\n */\n get unserializedId() {\n return this._unserializedId--;\n }\n createDocument(_namespace, _qualifiedName, _doctype) {\n return new RRDocument();\n }\n createDocumentType(qualifiedName, publicId, systemId) {\n const documentTypeNode = new RRDocumentType(\n qualifiedName,\n publicId,\n systemId\n );\n documentTypeNode.ownerDocument = this;\n return documentTypeNode;\n }\n createElement(tagName) {\n const upperTagName = tagName.toUpperCase();\n let element;\n switch (upperTagName) {\n case \"AUDIO\":\n case \"VIDEO\":\n element = new RRMediaElement(upperTagName);\n break;\n case \"IFRAME\":\n element = new RRIFrameElement(upperTagName, this.mirror);\n break;\n case \"CANVAS\":\n element = new RRCanvasElement(upperTagName);\n break;\n case \"STYLE\":\n element = new RRStyleElement(upperTagName);\n break;\n case \"DIALOG\":\n element = new RRDialogElement(upperTagName);\n break;\n default:\n element = new RRElement(upperTagName);\n break;\n }\n element.ownerDocument = this;\n return element;\n }\n createComment(data) {\n const commentNode = new RRComment(data);\n commentNode.ownerDocument = this;\n return commentNode;\n }\n createCDATASection(data) {\n const sectionNode = new RRCDATASection(data);\n sectionNode.ownerDocument = this;\n return sectionNode;\n }\n createTextNode(data) {\n const textNode = new RRText(data);\n textNode.ownerDocument = this;\n return textNode;\n }\n destroyTree() {\n this.firstChild = null;\n this.lastChild = null;\n this.mirror.reset();\n }\n open() {\n super.open();\n this._unserializedId = this.UNSERIALIZED_STARTING_ID;\n }\n}\nconst RRDocumentType = BaseRRDocumentType;\nclass RRElement extends BaseRRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"inputData\", null);\n __publicField2(this, \"scrollData\", null);\n }\n}\nclass RRMediaElement extends BaseRRMediaElement {\n}\nclass RRDialogElement extends BaseRRDialogElement {\n}\nclass RRCanvasElement extends RRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"rr_dataURL\", null);\n __publicField2(this, \"canvasMutations\", []);\n }\n /**\n * This is a dummy implementation to distinguish RRCanvasElement from real HTMLCanvasElement.\n */\n getContext() {\n return null;\n }\n}\nclass RRStyleElement extends RRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"rules\", []);\n }\n}\nclass RRIFrameElement extends RRElement {\n constructor(upperTagName, mirror2) {\n super(upperTagName);\n __publicField2(this, \"contentDocument\", new RRDocument());\n this.contentDocument.mirror = mirror2;\n }\n}\nconst RRText = BaseRRText;\nconst RRComment = BaseRRComment;\nconst RRCDATASection = BaseRRCDATASection;\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return \"FORM\";\n }\n return element.tagName.toUpperCase();\n}\nfunction buildFromNode(node2, rrdom, domMirror, parentRRNode) {\n let rrNode;\n switch (node2.nodeType) {\n case NodeType$2.DOCUMENT_NODE:\n if (parentRRNode && parentRRNode.nodeName === \"IFRAME\")\n rrNode = parentRRNode.contentDocument;\n else {\n rrNode = rrdom;\n rrNode.compatMode = node2.compatMode;\n }\n break;\n case NodeType$2.DOCUMENT_TYPE_NODE: {\n const documentType = node2;\n rrNode = rrdom.createDocumentType(\n documentType.name,\n documentType.publicId,\n documentType.systemId\n );\n break;\n }\n case NodeType$2.ELEMENT_NODE: {\n const elementNode = node2;\n const tagName = getValidTagName(elementNode);\n rrNode = rrdom.createElement(tagName);\n const rrElement = rrNode;\n for (const { name, value } of Array.from(elementNode.attributes)) {\n rrElement.attributes[name] = value;\n }\n elementNode.scrollLeft && (rrElement.scrollLeft = elementNode.scrollLeft);\n elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);\n break;\n }\n case NodeType$2.TEXT_NODE:\n rrNode = rrdom.createTextNode(node2.textContent || \"\");\n break;\n case NodeType$2.CDATA_SECTION_NODE:\n rrNode = rrdom.createCDATASection(node2.data);\n break;\n case NodeType$2.COMMENT_NODE:\n rrNode = rrdom.createComment(node2.textContent || \"\");\n break;\n case NodeType$2.DOCUMENT_FRAGMENT_NODE:\n rrNode = parentRRNode.attachShadow({ mode: \"open\" });\n break;\n default:\n return null;\n }\n let sn = domMirror.getMeta(node2);\n if (rrdom instanceof RRDocument) {\n if (!sn) {\n sn = getDefaultSN(rrNode, rrdom.unserializedId);\n domMirror.add(node2, sn);\n }\n rrdom.mirror.add(rrNode, { ...sn });\n }\n return rrNode;\n}\nfunction buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument()) {\n function walk2(node2, parentRRNode) {\n const rrNode = buildFromNode(node2, rrdom, domMirror, parentRRNode);\n if (rrNode === null) return;\n if (\n // if the parentRRNode isn't a RRIFrameElement\n (parentRRNode == null ? void 0 : parentRRNode.nodeName) !== \"IFRAME\" && // if node isn't a shadow root\n node2.nodeType !== NodeType$2.DOCUMENT_FRAGMENT_NODE\n ) {\n parentRRNode == null ? void 0 : parentRRNode.appendChild(rrNode);\n rrNode.parentNode = parentRRNode;\n rrNode.parentElement = parentRRNode;\n }\n if (node2.nodeName === \"IFRAME\") {\n const iframeDoc = node2.contentDocument;\n iframeDoc && walk2(iframeDoc, rrNode);\n } else if (node2.nodeType === NodeType$2.DOCUMENT_NODE || node2.nodeType === NodeType$2.ELEMENT_NODE || node2.nodeType === NodeType$2.DOCUMENT_FRAGMENT_NODE) {\n if (node2.nodeType === NodeType$2.ELEMENT_NODE && node2.shadowRoot)\n walk2(node2.shadowRoot, rrNode);\n node2.childNodes.forEach((childNode) => walk2(childNode, rrNode));\n }\n }\n walk2(dom, null);\n return rrdom;\n}\nfunction createMirror() {\n return new Mirror22();\n}\nclass Mirror22 {\n constructor() {\n __publicField2(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField2(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction getDefaultSN(node2, id) {\n switch (node2.RRNodeType) {\n case NodeType$1.Document:\n return {\n id,\n type: node2.RRNodeType,\n childNodes: []\n };\n case NodeType$1.DocumentType: {\n const doctype = node2;\n return {\n id,\n type: node2.RRNodeType,\n name: doctype.name,\n publicId: doctype.publicId,\n systemId: doctype.systemId\n };\n }\n case NodeType$1.Element:\n return {\n id,\n type: node2.RRNodeType,\n tagName: node2.tagName.toLowerCase(),\n // In rrweb data, all tagNames are lowercase.\n attributes: {},\n childNodes: []\n };\n case NodeType$1.Text:\n return {\n id,\n type: node2.RRNodeType,\n textContent: node2.textContent || \"\"\n };\n case NodeType$1.Comment:\n return {\n id,\n type: node2.RRNodeType,\n textContent: node2.textContent || \"\"\n };\n case NodeType$1.CDATA:\n return {\n id,\n type: node2.RRNodeType,\n textContent: \"\"\n };\n }\n}\nconst testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst isAngularZonePresent = () => {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n const el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n const el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n const parent = index.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction queueToResolveTrees(queue) {\n const queueNodeMap = {};\n const putIntoMap = (m, parent) => {\n const nodeInTree = {\n value: m,\n parent,\n children: []\n };\n queueNodeMap[m.node.id] = nodeInTree;\n return nodeInTree;\n };\n const queueNodeTrees = [];\n for (const mutation of queue) {\n const { nextId, parentId } = mutation;\n if (nextId && nextId in queueNodeMap) {\n const nextInTree = queueNodeMap[nextId];\n if (nextInTree.parent) {\n const idx = nextInTree.parent.children.indexOf(nextInTree);\n nextInTree.parent.children.splice(\n idx,\n 0,\n putIntoMap(mutation, nextInTree.parent)\n );\n } else {\n const idx = queueNodeTrees.indexOf(nextInTree);\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n }\n continue;\n }\n if (parentId in queueNodeMap) {\n const parentInTree = queueNodeMap[parentId];\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\n continue;\n }\n queueNodeTrees.push(putIntoMap(mutation, null));\n }\n return queueNodeTrees;\n}\nfunction iterateResolveTree(tree, cb) {\n cb(tree.value);\n for (let i2 = tree.children.length - 1; i2 >= 0; i2--) {\n iterateResolveTree(tree.children[i2], cb);\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction getBaseDimension(node2, rootIframe) {\n var _a2, _b;\n const frameElement = (_b = (_a2 = node2.ownerDocument) == null ? void 0 : _a2.defaultView) == null ? void 0 : _b.frameElement;\n if (!frameElement || frameElement === rootIframe) {\n return {\n x: 0,\n y: 0,\n relativeScale: 1,\n absoluteScale: 1\n };\n }\n const frameDimension = frameElement.getBoundingClientRect();\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n const relativeScale = frameDimension.height / frameElement.clientHeight;\n return {\n x: frameDimension.x * frameBaseDimension.relativeScale + frameBaseDimension.x,\n y: frameDimension.y * frameBaseDimension.relativeScale + frameBaseDimension.y,\n relativeScale,\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale\n };\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index.shadowRoot(n2));\n}\nfunction getNestedRule(rules2, position) {\n const rule2 = rules2[position[0]];\n if (position.length === 1) {\n return rule2;\n } else {\n return getNestedRule(\n rule2.cssRules[position[1]].cssRules,\n position.slice(2)\n );\n }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n const positions = [...nestedIndex];\n const index2 = positions.pop();\n return { positions, index: index2 };\n}\nfunction uniqueTextMutations(mutations) {\n const idSet = /* @__PURE__ */ new Set();\n const uniqueMutations = [];\n for (let i2 = mutations.length; i2--; ) {\n const mutation = mutations[i2];\n if (!idSet.has(mutation.id)) {\n uniqueMutations.push(mutation);\n idSet.add(mutation.id);\n }\n }\n return uniqueMutations;\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField(this, \"id\", 1);\n __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2;\n let shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n2)))\n shadowHost = index.host(index.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n const shadowHost = getRootShadowHost(n2);\n return index.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n return index.contains(doc, n2) || shadowHostInDom(n2);\n}\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n StyleSheetMirror,\n get _mirror() {\n return _mirror;\n },\n closestElementOfNode,\n getBaseDimension,\n getNestedRule,\n getPositionsAndIndex,\n getRootShadowHost,\n getShadowHost,\n getWindowHeight,\n getWindowScroll,\n getWindowWidth,\n hasShadowRoot,\n hookSetter,\n inDom,\n isAncestorRemoved,\n isBlocked,\n isIgnored,\n isSerialized,\n isSerializedIframe,\n isSerializedStylesheet,\n iterateResolveTree,\n legacy_isTouchEvent,\n get nowTimestamp() {\n return nowTimestamp;\n },\n on,\n patch,\n polyfill: polyfill$1,\n queueToResolveTrees,\n shadowHostInDom,\n throttle,\n uniqueTextMutations\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n constructor() {\n __publicField(this, \"length\", 0);\n __publicField(this, \"head\", null);\n __publicField(this, \"tail\", null);\n }\n get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n let current = this.head;\n for (let index2 = 0; index2 < position; index2++) {\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n }\n addNode(n2) {\n const node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n const current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n const current = n2.nextSibling.__ln.previous;\n node2.previous = current;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current) {\n current.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n }\n removeNode(n2) {\n const current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"texts\", []);\n __publicField(this, \"attributes\", []);\n __publicField(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"removes\", []);\n __publicField(this, \"mapRemoves\", []);\n __publicField(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */\n __publicField(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"removesSubTreeCache\", /* @__PURE__ */ new Set());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"blockClass\");\n __publicField(this, \"blockSelector\");\n __publicField(this, \"maskTextClass\");\n __publicField(this, \"maskTextSelector\");\n __publicField(this, \"inlineStylesheet\");\n __publicField(this, \"maskInputOptions\");\n __publicField(this, \"maskTextFn\");\n __publicField(this, \"maskInputFn\");\n __publicField(this, \"keepIframeSrcFn\");\n __publicField(this, \"recordCanvas\");\n __publicField(this, \"inlineImages\");\n __publicField(this, \"slimDOMOptions\");\n __publicField(this, \"dataURLOptions\");\n __publicField(this, \"doc\");\n __publicField(this, \"mirror\");\n __publicField(this, \"iframeManager\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"shadowDomManager\");\n __publicField(this, \"canvasManager\");\n __publicField(this, \"processedNodeManager\");\n __publicField(this, \"unattachedDoc\");\n __publicField(this, \"processMutations\", (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n });\n __publicField(this, \"emit\", () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = /* @__PURE__ */ new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n2) => {\n let ns = n2;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n2) => {\n const parent = index.parentNode(n2);\n if (!parent || !inDom(n2)) {\n return;\n }\n let cssCaptured = false;\n if (n2.nodeType === Node.TEXT_NODE) {\n const parentTag = parent.tagName;\n if (parentTag === \"TEXTAREA\") {\n return;\n } else if (parentTag === \"STYLE\" && this.addedSet.has(parent)) {\n cssCaptured = true;\n }\n }\n const parentId = isShadowRoot(parent) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(parent);\n const nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n const sn = serializeNodeWithId(n2, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskTextClass: this.maskTextClass,\n maskTextSelector: this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(\n currentN\n );\n }\n if (hasShadowRoot(n2)) {\n this.shadowDomManager.addShadowRoot(index.shadowRoot(n2), this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n cssCaptured\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n2 of this.movedSet) {\n if (isParentRemoved(this.removesSubTreeCache, n2, this.mirror) && !this.movedSet.has(index.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for (const n2 of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removesSubTreeCache, n2, this.mirror)) {\n pushAdd(n2);\n } else if (isAncestorInSet(this.movedSet, n2)) {\n pushAdd(n2);\n } else {\n this.droppedSet.add(n2);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node2 = null;\n if (candidate) {\n const parentId = this.mirror.getId(index.parentNode(candidate.value));\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(index.parentNode(_node.value));\n const nextId = getNextId(_node.value);\n if (nextId === -1) continue;\n else if (parentId !== -1) {\n node2 = _node;\n break;\n } else {\n const unhandledNode = _node.value;\n const parent = index.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = index.host(parent);\n const parentId2 = this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n const payload = {\n texts: this.texts.map((text) => {\n const n2 = text.node;\n const parent = index.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(parent);\n }\n return {\n id: this.mirror.getId(n2),\n value: text.value\n };\n }).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes.map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === \"string\") {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes\n };\n }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = /* @__PURE__ */ new WeakMap();\n this.removes = [];\n this.addedSet = /* @__PURE__ */ new Set();\n this.movedSet = /* @__PURE__ */ new Set();\n this.droppedSet = /* @__PURE__ */ new Set();\n this.removesSubTreeCache = /* @__PURE__ */ new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n });\n __publicField(this, \"genTextAreaValueMutation\", (textarea) => {\n let item = this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(textarea, item);\n }\n item.attributes.value = Array.from(\n index.childNodes(textarea),\n (cn) => index.textContent(cn) || \"\"\n ).join(\"\");\n });\n __publicField(this, \"processMutation\", (m) => {\n if (isIgnored(m.target, this.mirror, this.slimDOMOptions)) {\n return;\n }\n switch (m.type) {\n case \"characterData\": {\n const value = index.textContent(m.target);\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) && value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(\n m.target,\n this.maskTextClass,\n this.maskTextSelector,\n true\n // checkAncestors\n ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\": {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === \"value\") {\n const type = getInputType(target);\n value = maskInputValue({\n element: target,\n maskInputOptions: this.maskInputOptions,\n tagName: target.tagName,\n type,\n value,\n maskInputFn: this.maskInputFn\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(\n this.doc,\n toLowerCase(target.tagName),\n toLowerCase(attributeName),\n value\n );\n if (attributeName === \"style\") {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n } else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === \"\") {\n item.styleDiff[pname] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\": {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\n return;\n if (m.target.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n m.removedNodes.forEach((n2) => {\n const nodeId = this.mirror.getId(n2);\n const parentId = isShadowRoot(m.target) ? this.mirror.getId(index.host(m.target)) : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || isIgnored(n2, this.mirror, this.slimDOMOptions) || !isSerialized(n2, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n2)) {\n deepDelete(this.addedSet, n2);\n this.droppedSet.add(n2);\n } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n2);\n } else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n processRemoves(n2, this.removesSubTreeCache);\n }\n this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */\n __publicField(this, \"genAdds\", (n2, target) => {\n if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n if (this.mirror.hasNode(n2)) {\n if (isIgnored(n2, this.mirror, this.slimDOMOptions)) {\n return;\n }\n this.movedSet.add(n2);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n this.addedSet.add(n2);\n this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, this.blockClass, this.blockSelector, false)) {\n index.childNodes(n2).forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n2)) {\n index.childNodes(index.shadowRoot(n2)).forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n2);\n });\n }\n }\n });\n }\n init(options) {\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index.childNodes(n2).forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction processRemoves(n2, cache) {\n const queue = [n2];\n while (queue.length) {\n const next = queue.pop();\n if (cache.has(next)) continue;\n cache.add(next);\n index.childNodes(next).forEach((n22) => queue.push(n22));\n }\n return;\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.size === 0) return false;\n return _isParentRemoved(removes, n2);\n}\nfunction _isParentRemoved(removes, n2, _mirror2) {\n const node2 = index.parentNode(n2);\n if (!node2) return false;\n return removes.has(node2);\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n const parent = index.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = (...rest) => {\n try {\n return cb(...rest);\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n const observer = new (mutationObserverCtor())(\n callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer))\n );\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction initMoveObserver({\n mousemoveCb,\n sampling,\n doc,\n mirror: mirror2\n}) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle(\n callbackWrapper(\n (source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(\n positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }),\n source\n );\n positions = [];\n timeBaseline = null;\n }\n ),\n callbackThreshold\n );\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(\n typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n );\n }),\n threshold,\n {\n trailing: false\n }\n )\n );\n const handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({\n mouseInteractionCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch (event.pointerType) {\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n const id = mirror2.getId(target);\n const { clientX, clientY } = e2;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...pointerType !== null && { pointerType }\n });\n };\n };\n Object.keys(MouseInteractions).filter(\n (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n ).forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\n \"mouse\",\n \"pointer\"\n );\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({\n scrollCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }),\n sampling.scroll || 100\n )\n );\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(\n throttle(\n callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }),\n 200\n )\n );\n return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n inputCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n ignoreClass,\n ignoreSelector,\n maskInputOptions,\n maskInputFn,\n sampling,\n userTriggeredOnInput\n}) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n let text = target.value;\n let isChecked = false;\n const type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions,\n tagName,\n type,\n value: text,\n maskInputFn\n });\n }\n cbWithDedup(\n target,\n userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n );\n const name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el) => {\n if (el !== target) {\n const text2 = el.value;\n cbWithDedup(\n el,\n userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n );\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n const id = mirror2.getId(target);\n callbackWrapper(inputCb)({\n ...v2,\n id\n });\n }\n }\n const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n const handlers = events.map(\n (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n );\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n );\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, \"value\"],\n [currentWindow.HTMLInputElement.prototype, \"checked\"],\n [currentWindow.HTMLSelectElement.prototype, \"value\"],\n [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n // Some UI library use selectedIndex to set select value\n [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(\n ...hookProperties.map(\n (p) => hookSetter(\n p[0],\n p[1],\n {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n // userTriggered to false as this could well be programmatic\n });\n }\n },\n false,\n currentWindow\n )\n )\n );\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n const positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n const rules2 = Array.from(\n childRule.parentRule.cssRules\n );\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n let id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule: rule2, index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2 = this.cssRules.length) {\n const rule2 = `${selector} { ${styleBlock} }`;\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [rule2, index2]);\n };\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [index2]);\n };\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(\n unmodifiedFunctions[typeKey].insertRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule: rule2,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index2 || 0\n // defaults to 0\n ]\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n type.prototype.deleteRule = new Proxy(\n unmodifiedFunctions[typeKey].deleteRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index2] }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({\n mirror: mirror2,\n stylesheetManager\n}, host2) {\n var _a2, _b, _c;\n let hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index.host(host2));\n const patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n const originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(\n patchTarget == null ? void 0 : patchTarget.prototype,\n \"adoptedStyleSheets\"\n ) : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set(sheets) {\n var _a3;\n const result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {\n }\n }\n return result2;\n }\n });\n return callbackWrapper(() => {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver({\n styleDeclarationCb,\n mirror: mirror2,\n ignoreCSSAttributes,\n stylesheetManager\n}, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({\n mediaInteractionCb,\n blockClass,\n blockSelector,\n mirror: mirror2,\n sampling,\n doc\n}) {\n const handler = callbackWrapper(\n (type) => throttle(\n callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate, loop } = target;\n mediaInteractionCb({\n type,\n id: mirror2.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n loop\n });\n }),\n sampling.media || 500\n )\n );\n const handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = /* @__PURE__ */ new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== \"string\",\n descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n const restoreHandler = patch(\n doc.fonts,\n \"add\",\n function(original) {\n return function(fontFace) {\n setTimeout(\n callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }),\n 0\n );\n return original.apply(this, [fontFace]);\n };\n }\n );\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror: mirror2, blockClass, blockSelector, selectionCb } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i2 = 0; i2 < count; i2++) {\n const range = selection.getRangeAt(i2);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset,\n end: mirror2.getId(endContainer),\n endOffset\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n doc,\n customElementCb\n}) {\n const win = doc.defaultView;\n if (!win || !win.customElements) return () => {\n };\n const restoreHandler = patch(\n win.customElements,\n \"define\",\n function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name\n }\n });\n } catch (e2) {\n console.warn(`Custom element callback failed for ${name}`);\n }\n return original.apply(this, [name, constructor, options]);\n };\n }\n );\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n const {\n mutationCb,\n mousemoveCb,\n mouseInteractionCb,\n scrollCb,\n viewportResizeCb,\n inputCb,\n mediaInteractionCb,\n styleSheetRuleCb,\n styleDeclarationCb,\n canvasMutationCb,\n fontCb,\n selectionCb,\n customElementCb\n } = o2;\n o2.mutationCb = (...p) => {\n if (hooks.mutation) {\n hooks.mutation(...p);\n }\n mutationCb(...p);\n };\n o2.mousemoveCb = (...p) => {\n if (hooks.mousemove) {\n hooks.mousemove(...p);\n }\n mousemoveCb(...p);\n };\n o2.mouseInteractionCb = (...p) => {\n if (hooks.mouseInteraction) {\n hooks.mouseInteraction(...p);\n }\n mouseInteractionCb(...p);\n };\n o2.scrollCb = (...p) => {\n if (hooks.scroll) {\n hooks.scroll(...p);\n }\n scrollCb(...p);\n };\n o2.viewportResizeCb = (...p) => {\n if (hooks.viewportResize) {\n hooks.viewportResize(...p);\n }\n viewportResizeCb(...p);\n };\n o2.inputCb = (...p) => {\n if (hooks.input) {\n hooks.input(...p);\n }\n inputCb(...p);\n };\n o2.mediaInteractionCb = (...p) => {\n if (hooks.mediaInteaction) {\n hooks.mediaInteaction(...p);\n }\n mediaInteractionCb(...p);\n };\n o2.styleSheetRuleCb = (...p) => {\n if (hooks.styleSheetRule) {\n hooks.styleSheetRule(...p);\n }\n styleSheetRuleCb(...p);\n };\n o2.styleDeclarationCb = (...p) => {\n if (hooks.styleDeclaration) {\n hooks.styleDeclaration(...p);\n }\n styleDeclarationCb(...p);\n };\n o2.canvasMutationCb = (...p) => {\n if (hooks.canvasMutation) {\n hooks.canvasMutation(...p);\n }\n canvasMutationCb(...p);\n };\n o2.fontCb = (...p) => {\n if (hooks.font) {\n hooks.font(...p);\n }\n fontCb(...p);\n };\n o2.selectionCb = (...p) => {\n if (hooks.selection) {\n hooks.selection(...p);\n }\n selectionCb(...p);\n };\n o2.customElementCb = (...c2) => {\n if (hooks.customElement) {\n hooks.customElement(...c2);\n }\n customElementCb(...c2);\n };\n}\nfunction initObservers(o2, hooks = {}) {\n const currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n mergeHooks(o2, hooks);\n let mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n const mousemoveHandler = initMoveObserver(o2);\n const mouseInteractionHandler = initMouseInteractionObserver(o2);\n const scrollHandler = initScrollObserver(o2);\n const viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n const inputHandler = initInputObserver(o2);\n const mediaInteractionHandler = initMediaInteractionObserver(o2);\n let styleSheetObserver = () => {\n };\n let adoptedStyleSheetObserver = () => {\n };\n let styleDeclarationObserver = () => {\n };\n let fontObserver = () => {\n };\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n const selectionObserver = initSelectionObserver(o2);\n const customElementObserver = initCustomElementObserver(o2);\n const pluginHandlers = [];\n for (const plugin3 of o2.plugins) {\n pluginHandlers.push(\n plugin3.observer(plugin3.callback, currentWindow, plugin3.options)\n );\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(\n typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n );\n}\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n __publicField(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(\n (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n );\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\nclass IframeManager {\n constructor(options) {\n __publicField(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField(this, \"crossOriginIframeStyleMirror\");\n __publicField(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"wrappedEmit\");\n __publicField(this, \"loadListener\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n this.stylesheetManager.styleMirror.generateId.bind(\n this.stylesheetManager.styleMirror\n )\n );\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (this.recordCrossOriginIframes)\n (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\n \"message\",\n this.handleMessage.bind(this)\n );\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(\n iframeEl.contentDocument.adoptedStyleSheets,\n this.mirror.getId(iframeEl.contentDocument)\n );\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n const transformedEvent = this.transformCrossOriginEvent(\n iframeEl,\n crossOriginMessageEvent.data.event\n );\n if (transformedEvent)\n this.wrappedEmit(\n transformedEvent,\n crossOriginMessageEvent.data.isCheckout\n );\n }\n transformCrossOriginEvent(iframeEl, e2) {\n var _a2;\n switch (e2.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n const rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e2;\n }\n case EventType.Custom: {\n this.replaceIds(\n e2.data.payload,\n iframeEl,\n [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n );\n return e2;\n }\n case EventType.IncrementalSnapshot: {\n switch (e2.data.source) {\n case IncrementalSource.Mutation: {\n e2.data.adds.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n this.replaceIdOnNode(n2.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n });\n e2.data.attributes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n e2.data.texts.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e2.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n return e2;\n }\n case IncrementalSource.Font: {\n return e2;\n }\n case IncrementalSource.Selection: {\n e2.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach((style) => {\n this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(\n iframeEl,\n obj[key]\n );\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node2, iframeEl) {\n this.replaceIds(node2, iframeEl, [\"id\", \"rootId\"]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node2, rootId) {\n if (node2.type !== NodeType.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n __publicField(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"scrollCb\");\n __publicField(this, \"bypassOptions\");\n __publicField(this, \"mirror\");\n __publicField(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot2, doc) {\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n const observer = initMutationObserver(\n {\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n },\n shadowRoot2\n );\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(\n initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })\n );\n setTimeout(() => {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(\n shadowRoot2.adoptedStyleSheets,\n this.mirror.getId(index.host(shadowRoot2))\n );\n this.restoreHandlers.push(\n initAdoptedStyleSheetObserver(\n {\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager\n },\n shadowRoot2\n )\n );\n }, 0);\n }\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(\n iframeElement.contentWindow.Element,\n iframeElement.contentDocument\n );\n }\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(\n patch(\n element.prototype,\n \"attachShadow\",\n function(original) {\n return function(option) {\n const sRoot = original.call(this, option);\n const shadowRootEl = index.shadowRoot(this);\n if (shadowRootEl && inDom(this))\n manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }\n )\n );\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n } catch (e2) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for (i2 = 0; i2 < len; i2 += 3) {\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar decode = function(base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i2, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i2 = 0; i2 < len; i2 += 4) {\n encoded1 = lookup[base64.charCodeAt(i2)];\n encoded2 = lookup[base64.charCodeAt(i2 + 1)];\n encoded3 = lookup[base64.charCodeAt(i2 + 2)];\n encoded4 = lookup[base64.charCodeAt(i2 + 3)];\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return arraybuffer;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n let contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n return;\n const name = value.constructor.name;\n const list2 = variableListFor$1(ctx, name);\n let index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (value instanceof Array) {\n return value.map((arg) => serializeArg(arg, win, ctx));\n } else if (value === null) {\n return value;\n } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [Object.values(value)]\n };\n } else if (\n // SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n value instanceof ArrayBuffer\n ) {\n const name = value.constructor.name;\n const base64 = encode(value);\n return {\n rr_type: name,\n base64\n };\n } else if (value instanceof DataView) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (value instanceof HTMLImageElement) {\n const name = value.constructor.name;\n const { src } = value;\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof HTMLCanvasElement) {\n const name = \"HTMLImageElement\";\n const src = value.toDataURL();\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof ImageData) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [serializeArg(value.data, win, ctx), value.width, value.height]\n };\n } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n const name = value.constructor.name;\n const index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name,\n index: index2\n };\n }\n return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n const webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n (name) => typeof win[name] === \"function\"\n );\n return Boolean(\n supportedWebGLConstructorNames.find(\n (name) => value instanceof win[name]\n )\n );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n const props2D = Object.getOwnPropertyNames(\n win.CanvasRenderingContext2D.prototype\n );\n for (const prop of props2D) {\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n win.CanvasRenderingContext2D.prototype,\n prop,\n function(original) {\n return function(...args) {\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(() => {\n const recordArgs = serializeArgs(args, win, this);\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(\n win.CanvasRenderingContext2D.prototype,\n prop,\n {\n set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [v2],\n setter: true\n });\n }\n }\n );\n handlers.push(hookHandler);\n }\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n const handlers = [];\n try {\n const restoreHandler = patch(\n win.HTMLCanvasElement.prototype,\n \"getContext\",\n function(original) {\n return function(contextType, ...args) {\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n const ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n if (args[0] && typeof args[0] === \"object\") {\n const contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [contextType, ...args]);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n const handlers = [];\n const props = Object.getOwnPropertyNames(prototype);\n for (const prop of props) {\n if (\n //prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)\n ) {\n continue;\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n prototype,\n prop,\n function(original) {\n return function(...args) {\n const result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n const recordArgs = serializeArgs(args, win, this);\n const mutation = {\n type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(prototype, prop, {\n set(v2) {\n cb(this.canvas, {\n type,\n property: prop,\n args: [v2],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n }\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n handlers.push(\n ...patchGLPrototype(\n win.WebGLRenderingContext.prototype,\n CanvasContext.WebGL,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n handlers.push(\n ...patchGLPrototype(\n win.WebGL2RenderingContext.prototype,\n CanvasContext.WebGL2,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\nconst blob = typeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\nfunction WorkerWrapper(options) {\n let objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n const worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", () => {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\n \"data:text/javascript;base64,\" + encodedJs,\n {\n name: options == null ? void 0 : options.name\n }\n );\n } finally {\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nclass CanvasManager {\n constructor(options) {\n __publicField(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField(this, \"rafStamps\", { latestId: 0, invokeId: null });\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"resetObservers\");\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"processMutation\", (target, mutation) => {\n const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n if (newFrame || !this.rafStamps.invokeId)\n this.rafStamps.invokeId = this.rafStamps.latestId;\n if (!this.pendingCanvasMutations.has(target)) {\n this.pendingCanvasMutations.set(target, []);\n }\n this.pendingCanvasMutations.get(target).push(mutation);\n });\n const {\n sampling = \"all\",\n win,\n blockClass,\n blockSelector,\n recordCanvas,\n dataURLOptions\n } = options;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\")\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\")\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions\n });\n }\n reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n }\n freeze() {\n this.frozen = true;\n }\n unfreeze() {\n this.frozen = false;\n }\n lock() {\n this.locked = true;\n }\n unlock() {\n this.locked = false;\n }\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n true\n );\n const snapshotInProgressMap = /* @__PURE__ */ new Map();\n const worker = new WorkerWrapper();\n worker.onmessage = (e2) => {\n const { id } = e2.data;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n const { base64, type, width, height } = e2.data;\n this.mutationCb({\n id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [0, 0, width, height]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [{ rr_type: \"ArrayBuffer\", base64 }],\n type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n const timeBetweenSnapshots = 1e3 / fps;\n let lastSnapshotTime = 0;\n let rafId;\n const getCanvas = () => {\n const matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach((canvas) => {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n const takeCanvasSnapshots = (timestamp) => {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n getCanvas().forEach(async (canvas) => {\n var _a2;\n const id = this.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return;\n if (canvas.width === 0 || canvas.height === 0) return;\n snapshotInProgressMap.set(id, true);\n if ([\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n const context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n const bitmap = await createImageBitmap(canvas);\n worker.postMessage(\n {\n id,\n bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n },\n [bitmap]\n );\n });\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = () => {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n }\n initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n false\n );\n const canvas2DReset = initCanvas2DMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n this.resetObservers = () => {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n }\n startPendingCanvasMutationFlusher() {\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n startRAFTimestamping() {\n const setLatestRAFTimestamp = (timestamp) => {\n this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n }\n flushPendingCanvasMutations() {\n this.pendingCanvasMutations.forEach(\n (_values, canvas) => {\n const id = this.mirror.getId(canvas);\n this.flushPendingCanvasMutationFor(canvas, id);\n }\n );\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n const values = valuesWithType.map((value) => {\n const { type: type2, ...rest } = value;\n return rest;\n });\n const { type } = valuesWithType[0];\n this.mutationCb({ id, type, commands: values });\n this.pendingCanvasMutations.delete(canvas);\n }\n}\nclass StylesheetManager {\n constructor(options) {\n __publicField(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"adoptedStyleSheetCb\");\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0) return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r2, index2) => ({\n rule: stringifyRule(r2, sheet.href),\n index: index2\n }))\n });\n } else styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n }\n // TODO: take snapshot on stylesheet reload by applying event listener\n trackStylesheetInLinkElement(_linkEl) {\n }\n}\nclass ProcessedNodeManager {\n constructor() {\n __publicField(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"active\", false);\n }\n inOtherBuffer(node2, thisBuffer) {\n const buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n }\n add(node2, buffer) {\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(() => {\n this.nodeMap = /* @__PURE__ */ new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n }\n destroy() {\n }\n}\nlet wrappedEmit;\nlet takeFullSnapshot$1;\nlet canvasManager;\nlet recording = false;\ntry {\n if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n const {\n emit,\n checkoutEveryNms,\n checkoutEveryNth,\n blockClass = \"rr-block\",\n blockSelector = null,\n ignoreClass = \"rr-ignore\",\n ignoreSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n maskAllInputs,\n maskInputOptions: _maskInputOptions,\n slimDOMOptions: _slimDOMOptions,\n maskInputFn,\n maskTextFn,\n hooks,\n packFn,\n sampling = {},\n dataURLOptions = {},\n mousemoveWait,\n recordDOM = true,\n recordCanvas = false,\n recordCrossOriginIframes = false,\n recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n userTriggeredOnInput = false,\n collectFonts = false,\n inlineImages = false,\n plugins,\n keepIframeSrcFn = () => false,\n ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n errorHandler: errorHandler2\n } = options;\n registerErrorHandler(errorHandler2);\n const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : { password: true };\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e2) => {\n for (const plugin3 of plugins || []) {\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = (r2, isCheckout) => {\n var _a2;\n const e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n const message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout\n };\n window.parent.postMessage(message, \"*\");\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m\n }\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p\n }\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p\n }\n });\n const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a2\n }\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n const iframeManager = new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit\n });\n for (const plugin3 of plugins || []) {\n if (plugin3.getMirror)\n plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass,\n blockSelector,\n mirror,\n sampling: sampling.canvas,\n dataURLOptions\n });\n const shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager\n },\n mirror\n });\n takeFullSnapshot$1 = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit(\n {\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n },\n isCheckout\n );\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node2 = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n2) => {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index.shadowRoot(n2), document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit(\n {\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n },\n isCheckout\n );\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(\n document.adoptedStyleSheets,\n mirror.getId(document)\n );\n };\n try {\n const handlers = [];\n const observe = (doc) => {\n var _a2;\n return callbackWrapper(initObservers)(\n {\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions\n }\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d\n }\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d\n }\n }),\n inputCb: (v2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v2\n }\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p\n }\n }),\n styleSheetRuleCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r2\n }\n }),\n styleDeclarationCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r2\n }\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p\n }\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p\n }\n });\n },\n customElementCb: (c2) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c2\n }\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskTextClass,\n maskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter((p) => p.observer)) == null ? void 0 : _a2.map((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload\n }\n })\n }))) || []\n },\n hooks\n );\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n } catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(\n on(\"DOMContentLoaded\", () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n })\n );\n handlers.push(\n on(\n \"load\",\n () => {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n },\n window\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = (tag, payload) => {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag,\n payload\n }\n });\n};\nrecord.freezePage = () => {\n mutationBuffers.forEach((buf) => buf.freeze());\n};\nrecord.takeFullSnapshot = (isCheckout) => {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nfunction mitt$1(n2) {\n return { all: n2 = n2 || /* @__PURE__ */ new Map(), on: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 ? i2.push(e2) : n2.set(t2, [e2]);\n }, off: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 && (e2 ? i2.splice(i2.indexOf(e2) >>> 0, 1) : n2.set(t2, []));\n }, emit: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 && i2.slice().map(function(n3) {\n n3(e2);\n }), (i2 = n2.get(\"*\")) && i2.slice().map(function(n3) {\n n3(t2, e2);\n });\n } };\n}\nconst mittProxy = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: mitt$1\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction polyfill(w = window, d = document) {\n if (\"scrollBehavior\" in d.documentElement.style && w.__forceSmoothScrollPolyfill__ !== true) {\n return;\n }\n const Element2 = w.HTMLElement || w.Element;\n const SCROLL_TIME = 468;\n const original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element2.prototype.scroll || scrollElement,\n scrollIntoView: Element2.prototype.scrollIntoView\n };\n const now = w.performance && w.performance.now ? w.performance.now.bind(w.performance) : Date.now;\n function isMicrosoftBrowser(userAgent) {\n const userAgentPatterns = [\"MSIE \", \"Trident/\", \"Edge/\"];\n return new RegExp(userAgentPatterns.join(\"|\")).test(userAgent);\n }\n const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n function scrollElement(x2, y) {\n this.scrollLeft = x2;\n this.scrollTop = y;\n }\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n function shouldBailOut(firstArg) {\n if (firstArg === null || typeof firstArg !== \"object\" || firstArg.behavior === void 0 || firstArg.behavior === \"auto\" || firstArg.behavior === \"instant\") {\n return true;\n }\n if (typeof firstArg === \"object\" && firstArg.behavior === \"smooth\") {\n return false;\n }\n throw new TypeError(\n \"behavior member of ScrollOptions \" + firstArg.behavior + \" is not a valid value for enumeration ScrollBehavior.\"\n );\n }\n function hasScrollableSpace(el, axis) {\n if (axis === \"Y\") {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n if (axis === \"X\") {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n function canOverflow(el, axis) {\n const overflowValue = w.getComputedStyle(el, null)[\"overflow\" + axis];\n return overflowValue === \"auto\" || overflowValue === \"scroll\";\n }\n function isScrollable(el) {\n const isScrollableY = hasScrollableSpace(el, \"Y\") && canOverflow(el, \"Y\");\n const isScrollableX = hasScrollableSpace(el, \"X\") && canOverflow(el, \"X\");\n return isScrollableY || isScrollableX;\n }\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n return el;\n }\n function step(context) {\n const time = now();\n let value;\n let currentX;\n let currentY;\n let elapsed = (time - context.startTime) / SCROLL_TIME;\n elapsed = elapsed > 1 ? 1 : elapsed;\n value = ease(elapsed);\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n context.method.call(context.scrollable, currentX, currentY);\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n function smoothScroll(el, x2, y) {\n let scrollable;\n let startX;\n let startY;\n let method;\n const startTime = now();\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n step({\n scrollable,\n method,\n startTime,\n startX,\n startY,\n x: x2,\n y\n });\n }\n w.scroll = w.scrollTo = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : w.scrollY || w.pageYOffset\n );\n return;\n }\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== void 0 ? ~~arguments[0].left : w.scrollX || w.pageXOffset,\n arguments[0].top !== void 0 ? ~~arguments[0].top : w.scrollY || w.pageYOffset\n );\n };\n w.scrollBy = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : 0,\n arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : 0\n );\n return;\n }\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n Element2.prototype.scroll = Element2.prototype.scrollTo = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n if (typeof arguments[0] === \"number\" && arguments[1] === void 0) {\n throw new SyntaxError(\"Value could not be converted\");\n }\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== void 0 ? ~~arguments[0].left : typeof arguments[0] !== \"object\" ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== void 0 ? ~~arguments[0].top : arguments[1] !== void 0 ? ~~arguments[1] : this.scrollTop\n );\n return;\n }\n const left = arguments[0].left;\n const top = arguments[0].top;\n smoothScroll.call(\n this,\n this,\n typeof left === \"undefined\" ? this.scrollLeft : ~~left,\n typeof top === \"undefined\" ? this.scrollTop : ~~top\n );\n };\n Element2.prototype.scrollBy = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== void 0 ? ~~arguments[0].left + this.scrollLeft : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== void 0 ? ~~arguments[0].top + this.scrollTop : ~~arguments[1] + this.scrollTop\n );\n return;\n }\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n Element2.prototype.scrollIntoView = function() {\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === void 0 ? true : arguments[0]\n );\n return;\n }\n const scrollableParent = findScrollableParent(this);\n const parentRects = scrollableParent.getBoundingClientRect();\n const clientRects = this.getBoundingClientRect();\n if (scrollableParent !== d.body) {\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n if (w.getComputedStyle(scrollableParent).position !== \"fixed\") {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: \"smooth\"\n });\n }\n } else {\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: \"smooth\"\n });\n }\n };\n}\nclass Timer {\n constructor(actions = [], config) {\n __publicField(this, \"timeOffset\", 0);\n __publicField(this, \"speed\");\n __publicField(this, \"actions\");\n __publicField(this, \"raf\", null);\n __publicField(this, \"lastTimestamp\");\n this.actions = actions;\n this.speed = config.speed;\n }\n /**\n * Add an action, possibly after the timer starts.\n */\n addAction(action) {\n const rafWasActive = this.raf === true;\n if (!this.actions.length || this.actions[this.actions.length - 1].delay <= action.delay) {\n this.actions.push(action);\n } else {\n const index2 = this.findActionIndex(action);\n this.actions.splice(index2, 0, action);\n }\n if (rafWasActive) {\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n }\n }\n start() {\n this.timeOffset = 0;\n this.lastTimestamp = performance.now();\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n }\n rafCheck() {\n const time = performance.now();\n this.timeOffset += (time - this.lastTimestamp) * this.speed;\n this.lastTimestamp = time;\n while (this.actions.length) {\n const action = this.actions[0];\n if (this.timeOffset >= action.delay) {\n this.actions.shift();\n action.doAction();\n } else {\n break;\n }\n }\n if (this.actions.length > 0) {\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n } else {\n this.raf = true;\n }\n }\n clear() {\n if (this.raf) {\n if (this.raf !== true) {\n cancelAnimationFrame(this.raf);\n }\n this.raf = null;\n }\n this.actions.length = 0;\n }\n setSpeed(speed) {\n this.speed = speed;\n }\n isActive() {\n return this.raf !== null;\n }\n findActionIndex(action) {\n let start = 0;\n let end = this.actions.length - 1;\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n if (this.actions[mid].delay < action.delay) {\n start = mid + 1;\n } else if (this.actions[mid].delay > action.delay) {\n end = mid - 1;\n } else {\n return mid + 1;\n }\n }\n return start;\n }\n}\nfunction addDelay(event, baselineTime) {\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions && event.data.positions.length) {\n const firstOffset = event.data.positions[0].timeOffset;\n const firstTimestamp = event.timestamp + firstOffset;\n event.delay = firstTimestamp - baselineTime;\n return firstTimestamp - baselineTime;\n }\n event.delay = event.timestamp - baselineTime;\n return event.delay;\n}\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t2, n2) {\n var e2 = \"function\" == typeof Symbol && t2[Symbol.iterator];\n if (!e2) return t2;\n var r2, o2, i2 = e2.call(t2), a2 = [];\n try {\n for (; (void 0 === n2 || n2-- > 0) && !(r2 = i2.next()).done; ) a2.push(r2.value);\n } catch (t3) {\n o2 = { error: t3 };\n } finally {\n try {\n r2 && !r2.done && (e2 = i2.return) && e2.call(i2);\n } finally {\n if (o2) throw o2.error;\n }\n }\n return a2;\n}\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nvar e = { type: \"xstate.init\" };\nfunction r(t2) {\n return void 0 === t2 ? [] : [].concat(t2);\n}\nfunction o(t2) {\n return { type: \"xstate.assign\", assignment: t2 };\n}\nfunction i(t2, n2) {\n return \"string\" == typeof (t2 = \"string\" == typeof t2 && n2 && n2[t2] ? n2[t2] : t2) ? { type: t2 } : \"function\" == typeof t2 ? { type: t2.name, exec: t2 } : t2;\n}\nfunction a(t2) {\n return function(n2) {\n return t2 === n2;\n };\n}\nfunction u(t2) {\n return \"string\" == typeof t2 ? { type: t2 } : t2;\n}\nfunction c(t2, n2) {\n return { value: t2, context: n2, actions: [], changed: false, matches: a(t2) };\n}\nfunction f(t2, n2, e2) {\n var r2 = n2, o2 = false;\n return [t2.filter(function(t3) {\n if (\"xstate.assign\" === t3.type) {\n o2 = true;\n var n3 = Object.assign({}, r2);\n return \"function\" == typeof t3.assignment ? n3 = t3.assignment(r2, e2) : Object.keys(t3.assignment).forEach(function(o3) {\n n3[o3] = \"function\" == typeof t3.assignment[o3] ? t3.assignment[o3](r2, e2) : t3.assignment[o3];\n }), r2 = n3, false;\n }\n return true;\n }), r2, o2];\n}\nfunction s(n2, o2) {\n void 0 === o2 && (o2 = {});\n var s2 = t(f(r(n2.states[n2.initial].entry).map(function(t2) {\n return i(t2, o2.actions);\n }), n2.context, e), 2), l2 = s2[0], v2 = s2[1], y = { config: n2, _options: o2, initialState: { value: n2.initial, actions: l2, context: v2, matches: a(n2.initial) }, transition: function(e2, o3) {\n var s3, l3, v3 = \"string\" == typeof e2 ? { value: e2, context: n2.context } : e2, p = v3.value, g = v3.context, d = u(o3), x2 = n2.states[p];\n if (x2.on) {\n var m = r(x2.on[d.type]);\n try {\n for (var h = function(t2) {\n var n3 = \"function\" == typeof Symbol && Symbol.iterator, e3 = n3 && t2[n3], r2 = 0;\n if (e3) return e3.call(t2);\n if (t2 && \"number\" == typeof t2.length) return { next: function() {\n return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };\n } };\n throw new TypeError(n3 ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n }(m), b = h.next(); !b.done; b = h.next()) {\n var S = b.value;\n if (void 0 === S) return c(p, g);\n var w = \"string\" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {\n return true;\n } : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];\n if (O(g, d)) {\n var q = t(f((_ ? r(R) : [].concat(x2.exit, R, T.entry).filter(function(t2) {\n return t2;\n })).map(function(t2) {\n return i(t2, y._options.actions);\n }), g, d), 3), z = q[0], A = q[1], B = q[2], C = null != j ? j : p;\n return { value: C, context: A, actions: z, changed: j !== p || z.length > 0 || B, matches: a(C) };\n }\n }\n } catch (t2) {\n s3 = { error: t2 };\n } finally {\n try {\n b && !b.done && (l3 = h.return) && l3.call(h);\n } finally {\n if (s3) throw s3.error;\n }\n }\n }\n return c(p, g);\n } };\n return y;\n}\nvar l = function(t2, n2) {\n return t2.actions.forEach(function(e2) {\n var r2 = e2.exec;\n return r2 && r2(t2.context, n2);\n });\n};\nfunction v(t2) {\n var r2 = t2.initialState, o2 = n.NotStarted, i2 = /* @__PURE__ */ new Set(), c2 = { _machine: t2, send: function(e2) {\n o2 === n.Running && (r2 = t2.transition(r2, e2), l(r2, u(e2)), i2.forEach(function(t3) {\n return t3(r2);\n }));\n }, subscribe: function(t3) {\n return i2.add(t3), t3(r2), { unsubscribe: function() {\n return i2.delete(t3);\n } };\n }, start: function(i3) {\n if (i3) {\n var u2 = \"object\" == typeof i3 ? i3 : { context: t2.config.context, value: i3 };\n r2 = { value: u2.value, actions: [], context: u2.context, matches: a(u2.value) };\n }\n return o2 = n.Running, l(r2, e), c2;\n }, stop: function() {\n return o2 = n.Stopped, i2.clear(), c2;\n }, get state() {\n return r2;\n }, get status() {\n return o2;\n } };\n return c2;\n}\nfunction discardPriorSnapshots(events, baselineTime) {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n const event = events[idx];\n if (event.type === EventType.Meta) {\n if (event.timestamp <= baselineTime) {\n return events.slice(idx);\n }\n }\n }\n return events;\n}\nfunction createPlayerService(context, { getCastFn, applyEventsSynchronously, emitter }) {\n const playerMachine = s(\n {\n id: \"player\",\n context,\n initial: \"paused\",\n states: {\n playing: {\n on: {\n PAUSE: {\n target: \"paused\",\n actions: [\"pause\"]\n },\n CAST_EVENT: {\n target: \"playing\",\n actions: \"castEvent\"\n },\n END: {\n target: \"paused\",\n actions: [\"resetLastPlayedEvent\", \"pause\"]\n },\n ADD_EVENT: {\n target: \"playing\",\n actions: [\"addEvent\"]\n }\n }\n },\n paused: {\n on: {\n PLAY: {\n target: \"playing\",\n actions: [\"recordTimeOffset\", \"play\"]\n },\n CAST_EVENT: {\n target: \"paused\",\n actions: \"castEvent\"\n },\n TO_LIVE: {\n target: \"live\",\n actions: [\"startLive\"]\n },\n ADD_EVENT: {\n target: \"paused\",\n actions: [\"addEvent\"]\n }\n }\n },\n live: {\n on: {\n ADD_EVENT: {\n target: \"live\",\n actions: [\"addEvent\"]\n },\n CAST_EVENT: {\n target: \"live\",\n actions: [\"castEvent\"]\n }\n }\n }\n }\n },\n {\n actions: {\n castEvent: o({\n lastPlayedEvent: (ctx, event) => {\n if (event.type === \"CAST_EVENT\") {\n return event.payload.event;\n }\n return ctx.lastPlayedEvent;\n }\n }),\n recordTimeOffset: o((ctx, event) => {\n let timeOffset = ctx.timeOffset;\n if (\"payload\" in event && \"timeOffset\" in event.payload) {\n timeOffset = event.payload.timeOffset;\n }\n return {\n ...ctx,\n timeOffset,\n baselineTime: ctx.events[0].timestamp + timeOffset\n };\n }),\n play(ctx) {\n var _a2;\n const { timer, events, baselineTime, lastPlayedEvent } = ctx;\n timer.clear();\n for (const event of events) {\n addDelay(event, baselineTime);\n }\n const neededEvents = discardPriorSnapshots(events, baselineTime);\n let lastPlayedTimestamp = lastPlayedEvent == null ? void 0 : lastPlayedEvent.timestamp;\n if ((lastPlayedEvent == null ? void 0 : lastPlayedEvent.type) === EventType.IncrementalSnapshot && lastPlayedEvent.data.source === IncrementalSource.MouseMove) {\n lastPlayedTimestamp = lastPlayedEvent.timestamp + ((_a2 = lastPlayedEvent.data.positions[0]) == null ? void 0 : _a2.timeOffset);\n }\n if (baselineTime < (lastPlayedTimestamp || 0)) {\n emitter.emit(ReplayerEvents.PlayBack);\n }\n const syncEvents = new Array();\n for (const event of neededEvents) {\n if (lastPlayedTimestamp && lastPlayedTimestamp < baselineTime && (event.timestamp <= lastPlayedTimestamp || event === lastPlayedEvent)) {\n continue;\n }\n if (event.timestamp < baselineTime) {\n syncEvents.push(event);\n } else {\n const castFn = getCastFn(event, false);\n timer.addAction({\n doAction: () => {\n castFn();\n },\n delay: event.delay\n });\n }\n }\n applyEventsSynchronously(syncEvents);\n emitter.emit(ReplayerEvents.Flush);\n timer.start();\n },\n pause(ctx) {\n ctx.timer.clear();\n },\n resetLastPlayedEvent: o((ctx) => {\n return {\n ...ctx,\n lastPlayedEvent: null\n };\n }),\n startLive: o({\n baselineTime: (ctx, event) => {\n ctx.timer.start();\n if (event.type === \"TO_LIVE\" && event.payload.baselineTime) {\n return event.payload.baselineTime;\n }\n return Date.now();\n }\n }),\n addEvent: o((ctx, machineEvent) => {\n const { baselineTime, timer, events } = ctx;\n if (machineEvent.type === \"ADD_EVENT\") {\n const { event } = machineEvent.payload;\n addDelay(event, baselineTime);\n let end = events.length - 1;\n if (!events[end] || events[end].timestamp <= event.timestamp) {\n events.push(event);\n } else {\n let insertionIndex = -1;\n let start = 0;\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n if (events[mid].timestamp <= event.timestamp) {\n start = mid + 1;\n } else {\n end = mid - 1;\n }\n }\n if (insertionIndex === -1) {\n insertionIndex = start;\n }\n events.splice(insertionIndex, 0, event);\n }\n const isSync = event.timestamp < baselineTime;\n const castFn = getCastFn(event, isSync);\n if (isSync) {\n castFn();\n } else if (timer.isActive()) {\n timer.addAction({\n doAction: () => {\n castFn();\n },\n delay: event.delay\n });\n }\n }\n return { ...ctx, events };\n })\n }\n }\n );\n return v(playerMachine);\n}\nfunction createSpeedService(context) {\n const speedMachine = s(\n {\n id: \"speed\",\n context,\n initial: \"normal\",\n states: {\n normal: {\n on: {\n FAST_FORWARD: {\n target: \"skipping\",\n actions: [\"recordSpeed\", \"setSpeed\"]\n },\n SET_SPEED: {\n target: \"normal\",\n actions: [\"setSpeed\"]\n }\n }\n },\n skipping: {\n on: {\n BACK_TO_NORMAL: {\n target: \"normal\",\n actions: [\"restoreSpeed\"]\n },\n SET_SPEED: {\n target: \"normal\",\n actions: [\"setSpeed\"]\n }\n }\n }\n }\n },\n {\n actions: {\n setSpeed: (ctx, event) => {\n if (\"payload\" in event) {\n ctx.timer.setSpeed(event.payload.speed);\n }\n },\n recordSpeed: o({\n normalSpeed: (ctx) => ctx.timer.speed\n }),\n restoreSpeed: (ctx) => {\n ctx.timer.setSpeed(ctx.normalSpeed);\n }\n }\n }\n );\n return v(speedMachine);\n}\nconst rules = (blockClass) => [\n `.${blockClass} { background: currentColor }`,\n \"noscript { display: none !important; }\"\n];\nconst webGLVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor(ctx, ctor) {\n let contextMap = webGLVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n webGLVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nfunction deserializeArg(imageMap, ctx, preload) {\n return async (arg) => {\n if (arg && typeof arg === \"object\" && \"rr_type\" in arg) {\n if (preload) preload.isUnchanged = false;\n if (arg.rr_type === \"ImageBitmap\" && \"args\" in arg) {\n const args = await deserializeArg(imageMap, ctx, preload)(arg.args);\n return await createImageBitmap.apply(null, args);\n } else if (\"index\" in arg) {\n if (preload || ctx === null) return arg;\n const { rr_type: name, index: index2 } = arg;\n return variableListFor(ctx, name)[index2];\n } else if (\"args\" in arg) {\n const { rr_type: name, args } = arg;\n const ctor = window[name];\n return new ctor(\n ...await Promise.all(\n args.map(deserializeArg(imageMap, ctx, preload))\n )\n );\n } else if (\"base64\" in arg) {\n return decode(arg.base64);\n } else if (\"src\" in arg) {\n const image = imageMap.get(arg.src);\n if (image) {\n return image;\n } else {\n const image2 = new Image();\n image2.src = arg.src;\n imageMap.set(arg.src, image2);\n return image2;\n }\n } else if (\"data\" in arg && arg.rr_type === \"Blob\") {\n const blobContents = await Promise.all(\n arg.data.map(deserializeArg(imageMap, ctx, preload))\n );\n const blob2 = new Blob(blobContents, {\n type: arg.type\n });\n return blob2;\n }\n } else if (Array.isArray(arg)) {\n const result2 = await Promise.all(\n arg.map(deserializeArg(imageMap, ctx, preload))\n );\n return result2;\n }\n return arg;\n };\n}\nfunction getContext(target, type) {\n try {\n if (type === CanvasContext.WebGL) {\n return target.getContext(\"webgl\") || target.getContext(\"experimental-webgl\");\n }\n return target.getContext(\"webgl2\");\n } catch (e2) {\n return null;\n }\n}\nconst WebGLVariableConstructorsNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\"\n];\nfunction saveToWebGLVarMap(ctx, result2) {\n if (!(result2 == null ? void 0 : result2.constructor)) return;\n const { name } = result2.constructor;\n if (!WebGLVariableConstructorsNames.includes(name)) return;\n const variables = variableListFor(ctx, name);\n if (!variables.includes(result2)) variables.push(result2);\n}\nasync function webglMutation({\n mutation,\n target,\n type,\n imageMap,\n errorHandler: errorHandler2\n}) {\n try {\n const ctx = getContext(target, type);\n if (!ctx) return;\n if (mutation.setter) {\n ctx[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[mutation.property];\n const args = await Promise.all(\n mutation.args.map(deserializeArg(imageMap, ctx))\n );\n const result2 = original.apply(ctx, args);\n saveToWebGLVarMap(ctx, result2);\n const debugMode = false;\n if (debugMode) ;\n } catch (error) {\n errorHandler2(mutation, error);\n }\n}\nasync function canvasMutation$1({\n event,\n mutations,\n target,\n imageMap,\n errorHandler: errorHandler2\n}) {\n const ctx = target.getContext(\"2d\");\n if (!ctx) {\n errorHandler2(mutations[0], new Error(\"Canvas context is null\"));\n return;\n }\n const mutationArgsPromises = mutations.map(\n async (mutation) => {\n return Promise.all(mutation.args.map(deserializeArg(imageMap, ctx)));\n }\n );\n const args = await Promise.all(mutationArgsPromises);\n args.forEach((args2, index2) => {\n const mutation = mutations[index2];\n try {\n if (mutation.setter) {\n ctx[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[mutation.property];\n if (mutation.property === \"drawImage\" && typeof mutation.args[0] === \"string\") {\n imageMap.get(event);\n original.apply(ctx, mutation.args);\n } else {\n original.apply(ctx, args2);\n }\n } catch (error) {\n errorHandler2(mutation, error);\n }\n return;\n });\n}\nasync function canvasMutation({\n event,\n mutation,\n target,\n imageMap,\n canvasEventMap,\n errorHandler: errorHandler2\n}) {\n try {\n const precomputedMutation = canvasEventMap.get(event) || mutation;\n const commands = \"commands\" in precomputedMutation ? precomputedMutation.commands : [precomputedMutation];\n if ([CanvasContext.WebGL, CanvasContext.WebGL2].includes(mutation.type)) {\n for (let i2 = 0; i2 < commands.length; i2++) {\n const command = commands[i2];\n await webglMutation({\n mutation: command,\n type: mutation.type,\n target,\n imageMap,\n errorHandler: errorHandler2\n });\n }\n return;\n }\n await canvasMutation$1({\n event,\n mutations: commands,\n target,\n imageMap,\n errorHandler: errorHandler2\n });\n } catch (error) {\n errorHandler2(mutation, error);\n }\n}\nclass MediaManager {\n constructor(options) {\n __publicField(this, \"mediaMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"warn\");\n __publicField(this, \"service\");\n __publicField(this, \"speedService\");\n __publicField(this, \"emitter\");\n __publicField(this, \"getCurrentTime\");\n __publicField(this, \"metadataCallbackMap\", /* @__PURE__ */ new Map());\n this.warn = options.warn;\n this.service = options.service;\n this.speedService = options.speedService;\n this.emitter = options.emitter;\n this.getCurrentTime = options.getCurrentTime;\n this.emitter.on(ReplayerEvents.Start, this.start.bind(this));\n this.emitter.on(ReplayerEvents.SkipStart, this.start.bind(this));\n this.emitter.on(ReplayerEvents.Pause, this.pause.bind(this));\n this.emitter.on(ReplayerEvents.Finish, this.pause.bind(this));\n this.speedService.subscribe(() => {\n this.syncAllMediaElements();\n });\n }\n syncAllMediaElements(options = { pause: false }) {\n this.mediaMap.forEach((_mediaState, target) => {\n this.syncTargetWithState(target);\n if (options.pause) {\n target.pause();\n }\n });\n }\n start() {\n this.syncAllMediaElements();\n }\n pause() {\n this.syncAllMediaElements({ pause: true });\n }\n seekTo({\n time,\n target,\n mediaState\n }) {\n if (mediaState.isPlaying) {\n const differenceBetweenCurrentTimeAndMediaMutationTimestamp = time - mediaState.lastInteractionTimeOffset;\n const mediaPlaybackOffset = differenceBetweenCurrentTimeAndMediaMutationTimestamp / 1e3 * mediaState.playbackRate;\n const duration = \"duration\" in target && target.duration;\n if (Number.isNaN(duration)) {\n this.waitForMetadata(target);\n return;\n }\n let seekToTime = mediaState.currentTimeAtLastInteraction + mediaPlaybackOffset;\n if (target.loop && // RRMediaElement doesn't have a duration property\n duration !== false) {\n seekToTime = seekToTime % duration;\n }\n target.currentTime = seekToTime;\n } else {\n target.pause();\n target.currentTime = mediaState.currentTimeAtLastInteraction;\n }\n }\n waitForMetadata(target) {\n if (this.metadataCallbackMap.has(target)) return;\n if (!(\"addEventListener\" in target)) return;\n const onLoadedMetadata = () => {\n this.metadataCallbackMap.delete(target);\n const mediaState = this.mediaMap.get(target);\n if (!mediaState) return;\n this.seekTo({\n time: this.getCurrentTime(),\n target,\n mediaState\n });\n };\n this.metadataCallbackMap.set(target, onLoadedMetadata);\n target.addEventListener(\"loadedmetadata\", onLoadedMetadata, {\n once: true\n });\n }\n getMediaStateFromMutation({\n target,\n timeOffset,\n mutation\n }) {\n const lastState = this.mediaMap.get(target);\n const { type, playbackRate, currentTime, muted, volume, loop } = mutation;\n const isPlaying = type === MediaInteractions.Play || type !== MediaInteractions.Pause && ((lastState == null ? void 0 : lastState.isPlaying) || target.getAttribute(\"autoplay\") !== null);\n const mediaState = {\n isPlaying,\n currentTimeAtLastInteraction: currentTime ?? (lastState == null ? void 0 : lastState.currentTimeAtLastInteraction) ?? 0,\n lastInteractionTimeOffset: timeOffset,\n playbackRate: playbackRate ?? (lastState == null ? void 0 : lastState.playbackRate) ?? 1,\n volume: volume ?? (lastState == null ? void 0 : lastState.volume) ?? 1,\n muted: muted ?? (lastState == null ? void 0 : lastState.muted) ?? target.getAttribute(\"muted\") === null,\n loop: loop ?? (lastState == null ? void 0 : lastState.loop) ?? target.getAttribute(\"loop\") === null\n };\n return mediaState;\n }\n syncTargetWithState(target) {\n const mediaState = this.mediaMap.get(target);\n if (!mediaState) return;\n const { muted, loop, volume, isPlaying } = mediaState;\n const playerIsPaused = this.service.state.matches(\"paused\");\n const playbackRate = mediaState.playbackRate * this.speedService.state.context.timer.speed;\n try {\n this.seekTo({\n time: this.getCurrentTime(),\n target,\n mediaState\n });\n if (target.volume !== volume) {\n target.volume = volume;\n }\n target.muted = muted;\n target.loop = loop;\n if (target.playbackRate !== playbackRate) {\n target.playbackRate = playbackRate;\n }\n if (isPlaying && !playerIsPaused) {\n void target.play();\n } else {\n target.pause();\n }\n } catch (error) {\n this.warn(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions\n `Failed to replay media interactions: ${error.message || error}`\n );\n }\n }\n addMediaElements(node2, timeOffset, mirror2) {\n if (![\"AUDIO\", \"VIDEO\"].includes(node2.nodeName)) return;\n const target = node2;\n const serializedNode = mirror2.getMeta(target);\n if (!serializedNode || !(\"attributes\" in serializedNode)) return;\n const playerIsPaused = this.service.state.matches(\"paused\");\n const mediaAttributes = serializedNode.attributes;\n let isPlaying = false;\n if (mediaAttributes.rr_mediaState) {\n isPlaying = mediaAttributes.rr_mediaState === \"played\";\n } else {\n isPlaying = target.getAttribute(\"autoplay\") !== null;\n }\n if (isPlaying && playerIsPaused) target.pause();\n let playbackRate = 1;\n if (typeof mediaAttributes.rr_mediaPlaybackRate === \"number\") {\n playbackRate = mediaAttributes.rr_mediaPlaybackRate;\n }\n let muted = false;\n if (typeof mediaAttributes.rr_mediaMuted === \"boolean\") {\n muted = mediaAttributes.rr_mediaMuted;\n } else {\n muted = target.getAttribute(\"muted\") !== null;\n }\n let loop = false;\n if (typeof mediaAttributes.rr_mediaLoop === \"boolean\") {\n loop = mediaAttributes.rr_mediaLoop;\n } else {\n loop = target.getAttribute(\"loop\") !== null;\n }\n let volume = 1;\n if (typeof mediaAttributes.rr_mediaVolume === \"number\") {\n volume = mediaAttributes.rr_mediaVolume;\n }\n let currentTimeAtLastInteraction = 0;\n if (typeof mediaAttributes.rr_mediaCurrentTime === \"number\") {\n currentTimeAtLastInteraction = mediaAttributes.rr_mediaCurrentTime;\n }\n this.mediaMap.set(target, {\n isPlaying,\n currentTimeAtLastInteraction,\n lastInteractionTimeOffset: timeOffset,\n playbackRate,\n volume,\n muted,\n loop\n });\n this.syncTargetWithState(target);\n }\n mediaMutation({\n target,\n timeOffset,\n mutation\n }) {\n this.mediaMap.set(\n target,\n this.getMediaStateFromMutation({\n target,\n timeOffset,\n mutation\n })\n );\n this.syncTargetWithState(target);\n }\n isSupportedMediaElement(node2) {\n return [\"AUDIO\", \"VIDEO\"].includes(node2.nodeName);\n }\n reset() {\n this.mediaMap.clear();\n }\n}\nfunction applyDialogToTopLevel(node2, attributeMutation) {\n if (node2.nodeName !== \"DIALOG\" || node2 instanceof BaseRRNode) return;\n const dialog = node2;\n const oldIsOpen = dialog.open;\n const oldIsModalState = oldIsOpen && dialog.matches(\"dialog:modal\");\n const rrOpenMode = dialog.getAttribute(\"rr_open_mode\");\n const newIsOpen = typeof (attributeMutation == null ? void 0 : attributeMutation.attributes.open) === \"string\" || typeof dialog.getAttribute(\"open\") === \"string\";\n const newIsModalState = rrOpenMode === \"modal\";\n const newIsNonModalState = rrOpenMode === \"non-modal\";\n const modalStateChanged = oldIsModalState && newIsNonModalState || !oldIsModalState && newIsModalState;\n if (oldIsOpen && !modalStateChanged) return;\n if (!dialog.isConnected) {\n console.warn(\"dialog is not attached to the dom\", dialog);\n return;\n }\n if (oldIsOpen) dialog.close();\n if (!newIsOpen) return;\n if (newIsModalState) dialog.showModal();\n else dialog.show();\n}\nfunction removeDialogFromTopLevel(node2, attributeMutation) {\n if (node2.nodeName !== \"DIALOG\" || node2 instanceof BaseRRNode) return;\n const dialog = node2;\n if (!dialog.isConnected) {\n console.warn(\"dialog is not attached to the dom\", dialog);\n return;\n }\n if (attributeMutation.attributes.open === null) {\n dialog.removeAttribute(\"open\");\n dialog.removeAttribute(\"rr_open_mode\");\n }\n}\nconst SKIP_TIME_INTERVAL = 5 * 1e3;\nconst mitt = mitt$1 || mittProxy;\nconst REPLAY_CONSOLE_PREFIX = \"[replayer]\";\nconst defaultMouseTailConfig = {\n duration: 500,\n lineCap: \"round\",\n lineWidth: 3,\n strokeStyle: \"red\"\n};\nfunction indicatesTouchDevice(e2) {\n return e2.type == EventType.IncrementalSnapshot && (e2.data.source == IncrementalSource.TouchMove || e2.data.source == IncrementalSource.MouseInteraction && e2.data.type == MouseInteractions.TouchStart);\n}\nclass Replayer {\n constructor(events, config) {\n __publicField(this, \"wrapper\");\n __publicField(this, \"iframe\");\n __publicField(this, \"service\");\n __publicField(this, \"speedService\");\n __publicField(this, \"config\");\n // In the fast-forward process, if the virtual-dom optimization is used, this flag value is true.\n __publicField(this, \"usingVirtualDom\", false);\n __publicField(this, \"virtualDom\", new RRDocument());\n __publicField(this, \"mouse\");\n __publicField(this, \"mouseTail\", null);\n __publicField(this, \"tailPositions\", []);\n __publicField(this, \"emitter\", mitt());\n __publicField(this, \"nextUserInteractionEvent\");\n __publicField(this, \"legacy_missingNodeRetryMap\", {});\n // The replayer uses the cache to speed up replay and scrubbing.\n __publicField(this, \"cache\", createCache());\n __publicField(this, \"imageMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"canvasEventMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"mirror\", createMirror$2());\n // Used to track StyleSheetObjects adopted on multiple document hosts.\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n // Used to track video & audio elements, and keep them in sync with general playback.\n __publicField(this, \"mediaManager\");\n __publicField(this, \"firstFullSnapshot\", null);\n __publicField(this, \"newDocumentQueue\", []);\n __publicField(this, \"mousePos\", null);\n __publicField(this, \"touchActive\", null);\n __publicField(this, \"lastMouseDownEvent\", null);\n // Keep the rootNode of the last hovered element. So when hovering a new element, we can remove the last hovered element's :hover style.\n __publicField(this, \"lastHoveredRootNode\");\n // In the fast-forward mode, only the last selection data needs to be applied.\n __publicField(this, \"lastSelectionData\", null);\n // In the fast-forward mode using VirtualDom optimization, all stylesheetRule, and styleDeclaration events on constructed StyleSheets will be delayed to get applied until the flush stage.\n __publicField(this, \"constructedStyleMutations\", []);\n // Similar to the reason for constructedStyleMutations.\n __publicField(this, \"adoptedStyleSheets\", []);\n __publicField(this, \"handleResize\", (dimension) => {\n this.iframe.style.display = \"inherit\";\n for (const el of [this.mouseTail, this.iframe]) {\n if (!el) {\n continue;\n }\n el.setAttribute(\"width\", String(dimension.width));\n el.setAttribute(\"height\", String(dimension.height));\n }\n });\n __publicField(this, \"applyEventsSynchronously\", (events) => {\n for (const event of events) {\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n case EventType.Custom:\n continue;\n case EventType.FullSnapshot:\n case EventType.Meta:\n case EventType.Plugin:\n case EventType.IncrementalSnapshot:\n break;\n }\n const castFn = this.getCastFn(event, true);\n castFn();\n }\n });\n __publicField(this, \"getCastFn\", (event, isSync = false) => {\n let castFn;\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n break;\n case EventType.Custom:\n castFn = () => {\n this.emitter.emit(ReplayerEvents.CustomEvent, event);\n };\n break;\n case EventType.Meta:\n castFn = () => this.emitter.emit(ReplayerEvents.Resize, {\n width: event.data.width,\n height: event.data.height\n });\n break;\n case EventType.FullSnapshot:\n castFn = () => {\n var _a2;\n if (this.firstFullSnapshot) {\n if (this.firstFullSnapshot === event) {\n this.firstFullSnapshot = true;\n return;\n }\n } else {\n this.firstFullSnapshot = true;\n }\n this.mediaManager.reset();\n this.styleMirror.reset();\n this.rebuildFullSnapshot(event, isSync);\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(event.data.initialOffset);\n };\n break;\n case EventType.IncrementalSnapshot:\n castFn = () => {\n this.applyIncremental(event, isSync);\n if (isSync) {\n return;\n }\n if (event === this.nextUserInteractionEvent) {\n this.nextUserInteractionEvent = null;\n this.backToNormal();\n }\n if (this.config.skipInactive && !this.nextUserInteractionEvent) {\n for (const _event of this.service.state.context.events) {\n if (_event.timestamp <= event.timestamp) {\n continue;\n }\n if (this.isUserInteraction(_event)) {\n if (\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _event.delay - event.delay > this.config.inactivePeriodThreshold * this.speedService.state.context.timer.speed\n ) {\n this.nextUserInteractionEvent = _event;\n }\n break;\n }\n }\n if (this.nextUserInteractionEvent) {\n const skipTime = (\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.nextUserInteractionEvent.delay - event.delay\n );\n const payload = {\n speed: Math.min(\n Math.round(skipTime / SKIP_TIME_INTERVAL),\n this.config.maxSpeed\n )\n };\n this.speedService.send({ type: \"FAST_FORWARD\", payload });\n this.emitter.emit(ReplayerEvents.SkipStart, payload);\n }\n }\n };\n break;\n }\n const wrappedCastFn = () => {\n if (castFn) {\n castFn();\n }\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.handler) plugin3.handler(event, isSync, { replayer: this });\n }\n this.service.send({ type: \"CAST_EVENT\", payload: { event } });\n const last_index = this.service.state.context.events.length - 1;\n if (!this.config.liveMode && event === this.service.state.context.events[last_index]) {\n const finish = () => {\n if (last_index < this.service.state.context.events.length - 1) {\n return;\n }\n this.backToNormal();\n this.service.send(\"END\");\n this.emitter.emit(ReplayerEvents.Finish);\n };\n let finish_buffer = 50;\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions.length) {\n finish_buffer += Math.max(0, -event.data.positions[0].timeOffset);\n }\n setTimeout(finish, finish_buffer);\n }\n this.emitter.emit(ReplayerEvents.EventCast, event);\n };\n return wrappedCastFn;\n });\n if (!(config == null ? void 0 : config.liveMode) && events.length < 2) {\n throw new Error(\"Replayer need at least 2 events.\");\n }\n const defaultConfig = {\n speed: 1,\n maxSpeed: 360,\n root: document.body,\n loadTimeout: 0,\n skipInactive: false,\n inactivePeriodThreshold: 10 * 1e3,\n showWarning: true,\n showDebug: false,\n blockClass: \"rr-block\",\n liveMode: false,\n insertStyleRules: [],\n triggerFocus: true,\n UNSAFE_replayCanvas: false,\n pauseAnimation: true,\n mouseTail: defaultMouseTailConfig,\n useVirtualDom: true,\n // Virtual-dom optimization is enabled by default.\n logger: console\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.handleResize = this.handleResize.bind(this);\n this.getCastFn = this.getCastFn.bind(this);\n this.applyEventsSynchronously = this.applyEventsSynchronously.bind(this);\n this.emitter.on(ReplayerEvents.Resize, this.handleResize);\n this.setupDom();\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.getMirror) plugin3.getMirror({ nodeMirror: this.mirror });\n }\n this.emitter.on(ReplayerEvents.Flush, () => {\n if (this.usingVirtualDom) {\n const replayerHandler = {\n mirror: this.mirror,\n applyCanvas: (canvasEvent, canvasMutationData, target) => {\n void canvasMutation({\n event: canvasEvent,\n mutation: canvasMutationData,\n target,\n imageMap: this.imageMap,\n canvasEventMap: this.canvasEventMap,\n errorHandler: this.warnCanvasMutationFailed.bind(this)\n });\n },\n applyInput: this.applyInput.bind(this),\n applyScroll: this.applyScroll.bind(this),\n applyStyleSheetMutation: (data, styleSheet) => {\n if (data.source === IncrementalSource.StyleSheetRule)\n this.applyStyleSheetRule(data, styleSheet);\n else if (data.source === IncrementalSource.StyleDeclaration)\n this.applyStyleDeclaration(data, styleSheet);\n },\n afterAppend: (node2, id) => {\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.onBuild) plugin3.onBuild(node2, { id, replayer: this });\n }\n }\n };\n if (this.iframe.contentDocument)\n try {\n diff(\n this.iframe.contentDocument,\n this.virtualDom,\n replayerHandler,\n this.virtualDom.mirror\n );\n } catch (e2) {\n console.warn(e2);\n }\n this.virtualDom.destroyTree();\n this.usingVirtualDom = false;\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n for (const key in this.legacy_missingNodeRetryMap) {\n try {\n const value = this.legacy_missingNodeRetryMap[key];\n const realNode = createOrGetNode(\n value.node,\n this.mirror,\n this.virtualDom.mirror\n );\n diff(\n realNode,\n value.node,\n replayerHandler,\n this.virtualDom.mirror\n );\n value.node = realNode;\n } catch (error) {\n this.warn(error);\n }\n }\n }\n this.constructedStyleMutations.forEach((data) => {\n this.applyStyleSheetMutation(data);\n });\n this.constructedStyleMutations = [];\n this.adoptedStyleSheets.forEach((data) => {\n this.applyAdoptedStyleSheet(data);\n });\n this.adoptedStyleSheets = [];\n }\n if (this.mousePos) {\n this.moveAndHover(\n this.mousePos.x,\n this.mousePos.y,\n this.mousePos.id,\n true,\n this.mousePos.debugData\n );\n this.mousePos = null;\n }\n if (this.touchActive === true) {\n this.mouse.classList.add(\"touch-active\");\n } else if (this.touchActive === false) {\n this.mouse.classList.remove(\"touch-active\");\n }\n this.touchActive = null;\n if (this.lastMouseDownEvent) {\n const [target, event] = this.lastMouseDownEvent;\n target.dispatchEvent(event);\n }\n this.lastMouseDownEvent = null;\n if (this.lastSelectionData) {\n this.applySelection(this.lastSelectionData);\n this.lastSelectionData = null;\n }\n });\n this.emitter.on(ReplayerEvents.PlayBack, () => {\n this.firstFullSnapshot = null;\n this.mirror.reset();\n this.styleMirror.reset();\n this.mediaManager.reset();\n });\n const timer = new Timer([], {\n speed: this.config.speed\n });\n this.service = createPlayerService(\n {\n events: events.map((e2) => {\n if (config && config.unpackFn) {\n return config.unpackFn(e2);\n }\n return e2;\n }).sort((a1, a2) => a1.timestamp - a2.timestamp),\n timer,\n timeOffset: 0,\n baselineTime: 0,\n lastPlayedEvent: null\n },\n {\n getCastFn: this.getCastFn,\n applyEventsSynchronously: this.applyEventsSynchronously,\n emitter: this.emitter\n }\n );\n this.service.start();\n this.service.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n player: state\n });\n });\n this.speedService = createSpeedService({\n normalSpeed: -1,\n timer\n });\n this.speedService.start();\n this.speedService.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n speed: state\n });\n });\n this.mediaManager = new MediaManager({\n warn: this.warn.bind(this),\n service: this.service,\n speedService: this.speedService,\n emitter: this.emitter,\n getCurrentTime: this.getCurrentTime.bind(this)\n });\n const firstMeta = this.service.state.context.events.find(\n (e2) => e2.type === EventType.Meta\n );\n const firstFullsnapshot = this.service.state.context.events.find(\n (e2) => e2.type === EventType.FullSnapshot\n );\n if (firstMeta) {\n const { width, height } = firstMeta.data;\n setTimeout(() => {\n this.emitter.emit(ReplayerEvents.Resize, {\n width,\n height\n });\n }, 0);\n }\n if (firstFullsnapshot) {\n setTimeout(() => {\n var _a2;\n if (this.firstFullSnapshot) {\n return;\n }\n this.firstFullSnapshot = firstFullsnapshot;\n this.rebuildFullSnapshot(\n firstFullsnapshot\n );\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(\n firstFullsnapshot.data.initialOffset\n );\n }, 1);\n }\n if (this.service.state.context.events.find(indicatesTouchDevice)) {\n this.mouse.classList.add(\"touch-device\");\n }\n }\n get timer() {\n return this.service.state.context.timer;\n }\n on(event, handler) {\n this.emitter.on(event, handler);\n return this;\n }\n off(event, handler) {\n this.emitter.off(event, handler);\n return this;\n }\n setConfig(config) {\n Object.keys(config).forEach((key) => {\n config[key];\n this.config[key] = config[key];\n });\n if (!this.config.skipInactive) {\n this.backToNormal();\n }\n if (typeof config.speed !== \"undefined\") {\n this.speedService.send({\n type: \"SET_SPEED\",\n payload: {\n speed: config.speed\n }\n });\n }\n if (typeof config.mouseTail !== \"undefined\") {\n if (config.mouseTail === false) {\n if (this.mouseTail) {\n this.mouseTail.style.display = \"none\";\n }\n } else {\n if (!this.mouseTail) {\n this.mouseTail = document.createElement(\"canvas\");\n this.mouseTail.width = Number.parseFloat(this.iframe.width);\n this.mouseTail.height = Number.parseFloat(this.iframe.height);\n this.mouseTail.classList.add(\"replayer-mouse-tail\");\n this.wrapper.insertBefore(this.mouseTail, this.iframe);\n }\n this.mouseTail.style.display = \"inherit\";\n }\n }\n }\n getMetaData() {\n const firstEvent = this.service.state.context.events[0];\n const lastEvent = this.service.state.context.events[this.service.state.context.events.length - 1];\n return {\n startTime: firstEvent.timestamp,\n endTime: lastEvent.timestamp,\n totalTime: lastEvent.timestamp - firstEvent.timestamp\n };\n }\n /**\n * Get the actual time offset the player is at now compared to the first event.\n */\n getCurrentTime() {\n return this.timer.timeOffset + this.getTimeOffset();\n }\n /**\n * Get the time offset the player is at now compared to the first event, but without regard for the timer.\n */\n getTimeOffset() {\n const { baselineTime, events } = this.service.state.context;\n return baselineTime - events[0].timestamp;\n }\n getMirror() {\n return this.mirror;\n }\n /**\n * This API was designed to be used as play at any time offset.\n * Since we minimized the data collected from recorder, we do not\n * have the ability of undo an event.\n * So the implementation of play at any time offset will always iterate\n * all of the events, cast event before the offset synchronously\n * and cast event after the offset asynchronously with timer.\n * @param timeOffset - number\n */\n play(timeOffset = 0) {\n var _a2, _b;\n if (this.service.state.matches(\"paused\")) {\n this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n } else {\n this.service.send({ type: \"PAUSE\" });\n this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n }\n (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.classList.remove(\"rrweb-paused\");\n this.emitter.emit(ReplayerEvents.Start);\n }\n pause(timeOffset) {\n var _a2, _b;\n if (timeOffset === void 0 && this.service.state.matches(\"playing\")) {\n this.service.send({ type: \"PAUSE\" });\n }\n if (typeof timeOffset === \"number\") {\n this.play(timeOffset);\n this.service.send({ type: \"PAUSE\" });\n }\n (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.classList.add(\"rrweb-paused\");\n this.emitter.emit(ReplayerEvents.Pause);\n }\n resume(timeOffset = 0) {\n this.warn(\n `The 'resume' was deprecated in 1.0. Please use 'play' method which has the same interface.`\n );\n this.play(timeOffset);\n this.emitter.emit(ReplayerEvents.Resume);\n }\n /**\n * Totally destroy this replayer and please be careful that this operation is irreversible.\n * Memory occupation can be released by removing all references to this replayer.\n */\n destroy() {\n this.pause();\n this.mirror.reset();\n this.styleMirror.reset();\n this.mediaManager.reset();\n this.config.root.removeChild(this.wrapper);\n this.emitter.emit(ReplayerEvents.Destroy);\n }\n startLive(baselineTime) {\n this.service.send({ type: \"TO_LIVE\", payload: { baselineTime } });\n }\n addEvent(rawEvent) {\n const event = this.config.unpackFn ? this.config.unpackFn(rawEvent) : rawEvent;\n if (indicatesTouchDevice(event)) {\n this.mouse.classList.add(\"touch-device\");\n }\n void Promise.resolve().then(\n () => this.service.send({ type: \"ADD_EVENT\", payload: { event } })\n );\n }\n enableInteract() {\n this.iframe.setAttribute(\"scrolling\", \"auto\");\n this.iframe.style.pointerEvents = \"auto\";\n }\n disableInteract() {\n this.iframe.setAttribute(\"scrolling\", \"no\");\n this.iframe.style.pointerEvents = \"none\";\n }\n /**\n * Empties the replayer's cache and reclaims memory.\n * The replayer will use this cache to speed up the playback.\n */\n resetCache() {\n this.cache = createCache();\n }\n setupDom() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.classList.add(\"replayer-wrapper\");\n this.config.root.appendChild(this.wrapper);\n this.mouse = document.createElement(\"div\");\n this.mouse.classList.add(\"replayer-mouse\");\n this.wrapper.appendChild(this.mouse);\n if (this.config.mouseTail !== false) {\n this.mouseTail = document.createElement(\"canvas\");\n this.mouseTail.classList.add(\"replayer-mouse-tail\");\n this.mouseTail.style.display = \"inherit\";\n this.wrapper.appendChild(this.mouseTail);\n }\n this.iframe = document.createElement(\"iframe\");\n const attributes = [\"allow-same-origin\"];\n if (this.config.UNSAFE_replayCanvas) {\n attributes.push(\"allow-scripts\");\n }\n this.iframe.style.display = \"none\";\n this.iframe.setAttribute(\"sandbox\", attributes.join(\" \"));\n this.disableInteract();\n this.wrapper.appendChild(this.iframe);\n if (this.iframe.contentWindow && this.iframe.contentDocument) {\n polyfill(\n this.iframe.contentWindow,\n this.iframe.contentDocument\n );\n polyfill$1(this.iframe.contentWindow);\n }\n }\n rebuildFullSnapshot(event, isSync = false) {\n if (!this.iframe.contentDocument) {\n return this.warn(\"Looks like your replayer has been destroyed.\");\n }\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n this.warn(\n \"Found unresolved missing node map\",\n this.legacy_missingNodeRetryMap\n );\n }\n this.legacy_missingNodeRetryMap = {};\n const collectedIframes = [];\n const collectedDialogs = /* @__PURE__ */ new Set();\n const afterAppend = (builtNode, id) => {\n if (builtNode.nodeName === \"DIALOG\")\n collectedDialogs.add(builtNode);\n this.collectIframeAndAttachDocument(collectedIframes, builtNode);\n if (this.mediaManager.isSupportedMediaElement(builtNode)) {\n const { events } = this.service.state.context;\n this.mediaManager.addMediaElements(\n builtNode,\n event.timestamp - events[0].timestamp,\n this.mirror\n );\n }\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.onBuild)\n plugin3.onBuild(builtNode, {\n id,\n replayer: this\n });\n }\n };\n if (this.usingVirtualDom) {\n this.virtualDom.destroyTree();\n this.usingVirtualDom = false;\n }\n this.mirror.reset();\n rebuild(event.data.node, {\n doc: this.iframe.contentDocument,\n afterAppend,\n cache: this.cache,\n mirror: this.mirror\n });\n afterAppend(this.iframe.contentDocument, event.data.node.id);\n for (const { mutationInQueue, builtNode } of collectedIframes) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n const { documentElement, head } = this.iframe.contentDocument;\n this.insertStyleRules(documentElement, head);\n collectedDialogs.forEach((d) => applyDialogToTopLevel(d));\n if (!this.service.state.matches(\"playing\")) {\n this.iframe.contentDocument.getElementsByTagName(\"html\")[0].classList.add(\"rrweb-paused\");\n }\n this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);\n if (!isSync) {\n this.waitForStylesheetLoad();\n }\n if (this.config.UNSAFE_replayCanvas) {\n void this.preloadAllImages();\n }\n }\n insertStyleRules(documentElement, head) {\n var _a2;\n const injectStylesRules = rules(\n this.config.blockClass\n ).concat(this.config.insertStyleRules);\n if (this.config.pauseAnimation) {\n injectStylesRules.push(\n \"html.rrweb-paused *, html.rrweb-paused *:before, html.rrweb-paused *:after { animation-play-state: paused !important; }\"\n );\n }\n if (!injectStylesRules.length) {\n return;\n }\n if (this.usingVirtualDom) {\n const styleEl = this.virtualDom.createElement(\"style\");\n this.virtualDom.mirror.add(\n styleEl,\n getDefaultSN(styleEl, this.virtualDom.unserializedId)\n );\n documentElement.insertBefore(styleEl, head);\n styleEl.rules.push({\n source: IncrementalSource.StyleSheetRule,\n adds: injectStylesRules.map((cssText, index2) => ({\n rule: cssText,\n index: index2\n }))\n });\n } else {\n const styleEl = document.createElement(\"style\");\n documentElement.insertBefore(\n styleEl,\n head\n );\n for (let idx = 0; idx < injectStylesRules.length; idx++) {\n (_a2 = styleEl.sheet) == null ? void 0 : _a2.insertRule(injectStylesRules[idx], idx);\n }\n }\n }\n attachDocumentToIframe(mutation, iframeEl) {\n const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n const collectedIframes = [];\n const collectedDialogs = /* @__PURE__ */ new Set();\n const afterAppend = (builtNode, id) => {\n if (builtNode.nodeName === \"DIALOG\")\n collectedDialogs.add(builtNode);\n this.collectIframeAndAttachDocument(collectedIframes, builtNode);\n const sn = mirror2.getMeta(builtNode);\n if ((sn == null ? void 0 : sn.type) === NodeType.Element && (sn == null ? void 0 : sn.tagName.toUpperCase()) === \"HTML\") {\n const { documentElement, head } = iframeEl.contentDocument;\n this.insertStyleRules(\n documentElement,\n head\n );\n }\n if (this.usingVirtualDom) return;\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.onBuild)\n plugin3.onBuild(builtNode, {\n id,\n replayer: this\n });\n }\n };\n buildNodeWithSN(mutation.node, {\n doc: iframeEl.contentDocument,\n mirror: mirror2,\n hackCss: true,\n skipChild: false,\n afterAppend,\n cache: this.cache\n });\n afterAppend(iframeEl.contentDocument, mutation.node.id);\n for (const { mutationInQueue, builtNode } of collectedIframes) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n collectedDialogs.forEach((d) => applyDialogToTopLevel(d));\n }\n collectIframeAndAttachDocument(collected, builtNode) {\n if (isSerializedIframe(builtNode, this.mirror)) {\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === this.mirror.getId(builtNode)\n );\n if (mutationInQueue) {\n collected.push({\n mutationInQueue,\n builtNode\n });\n }\n }\n }\n /**\n * pause when loading style sheet, resume when loaded all timeout exceed\n */\n waitForStylesheetLoad() {\n var _a2;\n const head = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.head;\n if (head) {\n const unloadSheets = /* @__PURE__ */ new Set();\n let timer;\n let beforeLoadState = this.service.state;\n const stateHandler = () => {\n beforeLoadState = this.service.state;\n };\n this.emitter.on(ReplayerEvents.Start, stateHandler);\n this.emitter.on(ReplayerEvents.Pause, stateHandler);\n const unsubscribe = () => {\n this.emitter.off(ReplayerEvents.Start, stateHandler);\n this.emitter.off(ReplayerEvents.Pause, stateHandler);\n };\n head.querySelectorAll('link[rel=\"stylesheet\"]').forEach((css) => {\n if (!css.sheet) {\n unloadSheets.add(css);\n css.addEventListener(\"load\", () => {\n unloadSheets.delete(css);\n if (unloadSheets.size === 0 && timer !== -1) {\n if (beforeLoadState.matches(\"playing\")) {\n this.play(this.getCurrentTime());\n }\n this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\n if (timer) {\n clearTimeout(timer);\n }\n unsubscribe();\n }\n });\n }\n });\n if (unloadSheets.size > 0) {\n this.service.send({ type: \"PAUSE\" });\n this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\n timer = setTimeout(() => {\n if (beforeLoadState.matches(\"playing\")) {\n this.play(this.getCurrentTime());\n }\n timer = -1;\n unsubscribe();\n }, this.config.loadTimeout);\n }\n }\n }\n /**\n * pause when there are some canvas drawImage args need to be loaded\n */\n async preloadAllImages() {\n const promises = [];\n for (const event of this.service.state.context.events) {\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.CanvasMutation) {\n promises.push(\n this.deserializeAndPreloadCanvasEvents(event.data, event)\n );\n const commands = \"commands\" in event.data ? event.data.commands : [event.data];\n commands.forEach((c2) => {\n this.preloadImages(c2, event);\n });\n }\n }\n return Promise.all(promises);\n }\n preloadImages(data, event) {\n if (data.property === \"drawImage\" && typeof data.args[0] === \"string\" && !this.imageMap.has(event)) {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n const imgd = ctx == null ? void 0 : ctx.createImageData(canvas.width, canvas.height);\n ctx == null ? void 0 : ctx.putImageData(imgd, 0, 0);\n }\n }\n async deserializeAndPreloadCanvasEvents(data, event) {\n if (!this.canvasEventMap.has(event)) {\n const status = {\n isUnchanged: true\n };\n if (\"commands\" in data) {\n const commands = await Promise.all(\n data.commands.map(async (c2) => {\n const args = await Promise.all(\n c2.args.map(deserializeArg(this.imageMap, null, status))\n );\n return { ...c2, args };\n })\n );\n if (status.isUnchanged === false)\n this.canvasEventMap.set(event, { ...data, commands });\n } else {\n const args = await Promise.all(\n data.args.map(deserializeArg(this.imageMap, null, status))\n );\n if (status.isUnchanged === false)\n this.canvasEventMap.set(event, { ...data, args });\n }\n }\n }\n applyIncremental(e2, isSync) {\n var _a2, _b, _c;\n const { data: d } = e2;\n switch (d.source) {\n case IncrementalSource.Mutation: {\n try {\n this.applyMutation(d, isSync);\n } catch (error) {\n this.warn(`Exception in mutation ${error.message || error}`, d);\n }\n break;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n if (isSync) {\n const lastPosition = d.positions[d.positions.length - 1];\n this.mousePos = {\n x: lastPosition.x,\n y: lastPosition.y,\n id: lastPosition.id,\n debugData: d\n };\n } else {\n d.positions.forEach((p) => {\n const action = {\n doAction: () => {\n this.moveAndHover(p.x, p.y, p.id, isSync, d);\n },\n delay: p.timeOffset + e2.timestamp - this.service.state.context.baselineTime\n };\n this.timer.addAction(action);\n });\n this.timer.addAction({\n doAction() {\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n delay: e2.delay - ((_a2 = d.positions[0]) == null ? void 0 : _a2.timeOffset)\n });\n }\n break;\n case IncrementalSource.MouseInteraction: {\n if (d.id === -1) {\n break;\n }\n const event = new Event(toLowerCase(MouseInteractions[d.type]));\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n this.emitter.emit(ReplayerEvents.MouseInteraction, {\n type: d.type,\n target\n });\n const { triggerFocus } = this.config;\n switch (d.type) {\n case MouseInteractions.Blur:\n if (\"blur\" in target) {\n target.blur();\n }\n break;\n case MouseInteractions.Focus:\n if (triggerFocus && target.focus) {\n target.focus({\n preventScroll: true\n });\n }\n break;\n case MouseInteractions.Click:\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n if (isSync) {\n if (d.type === MouseInteractions.TouchStart) {\n this.touchActive = true;\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.touchActive = false;\n }\n if (d.type === MouseInteractions.MouseDown) {\n this.lastMouseDownEvent = [target, event];\n } else if (d.type === MouseInteractions.MouseUp) {\n this.lastMouseDownEvent = null;\n }\n this.mousePos = {\n x: d.x || 0,\n y: d.y || 0,\n id: d.id,\n debugData: d\n };\n } else {\n if (d.type === MouseInteractions.TouchStart) {\n this.tailPositions.length = 0;\n }\n this.moveAndHover(d.x || 0, d.y || 0, d.id, isSync, d);\n if (d.type === MouseInteractions.Click) {\n this.mouse.classList.remove(\"active\");\n void this.mouse.offsetWidth;\n this.mouse.classList.add(\"active\");\n } else if (d.type === MouseInteractions.TouchStart) {\n void this.mouse.offsetWidth;\n this.mouse.classList.add(\"touch-active\");\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.mouse.classList.remove(\"touch-active\");\n } else {\n target.dispatchEvent(event);\n }\n }\n break;\n case MouseInteractions.TouchCancel:\n if (isSync) {\n this.touchActive = false;\n } else {\n this.mouse.classList.remove(\"touch-active\");\n }\n break;\n default:\n target.dispatchEvent(event);\n }\n break;\n }\n case IncrementalSource.Scroll: {\n if (d.id === -1) {\n break;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.scrollData = d;\n break;\n }\n this.applyScroll(d, isSync);\n break;\n }\n case IncrementalSource.ViewportResize:\n this.emitter.emit(ReplayerEvents.Resize, {\n width: d.width,\n height: d.height\n });\n break;\n case IncrementalSource.Input: {\n if (d.id === -1) {\n break;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.inputData = d;\n break;\n }\n this.applyInput(d);\n break;\n }\n case IncrementalSource.MediaInteraction: {\n const target = this.usingVirtualDom ? this.virtualDom.mirror.getNode(d.id) : this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n const mediaEl = target;\n const { events } = this.service.state.context;\n this.mediaManager.mediaMutation({\n target: mediaEl,\n timeOffset: e2.timestamp - events[0].timestamp,\n mutation: d\n });\n break;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n if (this.usingVirtualDom) {\n if (d.styleId) this.constructedStyleMutations.push(d);\n else if (d.id)\n (_b = this.virtualDom.mirror.getNode(d.id)) == null ? void 0 : _b.rules.push(d);\n } else this.applyStyleSheetMutation(d);\n break;\n }\n case IncrementalSource.CanvasMutation: {\n if (!this.config.UNSAFE_replayCanvas) {\n return;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(\n d.id\n );\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.canvasMutations.push({\n event: e2,\n mutation: d\n });\n } else {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n void canvasMutation({\n event: e2,\n mutation: d,\n target,\n imageMap: this.imageMap,\n canvasEventMap: this.canvasEventMap,\n errorHandler: this.warnCanvasMutationFailed.bind(this)\n });\n }\n break;\n }\n case IncrementalSource.Font: {\n try {\n const fontFace = new FontFace(\n d.family,\n d.buffer ? new Uint8Array(JSON.parse(d.fontSource)) : d.fontSource,\n d.descriptors\n );\n (_c = this.iframe.contentDocument) == null ? void 0 : _c.fonts.add(fontFace);\n } catch (error) {\n this.warn(error);\n }\n break;\n }\n case IncrementalSource.Selection: {\n if (isSync) {\n this.lastSelectionData = d;\n break;\n }\n this.applySelection(d);\n break;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n if (this.usingVirtualDom) this.adoptedStyleSheets.push(d);\n else this.applyAdoptedStyleSheet(d);\n break;\n }\n }\n }\n /**\n * Apply the mutation to the virtual dom or the real dom.\n * @param d - The mutation data.\n * @param isSync - Whether the mutation should be applied synchronously (while fast-forwarding).\n */\n applyMutation(d, isSync) {\n if (this.config.useVirtualDom && !this.usingVirtualDom && isSync) {\n this.usingVirtualDom = true;\n buildFromDom(this.iframe.contentDocument, this.mirror, this.virtualDom);\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n for (const key in this.legacy_missingNodeRetryMap) {\n try {\n const value = this.legacy_missingNodeRetryMap[key];\n const virtualNode = buildFromNode(\n value.node,\n this.virtualDom,\n this.mirror\n );\n if (virtualNode) value.node = virtualNode;\n } catch (error) {\n this.warn(error);\n }\n }\n }\n }\n const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n d.removes = d.removes.filter((mutation) => {\n if (!mirror2.getNode(mutation.id)) {\n this.warnNodeNotFound(d, mutation.id);\n return false;\n }\n return true;\n });\n d.removes.forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n return;\n }\n let parent = mirror2.getNode(\n mutation.parentId\n );\n if (!parent) {\n return this.warnNodeNotFound(d, mutation.parentId);\n }\n if (mutation.isShadow && hasShadowRoot(parent)) {\n parent = parent.shadowRoot;\n }\n mirror2.removeNodeFromMap(target);\n if (parent)\n try {\n parent.removeChild(target);\n if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && ((_a2 = parent.rules) == null ? void 0 : _a2.length) > 0)\n parent.rules = [];\n } catch (error) {\n if (error instanceof DOMException) {\n this.warn(\n \"parent could not remove child in mutation\",\n parent,\n target,\n d\n );\n } else {\n throw error;\n }\n }\n });\n const legacy_missingNodeMap = {\n ...this.legacy_missingNodeRetryMap\n };\n const queue = [];\n const nextNotInDOM = (mutation) => {\n let next = null;\n if (mutation.nextId) {\n next = mirror2.getNode(mutation.nextId);\n }\n if (mutation.nextId !== null && mutation.nextId !== void 0 && mutation.nextId !== -1 && !next) {\n return true;\n }\n return false;\n };\n const appendNode = (mutation) => {\n var _a2, _b;\n if (!this.iframe.contentDocument) {\n return this.warn(\"Looks like your replayer has been destroyed.\");\n }\n let parent = mirror2.getNode(\n mutation.parentId\n );\n if (!parent) {\n if (mutation.node.type === NodeType.Document) {\n return this.newDocumentQueue.push(mutation);\n }\n return queue.push(mutation);\n }\n if (mutation.node.isShadow) {\n if (!hasShadowRoot(parent)) {\n parent.attachShadow({ mode: \"open\" });\n parent = parent.shadowRoot;\n } else parent = parent.shadowRoot;\n }\n let previous = null;\n let next = null;\n if (mutation.previousId) {\n previous = mirror2.getNode(mutation.previousId);\n }\n if (mutation.nextId) {\n next = mirror2.getNode(mutation.nextId);\n }\n if (nextNotInDOM(mutation)) {\n return queue.push(mutation);\n }\n if (mutation.node.rootId && !mirror2.getNode(mutation.node.rootId)) {\n return;\n }\n const targetDoc = mutation.node.rootId ? mirror2.getNode(mutation.node.rootId) : this.usingVirtualDom ? this.virtualDom : this.iframe.contentDocument;\n if (isSerializedIframe(parent, mirror2)) {\n this.attachDocumentToIframe(\n mutation,\n parent\n );\n return;\n }\n const afterAppend = (node2, id) => {\n if (this.usingVirtualDom) return;\n applyDialogToTopLevel(node2);\n for (const plugin3 of this.config.plugins || []) {\n if (plugin3.onBuild) plugin3.onBuild(node2, { id, replayer: this });\n }\n };\n const target = buildNodeWithSN(mutation.node, {\n doc: targetDoc,\n // can be Document or RRDocument\n mirror: mirror2,\n // can be this.mirror or virtualDom.mirror\n skipChild: true,\n hackCss: true,\n cache: this.cache,\n /**\n * caveat: `afterAppend` only gets called on child nodes of target\n * we have to call it again below when this target was added to the DOM\n */\n afterAppend\n });\n if (mutation.previousId === -1 || mutation.nextId === -1) {\n legacy_missingNodeMap[mutation.node.id] = {\n node: target,\n mutation\n };\n return;\n }\n const parentSn = mirror2.getMeta(parent);\n if (parentSn && parentSn.type === NodeType.Element && mutation.node.type === NodeType.Text) {\n const prospectiveSiblings = Array.isArray(parent.childNodes) ? parent.childNodes : Array.from(parent.childNodes);\n if (parentSn.tagName === \"textarea\") {\n for (const c2 of prospectiveSiblings) {\n if (c2.nodeType === parent.TEXT_NODE) {\n parent.removeChild(c2);\n }\n }\n } else if (parentSn.tagName === \"style\" && prospectiveSiblings.length === 1) {\n for (const cssText of prospectiveSiblings) {\n if (cssText.nodeType === parent.TEXT_NODE && !mirror2.hasNode(cssText)) {\n target.textContent = cssText.textContent;\n parent.removeChild(cssText);\n }\n }\n }\n } else if ((parentSn == null ? void 0 : parentSn.type) === NodeType.Document) {\n const parentDoc = parent;\n if (mutation.node.type === NodeType.DocumentType && ((_a2 = parentDoc.childNodes[0]) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_TYPE_NODE)\n parentDoc.removeChild(parentDoc.childNodes[0]);\n if (target.nodeName === \"HTML\" && parentDoc.documentElement)\n parentDoc.removeChild(\n parentDoc.documentElement\n );\n }\n if (previous && previous.nextSibling && previous.nextSibling.parentNode) {\n parent.insertBefore(\n target,\n previous.nextSibling\n );\n } else if (next && next.parentNode) {\n parent.contains(next) ? parent.insertBefore(target, next) : parent.insertBefore(target, null);\n } else {\n parent.appendChild(target);\n }\n afterAppend(target, mutation.node.id);\n if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && ((_b = parent.rules) == null ? void 0 : _b.length) > 0)\n parent.rules = [];\n if (isSerializedIframe(target, this.mirror)) {\n const targetId = this.mirror.getId(target);\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === targetId\n );\n if (mutationInQueue) {\n this.attachDocumentToIframe(\n mutationInQueue,\n target\n );\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n }\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(\n legacy_missingNodeMap,\n parent,\n target,\n mutation\n );\n }\n };\n d.adds.forEach((mutation) => {\n appendNode(mutation);\n });\n const startTime = Date.now();\n while (queue.length) {\n const resolveTrees = queueToResolveTrees(queue);\n queue.length = 0;\n if (Date.now() - startTime > 500) {\n this.warn(\n \"Timeout in the loop, please check the resolve tree data:\",\n resolveTrees\n );\n break;\n }\n for (const tree of resolveTrees) {\n const parent = mirror2.getNode(tree.value.parentId);\n if (!parent) {\n this.debug(\n \"Drop resolve tree since there is no parent for the root node.\",\n tree\n );\n } else {\n iterateResolveTree(tree, (mutation) => {\n appendNode(mutation);\n });\n }\n }\n }\n if (Object.keys(legacy_missingNodeMap).length) {\n Object.assign(this.legacy_missingNodeRetryMap, legacy_missingNodeMap);\n }\n uniqueTextMutations(d.texts).forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r2) => r2.id === mutation.id)) {\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n const parentEl = target.parentElement;\n if (mutation.value && parentEl && parentEl.tagName === \"STYLE\") {\n target.textContent = adaptCssForReplay(mutation.value, this.cache);\n } else {\n target.textContent = mutation.value;\n }\n if (this.usingVirtualDom) {\n const parent = target.parentNode;\n if (((_a2 = parent == null ? void 0 : parent.rules) == null ? void 0 : _a2.length) > 0) parent.rules = [];\n }\n });\n d.attributes.forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r2) => r2.id === mutation.id)) {\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n for (const attributeName in mutation.attributes) {\n if (typeof attributeName === \"string\") {\n const value = mutation.attributes[attributeName];\n if (value === null) {\n target.removeAttribute(attributeName);\n if (attributeName === \"open\")\n removeDialogFromTopLevel(target, mutation);\n } else if (typeof value === \"string\") {\n try {\n if (attributeName === \"_cssText\" && (target.nodeName === \"LINK\" || target.nodeName === \"STYLE\")) {\n try {\n const newSn = mirror2.getMeta(\n target\n );\n Object.assign(\n newSn.attributes,\n mutation.attributes\n );\n const newNode = buildNodeWithSN(newSn, {\n doc: target.ownerDocument,\n // can be Document or RRDocument\n mirror: mirror2,\n skipChild: true,\n hackCss: true,\n cache: this.cache\n });\n const siblingNode = target.nextSibling;\n const parentNode2 = target.parentNode;\n if (newNode && parentNode2) {\n parentNode2.removeChild(target);\n parentNode2.insertBefore(\n newNode,\n siblingNode\n );\n mirror2.replace(mutation.id, newNode);\n break;\n }\n } catch (e2) {\n }\n }\n if (attributeName === \"value\" && target.nodeName === \"TEXTAREA\") {\n const textarea = target;\n textarea.childNodes.forEach(\n (c2) => textarea.removeChild(c2)\n );\n const tn = (_a2 = target.ownerDocument) == null ? void 0 : _a2.createTextNode(value);\n if (tn) {\n textarea.appendChild(tn);\n }\n } else {\n target.setAttribute(\n attributeName,\n value\n );\n }\n if (attributeName === \"rr_open_mode\" && target.nodeName === \"DIALOG\") {\n applyDialogToTopLevel(target, mutation);\n }\n } catch (error) {\n this.warn(\n \"An error occurred may due to the checkout feature.\",\n error\n );\n }\n } else if (attributeName === \"style\") {\n const styleValues = value;\n const targetEl = target;\n for (const s2 in styleValues) {\n if (styleValues[s2] === false) {\n targetEl.style.removeProperty(s2);\n } else if (styleValues[s2] instanceof Array) {\n const svp = styleValues[s2];\n targetEl.style.setProperty(s2, svp[0], svp[1]);\n } else {\n const svs = styleValues[s2];\n targetEl.style.setProperty(s2, svs);\n }\n }\n }\n }\n }\n });\n }\n /**\n * Apply the scroll data on real elements.\n * If the replayer is in sync mode, smooth scroll behavior should be disabled.\n * @param d - the scroll data\n * @param isSync - whether the replayer is in sync mode(fast-forward)\n */\n applyScroll(d, isSync) {\n var _a2, _b;\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n const sn = this.mirror.getMeta(target);\n if (target === this.iframe.contentDocument) {\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } else if ((sn == null ? void 0 : sn.type) === NodeType.Document) {\n (_b = target.defaultView) == null ? void 0 : _b.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } else {\n try {\n target.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } catch (error) {\n }\n }\n }\n applyInput(d) {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n try {\n target.checked = d.isChecked;\n target.value = d.text;\n } catch (error) {\n }\n }\n applySelection(d) {\n try {\n const selectionSet = /* @__PURE__ */ new Set();\n const ranges = d.ranges.map(({ start, startOffset, end, endOffset }) => {\n const startContainer = this.mirror.getNode(start);\n const endContainer = this.mirror.getNode(end);\n if (!startContainer || !endContainer) return;\n const result2 = new Range();\n result2.setStart(startContainer, startOffset);\n result2.setEnd(endContainer, endOffset);\n const doc = startContainer.ownerDocument;\n const selection = doc == null ? void 0 : doc.getSelection();\n selection && selectionSet.add(selection);\n return {\n range: result2,\n selection\n };\n });\n selectionSet.forEach((s2) => s2.removeAllRanges());\n ranges.forEach((r2) => {\n var _a2;\n return r2 && ((_a2 = r2.selection) == null ? void 0 : _a2.addRange(r2.range));\n });\n } catch (error) {\n }\n }\n applyStyleSheetMutation(data) {\n var _a2;\n let styleSheet = null;\n if (data.styleId) styleSheet = this.styleMirror.getStyle(data.styleId);\n else if (data.id)\n styleSheet = ((_a2 = this.mirror.getNode(data.id)) == null ? void 0 : _a2.sheet) || null;\n if (!styleSheet) return;\n if (data.source === IncrementalSource.StyleSheetRule)\n this.applyStyleSheetRule(data, styleSheet);\n else if (data.source === IncrementalSource.StyleDeclaration)\n this.applyStyleDeclaration(data, styleSheet);\n }\n applyStyleSheetRule(data, styleSheet) {\n var _a2, _b, _c, _d;\n (_a2 = data.adds) == null ? void 0 : _a2.forEach(({ rule: rule2, index: nestedIndex }) => {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index: index2 } = getPositionsAndIndex(nestedIndex);\n const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n nestedRule.insertRule(rule2, index2);\n } else {\n const index2 = nestedIndex === void 0 ? void 0 : Math.min(nestedIndex, styleSheet.cssRules.length);\n styleSheet == null ? void 0 : styleSheet.insertRule(rule2, index2);\n }\n } catch (e2) {\n }\n });\n (_b = data.removes) == null ? void 0 : _b.forEach(({ index: nestedIndex }) => {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index: index2 } = getPositionsAndIndex(nestedIndex);\n const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n nestedRule.deleteRule(index2 || 0);\n } else {\n styleSheet == null ? void 0 : styleSheet.deleteRule(nestedIndex);\n }\n } catch (e2) {\n }\n });\n if (data.replace)\n try {\n void ((_c = styleSheet.replace) == null ? void 0 : _c.call(styleSheet, data.replace));\n } catch (e2) {\n }\n if (data.replaceSync)\n try {\n (_d = styleSheet.replaceSync) == null ? void 0 : _d.call(styleSheet, data.replaceSync);\n } catch (e2) {\n }\n }\n applyStyleDeclaration(data, styleSheet) {\n if (data.set) {\n const rule2 = getNestedRule(\n styleSheet.rules,\n data.index\n );\n rule2.style.setProperty(\n data.set.property,\n data.set.value,\n data.set.priority\n );\n }\n if (data.remove) {\n const rule2 = getNestedRule(\n styleSheet.rules,\n data.index\n );\n rule2.style.removeProperty(data.remove.property);\n }\n }\n applyAdoptedStyleSheet(data) {\n var _a2;\n const targetHost = this.mirror.getNode(data.id);\n if (!targetHost) return;\n (_a2 = data.styles) == null ? void 0 : _a2.forEach((style) => {\n var _a3;\n let newStyleSheet = null;\n let hostWindow = null;\n if (hasShadowRoot(targetHost))\n hostWindow = ((_a3 = targetHost.ownerDocument) == null ? void 0 : _a3.defaultView) || null;\n else if (targetHost.nodeName === \"#document\")\n hostWindow = targetHost.defaultView;\n if (!hostWindow) return;\n try {\n newStyleSheet = new hostWindow.CSSStyleSheet();\n this.styleMirror.add(newStyleSheet, style.styleId);\n this.applyStyleSheetRule(\n {\n source: IncrementalSource.StyleSheetRule,\n adds: style.rules\n },\n newStyleSheet\n );\n } catch (e2) {\n }\n });\n const MAX_RETRY_TIME = 10;\n let count = 0;\n const adoptStyleSheets = (targetHost2, styleIds) => {\n const stylesToAdopt = styleIds.map((styleId) => this.styleMirror.getStyle(styleId)).filter((style) => style !== null);\n if (hasShadowRoot(targetHost2))\n targetHost2.shadowRoot.adoptedStyleSheets = stylesToAdopt;\n else if (targetHost2.nodeName === \"#document\")\n targetHost2.adoptedStyleSheets = stylesToAdopt;\n if (stylesToAdopt.length !== styleIds.length && count < MAX_RETRY_TIME) {\n setTimeout(\n () => adoptStyleSheets(targetHost2, styleIds),\n 0 + 100 * count\n );\n count++;\n }\n };\n adoptStyleSheets(targetHost, data.styleIds);\n }\n legacy_resolveMissingNode(map, parent, target, targetMutation) {\n const { previousId, nextId } = targetMutation;\n const previousInMap = previousId && map[previousId];\n const nextInMap = nextId && map[nextId];\n if (previousInMap) {\n const { node: node2, mutation } = previousInMap;\n parent.insertBefore(node2, target);\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node2, mutation);\n }\n }\n if (nextInMap) {\n const { node: node2, mutation } = nextInMap;\n parent.insertBefore(\n node2,\n target.nextSibling\n );\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node2, mutation);\n }\n }\n }\n moveAndHover(x2, y, id, isSync, debugData) {\n const target = this.mirror.getNode(id);\n if (!target) {\n return this.debugNodeNotFound(debugData, id);\n }\n const base = getBaseDimension(target, this.iframe);\n const _x = x2 * base.absoluteScale + base.x;\n const _y = y * base.absoluteScale + base.y;\n this.mouse.style.left = `${_x}px`;\n this.mouse.style.top = `${_y}px`;\n if (!isSync) {\n this.drawMouseTail({ x: _x, y: _y });\n }\n this.hoverElements(target);\n }\n drawMouseTail(position) {\n if (!this.mouseTail) {\n return;\n }\n const { lineCap, lineWidth, strokeStyle, duration } = this.config.mouseTail === true ? defaultMouseTailConfig : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail);\n const draw = () => {\n if (!this.mouseTail) {\n return;\n }\n const ctx = this.mouseTail.getContext(\"2d\");\n if (!ctx || !this.tailPositions.length) {\n return;\n }\n ctx.clearRect(0, 0, this.mouseTail.width, this.mouseTail.height);\n ctx.beginPath();\n ctx.lineWidth = lineWidth;\n ctx.lineCap = lineCap;\n ctx.strokeStyle = strokeStyle;\n ctx.moveTo(this.tailPositions[0].x, this.tailPositions[0].y);\n this.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\n ctx.stroke();\n };\n this.tailPositions.push(position);\n draw();\n setTimeout(() => {\n this.tailPositions = this.tailPositions.filter((p) => p !== position);\n draw();\n }, duration / this.speedService.state.context.timer.speed);\n }\n hoverElements(el) {\n var _a2;\n (_a2 = this.lastHoveredRootNode || this.iframe.contentDocument) == null ? void 0 : _a2.querySelectorAll(\".\\\\:hover\").forEach((hoveredEl) => {\n hoveredEl.classList.remove(\":hover\");\n });\n this.lastHoveredRootNode = el.getRootNode();\n let currentEl = el;\n while (currentEl) {\n if (currentEl.classList) {\n currentEl.classList.add(\":hover\");\n }\n currentEl = currentEl.parentElement;\n }\n }\n isUserInteraction(event) {\n if (event.type !== EventType.IncrementalSnapshot) {\n return false;\n }\n return event.data.source > IncrementalSource.Mutation && event.data.source <= IncrementalSource.Input;\n }\n backToNormal() {\n this.nextUserInteractionEvent = null;\n if (this.speedService.state.matches(\"normal\")) {\n return;\n }\n this.speedService.send({ type: \"BACK_TO_NORMAL\" });\n this.emitter.emit(ReplayerEvents.SkipEnd, {\n speed: this.speedService.state.context.normalSpeed\n });\n }\n warnNodeNotFound(d, id) {\n this.warn(`Node with id '${id}' not found. `, d);\n }\n warnCanvasMutationFailed(d, error) {\n this.warn(`Has error on canvas update`, error, \"canvas mutation:\", d);\n }\n debugNodeNotFound(d, id) {\n this.debug(`Node with id '${id}' not found. `, d);\n }\n warn(...args) {\n if (!this.config.showWarning) {\n return;\n }\n this.config.logger.warn(REPLAY_CONSOLE_PREFIX, ...args);\n }\n debug(...args) {\n if (!this.config.showDebug) {\n return;\n }\n this.config.logger.log(REPLAY_CONSOLE_PREFIX, ...args);\n }\n}\nconst { addCustomEvent } = record;\nconst { freezePage } = record;\nconst { takeFullSnapshot } = record;\nexport {\n EventType,\n IncrementalSource,\n MouseInteractions,\n Replayer,\n ReplayerEvents,\n addCustomEvent,\n canvasMutation,\n freezePage,\n _mirror as mirror,\n record,\n takeFullSnapshot,\n utils\n};\n//# sourceMappingURL=rrweb.js.map\n","/**\n * Session Replay Engine - Simplified Implementation\n * Based on official rrweb example for maximum compatibility\n */\n\nimport type { eventWithTime } from \"@rrweb/types\";\nimport { record } from \"rrweb\";\n\n// Re-export rrweb event type for compatibility\nexport type ReplayEvent = eventWithTime;\n\nexport interface ReplayConfig {\n enabled: boolean;\n sampleRate: number;\n batchInterval: number;\n inactivityTimeout: number;\n pauseOnInactive: boolean;\n}\n\nexport class SessionReplayEngine {\n private config: ReplayConfig;\n private events: ReplayEvent[] = [];\n private batchTimer?: number;\n private inactivityTimer?: number;\n private isActive = false;\n private isPaused = false;\n private sessionId: string;\n private visitorId: string;\n private sdkInstance?: any;\n private rrwebStopRecord?: () => void;\n private lastActivityTime = Date.now();\n private sessionStartTime = Date.now();\n\n constructor(sessionId: string, visitorId: string, config: Partial<ReplayConfig> = {}) {\n this.sessionId = sessionId;\n this.visitorId = visitorId;\n this.config = {\n enabled: true,\n sampleRate: 1.0,\n batchInterval: 10000, // 10 seconds like official example\n inactivityTimeout: 30000, // 30 seconds of inactivity\n pauseOnInactive: true, // Pause recording during inactivity\n ...config,\n };\n }\n\n /**\n * Start session replay recording - Simplified like official example\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n // Check sampling\n if (Math.random() > this.config.sampleRate) {\n return false;\n }\n\n try {\n // Simple rrweb recording configuration like official example\n this.rrwebStopRecord = record({\n emit: (event: eventWithTime) => {\n // Update activity time on any event\n this.onActivity();\n \n // Only capture events if not paused\n if (!this.isPaused) {\n this.events.push(event);\n }\n },\n });\n\n this.isActive = true;\n this.startBatchTimer();\n this.startInactivityTracking();\n\n console.log(\"[Zaplier] Session replay started - with inactivity detection\");\n return true;\n } catch (error) {\n console.error(\"[Zaplier] Failed to start rrweb recording:\", error);\n return false;\n }\n }\n\n /**\n * Stop session replay recording\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n\n // Stop rrweb recording\n if (this.rrwebStopRecord) {\n this.rrwebStopRecord();\n this.rrwebStopRecord = undefined;\n }\n\n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n if (this.inactivityTimer) {\n clearTimeout(this.inactivityTimer);\n this.inactivityTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of events - Simplified like official example\n */\n private sendBatch(): void {\n if (this.events.length === 0) {\n return;\n }\n\n // Enhanced payload structure with visitor linking\n const payload = {\n sessionId: this.sessionId,\n visitorId: this.visitorId,\n events: [...this.events], // Copy events array\n metadata: {\n userAgent: navigator.userAgent,\n timestamp: Date.now(),\n startUrl: window.location.href,\n duration: Date.now() - this.sessionStartTime,\n activeTime: this.getActiveTime(),\n funnelSteps: [],\n hasConversion: false,\n eventsCount: this.events.length,\n isPaused: this.isPaused,\n },\n };\n\n // Reset events array like official example\n this.events = [];\n\n console.log(`[Zaplier] Sending batch with ${payload.events.length} events`);\n\n // Send to backend\n this.sendToBackend(payload);\n }\n\n /**\n * Set SDK instance for transport\n */\n setSDKInstance(sdk: any): void {\n this.sdkInstance = sdk;\n }\n\n /**\n * Send replay batch via SDK's transport system\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n if (!this.sdkInstance) {\n console.error(\n \"[Zaplier] No SDK instance available for replay transport\"\n );\n return;\n }\n\n // Use SDK's sendReplayBatch method with simplified payload\n const result = await this.sdkInstance.sendReplayBatch(payload);\n\n if (result && result.success) {\n console.log(\"[Zaplier] Session replay batch sent successfully\");\n } else {\n console.error(\"[Zaplier] Session replay batch failed:\", result);\n }\n } catch (error) {\n console.error(\"[Zaplier] Session replay error:\", error);\n }\n }\n\n /**\n * Get current event count\n */\n getEventCount(): number {\n return this.events.length;\n }\n\n /**\n * Check if recording is active\n */\n isRecording(): boolean {\n return this.isActive;\n }\n\n /**\n * Check if recording is paused\n */\n isPausedState(): boolean {\n return this.isPaused;\n }\n\n /**\n * Start inactivity tracking\n */\n private startInactivityTracking(): void {\n if (!this.config.pauseOnInactive) return;\n\n // Listen for user activity events\n const activityEvents = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];\n \n activityEvents.forEach(event => {\n document.addEventListener(event, this.onActivity.bind(this), true);\n });\n\n this.resetInactivityTimer();\n }\n\n /**\n * Handle activity event\n */\n private onActivity(): void {\n this.lastActivityTime = Date.now();\n \n // Resume if paused\n if (this.isPaused) {\n this.resume();\n }\n\n this.resetInactivityTimer();\n }\n\n /**\n * Reset inactivity timer\n */\n private resetInactivityTimer(): void {\n if (this.inactivityTimer) {\n clearTimeout(this.inactivityTimer);\n }\n\n this.inactivityTimer = window.setTimeout(() => {\n this.pauseForInactivity();\n }, this.config.inactivityTimeout);\n }\n\n /**\n * Pause recording due to inactivity\n */\n private pauseForInactivity(): void {\n if (this.isPaused) return;\n\n this.isPaused = true;\n console.log(\"[Zaplier] Session replay paused due to inactivity\");\n }\n\n /**\n * Resume recording after activity\n */\n private resume(): void {\n if (!this.isPaused) return;\n\n this.isPaused = false;\n console.log(\"[Zaplier] Session replay resumed after activity\");\n }\n\n /**\n * Get total active time (excluding paused periods)\n */\n private getActiveTime(): number {\n const totalTime = Date.now() - this.sessionStartTime;\n // For now, return total time. In production, track pause periods accurately\n return totalTime;\n }\n\n /**\n * Get visitor ID\n */\n getVisitorId(): string {\n return this.visitorId;\n }\n}\n","/**\n * Auto Tracker - Sistema de tracking automático via data-* attributes\n *\n * Suporta:\n * - data-track-click=\"event-name\"\n * - data-track-scroll=\"event-name\"\n * - data-track-view=\"event-name\"\n * - data-track-hover=\"event-name\"\n * - data-track-form=\"event-name\"\n */\n\nexport interface AutoTrackerConfig {\n enabled: boolean;\n trackClicks: boolean;\n trackScrolls: boolean;\n trackViews: boolean;\n trackHovers: boolean;\n trackForms: boolean;\n debug: boolean;\n}\n\nexport class AutoTracker {\n private config: AutoTrackerConfig;\n private sdkInstance: any;\n private observedElements = new Set<Element>();\n private intersectionObserver?: IntersectionObserver;\n private scrollThrottle: number = 0;\n private mutationObserver?: MutationObserver;\n private isInitialized: boolean = false;\n private delegationHandlers = new Map<string, (event: Event) => void>();\n private initializationAttempts: number = 0;\n private maxInitializationAttempts: number = 3;\n private diagnostics: any = {};\n\n constructor(sdkInstance: any, config: Partial<AutoTrackerConfig> = {}) {\n this.sdkInstance = sdkInstance;\n this.config = {\n enabled: true,\n trackClicks: true,\n trackScrolls: true,\n trackViews: true,\n trackHovers: true,\n trackForms: true,\n debug: false,\n ...config,\n };\n }\n\n /**\n * Inicializar auto tracking\n */\n start(): void {\n if (!this.config.enabled) return;\n\n this.initializationAttempts++;\n\n // Enhanced diagnostics\n this.runDiagnostics();\n\n if (this.config.debug) {\n console.log(\"[🔥 AutoTracker ENHANCED] Starting auto tracking\", this.diagnostics);\n }\n\n // Multiple initialization strategies\n this.tryInitialization();\n }\n\n /**\n * Run comprehensive diagnostics\n */\n private runDiagnostics(): void {\n this.diagnostics = {\n timestamp: new Date().toISOString(),\n attempt: this.initializationAttempts,\n environment: {\n domReady: document.readyState,\n reactDetected: this.detectReact(),\n reactVersion: this.getReactVersion(),\n userAgent: navigator.userAgent,\n isMobile: /Mobile|Android|iPhone|iPad/.test(navigator.userAgent),\n isSafari: /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent),\n protocol: window.location.protocol,\n isLocalhost: window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'\n },\n dom: {\n documentElement: !!document.documentElement,\n body: !!document.body,\n querySelector: typeof document.querySelector === 'function',\n addEventListener: typeof document.addEventListener === 'function',\n elementsFound: this.getElementCounts(),\n hasReactRoot: this.findReactRoot()\n },\n tracking: {\n sdkInstance: !!this.sdkInstance,\n trackCustomEvent: typeof this.sdkInstance?.trackCustomEvent === 'function',\n config: this.config,\n isInitialized: this.isInitialized,\n activeHandlers: Array.from(this.delegationHandlers.keys())\n }\n };\n }\n\n /**\n * Detect React presence\n */\n private detectReact(): boolean {\n return !!(\n (window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__ ||\n (window as any).React ||\n document.querySelector('[data-reactroot]') ||\n document.querySelector('#root') ||\n document.querySelector('#__next')\n );\n }\n\n /**\n * Get React version if available\n */\n private getReactVersion(): string | null {\n try {\n const reactInstance = (window as any).React;\n return reactInstance?.version || null;\n } catch {\n return null;\n }\n }\n\n /**\n * Find React root element\n */\n private findReactRoot(): string | null {\n const reactRoot = document.querySelector('[data-reactroot]') || \n document.querySelector('#root') || \n document.querySelector('#__next') ||\n document.querySelector('div[data-react-helmet]');\n return reactRoot ? reactRoot.tagName + (reactRoot.id ? '#' + reactRoot.id : '') : null;\n }\n\n /**\n * Get element counts for all tracking types\n */\n private getElementCounts(): object {\n return {\n click: document.querySelectorAll('[data-track-click]').length,\n scroll: document.querySelectorAll('[data-track-scroll]').length,\n view: document.querySelectorAll('[data-track-view]').length,\n hover: document.querySelectorAll('[data-track-hover]').length,\n form: document.querySelectorAll('[data-track-form]').length\n };\n }\n\n /**\n * Try multiple initialization strategies\n */\n private tryInitialization(): void {\n const strategies = [\n () => this.immediateInitialization(),\n () => this.delayedInitialization(100),\n () => this.delayedInitialization(500),\n () => this.delayedInitialization(1000),\n () => this.reactReadyInitialization()\n ];\n\n // Try immediate initialization first\n if (document.readyState === 'complete') {\n this.attemptStrategy(0, strategies);\n } else if (document.readyState === 'interactive') {\n // DOM ready but resources still loading\n this.attemptStrategy(1, strategies);\n } else {\n // DOM still loading\n document.addEventListener('DOMContentLoaded', () => {\n this.attemptStrategy(0, strategies);\n }, { once: true });\n }\n }\n\n /**\n * Attempt initialization strategy with fallback\n */\n private attemptStrategy(index: number, strategies: Array<() => void>): void {\n if (index >= strategies.length || this.isInitialized) return;\n\n if (this.config.debug) {\n console.log(`[🔄 AutoTracker] Trying initialization strategy ${index + 1}/${strategies.length}`);\n }\n\n try {\n const strategy = strategies[index];\n if (strategy && typeof strategy === 'function') {\n strategy();\n \n // Verify initialization after a short delay\n setTimeout(() => {\n if (!this.verifyInitialization()) {\n if (this.config.debug) {\n console.log(`[⚠️ AutoTracker] Strategy ${index + 1} failed verification, trying next...`);\n }\n this.attemptStrategy(index + 1, strategies);\n } else {\n if (this.config.debug) {\n console.log(`[✅ AutoTracker] Strategy ${index + 1} successful!`);\n }\n }\n }, 50);\n } else {\n // Strategy is undefined or not a function, try next\n this.attemptStrategy(index + 1, strategies);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(`[❌ AutoTracker] Strategy ${index + 1} error:`, error);\n }\n this.attemptStrategy(index + 1, strategies);\n }\n }\n\n /**\n * Immediate initialization\n */\n private immediateInitialization(): void {\n this.initializeTracking();\n }\n\n /**\n * Delayed initialization\n */\n private delayedInitialization(delay: number): void {\n setTimeout(() => {\n this.initializeTracking();\n }, delay);\n }\n\n /**\n * React-specific initialization timing\n */\n private reactReadyInitialization(): void {\n // Wait for React to finish rendering\n if (typeof window.requestAnimationFrame === 'function') {\n window.requestAnimationFrame(() => {\n setTimeout(() => {\n this.initializeTracking();\n }, 0);\n });\n } else {\n setTimeout(() => {\n this.initializeTracking();\n }, 16); // ~60fps fallback\n }\n }\n\n /**\n * Verify initialization was successful\n */\n private verifyInitialization(): boolean {\n const elementsFound = this.getElementCounts();\n const totalElements = Object.values(elementsFound).reduce((sum: number, count) => sum + (count as number), 0);\n const hasActiveHandlers = this.delegationHandlers.size > 0;\n\n if (this.config.debug) {\n console.log('[🔍 AutoTracker] Verification:', {\n isInitialized: this.isInitialized,\n elementsFound: totalElements,\n hasActiveHandlers,\n handlersActive: Array.from(this.delegationHandlers.keys())\n });\n }\n\n return this.isInitialized && (totalElements > 0 || hasActiveHandlers);\n }\n\n private initializeTracking(): void {\n if (this.config.debug) {\n console.log(\"[Zaplier AutoTracker] Initializing tracking...\");\n }\n\n // Observer para novos elementos no DOM\n this.observeDOM();\n\n // Processar elementos já existentes\n this.processExistingElements();\n\n // Setup intersection observer para views\n if (this.config.trackViews) {\n this.setupViewTracking();\n }\n\n // Setup event delegation (modern approach)\n this.setupEventDelegation();\n\n // Debug: Log elementos encontrados após inicialização\n if (this.config.debug) {\n this.logFoundElements();\n \n // Também agendar uma verificação após delay para elementos React\n setTimeout(() => {\n console.log(\"[Zaplier AutoTracker] Re-checking elements after 500ms...\");\n this.logFoundElements();\n }, 500);\n \n setTimeout(() => {\n console.log(\"[Zaplier AutoTracker] Re-checking elements after 2s...\");\n this.logFoundElements();\n }, 2000);\n }\n }\n\n private logFoundElements(): void {\n const clickElements = document.querySelectorAll('[data-track-click]');\n const scrollElements = document.querySelectorAll('[data-track-scroll]');\n const viewElements = document.querySelectorAll('[data-track-view]');\n const hoverElements = document.querySelectorAll('[data-track-hover]');\n const formElements = document.querySelectorAll('[data-track-form]');\n \n console.log(\"[Zaplier AutoTracker] Elementos encontrados:\", {\n clickElements: clickElements.length,\n scrollElements: scrollElements.length,\n viewElements: viewElements.length,\n hoverElements: hoverElements.length,\n formElements: formElements.length,\n totalElements: clickElements.length + scrollElements.length + viewElements.length + hoverElements.length + formElements.length\n });\n \n if (scrollElements.length > 0) {\n console.log(\"[Zaplier AutoTracker] Elementos de scroll:\", Array.from(scrollElements).map(el => ({\n tagName: el.tagName,\n trackEvent: el.getAttribute('data-track-scroll'),\n threshold: el.getAttribute('data-scroll-threshold') || '0.5',\n id: el.id || 'no-id',\n classes: el.className || 'no-classes'\n })));\n }\n }\n\n /**\n * Setup Event Delegation (Industry Best Practice)\n * Uses single document-level listeners instead of individual element listeners\n */\n private setupEventDelegation(): void {\n if (this.config.debug) {\n console.log(\"[🚀 AutoTracker] Setting up enhanced event delegation...\");\n }\n\n // Determine optimal delegation target based on React setup\n const delegationTarget = this.getOptimalDelegationTarget();\n\n if (this.config.debug) {\n console.log(\"[🎯 AutoTracker] Using delegation target:\", delegationTarget);\n }\n\n // Click delegation with React compatibility\n if (this.config.trackClicks) {\n const clickHandler = this.createReactCompatibleClickHandler();\n this.delegationHandlers.set('click', clickHandler);\n delegationTarget.addEventListener('click', clickHandler, this.getEventOptions('click'));\n \n if (this.config.debug) {\n console.log(\"[👆 AutoTracker] Click delegation handler added\");\n }\n }\n\n // MODERN APPROACH: IntersectionObserver + Scroll Fallback (2025 Best Practice)\n if (this.config.trackScrolls) {\n if (this.config.debug) {\n console.log(\"[🔄 AutoTracker] Setting up modern scroll tracking with IntersectionObserver\");\n }\n\n // PRIMARY: Modern IntersectionObserver approach (recommended 2025)\n this.setupIntersectionObserverScrollTracking();\n \n // FALLBACK: Traditional scroll listener for edge cases\n this.setupFallbackScrollListener();\n\n if (this.config.debug) {\n console.log(\"[📜 AutoTracker] ✅ Modern scroll tracking setup complete:\");\n console.log(\"[📜 AutoTracker] 📋 Primary: IntersectionObserver (modern, performant)\");\n console.log(\"[📜 AutoTracker] 📋 Fallback: Traditional scroll listener (compatibility)\");\n }\n }\n\n // Setup debounced mutation observer for dynamic content\n this.setupIntelligentMutationObserver();\n\n this.isInitialized = true;\n\n if (this.config.debug) {\n console.log(\"[✅ AutoTracker] Event delegation setup complete\", {\n clickHandler: this.delegationHandlers.has('click'),\n scrollHandler: this.delegationHandlers.has('scroll'),\n totalHandlers: this.delegationHandlers.size\n });\n }\n }\n\n /**\n * Get optimal delegation target based on React setup\n */\n private getOptimalDelegationTarget(): Element | Document {\n // For React 17+, prefer root container over document\n const reactRoot = document.querySelector('#root') || \n document.querySelector('#__next') || \n document.querySelector('[data-reactroot]');\n\n if (reactRoot && this.diagnostics.environment?.reactDetected) {\n if (this.config.debug) {\n console.log(\"[⚛️ AutoTracker] Using React root for delegation:\", reactRoot);\n }\n return reactRoot;\n }\n\n return document;\n }\n\n /**\n * Get optimized event options for different browsers\n */\n private getEventOptions(eventType: string): AddEventListenerOptions {\n const isMobile = this.diagnostics.environment?.isMobile;\n const isSafari = this.diagnostics.environment?.isSafari;\n\n let options: AddEventListenerOptions = {};\n\n switch (eventType) {\n case 'click':\n // Safari iOS requires non-passive click events for proper delegation\n options = { \n passive: !isSafari, \n capture: false \n };\n break;\n case 'scroll':\n options = { \n passive: true, \n capture: false \n };\n break;\n default:\n options = { passive: true };\n }\n\n if (this.config.debug) {\n console.log(`[⚙️ AutoTracker] Event options for ${eventType}:`, options);\n }\n\n return options;\n }\n\n /**\n * Create React-compatible click handler\n */\n private createReactCompatibleClickHandler(): (event: Event) => void {\n return (event: Event) => {\n try {\n if (!this.config.trackClicks) return;\n\n // Enhanced target detection for nested React components\n const target = event.target as Element;\n if (!target) return;\n\n // Multiple strategies to find tracking element\n let trackingElement: Element | null = null;\n\n // Strategy 1: Direct closest (most common)\n trackingElement = target.closest('[data-track-click]');\n\n // Strategy 2: Check if target itself has the attribute (React edge case)\n if (!trackingElement && target.hasAttribute && target.hasAttribute('data-track-click')) {\n trackingElement = target;\n }\n\n // Strategy 3: Walk up DOM tree manually (React portal handling)\n if (!trackingElement) {\n trackingElement = this.findTrackingElementManually(target, 'data-track-click');\n }\n\n if (!trackingElement) {\n if (this.config.debug) {\n console.log('[🔍 AutoTracker] No tracking element found for click:', {\n target: target.tagName,\n hasClosest: typeof target.closest === 'function',\n hasAttribute: typeof target.hasAttribute === 'function'\n });\n }\n return;\n }\n\n const eventName = trackingElement.getAttribute('data-track-click');\n if (!eventName) return;\n\n const metadata = this.extractMetadata(trackingElement);\n\n this.trackEvent(eventName, {\n type: 'click',\n element: trackingElement.tagName.toLowerCase(),\n reactCompatible: true,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(`[🎯 AutoTracker] Click tracked (React-compatible): ${eventName}`, {\n element: trackingElement.tagName.toLowerCase(),\n strategy: 'enhanced_delegation',\n ...metadata\n });\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('[❌ AutoTracker] Click handler error:', error);\n }\n }\n };\n }\n\n /**\n * Manually walk up DOM tree to find tracking element\n */\n private findTrackingElementManually(element: Element, attribute: string, maxDepth: number = 10): Element | null {\n let current = element;\n let depth = 0;\n\n while (current && current !== document.documentElement && depth < maxDepth) {\n if (current.hasAttribute && current.hasAttribute(attribute)) {\n return current;\n }\n current = current.parentElement as Element;\n depth++;\n }\n\n return null;\n }\n\n /**\n * Modern IntersectionObserver-based scroll tracking (2025 Best Practice)\n * More performant and reliable than traditional scroll listeners\n */\n private setupIntersectionObserverScrollTracking(): void {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {\n if (this.config.debug) {\n console.log(\"[⚠️ AutoTracker] IntersectionObserver not available, using fallback only\");\n }\n return;\n }\n\n // Get all scroll elements\n const scrollElements = document.querySelectorAll('[data-track-scroll]');\n \n if (scrollElements.length === 0) {\n if (this.config.debug) {\n console.log(\"[📍 AutoTracker] No scroll elements found for IntersectionObserver\");\n }\n return;\n }\n\n // Create observer with multiple thresholds for precise tracking\n const observerOptions = {\n root: null, // Use viewport as root\n rootMargin: '0px',\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0] // Multiple thresholds for accuracy\n };\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const element = entry.target;\n const eventName = element.getAttribute('data-track-scroll');\n const customThreshold = parseFloat(element.getAttribute('data-scroll-threshold') || '0.5');\n const hasTriggered = element.getAttribute('data-scroll-triggered') === 'true';\n \n if (!eventName || hasTriggered) return;\n\n const visibilityRatio = entry.intersectionRatio;\n \n if (this.config.debug) {\n console.log(`[🔍 IntersectionObserver] Element \"${eventName}\":`, {\n elementId: element.id || 'no-id',\n visibilityRatio: Math.round(visibilityRatio * 1000) / 1000,\n threshold: customThreshold,\n isIntersecting: entry.isIntersecting,\n shouldTrigger: visibilityRatio >= customThreshold\n });\n }\n\n // Trigger event when visibility threshold is met\n if (visibilityRatio >= customThreshold) {\n element.setAttribute('data-scroll-triggered', 'true');\n \n const metadata = this.extractMetadata(element);\n \n this.trackEvent(eventName, {\n type: 'scroll',\n method: 'IntersectionObserver',\n element: element.tagName.toLowerCase(),\n threshold: customThreshold,\n visibilityRatio: Math.round(visibilityRatio * 1000) / 1000,\n enhanced: true,\n modern: true,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(`[🎯 IntersectionObserver] Event \"${eventName}\" triggered! (${Math.round(visibilityRatio * 100)}% visible)`);\n }\n\n // Unobserve after triggering (one-time trigger)\n observer.unobserve(element);\n }\n });\n }, observerOptions);\n\n // Observe all scroll elements\n scrollElements.forEach((element) => {\n observer.observe(element);\n if (this.config.debug) {\n console.log(`[👁️ IntersectionObserver] Now observing: ${element.getAttribute('data-track-scroll')} (${element.id || 'no-id'})`);\n }\n });\n\n // Store observer for cleanup\n this.intersectionObserver = observer;\n\n if (this.config.debug) {\n console.log(`[✅ IntersectionObserver] Setup complete - observing ${scrollElements.length} elements`);\n }\n }\n\n /**\n * Fallback scroll listener for compatibility (React/Next.js issues)\n */\n private setupFallbackScrollListener(): void {\n if (typeof window === 'undefined') return;\n\n const fallbackHandler = this.createThrottledScrollHandler();\n \n // Try multiple attachment strategies for React/Next.js compatibility\n const attachStrategies = [\n () => window.addEventListener('scroll', fallbackHandler, { passive: true }),\n () => document.addEventListener('scroll', fallbackHandler, { passive: true }),\n () => window.addEventListener('scroll', fallbackHandler, { passive: true, capture: true }),\n () => {\n // Delayed attachment for React hydration\n setTimeout(() => {\n window.addEventListener('scroll', fallbackHandler, { passive: true });\n }, 100);\n },\n () => {\n // Document ready state check\n if (document.readyState === 'complete') {\n window.addEventListener('scroll', fallbackHandler, { passive: true });\n } else {\n window.addEventListener('load', () => {\n window.addEventListener('scroll', fallbackHandler, { passive: true });\n });\n }\n }\n ];\n\n // Try each strategy\n attachStrategies.forEach((strategy, index) => {\n try {\n strategy();\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] Fallback scroll strategy ${index + 1} attached`);\n }\n } catch (error) {\n if (this.config.debug) {\n console.log(`[⚠️ AutoTracker] Fallback strategy ${index + 1} failed:`, error);\n }\n }\n });\n\n this.delegationHandlers.set('scroll', fallbackHandler);\n\n // Test scroll detection after setup\n if (this.config.debug) {\n setTimeout(() => {\n console.log(\"[🧪 AutoTracker] Testing fallback scroll in 2 seconds...\");\n \n // Add one-time debug listener\n const testListener = () => {\n console.log(\"[✅ AutoTracker] Fallback scroll listener working!\");\n };\n window.addEventListener('scroll', testListener, { once: true, passive: true });\n \n // Trigger test scroll\n const originalScrollY = window.scrollY;\n window.scrollBy(0, 1);\n setTimeout(() => window.scrollTo(0, originalScrollY), 50);\n \n }, 2000);\n }\n }\n\n /**\n * Create throttled scroll handler (optimized for performance)\n */\n private createThrottledScrollHandler(): (event: Event) => void {\n let lastKnownScrollPosition = 0;\n let ticking = false;\n\n return () => {\n lastKnownScrollPosition = window.scrollY;\n \n if (!ticking) {\n // Use setTimeout throttling (MDN recommended 2025)\n setTimeout(() => {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] Fallback scroll handler triggered (scrollY: ${lastKnownScrollPosition})`);\n }\n \n this.processFallbackScroll(lastKnownScrollPosition);\n ticking = false;\n }, 20); // 20ms throttle (MDN recommendation)\n \n ticking = true;\n }\n };\n }\n\n /**\n * Process scroll for fallback handler (when IntersectionObserver fails)\n */\n private processFallbackScroll(scrollPosition: number): void {\n // Only process if IntersectionObserver didn't handle it\n const scrollElements = document.querySelectorAll('[data-track-scroll]:not([data-scroll-triggered=\"true\"])');\n \n if (scrollElements.length === 0) return;\n\n scrollElements.forEach((element) => {\n const eventName = element.getAttribute('data-track-scroll');\n const threshold = parseFloat(element.getAttribute('data-scroll-threshold') || '0.5');\n \n if (!eventName) return;\n\n const rect = element.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n const elementHeight = rect.height;\n \n if (elementHeight <= 0) return;\n\n const visibleTop = Math.max(rect.top, 0);\n const visibleBottom = Math.min(rect.bottom, windowHeight);\n const visibleHeight = Math.max(0, visibleBottom - visibleTop);\n const visibilityRatio = visibleHeight / elementHeight;\n\n if (visibilityRatio >= threshold) {\n element.setAttribute('data-scroll-triggered', 'true');\n \n const metadata = this.extractMetadata(element);\n \n this.trackEvent(eventName, {\n type: 'scroll',\n method: 'fallback_scroll',\n element: element.tagName.toLowerCase(),\n threshold,\n visibilityRatio: Math.round(visibilityRatio * 1000) / 1000,\n scrollPosition,\n fallback: true,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(`[🎯 Fallback] Event \"${eventName}\" triggered! (${Math.round(visibilityRatio * 100)}% visible)`);\n }\n }\n });\n }\n\n /**\n * LEGACY: Create enhanced scroll handler with better performance\n * @deprecated Use IntersectionObserver approach instead\n */\n private createEnhancedScrollHandler(): (event: Event) => void {\n return () => {\n try {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] 🚀 SCROLL HANDLER CALLED`, {\n trackScrolls: this.config.trackScrolls,\n scrollY: window.scrollY,\n timestamp: Date.now()\n });\n }\n\n if (!this.config.trackScrolls) {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] ⏭️ Scroll tracking disabled, skipping`);\n }\n return;\n }\n\n // Adaptive throttling based on scroll frequency\n const now = Date.now();\n const timeDelta = now - this.scrollThrottle;\n const throttleDelay = this.diagnostics.environment?.isMobile ? 150 : 100;\n\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] ⏱️ Throttle check:`, {\n timeDelta,\n throttleDelay,\n willProcess: timeDelta >= throttleDelay,\n lastScrollThrottle: this.scrollThrottle\n });\n }\n\n if (timeDelta < throttleDelay) {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] ⏸️ Throttled - skipping (${timeDelta}ms < ${throttleDelay}ms)`);\n }\n return;\n }\n \n this.scrollThrottle = now;\n\n // Enhanced element finding with caching\n const scrollElements = this.getCachedScrollElements();\n \n if (this.config.debug) {\n console.log(`[📜 AutoTracker] 🔍 Processing scroll elements:`, {\n scrollElementsFound: scrollElements.length,\n scrollY: window.scrollY,\n windowHeight: window.innerHeight,\n throttleDelay,\n timeDelta\n });\n }\n \n // Process elements with enhanced visibility detection\n if (scrollElements.length > 0) {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] 🎯 Starting to process ${scrollElements.length} elements`);\n }\n \n scrollElements.forEach((element, index) => {\n if (this.config.debug) {\n console.log(`[📜 AutoTracker] 🔄 Processing element ${index + 1}/${scrollElements.length}:`, {\n elementId: element.id || 'no-id',\n trackEvent: element.getAttribute('data-track-scroll'),\n hasTriggered: element.getAttribute('data-scroll-triggered') === 'true'\n });\n }\n this.processScrollElementEnhanced(element);\n });\n \n if (this.config.debug) {\n console.log(`[📜 AutoTracker] ✅ Finished processing all ${scrollElements.length} elements`);\n }\n } else if (this.config.debug) {\n console.log(`[📜 AutoTracker] ⚠️ No scroll elements found to process - cache might be empty`);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('[❌ AutoTracker] CRITICAL: Enhanced scroll handler error:', error);\n }\n }\n };\n }\n\n /**\n * Cache scroll elements for better performance\n */\n private cachedScrollElements: NodeListOf<Element> | null = null;\n private lastScrollElementsCheck: number = 0;\n\n private getCachedScrollElements(): NodeListOf<Element> {\n const now = Date.now();\n const cacheExpiry = 2000; // Reduced to 2 seconds for faster detection\n\n if (!this.cachedScrollElements || (now - this.lastScrollElementsCheck) > cacheExpiry) {\n this.cachedScrollElements = document.querySelectorAll('[data-track-scroll]');\n this.lastScrollElementsCheck = now;\n \n if (this.config.debug) {\n console.log(`[🔄 AutoTracker] Refreshed scroll elements cache: ${this.cachedScrollElements.length} elements found`);\n \n // Log each element found for debugging\n Array.from(this.cachedScrollElements).forEach((element, index) => {\n console.log(`[🔄 AutoTracker] Cached element ${index + 1}:`, {\n id: element.id || 'no-id',\n className: element.className || 'no-class',\n trackEvent: element.getAttribute('data-track-scroll'),\n threshold: element.getAttribute('data-scroll-threshold') || '0.5',\n tagName: element.tagName,\n triggered: element.getAttribute('data-scroll-triggered') === 'true'\n });\n });\n }\n }\n\n return this.cachedScrollElements;\n }\n\n /**\n * Process scroll element with enhanced detection\n */\n private processScrollElementEnhanced(element: Element): void {\n try {\n const hasTriggered = element.getAttribute('data-scroll-triggered') === 'true';\n if (hasTriggered) {\n if (this.config.debug) {\n console.log(`[⏭️ AutoTracker] Element already triggered, skipping:`, element.id || element.className || 'no-id');\n }\n return;\n }\n\n const threshold = parseFloat(\n element.getAttribute('data-scroll-threshold') || '0.5'\n );\n\n // Enhanced visibility calculation\n const rect = element.getBoundingClientRect();\n const elementHeight = rect.height;\n const windowHeight = window.innerHeight;\n \n // Handle edge cases\n if (elementHeight <= 0) {\n if (this.config.debug) {\n console.log(`[⚠️ AutoTracker] Element has no height, skipping:`, element.id || 'no-id');\n }\n return;\n }\n\n const visibleTop = Math.max(rect.top, 0);\n const visibleBottom = Math.min(rect.bottom, windowHeight);\n const visibleHeight = Math.max(0, visibleBottom - visibleTop);\n const visibilityRatio = visibleHeight / elementHeight;\n\n const eventName = element.getAttribute('data-track-scroll');\n if (!eventName) {\n if (this.config.debug) {\n console.log(`[⚠️ AutoTracker] Element missing data-track-scroll attribute:`, element.id || 'no-id');\n }\n return;\n }\n\n if (this.config.debug) {\n const shouldTrigger = visibilityRatio >= threshold;\n console.log(`[📊 AutoTracker] 🔍 DETAILED visibility check for \"${eventName}\":`, {\n elementInfo: {\n id: element.id || 'no-id',\n className: element.className || 'no-class',\n tagName: element.tagName,\n trackEvent: eventName,\n threshold: threshold\n },\n positioning: {\n rect_top: Math.round(rect.top),\n rect_bottom: Math.round(rect.bottom),\n rect_height: Math.round(elementHeight),\n window_height: windowHeight,\n scroll_y: window.scrollY\n },\n visibilityCalculation: {\n step1_visibleTop: `Math.max(${Math.round(rect.top)}, 0) = ${visibleTop}`,\n step2_visibleBottom: `Math.min(${Math.round(rect.bottom)}, ${windowHeight}) = ${visibleBottom}`,\n step3_visibleHeight: `Math.max(0, ${visibleBottom} - ${visibleTop}) = ${visibleHeight}`,\n step4_visibilityRatio: `${visibleHeight} / ${Math.round(elementHeight)} = ${Math.round(visibilityRatio * 1000) / 1000}`,\n step5_comparison: `${Math.round(visibilityRatio * 1000) / 1000} >= ${threshold} = ${shouldTrigger}`\n },\n status: {\n hasTriggered: hasTriggered,\n willTrigger: shouldTrigger && !hasTriggered,\n skipReason: hasTriggered ? 'already_triggered' : (!shouldTrigger ? 'not_visible_enough' : 'none')\n }\n });\n }\n\n if (visibilityRatio >= threshold) {\n // Mark as triggered to prevent duplicate events\n element.setAttribute('data-scroll-triggered', 'true');\n\n const metadata = this.extractMetadata(element);\n\n const eventData = {\n type: 'scroll',\n element: element.tagName.toLowerCase(),\n threshold,\n scrollDepth: window.scrollY,\n visibilityRatio: Math.round(visibilityRatio * 1000) / 1000,\n enhanced: true,\n ...metadata,\n };\n\n if (this.config.debug) {\n console.log(`[🎯 AutoTracker] TRIGGERING scroll event \"${eventName}\":`, eventData);\n }\n\n this.trackEvent(eventName, eventData);\n\n if (this.config.debug) {\n console.log(`[✅ AutoTracker] Scroll event \"${eventName}\" sent successfully`);\n }\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('[❌ AutoTracker] Scroll element processing error:', error, {\n element: element.id || element.className || 'no-id',\n tagName: element.tagName\n });\n }\n }\n }\n\n /**\n * Legacy method for compatibility\n */\n private processScrollElement(element: Element): void {\n this.processScrollElementEnhanced(element);\n }\n\n /**\n * Setup intelligent mutation observer (debounced for performance)\n */\n private setupIntelligentMutationObserver(): void {\n if (this.mutationObserver) return; // Already setup\n\n const debouncedCallback = this.debounce((mutations: MutationRecord[]) => {\n let hasRelevantChanges = false;\n \n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n if (this.hasTrackingAttributes(element) || this.hasTrackingDescendants(element)) {\n hasRelevantChanges = true;\n if (this.config.debug) {\n console.log('[AutoTracker] New trackable element detected via mutation observer:', element);\n }\n }\n }\n });\n });\n\n if (hasRelevantChanges) {\n if (this.config.debug) {\n console.log('[AutoTracker] Processing new elements from mutations...');\n }\n // Process elements for view tracking (only thing that needs setup)\n this.processExistingElements();\n }\n }, 150);\n\n this.mutationObserver = new MutationObserver(debouncedCallback);\n this.mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n if (this.config.debug) {\n console.log('[AutoTracker] Intelligent mutation observer setup complete');\n }\n }\n\n /**\n * Check if element has tracking attributes\n */\n private hasTrackingAttributes(element: Element): boolean {\n return element.hasAttribute && (\n element.hasAttribute('data-track-click') ||\n element.hasAttribute('data-track-scroll') ||\n element.hasAttribute('data-track-view') ||\n element.hasAttribute('data-track-hover') ||\n element.hasAttribute('data-track-form')\n );\n }\n\n /**\n * Check if element has tracking descendants\n */\n private hasTrackingDescendants(element: Element): boolean {\n if (!element.querySelector) return false;\n return !!(\n element.querySelector('[data-track-click]') ||\n element.querySelector('[data-track-scroll]') ||\n element.querySelector('[data-track-view]') ||\n element.querySelector('[data-track-hover]') ||\n element.querySelector('[data-track-form]')\n );\n }\n\n /**\n * Utility: Debounce function for performance optimization\n */\n private debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number\n ): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n }\n\n /**\n * Parar auto tracking (with proper cleanup)\n */\n stop(): void {\n if (this.config.debug) {\n console.log('[📜 AutoTracker] Stopping enhanced auto tracking and cleaning up...');\n }\n\n // Remove delegation handlers from correct targets\n this.delegationHandlers.forEach((handler, eventType) => {\n if (eventType === 'click') {\n const delegationTarget = this.getOptimalDelegationTarget();\n delegationTarget.removeEventListener('click', handler);\n } else if (eventType === 'scroll') {\n // Remove from both window and document (as we added to both)\n window.removeEventListener('scroll', handler);\n document.removeEventListener('scroll', handler);\n if (this.config.debug) {\n console.log('[📜 AutoTracker] Removed scroll listeners from window and document');\n }\n } else {\n document.removeEventListener(eventType, handler);\n }\n });\n this.delegationHandlers.clear();\n\n // Disconnect observers\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = undefined;\n }\n\n // Clear caches\n this.observedElements.clear();\n this.isInitialized = false;\n \n if (this.config.debug) {\n console.log('[📜 AutoTracker] Enhanced cleanup completed');\n }\n }\n\n /**\n * Legacy method - now handled by intelligent mutation observer\n * @deprecated Use setupIntelligentMutationObserver instead\n */\n private observeDOM(): void {\n // This is now handled by setupIntelligentMutationObserver in setupEventDelegation\n if (this.config.debug) {\n console.log('[AutoTracker] observeDOM() is deprecated - using intelligent mutation observer');\n }\n }\n\n /**\n * Processar elementos já existentes no DOM\n */\n private processExistingElements(): void {\n // Buscar todos os elementos com data-track-*\n const trackElements = document.querySelectorAll(\n \"[data-track-click], [data-track-scroll], [data-track-view], [data-track-hover], [data-track-form]\"\n );\n\n trackElements.forEach((element) => {\n this.processElement(element);\n });\n }\n\n /**\n * Processar um elemento específico\n */\n private processElement(element: Element): void {\n // Click tracking - handled by global listener\n\n // Scroll tracking - handled by global listener\n\n // View tracking\n if (this.config.trackViews && element.hasAttribute(\"data-track-view\")) {\n this.setupElementViewTracking(element);\n }\n\n // Hover tracking\n if (this.config.trackHovers && element.hasAttribute(\"data-track-hover\")) {\n this.setupHoverTracking(element);\n }\n\n // Form tracking\n if (this.config.trackForms && element.hasAttribute(\"data-track-form\")) {\n this.setupFormTracking(element);\n }\n }\n\n\n\n /**\n * Setup view tracking usando Intersection Observer\n */\n private setupViewTracking(): void {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const element = entry.target;\n const eventName = element.getAttribute(\"data-track-view\");\n if (!eventName) return;\n\n const metadata = this.extractMetadata(element);\n\n this.trackEvent(eventName, {\n type: \"view\",\n element: element.tagName.toLowerCase(),\n intersectionRatio: entry.intersectionRatio,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(`[AutoTracker] View tracked: ${eventName}`, metadata);\n }\n\n // Remove from observation after first trigger\n this.intersectionObserver?.unobserve(element);\n }\n });\n },\n {\n threshold: 0.5, // 50% visible\n rootMargin: \"0px\",\n }\n );\n }\n\n /**\n * Setup view tracking para elemento específico\n */\n private setupElementViewTracking(element: Element): void {\n if (!this.intersectionObserver) return;\n\n if (!this.observedElements.has(element)) {\n this.intersectionObserver.observe(element);\n this.observedElements.add(element);\n }\n }\n\n /**\n * Setup hover tracking\n */\n private setupHoverTracking(element: Element): void {\n let hoverStartTime: number;\n const minHoverTime = parseInt(\n element.getAttribute(\"data-hover-time\") || \"1000\"\n );\n\n element.addEventListener(\"mouseenter\", () => {\n hoverStartTime = Date.now();\n });\n\n element.addEventListener(\"mouseleave\", () => {\n const hoverDuration = Date.now() - hoverStartTime;\n\n if (hoverDuration >= minHoverTime) {\n const eventName = element.getAttribute(\"data-track-hover\");\n if (!eventName) return;\n\n const metadata = this.extractMetadata(element);\n\n this.trackEvent(eventName, {\n type: \"hover\",\n element: element.tagName.toLowerCase(),\n hoverDuration,\n minHoverTime,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(`[AutoTracker] Hover tracked: ${eventName}`, metadata);\n }\n }\n });\n }\n\n /**\n * Setup form tracking\n */\n private setupFormTracking(element: Element): void {\n if (element.tagName.toLowerCase() !== \"form\") return;\n\n element.addEventListener(\"submit\", (event) => {\n const eventName = element.getAttribute(\"data-track-form\");\n if (!eventName) return;\n\n const formData = new FormData(element as HTMLFormElement);\n const metadata = this.extractMetadata(element);\n\n // Extract form fields (without sensitive data)\n const fields: Record<string, any> = {};\n for (const [key, value] of formData.entries()) {\n // Skip sensitive fields\n if (!this.isSensitiveField(key)) {\n fields[key] =\n typeof value === \"string\" ? value.substring(0, 100) : \"file\";\n }\n }\n\n this.trackEvent(eventName, {\n type: \"form_submit\",\n element: \"form\",\n fieldCount: Array.from(formData.entries()).length,\n fields,\n ...metadata,\n });\n\n if (this.config.debug) {\n console.log(\n `[AutoTracker] Form submit tracked: ${eventName}`,\n metadata\n );\n }\n });\n }\n\n /**\n * Extrair metadata do elemento\n */\n private extractMetadata(element: Element): Record<string, any> {\n const metadata: Record<string, any> = {};\n\n // Extrair todos os data-meta-* attributes\n Array.from(element.attributes).forEach((attr) => {\n if (attr.name.startsWith(\"data-meta-\")) {\n const key = attr.name.replace(\"data-meta-\", \"\");\n metadata[key] = attr.value;\n }\n });\n\n // Adicionar informações básicas\n if (element.id) metadata.elementId = element.id;\n if (element.className) metadata.elementClass = element.className;\n\n // Text content (limitado)\n const textContent = element.textContent?.trim();\n if (textContent && textContent.length > 0) {\n metadata.textContent = textContent.substring(0, 50);\n }\n\n // Position info\n const rect = element.getBoundingClientRect();\n metadata.elementPosition = {\n x: Math.round(rect.left),\n y: Math.round(rect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n };\n\n return metadata;\n }\n\n /**\n * Verificar se um campo é sensível\n */\n private isSensitiveField(fieldName: string): boolean {\n const sensitivePatterns = [\n /password/i,\n /pass/i,\n /pwd/i,\n /secret/i,\n /token/i,\n /api[_-]?key/i,\n /credit[_-]?card/i,\n /ssn/i,\n /social/i,\n /tax/i,\n ];\n\n return sensitivePatterns.some((pattern) => pattern.test(fieldName));\n }\n\n /**\n * Enviar evento para o SDK\n */\n /**\n * Enhanced event tracking with comprehensive debugging\n */\n private trackEvent(eventName: string, metadata: Record<string, any>): void {\n const trackingStart = performance.now();\n \n if (this.config.debug) {\n console.log(\"[🚀 AutoTracker] 🎯 TRACK EVENT CALLED:\", { \n eventName, \n metadata,\n timestamp: new Date().toISOString(),\n stackTrace: new Error().stack?.split('\\n').slice(1, 4) // Show call stack\n });\n }\n \n // Comprehensive validation\n const validation = this.validateTrackingCall(eventName, metadata);\n if (!validation.isValid) {\n if (this.config.debug) {\n console.error(\"[❌ AutoTracker] 🚫 VALIDATION FAILED:\", validation.errors);\n }\n return;\n }\n\n try {\n const eventData = {\n // Core tracking data\n autoTracked: true,\n enhanced: true,\n timestamp: Date.now(),\n url: window.location.href,\n userAgent: navigator.userAgent,\n \n // Performance data\n trackingLatency: Math.round((performance.now() - trackingStart) * 100) / 100,\n \n // Environment data\n isReactApp: this.diagnostics.environment?.reactDetected,\n isMobile: this.diagnostics.environment?.isMobile,\n \n // Event metadata\n ...metadata,\n };\n \n if (this.config.debug) {\n console.log(\"[📡 AutoTracker] 📤 SENDING EVENT TO SDK:\", { \n eventName, \n eventData,\n sdkInstanceExists: !!this.sdkInstance,\n trackCustomEventExists: typeof this.sdkInstance?.trackCustomEvent === 'function'\n });\n }\n \n if (!this.sdkInstance) {\n if (this.config.debug) {\n console.error(\"[❌ AutoTracker] 🚫 SDK INSTANCE IS NULL - CANNOT SEND EVENT\");\n }\n return;\n }\n \n if (typeof this.sdkInstance.trackCustomEvent !== 'function') {\n if (this.config.debug) {\n console.error(\"[❌ AutoTracker] 🚫 trackCustomEvent IS NOT A FUNCTION:\", typeof this.sdkInstance.trackCustomEvent);\n }\n return;\n }\n \n const result = this.sdkInstance.trackCustomEvent(eventName, eventData);\n \n if (this.config.debug) {\n const trackingEnd = performance.now();\n console.log(\"[✅ AutoTracker] 🎉 EVENT SENT SUCCESSFULLY:\", {\n eventName,\n result,\n totalLatency: Math.round((trackingEnd - trackingStart) * 100) / 100 + 'ms'\n });\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[💥 AutoTracker] 💀 CRITICAL TRACKING ERROR:\", {\n eventName,\n error: error instanceof Error ? error.message : error,\n stack: error instanceof Error ? error.stack : undefined,\n metadata,\n sdkInstance: !!this.sdkInstance,\n sdkInstanceType: typeof this.sdkInstance\n });\n }\n }\n }\n\n /**\n * Validate tracking call before sending\n */\n private validateTrackingCall(eventName: string, metadata: Record<string, any>): {\n isValid: boolean;\n errors: string[];\n } {\n const errors: string[] = [];\n\n if (!eventName || typeof eventName !== 'string') {\n errors.push('Event name is required and must be a string');\n }\n\n if (!this.sdkInstance) {\n errors.push('SDK instance is null or undefined');\n }\n\n if (this.sdkInstance && typeof this.sdkInstance.trackCustomEvent !== 'function') {\n errors.push(`trackCustomEvent is not a function: ${typeof this.sdkInstance.trackCustomEvent}`);\n }\n\n if (!window || typeof window !== 'object') {\n errors.push('Window object is not available');\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n }\n\n\n // Legacy handlers removed - now using enhanced event delegation system\n // All tracking is now handled by createEnhancedScrollHandler and createReactCompatibleClickHandler\n\n /**\n * Modern API: Refresh tracking for dynamic content (React/SPA support)\n * Industry best practice for SPA route changes\n */\n refreshTracking(): void {\n if (!this.isInitialized) {\n if (this.config.debug) {\n console.log('[AutoTracker] Not initialized, cannot refresh tracking');\n }\n return;\n }\n\n if (this.config.debug) {\n console.log('[AutoTracker] Refreshing tracking for dynamic content...');\n }\n\n // Re-process elements for view tracking (only thing that needs setup)\n this.processExistingElements();\n\n // Log current state\n if (this.config.debug) {\n this.logFoundElements();\n }\n }\n\n /**\n * Legacy method - use refreshTracking() instead\n * @deprecated Use refreshTracking() for better performance\n */\n rescan(): void {\n this.refreshTracking();\n }\n\n /**\n * Get comprehensive diagnostic information for debugging\n */\n getDiagnostics(): object {\n // Create manual test functions\n const manualTests = {\n triggerScrollHandler: () => {\n if (this.config.debug) {\n console.log(\"[🧪 AutoTracker] Manual scroll handler trigger\");\n }\n const handler = this.delegationHandlers.get('scroll');\n if (handler) {\n handler(new Event('scroll'));\n } else {\n console.error(\"[❌ AutoTracker] No scroll handler found\");\n }\n },\n \n forceScrollEvent: (elementSelector: string) => {\n const element = document.querySelector(elementSelector);\n if (!element) {\n console.error(`[❌ AutoTracker] Element not found: ${elementSelector}`);\n return;\n }\n \n const eventName = element.getAttribute('data-track-scroll');\n if (!eventName) {\n console.error(`[❌ AutoTracker] Element has no data-track-scroll: ${elementSelector}`);\n return;\n }\n \n console.log(`[🧪 AutoTracker] Force triggering scroll event: ${eventName}`);\n \n // Reset trigger state\n element.removeAttribute('data-scroll-triggered');\n \n // Force trigger\n this.processScrollElementEnhanced(element);\n },\n \n testTrackEvent: (eventName: string = 'test_event') => {\n console.log(`[🧪 AutoTracker] Testing trackEvent: ${eventName}`);\n this.trackEvent(eventName, {\n type: 'test',\n source: 'manual_diagnostic',\n timestamp: Date.now()\n });\n },\n\n testIntersectionObserver: () => {\n console.log(`[🧪 AutoTracker] Testing IntersectionObserver setup`);\n const scrollElements = document.querySelectorAll('[data-track-scroll]');\n console.log(`Found ${scrollElements.length} scroll elements for IntersectionObserver`);\n \n if (this.intersectionObserver && scrollElements.length > 0) {\n const firstElement = scrollElements[0];\n if (firstElement) {\n console.log('Testing first element:', firstElement.getAttribute('data-track-scroll'));\n \n // Temporarily remove triggered state for testing\n firstElement.removeAttribute('data-scroll-triggered');\n \n // Re-observe for testing\n this.intersectionObserver.observe(firstElement);\n console.log('Re-observing element for test...');\n }\n }\n },\n\n testScrollFallback: () => {\n console.log(`[🧪 AutoTracker] Testing scroll fallback mechanism`);\n const handler = this.delegationHandlers.get('scroll');\n if (handler) {\n console.log('Triggering fallback scroll handler...');\n handler(new Event('scroll'));\n } else {\n console.log('No scroll handler found in delegation handlers');\n }\n }\n };\n \n // Expose tests globally for easy access\n if (typeof window !== 'undefined') {\n (window as any).autoTrackerTests = manualTests;\n }\n\n return {\n // Initialization status\n initialization: {\n isInitialized: this.isInitialized,\n attempts: this.initializationAttempts,\n maxAttempts: this.maxInitializationAttempts,\n timestamp: new Date().toISOString()\n },\n\n // Event handlers status\n eventHandlers: {\n hasClickHandler: this.delegationHandlers.has('click'),\n hasScrollHandler: this.delegationHandlers.has('scroll'),\n activeHandlers: Array.from(this.delegationHandlers.keys()),\n delegationTarget: this.getOptimalDelegationTarget() === document ? 'document' : 'react-root'\n },\n\n // Observers status\n observers: {\n observedElements: this.observedElements.size,\n hasMutationObserver: !!this.mutationObserver,\n hasIntersectionObserver: !!this.intersectionObserver,\n scrollElementsCache: !!this.cachedScrollElements,\n cacheExpiry: new Date(this.lastScrollElementsCheck + 5000).toISOString()\n },\n\n // Configuration\n config: this.config,\n\n // Current environment diagnostics\n environment: this.diagnostics.environment || {},\n \n // DOM state\n dom: this.diagnostics.dom || {},\n\n // SDK state\n tracking: this.diagnostics.tracking || {},\n\n // Real-time element detection\n elementsFound: this.getElementCounts(),\n\n // Performance metrics\n performance: {\n lastScrollThrottle: this.scrollThrottle,\n cacheLastUpdate: this.lastScrollElementsCheck\n },\n\n // Validation status\n validation: this.validateTrackingCall('test', {}),\n\n // Debug recommendations\n recommendations: this.generateRecommendations(),\n \n // Manual testing functions\n manualTests: {\n available: true,\n usage: {\n triggerScrollHandler: 'window.autoTrackerTests.triggerScrollHandler()',\n forceScrollEvent: 'window.autoTrackerTests.forceScrollEvent(\"[data-track-scroll]\")',\n testTrackEvent: 'window.autoTrackerTests.testTrackEvent(\"my_event\")',\n testIntersectionObserver: 'window.autoTrackerTests.testIntersectionObserver()',\n testScrollFallback: 'window.autoTrackerTests.testScrollFallback()'\n },\n description: 'Use these functions in the browser console to manually test the AutoTracker'\n }\n };\n }\n\n /**\n * Generate diagnostic recommendations\n */\n private generateRecommendations(): string[] {\n const recommendations: string[] = [];\n const elementsFound = this.getElementCounts();\n const totalElements = Object.values(elementsFound).reduce((sum: number, count) => sum + (count as number), 0);\n\n if (!this.isInitialized) {\n recommendations.push('AutoTracker is not initialized. Check console for errors.');\n }\n\n if (totalElements === 0) {\n recommendations.push('No trackable elements found. Ensure data-track-* attributes are present in the DOM.');\n }\n\n if (!this.sdkInstance) {\n recommendations.push('SDK instance is missing. Ensure the SDK is properly initialized.');\n }\n\n if (this.sdkInstance && typeof this.sdkInstance.trackCustomEvent !== 'function') {\n recommendations.push('trackCustomEvent method is not available on SDK instance.');\n }\n\n if (!this.diagnostics.environment?.reactDetected && window.location.hostname.includes('localhost')) {\n recommendations.push('React not detected. If using React, ensure proper setup and try refreshTracking() after route changes.');\n }\n\n if (this.diagnostics.environment?.isMobile && !this.delegationHandlers.has('scroll')) {\n recommendations.push('Mobile device detected but scroll tracking not active. Check scroll tracking configuration.');\n }\n\n if (this.initializationAttempts > 1) {\n recommendations.push(`AutoTracker required ${this.initializationAttempts} initialization attempts. Consider adding delay before enabling.`);\n }\n\n return recommendations;\n }\n\n /**\n * Configurar tracking\n */\n configure(config: Partial<AutoTrackerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Enhanced stats with diagnostic information\n */\n getStats(): { observedElements: number; config: AutoTrackerConfig; isModern: boolean; diagnostics?: object } {\n return {\n observedElements: this.observedElements.size,\n config: this.config,\n isModern: this.isInitialized, // Indicates if using new delegation system\n diagnostics: this.config.debug ? this.getDiagnostics() : undefined\n };\n }\n}\n","/**\n * Centralized Session Utilities\n * Standardized session ID generation for consistency across SDK and backend\n */\n\n/**\n * Generate standardized session ID\n * Format: visitorId_YYYYMMDD_HH\n * Example: f697a6e1-1aae-48db-bc6a-afc1d2c01852_20251231_03\n */\nexport function generateSessionId(visitorId: string, date?: Date): string {\n const sessionDate = date || new Date();\n \n // Format: YYYYMMDD\n const year = sessionDate.getFullYear();\n const month = (sessionDate.getMonth() + 1).toString().padStart(2, '0');\n const day = sessionDate.getDate().toString().padStart(2, '0');\n const dateStr = `${year}${month}${day}`;\n \n // Format: HH (24-hour format)\n const hour = sessionDate.getHours().toString().padStart(2, '0');\n \n return `${visitorId}_${dateStr}_${hour}`;\n}\n\n/**\n * Parse session ID to extract components\n * @param sessionId - Session ID in format visitorId_YYYYMMDD_HH\n * @returns Object with parsed components\n */\nexport function parseSessionId(sessionId: string): {\n visitorId: string;\n date: Date;\n isValid: boolean;\n} {\n try {\n const parts = sessionId.split('_');\n \n if (parts.length < 3) {\n return { visitorId: sessionId, date: new Date(), isValid: false };\n }\n \n // Extract components\n const datePart = parts[parts.length - 2]; // YYYYMMDD\n const hourPart = parts[parts.length - 1]; // HH\n const visitorId = parts.slice(0, -2).join('_'); // Everything before date/hour\n \n // Validate parts exist\n if (!datePart || !hourPart || datePart.length !== 8) {\n return { visitorId: sessionId, date: new Date(), isValid: false };\n }\n \n // Parse date\n const year = parseInt(datePart.substring(0, 4));\n const month = parseInt(datePart.substring(4, 6)) - 1; // Month is 0-indexed\n const day = parseInt(datePart.substring(6, 8));\n const hour = parseInt(hourPart);\n \n // Validate components\n if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hour)) {\n return { visitorId: sessionId, date: new Date(), isValid: false };\n }\n \n const date = new Date(year, month, day, hour);\n \n return {\n visitorId,\n date,\n isValid: true\n };\n } catch (error) {\n return { visitorId: sessionId, date: new Date(), isValid: false };\n }\n}\n\n/**\n * Check if session ID follows the standard format\n */\nexport function isValidSessionIdFormat(sessionId: string): boolean {\n return parseSessionId(sessionId).isValid;\n}\n\n/**\n * Generate session ID for current time\n */\nexport function generateCurrentSessionId(visitorId: string): string {\n return generateSessionId(visitorId, new Date());\n}\n\n/**\n * Migration helper: Convert legacy session IDs to new format\n * Handles different legacy formats and converts them\n */\nexport function migrateLegacySessionId(\n legacySessionId: string, \n visitorId: string,\n fallbackDate?: Date\n): string {\n // If it's already in the correct format, return as-is\n if (isValidSessionIdFormat(legacySessionId)) {\n return legacySessionId;\n }\n \n // For legacy formats, generate new session ID\n const date = fallbackDate || new Date();\n return generateSessionId(visitorId, date);\n}\n\n/**\n * Validate session ID consistency between different sources\n * Returns validation result with recommendations\n */\nexport function validateSessionIdConsistency(sessionIds: {\n replay?: string;\n event?: string;\n session?: string;\n client?: string;\n}): {\n isConsistent: boolean;\n inconsistencies: string[];\n recommendedSessionId: string | null;\n details: {\n visitorIds: string[];\n dates: string[];\n hours: number[];\n };\n} {\n const ids = Object.entries(sessionIds).filter(([_, id]) => id && id.length > 0);\n \n if (ids.length === 0) {\n return {\n isConsistent: false,\n inconsistencies: ['No session IDs provided'],\n recommendedSessionId: null,\n details: { visitorIds: [], dates: [], hours: [] }\n };\n }\n\n const parsed = ids.map(([source, id]) => ({\n source,\n id,\n parsed: parseSessionId(id)\n }));\n\n const validIds = parsed.filter(p => p.parsed.isValid);\n \n if (validIds.length === 0) {\n return {\n isConsistent: false,\n inconsistencies: ['All session IDs have invalid format'],\n recommendedSessionId: null,\n details: { visitorIds: [], dates: [], hours: [] }\n };\n }\n\n // Extract components\n const visitorIds = [...new Set(validIds.map(p => p.parsed.visitorId))];\n const dates = [...new Set(validIds.map(p => p.parsed.date.toDateString()))];\n const hours = [...new Set(validIds.map(p => p.parsed.date.getHours()))];\n\n const inconsistencies: string[] = [];\n\n // Check visitor ID consistency\n if (visitorIds.length > 1) {\n inconsistencies.push(`Multiple visitor IDs: ${visitorIds.join(', ')}`);\n }\n\n // Check date consistency (should be same day)\n if (dates.length > 1) {\n inconsistencies.push(`Multiple dates: ${dates.join(', ')}`);\n }\n\n // Check hour consistency (acceptable if within session timeout)\n if (hours.length > 1) {\n const hourDiff = Math.max(...hours) - Math.min(...hours);\n if (hourDiff > 1) { // More than 1 hour difference is suspicious\n inconsistencies.push(`Large hour difference: ${hours.join(', ')} (${hourDiff}h apart)`);\n }\n }\n\n // Recommend most recent valid session ID\n const sortedByTime = validIds.sort((a, b) => b.parsed.date.getTime() - a.parsed.date.getTime());\n const recommendedSessionId = sortedByTime[0]?.id || null;\n\n return {\n isConsistent: inconsistencies.length === 0,\n inconsistencies,\n recommendedSessionId,\n details: { visitorIds, dates, hours }\n };\n}\n\n/**\n * Find session replay with fallback to visitor ID matching\n * Used when exact session ID match fails due to hour differences\n */\nexport async function findSessionReplayWithFallback(\n db: any,\n sessionReplaysTable: any,\n workspaceId: string,\n sessionId: string,\n logger?: any\n): Promise<any> {\n // Import drizzle-orm operators at the beginning\n const { and, eq, gte, lte, desc } = await import(\"drizzle-orm\");\n \n // First, try exact session ID match\n const [exactMatch] = await db\n .select()\n .from(sessionReplaysTable)\n .where(\n and(\n eq(sessionReplaysTable.workspaceId, workspaceId),\n eq(sessionReplaysTable.sessionId, sessionId)\n )\n )\n .limit(1);\n\n if (exactMatch) {\n return exactMatch;\n }\n\n // If not found, try visitor ID fallback\n const sessionInfo = parseSessionId(sessionId);\n \n if (!sessionInfo.isValid) {\n return null;\n }\n\n if (logger) {\n logger.info({\n workspaceId,\n requestedSessionId: sessionId,\n extractedVisitorId: sessionInfo.visitorId,\n }, \"Exact session ID not found, trying visitor ID fallback\");\n }\n\n // Look for replays with same visitor ID on the same day\n const startOfDay = new Date(sessionInfo.date);\n startOfDay.setHours(0, 0, 0, 0);\n const endOfDay = new Date(sessionInfo.date);\n endOfDay.setHours(23, 59, 59, 999);\n\n const candidateReplays = await db\n .select()\n .from(sessionReplaysTable)\n .where(\n and(\n eq(sessionReplaysTable.workspaceId, workspaceId),\n gte(sessionReplaysTable.timestamp, startOfDay),\n lte(sessionReplaysTable.timestamp, endOfDay)\n )\n )\n .orderBy(desc(sessionReplaysTable.timestamp))\n .limit(10);\n\n // Filter by visitor ID extracted from session ID\n const matchingReplays = candidateReplays.filter((replay: any) => {\n const replaySessionInfo = parseSessionId(replay.sessionId);\n return replaySessionInfo.isValid && \n replaySessionInfo.visitorId === sessionInfo.visitorId;\n });\n\n if (matchingReplays.length > 0) {\n const foundReplay = matchingReplays[0];\n \n if (logger) {\n logger.info({\n workspaceId,\n requestedSessionId: sessionId,\n foundSessionId: foundReplay.sessionId,\n visitorId: sessionInfo.visitorId,\n totalMatches: matchingReplays.length,\n }, \"Found replay by visitor ID fallback\");\n }\n \n return foundReplay;\n }\n\n return null;\n}","/**\n * Visitor Persistence Manager for SDK\n * Implements client-side visitor identification with localStorage camouflage\n */\n\nimport { generateCurrentSessionId } from \"../utils/session-utils\";\n\n// Camuflaged storage keys to avoid detection/blocking\nconst STORAGE_KEYS = {\n session: \"__zp_s\", // Session identifier\n visitor: \"__zp_v\", // Visitor identifier (camuflado)\n device: \"__zp_d\", // Device fingerprint cache\n prefs: \"__zp_p\", // User preferences (decoy storage)\n analytics: \"__zp_a\", // Analytics preferences (additional decoy)\n} as const;\n\ninterface VisitorIdentity {\n visitorId?: string; // Now optional - will be set by backend response\n sessionId: string;\n stableCoreHash: string;\n deviceFingerprint?: string;\n persistenceMethod: \"localStorage\" | \"sessionStorage\" | \"cookie\" | \"memory\";\n confidence: number;\n createdAt: number;\n lastSeen: number;\n reused: boolean;\n pendingBackendResponse?: boolean; // Flag to indicate waiting for backend response\n}\n\ninterface CamouflagedData {\n theme: \"auto\" | \"light\" | \"dark\";\n lang: string;\n tz: string;\n analytics: boolean;\n cookies: boolean;\n _v: string; // Hidden visitor ID\n _s: string; // Hidden session ID\n _sc: string; // Hidden stable core\n _vb?: boolean; // Flag: visitor ID from backend (v1.7.0+)\n ts: number;\n}\n\n/**\n * Multi-layer persistence manager with fallbacks\n */\nclass PersistenceManager {\n private static memoryStore = new Map<string, string>();\n\n // 1. LocalStorage (primary) - Most persistent\n static setLocal(key: string, value: string): boolean {\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n localStorage.setItem(key, value);\n return true;\n }\n } catch (e) {\n // Storage disabled/private mode\n }\n return false;\n }\n\n static getLocal(key: string): string | null {\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n return localStorage.getItem(key);\n }\n } catch (e) {\n // Storage disabled/private mode\n }\n return null;\n }\n\n // 2. SessionStorage (secondary) - Session-only\n static setSession(key: string, value: string): boolean {\n try {\n if (typeof window !== \"undefined\" && window.sessionStorage) {\n sessionStorage.setItem(key, value);\n return true;\n }\n } catch (e) {\n // Storage disabled/private mode\n }\n return false;\n }\n\n static getSession(key: string): string | null {\n try {\n if (typeof window !== \"undefined\" && window.sessionStorage) {\n return sessionStorage.getItem(key);\n }\n } catch (e) {\n // Storage disabled/private mode\n }\n return null;\n }\n\n // 3. Cookie (tertiary) - Cross-session with expiration\n static setCookie(key: string, value: string, days = 365): boolean {\n try {\n if (typeof document !== \"undefined\") {\n const expires = new Date(\n Date.now() + days * 24 * 60 * 60 * 1000\n ).toUTCString();\n document.cookie = `${key}=${value}; expires=${expires}; path=/; SameSite=Lax`;\n return true;\n }\n } catch (e) {\n // Cookies disabled\n }\n return false;\n }\n\n static getCookie(key: string): string | null {\n try {\n if (typeof document !== \"undefined\") {\n const name = key + \"=\";\n const decodedCookie = decodeURIComponent(document.cookie);\n const ca = decodedCookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n if (c) {\n while (c.charAt(0) === \" \") {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n }\n }\n } catch (e) {\n // Cookies disabled\n }\n return null;\n }\n\n // 4. Memory (fallback) - Current session only\n static setMemory(key: string, value: string): boolean {\n this.memoryStore.set(key, value);\n return true;\n }\n\n static getMemory(key: string): string | null {\n return this.memoryStore.get(key) || null;\n }\n\n // Multi-layer get with fallbacks\n static get(key: string): { value: string | null; method: string } {\n // Try localStorage first (most persistent)\n let value = this.getLocal(key);\n if (value) return { value, method: \"localStorage\" };\n\n // Try sessionStorage (session-only)\n value = this.getSession(key);\n if (value) return { value, method: \"sessionStorage\" };\n\n // Try cookies (cross-session)\n value = this.getCookie(key);\n if (value) return { value, method: \"cookie\" };\n\n // Try memory (current session)\n value = this.getMemory(key);\n if (value) return { value, method: \"memory\" };\n\n return { value: null, method: \"none\" };\n }\n\n // Multi-layer set with fallbacks\n static set(key: string, value: string): { success: boolean; method: string } {\n // Try localStorage first (most persistent)\n if (this.setLocal(key, value)) {\n return { success: true, method: \"localStorage\" };\n }\n\n // Try sessionStorage (session-only)\n if (this.setSession(key, value)) {\n return { success: true, method: \"sessionStorage\" };\n }\n\n // Try cookies (cross-session)\n if (this.setCookie(key, value)) {\n return { success: true, method: \"cookie\" };\n }\n\n // Fallback to memory (current session)\n this.setMemory(key, value);\n return { success: true, method: \"memory\" };\n }\n}\n\n/**\n * Advanced Visitor Identity Manager with Camouflaged Storage\n * REFACTORED: No longer generates visitor IDs locally - only manages persistence\n * Backend is the single source of truth for visitor IDs\n */\nexport class VisitorIdentityManager {\n // REMOVED: generateVisitorId() and generateVisitorIdFromHash() methods\n // SDK no longer generates visitor IDs - only backend does\n\n private generateSessionId(): string {\n // Try to get existing visitor identity from storage\n const { value: storedData } = PersistenceManager.get(STORAGE_KEYS.prefs);\n \n if (storedData) {\n try {\n const parsed = JSON.parse(storedData);\n if (parsed._v && parsed._vb === true) {\n // We have a valid visitor ID from backend\n return generateCurrentSessionId(parsed._v);\n }\n } catch (e) {\n // Invalid data, continue to fallback\n }\n }\n \n // Fallback for cases where visitor ID is not available yet\n const tempVisitorId = \"temp-\" + Date.now().toString(36);\n return generateCurrentSessionId(tempVisitorId);\n }\n\n private createCamouflageData(\n visitorId: string,\n sessionId: string,\n stableCoreHash: string,\n fromBackend: boolean = false\n ): CamouflagedData {\n return {\n theme: \"auto\",\n lang: (navigator.language || \"en-US\").substring(0, 2),\n tz: Intl.DateTimeFormat().resolvedOptions().timeZone,\n analytics: true,\n cookies: true,\n _v: visitorId, // Hidden visitor ID\n _s: sessionId, // Hidden session ID\n _sc: stableCoreHash, // Hidden stable core\n _vb: fromBackend ? true : undefined, // Flag: visitor ID from backend (v1.7.0+)\n ts: Date.now(),\n };\n }\n\n private extractFromCamouflage(data: string): VisitorIdentity | null {\n try {\n const parsed: CamouflagedData = JSON.parse(data);\n\n // CRITICAL: Only return visitor ID if it came from backend (v1.7.0+)\n // This invalidates visitor IDs generated by previous SDK versions\n if (parsed._v && parsed._s && parsed._sc && parsed._vb === true) {\n return {\n visitorId: parsed._v,\n sessionId: parsed._s,\n stableCoreHash: parsed._sc,\n persistenceMethod: \"localStorage\" as const,\n confidence: 0.95,\n createdAt: parsed.ts || Date.now(),\n lastSeen: Date.now(),\n reused: true,\n };\n }\n\n // If visitor ID exists but doesn't have backend flag, ignore it\n if (parsed._v && !parsed._vb) {\n console.log(\n \"[VisitorIdentityManager] Ignoring visitor ID from previous SDK version (no backend flag)\"\n );\n return null;\n }\n } catch (e) {\n // Invalid data\n }\n return null;\n }\n\n /**\n * REFACTORED: Get existing visitor identity or prepare for backend response\n * No longer generates visitor IDs - waits for backend to provide them\n */\n async getOrCreateVisitorIdentity(params: {\n fingerprintHash: string;\n stableCoreHash: string;\n deviceFingerprint: string;\n sessionId?: string;\n userAgent?: string;\n ipAddress?: string;\n }): Promise<VisitorIdentity> {\n const { stableCoreHash } = params;\n\n // Try to recover existing identity from camouflaged storage\n const { value: storedData, method } = PersistenceManager.get(\n STORAGE_KEYS.prefs\n );\n\n if (storedData) {\n const existingIdentity = this.extractFromCamouflage(storedData);\n if (\n existingIdentity &&\n existingIdentity.stableCoreHash === stableCoreHash &&\n existingIdentity.visitorId\n ) {\n // Update last seen time only if we have a valid visitor ID from backend\n const updatedCamouflage = this.createCamouflageData(\n existingIdentity.visitorId,\n existingIdentity.sessionId,\n stableCoreHash\n );\n\n PersistenceManager.set(\n STORAGE_KEYS.prefs,\n JSON.stringify(updatedCamouflage)\n );\n\n return {\n ...existingIdentity,\n persistenceMethod: method as any,\n lastSeen: Date.now(),\n reused: true,\n };\n }\n }\n\n // CHANGED: Create identity without visitor ID - will be set by backend response\n const newSessionId = params.sessionId || this.generateSessionId();\n\n const newIdentity: VisitorIdentity = {\n // visitorId: undefined, // Will be set when backend responds\n sessionId: newSessionId,\n stableCoreHash,\n deviceFingerprint: params.deviceFingerprint,\n persistenceMethod: \"memory\", // Start with memory, upgrade after backend response\n confidence: 0.9,\n createdAt: Date.now(),\n lastSeen: Date.now(),\n reused: false,\n pendingBackendResponse: true, // Flag to indicate waiting for backend\n };\n\n return newIdentity;\n }\n\n /**\n * NEW: Update visitor identity with visitor ID received from backend\n * This is called after backend responds with the definitive visitor ID\n */\n async updateVisitorIdFromBackend(\n visitorId: string,\n stableCoreHash: string,\n sessionId?: string\n ): Promise<boolean> {\n try {\n // Create or update camouflaged data with backend visitor ID\n // Regenerate session ID with proper visitor ID if needed\n let currentSessionId = sessionId || this.getCurrentSessionId();\n\n // If we have a temp session ID or no session ID, generate a new one with the proper visitor ID\n if (!currentSessionId || currentSessionId.includes(\"temp-\")) {\n currentSessionId = generateCurrentSessionId(visitorId);\n }\n\n const camouflageData = this.createCamouflageData(\n visitorId,\n currentSessionId,\n stableCoreHash,\n true // Mark as coming from backend\n );\n\n const { success, method } = PersistenceManager.set(\n STORAGE_KEYS.prefs,\n JSON.stringify(camouflageData)\n );\n\n if (success) {\n // Also update device fingerprint cache\n PersistenceManager.set(STORAGE_KEYS.device, stableCoreHash);\n\n return true;\n }\n\n return false;\n } catch (error) {\n console.error(\n \"[VisitorIdentityManager] Failed to update visitor ID from backend:\",\n error\n );\n return false;\n }\n }\n\n /**\n * Get current session ID from storage\n */\n getCurrentSessionId(): string | null {\n const { value: storedData } = PersistenceManager.get(STORAGE_KEYS.prefs);\n if (storedData) {\n const identity = this.extractFromCamouflage(storedData);\n return identity?.sessionId || null;\n }\n return null;\n }\n\n // Get current visitor ID without creating new one\n getCurrentVisitorId(): string | null {\n const { value: storedData } = PersistenceManager.get(STORAGE_KEYS.prefs);\n if (storedData) {\n const identity = this.extractFromCamouflage(storedData);\n return identity?.visitorId || null;\n }\n return null;\n }\n\n // Clear all stored identity data\n clearIdentity(): void {\n // Remove from all storage layers\n try {\n PersistenceManager.setLocal(STORAGE_KEYS.prefs, \"\");\n PersistenceManager.setLocal(STORAGE_KEYS.device, \"\");\n PersistenceManager.setSession(STORAGE_KEYS.prefs, \"\");\n PersistenceManager.setSession(STORAGE_KEYS.device, \"\");\n PersistenceManager.setCookie(STORAGE_KEYS.prefs, \"\", -1); // Expire immediately\n PersistenceManager.setCookie(STORAGE_KEYS.device, \"\", -1);\n PersistenceManager.setMemory(STORAGE_KEYS.prefs, \"\");\n PersistenceManager.setMemory(STORAGE_KEYS.device, \"\");\n } catch (e) {\n // Silent fail\n }\n }\n}\n","/**\n * Zaplier SDK v1.0.0\n * 100% Cookieless Analytics Tracking\n *\n * Main SDK class for client-side tracking integration\n */\n\nimport type {\n InternalConfig,\n ZaplierSDK as IZaplierSDK,\n PageViewEvent,\n SDKConfig,\n UserData,\n VisitorHistory,\n VisitorInfo,\n} from \"./types\";\n\nimport {\n getCompleteFingerprint,\n getLightweightFingerprint,\n} from \"./modules/fingerprint\";\n\nimport { AntiAdblockManager } from \"./modules/anti-adblock\";\nimport { HeatmapEngine } from \"./modules/heatmap\";\nimport { SessionReplayEngine } from \"./modules/session-replay\";\nimport { AutoTracker } from \"./modules/auto-tracker\";\nimport { VisitorIdentityManager } from \"./modules/visitor-persistence\";\nimport { generateCurrentSessionId } from \"./utils/session-utils\";\n\n/**\n * Default internal configuration\n */\nconst DEFAULT_CONFIG: Omit<InternalConfig, keyof SDKConfig> = {\n apiEndpoint: \"https://api.zaplier.com\",\n retryEnabled: true,\n maxRetries: 3,\n retryDelays: [1000, 2000, 4000],\n autoTrack: true,\n dedupeEnabled: true,\n fingerprintEnabled: true,\n presenceTracking: false,\n heartbeatInterval: 30000,\n scrollTracking: true,\n scrollDepthTracking: true,\n gdprCompliant: true,\n enhancedTracking: \"ask\",\n replaySampling: 0.1,\n replayMaskInputs: true,\n};\n\n/**\n * Main Zaplier SDK Class\n */\nexport class ZaplierSDK implements IZaplierSDK {\n public config: InternalConfig;\n public version = \"1.7.1\";\n\n private visitorId?: string; // Client-side (deprecated). Do not use.\n private backendVisitorId?: string; // Real visitor ID from backend (UUID)\n private sessionId?: string;\n private fingerprint?: any;\n private isInitialized = false;\n private eventQueue: any[] = [];\n\n // Enhanced tracking engines\n private replayEngine?: SessionReplayEngine;\n private heatmapEngine?: HeatmapEngine;\n private antiAdblockManager?: AntiAdblockManager;\n private autoTracker?: AutoTracker;\n private visitorIdentityManager?: VisitorIdentityManager;\n\n constructor(userConfig: SDKConfig) {\n // Validate required config\n if (!userConfig.token) {\n throw new Error(\"Zaplier: token is required\");\n }\n\n // Merge user config with defaults\n this.config = {\n ...DEFAULT_CONFIG,\n ...userConfig,\n gdprMode: userConfig.gdprMode ?? false,\n };\n\n // Auto-initialize if in browser\n if (typeof window !== \"undefined\") {\n this.initialize();\n }\n }\n\n /**\n * Initialize SDK - Non-blocking approach\n */\n private async initialize(): Promise<void> {\n try {\n if (this.config.debug) {\n console.log(\"[Zaplier] Initializing SDK v\" + this.version);\n }\n\n // Check localhost restriction\n if (!this.config.allow_localhost && this.isLocalhost()) {\n if (this.config.debug) {\n console.log(\"[Zaplier] Skipping tracking on localhost\");\n }\n return;\n }\n\n // CRITICAL: Initialize basic tracking immediately (non-blocking)\n this.isInitialized = true;\n\n // Auto-track page view if enabled (immediate, before fingerprinting)\n if (this.config.autoTrack) {\n this.trackPageView();\n }\n\n // Process any queued events immediately\n this.processEventQueue();\n\n // PERFORMANCE: Defer heavy operations to avoid blocking main thread\n this.deferHeavyOperations();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Core SDK initialized (deferring heavy operations)\");\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] SDK initialized successfully\", {\n visitorId: this.visitorId,\n gdprMode: this.config.gdprMode,\n });\n }\n } catch (error) {\n console.error(\"[Zaplier] Initialization failed:\", error);\n }\n }\n\n /**\n * Defer heavy operations to avoid blocking main thread\n */\n private deferHeavyOperations(): void {\n // Use requestIdleCallback for optimal performance, fallback to setTimeout\n const scheduleWork = (callback: () => void, timeout: number = 5000) => {\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(callback, { timeout });\n } else {\n setTimeout(callback, 100); // Small delay fallback\n }\n };\n\n // Schedule fingerprinting when browser is idle\n scheduleWork(async () => {\n try {\n await this.collectFingerprint();\n if (this.config.debug) {\n console.log(\"[Zaplier] Fingerprint collected (deferred)\");\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Deferred fingerprinting failed:\", error);\n }\n }\n }, 3000);\n\n // Schedule anti-adblock initialization\n scheduleWork(() => {\n this.initializeAntiAdblock();\n if (this.config.debug) {\n console.log(\"[Zaplier] Anti-adblock initialized (deferred)\");\n }\n }, 1000);\n\n // Schedule tracking engines initialization\n scheduleWork(() => {\n this.initializeTrackingEngines();\n if (this.config.debug) {\n console.log(\"[Zaplier] Tracking engines initialized (deferred)\");\n }\n }, 2000);\n\n // Schedule auto tracker initialization \n scheduleWork(() => {\n this.initializeAutoTracker();\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracker initialized (deferred)\");\n }\n }, 1500);\n }\n\n /**\n * Initialize tracking engines (Session Replay & Heatmap)\n */\n private initializeTrackingEngines(): void {\n try {\n // Generate session ID once and only once during initialization\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n if (this.config.debug) {\n console.log(\"[Zaplier] Generated session ID:\", this.sessionId);\n }\n }\n\n // Initialize Session Replay Engine\n if (this.config.replay) {\n // When replay is explicitly enabled, use 100% sample rate to ensure recording\n // The default replaySampling (0.1) is only for automatic/production sampling\n const sampleRate =\n this.config.replay === true ? 1.0 : this.config.replaySampling;\n\n this.replayEngine = new SessionReplayEngine(this.sessionId, this.backendVisitorId || 'unknown', {\n sampleRate: sampleRate,\n inactivityTimeout: 30000,\n pauseOnInactive: true,\n });\n\n // Connect SDK instance for transport\n this.replayEngine.setSDKInstance(this);\n\n const started = this.replayEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Session Replay started\", {\n started,\n sampleRate,\n isRecording: this.replayEngine.isRecording(),\n });\n }\n }\n\n // Initialize Heatmap Engine\n if (this.config.heatmap) {\n this.heatmapEngine = new HeatmapEngine(this.sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false, // Can be enabled via API\n });\n\n // Connect to anti-adblock manager for WebRTC transport\n if (this.antiAdblockManager) {\n this.heatmapEngine.setAntiAdblockManager(this.antiAdblockManager);\n }\n\n this.heatmapEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap tracking started\");\n }\n }\n } catch (error) {\n console.error(\"[Zaplier] Failed to initialize tracking engines:\", error);\n }\n }\n\n /**\n * Initialize Auto Tracker for data-* attributes\n */\n private initializeAutoTracker(): void {\n try {\n this.autoTracker = new AutoTracker(this, {\n enabled: true,\n trackClicks: true,\n trackScrolls: true,\n trackViews: true,\n trackHovers: true,\n trackForms: true,\n debug: this.config.debug,\n });\n\n this.autoTracker.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto Tracker initialized and started\");\n }\n } catch (error) {\n console.error(\"[Zaplier] Failed to initialize Auto Tracker:\", error);\n }\n }\n\n /**\n * Generate session ID using standardized format\n */\n private generateSessionId(): string {\n // Use centralized session generation with current visitor ID\n if (this.backendVisitorId) {\n return generateCurrentSessionId(this.backendVisitorId);\n }\n \n // Fallback for cases where backendVisitorId is not available yet\n // This should be rare and will be updated when visitor ID is available\n const tempVisitorId = this.visitorId || 'temp-' + Date.now().toString(36);\n return generateCurrentSessionId(tempVisitorId);\n }\n\n\n /**\n * Update tracking engines with new session ID to maintain consistency\n */\n private updateTrackingEnginesSessionId(newSessionId: string): void {\n try {\n // Update replay engine session ID if it exists and is recording\n if (this.replayEngine && this.replayEngine.isRecording()) {\n if (this.config.debug) {\n console.log(\"[Zaplier] Updating replay engine session ID:\", newSessionId);\n }\n // Stop current recording and restart with new session ID\n this.replayEngine.stop();\n this.replayEngine = new SessionReplayEngine(newSessionId, this.backendVisitorId || 'unknown', {\n sampleRate: 1.0, // Keep recording active\n inactivityTimeout: 30000,\n pauseOnInactive: true,\n });\n this.replayEngine.setSDKInstance(this);\n this.replayEngine.start();\n }\n\n // Update heatmap engine session ID if it exists and is recording\n if (this.heatmapEngine && this.heatmapEngine.isRecording()) {\n if (this.config.debug) {\n console.log(\"[Zaplier] Updating heatmap engine session ID:\", newSessionId);\n }\n // Stop current recording and restart with new session ID\n this.heatmapEngine.stop();\n this.heatmapEngine = new HeatmapEngine(newSessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false,\n });\n if (this.antiAdblockManager) {\n this.heatmapEngine.setAntiAdblockManager(this.antiAdblockManager);\n }\n this.heatmapEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Tracking engines updated with session ID:\", newSessionId);\n }\n } catch (error) {\n console.error(\"[Zaplier] Failed to update tracking engines session ID:\", error);\n }\n }\n\n /**\n * Initialize Anti-Adblock Manager\n */\n private initializeAntiAdblock(): void {\n try {\n this.antiAdblockManager = new AntiAdblockManager(\n this.config.apiEndpoint,\n this.config.token, // Pass token to anti-adblock manager\n {\n enabled: true,\n methods: [\"elysia-websocket\", \"fetch\"],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: this.config.debug,\n }\n );\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Anti-Adblock Manager initialized\");\n }\n } catch (error) {\n console.error(\n \"[Zaplier] Failed to initialize Anti-Adblock Manager:\",\n error\n );\n }\n }\n\n /**\n * Collect fingerprint and generate visitor ID (IMPROVED - 2024)\n * Enhanced with better incognito detection and localStorage persistence\n */\n private async collectFingerprint(): Promise<void> {\n try {\n // Initialize visitor identity manager\n this.visitorIdentityManager = new VisitorIdentityManager();\n \n // Use appropriate fingerprinting based on GDPR mode\n const result = this.config.gdprMode\n ? await getLightweightFingerprint()\n : await getCompleteFingerprint();\n\n if (result.success && result.data) {\n this.fingerprint = result.data;\n\n // ENHANCED: Include improved incognito detection in fingerprint data\n if (result.data.incognitoDetection) {\n // Store incognito detection results for better server-side analysis\n this.fingerprint.incognitoDetection = {\n ...result.data.incognitoDetection,\n // Add timestamp for analysis\n detectionTimestamp: Date.now(),\n // Add SDK version for debugging\n sdkVersion: this.version,\n };\n }\n\n // CHANGED: Check for existing visitor identity but don't set local visitor ID\n // Only backend generates visitor IDs now\n const visitorIdentity = await this.visitorIdentityManager.getOrCreateVisitorIdentity({\n fingerprintHash: result.data.hash,\n stableCoreHash: (result.data as any).stableCoreHash,\n // CRITICAL: Use stableCoreHash as deviceFingerprint for consistency with backend\n deviceFingerprint: (result.data as any).stableCoreHash || result.data.hash,\n sessionId: this.sessionId,\n userAgent: navigator.userAgent,\n ipAddress: undefined, // Will be determined server-side\n });\n\n // CHANGED: Only use visitor ID if it exists from previous backend response\n // Do not generate any visitor IDs locally\n if (visitorIdentity.visitorId && !visitorIdentity.pendingBackendResponse) {\n this.visitorId = visitorIdentity.visitorId;\n this.backendVisitorId = visitorIdentity.visitorId; // Ensure consistency\n }\n // If no visitor ID exists, leave both null - backend will provide it\n \n if (this.config.debug) {\n console.log(\"[Zaplier] Visitor identity resolved:\", {\n visitorId: this.visitorId,\n sessionId: this.sessionId,\n persistenceMethod: visitorIdentity.persistenceMethod,\n confidence: visitorIdentity.confidence,\n isNewVisitor: !visitorIdentity.reused,\n });\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Fingerprint collected:\", {\n components: result.collectedComponents,\n hashes: {\n full: result.data.hash,\n stableCore: (result.data as any).stableCoreHash,\n },\n gdprMode: this.config.gdprMode,\n incognitoDetected: result.data.incognitoDetection?.isIncognito,\n incognitoConfidence: result.data.incognitoDetection?.confidence,\n });\n }\n } else {\n throw new Error(\"Fingerprint collection failed\");\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Fingerprint collection failed:\", error);\n }\n // Fallback: collect entropy for diagnostics only; do NOT set local visitorId\n try {\n // Collect stable entropy sources (no random values for consistency)\n const entropyComponents = [\n navigator.userAgent || \"\",\n navigator.language || \"\",\n navigator.platform || \"\",\n screen.width || 0,\n screen.height || 0,\n screen.colorDepth || 0,\n new Date(2024, 0, 1).getTimezoneOffset(),\n // Hardware-specific (stable values)\n navigator.hardwareConcurrency || 0,\n (navigator as any).deviceMemory || 0,\n navigator.maxTouchPoints || 0,\n // Use page load time (stable during session) instead of current time\n performance.timeOrigin || 0,\n // Deterministic entropy from browser characteristics\n navigator.plugins ? navigator.plugins.length : 0,\n navigator.mimeTypes ? navigator.mimeTypes.length : 0,\n // Memory usage pattern (if available, use rounded values for stability)\n Math.floor(\n ((performance as any).memory?.usedJSHeapSize || 0) / 1000000\n ),\n Math.floor(\n ((performance as any).memory?.totalJSHeapSize || 0) / 1000000\n ),\n // Connection info (if available)\n (navigator as any).connection?.effectiveType || \"\",\n Math.floor((navigator as any).connection?.downlink || 0),\n // Additional browser-specific entropy\n window.outerHeight || 0,\n window.outerWidth || 0,\n Math.floor((window.devicePixelRatio || 1) * 100) / 100, // Round to 2 decimals\n // Canvas support (deterministic)\n typeof document.createElement(\"canvas\").getContext === \"function\"\n ? 1\n : 0,\n ];\n\n // Create deterministic entropy string\n const entropyString = entropyComponents.join(\"|\");\n\n // Add deterministic checksum instead of random values\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum =\n ((checksum << 5) - checksum + entropyString.charCodeAt(i)) &\n 0xffffffff;\n }\n const deterministic = Math.abs(checksum).toString(36);\n\n // Advanced hash function with better distribution\n let hash = 0;\n const finalString = entropyString + deterministic;\n for (let i = 0; i < finalString.length; i++) {\n const char = finalString.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n hash = hash ^ (hash >>> 16); // XOR with shifted bits for better distribution\n }\n\n if (!this.fingerprint) this.fingerprint = {} as any;\n (this.fingerprint as any).fallbackEntropy = Math.abs(hash).toString(36);\n } catch {\n // Last resort: noop\n }\n }\n }\n\n /**\n * Check if running on localhost\n */\n private isLocalhost(): boolean {\n if (typeof window === \"undefined\" || !window.location) return false;\n return (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\" ||\n window.location.hostname.startsWith(\"192.168.\") ||\n window.location.hostname.startsWith(\"10.\") ||\n window.location.hostname.includes(\"local\")\n );\n }\n\n /**\n * Extract UTM parameters from current URL\n */\n private extractUTMParameters(): Record<string, string> {\n const utmParams: Record<string, string> = {};\n \n if (typeof window === \"undefined\" || !window.location) {\n return utmParams;\n }\n\n try {\n const urlParams = new URLSearchParams(window.location.search);\n \n // Extract UTM parameters (camelCase for consistency with backend)\n const utmSource = urlParams.get('utm_source');\n const utmMedium = urlParams.get('utm_medium'); \n const utmCampaign = urlParams.get('utm_campaign');\n const utmContent = urlParams.get('utm_content');\n const utmTerm = urlParams.get('utm_term');\n\n // Extract click IDs\n const fbclid = urlParams.get('fbclid');\n const gclid = urlParams.get('gclid');\n const ttclid = urlParams.get('ttclid');\n\n // Extract ad platform parameters\n const creativeId = urlParams.get('creative_id');\n const adId = urlParams.get('ad_id');\n const adsetId = urlParams.get('adset_id');\n const campaignId = urlParams.get('campaign_id');\n const platform = urlParams.get('platform');\n\n // Add to result object (only non-null values)\n if (utmSource) utmParams.utmSource = utmSource;\n if (utmMedium) utmParams.utmMedium = utmMedium;\n if (utmCampaign) utmParams.utmCampaign = utmCampaign;\n if (utmContent) utmParams.utmContent = utmContent;\n if (utmTerm) utmParams.utmTerm = utmTerm;\n\n if (fbclid) utmParams.fbclid = fbclid;\n if (gclid) utmParams.gclid = gclid;\n if (ttclid) utmParams.ttclid = ttclid;\n\n if (creativeId) utmParams.creativeId = creativeId;\n if (adId) utmParams.adId = adId;\n if (adsetId) utmParams.adsetId = adsetId;\n if (campaignId) utmParams.campaignId = campaignId;\n if (platform) utmParams.platform = platform;\n\n if (this.config.debug && Object.keys(utmParams).length > 0) {\n console.log(\"[Zaplier] UTM parameters extracted from URL:\", utmParams);\n }\n\n } catch (error) {\n if (this.config.debug) {\n console.warn(\"[Zaplier] Failed to extract UTM parameters:\", error);\n }\n }\n\n return utmParams;\n }\n\n /**\n * Send event to backend\n */\n private async sendEvent(eventData: any): Promise<any> {\n if (!this.isInitialized) {\n this.eventQueue.push(eventData);\n return;\n }\n\n try {\n const payload = {\n // workspaceId moved to query parameter\n // CRITICAL: Only send visitor ID if it definitively came from backend\n // Never send locally generated visitor IDs from previous SDK versions\n visitorId: this.backendVisitorId || null,\n // Session ID (gerado por sessão)\n sessionId: this.sessionId,\n fingerprintHash: this.fingerprint?.hash,\n stableCoreHash: (this.fingerprint as any)?.stableCoreHash,\n stableCoreVector: (this.fingerprint as any)?.stableCoreVector,\n // Send complete fingerprint data for embedding generation (includes all components: canvas, webgl, audio, fonts, etc.)\n fingerprintVector: this.fingerprint || undefined,\n incognitoDetection:\n (this.fingerprint as any)?.incognitoDetection &&\n ((this.fingerprint as any).incognitoDetection.likelihood !==\n undefined ||\n ((this.fingerprint as any).incognitoDetection.methods &&\n (this.fingerprint as any).incognitoDetection.methods.length > 0))\n ? (this.fingerprint as any).incognitoDetection\n : undefined,\n isSafari:\n typeof navigator !== \"undefined\" &&\n /safari/i.test(navigator.userAgent) &&\n !/chrome|chromium|opr|edg|edge/i.test(navigator.userAgent),\n // Client Hints (quando disponíveis)\n ch: (navigator as any).userAgentData\n ? {\n brands: (navigator as any).userAgentData.brands || [],\n platform: (navigator as any).userAgentData.platform || undefined,\n mobile: (navigator as any).userAgentData.mobile || undefined,\n model: (navigator as any).userAgentData.model || undefined,\n }\n : undefined,\n fingerprintComponents: this.fingerprint?.components || {},\n \n // CRITICAL: Auto-extract UTM parameters from URL, but allow eventData to override\n ...this.extractUTMParameters(), // Auto-extracted UTM parameters (background)\n ...eventData, // User-provided event data (can override UTM parameters)\n \n timestamp: new Date().toISOString(),\n url:\n typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\",\n referrer: typeof document !== \"undefined\" ? document.referrer : \"\",\n pageTitle: typeof document !== \"undefined\" ? document.title : \"\",\n userAgent: typeof navigator !== \"undefined\" ? navigator.userAgent : \"\",\n // Use stabilized screen/viewport dimensions from fingerprint if available\n screenWidth:\n this.fingerprint?.screen?.value?.width ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.width\n : 0),\n screenHeight:\n this.fingerprint?.screen?.value?.height ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.height\n : 0),\n viewportWidth:\n this.fingerprint?.screen?.value?.viewportWidth ||\n (typeof window !== \"undefined\" ? window.innerWidth : 0),\n viewportHeight:\n this.fingerprint?.screen?.value?.viewportHeight ||\n (typeof window !== \"undefined\" ? window.innerHeight : 0),\n gdprMode: this.config.gdprMode,\n };\n\n const response = await this.makeRequest(\n `/tracking/event?token=${encodeURIComponent(this.config.token)}`,\n payload\n );\n\n // ENHANCED: Store backend visitor ID in both memory and persistent storage\n if (response.visitorId) {\n this.backendVisitorId = response.visitorId;\n \n // Update persistent storage with backend visitor ID\n if (this.visitorIdentityManager && this.fingerprint?.stableCoreHash) {\n try {\n await this.visitorIdentityManager.updateVisitorIdFromBackend(\n response.visitorId,\n (this.fingerprint as any).stableCoreHash,\n this.sessionId\n );\n \n if (this.config.debug) {\n console.log(\n \"[Zaplier] Backend visitor ID saved to localStorage:\",\n response.visitorId\n );\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to save backend visitor ID to storage:\", error);\n }\n }\n }\n \n if (this.config.debug) {\n console.log(\n \"[Zaplier] Backend visitor ID received and processed:\",\n response.visitorId\n );\n }\n }\n\n // CRITICAL: Only update session ID if we don't have one yet or if it's temporary\n // Once a session ID is established and tracking engines are started, keep it consistent\n // to prevent replay/event session ID mismatches\n if (response.sessionId && (!this.sessionId || this.sessionId.includes('temp-'))) {\n const oldSessionId = this.sessionId;\n this.sessionId = response.sessionId;\n \n // Update tracking engines with new session ID if they exist\n if (oldSessionId !== this.sessionId && this.sessionId) {\n this.updateTrackingEnginesSessionId(this.sessionId);\n }\n } else if (this.backendVisitorId && (!this.sessionId || this.sessionId.includes('temp-'))) {\n // Generate new session ID now that we have the proper visitor ID\n const oldSessionId = this.sessionId;\n this.sessionId = generateCurrentSessionId(this.backendVisitorId);\n \n // Update tracking engines with new session ID if they exist\n if (oldSessionId !== this.sessionId && this.sessionId) {\n this.updateTrackingEnginesSessionId(this.sessionId);\n }\n }\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Event sending failed:\", error);\n }\n\n // Retry logic\n if (this.config.retryEnabled) {\n // Queue for retry (simplified)\n setTimeout(() => this.sendEvent(eventData), 5000);\n }\n }\n }\n\n /**\n * Send session replay batch to backend\n */\n async sendReplayBatch(replayData: {\n sessionId: string;\n events: any[];\n metadata: any;\n }): Promise<any> {\n if (!this.isInitialized) {\n console.error(\"[Zaplier] SDK not initialized for replay batch sending\");\n return { success: false, error: \"SDK not initialized\" };\n }\n\n try {\n const payload = {\n sessionId: replayData.sessionId,\n userId: this.backendVisitorId,\n events: replayData.events,\n metadata: {\n ...replayData.metadata,\n visitorId: this.backendVisitorId,\n fingerprintHash: this.fingerprint?.hash,\n },\n };\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Sending replay batch:\", {\n sessionId: payload.sessionId,\n eventCount: payload.events.length,\n hasMetadata: !!payload.metadata,\n });\n }\n\n // Use anti-adblock transport or standard HTTP\n const result = await this.makeRequest(\n `/replays/record?token=${encodeURIComponent(this.config.token)}`,\n payload,\n \"POST\"\n );\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay batch result:\", result);\n }\n\n // CRITICAL: Synchronize session ID if backend returned a normalized one\n // This ensures all tracking components use the same session ID\n if (result.sessionId && result.sessionId !== this.sessionId) {\n const oldSessionId = this.sessionId;\n this.sessionId = result.sessionId;\n \n if (this.config.debug) {\n console.log(\"[Zaplier] Session ID synchronized from replay response:\", {\n oldSessionId,\n newSessionId: this.sessionId,\n originalSessionId: result.originalSessionId\n });\n }\n \n // Update all tracking engines with the normalized session ID\n if (oldSessionId !== this.sessionId && this.sessionId) {\n this.updateTrackingEnginesSessionId(this.sessionId);\n }\n }\n\n return result;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Replay batch sending failed:\", error);\n }\n return { success: false, error: error instanceof Error ? error.message : \"Unknown error\" };\n }\n }\n\n /**\n * Make HTTP request to backend using anti-adblock system\n */\n private async makeRequest(\n endpoint: string,\n data: any,\n method: \"GET\" | \"POST\" = \"POST\"\n ): Promise<any> {\n const url = `${this.config.apiEndpoint}${endpoint}`;\n\n // Always try standard fetch first to get the response JSON (which contains visitorId)\n // Use anti-adblock as fallback if standard fetch is blocked or fails\n const options: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n if (method === \"POST\" && data) {\n options.body = JSON.stringify(data);\n }\n\n try {\n // Add timeout to detect if fetch is blocked/hanging\n const fetchWithTimeout = Promise.race([\n fetch(url, options),\n new Promise<Response>((_, reject) =>\n setTimeout(\n () => reject(new Error(\"Fetch timeout - possibly blocked\")),\n 5000\n )\n ),\n ]);\n\n const response = await fetchWithTimeout;\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const jsonResponse = await response.json();\n\n // Return immediately - anti-adblock is only used as fallback when fetch fails\n return jsonResponse;\n } catch (error) {\n // If standard fetch fails (blocked, timeout, or network error), try anti-adblock as fallback\n if (this.antiAdblockManager && method === \"POST\") {\n if (this.config.debug) {\n console.warn(\n `[Zaplier] Standard fetch failed (${error instanceof Error ? error.message : String(error)}), trying anti-adblock fallback`\n );\n }\n\n try {\n const result = await this.antiAdblockManager.send(data, endpoint);\n\n if (result.success) {\n if (this.config.debug) {\n console.log(\n `[Zaplier] Request sent via ${result.method} (${result.latency}ms) as fallback`\n );\n }\n\n // Event was successfully sent via anti-adblock fallback\n // Note: visitorId will be obtained on the next successful request\n // (either standard fetch or anti-adblock) when the backend responds with it\n // This is acceptable because:\n // 1. The event was successfully tracked\n // 2. The visitorId will be available after the next event is sent\n // 3. Making an additional GET request here could also be blocked\n return { success: true, method: result.method };\n }\n } catch (antiAdblockError) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Both standard fetch and anti-adblock failed:\",\n antiAdblockError\n );\n }\n }\n }\n\n // Re-throw original error if all methods failed\n throw error;\n }\n }\n\n /**\n * Process queued events\n */\n private processEventQueue(): void {\n while (this.eventQueue.length > 0) {\n const event = this.eventQueue.shift();\n this.sendEvent(event);\n }\n }\n\n // Public API Methods\n\n /**\n * Track generic event\n */\n track(eventType: string, eventData?: Record<string, any>): void {\n this.sendEvent({\n eventType,\n eventName: eventType,\n customData: eventData,\n });\n }\n\n /**\n * Track custom event\n */\n trackCustomEvent(eventName: string, metadata?: Record<string, any>): boolean {\n this.sendEvent({\n eventType: \"custom\",\n eventName,\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track conversion event\n */\n trackConversion(\n eventName: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): boolean {\n this.sendEvent({\n eventType: \"conversion\",\n eventName,\n revenue: value,\n currency: currency || \"USD\",\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track page view\n */\n trackPageView(data?: Partial<PageViewEvent>): void {\n this.sendEvent({\n eventType: \"page_view\",\n eventName: \"page_view\",\n ...data,\n });\n }\n\n /**\n * Track purchase\n */\n trackPurchase(data: {\n value?: number;\n revenue?: number;\n currency?: string;\n quantity?: number;\n productId?: string;\n productName?: string;\n orderId?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"purchase\",\n eventName: \"purchase\",\n revenue: data.value || data.revenue,\n currency: data.currency || \"USD\",\n quantity: data.quantity || 1,\n productId: data.productId,\n customData: {\n productName: data.productName,\n orderId: data.orderId,\n ...data.customData,\n },\n });\n }\n\n /**\n * Track add to cart\n */\n trackAddToCart(data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"add_to_cart\",\n eventName: \"add_to_cart\",\n revenue: data?.price,\n quantity: data?.quantity || 1,\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track view content\n */\n trackViewContent(data?: {\n productId?: string;\n productName?: string;\n category?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"view_content\",\n eventName: \"view_content\",\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n category: data?.category,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track initiate checkout\n */\n trackInitiateCheckout(data?: {\n value?: number;\n currency?: string;\n numItems?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"initiate_checkout\",\n eventName: \"initiate_checkout\",\n revenue: data?.value,\n currency: data?.currency || \"USD\",\n quantity: data?.numItems,\n customData: data?.customData,\n });\n }\n\n /**\n * Track lead\n */\n trackLead(data?: Record<string, any>): void {\n this.sendEvent({\n eventType: \"lead\",\n eventName: \"lead\",\n customData: data,\n });\n }\n\n /**\n * Identify user\n */\n identify(userData: {\n email?: string;\n phone?: string;\n [key: string]: any;\n }): void {\n this.sendEvent({\n eventType: \"identify\",\n eventName: \"identify\",\n email: userData.email,\n phone: userData.phone,\n customData: userData,\n });\n }\n\n /**\n * Track SPA navigation\n */\n trackSPANavigation(url?: string, title?: string): void {\n this.trackPageView({\n url:\n url ||\n (typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\"),\n pageTitle:\n title || (typeof document !== \"undefined\" ? document.title : \"\"),\n });\n }\n\n /**\n * Reset scroll tracking\n */\n resetScrollTracking(): void {\n // Implementation for scroll tracking reset\n if (this.config.debug) {\n console.log(\"[Zaplier] Scroll tracking reset\");\n }\n }\n\n /**\n * Start presence tracking\n */\n startPresenceTracking(): void {\n this.config.presenceTracking = true;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking started\");\n }\n }\n\n /**\n * Stop presence tracking\n */\n stopPresenceTracking(): void {\n this.config.presenceTracking = false;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking stopped\");\n }\n }\n\n /**\n * Heatmap API\n */\n heatmap = {\n enable: (): void => {\n this.config.heatmap = true;\n\n if (!this.heatmapEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.heatmapEngine = new HeatmapEngine(sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false,\n });\n\n // Connect to anti-adblock manager\n if (this.antiAdblockManager) {\n this.heatmapEngine.setAntiAdblockManager(this.antiAdblockManager);\n }\n\n this.heatmapEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap enabled\");\n }\n },\n disable: (): void => {\n this.config.heatmap = false;\n\n if (this.heatmapEngine) {\n this.heatmapEngine.stop();\n this.heatmapEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap disabled\");\n }\n },\n enableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.enableMouseTracking();\n }\n },\n disableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.disableMouseTracking();\n }\n },\n getStats: () => {\n return this.heatmapEngine ? this.heatmapEngine.getStats() : null;\n },\n isRecording: (): boolean => {\n return this.heatmapEngine ? this.heatmapEngine.isRecording() : false;\n },\n };\n\n /**\n * Replay API\n */\n replay = {\n enable: (): void => {\n this.config.replay = true;\n\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n // When explicitly enabled, use 100% sample rate\n this.replayEngine = new SessionReplayEngine(sessionId, this.backendVisitorId || 'unknown', {\n sampleRate: 1.0, // Force 100% when explicitly enabled\n inactivityTimeout: 30000,\n pauseOnInactive: true,\n });\n\n // Connect to anti-adblock manager\n if (this.antiAdblockManager) {\n this.replayEngine.setSDKInstance(this);\n }\n\n const started = this.replayEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay enabled\", {\n started,\n isRecording: this.replayEngine.isRecording(),\n });\n }\n } else if (this.replayEngine) {\n // If engine already exists but isn't recording, recreate it with 100% sample rate\n if (!this.replayEngine.isRecording()) {\n // Stop and recreate with 100% sample rate\n this.replayEngine.stop();\n this.replayEngine = undefined;\n\n // Recreate with 100% sample rate\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, this.backendVisitorId || 'unknown', {\n sampleRate: 1.0, // Force 100% when explicitly enabled\n inactivityTimeout: 30000,\n pauseOnInactive: true,\n });\n\n // Connect to anti-adblock manager\n if (this.antiAdblockManager) {\n this.replayEngine.setSDKInstance(this);\n }\n\n const started = this.replayEngine.start();\n\n if (this.config.debug) {\n console.log(\n \"[Zaplier] Replay engine recreated with 100% sample rate\",\n { started, isRecording: this.replayEngine.isRecording() }\n );\n }\n } else {\n // Already recording, just log\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay already recording\");\n }\n }\n }\n\n if (this.config.debug && !this.replayEngine) {\n console.log(\n \"[Zaplier] Replay enabled (will start when SDK initializes)\"\n );\n }\n },\n disable: (): void => {\n this.config.replay = false;\n\n if (this.replayEngine) {\n this.replayEngine.stop();\n this.replayEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay disabled\");\n }\n },\n start: (): boolean => {\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, this.backendVisitorId || 'unknown', {\n sampleRate: 1.0, // Force recording when manually started\n inactivityTimeout: 30000,\n pauseOnInactive: true,\n });\n\n // Connect to anti-adblock manager\n if (this.antiAdblockManager) {\n this.replayEngine.setSDKInstance(this);\n }\n\n return this.replayEngine.start();\n }\n return this.replayEngine ? this.replayEngine.start() : false;\n },\n stop: (): void => {\n if (this.replayEngine) {\n this.replayEngine.stop();\n }\n },\n isRecording: (): boolean => {\n return this.replayEngine ? this.replayEngine.isRecording() : false;\n },\n getEventCount: (): number => {\n return this.replayEngine ? this.replayEngine.getEventCount() : 0;\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n this.sendEvent({\n eventType: \"funnel_step\",\n eventName: \"funnel_step\",\n customData: stepData,\n });\n },\n markConversion: (data: Record<string, any>): void => {\n this.trackConversion(\n \"funnel_conversion\",\n data.value,\n data.currency,\n data\n );\n },\n };\n\n /**\n * Auto Tracker API\n */\n autoTrack = {\n enable: (): void => {\n if (!this.autoTracker) {\n this.initializeAutoTracker();\n } else {\n this.autoTracker.configure({ enabled: true });\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracking enabled\");\n }\n },\n disable: (): void => {\n if (this.autoTracker) {\n this.autoTracker.stop();\n this.autoTracker = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracking disabled\");\n }\n },\n configure: (config: {\n trackClicks?: boolean;\n trackScrolls?: boolean;\n trackViews?: boolean;\n trackHovers?: boolean;\n trackForms?: boolean;\n }): void => {\n if (this.autoTracker) {\n this.autoTracker.configure(config);\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracking configured:\", config);\n }\n },\n /**\n * Refresh tracking for dynamic content (React/SPA route changes)\n * Modern alternative to rescan() - follows GA4/industry best practices\n */\n refreshTracking: (): void => {\n if (this.autoTracker) {\n this.autoTracker.refreshTracking();\n }\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracking refreshed\");\n }\n },\n /**\n * Legacy rescan method - use refreshTracking() instead\n * @deprecated Use refreshTracking() for better performance\n */\n rescan: (): void => {\n if (this.autoTracker) {\n this.autoTracker.rescan();\n }\n if (this.config.debug) {\n console.log(\"[Zaplier] Auto tracking rescanned (deprecated - use refreshTracking)\");\n }\n },\n /**\n * Get diagnostic information for debugging\n */\n getDiagnostics: () => {\n return this.autoTracker ? this.autoTracker.getDiagnostics() : null;\n },\n getStats: () => {\n return this.autoTracker ? this.autoTracker.getStats() : null;\n },\n isEnabled: (): boolean => {\n return !!this.autoTracker;\n },\n };\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking(): boolean {\n this.config.enhancedTracking = \"true\";\n this.config.gdprMode = false;\n\n // Re-collect fingerprint with enhanced mode\n this.collectFingerprint();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking enabled\");\n }\n return true;\n }\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking(): void {\n this.config.enhancedTracking = \"false\";\n this.config.gdprMode = true;\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking disabled\");\n }\n }\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode(): boolean {\n return this.config.enhancedTracking === \"true\" && !this.config.gdprMode;\n }\n\n /**\n * Get visitor ID (prioritizes backend, then persistent storage)\n * ENHANCED: Checks persistent storage if memory values are missing\n */\n getVisitorId(): string | null {\n // Priority 1: Backend visitor ID from memory (most recent)\n if (this.backendVisitorId) {\n return this.backendVisitorId;\n }\n \n // Priority 2: Local visitor ID from memory (deprecated but kept for compatibility)\n if (this.visitorId) {\n return this.visitorId;\n }\n \n // Priority 3: Check persistent storage for backend visitor ID\n if (this.visitorIdentityManager) {\n const storedVisitorId = this.visitorIdentityManager.getCurrentVisitorId();\n if (storedVisitorId) {\n // Update memory cache for future calls\n this.backendVisitorId = storedVisitorId;\n this.visitorId = storedVisitorId;\n return storedVisitorId;\n }\n }\n \n // No visitor ID available - will be set after first backend response\n return null;\n }\n\n /**\n * Get visitor information from backend\n * Returns detailed visitor data including location, device info, and stats\n *\n * IMPORTANT: Only uses backendVisitorId (UUID), not the local visitorId with 'vis_' prefix\n */\n async getVisitorInfo(): Promise<VisitorInfo | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n // The backend endpoint expects UUID format, not 'vis_xxx' format\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format (not the local 'vis_xxx' format)\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor info:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get visitor history (visits/events)\n * Returns visit history with location, IP, incognito, VPN detection\n */\n async getVisitorHistory(): Promise<VisitorHistory | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}/history?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor history:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get user data\n */\n getUserData(): UserData {\n // Default values for SSR compatibility\n const defaultDevice = {\n userAgent: \"\",\n language: \"\",\n screen: { width: 0, height: 0 },\n };\n\n // Only access browser APIs if available\n const device =\n typeof window !== \"undefined\" && typeof navigator !== \"undefined\"\n ? {\n userAgent: navigator.userAgent || \"\",\n language: navigator.language || \"\",\n screen: {\n width: window.screen?.width || 0,\n height: window.screen?.height || 0,\n },\n }\n : defaultDevice;\n\n return {\n sessionId: this.sessionId || \"\",\n visitorId: this.getVisitorId() || undefined,\n location: {}, // Will be populated by backend\n device,\n journey: [], // Will be populated by backend\n fingerprint: this.fingerprint?.hash,\n };\n }\n\n /**\n * Get conversion likelihood (mock implementation)\n */\n getConversionLikelihood(): {\n score: number;\n factors: string[];\n } {\n return {\n score: 0.5,\n factors: [\"Requires backend analysis\"],\n };\n }\n\n /**\n * Get user segment (mock implementation)\n */\n getUserSegment(): {\n type: \"high_intent\" | \"medium_intent\" | \"exploring\";\n confidence: number;\n } {\n return {\n type: \"medium_intent\",\n confidence: 0.5,\n };\n }\n}\n\n/**\n * Default export for ES modules\n */\nexport default ZaplierSDK;\n","/**\n * Global Interface for Zaplier SDK\n * Provides unified API for both Script tag and NPM usage\n */\n\nimport { ZaplierSDK } from \"../sdk\";\nimport type { SDKConfig } from \"../types\";\nimport type { AutoTrackerConfig } from \"./auto-tracker\";\n\n// Global instance holder\nlet globalInstance: ZaplierSDK | null = null;\n\n/**\n * Unified Zaplier interface\n */\nexport const Zaplier = {\n /**\n * Initialize SDK\n */\n init: (config: SDKConfig): ZaplierSDK => {\n if (globalInstance) {\n console.warn('[Zaplier] SDK already initialized');\n return globalInstance;\n }\n\n globalInstance = new ZaplierSDK(config);\n return globalInstance;\n },\n\n /**\n * Get current instance\n */\n getInstance: (): ZaplierSDK | null => {\n return globalInstance;\n },\n\n /**\n * Track custom event\n */\n track: (eventType: string, eventData?: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.track(eventType, eventData);\n },\n\n /**\n * Track page view\n */\n trackPageView: (data?: any): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPageView(data);\n },\n\n /**\n * Track custom event (alias for track)\n */\n trackEvent: (eventName: string, metadata?: Record<string, any>): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.trackCustomEvent(eventName, metadata);\n },\n\n /**\n * Track conversion\n */\n trackConversion: (\n conversionType: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackConversion(conversionType, value, currency, metadata);\n },\n\n /**\n * Track purchase\n */\n trackPurchase: (data: {\n value: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n category?: string;\n quantity?: number;\n price?: number;\n }>;\n orderId?: string;\n coupon?: string;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPurchase(data);\n },\n\n /**\n * Track add to cart\n */\n trackAddToCart: (data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackAddToCart(data);\n },\n\n /**\n * Identify user\n */\n identify: (userData: {\n email?: string;\n name?: string;\n id?: string;\n properties?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.identify(userData);\n },\n\n /**\n * Get visitor ID\n */\n getVisitorId: (): string | null => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getVisitorId();\n },\n\n /**\n * Get visitor info\n */\n getVisitorInfo: (): Promise<any> => {\n if (!globalInstance) {\n return Promise.resolve(null);\n }\n return globalInstance.getVisitorInfo();\n },\n\n /**\n * Get user data\n */\n getUserData: (): any => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getUserData();\n },\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.enableEnhancedTracking();\n },\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.disableEnhancedTracking();\n },\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.isEnhancedMode();\n },\n\n /**\n * Heatmap controls\n */\n heatmap: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disable();\n },\n enableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enableMouseTracking();\n },\n disableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disableMouseTracking();\n },\n getStats: () => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.heatmap.getStats();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.heatmap.isRecording();\n }\n },\n\n /**\n * Session replay controls\n */\n replay: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.disable();\n },\n start: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.replay.start();\n },\n stop: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.stop();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.replay.isRecording();\n },\n getEventCount: (): number => {\n if (!globalInstance) {\n return 0;\n }\n return globalInstance.replay.getEventCount();\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.addFunnelStep(stepData);\n },\n markConversion: (data: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.markConversion(data);\n }\n },\n\n /**\n * Auto Tracker API\n */\n autoTrack: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.autoTrack.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.autoTrack.disable();\n },\n configure: (config: Partial<AutoTrackerConfig>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.autoTrack.configure(config);\n },\n getStats: () => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.autoTrack.getStats();\n },\n isEnabled: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.autoTrack.isEnabled();\n }\n },\n\n /**\n * Debug and utility functions\n */\n debug: {\n getStats: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getStats();\n },\n getSuccessRates: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getSuccessRates();\n },\n testTransports: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return Promise.resolve(null);\n }\n return (globalInstance as any).antiAdblockManager.testTransports();\n }\n },\n\n /**\n * Version info\n */\n version: '1.6.0'\n};\n\n/**\n * Auto-initialization from script tag data attributes\n */\nexport function autoInitializeFromScript(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n // Look for script tag with data attributes\n const scripts = document.getElementsByTagName('script');\n let configScript: HTMLScriptElement | null = null;\n\n for (const script of Array.from(scripts)) {\n if (script.src && (\n script.src.includes('zaplier') ||\n script.src.includes('sdk.js') ||\n script.src.includes('sdk.min.js')\n ) && script.dataset.token) {\n configScript = script;\n break;\n }\n }\n\n if (!configScript || !configScript.dataset.token) {\n return;\n }\n\n // Build config from data attributes\n const config: SDKConfig = {\n token: configScript.dataset.token,\n debug: configScript.dataset.debug === 'true',\n gdprMode: configScript.dataset.gdprMode === 'true',\n heatmap: configScript.dataset.heatmap === 'true',\n replay: configScript.dataset.replay === 'true',\n allow_localhost: configScript.dataset.allowLocalhost === 'true'\n };\n\n // Initialize SDK\n try {\n Zaplier.init(config);\n \n if (config.debug) {\n console.log('[Zaplier] Auto-initialized from script tag', config);\n }\n } catch (error) {\n console.error('[Zaplier] Auto-initialization failed:', error);\n }\n}\n\n// Expose to global scope for script tag usage\nif (typeof window !== 'undefined') {\n (window as any).Zaplier = Zaplier;\n \n // Auto-initialize if DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInitializeFromScript);\n } else {\n autoInitializeFromScript();\n }\n}","/**\n * Bot Detection Module\n * Comprehensive client-side bot detection based on multiple techniques\n * Detects headless browsers, automation tools, and suspicious behavior\n */\n\nimport type { BotDetectionResult, BotDetectionMethods, DetectionResult, UserAgentAnalysis } from '../types/detection';\n\n/**\n * Known bot user agent patterns\n */\nconst BOT_PATTERNS = [\n // Headless browsers\n /HeadlessChrome/i,\n /PhantomJS/i,\n /SlimerJS/i,\n \n // Automation tools\n /Selenium/i,\n /WebDriver/i,\n /ChromeDriver/i,\n /GeckoDriver/i,\n \n // Crawlers and bots\n /bot/i,\n /crawler/i,\n /spider/i,\n /scraper/i,\n \n // Specific bots\n /Googlebot/i,\n /Bingbot/i,\n /Slurp/i,\n /DuckDuckBot/i,\n /Baiduspider/i,\n /YandexBot/i,\n /facebookexternalhit/i,\n /Twitterbot/i,\n /LinkedInBot/i,\n /WhatsApp/i,\n /SkypeUriPreview/i\n];\n\n/**\n * Suspicious user agent patterns\n */\nconst SUSPICIOUS_PATTERNS = [\n /^Mozilla\\/5\\.0$/,\n /Headless/i,\n /automated/i,\n /testing/i,\n /^$/\n];\n\n/**\n * Detect WebDriver presence\n */\nfunction detectWebDriver(): DetectionResult {\n try {\n // Check for webdriver property\n if (navigator.webdriver === true) {\n return {\n detected: true,\n confidence: 95,\n method: 'navigator.webdriver_true'\n };\n }\n \n // Check for webdriver in window\n if ((window as any).webdriver === true) {\n return {\n detected: true,\n confidence: 90,\n method: 'window.webdriver_true'\n };\n }\n \n // Check for selenium-specific properties\n const seleniumKeys = [\n '_selenium',\n 'callSelenium',\n '_Selenium_IDE_Recorder',\n 'callPhantom',\n '_phantom',\n '__phantomas',\n '__fxdriver_evaluate',\n '__fxdriver_unwrapped',\n '_fxdriver_evaluate',\n '_fxdriver_unwrapped'\n ];\n \n for (const key of seleniumKeys) {\n if (key in window || key in document) {\n return {\n detected: true,\n confidence: 85,\n method: `selenium_property_${key}`\n };\n }\n }\n \n // Check for webdriver in document\n if (document.documentElement.getAttribute('webdriver')) {\n return {\n detected: true,\n confidence: 80,\n method: 'document_webdriver_attribute'\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_not_detected'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect headless browser characteristics\n */\nfunction detectHeadlessBrowser(): DetectionResult {\n try {\n let suspiciousCount = 0;\n const issues: string[] = [];\n \n // Check for missing window properties\n if (!window.outerHeight || !window.outerWidth) {\n suspiciousCount++;\n issues.push('missing_outer_dimensions');\n }\n \n // Check for plugins\n if (navigator.plugins.length === 0) {\n suspiciousCount++;\n issues.push('no_plugins');\n }\n \n // Check for languages\n if (!navigator.languages || navigator.languages.length === 0) {\n suspiciousCount++;\n issues.push('no_languages');\n }\n \n // Check for inconsistent user agent\n const userAgent = navigator.userAgent;\n if (!userAgent || userAgent.length < 50) {\n suspiciousCount++;\n issues.push('short_user_agent');\n }\n \n // Check for notification permission (often undefined in headless)\n if (typeof (Notification as any)?.permission === 'undefined') {\n suspiciousCount++;\n issues.push('no_notification_permission');\n }\n \n // Check for missing performance API\n if (!window.performance || !window.performance.timing) {\n suspiciousCount++;\n issues.push('missing_performance_api');\n }\n \n // Check Chrome-specific headless indicators\n if (userAgent.includes('Chrome')) {\n // Check for missing chrome object\n if (!(window as any).chrome) {\n suspiciousCount++;\n issues.push('missing_chrome_object');\n }\n \n // Check for headless in user agent\n if (userAgent.includes('HeadlessChrome')) {\n return {\n detected: true,\n confidence: 95,\n method: 'chrome_headless_user_agent'\n };\n }\n }\n \n const confidence = Math.min(suspiciousCount * 15, 90);\n \n return {\n detected: suspiciousCount >= 3,\n confidence,\n method: 'headless_characteristics',\n details: { issues, suspiciousCount }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'headless_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect automation tools\n */\nfunction detectAutomationTools(): DetectionResult {\n try {\n const automationIndicators = [\n 'webdriver',\n 'selenium',\n 'phantomjs',\n 'slimerjs',\n 'chromedriver',\n 'geckodriver',\n 'automation',\n 'puppeteer'\n ];\n \n const detectedTools: string[] = [];\n \n // Check window properties\n for (const tool of automationIndicators) {\n if ((window as any)[tool] || (window as any)[`_${tool}`] || (window as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check document properties\n for (const tool of automationIndicators) {\n if ((document as any)[tool] || (document as any)[`_${tool}`] || (document as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check for automation-specific errors\n try {\n // Use safer method to test navigation object access\n const nav = (window as any).navigator;\n if (!nav) {\n detectedTools.push('navigation_missing');\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : '';\n if (errorMessage.includes('automation') || errorMessage.includes('webdriver')) {\n detectedTools.push('navigation_automation_error');\n }\n }\n \n if (detectedTools.length > 0) {\n return {\n detected: true,\n confidence: Math.min(detectedTools.length * 30, 95),\n method: 'automation_tools_detected',\n details: { tools: detectedTools }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'no_automation_tools'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'automation_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect DOM blockers (ad blockers and privacy tools)\n */\nfunction detectDOMBlockers(): DetectionResult {\n try {\n const blockerSelectors = [\n // Ad blocker elements\n '#ad-banner',\n '.advertisement',\n '.google-ads',\n '.adsense',\n \n // Analytics blockers\n '#google-analytics',\n '.analytics',\n '[src*=\"google-analytics\"]',\n '[src*=\"googletagmanager\"]',\n \n // Social media blockers\n '.facebook-widget',\n '.twitter-widget',\n '.social-share'\n ];\n \n let blockedCount = 0;\n \n for (const selector of blockerSelectors) {\n const element = document.querySelector(selector);\n if (!element) {\n blockedCount++;\n }\n }\n \n // Test if we can create tracking pixels\n try {\n const pixel = document.createElement('img');\n pixel.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n pixel.style.display = 'none';\n document.body.appendChild(pixel);\n \n setTimeout(() => {\n if (pixel.parentNode) {\n pixel.parentNode.removeChild(pixel);\n }\n }, 100);\n } catch {\n blockedCount++;\n }\n \n const confidence = Math.min(blockedCount * 20, 80);\n \n return {\n detected: blockedCount >= 2,\n confidence,\n method: 'dom_blockers',\n details: { blockedCount, totalTests: blockerSelectors.length + 1 }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'dom_blocker_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Check for missing languages (common in bots)\n */\nfunction detectMissingLanguages(): DetectionResult {\n try {\n if (!navigator.languages || navigator.languages.length === 0) {\n return {\n detected: true,\n confidence: 70,\n method: 'no_languages'\n };\n }\n \n if (navigator.languages.length === 1 && navigator.languages[0] === 'en-US') {\n return {\n detected: true,\n confidence: 40,\n method: 'single_default_language'\n };\n }\n \n // Check for inconsistent language settings\n if (navigator.language !== navigator.languages[0]) {\n return {\n detected: true,\n confidence: 30,\n method: 'inconsistent_languages',\n details: {\n language: navigator.language,\n firstLanguage: navigator.languages[0]\n }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'languages_normal',\n details: { languageCount: navigator.languages.length }\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: 'language_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Test for inconsistent eval behavior\n */\nfunction detectInconsistentEval(): DetectionResult {\n try {\n // Test if basic math computation works normally\n const testFunction = new Function('return 2 + 2');\n const result = testFunction();\n \n if (result !== 4) {\n return {\n detected: true,\n confidence: 90,\n method: 'function_constructor_incorrect_result',\n details: { expected: 4, actual: result }\n };\n }\n \n // Test if Function constructor toString() is modified\n const functionString = Function.toString();\n if (!functionString.includes('[native code]') && !functionString.includes('function Function()')) {\n return {\n detected: true,\n confidence: 70,\n method: 'function_constructor_modified_toString',\n details: { functionString: functionString.substring(0, 100) }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'eval_normal'\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: 'eval_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Analyze user agent for bot patterns\n */\nfunction analyzeUserAgent(): UserAgentAnalysis {\n const userAgent = navigator.userAgent;\n \n // Check for bot patterns\n const botPatterns = BOT_PATTERNS.filter(pattern => pattern.test(userAgent));\n const suspiciousPatterns = SUSPICIOUS_PATTERNS.filter(pattern => pattern.test(userAgent));\n \n let category: 'crawler' | 'automation' | 'headless' | 'legitimate' = 'legitimate';\n \n if (botPatterns.some(p => p.source.includes('bot|crawler|spider'))) {\n category = 'crawler';\n } else if (botPatterns.some(p => p.source.includes('Selenium|WebDriver'))) {\n category = 'automation';\n } else if (botPatterns.some(p => p.source.includes('Headless|Phantom'))) {\n category = 'headless';\n }\n \n const allPatterns = [...botPatterns.map(p => p.source), ...suspiciousPatterns.map(p => p.source)];\n \n return {\n browser: {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n },\n os: {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n },\n device: {\n type: 'desktop'\n },\n suspicious: {\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n patterns: allPatterns,\n category: botPatterns.length > 0 ? category : 'legitimate'\n },\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n raw: userAgent\n };\n}\n\n/**\n * Main bot detection function\n */\nexport async function detectBot(): Promise<BotDetectionResult> {\n // Run all detection methods\n const detectors: BotDetectionMethods = {\n webDriver: detectWebDriver(),\n headlessBrowser: detectHeadlessBrowser(),\n automationTools: detectAutomationTools(),\n domBlockers: detectDOMBlockers(),\n missingLanguages: detectMissingLanguages(),\n inconsistentEval: detectInconsistentEval(),\n \n // Behavioral detection (placeholder - would need more time to implement)\n humanBehavior: { detected: false, confidence: 0, method: 'not_implemented' },\n mouseMovement: { detected: false, confidence: 0, method: 'not_implemented' },\n clickPatterns: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Canvas/WebGL consistency (placeholder - would integrate with fingerprinting)\n canvasInconsistency: { detected: false, confidence: 0, method: 'not_implemented' },\n webglAnomaly: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Plugin detection\n missingPlugins: { detected: navigator.plugins.length === 0, confidence: 30, method: 'plugin_count' },\n inconsistentProperties: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Modified built-ins detection\n modifiedBuiltins: { detected: false, confidence: 0, method: 'not_implemented' }\n };\n \n // Analyze user agent\n const userAgent = analyzeUserAgent();\n \n // Calculate overall bot detection\n const positiveDetections = Object.values(detectors).filter(d => d.detected);\n const totalConfidence = positiveDetections.reduce((sum, d) => sum + d.confidence, 0);\n const averageConfidence = positiveDetections.length > 0 ? totalConfidence / positiveDetections.length : 0;\n \n // Determine if bot is detected\n const isBot = positiveDetections.length >= 2 || // Multiple detections\n positiveDetections.some(d => d.confidence >= 90) || // High confidence detection\n (userAgent.suspicious?.isBot ?? false); // User agent indicates bot\n \n // Determine risk level\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n if (averageConfidence >= 70) {\n riskLevel = 'high';\n } else if (averageConfidence >= 40 || positiveDetections.length >= 2) {\n riskLevel = 'medium';\n }\n \n return {\n isBot,\n confidence: Math.round(Math.min(averageConfidence, 95)),\n riskLevel,\n detectionMethods: Object.keys(detectors).filter(key => detectors[key]?.detected),\n detectors,\n userAgent\n };\n}\n\n/**\n * Quick bot detection (faster, less comprehensive)\n */\nexport async function quickBotDetection(): Promise<boolean> {\n // Check only the most reliable indicators\n const webDriver = detectWebDriver();\n const userAgent = analyzeUserAgent();\n \n return webDriver.detected || (userAgent.suspicious?.isBot ?? false);\n}","/**\n * Incognito Mode Detection (Analytics Only)\n *\n * Detects private/incognito browsing mode for analytics purposes only.\n * Does NOT use localStorage/sessionStorage for tracking or data persistence.\n * Used only to enrich analytics data with browser context information.\n */\n\nimport type {\n DetectionResult,\n IncognitoDetectionMethods,\n IncognitoDetectionResult,\n} from \"../types/detection\";\n\n/**\n * Test localStorage availability and behavior (ANALYTICS ONLY)\n *\n * NOTE: This function uses localStorage purely for DETECTION purposes.\n * It does NOT store any tracking data or persistent information.\n * Used only to analyze browser capabilities for analytics context.\n */\nasync function testLocalStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__incognito_test_\" + Date.now();\n const testValue = \"test\";\n\n // Try to set and get localStorage item (for detection only, immediately cleaned up)\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey); // Immediately cleanup test data\n\n // In some incognito modes, localStorage works but has limited capacity\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 80,\n method: \"localStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n // Test storage capacity (incognito often has reduced limits) - DETECTION ONLY\n try {\n const largData = \"x\".repeat(1024 * 1024); // 1MB\n localStorage.setItem(\"__capacity_test\", largData); // Test only, immediately removed\n localStorage.removeItem(\"__capacity_test\"); // Immediate cleanup\n\n return {\n detected: false,\n confidence: 30,\n method: \"localStorage_capacity\",\n };\n } catch (capacityError) {\n // Limited capacity might indicate incognito\n return {\n detected: true,\n confidence: 60,\n method: \"localStorage_capacity_limited\",\n details: {\n error:\n capacityError instanceof Error ? capacityError.message : \"Unknown\",\n },\n };\n }\n } catch (error) {\n // localStorage completely unavailable\n return {\n detected: true,\n confidence: 90,\n method: \"localStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test sessionStorage availability (ANALYTICS ONLY)\n *\n * NOTE: Uses sessionStorage purely for browser capability detection.\n * No tracking data is stored - all test data is immediately removed.\n */\nasync function testSessionStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__session_test_\" + Date.now();\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue); // Test only, immediately cleaned\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey); // Immediate cleanup\n\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 75,\n method: \"sessionStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"sessionStorage_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"sessionStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test IndexedDB availability and behavior\n */\nasync function testIndexedDB(): Promise<DetectionResult> {\n try {\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"indexedDB_unavailable\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n const dbName = \"__incognito_test_\" + Date.now();\n const request = indexedDB.open(dbName, 1);\n\n const timeout = setTimeout(() => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"indexedDB_timeout\",\n });\n }, 1000);\n\n request.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 80,\n method: \"indexedDB_error\",\n details: { error: request.error?.message },\n });\n };\n\n request.onsuccess = () => {\n clearTimeout(timeout);\n const db = request.result;\n\n // Clean up\n db.close();\n indexedDB.deleteDatabase(dbName);\n\n resolve({\n detected: false,\n confidence: 25,\n method: \"indexedDB_working\",\n });\n };\n\n request.onblocked = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 70,\n method: \"indexedDB_blocked\",\n });\n };\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"indexedDB_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test WebSQL availability (legacy browsers)\n */\nasync function testOpenDatabase(): Promise<DetectionResult> {\n try {\n const openDatabase = (window as any).openDatabase;\n\n if (!openDatabase) {\n return {\n detected: false,\n confidence: 10,\n method: \"openDatabase_unsupported\",\n };\n }\n\n const db = openDatabase(\"__test\", \"1.0\", \"Test\", 1024);\n\n if (!db) {\n return {\n detected: true,\n confidence: 60,\n method: \"openDatabase_failed\",\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"openDatabase_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"openDatabase_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test permissions API behavior\n */\nasync function testPermissions(): Promise<DetectionResult> {\n try {\n if (!navigator.permissions) {\n return {\n detected: false,\n confidence: 10,\n method: \"permissions_unsupported\",\n };\n }\n\n // Test notification permission (often different in incognito)\n const result = await navigator.permissions.query({ name: \"notifications\" });\n\n // In some browsers, incognito mode always returns \"denied\" for notifications\n if (result.state === \"denied\") {\n return {\n detected: true,\n confidence: 40,\n method: \"permissions_notifications_denied\",\n details: { state: result.state },\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"permissions_working\",\n details: { state: result.state },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: \"permissions_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test quota management API (IMPROVED - 2024)\n *\n * Enhanced with better thresholds and browser-specific detection\n */\nasync function testQuotaManagement(): Promise<DetectionResult> {\n try {\n if (!navigator.storage || !navigator.storage.estimate) {\n return {\n detected: false,\n confidence: 10,\n method: \"quota_unsupported\",\n };\n }\n\n const estimate = await navigator.storage.estimate();\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n // Browser-specific quota thresholds for incognito detection\n let suspiciousQuota: number;\n let highConfidenceQuota: number;\n\n if (isChrome) {\n // Chrome incognito typically has 120MB or less\n suspiciousQuota = 150 * 1024 * 1024; // 150MB\n highConfidenceQuota = 120 * 1024 * 1024; // 120MB\n } else if (isSafari) {\n // Safari private mode has different limits\n suspiciousQuota = 50 * 1024 * 1024; // 50MB\n highConfidenceQuota = 25 * 1024 * 1024; // 25MB\n } else {\n // Generic thresholds for other browsers\n suspiciousQuota = 100 * 1024 * 1024; // 100MB\n highConfidenceQuota = 50 * 1024 * 1024; // 50MB\n }\n\n if (estimate.quota) {\n if (estimate.quota <= highConfidenceQuota) {\n return {\n detected: true,\n confidence: 85,\n method: \"quota_very_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(highConfidenceQuota / (1024 * 1024)),\n },\n };\n } else if (estimate.quota <= suspiciousQuota) {\n return {\n detected: true,\n confidence: 65,\n method: \"quota_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(suspiciousQuota / (1024 * 1024)),\n },\n };\n }\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"quota_normal\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: estimate.quota\n ? Math.round(estimate.quota / (1024 * 1024))\n : null,\n },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50, // Lower confidence for errors\n method: \"quota_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test modern Chrome-specific incognito detection (ADDED - 2024)\n *\n * Based on detectIncognito library methodology\n * Uses Chrome's specific storage allocation in incognito mode\n */\nasync function testChromeIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n\n if (!isChrome) {\n return {\n detected: false,\n confidence: 0,\n method: \"chrome_detection_not_applicable\",\n };\n }\n\n // Chrome-specific: Test FileSystem API quota behavior\n if ((window as any).webkitRequestFileSystem) {\n return new Promise<DetectionResult>((resolve) => {\n const success = () => {\n resolve({\n detected: false,\n confidence: 40,\n method: \"chrome_filesystem_available\",\n });\n };\n\n const error = () => {\n resolve({\n detected: true,\n confidence: 80,\n method: \"chrome_filesystem_blocked\",\n });\n };\n\n try {\n (window as any).webkitRequestFileSystem(0, 1, success, error);\n } catch (e) {\n resolve({\n detected: true,\n confidence: 70,\n method: \"chrome_filesystem_exception\",\n });\n }\n\n // Timeout fallback\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 20,\n method: \"chrome_filesystem_timeout\",\n });\n }, 1000);\n });\n }\n\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_filesystem_unsupported\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test Safari-specific incognito detection (ADDED - 2024)\n *\n * Safari has unique behaviors in private mode\n */\nasync function testSafariIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n if (!isSafari) {\n return {\n detected: false,\n confidence: 0,\n method: \"safari_detection_not_applicable\",\n };\n }\n\n // Safari-specific: Test localStorage.length behavior\n try {\n localStorage.setItem(\"__safari_test\", \"test\");\n const lengthBefore = localStorage.length;\n localStorage.removeItem(\"__safari_test\");\n\n if (lengthBefore === 0) {\n return {\n detected: true,\n confidence: 75,\n method: \"safari_localStorage_blocked\",\n };\n }\n } catch (e) {\n return {\n detected: true,\n confidence: 80,\n method: \"safari_localStorage_exception\",\n };\n }\n\n // Safari: Test window.indexedDB behavior\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"safari_indexedDB_missing\",\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"safari_detection_normal\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"safari_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test filesystem API availability\n */\nasync function testFilesystem(): Promise<DetectionResult> {\n try {\n const requestFileSystem =\n (window as any).requestFileSystem ||\n (window as any).webkitRequestFileSystem;\n\n if (!requestFileSystem) {\n return {\n detected: false,\n confidence: 10,\n method: \"filesystem_unsupported\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n requestFileSystem(\n (window as any).TEMPORARY || 0,\n 1024,\n () => {\n resolve({\n detected: false,\n confidence: 30,\n method: \"filesystem_working\",\n });\n },\n (error: any) => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"filesystem_error\",\n details: { error: error.name || \"Unknown\" },\n });\n }\n );\n\n // Timeout\n setTimeout(() => {\n resolve({\n detected: true,\n confidence: 50,\n method: \"filesystem_timeout\",\n });\n }, 1000);\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"filesystem_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cookies enabled state\n */\nasync function testCookiesEnabled(): Promise<DetectionResult> {\n try {\n const cookiesEnabled = navigator.cookieEnabled;\n\n // Test by setting a cookie\n document.cookie = \"__incognito_test=test; path=/\";\n const cookieSet = document.cookie.includes(\"__incognito_test=test\");\n\n // Clean up\n document.cookie =\n \"__incognito_test=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/\";\n\n if (!cookiesEnabled || !cookieSet) {\n return {\n detected: true,\n confidence: 50,\n method: \"cookies_disabled\",\n details: { cookiesEnabled, cookieSet },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"cookies_working\",\n details: { cookiesEnabled, cookieSet },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: \"cookies_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cache detection through timing\n */\nasync function testCacheDetection(): Promise<DetectionResult> {\n try {\n const image = new Image();\n const startTime = performance.now();\n\n return new Promise<DetectionResult>((resolve) => {\n const timeout = setTimeout(() => {\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_timeout\",\n });\n }, 3000);\n\n image.onload = () => {\n clearTimeout(timeout);\n const loadTime = performance.now() - startTime;\n\n // Very fast load might indicate cache is disabled (incognito)\n if (loadTime < 5) {\n resolve({\n detected: true,\n confidence: 30,\n method: \"cache_too_fast\",\n details: { loadTime },\n });\n } else {\n resolve({\n detected: false,\n confidence: 20,\n method: \"cache_normal\",\n details: { loadTime },\n });\n }\n };\n\n image.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_error\",\n });\n };\n\n // Use a small, commonly cached image\n image.src =\n \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n });\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"cache_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Detect browser-specific incognito patterns\n */\nfunction detectBrowserSpecificPatterns(): {\n browser: string;\n supportsDetection: boolean;\n} {\n const userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes(\"chrome\")) {\n return { browser: \"Chrome\", supportsDetection: true };\n } else if (userAgent.includes(\"firefox\")) {\n return { browser: \"Firefox\", supportsDetection: true };\n } else if (userAgent.includes(\"safari\")) {\n return { browser: \"Safari\", supportsDetection: true };\n } else if (userAgent.includes(\"edge\")) {\n return { browser: \"Edge\", supportsDetection: true };\n }\n\n return { browser: \"Unknown\", supportsDetection: false };\n}\n\n/**\n * Main incognito detection function (IMPROVED - 2024)\n *\n * Enhanced with:\n * - Weighted scoring system to reduce false positives\n * - Browser-specific detection weights\n * - Multi-signal validation requirements\n * - Improved confidence thresholds\n */\nexport async function detectIncognitoMode(): Promise<IncognitoDetectionResult> {\n const browserInfo = detectBrowserSpecificPatterns();\n\n // Browser detection for specific weights\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n const isFirefox = /Firefox/.test(userAgent);\n const isEdge = /Edg/.test(userAgent);\n\n // Run critical detection methods with timeout protection\n const testTimeout = 2000; // 2 second timeout for each test\n\n const [\n localStorage,\n sessionStorage,\n indexedDB,\n permissions,\n quotaManagement,\n filesystem,\n cacheDetection,\n chromeSpecific,\n safariSpecific,\n ] = await Promise.allSettled([\n Promise.race([\n testLocalStorage(),\n timeoutPromise(testTimeout, \"localStorage\"),\n ]),\n Promise.race([\n testSessionStorage(),\n timeoutPromise(testTimeout, \"sessionStorage\"),\n ]),\n Promise.race([testIndexedDB(), timeoutPromise(testTimeout, \"indexedDB\")]),\n Promise.race([\n testPermissions(),\n timeoutPromise(testTimeout, \"permissions\"),\n ]),\n Promise.race([\n testQuotaManagement(),\n timeoutPromise(testTimeout, \"quotaManagement\"),\n ]),\n Promise.race([testFilesystem(), timeoutPromise(testTimeout, \"filesystem\")]),\n Promise.race([\n testCacheDetection(),\n timeoutPromise(testTimeout, \"cacheDetection\"),\n ]),\n Promise.race([\n testChromeIncognitoDetection(),\n timeoutPromise(testTimeout, \"chromeSpecific\"),\n ]),\n Promise.race([\n testSafariIncognitoDetection(),\n timeoutPromise(testTimeout, \"safariSpecific\"),\n ]),\n ]);\n\n // Process results with weighted scoring\n const detectedSignals: {\n method: string;\n confidence: number;\n weight: number;\n }[] = [];\n\n // Process each test result with browser-specific weights\n const testResults = [\n { name: \"localStorage\", result: localStorage },\n { name: \"sessionStorage\", result: sessionStorage },\n { name: \"indexedDB\", result: indexedDB },\n { name: \"permissions\", result: permissions },\n { name: \"quotaManagement\", result: quotaManagement },\n { name: \"filesystem\", result: filesystem },\n { name: \"cacheDetection\", result: cacheDetection },\n { name: \"chromeSpecific\", result: chromeSpecific },\n { name: \"safariSpecific\", result: safariSpecific },\n ];\n\n testResults.forEach(({ name, result }) => {\n if (result.status === \"fulfilled\" && result.value.detected) {\n const weight = getBrowserSpecificWeight(\n name,\n {\n isChrome,\n isSafari,\n isFirefox,\n isEdge,\n },\n result.value.confidence\n );\n\n detectedSignals.push({\n method: result.value.method,\n confidence: result.value.confidence,\n weight: weight,\n });\n }\n });\n\n // IMPROVED CONFIDENCE CALCULATION with weighted scoring\n const totalWeight = detectedSignals.reduce(\n (sum, signal) => sum + signal.weight,\n 0\n );\n const weightedConfidence = detectedSignals.reduce(\n (sum, signal) => sum + (signal.confidence * signal.weight) / 100,\n 0\n );\n\n // Browser-specific minimum weight thresholds to reduce false positives\n let minWeightThreshold: number;\n if (isSafari) {\n minWeightThreshold = 35; // Safari has some reliable signals\n } else if (isChrome || isEdge) {\n minWeightThreshold = 45; // Chrome/Edge need stronger evidence\n } else if (isFirefox) {\n minWeightThreshold = 40; // Firefox somewhere in between\n } else {\n minWeightThreshold = 50; // Unknown browsers need strongest evidence\n }\n\n // Require significant combined evidence\n const isDetected = totalWeight >= minWeightThreshold;\n const finalConfidence =\n totalWeight > 0\n ? Math.min(95, (weightedConfidence / totalWeight) * 100)\n : 0;\n\n // Legacy structure for compatibility\n const detectionMethods: IncognitoDetectionMethods = {\n localStorage:\n localStorage.status === \"fulfilled\"\n ? localStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n sessionStorage:\n sessionStorage.status === \"fulfilled\"\n ? sessionStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n indexedDB:\n indexedDB.status === \"fulfilled\"\n ? indexedDB.value\n : { detected: false, confidence: 0, method: \"failed\" },\n openDatabase: { detected: false, confidence: 0, method: \"deprecated\" }, // Deprecated\n permissions:\n permissions.status === \"fulfilled\"\n ? permissions.value\n : { detected: false, confidence: 0, method: \"failed\" },\n quotaManagement:\n quotaManagement.status === \"fulfilled\"\n ? quotaManagement.value\n : { detected: false, confidence: 0, method: \"failed\" },\n filesystem:\n filesystem.status === \"fulfilled\"\n ? filesystem.value\n : { detected: false, confidence: 0, method: \"failed\" },\n cookiesEnabled: { detected: false, confidence: 0, method: \"deprecated\" }, // Handled in server-side now\n cacheDetection:\n cacheDetection.status === \"fulfilled\"\n ? cacheDetection.value\n : { detected: false, confidence: 0, method: \"failed\" },\n };\n\n // Debug logging for development\n if (\n typeof window !== \"undefined\" &&\n (window as any).RabbitTracker?.config?.debug\n ) {\n console.debug(\"Incognito Detection Analysis:\", {\n browserInfo: { isChrome, isSafari, isFirefox, isEdge },\n detectedSignals,\n totalWeight,\n minWeightThreshold,\n finalConfidence,\n isDetected,\n });\n }\n\n return {\n isIncognito: isDetected,\n confidence: Math.round(finalConfidence),\n detectionMethods: detectedSignals.map((s) => s.method),\n details: {\n localStorage: detectionMethods.localStorage?.detected ?? false,\n sessionStorage: detectionMethods.sessionStorage?.detected ?? false,\n indexedDB: detectionMethods.indexedDB?.detected ?? false,\n cookiesEnabled: false, // Deprecated - handled server-side\n quota: detectionMethods.quotaManagement?.detected ? 0 : null,\n permissions: detectionMethods.permissions?.details || {},\n },\n };\n}\n\n/**\n * Helper function for timeout promises\n */\nfunction timeoutPromise(timeout: number, methodName: string): Promise<any> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 0,\n method: `${methodName}_timeout`,\n });\n }, timeout);\n });\n}\n\n/**\n * Get browser-specific weights for detection methods\n */\nfunction getBrowserSpecificWeight(\n method: string,\n browserInfo: {\n isChrome: boolean;\n isSafari: boolean;\n isFirefox: boolean;\n isEdge: boolean;\n },\n baseConfidence: number\n): number {\n const baseWeight = Math.floor(baseConfidence * 0.5); // More conservative base weight\n\n switch (method) {\n case \"quotaManagement\":\n // Chrome's quotaManagement is very reliable for incognito detection\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(50, baseWeight + 25);\n if (browserInfo.isSafari) return Math.min(40, baseWeight + 15);\n return Math.min(30, baseWeight + 10);\n\n case \"filesystem\":\n // Chrome filesystem API is reliable\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(40, baseWeight + 20);\n return Math.max(5, baseWeight - 5); // Less reliable in other browsers\n\n case \"indexedDB\":\n // Firefox often blocks IndexedDB in private mode\n if (browserInfo.isFirefox) return Math.min(45, baseWeight + 20);\n if (browserInfo.isSafari) return Math.min(35, baseWeight + 10);\n return baseWeight;\n\n case \"localStorage\":\n // localStorage tests are generally less reliable now\n return Math.max(5, baseWeight - 15);\n\n case \"sessionStorage\":\n // sessionStorage tests are also less reliable\n return Math.max(5, baseWeight - 10);\n\n case \"permissions\":\n // Permission API behavior can be useful\n if (browserInfo.isChrome) return Math.min(30, baseWeight + 10);\n return Math.max(5, baseWeight - 5);\n\n case \"cacheDetection\":\n // Cache detection is generally unreliable\n return Math.max(5, baseWeight - 20);\n\n case \"chromeSpecific\":\n // Chrome-specific detection methods are highly reliable\n if (browserInfo.isChrome) return Math.min(50, baseWeight + 30);\n return 0; // Not applicable to other browsers\n\n case \"safariSpecific\":\n // Safari-specific detection methods are highly reliable\n if (browserInfo.isSafari) return Math.min(45, baseWeight + 25);\n return 0; // Not applicable to other browsers\n\n default:\n return Math.max(5, baseWeight);\n }\n}\n\n/**\n * Quick incognito detection (less comprehensive but faster)\n */\nexport async function quickIncognitoDetection(): Promise<boolean> {\n try {\n // Test the most reliable indicators quickly\n const [localStorage, indexedDB] = await Promise.all([\n testLocalStorage(),\n testIndexedDB(),\n ]);\n\n return localStorage.detected || indexedDB.detected;\n } catch {\n return false;\n }\n}\n","/**\n * Enhanced User Agent Parser\n * Based on FingerprintJS browser detection with advanced engine and version parsing\n */\n\nimport type { UserAgentAnalysis } from '../types/detection';\n\n/**\n * Browser engine detection (based on FingerprintJS)\n */\nexport function isChromium(): boolean {\n try {\n return typeof (window as any).chrome === 'object' && \n (window as any).chrome !== null && \n typeof (window as any).chrome.runtime === 'object';\n } catch {\n return false;\n }\n}\n\nexport function isWebKit(): boolean {\n return navigator.userAgent.includes('WebKit') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isGecko(): boolean {\n return navigator.userAgent.includes('Gecko') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isSamsungInternet(): boolean {\n return navigator.userAgent.includes('SamsungBrowser') || \n navigator.userAgent.includes('Samsung Internet');\n}\n\nexport function isIPad(): boolean {\n // iPad detection (iOS 13+ shows as desktop Safari)\n return navigator.userAgent.includes('iPad') ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n}\n\nexport function isAndroid(): boolean {\n return navigator.userAgent.includes('Android');\n}\n\n/**\n * Extract browser version from user agent\n */\nfunction extractVersion(userAgent: string, pattern: RegExp): string {\n const match = userAgent.match(pattern);\n return match ? (match[1] || 'Unknown') : 'Unknown';\n}\n\n/**\n * Detect browser name and version\n */\nfunction detectBrowser(userAgent: string): { name: string; version: string; major: string; engine: string } {\n const ua = userAgent.toLowerCase();\n \n // Edge (Chromium-based)\n if (ua.includes('edg/')) {\n const version = extractVersion(userAgent, /edg\\/([0-9.]+)/i);\n return {\n name: 'Edge',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Edge Legacy\n if (ua.includes('edge/')) {\n const version = extractVersion(userAgent, /edge\\/([0-9.]+)/i);\n return {\n name: 'Edge Legacy',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'edgehtml'\n };\n }\n \n // Brave Browser (check before Chrome)\n if (ua.includes('brave/') || (navigator as any).brave) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Brave',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Samsung Internet\n if (isSamsungInternet()) {\n const version = extractVersion(userAgent, /samsungbrowser\\/([0-9.]+)/i) ||\n extractVersion(userAgent, /samsung internet ([0-9.]+)/i);\n return {\n name: 'Samsung Internet',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Chrome (check after other Chromium browsers)\n if (ua.includes('chrome/') && !ua.includes('edg')) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Chrome',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Firefox\n if (ua.includes('firefox/')) {\n const version = extractVersion(userAgent, /firefox\\/([0-9.]+)/i);\n return {\n name: 'Firefox',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'gecko'\n };\n }\n \n // Safari (check after Chrome to avoid false positives)\n if (ua.includes('safari/') && !ua.includes('chrome')) {\n const version = extractVersion(userAgent, /version\\/([0-9.]+)/i);\n return {\n name: 'Safari',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'webkit'\n };\n }\n \n // Opera (modern versions)\n if (ua.includes('opr/') || ua.includes('opera/')) {\n const version = extractVersion(userAgent, /(?:opr|opera)\\/([0-9.]+)/i);\n return {\n name: 'Opera',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: isChromium() ? 'chromium' : 'unknown'\n };\n }\n \n // Vivaldi\n if (ua.includes('vivaldi/')) {\n const version = extractVersion(userAgent, /vivaldi\\/([0-9.]+)/i);\n return {\n name: 'Vivaldi',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Yandex Browser\n if (ua.includes('yabrowser/')) {\n const version = extractVersion(userAgent, /yabrowser\\/([0-9.]+)/i);\n return {\n name: 'Yandex Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Internet Explorer\n if (ua.includes('msie') || ua.includes('trident/')) {\n const version = extractVersion(userAgent, /(?:msie |rv:)([0-9.]+)/i);\n return {\n name: 'Internet Explorer',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'trident'\n };\n }\n \n // UC Browser\n if (ua.includes('ucbrowser/')) {\n const version = extractVersion(userAgent, /ucbrowser\\/([0-9.]+)/i);\n return {\n name: 'UC Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // QQ Browser\n if (ua.includes('qqbrowser/')) {\n const version = extractVersion(userAgent, /qqbrowser\\/([0-9.]+)/i);\n return {\n name: 'QQ Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Unknown browser\n return {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n };\n}\n\n/**\n * Detect operating system\n */\nfunction detectOS(userAgent: string): { name: string; version: string; family: string } {\n const ua = userAgent.toLowerCase();\n \n // Windows\n if (ua.includes('windows nt')) {\n const version = extractVersion(userAgent, /windows nt ([0-9.]+)/i);\n let osName = 'Windows';\n \n // Map NT versions to friendly names\n switch (version) {\n case '10.0': osName = 'Windows 10/11'; break;\n case '6.3': osName = 'Windows 8.1'; break;\n case '6.2': osName = 'Windows 8'; break;\n case '6.1': osName = 'Windows 7'; break;\n case '6.0': osName = 'Windows Vista'; break;\n case '5.1': osName = 'Windows XP'; break;\n default: osName = 'Windows';\n }\n \n return {\n name: osName,\n version,\n family: 'windows'\n };\n }\n \n // macOS / Mac OS X\n if (ua.includes('mac os x') || ua.includes('macos')) {\n const version = extractVersion(userAgent, /mac os x ([0-9._]+)/i) ||\n extractVersion(userAgent, /macos ([0-9._]+)/i);\n return {\n name: 'macOS',\n version: version.replace(/_/g, '.'),\n family: 'macos'\n };\n }\n \n // iOS\n if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod') || isIPad()) {\n const version = extractVersion(userAgent, /os ([0-9._]+)/i);\n return {\n name: 'iOS',\n version: version.replace(/_/g, '.'),\n family: 'ios'\n };\n }\n \n // Android\n if (isAndroid()) {\n const version = extractVersion(userAgent, /android ([0-9.]+)/i);\n return {\n name: 'Android',\n version,\n family: 'android'\n };\n }\n \n // Linux\n if (ua.includes('linux')) {\n return {\n name: 'Linux',\n version: 'Unknown',\n family: 'linux'\n };\n }\n \n // Chrome OS\n if (ua.includes('cros')) {\n const version = extractVersion(userAgent, /cros [a-z0-9_]+ ([0-9.]+)/i);\n return {\n name: 'Chrome OS',\n version,\n family: 'linux'\n };\n }\n \n // FreeBSD\n if (ua.includes('freebsd')) {\n return {\n name: 'FreeBSD',\n version: 'Unknown',\n family: 'unix'\n };\n }\n \n // Unknown OS\n return {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n };\n}\n\n/**\n * Detect device type\n */\nfunction detectDevice(userAgent: string): { type: 'desktop' | 'mobile' | 'tablet'; vendor?: string; model?: string } {\n const ua = userAgent.toLowerCase();\n \n // Tablet detection\n if (ua.includes('tablet') || isIPad()) {\n if (isIPad()) {\n return { type: 'tablet', vendor: 'Apple', model: 'iPad' };\n }\n if (ua.includes('kindle')) {\n return { type: 'tablet', vendor: 'Amazon', model: 'Kindle' };\n }\n return { type: 'tablet' };\n }\n \n // Mobile detection\n if (ua.includes('mobile') || \n ua.includes('iphone') || \n ua.includes('ipod') || \n isAndroid()) {\n \n if (ua.includes('iphone')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPhone' };\n }\n if (ua.includes('ipod')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPod' };\n }\n if (isAndroid() && ua.includes('mobile')) {\n return { type: 'mobile', vendor: 'Android' };\n }\n \n return { type: 'mobile' };\n }\n \n // Desktop (default)\n return { type: 'desktop' };\n}\n\n/**\n * Check for suspicious patterns in user agent\n */\nfunction analyzeSuspiciousPatterns(userAgent: string): { isBot: boolean; patterns: string[]; category: string } {\n const patterns: string[] = [];\n let category = 'legitimate';\n \n // Bot patterns\n const botKeywords = [\n 'bot', 'crawler', 'spider', 'scraper', 'automation',\n 'headless', 'phantom', 'selenium', 'webdriver',\n 'google', 'bing', 'yahoo', 'baidu', 'yandex',\n 'facebook', 'twitter', 'linkedin', 'whatsapp'\n ];\n \n for (const keyword of botKeywords) {\n if (userAgent.toLowerCase().includes(keyword)) {\n patterns.push(keyword);\n \n if (['bot', 'crawler', 'spider', 'scraper'].some(k => keyword.includes(k))) {\n category = 'crawler';\n } else if (['selenium', 'webdriver', 'automation'].some(k => keyword.includes(k))) {\n category = 'automation';\n } else if (['headless', 'phantom'].some(k => keyword.includes(k))) {\n category = 'headless';\n }\n }\n }\n \n // Suspicious patterns\n if (userAgent.length < 10) {\n patterns.push('too_short');\n }\n \n if (!userAgent || userAgent === 'Mozilla/5.0') {\n patterns.push('generic_mozilla');\n }\n \n const isBot = patterns.length > 0;\n \n return { isBot, patterns, category };\n}\n\n/**\n * Enhanced user agent analysis\n */\nexport function analyzeUserAgent(userAgent?: string): UserAgentAnalysis {\n const ua = userAgent || navigator.userAgent || '';\n \n const browser = detectBrowser(ua);\n const os = detectOS(ua);\n const device = detectDevice(ua);\n const suspicious = analyzeSuspiciousPatterns(ua);\n \n return {\n browser: {\n name: browser.name,\n version: browser.version,\n major: browser.major,\n engine: browser.engine as any\n },\n os: {\n name: os.name,\n version: os.version,\n family: os.family as any\n },\n device: {\n type: device.type,\n vendor: device.vendor,\n model: device.model\n },\n suspicious: {\n isBot: suspicious.isBot,\n patterns: suspicious.patterns,\n category: suspicious.category as any\n },\n isMobile: device.type === 'mobile',\n isTablet: device.type === 'tablet',\n isDesktop: device.type === 'desktop',\n isBot: suspicious.isBot,\n raw: ua\n };\n}\n\n/**\n * Get browser engine type\n */\nexport function getBrowserEngine(): 'chromium' | 'webkit' | 'gecko' | 'trident' | 'unknown' {\n if (isChromium()) return 'chromium';\n if (isWebKit()) return 'webkit';\n if (isGecko()) return 'gecko';\n \n const ua = navigator.userAgent.toLowerCase();\n if (ua.includes('trident')) return 'trident';\n \n return 'unknown';\n}\n\n/**\n * Check if running on mobile device\n */\nexport function isMobile(): boolean {\n return detectDevice(navigator.userAgent).type === 'mobile';\n}\n\n/**\n * Check if running on tablet\n */\nexport function isTablet(): boolean {\n return detectDevice(navigator.userAgent).type === 'tablet';\n}\n\n/**\n * Check if running on desktop\n */\nexport function isDesktop(): boolean {\n return detectDevice(navigator.userAgent).type === 'desktop';\n}","export interface IncognitoDetection {\n likelihood: number; // 0..1\n methods: string[];\n}\n\nfunction safeHas(fn: () => any): boolean {\n try {\n return !!fn();\n } catch {\n return false;\n }\n}\n\n/**\n * Test if localStorage actually works (not just exists)\n */\nasync function testLocalStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if sessionStorage actually works (not just exists)\n */\nasync function testSessionStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if IndexedDB actually works (not just exists)\n */\nasync function testIndexedDB(): Promise<boolean> {\n try {\n if (!window.indexedDB) return false;\n // Try to open a test database\n return new Promise((resolve) => {\n const request = indexedDB.open(\"__incognito_test__\", 1);\n request.onsuccess = () => {\n request.result.close();\n indexedDB.deleteDatabase(\"__incognito_test__\");\n resolve(true);\n };\n request.onerror = () => resolve(false);\n request.onblocked = () => resolve(false);\n });\n } catch {\n return false;\n }\n}\n\n/**\n * Test if cookies actually work (write and read)\n */\nfunction testCookies(): boolean {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n document.cookie = `${testKey}=${testValue}; SameSite=Strict; path=/`;\n const hasCookie = document.cookie.indexOf(`${testKey}=${testValue}`) !== -1;\n // Clean up\n document.cookie = `${testKey}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n return hasCookie;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if navigator.languages is suspicious (Chrome 86+ incognito has only 1 value)\n */\nfunction checkLanguagesAnomaly(): boolean {\n try {\n if (Array.isArray(navigator.languages)) {\n // In Chrome 86+ incognito, navigator.languages only has 1 element (same as navigator.language)\n // In normal mode, it usually has multiple\n if (navigator.languages.length === 1 && navigator.language) {\n return navigator.languages[0] === navigator.language;\n }\n }\n return false;\n } catch {\n return false;\n }\n}\n\nexport async function detectIncognitoHeuristics(): Promise<IncognitoDetection> {\n const methods: string[] = [];\n let score = 0;\n\n // CRITICAL: Test if localStorage actually works (not just exists)\n // In incognito, localStorage may exist but fail on write/read\n const localStorageWorks = await testLocalStorage();\n if (!localStorageWorks) {\n score += 0.25;\n methods.push(\"localStorage_blocked\");\n }\n\n // CRITICAL: Test if sessionStorage actually works\n const sessionStorageWorks = await testSessionStorage();\n if (!sessionStorageWorks) {\n score += 0.2;\n methods.push(\"sessionStorage_blocked\");\n }\n\n // CRITICAL: Test if IndexedDB actually works\n // In Firefox incognito, IndexedDB exists but throws errors\n const indexedDBWorks = await testIndexedDB();\n if (!indexedDBWorks) {\n score += 0.15;\n methods.push(\"indexedDB_blocked\");\n }\n\n // CRITICAL: Test if cookies actually work\n const cookiesWork = testCookies();\n if (!cookiesWork) {\n score += 0.2;\n methods.push(\"cookies_blocked\");\n }\n\n // Chrome 86+ incognito: navigator.languages has only 1 value\n // This is a strong indicator in Chrome/Brave\n if (checkLanguagesAnomaly()) {\n score += 0.25; // Increased weight - very reliable in Chrome/Brave\n methods.push(\"languages_single_value\");\n }\n\n // Additional Chrome/Brave-specific checks\n // In Chrome/Brave incognito, some APIs may exist but behave differently\n try {\n // Check if we can actually write to localStorage (even if it exists)\n if (localStorageWorks) {\n // Try to detect if localStorage is in a \"temporary\" state\n // In incognito, localStorage may work but be cleared between sessions\n const testKey = \"__incognito_persistence_test__\";\n const testValue = \"persist_test\";\n localStorage.setItem(testKey, testValue);\n // Immediately check if it persisted (some browsers clear it instantly in incognito)\n const persisted = localStorage.getItem(testKey) === testValue;\n localStorage.removeItem(testKey);\n if (!persisted) {\n score += 0.2;\n methods.push(\"localStorage_not_persistent\");\n }\n }\n } catch {\n // Ignore\n }\n\n // storage.estimate quota anomalies (more precise thresholds)\n try {\n if ((navigator as any).storage?.estimate) {\n const est = await (navigator as any).storage.estimate();\n const quota = est?.quota || 0;\n const usage = est?.usage || 0;\n\n // In incognito, quota is usually very low (< 120MB) or 0\n if (quota === 0) {\n score += 0.3;\n methods.push(\"storage_quota_zero\");\n } else if (quota > 0 && quota < 120 * 1024 * 1024) {\n score += 0.25;\n methods.push(\"storage_quota_low\");\n }\n\n // Usage is usually 0 in incognito\n if (usage === 0 && quota > 0) {\n score += 0.1;\n methods.push(\"storage_usage_zero\");\n }\n } else {\n methods.push(\"storage_estimate_unavailable\");\n }\n } catch {\n methods.push(\"storage_estimate_error\");\n }\n\n // ServiceWorker/Cache restritos\n if (!(\"serviceWorker\" in navigator)) {\n score += 0.1;\n methods.push(\"service_worker_absent\");\n }\n if (!(\"caches\" in window)) {\n score += 0.05;\n methods.push(\"cache_api_absent\");\n }\n\n // Permissions API (push/notifications) - more reliable test\n try {\n if ((navigator as any).permissions?.query) {\n const res = await (navigator as any).permissions.query({\n name: \"notifications\" as any,\n });\n if (res?.state === \"denied\") {\n score += 0.05;\n methods.push(\"notifications_denied\");\n }\n }\n } catch {\n methods.push(\"permissions_query_error\");\n }\n\n // File System Access API (Chrome only, blocked in incognito)\n if (!safeHas(() => (window as any).showOpenFilePicker)) {\n methods.push(\"fs_access_absent\");\n }\n\n // Network Information API (blocked in some browsers incognito)\n if (!(\"connection\" in navigator)) {\n methods.push(\"network_info_absent\");\n }\n\n // Bound score and determine likelihood\n score = Math.max(0, Math.min(1, score));\n\n // High confidence thresholds\n // If multiple storage APIs are blocked, very likely incognito\n const blockedStorageCount = [\n localStorageWorks,\n sessionStorageWorks,\n indexedDBWorks,\n cookiesWork,\n ].filter((x) => !x).length;\n if (blockedStorageCount >= 3) {\n score = Math.max(score, 0.85); // High confidence\n } else if (blockedStorageCount >= 2) {\n score = Math.max(score, 0.7); // Medium-high confidence\n }\n\n // CRITICAL: Chrome/Brave incognito often shows languages_single_value\n // If this is detected along with other signals, boost confidence\n const hasLanguagesAnomaly = methods.includes(\"languages_single_value\");\n if (hasLanguagesAnomaly && (blockedStorageCount >= 1 || score >= 0.2)) {\n score = Math.max(score, 0.5); // Medium confidence - likely incognito\n }\n\n return { likelihood: score, methods };\n}\n","/**\n * Hardware Fingerprinting Module\n * Based on FingerprintJS hardware detection techniques\n */\n\n/**\n * Device Memory Detection\n * Detects available device memory in GB\n */\nexport function getDeviceMemory(): number | null {\n try {\n // navigator.deviceMemory returns memory in GB (e.g., 8 for 8GB)\n if ('deviceMemory' in navigator) {\n const memory = (navigator as any).deviceMemory;\n return typeof memory === 'number' ? memory : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Hardware Concurrency Detection\n * Detects number of logical processors\n */\nexport function getHardwareConcurrency(): number | null {\n try {\n if ('hardwareConcurrency' in navigator) {\n const concurrency = navigator.hardwareConcurrency;\n return typeof concurrency === 'number' ? concurrency : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * CPU Architecture Detection\n * Attempts to detect CPU architecture from various sources\n */\nexport function getArchitecture(): string {\n try {\n // Try multiple methods to detect architecture\n const sources = [\n navigator.platform,\n navigator.userAgent,\n // Check for ARM indicators\n navigator.userAgent.includes('ARM') ? 'ARM' : null,\n navigator.userAgent.includes('arm64') ? 'ARM64' : null,\n navigator.userAgent.includes('aarch64') ? 'ARM64' : null,\n // Check for x86 indicators\n navigator.userAgent.includes('x86_64') ? 'x86_64' : null,\n navigator.userAgent.includes('WOW64') ? 'x86_64' : null,\n navigator.userAgent.includes('Win64') ? 'x86_64' : null,\n // Check for Intel indicators\n navigator.userAgent.includes('Intel') ? 'Intel' : null,\n ].filter(Boolean);\n\n return sources.join('|') || 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Max Touch Points Detection\n * Detects maximum number of simultaneous touch contact points\n */\nexport function getMaxTouchPoints(): number {\n try {\n return navigator.maxTouchPoints || 0;\n } catch {\n return 0;\n }\n}\n\n/**\n * Check if hardware fingerprinting is available\n */\nexport function isHardwareDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete hardware fingerprint\n */\nexport interface HardwareFingerprint {\n deviceMemory: number | null;\n hardwareConcurrency: number | null;\n architecture: string;\n maxTouchPoints: number;\n platform: string;\n}\n\nexport function getHardwareFingerprint(): HardwareFingerprint {\n return {\n deviceMemory: getDeviceMemory(),\n hardwareConcurrency: getHardwareConcurrency(),\n architecture: getArchitecture(),\n maxTouchPoints: getMaxTouchPoints(),\n platform: navigator.platform || 'unknown',\n };\n}","/**\n * System Fingerprinting Module\n * Based on FingerprintJS system detection techniques\n */\n\n/**\n * Timezone Detection\n * Gets the user's timezone with multiple fallbacks\n */\nexport function getTimezone(): string {\n try {\n // Primary method: Intl.DateTimeFormat\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone) {\n return timezone;\n }\n }\n\n // Fallback: timezone offset (STABLE - use standard time to avoid DST changes)\n const offset = new Date(2024, 0, 1).getTimezoneOffset();\n return `UTC${offset > 0 ? '-' : '+'}${Math.abs(offset / 60)}`;\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Languages Detection\n * Gets complete language preferences list\n */\nexport function getLanguages(): string[] {\n try {\n const languages: string[] = [];\n \n // Get navigator.languages (preferred)\n if (navigator.languages && Array.isArray(navigator.languages)) {\n languages.push(...navigator.languages);\n }\n \n // Fallback to navigator.language\n if (navigator.language) {\n languages.push(navigator.language);\n }\n \n // Additional fallbacks\n const legacyLanguage = (navigator as any).userLanguage || (navigator as any).browserLanguage;\n if (legacyLanguage) {\n languages.push(legacyLanguage);\n }\n\n // Remove duplicates and return\n return [...new Set(languages)];\n } catch {\n return ['unknown'];\n }\n}\n\n/**\n * Date/Time Locale Detection\n * Detects locale formatting preferences\n */\nexport function getDateTimeLocale(): Record<string, string> {\n try {\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const formatter = new Intl.DateTimeFormat();\n const options = formatter.resolvedOptions();\n \n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n };\n }\n \n return { locale: 'unknown' };\n } catch {\n return { locale: 'unknown' };\n }\n}\n\n/**\n * Platform Extended Detection\n * Enhanced platform detection with additional info\n */\nexport function getPlatformExtended(): Record<string, any> {\n try {\n const platform: Record<string, any> = {\n platform: navigator.platform || 'unknown',\n oscpu: (navigator as any).oscpu || null,\n vendor: navigator.vendor || null,\n };\n\n // Try to detect OS from user agent\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows')) {\n platform.os = 'Windows';\n if (userAgent.includes('Windows NT 10.0')) platform.osVersion = '10';\n else if (userAgent.includes('Windows NT 6.3')) platform.osVersion = '8.1';\n else if (userAgent.includes('Windows NT 6.2')) platform.osVersion = '8';\n else if (userAgent.includes('Windows NT 6.1')) platform.osVersion = '7';\n } else if (userAgent.includes('Macintosh') || userAgent.includes('Mac OS')) {\n platform.os = 'macOS';\n const match = userAgent.match(/Mac OS X ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n } else if (userAgent.includes('Linux')) {\n platform.os = 'Linux';\n } else if (userAgent.includes('Android')) {\n platform.os = 'Android';\n const match = userAgent.match(/Android ([0-9.]+)/);\n if (match && match[1]) platform.osVersion = match[1];\n } else if (userAgent.includes('iOS') || userAgent.includes('iPhone') || userAgent.includes('iPad')) {\n platform.os = 'iOS';\n const match = userAgent.match(/OS ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n }\n\n return platform;\n } catch {\n return { platform: 'unknown' };\n }\n}\n\n/**\n * Check if system fingerprinting is available\n */\nexport function isSystemDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete system fingerprint\n */\nexport interface SystemFingerprint {\n timezone: string;\n languages: string[];\n dateTimeLocale: Record<string, string>;\n platform: Record<string, any>;\n cookiesEnabled: boolean;\n}\n\nexport function getSystemFingerprint(): SystemFingerprint {\n return {\n timezone: getTimezone(),\n languages: getLanguages(),\n dateTimeLocale: getDateTimeLocale(),\n platform: getPlatformExtended(),\n cookiesEnabled: navigator.cookieEnabled || false,\n };\n}","/**\n * Storage Fingerprinting Module\n * Based on FingerprintJS storage detection techniques\n */\n\n/**\n * Local Storage Detection\n * Tests availability and behavior of localStorage\n */\nexport function getLocalStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof localStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n // Storage might be blocked or disabled\n return \"blocked\";\n }\n}\n\n/**\n * Session Storage Detection\n * Tests availability and behavior of sessionStorage\n */\nexport function getSessionStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof sessionStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n return \"blocked\";\n }\n}\n\n/**\n * IndexedDB Detection\n * Tests availability of IndexedDB\n */\nexport function getIndexedDBSupport(): Promise<boolean | \"blocked\"> {\n return new Promise((resolve) => {\n try {\n if (!(\"indexedDB\" in window)) {\n resolve(false);\n return;\n }\n\n const testName = \"__rb_test_db__\";\n const request = indexedDB.open(testName, 1);\n\n let hasResolved = false;\n\n const resolveOnce = (value: boolean | \"blocked\") => {\n if (!hasResolved) {\n hasResolved = true;\n resolve(value);\n }\n };\n\n // Set a timeout to avoid hanging\n setTimeout(() => resolveOnce(\"blocked\"), 1000);\n\n request.onerror = () => resolveOnce(\"blocked\");\n request.onsuccess = () => {\n try {\n const db = request.result;\n db.close();\n // Try to delete the test database\n const deleteRequest = indexedDB.deleteDatabase(testName);\n deleteRequest.onsuccess = () => resolveOnce(true);\n deleteRequest.onerror = () => resolveOnce(true); // Still consider it working\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n\n request.onupgradeneeded = () => {\n try {\n const db = request.result;\n if (!db.objectStoreNames.contains(\"test\")) {\n db.createObjectStore(\"test\");\n }\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n } catch {\n resolve(\"blocked\");\n }\n });\n}\n\n/**\n * WebSQL Detection (Legacy)\n * Tests availability of WebSQL (deprecated but still useful for fingerprinting)\n */\nexport function getWebSQLSupport(): boolean {\n try {\n return (\n \"openDatabase\" in window &&\n typeof (window as any).openDatabase === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Storage Quota Detection\n * Attempts to detect storage quota information\n */\nexport async function getStorageQuota(): Promise<Record<string, any>> {\n try {\n if (\"storage\" in navigator && \"estimate\" in navigator.storage) {\n const estimate = await navigator.storage.estimate();\n return {\n quota: estimate.quota || null,\n usage: estimate.usage || null,\n available:\n estimate.quota && estimate.usage\n ? estimate.quota - estimate.usage\n : null,\n };\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/**\n * Check if storage fingerprinting is available\n */\nexport function isStorageDetectionAvailable(): boolean {\n return typeof window !== \"undefined\";\n}\n\n/**\n * Get complete storage fingerprint\n */\nexport interface StorageFingerprint {\n localStorage: boolean | \"blocked\";\n sessionStorage: boolean | \"blocked\";\n indexedDB: boolean | \"blocked\";\n webSQL: boolean;\n quota: Record<string, any>;\n}\n\nexport async function getStorageFingerprint(): Promise<StorageFingerprint> {\n const [indexedDBSupport, quota] = await Promise.all([\n getIndexedDBSupport(),\n getStorageQuota(),\n ]);\n\n return {\n localStorage: getLocalStorageSupport(),\n sessionStorage: getSessionStorageSupport(),\n indexedDB: indexedDBSupport,\n webSQL: getWebSQLSupport(),\n quota,\n };\n}\n","/**\n * Math Fingerprinting Module\n * Based on FingerprintJS mathematical operations fingerprinting\n * Different JavaScript engines and browsers handle floating-point operations differently\n */\n\n/**\n * Math operations that produce different results across browsers/engines\n * These are based on engine-specific implementations and optimizations\n */\nexport function getMathFingerprint(): Record<string, number> {\n const M = Math;\n const fallback = () => 0;\n\n // Native operations (some might not be available in older browsers)\n const acos = M.acos || fallback;\n const acosh = M.acosh || fallback;\n const asin = M.asin || fallback;\n const asinh = M.asinh || fallback;\n const atanh = M.atanh || fallback;\n const atan = M.atan || fallback;\n const sin = M.sin || fallback;\n const sinh = M.sinh || fallback;\n const cos = M.cos || fallback;\n const cosh = M.cosh || fallback;\n const tan = M.tan || fallback;\n const tanh = M.tanh || fallback;\n const exp = M.exp || fallback;\n const expm1 = M.expm1 || fallback;\n const log1p = M.log1p || fallback;\n\n // Polyfill operations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - 1 / M.exp(value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + 1 / M.exp(value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n try {\n // These values are empirically chosen to produce different results across engines\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n\n // Hyperbolic functions\n acosh: acosh(1e308),\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinh: asinh(1),\n asinhPf: asinhPf(1),\n atanh: atanh(0.5),\n atanhPf: atanhPf(0.5),\n cosh: cosh(1),\n coshPf: coshPf(1),\n sinh: sinh(1),\n sinhPf: sinhPf(1),\n tanh: tanh(1),\n tanhPf: tanhPf(1),\n\n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n expm1Pf: expm1Pf(1),\n log1p: log1p(10),\n log1pPf: log1pPf(10),\n\n // Power functions\n powPI: powPI(-100),\n \n // Additional operations that may vary\n sqrt: M.sqrt(2),\n cbrt: M.cbrt ? M.cbrt(8) : fallback(),\n log: M.log(M.E),\n log10: M.log10 ? M.log10(10) : fallback(),\n log2: M.log2 ? M.log2(2) : fallback(),\n \n // Edge cases that might produce different results\n special_0: M.sin(M.PI),\n special_1: M.cos(M.PI / 2),\n special_2: M.tan(M.PI / 4),\n special_3: M.sqrt(-1), // Should be NaN\n special_4: M.log(-1), // Should be NaN\n special_5: 1 / 0, // Should be Infinity\n special_6: 0 / 0, // Should be NaN\n };\n } catch (error) {\n // If any operation fails, return a basic fingerprint\n return {\n error: 1,\n basicMath: M.PI + M.E,\n };\n }\n}\n\n/**\n * Additional mathematical constants that might vary\n */\nexport function getMathConstants(): Record<string, number> {\n try {\n return {\n PI: Math.PI,\n E: Math.E,\n LN2: Math.LN2,\n LN10: Math.LN10,\n LOG2E: Math.LOG2E,\n LOG10E: Math.LOG10E,\n SQRT1_2: Math.SQRT1_2,\n SQRT2: Math.SQRT2,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Test floating-point precision differences\n */\nexport function getFloatingPointBehavior(): Record<string, number> {\n try {\n return {\n // These operations can reveal precision differences\n precision1: 0.1 + 0.2,\n precision2: 0.3 - 0.1,\n precision3: 0.1 * 3,\n precision4: 1.1 - 0.9,\n \n // Large number operations\n largeAdd: 1e16 + 1,\n largeSub: 1e16 - 1,\n \n // Very small numbers\n tiny: Number.MIN_VALUE,\n epsilon: Number.EPSILON || 2.220446049250313e-16,\n \n // Special number properties\n maxValue: Number.MAX_VALUE,\n maxSafeInteger: Number.MAX_SAFE_INTEGER || 9007199254740991,\n minSafeInteger: Number.MIN_SAFE_INTEGER || -9007199254740991,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathDetectionAvailable(): boolean {\n return typeof Math !== 'undefined';\n}\n\n/**\n * Get complete math fingerprint\n */\nexport interface MathFingerprint {\n operations: Record<string, number>;\n constants: Record<string, number>;\n floatingPoint: Record<string, number>;\n}\n\nexport function getCompleteMathFingerprint(): MathFingerprint {\n return {\n operations: getMathFingerprint(),\n constants: getMathConstants(),\n floatingPoint: getFloatingPointBehavior(),\n };\n}","/**\n * DOM Blockers Detection Module\n * Based on FingerprintJS advanced content blocker detection\n * Detects ad blockers, privacy extensions, and content filters\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\ntype BlockerFilters = Record<string, string[]>;\n\n/**\n * Error types for DOM blockers detection\n */\nexport const enum DOMBlockerError {\n NotSupported = 'NOT_SUPPORTED',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n DOMNotAvailable = 'DOM_NOT_AVAILABLE',\n Timeout = 'TIMEOUT',\n SecurityError = 'SECURITY_ERROR',\n}\n\n/**\n * Ad blocker and content blocker selectors\n * Obfuscated using base64 to avoid detection by the blockers themselves\n */\nexport function getBlockerFilters(): BlockerFilters {\n const fromB64 = atob; // Base64 decoder for obfuscated selectors\n \n return {\n // Popular ad blockers\n adBlock: [\n '#ad-banner',\n '.advertisement',\n fromB64('I2FkLWNvbnRhaW5lcg=='), // #ad-container\n fromB64('LmFkdmVydGlzZW1lbnQ='), // .advertisement\n fromB64('W2NsYXNzKj0iYWQtIl0='), // [class*=\"ad-\"]\n ],\n \n uBlockOrigin: [\n '#ublock-stats',\n '.adsbygoogle',\n fromB64('I2dvb2dsZV9hZHM='), // #google_ads\n fromB64('LmFkc2J5Z29vZ2xl'), // .adsbygoogle\n fromB64('LnVibG9jay1ibG9ja2Vk'), // .ublock-blocked\n ],\n \n adGuardBase: [\n '.BetterJsPopOverlay',\n fromB64('I2FkXzMwMFgyNTA='), // #ad_300X250\n fromB64('I2Jhbm5lcmZsb2F0'), // #bannerfloat\n fromB64('I2NhbXBhaWduLWJhbm5lcg=='), // #campaign-banner\n fromB64('I0FkLUNvbnRlbnQ='), // #Ad-Content\n ],\n \n adGuardAnnoyances: [\n '.hs-sosyal',\n '#cookieconsentdiv',\n 'div[class^=\"app_gdpr\"]',\n '.as-oil',\n '[data-cypress=\"soft-push-notification-modal\"]',\n ],\n \n easyList: [\n '.yb-floorad',\n fromB64('LndpZGdldF9wb19hZHNfd2lkZ2V0'), // .widget_po_ads_widget\n fromB64('LnRyYWZmaWNqdW5reS1hZA=='), // .trafficjunky-ad\n '.textad_headline',\n fromB64('LnNwb25zb3JlZC10ZXh0LWxpbmtz'), // .sponsored-text-links\n ],\n \n // Privacy focused blockers\n privacyBadger: [\n '#privacy-badger-popup',\n '.privacy-badger-blocked',\n fromB64('LnByaXZhY3ktYmFkZ2Vy'), // .privacy-badger\n ],\n \n ghostery: [\n '#ghostery-popup',\n '.ghostery-blocking',\n fromB64('Lmdob3N0ZXJ5LWJsb2NrZWQ='), // .ghostery-blocked\n ],\n \n // Browser built-in blockers\n brave: [\n '#brave-ads-blocked',\n '.brave-blocked',\n fromB64('LmJyYXZlLWFkLWJsb2Nr'), // .brave-ad-block\n ],\n \n // Social media blockers\n facebookContainer: [\n '.facebook-container-blocked',\n fromB64('LmZiLWJsb2NrZWQ='), // .fb-blocked\n ],\n \n // Cookie and GDPR blockers\n cookieBlockers: [\n '.cookie-notice-blocked',\n '#cookie-banner-hidden',\n fromB64('LmNvb2tpZS1ibG9ja2Vy'), // .cookie-blocker\n ],\n \n // Tracker blockers\n trackingProtection: [\n '.tracking-blocked',\n '#tracking-protection-enabled',\n fromB64('LnRyYWNrZXItYmxvY2tlZA=='), // .tracker-blocked\n ],\n };\n}\n\n/**\n * Creates a DOM element based on a CSS selector\n */\nfunction selectorToElement(selector: string): HTMLElement {\n const element = document.createElement('div');\n \n // Parse basic selectors\n if (selector.startsWith('#')) {\n element.id = selector.substring(1);\n } else if (selector.startsWith('.')) {\n element.className = selector.substring(1);\n } else if (selector.includes('[')) {\n // Handle attribute selectors like [class*=\"ad-\"]\n try {\n const match = selector.match(/\\[([^=]+)([*^$|~]?=)\"([^\"]+)\"\\]/);\n if (match && match[1] && match[3]) {\n const [, attr, operator, value] = match;\n if (operator === '*=') {\n element.setAttribute(attr, `test-${value}-test`);\n } else {\n element.setAttribute(attr, value);\n }\n }\n } catch {\n // Fallback to class\n element.className = 'test-element';\n }\n } else {\n // Default fallback\n element.className = selector.replace(/[^a-zA-Z0-9-_]/g, '');\n }\n \n return element;\n}\n\n/**\n * Forces an element to be visible for testing (optimized)\n * Based on FingerprintJS implementation\n */\nfunction forceShow(element: HTMLElement): void {\n const style = element.style;\n style.setProperty('visibility', 'hidden', 'important');\n style.setProperty('display', 'block', 'important');\n style.setProperty('position', 'absolute', 'important');\n style.setProperty('left', '-9999px', 'important');\n style.setProperty('width', '1px', 'important');\n style.setProperty('height', '1px', 'important');\n // Prevent interference from other styles\n style.setProperty('pointer-events', 'none', 'important');\n style.setProperty('z-index', '-1', 'important');\n}\n\n/**\n * Waits for a specified amount of time\n */\nfunction wait(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Tests which CSS selectors are blocked by content blockers\n * Optimized for performance and stability\n */\nexport async function getBlockedSelectors<T extends string>(\n selectors: readonly T[]\n): Promise<{ [K in T]?: true }> {\n const doc = document;\n const root = doc.createElement('div');\n const elements = new Array<HTMLElement | undefined>(selectors.length);\n const blockedSelectors: { [K in T]?: true } = {};\n\n forceShow(root);\n \n // Create document fragment for better performance\n const fragment = doc.createDocumentFragment();\n\n // Create all test elements first (batched DOM operations)\n for (let i = 0; i < selectors.length; i++) {\n const selector = selectors[i];\n if (selector) {\n try {\n const element = selectorToElement(selector);\n const holder = doc.createElement('div');\n \n // Special handling for dialog elements\n if (element.tagName === 'DIALOG') {\n (element as HTMLDialogElement).show?.();\n }\n \n forceShow(holder);\n holder.appendChild(element);\n fragment.appendChild(holder);\n elements[i] = element;\n } catch (error) {\n // Skip problematic selectors\n elements[i] = undefined;\n }\n }\n }\n\n root.appendChild(fragment);\n\n // Wait for document.body to be available with timeout\n let attempts = 0;\n while (!doc.body && attempts < 100) {\n await wait(50);\n attempts++;\n }\n \n if (!doc.body) {\n throw new Error('Document body not available for DOM blockers detection');\n }\n \n doc.body.appendChild(root);\n\n try {\n // Small delay to let blockers process (reduced from 100ms to 50ms)\n await wait(50);\n \n // Check which elements are blocked using requestAnimationFrame for better performance\n await new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n for (let i = 0; i < selectors.length; i++) {\n const element = elements[i];\n const selector = selectors[i];\n if (element && selector && !element.offsetParent) {\n blockedSelectors[selector] = true;\n }\n }\n resolve();\n });\n });\n } finally {\n // Ensure cleanup even if errors occur\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch (error) {\n // Fallback cleanup\n setTimeout(() => {\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch {\n // Last resort - ignore cleanup errors\n }\n }, 0);\n }\n }\n\n return blockedSelectors;\n}\n\n/**\n * Counts truthy values in an array\n */\nfunction countTruthy<T>(array: T[]): number {\n return array.filter(Boolean).length;\n}\n\n/**\n * Main DOM blockers detection function\n * Enhanced with browser compatibility and error handling\n */\nexport async function getDomBlockers(options: { debug?: boolean; timeout?: number } = {}): Promise<string[] | DOMBlockerError> {\n const { debug = false, timeout = 5000 } = options;\n \n try {\n // Check if detection is applicable for this browser\n if (!isDomBlockersDetectionAvailable()) {\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers detection not applicable for this browser');\n }\n return DOMBlockerError.BrowserIncompatible;\n }\n\n // Check DOM availability\n if (!document || !document.body) {\n if (debug) {\n console.log('[RabbitTracker] DOM not ready for blockers detection');\n }\n return DOMBlockerError.DOMNotAvailable;\n }\n\n const filters = getBlockerFilters();\n const filterNames = Object.keys(filters) as Array<keyof typeof filters>;\n const allSelectors = ([] as string[]).concat(\n ...filterNames.map((filterName) => filters[filterName] || [])\n );\n \n // Add timeout protection\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('DOM blockers detection timeout')), timeout);\n });\n\n const blockedSelectors = await Promise.race([\n getBlockedSelectors(allSelectors),\n timeoutPromise\n ]);\n\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers Debug:', {\n totalSelectors: allSelectors.length,\n blockedCount: Object.keys(blockedSelectors).length,\n blockedSelectors,\n });\n }\n\n // Detect active blockers (if >60% of selectors are blocked)\n const activeBlockers = filterNames.filter((filterName) => {\n const selectors = filters[filterName];\n if (!selectors || selectors.length === 0) {\n return false;\n }\n const blockedCount = countTruthy(\n selectors.map((selector) => blockedSelectors[selector])\n );\n return blockedCount > selectors.length * 0.6;\n });\n\n return activeBlockers.sort();\n } catch (error) {\n if (debug) {\n console.error('[RabbitTracker] DOM Blockers detection failed:', error);\n }\n \n // Classify error types\n if (error instanceof Error) {\n if (error.message.includes('timeout')) {\n return DOMBlockerError.Timeout;\n }\n if (error.name === 'SecurityError' || error.message.includes('SecurityError')) {\n return DOMBlockerError.SecurityError;\n }\n }\n \n return DOMBlockerError.NotSupported;\n }\n}\n\n/**\n * Check if DOM blockers detection is applicable\n * Based on FingerprintJS best practices\n */\nexport function isDomBlockersDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunDOMBlockers;\n}\n\n/**\n * Complete DOM blockers fingerprint\n */\nexport interface DomBlockersFingerprint {\n activeBlockers: string[];\n blockerCount: number;\n hasAdBlocker: boolean;\n hasPrivacyExtension: boolean;\n hasTrackingProtection: boolean;\n}\n\nexport async function getDomBlockersFingerprint(options: { debug?: boolean } = {}): Promise<DomBlockersFingerprint> {\n const activeBlockersResult = await getDomBlockers(options);\n \n // Handle error cases\n const activeBlockers = Array.isArray(activeBlockersResult) ? activeBlockersResult : [];\n \n return {\n activeBlockers,\n blockerCount: activeBlockers.length,\n hasAdBlocker: activeBlockers.some(blocker => \n ['adBlock', 'uBlockOrigin', 'adGuardBase', 'easyList'].includes(blocker)\n ),\n hasPrivacyExtension: activeBlockers.some(blocker =>\n ['privacyBadger', 'ghostery', 'brave'].includes(blocker)\n ),\n hasTrackingProtection: activeBlockers.includes('trackingProtection'),\n };\n}","/**\n * Browser-Specific APIs Detection Module\n * Based on FingerprintJS browser-specific API detection\n * Detects availability and state of browser-specific features and APIs\n */\n\nimport { getBrowserCapabilities, isSecureContext, isSafari, isChrome } from '../../utils/browser';\n\n/**\n * Error types for browser APIs detection\n */\nexport const enum BrowserAPIError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityError = 'SECURITY_ERROR',\n FeatureUnavailable = 'FEATURE_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * PDF Viewer Detection\n * Detects if native PDF viewer is enabled (Chrome/Edge feature)\n */\nexport function getPdfViewerEnabled(): boolean | null {\n try {\n // PDF viewer is primarily a Chrome/Edge feature\n if (!isChrome()) {\n return null;\n }\n return (navigator as any).pdfViewerEnabled ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Apple Pay State Detection\n * Detects Apple Pay availability and state (Safari/iOS feature)\n */\nexport const enum ApplePayState {\n Disabled = 0,\n Enabled = 1,\n NoAPI = -1,\n NotAvailableInInsecureContext = -2,\n NotAvailableInFrame = -3,\n}\n\nexport function getApplePayState(): ApplePayState {\n try {\n // Apple Pay is only available on Safari/iOS\n if (!isSafari()) {\n return ApplePayState.NoAPI;\n }\n\n const { ApplePaySession } = window as any;\n\n if (typeof ApplePaySession?.canMakePayments !== 'function') {\n return ApplePayState.NoAPI;\n }\n\n // Check if we're in an insecure context or frame that might cause issues\n if (!isSecureContext()) {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n\n // Check for cross-origin frame issues\n if (window.self !== window.top) {\n return ApplePayState.NotAvailableInFrame;\n }\n\n try {\n return ApplePaySession.canMakePayments() \n ? ApplePayState.Enabled \n : ApplePayState.Disabled;\n } catch (error) {\n // Handle security errors\n if (error instanceof Error && error.name === 'InvalidAccessError') {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n throw error;\n }\n } catch {\n return ApplePayState.NoAPI;\n }\n}\n\n/**\n * Private Click Measurement Detection\n * Detects Safari's Private Click Measurement API\n */\nexport function getPrivateClickMeasurement(): boolean | null {\n try {\n // Check for Private Click Measurement API (Safari 14.1+)\n return 'attributionReporting' in window || \n 'privateClickMeasurement' in window ||\n null;\n } catch {\n return null;\n }\n}\n\n/**\n * Enhanced Cookies Detection\n * More detailed cookie support detection\n */\nexport interface CookieCapabilities {\n enabled: boolean;\n sameSiteSupport: boolean;\n secureSupport: boolean;\n partitionedSupport: boolean;\n}\n\nexport function getCookieCapabilities(): CookieCapabilities {\n const capabilities: CookieCapabilities = {\n enabled: false,\n sameSiteSupport: false,\n secureSupport: false,\n partitionedSupport: false,\n };\n\n try {\n // Basic cookie support\n capabilities.enabled = navigator.cookieEnabled;\n\n if (!capabilities.enabled) {\n return capabilities;\n }\n\n // Test SameSite support with proper cleanup\n capabilities.sameSiteSupport = testCookieAttribute('__rb_test_samesite', 'SameSite=Strict');\n\n // Test Secure support (only meaningful in HTTPS context)\n if (isSecureContext()) {\n capabilities.secureSupport = testCookieAttribute('__rb_test_secure', 'Secure');\n }\n\n // Test Partitioned support (Chrome 118+) only in secure context\n if (isSecureContext() && isChrome()) {\n capabilities.partitionedSupport = testCookieAttribute(\n '__rb_test_partitioned', \n 'Partitioned; Secure; SameSite=None'\n );\n }\n } catch {\n // Default values already set\n }\n\n return capabilities;\n}\n\n/**\n * Safely test cookie attribute support with guaranteed cleanup\n */\nfunction testCookieAttribute(cookieName: string, attributes: string): boolean {\n try {\n const testValue = '1';\n const cookieString = `${cookieName}=${testValue}; ${attributes}; path=/`;\n \n document.cookie = cookieString;\n const hasSupport = document.cookie.includes(`${cookieName}=${testValue}`);\n \n // Always clean up, even if the test failed\n cleanupTestCookie(cookieName);\n \n return hasSupport;\n } catch {\n // Ensure cleanup even on error\n cleanupTestCookie(cookieName);\n return false;\n }\n}\n\n/**\n * Guaranteed cookie cleanup with multiple fallback strategies\n */\nfunction cleanupTestCookie(cookieName: string): void {\n try {\n // Multiple cleanup strategies to ensure removal\n const cleanupStrategies = [\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=${location.hostname}`,\n `${cookieName}=; max-age=0; path=/`,\n `${cookieName}=; max-age=0; path=/; domain=${location.hostname}`\n ];\n \n for (const strategy of cleanupStrategies) {\n try {\n document.cookie = strategy;\n } catch {\n // Continue with next strategy\n }\n }\n \n // Async cleanup as fallback\n setTimeout(() => {\n try {\n document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n } catch {\n // Final fallback - ignore errors\n }\n }, 100);\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * WebGL Extensions Detection\n * Enhanced WebGL extension detection\n */\nexport function getWebGLExtensions(): string[] {\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n \n if (!gl) {\n return [];\n }\n\n const extensions = (gl as WebGLRenderingContext).getSupportedExtensions() || [];\n return extensions.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Performance Memory Detection\n * Chrome-specific memory information\n */\nexport interface PerformanceMemory {\n usedJSHeapSize?: number;\n totalJSHeapSize?: number;\n jsHeapSizeLimit?: number;\n}\n\nexport function getPerformanceMemory(): PerformanceMemory | null {\n try {\n const memory = (performance as any).memory;\n if (!memory) {\n return null;\n }\n\n return {\n usedJSHeapSize: memory.usedJSHeapSize,\n totalJSHeapSize: memory.totalJSHeapSize,\n jsHeapSizeLimit: memory.jsHeapSizeLimit,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Connection Information Detection\n * Network connection information (Chrome/Edge)\n */\nexport interface ConnectionInfo {\n effectiveType?: string;\n downlink?: number;\n rtt?: number;\n saveData?: boolean;\n}\n\nexport function getConnectionInfo(): ConnectionInfo | null {\n try {\n const connection = (navigator as any).connection || \n (navigator as any).mozConnection || \n (navigator as any).webkitConnection;\n \n if (!connection) {\n return null;\n }\n\n return {\n effectiveType: connection.effectiveType,\n downlink: connection.downlink,\n rtt: connection.rtt,\n saveData: connection.saveData,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Vendor-specific Properties Detection\n * Detects browser vendor-specific properties\n */\nexport interface VendorProperties {\n webkitTemporaryStorage?: boolean;\n webkitPersistentStorage?: boolean;\n safariObjectTypes?: string[];\n chromeRuntime?: boolean;\n mozInnerScreenX?: boolean;\n msCredentials?: boolean;\n}\n\nexport function getVendorProperties(): VendorProperties {\n const properties: VendorProperties = {};\n\n try {\n // Webkit-specific\n properties.webkitTemporaryStorage = 'webkitTemporaryStorage' in navigator;\n properties.webkitPersistentStorage = 'webkitPersistentStorage' in navigator;\n\n // Safari-specific\n if ((window as any).safari) {\n properties.safariObjectTypes = Object.getOwnPropertyNames((window as any).safari);\n }\n\n // Chrome-specific\n properties.chromeRuntime = !!(window as any).chrome?.runtime;\n\n // Firefox-specific\n properties.mozInnerScreenX = 'mozInnerScreenX' in window;\n\n // Edge/IE-specific\n properties.msCredentials = 'msCredentials' in navigator;\n } catch {\n // Properties will remain undefined\n }\n\n return properties;\n}\n\n/**\n * Check if browser APIs detection is available\n */\nexport function isBrowserApisDetectionAvailable(): boolean {\n return typeof window !== 'undefined' && typeof navigator !== 'undefined';\n}\n\n/**\n * Complete browser APIs fingerprint\n */\nexport interface BrowserApisFingerprint {\n pdfViewerEnabled: boolean | null;\n applePayState: ApplePayState;\n privateClickMeasurement: boolean | null;\n cookieCapabilities: CookieCapabilities;\n webglExtensions: string[];\n performanceMemory: PerformanceMemory | null;\n connectionInfo: ConnectionInfo | null;\n vendorProperties: VendorProperties;\n // Computed properties\n browserVendor: string;\n hasNativeFeatures: boolean;\n apiScore: number; // 0-100 based on available APIs\n}\n\nexport function getBrowserApisFingerprint(): BrowserApisFingerprint {\n const pdfViewerEnabled = getPdfViewerEnabled();\n const applePayState = getApplePayState();\n const privateClickMeasurement = getPrivateClickMeasurement();\n const cookieCapabilities = getCookieCapabilities();\n const webglExtensions = getWebGLExtensions();\n const performanceMemory = getPerformanceMemory();\n const connectionInfo = getConnectionInfo();\n const vendorProperties = getVendorProperties();\n\n // Determine browser vendor based on available APIs\n let browserVendor = 'unknown';\n if (vendorProperties.chromeRuntime) {\n browserVendor = 'chrome';\n } else if (applePayState !== ApplePayState.NoAPI) {\n browserVendor = 'safari';\n } else if (vendorProperties.mozInnerScreenX) {\n browserVendor = 'firefox';\n } else if (vendorProperties.msCredentials) {\n browserVendor = 'edge';\n }\n\n // Check for native features\n const hasNativeFeatures = Boolean(\n pdfViewerEnabled ||\n applePayState > ApplePayState.NoAPI ||\n privateClickMeasurement ||\n performanceMemory ||\n connectionInfo\n );\n\n // Calculate API score (0-100)\n const availableApis = [\n pdfViewerEnabled !== null,\n applePayState !== ApplePayState.NoAPI,\n privateClickMeasurement !== null,\n cookieCapabilities.enabled,\n webglExtensions.length > 0,\n performanceMemory !== null,\n connectionInfo !== null,\n Object.keys(vendorProperties).length > 0,\n ];\n \n const apiScore = Math.round((availableApis.filter(Boolean).length / availableApis.length) * 100);\n\n return {\n pdfViewerEnabled,\n applePayState,\n privateClickMeasurement,\n cookieCapabilities,\n webglExtensions,\n performanceMemory,\n connectionInfo,\n vendorProperties,\n browserVendor,\n hasNativeFeatures,\n apiScore,\n };\n}","/**\n * Enhanced Plugin Detection Module\n * Based on FingerprintJS advanced plugin enumeration and detection\n * Provides comprehensive browser plugin, extension, and capability detection\n * Enhanced with browser compatibility and edge case handling\n */\n\nimport { getBrowserCapabilities, isChrome, isFirefox, isEdge } from '../../utils/browser';\n\n/**\n * Error types for plugin detection\n */\nexport const enum PluginDetectionError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityRestricted = 'SECURITY_RESTRICTED',\n NavigatorUnavailable = 'NAVIGATOR_UNAVAILABLE',\n PluginsBlocked = 'PLUGINS_BLOCKED',\n}\n\n/**\n * Plugin information interface\n */\nexport interface PluginInfo {\n name: string;\n filename: string;\n description: string;\n version?: string;\n mimeTypes: string[];\n}\n\n/**\n * Enhanced plugin detection result\n */\nexport interface EnhancedPluginFingerprint {\n plugins: PluginInfo[];\n pluginCount: number;\n mimeTypes: string[];\n mimeTypeCount: number;\n // Capability detection\n flashEnabled: boolean;\n javaEnabled: boolean;\n silverLightEnabled: boolean;\n // Browser-specific detection\n chromeExtensionsBlocked: boolean;\n firefoxExtensionsBlocked: boolean;\n // Security indicators\n securityPlugins: string[];\n adBlockerPlugins: string[];\n // Computed properties\n pluginSignature: string;\n securityScore: number;\n}\n\n/**\n * Get traditional navigator.plugins information (enhanced)\n */\nexport function getNavigatorPlugins(): PluginInfo[] | PluginDetectionError {\n try {\n if (!isEnhancedPluginDetectionAvailable()) {\n return PluginDetectionError.NotSupported;\n }\n\n const navigatorPlugins = safeGetPlugins();\n if (!navigatorPlugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const plugins: PluginInfo[] = [];\n\n if (navigatorPlugins.length === 0) {\n return plugins; // Empty but valid\n }\n\n for (let i = 0; i < navigatorPlugins.length; i++) {\n const plugin = navigatorPlugins[i];\n if (!plugin) continue;\n\n const mimeTypes: string[] = [];\n if (plugin.length > 0) {\n for (let j = 0; j < plugin.length; j++) {\n const mimeType = plugin[j];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n }\n\n plugins.push({\n name: plugin.name || '',\n filename: plugin.filename || '',\n description: plugin.description || '',\n version: (plugin as any).version || undefined,\n mimeTypes,\n });\n }\n\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return [];\n }\n}\n\n/**\n * Get MIME types from navigator.mimeTypes\n */\nexport function getMimeTypes(): string[] {\n try {\n if (!navigator.mimeTypes || navigator.mimeTypes.length === 0) {\n return [];\n }\n\n const mimeTypes: string[] = [];\n for (let i = 0; i < navigator.mimeTypes.length; i++) {\n const mimeType = navigator.mimeTypes[i];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n\n return mimeTypes.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Test if Flash is enabled and available\n */\nexport function testFlashEnabled(): boolean {\n try {\n // Check for Flash plugin\n const hasFlashPlugin = navigator.plugins && \n Array.from(navigator.plugins).some(plugin => \n plugin.name.toLowerCase().includes('flash') ||\n plugin.description.toLowerCase().includes('flash')\n );\n\n if (hasFlashPlugin) {\n return true;\n }\n\n // Check for Flash MIME type\n const hasFlashMimeType = navigator.mimeTypes && \n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-shockwave-flash'\n );\n\n if (hasFlashMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('ShockwaveFlash.ShockwaveFlash'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Java is enabled and available\n */\nexport function testJavaEnabled(): boolean {\n try {\n // Check for Java plugin\n const hasJavaPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('java') &&\n !plugin.name.toLowerCase().includes('javascript')\n );\n\n if (hasJavaPlugin) {\n return true;\n }\n\n // Check for Java MIME types\n const javaMimeTypes = [\n 'application/x-java-applet',\n 'application/x-java-bean',\n 'application/x-java-vm'\n ];\n\n const hasJavaMimeType = navigator.mimeTypes &&\n javaMimeTypes.some(type =>\n Array.from(navigator.mimeTypes).some(mimeType => mimeType.type === type)\n );\n\n if (hasJavaMimeType) {\n return true;\n }\n\n // Legacy navigator.javaEnabled() method\n if (typeof navigator.javaEnabled === 'function') {\n return navigator.javaEnabled();\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Silverlight is enabled and available\n */\nexport function testSilverlightEnabled(): boolean {\n try {\n // Check for Silverlight plugin\n const hasSilverlightPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('silverlight')\n );\n\n if (hasSilverlightPlugin) {\n return true;\n }\n\n // Check for Silverlight MIME type\n const hasSilverlightMimeType = navigator.mimeTypes &&\n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-silverlight'\n );\n\n if (hasSilverlightMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('AgControl.AgControl'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect Chrome extension blocking (enhanced)\n */\nexport function detectChromeExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isChrome()) {\n return PluginDetectionError.NotSupported;\n }\n\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Modern Chrome usually has some plugins, even in restricted mode\n // Complete absence is suspicious\n if (pluginCount === 0) {\n return true;\n }\n \n // Check for Chrome runtime (indicates extension environment)\n const hasChromeRuntime = !!(window as any).chrome?.runtime;\n \n // Chrome without runtime access might indicate restrictions\n if (!hasChromeRuntime) {\n // However, this could be normal in some contexts (web workers, etc.)\n // Additional checks needed\n const hasWebstore = !!(window as any).chrome?.webstore;\n if (!hasWebstore && typeof (window as any).chrome !== 'undefined') {\n return true; // Likely restricted\n }\n }\n\n // Check for abnormally limited plugin access\n // Most Chrome installations have at least PDF viewer\n const hasCommonPlugins = Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('pdf') ||\n plugin.name.toLowerCase().includes('chrome')\n );\n\n // If no common plugins found in Chrome, might be blocked\n if (!hasCommonPlugins && pluginCount < 3) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Detect Firefox extension blocking (enhanced)\n */\nexport function detectFirefoxExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isFirefox()) {\n return PluginDetectionError.NotSupported;\n }\n\n // Firefox-specific checks\n const firefoxChecks = {\n mozInnerScreenX: 'mozInnerScreenX' in window,\n mozPaintCount: 'mozPaintCount' in window,\n mozApps: !!(navigator as any).mozApps,\n buildID: !!(navigator as any).buildID,\n oscpu: !!(navigator as any).oscpu,\n };\n\n const passedChecks = Object.values(firefoxChecks).filter(Boolean).length;\n \n // Firefox usually has at least some of these properties\n // Complete absence suggests restrictions\n if (passedChecks === 0) {\n return true;\n }\n\n // Check plugin access patterns\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Firefox in normal mode usually has some plugins\n // Check for abnormally restricted plugin access\n if (pluginCount === 0 && passedChecks < 2) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Identify security-related plugins\n */\nexport function identifySecurityPlugins(plugins: PluginInfo[]): string[] {\n const securityKeywords = [\n 'antivirus', 'security', 'firewall', 'malware', 'protection',\n 'kaspersky', 'norton', 'mcafee', 'avast', 'avira', 'bitdefender',\n 'eset', 'sophos', 'symantec', 'trend micro', 'f-secure'\n ];\n\n return plugins\n .filter(plugin => \n securityKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Identify ad blocker plugins\n */\nexport function identifyAdBlockerPlugins(plugins: PluginInfo[]): string[] {\n const adBlockerKeywords = [\n 'adblock', 'adblocker', 'ad block', 'ublock', 'ghostery',\n 'privacy badger', 'disconnect', 'noscript', 'tracking protection'\n ];\n\n return plugins\n .filter(plugin =>\n adBlockerKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Calculate plugin-based security score\n */\nexport function calculateSecurityScore(\n securityPlugins: string[],\n adBlockerPlugins: string[],\n flashEnabled: boolean,\n javaEnabled: boolean\n): number {\n let score = 50; // Base score\n\n // Security plugins increase score\n score += securityPlugins.length * 10;\n\n // Ad blockers increase score\n score += adBlockerPlugins.length * 5;\n\n // Flash enabled decreases score (security risk)\n if (flashEnabled) {\n score -= 15;\n }\n\n // Java enabled decreases score (security risk)\n if (javaEnabled) {\n score -= 10;\n }\n\n // Ensure score is between 0 and 100\n return Math.max(0, Math.min(100, score));\n}\n\n/**\n * Generate plugin signature for fingerprinting\n */\nexport function generatePluginSignature(\n plugins: PluginInfo[],\n mimeTypes: string[]\n): string {\n const pluginNames = plugins.map(p => p.name).sort();\n const topMimeTypes = mimeTypes.slice(0, 10).sort(); // Limit to prevent huge signatures\n \n const signature = [\n `plugins:${pluginNames.length}`,\n `mimes:${mimeTypes.length}`,\n ...pluginNames.slice(0, 5), // Top 5 plugins\n ...topMimeTypes.slice(0, 5) // Top 5 MIME types\n ].join('|');\n\n return signature;\n}\n\n/**\n * Check if enhanced plugin detection is available\n * Enhanced with browser capability checks\n */\nexport function isEnhancedPluginDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunBrowserAPIs && typeof navigator !== 'undefined';\n}\n\n/**\n * Safely get navigator plugins with error handling\n */\nfunction safeGetPlugins(): PluginArray | null {\n try {\n return navigator.plugins || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Safely get navigator mime types with error handling\n */\nfunction safeGetMimeTypes(): MimeTypeArray | null {\n try {\n return navigator.mimeTypes || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Get complete enhanced plugin fingerprint\n */\nexport function getEnhancedPluginFingerprint(): EnhancedPluginFingerprint {\n const pluginsResult = getNavigatorPlugins();\n const plugins = Array.isArray(pluginsResult) ? pluginsResult : [];\n \n const mimeTypesResult = getMimeTypes();\n const mimeTypes = Array.isArray(mimeTypesResult) ? mimeTypesResult : [];\n \n const flashEnabled = testFlashEnabled();\n const javaEnabled = testJavaEnabled();\n const silverLightEnabled = testSilverlightEnabled();\n \n const chromeExtensionsBlockedResult = detectChromeExtensionsBlocked();\n const chromeExtensionsBlocked = typeof chromeExtensionsBlockedResult === 'boolean' ? chromeExtensionsBlockedResult : false;\n \n const firefoxExtensionsBlockedResult = detectFirefoxExtensionsBlocked();\n const firefoxExtensionsBlocked = typeof firefoxExtensionsBlockedResult === 'boolean' ? firefoxExtensionsBlockedResult : false;\n \n const securityPlugins = identifySecurityPlugins(plugins);\n const adBlockerPlugins = identifyAdBlockerPlugins(plugins);\n const pluginSignature = generatePluginSignature(plugins, mimeTypes);\n const securityScore = calculateSecurityScore(\n securityPlugins,\n adBlockerPlugins,\n flashEnabled,\n javaEnabled\n );\n\n return {\n plugins,\n pluginCount: plugins.length,\n mimeTypes,\n mimeTypeCount: mimeTypes.length,\n flashEnabled,\n javaEnabled,\n silverLightEnabled,\n chromeExtensionsBlocked,\n firefoxExtensionsBlocked,\n securityPlugins,\n adBlockerPlugins,\n pluginSignature,\n securityScore,\n };\n}","/**\n * Confidence Scoring System\n * Based on FingerprintJS confidence calculation methodology\n * Provides intelligent weighting and stability scoring for fingerprint components\n */\n\nimport type { FingerprintComponentType } from '../../types/fingerprint';\n\n/**\n * Confidence levels enum\n */\nexport const enum Confidence {\n /** At least 99.5% chance of correct identification */\n VeryHigh = 0.995,\n /** At least 99% chance of correct identification */\n High = 0.99,\n /** At least 95% chance of correct identification */\n Medium = 0.95,\n /** At least 80% chance of correct identification */\n Low = 0.8,\n /** Less than 80% chance - not reliable for identification */\n VeryLow = 0.5,\n}\n\n/**\n * Component stability levels\n */\nexport interface ComponentStability {\n /** How stable the component is across sessions (0-1) */\n stability: number;\n /** How much entropy the component provides (0-1) */\n entropy: number;\n /** How unique the component is across users (0-1) */\n uniqueness: number;\n /** How resistant the component is to spoofing (0-1) */\n spoofResistance: number;\n}\n\n/**\n * Component weights and characteristics\n * Based on extensive research and real-world data analysis\n */\nexport const COMPONENT_CHARACTERISTICS: Record<FingerprintComponentType, ComponentStability> = {\n // Core components (most stable and unique)\n canvas: {\n stability: 0.95,\n entropy: 0.9,\n uniqueness: 0.85,\n spoofResistance: 0.8,\n },\n webgl: {\n stability: 0.92,\n entropy: 0.88,\n uniqueness: 0.82,\n spoofResistance: 0.85,\n },\n audio: {\n stability: 0.9,\n entropy: 0.85,\n uniqueness: 0.8,\n spoofResistance: 0.9,\n },\n\n // Hardware components (very stable)\n hardware: {\n stability: 0.98,\n entropy: 0.7,\n uniqueness: 0.75,\n spoofResistance: 0.95,\n },\n screen: {\n stability: 0.85,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.7,\n },\n\n // System components (moderately stable)\n system: {\n stability: 0.8,\n entropy: 0.65,\n uniqueness: 0.7,\n spoofResistance: 0.6,\n },\n browser: {\n stability: 0.75,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.5,\n },\n fonts: {\n stability: 0.7,\n entropy: 0.75,\n uniqueness: 0.7,\n spoofResistance: 0.4,\n },\n\n // Advanced components (variable stability)\n math: {\n stability: 0.95,\n entropy: 0.8,\n uniqueness: 0.9,\n spoofResistance: 0.95,\n },\n storage: {\n stability: 0.6,\n entropy: 0.5,\n uniqueness: 0.6,\n spoofResistance: 0.3,\n },\n \n // Detection components (moderate reliability)\n incognito: {\n stability: 0.5,\n entropy: 0.4,\n uniqueness: 0.3,\n spoofResistance: 0.2,\n },\n\n // New advanced components (from FingerprintJS inspiration)\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n pluginsEnhanced: {\n stability: 0.7,\n entropy: 0.65,\n uniqueness: 0.75,\n spoofResistance: 0.5,\n },\n\n // NEW: FingerprintJS-inspired components with enhanced characteristics\n mathFingerprint: {\n stability: 0.99, // Extremely stable across sessions\n entropy: 0.95, // High entropy from precision differences\n uniqueness: 0.9, // Very unique across different engines\n spoofResistance: 0.98, // Nearly impossible to spoof consistently\n },\n fontPreferences: {\n stability: 0.92, // Stable but can change with OS updates\n entropy: 0.88, // High entropy from font rendering differences\n uniqueness: 0.85, // Good uniqueness across systems\n spoofResistance: 0.75, // Moderate spoof resistance\n },\n dateTimeLocale: {\n stability: 0.95, // Very stable user setting\n entropy: 0.7, // Good entropy from locale combinations\n uniqueness: 0.75, // Decent uniqueness\n spoofResistance: 0.8, // Good spoof resistance\n },\n accessibilityEnhanced: {\n stability: 0.93, // Very stable accessibility settings\n entropy: 0.65, // Moderate entropy from rare settings\n uniqueness: 0.8, // High uniqueness when features enabled\n spoofResistance: 0.9, // Hard to spoof media queries\n },\n enhancedFonts: {\n stability: 0.88, // Stable but OS-dependent\n entropy: 0.85, // High entropy from font combinations\n uniqueness: 0.82, // Good uniqueness across systems\n spoofResistance: 0.7, // Moderate spoof resistance\n },\n};\n\n/**\n * New advanced components characteristics\n */\nexport const ADVANCED_COMPONENT_CHARACTERISTICS: Record<string, ComponentStability> = {\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n};\n\n/**\n * Calculate component weight based on its characteristics\n */\nexport function calculateComponentWeight(componentType: string): number {\n const characteristics = COMPONENT_CHARACTERISTICS[componentType as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[componentType];\n \n if (!characteristics) {\n return 0.5; // Default weight for unknown components\n }\n\n // Weight calculation formula emphasizing stability and uniqueness\n const weight = (\n characteristics.stability * 0.3 +\n characteristics.entropy * 0.25 +\n characteristics.uniqueness * 0.25 +\n characteristics.spoofResistance * 0.2\n );\n\n return Math.max(0.1, Math.min(1.0, weight));\n}\n\n/**\n * Component result for confidence calculation\n */\nexport interface ComponentResult {\n component: string;\n success: boolean;\n duration: number;\n value?: any;\n error?: string;\n}\n\n/**\n * Confidence calculation result\n */\nexport interface ConfidenceResult {\n score: Confidence;\n level: string;\n factors: {\n componentCount: number;\n weightedScore: number;\n stabilityScore: number;\n entropyScore: number;\n spoofResistanceScore: number;\n };\n recommendations: string[];\n}\n\n/**\n * Calculate overall confidence score for a fingerprint\n */\nexport function calculateConfidence(\n componentResults: ComponentResult[],\n options: {\n requireMinimumComponents?: number;\n penalizeMissingCore?: boolean;\n adjustForIncognito?: boolean;\n } = {}\n): ConfidenceResult {\n const {\n requireMinimumComponents = 4,\n penalizeMissingCore = true,\n adjustForIncognito = true,\n } = options;\n\n const successfulComponents = componentResults.filter(c => c.success);\n const recommendations: string[] = [];\n\n // Check minimum component requirement\n if (successfulComponents.length < requireMinimumComponents) {\n recommendations.push(`Collect at least ${requireMinimumComponents} components for reliable identification`);\n }\n\n // Calculate weighted scores\n let totalWeight = 0;\n let weightedStability = 0;\n let weightedEntropy = 0;\n let weightedUniqueness = 0;\n let weightedSpoofResistance = 0;\n\n const coreComponents = ['canvas', 'webgl', 'audio', 'hardware'];\n const missingCoreComponents = coreComponents.filter(\n core => !successfulComponents.some(c => c.component === core)\n );\n\n for (const result of successfulComponents) {\n const weight = calculateComponentWeight(result.component);\n const characteristics = COMPONENT_CHARACTERISTICS[result.component as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[result.component];\n\n if (characteristics) {\n totalWeight += weight;\n weightedStability += characteristics.stability * weight;\n weightedEntropy += characteristics.entropy * weight;\n weightedUniqueness += characteristics.uniqueness * weight;\n weightedSpoofResistance += characteristics.spoofResistance * weight;\n }\n }\n\n // Normalize scores\n const stabilityScore = totalWeight > 0 ? weightedStability / totalWeight : 0;\n const entropyScore = totalWeight > 0 ? weightedEntropy / totalWeight : 0;\n const uniquenessScore = totalWeight > 0 ? weightedUniqueness / totalWeight : 0;\n const spoofResistanceScore = totalWeight > 0 ? weightedSpoofResistance / totalWeight : 0;\n\n // Calculate base weighted score\n let weightedScore = (\n stabilityScore * 0.35 +\n entropyScore * 0.25 +\n uniquenessScore * 0.25 +\n spoofResistanceScore * 0.15\n );\n\n // Apply penalties and adjustments\n let finalScore = weightedScore;\n\n // Penalty for missing core components\n if (penalizeMissingCore && missingCoreComponents.length > 0) {\n const penalty = missingCoreComponents.length * 0.1;\n finalScore -= penalty;\n recommendations.push(`Missing core components: ${missingCoreComponents.join(', ')}`);\n }\n\n // Penalty for too few components\n if (successfulComponents.length < 6) {\n const penalty = (6 - successfulComponents.length) * 0.05;\n finalScore -= penalty;\n }\n\n // Adjustment for incognito detection\n if (adjustForIncognito) {\n const hasIncognitoDetection = successfulComponents.some(c => c.component === 'incognito');\n if (hasIncognitoDetection) {\n // Slight boost for incognito detection capability\n finalScore += 0.02;\n }\n }\n\n // Bonus for having advanced components\n const advancedComponents = successfulComponents.filter(c => \n ['domBlockers', 'accessibility', 'browserApis', 'math'].includes(c.component)\n );\n if (advancedComponents.length >= 2) {\n finalScore += 0.05;\n }\n\n // Ensure score stays within bounds\n finalScore = Math.max(0, Math.min(1, finalScore));\n\n // Determine confidence level\n let confidenceLevel: Confidence;\n let levelName: string;\n\n if (finalScore >= Confidence.VeryHigh) {\n confidenceLevel = Confidence.VeryHigh;\n levelName = 'Very High';\n } else if (finalScore >= Confidence.High) {\n confidenceLevel = Confidence.High;\n levelName = 'High';\n } else if (finalScore >= Confidence.Medium) {\n confidenceLevel = Confidence.Medium;\n levelName = 'Medium';\n } else if (finalScore >= Confidence.Low) {\n confidenceLevel = Confidence.Low;\n levelName = 'Low';\n } else {\n confidenceLevel = Confidence.VeryLow;\n levelName = 'Very Low';\n recommendations.push('Consider implementing additional fingerprinting techniques');\n }\n\n // Add specific recommendations\n if (finalScore < Confidence.Medium) {\n recommendations.push('Enable all available fingerprinting components for better accuracy');\n }\n if (spoofResistanceScore < 0.6) {\n recommendations.push('Include more spoof-resistant components like audio and WebGL');\n }\n if (entropyScore < 0.6) {\n recommendations.push('Add high-entropy components like canvas and math fingerprinting');\n }\n\n return {\n score: confidenceLevel,\n level: levelName,\n factors: {\n componentCount: successfulComponents.length,\n weightedScore: Math.round(weightedScore * 1000) / 1000,\n stabilityScore: Math.round(stabilityScore * 1000) / 1000,\n entropyScore: Math.round(entropyScore * 1000) / 1000,\n spoofResistanceScore: Math.round(spoofResistanceScore * 1000) / 1000,\n },\n recommendations: recommendations.slice(0, 3), // Limit to top 3 recommendations\n };\n}\n\n/**\n * Get confidence level name from score\n */\nexport function getConfidenceLevelName(score: number): string {\n if (score >= Confidence.VeryHigh) return 'Very High';\n if (score >= Confidence.High) return 'High';\n if (score >= Confidence.Medium) return 'Medium';\n if (score >= Confidence.Low) return 'Low';\n return 'Very Low';\n}\n\n/**\n * Check if a confidence score is acceptable for identification\n */\nexport function isConfidenceAcceptable(\n score: number, \n minLevel: Confidence = Confidence.Medium\n): boolean {\n return score >= minLevel;\n}","/**\n * Device-specific signals inspired by FingerprintJS\n * Helps differentiate devices by hardware characteristics\n */\n\nexport interface DeviceSignals {\n // Screen frame (availTop, availRight, availBottom, availLeft)\n // Very useful for mobile devices - differentiates devices with same resolution\n screenFrame?: {\n top: number | null;\n right: number | null;\n bottom: number | null;\n left: number | null;\n } | null;\n\n // Hardware characteristics\n hardwareConcurrency?: number; // CPU cores\n deviceMemory?: number; // RAM in GB (rounded)\n architecture?: number; // CPU architecture signature (ARM vs x86)\n\n // Enhanced touch support\n touchSupport?: {\n maxTouchPoints: number;\n touchEvent: boolean;\n touchStart: boolean;\n };\n\n // Browser vendor flavors (Brave, Edge, etc)\n vendorFlavors?: string[];\n\n // CPU class (if available)\n cpuClass?: string;\n\n // Display capabilities\n colorDepth?: number;\n colorGamut?: \"srgb\" | \"p3\" | \"rec2020\";\n}\n\n/**\n * Get screen frame (available area) - critical for mobile device differentiation\n */\nfunction getScreenFrame(): DeviceSignals[\"screenFrame\"] {\n try {\n const s = screen;\n\n // Calculate frame: top, right, bottom, left\n // Note: availTop/availLeft may not exist in all browsers\n const availTop = (s as any).availTop ?? 0;\n const availLeft = (s as any).availLeft ?? 0;\n const availWidth = s.availWidth ?? s.width;\n const availHeight = s.availHeight ?? s.height;\n\n const top = availTop || null;\n const right = s.width - availWidth - availLeft || null;\n const bottom = s.height - availHeight - availTop || null;\n const left = availLeft || null;\n\n // Return null if all are zero/null (some browsers hide this in private mode)\n if (top === null && right === null && bottom === null && left === null) {\n return null;\n }\n\n // Round to reduce micro-variance (macOS Dock can change slightly)\n const round = (v: number | null) =>\n v === null ? null : Math.round(v / 10) * 10;\n\n return {\n top: round(top),\n right: round(right),\n bottom: round(bottom),\n left: round(left),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get CPU architecture signature (ARM vs x86)\n * Uses multiple detection methods for maximum reliability\n */\nfunction getArchitecture(): number | undefined {\n try {\n // Method 1: Enhanced platform string detection (most reliable)\n const platform = navigator.platform?.toLowerCase() || '';\n const userAgent = navigator.userAgent?.toLowerCase() || '';\n \n // CRITICAL FIX: Prioritize desktop x86_64 detection first\n \n // Windows x64/x86 detection (highest priority for x86_64)\n if (platform.includes('win') && (userAgent.includes('wow64') || userAgent.includes('x64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Windows\n }\n \n // Linux x86_64 detection\n if (platform.includes('linux') && (platform.includes('x86_64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Linux\n }\n \n // MacOS Intel detection (before ARM check)\n if (platform.includes('mac') && (platform.includes('intel') || userAgent.includes('intel mac'))) {\n return 0; // x86_64 - Intel Mac\n }\n \n // Generic x86/x64 detection\n if (platform.includes('x86') || platform.includes('x64') || \n platform.includes('intel') || platform.includes('amd64') ||\n userAgent.includes('x86') || userAgent.includes('amd64')) {\n return 0; // x86_64\n }\n \n // ARM detection (after x86_64 checks)\n if (platform.includes('arm') || userAgent.includes('arm') || \n userAgent.includes('aarch64') || platform.includes('aarch64')) {\n return 255; // ARM\n }\n \n // Method 2: WebGL vendor detection (secondary check)\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (gl && 'getExtension' in gl && 'getParameter' in gl) {\n const debugInfo = (gl as WebGLRenderingContext).getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)?.toLowerCase() || '';\n const renderer = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)?.toLowerCase() || '';\n \n // Enhanced x86_64 GPU detection (desktop GPUs)\n if (vendor.includes('intel') || vendor.includes('nvidia') || vendor.includes('amd') ||\n renderer.includes('intel') || renderer.includes('nvidia') || renderer.includes('amd') || \n renderer.includes('radeon') || renderer.includes('geforce') || renderer.includes('quadro') ||\n renderer.includes('iris') || renderer.includes('uhd') || renderer.includes('hd graphics')) {\n return 0; // x86_64 - Desktop GPU\n }\n \n // ARM GPU detection (mobile and ARM devices)\n if (renderer.includes('mali') || renderer.includes('adreno') || \n renderer.includes('powervr') || renderer.includes('tegra') ||\n renderer.includes('apple gpu') || vendor.includes('arm') ||\n renderer.includes('videocore')) {\n return 255; // ARM - Mobile/ARM GPU\n }\n }\n }\n } catch {\n // WebGL detection failed, continue\n }\n \n // Method 3: Fallback floating point NaN behavior (least reliable)\n try {\n const f = new Float32Array(1);\n const u8 = new Uint8Array(f.buffer);\n f[0] = Infinity;\n f[0] = f[0] - f[0]; // Should produce NaN\n const nanBehavior = u8[3];\n \n // Only trust this if platform detection was inconclusive\n // AND we have strong indicators from other methods\n if (platform.includes('linux') && nanBehavior === 255) {\n // Linux on ARM is less common, but validate with other signals\n return nanBehavior;\n }\n \n return nanBehavior;\n } catch {\n return undefined;\n }\n \n } catch {\n return undefined;\n }\n}\n\n/**\n * Get enhanced touch support\n */\nfunction getTouchSupport(): DeviceSignals[\"touchSupport\"] {\n try {\n const n = navigator;\n\n let maxTouchPoints = 0;\n if (n.maxTouchPoints !== undefined) {\n maxTouchPoints = n.maxTouchPoints;\n } else if ((n as any).msMaxTouchPoints !== undefined) {\n maxTouchPoints = (n as any).msMaxTouchPoints;\n }\n\n let touchEvent = false;\n try {\n document.createEvent(\"TouchEvent\");\n touchEvent = true;\n } catch {\n touchEvent = false;\n }\n\n const touchStart = \"ontouchstart\" in window;\n\n return {\n maxTouchPoints,\n touchEvent,\n touchStart,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get vendor flavors (Brave, Edge, etc)\n */\nfunction getVendorFlavors(): string[] {\n const flavors: string[] = [];\n\n const checks = [\n \"chrome\", // Chrome/Chromium\n \"safari\", // Safari\n \"__crWeb\", // Chrome iOS\n \"__gCrWeb\", // Chrome iOS\n \"yandex\", // Yandex Browser\n \"__yb\", // Yandex iOS\n \"__ybro\", // Yandex iOS\n \"__firefox__\", // Firefox iOS\n \"__edgeTrackingPreventionStatistics\", // Edge\n \"webkit\", // WebKit\n \"oprt\", // Opera Touch\n \"samsungAr\", // Samsung Internet\n \"ucweb\", // UC Browser\n \"UCShellJava\", // UC Browser\n \"puffinDevice\", // Puffin\n ];\n\n for (const key of checks) {\n const value = (window as any)[key];\n if (value && typeof value === \"object\") {\n flavors.push(key);\n }\n }\n\n return flavors.sort();\n}\n\n/**\n * Get device memory (rounded to reduce variance)\n */\nfunction getDeviceMemory(): number | undefined {\n try {\n const mem = (navigator as any).deviceMemory;\n if (typeof mem === \"number\") {\n // Round to nearest GB to reduce variance\n return Math.round(mem);\n }\n if (typeof mem === \"string\") {\n const parsed = parseFloat(mem);\n return isNaN(parsed) ? undefined : Math.round(parsed);\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color depth (bits per pixel)\n */\nfunction getColorDepth(): number | undefined {\n try {\n return screen.colorDepth || undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color gamut (display color space capabilities)\n */\nfunction getColorGamut(): DeviceSignals[\"colorGamut\"] {\n try {\n // rec2020 includes p3 and p3 includes srgb\n for (const gamut of [\"rec2020\", \"p3\", \"srgb\"] as const) {\n if (window.matchMedia(`(color-gamut: ${gamut})`).matches) {\n return gamut;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Collect all device signals\n */\nexport function collectDeviceSignals(): DeviceSignals {\n return {\n screenFrame: getScreenFrame(),\n hardwareConcurrency: navigator.hardwareConcurrency || undefined,\n deviceMemory: getDeviceMemory(),\n architecture: getArchitecture(),\n touchSupport: getTouchSupport(),\n vendorFlavors: getVendorFlavors(),\n cpuClass: (navigator as any).cpuClass || undefined,\n colorDepth: getColorDepth(),\n colorGamut: getColorGamut(),\n };\n}\n"],"names":["isWebKit","isAndroid","isSamsungInternet","getBrowserEngine","getBrowserCapabilities","getTouchSupport","isCanvasAvailable","measureText","isFontAvailable","getScreenFrame","getWebGLExtensions","getColorGamut","getDateTimeLocale","getMathFingerprint","deviceSignals","analyzeUserAgent","testLocalStorage","testSessionStorage","testIndexedDB","getDeviceMemory","getArchitecture"],"mappings":"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","x_google_ignoreList":[17]}