@sonordev/site-kit 6.3.5 → 6.3.6

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 (206) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/{AnalyticsProvider-2H3POGSJ.js → AnalyticsProvider-L3GWK5PO.js} +10 -10
  3. package/dist/{AnalyticsProvider-2H3POGSJ.js.map → AnalyticsProvider-L3GWK5PO.js.map} +1 -1
  4. package/dist/{AnalyticsProvider-2A75HPK6.mjs → AnalyticsProvider-XDVJTAPN.mjs} +6 -6
  5. package/dist/{AnalyticsProvider-2A75HPK6.mjs.map → AnalyticsProvider-XDVJTAPN.mjs.map} +1 -1
  6. package/dist/{ArticleViewTracker-75BLDTHR.mjs → ArticleViewTracker-7AJJTGFY.mjs} +5 -5
  7. package/dist/{ArticleViewTracker-75BLDTHR.mjs.map → ArticleViewTracker-7AJJTGFY.mjs.map} +1 -1
  8. package/dist/{ArticleViewTracker-R3LNZ4A4.js → ArticleViewTracker-YMGW6ZXB.js} +6 -6
  9. package/dist/{ArticleViewTracker-R3LNZ4A4.js.map → ArticleViewTracker-YMGW6ZXB.js.map} +1 -1
  10. package/dist/{ChatWidget-BLZSLYN2.js → ChatWidget-IAYEXLNX.js} +10 -10
  11. package/dist/{ChatWidget-BLZSLYN2.js.map → ChatWidget-IAYEXLNX.js.map} +1 -1
  12. package/dist/{ChatWidget-F6UWIR7I.mjs → ChatWidget-MR64ZLOG.mjs} +7 -7
  13. package/dist/{ChatWidget-F6UWIR7I.mjs.map → ChatWidget-MR64ZLOG.mjs.map} +1 -1
  14. package/dist/EngageWidget-BF7DH4GO.js +21 -0
  15. package/dist/{EngageWidget-YONW3W3Z.js.map → EngageWidget-BF7DH4GO.js.map} +1 -1
  16. package/dist/EngageWidget-RANSIKC3.mjs +12 -0
  17. package/dist/{EngageWidget-4WB74GQR.mjs.map → EngageWidget-RANSIKC3.mjs.map} +1 -1
  18. package/dist/{FileField-GXNFYVSY.mjs → FileField-7ZNQ5BID.mjs} +5 -5
  19. package/dist/{FileField-GXNFYVSY.mjs.map → FileField-7ZNQ5BID.mjs.map} +1 -1
  20. package/dist/{FileField-KYQVN4XB.js → FileField-VRKATE4G.js} +6 -6
  21. package/dist/{FileField-KYQVN4XB.js.map → FileField-VRKATE4G.js.map} +1 -1
  22. package/dist/{FormSpotlight-F4YZOWHA.mjs → FormSpotlight-QNH7XGYS.mjs} +3 -3
  23. package/dist/{FormSpotlight-F4YZOWHA.mjs.map → FormSpotlight-QNH7XGYS.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-ZOSI7MXH.js → FormSpotlight-VQJ2QWIU.js} +9 -9
  25. package/dist/{FormSpotlight-ZOSI7MXH.js.map → FormSpotlight-VQJ2QWIU.js.map} +1 -1
  26. package/dist/{FormStage-DICKOW7R.js → FormStage-3JIN6X6O.js} +9 -9
  27. package/dist/{FormStage-DICKOW7R.js.map → FormStage-3JIN6X6O.js.map} +1 -1
  28. package/dist/{FormStage-TIQ43MF6.mjs → FormStage-XB4JNFCH.mjs} +3 -3
  29. package/dist/{FormStage-TIQ43MF6.mjs.map → FormStage-XB4JNFCH.mjs.map} +1 -1
  30. package/dist/ManagedForm-E6F4FLVY.mjs +16 -0
  31. package/dist/{ManagedForm-KKJOIEFW.mjs.map → ManagedForm-E6F4FLVY.mjs.map} +1 -1
  32. package/dist/ManagedForm-Q5UFMUBE.js +25 -0
  33. package/dist/{ManagedForm-ZUPV4DPQ.js.map → ManagedForm-Q5UFMUBE.js.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-JOTIWXLQ.mjs → ManagedNewsletterForm-OEEC3GVY.mjs} +6 -6
  35. package/dist/{ManagedNewsletterForm-JOTIWXLQ.mjs.map → ManagedNewsletterForm-OEEC3GVY.mjs.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-NFV2JGNA.js → ManagedNewsletterForm-UTNOJ5T4.js} +7 -7
  37. package/dist/{ManagedNewsletterForm-NFV2JGNA.js.map → ManagedNewsletterForm-UTNOJ5T4.js.map} +1 -1
  38. package/dist/{SignalCore-DLRQTFKK.js → SignalCore-4AUWHMYK.js} +11 -11
  39. package/dist/{SignalCore-DLRQTFKK.js.map → SignalCore-4AUWHMYK.js.map} +1 -1
  40. package/dist/{SignalCore-MUN44S6K.mjs → SignalCore-PWN5X6FF.mjs} +5 -5
  41. package/dist/{SignalCore-MUN44S6K.mjs.map → SignalCore-PWN5X6FF.mjs.map} +1 -1
  42. package/dist/SitemapSync-DHJ25PSH.js +18 -0
  43. package/dist/{SitemapSync-5TKLHXFL.js.map → SitemapSync-DHJ25PSH.js.map} +1 -1
  44. package/dist/SitemapSync-ZA2MNM63.mjs +9 -0
  45. package/dist/{SitemapSync-BIWCTMRJ.mjs.map → SitemapSync-ZA2MNM63.mjs.map} +1 -1
  46. package/dist/analytics/AnalyticsProvider.d.ts +0 -6
  47. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
  48. package/dist/analytics/WebVitals.d.ts +4 -1
  49. package/dist/analytics/WebVitals.d.ts.map +1 -1
  50. package/dist/analytics/index.js +9 -9
  51. package/dist/analytics/index.mjs +4 -4
  52. package/dist/analytics/measurement-context.d.ts +13 -0
  53. package/dist/analytics/measurement-context.d.ts.map +1 -0
  54. package/dist/analytics/page-observation.d.ts +39 -0
  55. package/dist/analytics/page-observation.d.ts.map +1 -0
  56. package/dist/articles/index.js +1 -1
  57. package/dist/articles/index.mjs +1 -1
  58. package/dist/articles/server-ui.js +1 -1
  59. package/dist/articles/server-ui.mjs +1 -1
  60. package/dist/{chunk-XP63NBUV.js → chunk-2MEMK5XC.js} +14 -14
  61. package/dist/{chunk-XP63NBUV.js.map → chunk-2MEMK5XC.js.map} +1 -1
  62. package/dist/{chunk-3UT3XR6M.js → chunk-2UZULHI4.js} +7 -7
  63. package/dist/{chunk-3UT3XR6M.js.map → chunk-2UZULHI4.js.map} +1 -1
  64. package/dist/{chunk-RWERWLRM.js → chunk-3J5L5DIK.js} +3 -3
  65. package/dist/{chunk-RWERWLRM.js.map → chunk-3J5L5DIK.js.map} +1 -1
  66. package/dist/{chunk-XQPNCDGF.js → chunk-3POB4JKR.js} +15 -15
  67. package/dist/{chunk-XQPNCDGF.js.map → chunk-3POB4JKR.js.map} +1 -1
  68. package/dist/{chunk-Y3SYVAP6.mjs → chunk-3Q3Y6OQE.mjs} +4 -4
  69. package/dist/{chunk-Y3SYVAP6.mjs.map → chunk-3Q3Y6OQE.mjs.map} +1 -1
  70. package/dist/chunk-3V6DIQI7.mjs +6 -0
  71. package/dist/{chunk-7JGD5TUI.mjs.map → chunk-3V6DIQI7.mjs.map} +1 -1
  72. package/dist/{chunk-MERNU3MY.mjs → chunk-5DZVQW35.mjs} +4 -4
  73. package/dist/{chunk-MERNU3MY.mjs.map → chunk-5DZVQW35.mjs.map} +1 -1
  74. package/dist/{chunk-R7XCEUEI.mjs → chunk-5J4FKRGH.mjs} +4 -4
  75. package/dist/{chunk-R7XCEUEI.mjs.map → chunk-5J4FKRGH.mjs.map} +1 -1
  76. package/dist/{chunk-RR6U3Z76.js → chunk-5XDOBM5S.js} +3 -3
  77. package/dist/{chunk-RR6U3Z76.js.map → chunk-5XDOBM5S.js.map} +1 -1
  78. package/dist/{chunk-TIFVAASU.mjs → chunk-5YA6SI4Z.mjs} +2 -2
  79. package/dist/{chunk-I5X7BX6I.mjs → chunk-6I5O5CTL.mjs} +4 -4
  80. package/dist/{chunk-I5X7BX6I.mjs.map → chunk-6I5O5CTL.mjs.map} +1 -1
  81. package/dist/{chunk-ZPITTAT5.mjs → chunk-6MOGGEY3.mjs} +3 -3
  82. package/dist/{chunk-ZPITTAT5.mjs.map → chunk-6MOGGEY3.mjs.map} +1 -1
  83. package/dist/chunk-6SBRD5KT.js +8 -0
  84. package/dist/{chunk-LSB3CWSB.js.map → chunk-6SBRD5KT.js.map} +1 -1
  85. package/dist/{chunk-KRU755E3.js → chunk-7NFSSPGM.js} +8 -8
  86. package/dist/{chunk-KRU755E3.js.map → chunk-7NFSSPGM.js.map} +1 -1
  87. package/dist/{chunk-5EVGWCUB.js → chunk-ANYCUTS5.js} +3 -3
  88. package/dist/{chunk-5EVGWCUB.js.map → chunk-ANYCUTS5.js.map} +1 -1
  89. package/dist/{chunk-SIQX3GL3.mjs → chunk-B2NO5QVY.mjs} +3 -3
  90. package/dist/{chunk-SIQX3GL3.mjs.map → chunk-B2NO5QVY.mjs.map} +1 -1
  91. package/dist/{chunk-HTCMZAXW.mjs → chunk-BJKA3XRS.mjs} +4 -4
  92. package/dist/{chunk-HTCMZAXW.mjs.map → chunk-BJKA3XRS.mjs.map} +1 -1
  93. package/dist/{chunk-QMVBKSTZ.mjs → chunk-CXYGKK4U.mjs} +3 -3
  94. package/dist/{chunk-QMVBKSTZ.mjs.map → chunk-CXYGKK4U.mjs.map} +1 -1
  95. package/dist/{chunk-EW2GKDDC.js → chunk-E7EV2AHT.js} +9 -9
  96. package/dist/{chunk-EW2GKDDC.js.map → chunk-E7EV2AHT.js.map} +1 -1
  97. package/dist/{chunk-QAYB7NCH.js → chunk-EB33U2WT.js} +6 -6
  98. package/dist/{chunk-QAYB7NCH.js.map → chunk-EB33U2WT.js.map} +1 -1
  99. package/dist/{chunk-NCLF7RUL.js → chunk-FRUBUQOH.js} +5 -5
  100. package/dist/{chunk-NCLF7RUL.js.map → chunk-FRUBUQOH.js.map} +1 -1
  101. package/dist/{chunk-XXSSUCJB.js → chunk-I7AZC5ZQ.js} +2 -2
  102. package/dist/{chunk-ID4RGBQT.js → chunk-J4C3JAJF.js} +15 -15
  103. package/dist/{chunk-ID4RGBQT.js.map → chunk-J4C3JAJF.js.map} +1 -1
  104. package/dist/{chunk-7K6L33BX.mjs → chunk-JOYMIGR2.mjs} +22 -22
  105. package/dist/{chunk-ATPQ6264.js → chunk-JS75ORH7.js} +24 -24
  106. package/dist/{chunk-K5Q7UYZM.mjs → chunk-K6ZQVDP4.mjs} +3 -3
  107. package/dist/{chunk-K5Q7UYZM.mjs.map → chunk-K6ZQVDP4.mjs.map} +1 -1
  108. package/dist/{chunk-VFXLB5JU.mjs → chunk-KB7SIIVY.mjs} +3 -3
  109. package/dist/{chunk-VFXLB5JU.mjs.map → chunk-KB7SIIVY.mjs.map} +1 -1
  110. package/dist/{chunk-L2KN3GYW.mjs → chunk-KMONA7CT.mjs} +3 -3
  111. package/dist/{chunk-L2KN3GYW.mjs.map → chunk-KMONA7CT.mjs.map} +1 -1
  112. package/dist/{chunk-4KTPBCB3.mjs → chunk-L6BQIDSZ.mjs} +8 -8
  113. package/dist/{chunk-4KTPBCB3.mjs.map → chunk-L6BQIDSZ.mjs.map} +1 -1
  114. package/dist/{chunk-RSAQ7WGF.mjs → chunk-LFF32POH.mjs} +3 -3
  115. package/dist/{chunk-RSAQ7WGF.mjs.map → chunk-LFF32POH.mjs.map} +1 -1
  116. package/dist/{chunk-ZUQSVCMD.js → chunk-NN2YE5WT.js} +3 -3
  117. package/dist/{chunk-RH4XEXTK.mjs → chunk-NNZDWY3L.mjs} +3 -3
  118. package/dist/{chunk-4EMMMKDR.js → chunk-OLVCGOXZ.js} +12 -12
  119. package/dist/{chunk-4EMMMKDR.js.map → chunk-OLVCGOXZ.js.map} +1 -1
  120. package/dist/{chunk-UEYZXWIP.js → chunk-PMWF5CRL.js} +11 -11
  121. package/dist/{chunk-UEYZXWIP.js.map → chunk-PMWF5CRL.js.map} +1 -1
  122. package/dist/{chunk-H6F7T5Z6.mjs → chunk-PQICWWQW.mjs} +5 -5
  123. package/dist/{chunk-H6F7T5Z6.mjs.map → chunk-PQICWWQW.mjs.map} +1 -1
  124. package/dist/{chunk-CPRCBO6Y.mjs → chunk-R26FAQWF.mjs} +3 -3
  125. package/dist/{chunk-CPRCBO6Y.mjs.map → chunk-R26FAQWF.mjs.map} +1 -1
  126. package/dist/{chunk-WYUYAMFL.js → chunk-SAOUAIRS.js} +14 -14
  127. package/dist/{chunk-WYUYAMFL.js.map → chunk-SAOUAIRS.js.map} +1 -1
  128. package/dist/{chunk-DJAJB6AZ.mjs → chunk-SB4CJX2X.mjs} +3 -3
  129. package/dist/{chunk-DJAJB6AZ.mjs.map → chunk-SB4CJX2X.mjs.map} +1 -1
  130. package/dist/{chunk-QXD7AWGV.js → chunk-SNXJXPB6.js} +75 -18
  131. package/dist/chunk-SNXJXPB6.js.map +1 -0
  132. package/dist/{chunk-BVSTYFFI.js → chunk-TE3YNZVH.js} +4 -4
  133. package/dist/{chunk-BVSTYFFI.js.map → chunk-TE3YNZVH.js.map} +1 -1
  134. package/dist/{chunk-LP6KJPAL.js → chunk-UAOQVHZW.js} +4 -4
  135. package/dist/{chunk-LP6KJPAL.js.map → chunk-UAOQVHZW.js.map} +1 -1
  136. package/dist/{chunk-QII2TNKS.mjs → chunk-UJIKP35G.mjs} +73 -16
  137. package/dist/chunk-UJIKP35G.mjs.map +1 -0
  138. package/dist/{chunk-PHE5MIW4.js → chunk-VGBUC2JP.js} +10 -10
  139. package/dist/{chunk-PHE5MIW4.js.map → chunk-VGBUC2JP.js.map} +1 -1
  140. package/dist/{chunk-S2LJ26WQ.mjs → chunk-W46QIVBM.mjs} +3 -3
  141. package/dist/{chunk-S2LJ26WQ.mjs.map → chunk-W46QIVBM.mjs.map} +1 -1
  142. package/dist/{chunk-C4JCJ66V.js → chunk-X5J3PYZJ.js} +5 -5
  143. package/dist/{chunk-C4JCJ66V.js.map → chunk-X5J3PYZJ.js.map} +1 -1
  144. package/dist/{chunk-2OA274JZ.mjs → chunk-YKZ3EVAQ.mjs} +3 -3
  145. package/dist/{chunk-2OA274JZ.mjs.map → chunk-YKZ3EVAQ.mjs.map} +1 -1
  146. package/dist/cli/index.js +211 -211
  147. package/dist/cli/index.mjs +151 -151
  148. package/dist/client/index.js +4 -4
  149. package/dist/client/index.mjs +3 -3
  150. package/dist/commerce/index.js +57 -57
  151. package/dist/commerce/index.mjs +5 -5
  152. package/dist/engage/index.js +9 -9
  153. package/dist/engage/index.mjs +6 -6
  154. package/dist/fleet/index.js +8 -8
  155. package/dist/fleet/index.mjs +4 -4
  156. package/dist/forms/index.js +13 -13
  157. package/dist/forms/index.mjs +7 -7
  158. package/dist/forms/server.js +2 -2
  159. package/dist/forms/server.mjs +1 -1
  160. package/dist/images/index.js +11 -11
  161. package/dist/images/index.mjs +4 -4
  162. package/dist/index.js +63 -63
  163. package/dist/index.mjs +9 -9
  164. package/dist/layout/client.js +8 -8
  165. package/dist/layout/client.mjs +7 -7
  166. package/dist/layout/index.js +10 -10
  167. package/dist/layout/index.mjs +8 -8
  168. package/dist/{lib-6GWWPDJR.js → lib-6HOOMENJ.js} +7 -7
  169. package/dist/{lib-WFB5RLEQ.js → lib-BGAWCSUH.js} +8 -8
  170. package/dist/{lib-N5PD6JNJ.mjs → lib-R7IQ4ZHE.mjs} +2 -2
  171. package/dist/lib-RSDMEKDQ.mjs +4 -0
  172. package/dist/maps/index.js +5 -5
  173. package/dist/maps/index.mjs +3 -3
  174. package/dist/search/index.js +4 -4
  175. package/dist/search/index.mjs +3 -3
  176. package/dist/seo/client.js +5 -5
  177. package/dist/seo/client.mjs +4 -4
  178. package/dist/seo/index.js +5 -5
  179. package/dist/seo/index.mjs +4 -4
  180. package/dist/seo/register-sitemap-cli.js +2 -2
  181. package/dist/seo/register-sitemap-cli.mjs +1 -1
  182. package/dist/server/index.js +3 -3
  183. package/dist/server/index.mjs +2 -2
  184. package/dist/shared/version.d.ts +1 -1
  185. package/dist/signal/index.js +11 -11
  186. package/dist/signal/index.mjs +2 -2
  187. package/dist/sync/index.js +17 -17
  188. package/dist/sync/index.mjs +4 -4
  189. package/dist/{web-vitals.attribution-CHXXWO72.mjs → web-vitals.attribution-7LKLZ5GR.mjs} +3 -3
  190. package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +1 -0
  191. package/dist/{web-vitals.attribution-SQVZNHN3.js → web-vitals.attribution-ONVYQNRB.js} +3 -3
  192. package/dist/web-vitals.attribution-ONVYQNRB.js.map +1 -0
  193. package/package.json +1 -1
  194. package/dist/EngageWidget-4WB74GQR.mjs +0 -12
  195. package/dist/EngageWidget-YONW3W3Z.js +0 -21
  196. package/dist/ManagedForm-KKJOIEFW.mjs +0 -16
  197. package/dist/ManagedForm-ZUPV4DPQ.js +0 -25
  198. package/dist/SitemapSync-5TKLHXFL.js +0 -18
  199. package/dist/SitemapSync-BIWCTMRJ.mjs +0 -9
  200. package/dist/chunk-7JGD5TUI.mjs +0 -6
  201. package/dist/chunk-LSB3CWSB.js +0 -8
  202. package/dist/chunk-QII2TNKS.mjs.map +0 -1
  203. package/dist/chunk-QXD7AWGV.js.map +0 -1
  204. package/dist/lib-BD4KKQBI.mjs +0 -4
  205. package/dist/web-vitals.attribution-CHXXWO72.mjs.map +0 -1
  206. package/dist/web-vitals.attribution-SQVZNHN3.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/LayoutShiftManager.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/getNavigationEntry.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/getLoadState.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/getSelector.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/initUnique.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/bfcache.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/bindReporter.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/doubleRAF.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/getActivationStart.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/getVisibilityWatcher.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/initMetric.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/generateUniqueID.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/observe.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/softNavs.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/runOnce.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/FCPEntryManager.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/whenActivated.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/onFCP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/onCLS.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/attribution/onCLS.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/attribution/onFCP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/polyfills/interactionCountPolyfill.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/InteractionManager.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/whenIdleOrHidden.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/onINP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/attribution/onINP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/lib/LCPEntryManager.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/onLCP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/attribution/onLCP.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/onTTFB.js","../../../../../../../../Volumes/Uptrade%20Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/modules/attribution/onTTFB.js"],"names":["LayoutShiftManager","_onAfterProcessingUnexpectedShift","_sessionValue","_sessionEntries","_processEntry","entry","hadRecentInput","firstSessionEntry","this","lastSessionEntry","at","startTime","value","push","getNavigationEntry","navigationEntry","performance","getEntriesByType","responseStart","now","getLoadState","timestamp","document","readyState","hardNavEntry","domInteractive","domContentLoadedEventStart","domComplete","getName","node","name","nodeName","nodeType","toLowerCase","toUpperCase","replace","getSelector","sel","el","part","id","Array","from","classList","sort","join","length","MAX_LEN","parentNode","instanceMap","WeakMap","initUnique","identityObj","ClassObj","classInstances","get","set","bfcacheRestoreTime","getBFCacheRestoreTime","onBFCacheRestore","cb","addEventListener","event","persisted","timeStamp","bindReporter","callback","metric","thresholds","reportAllChanges","prevValue","delta","forceReport","rating","getRating","doubleRAF","requestAnimationFrame","getActivationStart","activationStart","firstHiddenTime","onHiddenFunctions","Set","initHiddenTime","visibilityState","prerendering","Infinity","onVisibilityUpdate","type","onHiddenFunction","isFinite","removeEventListener","getVisibilityWatcher","reset","firstVisibilityStateHiddenTime","globalThis","find","e","setTimeout","onHidden","add","initMetric","navigationType","navigationId","navigationInteractionId","navigationURL","navigationStartTime","hardNavId","_navigationType","wasDiscarded","entries","Date","Math","floor","random","observe","types","opts","supportedTypes","filter","t","PerformanceObserver","supportedEntryTypes","includes","po","list","queueMicrotask","getEntries","a","b","duration","buffered","checkSoftNavsEnabled","PerformanceSoftNavigation","prototype","getLargestInteractionContentfulPaint","reportSoftNavs","storeSoftNavEntry","map","size","firstKey","keys","next","delete","runOnce","called","FCPEntryManager","_softNavigationEntryMap","whenActivated","FCPThresholds","onFCP","onReport","softNavsEnabled","fcpEntryManager","visibilityWatcher","report","disconnect","max","forEach","FCPTime","presentationTime","paintTime","interactionId","CLSThresholds","getLargestLayoutShiftSource","sources","s","onCLS","layoutShiftManager","Object","assign","layoutShiftTargetMap","largestSource","customTarget","generateTarget","initNewCLSMetric","updateAndReportMetric","handleSoftNavEntry","handleEntries","entryType","takeRecords","attribution","largestEntry","reduce","largestShiftTarget","largestShiftTime","largestShiftValue","largestShiftSource","largestShiftEntry","loadState","Map","unattributedOnFCP","timeToFirstByte","firstByteToFCP","fcpEntry","ttfb","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","min","getInteractionCount","interactionCount","initInteractionCountPolyfill","durationThreshold","prevInteractionCount","InteractionManager","_longestInteractionList","_longestInteractionMap","_onBeforeProcessingEntry","_onAfterProcessingINPCandidate","_resetInteractions","clear","_estimateP98LongestInteraction","interactionCountForNavigation","candidateInteractionIndex","_latency","minLongestInteraction","interaction","removedInteractions","splice","whenIdleOrHidden","timeout","rIC","requestIdleCallback","cIC","cancelIdleCallback","clearTimeout","wrappedCb","idleHandle","once","capture","INPThresholds","onINP","interactionManager","pendingLoAFs","pendingEntriesGroups","latestProcessingEnd","entryToEntriesGroupMap","interactionTargetMap","cleanupPending","queueCleanup","cleanupEntries","longestInteractionGroups","i","minIndexToKeep","group","has","intersectingLoAFs","loafs","getIntersectingLoAFs","processingEnd","loaf","renderTime","potentialGroup","abs","processingStart","includeProcessedEventEntries","target","selector","targetSelector","start","end","attributeINP","navStartTime","processedEventEntries","longAnimationFrameEntries","inputDelay","processingDuration","presentationDelay","firstEntry","nextPaintTime","interactionTarget","interactionType","startsWith","interactionTime","longestScript","totalScriptDuration","totalStyleAndLayoutDuration","totalPaintDuration","totalUnattributedDuration","undefined","longestScriptEntry","longestScriptSubpart","longestScriptDuration","loafEntry","styleAndLayoutStart","script","scripts","scriptEndTime","intersectingScriptDuration","intersectingForceStyleAndLayoutDuration","forcedStyleAndLayoutDuration","lastLoAF","lastLoAFEndTime","subpart","intersectingDuration","concat","PerformanceEventTiming","initNewINPMetric","updateINPMetric","inp","LCPEntryManager","LCPThresholds","resourceBufferSizeLimit","resourceBuffer","shift","onLCP","resourceBufferSize","lcpEntryManager","lcpTargetMap","element","isFinalized","initNewLCPMetric","navigation","largestInteractionContentfulPaint","slice","metricEntries","ICPEntry","largestContentfulPaint","finalizeEventTypes","finalizeLCP","isTrusted","metricIdToFinalize","resourceLoadDelay","resourceLoadDuration","elementRenderDelay","lcpEntry","lcpResourceEntry","url","findLast","lcpRequestStart","requestStart","lcpResponseEnd","responseEnd","TTFBThresholds","whenReady","onTTFB","waitingDuration","cacheDuration","dnsDuration","connectionDuration","requestDuration","PerformanceNavigationTiming","waitEnd","workerStart","fetchStart","dnsStart","domainLookupStart","connectStart","connectEnd"],"mappings":"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","file":"web-vitals.attribution-SQVZNHN3.js","sourcesContent":["/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class LayoutShiftManager {\n _onAfterProcessingUnexpectedShift;\n _sessionValue = 0;\n _sessionEntries = [];\n _processEntry(entry) {\n // Only count layout shifts without recent user input.\n if (entry.hadRecentInput)\n return;\n const firstSessionEntry = this._sessionEntries[0];\n const lastSessionEntry = this._sessionEntries.at(-1);\n // If the entry occurred less than 1 second after the previous entry\n // and less than 5 seconds after the first entry in the session,\n // include the entry in the current session. Otherwise, start a new\n // session.\n if (this._sessionValue &&\n firstSessionEntry &&\n lastSessionEntry &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000) {\n this._sessionValue += entry.value;\n this._sessionEntries.push(entry);\n }\n else {\n this._sessionValue = entry.value;\n this._sessionEntries = [entry];\n }\n this._onAfterProcessingUnexpectedShift?.(entry);\n }\n}\n//# sourceMappingURL=LayoutShiftManager.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const getNavigationEntry = () => {\n const navigationEntry = performance.getEntriesByType('navigation')[0];\n // Check to ensure the `responseStart` property is present and valid.\n // In some cases a zero value is reported by the browser (for\n // privacy/security reasons), and in other cases (bugs) the value is\n // negative or is larger than the current page time. Ignore these cases:\n // - https://github.com/GoogleChrome/web-vitals/issues/137\n // - https://github.com/GoogleChrome/web-vitals/issues/162\n // - https://github.com/GoogleChrome/web-vitals/issues/275\n if (navigationEntry &&\n navigationEntry.responseStart > 0 &&\n navigationEntry.responseStart < performance.now()) {\n return navigationEntry;\n }\n};\n//# sourceMappingURL=getNavigationEntry.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getNavigationEntry } from './getNavigationEntry.js';\nexport const getLoadState = (timestamp) => {\n if (document.readyState === 'loading') {\n // If the `readyState` is 'loading' there's no need to look at timestamps\n // since the timestamp has to be the current time or earlier.\n return 'loading';\n }\n const hardNavEntry = getNavigationEntry();\n if (hardNavEntry) {\n if (timestamp < hardNavEntry.domInteractive) {\n return 'loading';\n }\n else if (hardNavEntry.domContentLoadedEventStart === 0 ||\n timestamp < hardNavEntry.domContentLoadedEventStart) {\n // If the `domContentLoadedEventStart` timestamp has not yet been\n // set, or if the given timestamp is less than that value.\n return 'dom-interactive';\n }\n else if (hardNavEntry.domComplete === 0 ||\n timestamp < hardNavEntry.domComplete) {\n // If the `domComplete` timestamp has not yet been\n // set, or if the given timestamp is less than that value.\n return 'dom-content-loaded';\n }\n }\n // If any of the above fail, default to loaded. This could really only\n // happy if the browser doesn't support the performance timeline, which\n // most likely means this code would never run anyway.\n return 'complete';\n};\n//# sourceMappingURL=getLoadState.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getName = (node) => {\n const name = node.nodeName;\n return node.nodeType === 1\n ? name.toLowerCase()\n : name.toUpperCase().replace(/^#/, '');\n};\nconst MAX_LEN = 100;\nexport const getSelector = (node) => {\n let sel = '';\n try {\n while (node?.nodeType !== 9) {\n const el = node;\n const part = el.id\n ? '#' + el.id\n : [getName(el), ...Array.from(el.classList ?? []).sort()].join('.');\n if (sel.length + part.length > MAX_LEN - 1) {\n return sel || part;\n }\n sel = sel ? part + '>' + sel : part;\n if (el.id) {\n break;\n }\n node = el.parentNode;\n }\n }\n catch {\n // Do nothing...\n }\n return sel;\n};\n//# sourceMappingURL=getSelector.js.map","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst instanceMap = new WeakMap();\n/**\n * A function that accepts and identity object and a class object and returns\n * either a new instance of that class or an existing instance, if the\n * identity object was previously used.\n */\nexport function initUnique(identityObj, ClassObj) {\n let classInstances = instanceMap.get(ClassObj);\n if (!classInstances) {\n classInstances = new WeakMap();\n instanceMap.set(ClassObj, classInstances);\n }\n if (!classInstances.get(identityObj)) {\n classInstances.set(identityObj, new ClassObj());\n }\n return classInstances.get(identityObj);\n}\n//# sourceMappingURL=initUnique.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet bfcacheRestoreTime = -1;\nexport const getBFCacheRestoreTime = () => bfcacheRestoreTime;\nexport const onBFCacheRestore = (cb) => {\n addEventListener('pageshow', (event) => {\n if (event.persisted) {\n bfcacheRestoreTime = event.timeStamp;\n cb(event);\n }\n }, true);\n};\n//# sourceMappingURL=bfcache.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getRating = (value, thresholds) => {\n if (value > thresholds[1]) {\n return 'poor';\n }\n if (value > thresholds[0]) {\n return 'needs-improvement';\n }\n return 'good';\n};\nexport const bindReporter = (callback, metric, thresholds, reportAllChanges) => {\n let prevValue;\n let delta;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue ?? 0);\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n metric.rating = getRating(metric.value, thresholds);\n callback(metric);\n }\n }\n }\n };\n};\n//# sourceMappingURL=bindReporter.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const doubleRAF = (cb) => {\n requestAnimationFrame(() => requestAnimationFrame(cb));\n};\n//# sourceMappingURL=doubleRAF.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getNavigationEntry } from './getNavigationEntry.js';\nexport const getActivationStart = () => {\n return getNavigationEntry()?.activationStart ?? 0;\n};\n//# sourceMappingURL=getActivationStart.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { onBFCacheRestore } from './bfcache.js';\nimport { getActivationStart } from './getActivationStart.js';\nlet firstHiddenTime = -1;\nconst onHiddenFunctions = new Set();\nconst initHiddenTime = () => {\n // If the document is hidden when this code runs, assume it was always\n // hidden and the page was loaded in the background, with the one exception\n // that visibility state is always 'hidden' during prerendering, so we have\n // to ignore that case until prerendering finishes (see: `prerenderingchange`\n // event logic below).\n return document.visibilityState === 'hidden' && !document.prerendering\n ? 0\n : Infinity;\n};\nconst onVisibilityUpdate = (event) => {\n // Handle changes to hidden state\n if (document.visibilityState === 'hidden') {\n if (event.type === 'visibilitychange') {\n for (const onHiddenFunction of onHiddenFunctions) {\n onHiddenFunction();\n }\n }\n // If the document is 'hidden' and no previous hidden timestamp has been\n // set (so is infinity), update it based on the current event data.\n if (!isFinite(firstHiddenTime)) {\n // If the event is a 'visibilitychange' event, it means the page was\n // visible prior to this change, so the event timestamp is the first\n // hidden time.\n // However, if the event is not a 'visibilitychange' event, then it must\n // be a 'prerenderingchange' event, and the fact that the document is\n // still 'hidden' from the above check means the tab was activated\n // in a background state and so has always been hidden.\n firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n // We no longer need the `prerenderingchange` event listener now we've\n // set an initial init time so remove that\n // (we'll keep the visibilitychange one for onHiddenFunction above)\n removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n }\n }\n};\nexport const getVisibilityWatcher = (reset = false) => {\n if (reset) {\n firstHiddenTime = Infinity;\n }\n if (firstHiddenTime < 0) {\n // Check if we have a previous hidden `visibility-state` performance entry.\n const activationStart = getActivationStart();\n /* eslint-disable indent */\n const firstVisibilityStateHiddenTime = !document.prerendering\n ? globalThis.performance\n .getEntriesByType('visibility-state')\n .find((e) => e.name === 'hidden' && e.startTime >= activationStart)\n ?.startTime\n : undefined;\n /* eslint-enable indent */\n // Prefer that, but if it's not available and the document is hidden when\n // this code runs, assume it was hidden since navigation start. This isn't\n // a perfect heuristic, but it's the best we can do until the\n // `visibility-state` performance entry becomes available in all browsers.\n firstHiddenTime = firstVisibilityStateHiddenTime ?? initHiddenTime();\n // Listen for visibility changes so we can handle things like bfcache\n // restores and/or prerender without having to examine individual\n // timestamps in detail and also for onHidden function calls.\n addEventListener('visibilitychange', onVisibilityUpdate, true);\n // IMPORTANT: when a page is prerendering, its `visibilityState` is\n // 'hidden', so in order to account for cases where this module checks for\n // visibility during prerendering, an additional check after prerendering\n // completes is also required.\n addEventListener('prerenderingchange', onVisibilityUpdate, true);\n // Reset the time on bfcache restores.\n onBFCacheRestore(() => {\n // Schedule a task in order to track the `visibilityState` once it's\n // had an opportunity to change to visible in all browsers.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1133363\n setTimeout(() => {\n firstHiddenTime = initHiddenTime();\n });\n });\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n onHidden(cb) {\n onHiddenFunctions.add(cb);\n },\n };\n};\n//# sourceMappingURL=getVisibilityWatcher.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime } from './bfcache.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\nexport const initMetric = (name, value = -1, navigationType, navigationId = 0, navigationInteractionId, navigationURL, navigationStartTime) => {\n const hardNavEntry = getNavigationEntry();\n const hardNavId = hardNavEntry?.navigationId || 0;\n let _navigationType = 'navigate';\n if (navigationType) {\n // If it was passed in, then use that\n _navigationType = navigationType;\n }\n else if (getBFCacheRestoreTime() >= 0) {\n _navigationType = 'back-forward-cache';\n }\n else if (hardNavEntry) {\n if (document.prerendering || getActivationStart() > 0) {\n _navigationType = 'prerender';\n }\n else if (document.wasDiscarded) {\n _navigationType = 'restore';\n }\n else if (hardNavEntry.type) {\n _navigationType = hardNavEntry.type.replace(/_/g, '-');\n }\n }\n // Use `entries` type specific for the metric.\n const entries = [];\n return {\n name,\n value,\n rating: 'good', // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n delta: 0,\n entries,\n id: generateUniqueID(),\n navigationType: _navigationType,\n navigationId: navigationId || hardNavId,\n navigationInteractionId: navigationInteractionId,\n navigationURL: navigationURL || hardNavEntry?.name,\n navigationStartTime: navigationStartTime || 0,\n };\n};\n//# sourceMappingURL=initMetric.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = () => {\n return `v6-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n//# sourceMappingURL=generateUniqueID.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = (types, callback, opts = {}) => {\n try {\n const supportedTypes = types.filter((t) => PerformanceObserver.supportedEntryTypes.includes(t));\n if (supportedTypes.length > 0) {\n const po = new PerformanceObserver((list) => {\n // Delay by a microtask to workaround a bug in Safari where the\n // callback is invoked immediately, rather than in a separate task.\n // See: https://github.com/GoogleChrome/web-vitals/issues/277\n queueMicrotask(() => {\n const entries = list.getEntries();\n // When observing more than one entry type, entries from different\n // types can be delivered out of order, so sort by end time\n // (startTime + duration) to ensure they're in the right order.\n // See: https://github.com/w3c/performance-timeline/issues/224\n if (supportedTypes.length > 1) {\n entries.sort((a, b) => {\n const scoreA = a.startTime + a.duration;\n const scoreB = b.startTime + b.duration;\n return scoreA - scoreB;\n });\n }\n callback(entries);\n });\n });\n for (const t of supportedTypes) {\n po.observe({ type: t, buffered: true, ...opts });\n }\n return po;\n }\n }\n catch {\n // Do nothing.\n }\n return;\n};\n//# sourceMappingURL=observe.js.map","/*\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const checkSoftNavsEnabled = (opts) => {\n return (\n // Firefox has a preference to disable this, which some people use so add a guard\n globalThis.PerformanceObserver?.supportedEntryTypes.includes('soft-navigation') &&\n // Older implementations expose the value as an attribute rather than the\n // method. We only support the newer method as that was what was launched\n // to stable unflagged.\n typeof globalThis.PerformanceSoftNavigation?.prototype\n ?.getLargestInteractionContentfulPaint === 'function' &&\n opts &&\n opts.reportSoftNavs);\n};\n// Stores a soft navigation entry keyed by its navigationId, keeping only\n// the 2 most recent entries so the map cannot grow unbounded.\nexport const storeSoftNavEntry = (map, entry) => {\n map.set(entry.navigationId, entry);\n // Clean up older entries to prevent memory leaks, keeping only\n // the 2 most recent entries.\n if (map.size > 2) {\n const firstKey = map.keys().next().value;\n if (firstKey !== undefined) {\n map.delete(firstKey);\n }\n }\n};\n//# sourceMappingURL=softNavs.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const runOnce = (cb) => {\n let called = false;\n return () => {\n if (!called) {\n cb();\n called = true;\n }\n };\n};\n//# sourceMappingURL=runOnce.js.map","/*\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class FCPEntryManager {\n _softNavigationEntryMap;\n}\n//# sourceMappingURL=FCPEntryManager.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const whenActivated = (callback) => {\n if (document.prerendering) {\n addEventListener('prerenderingchange', callback, true);\n }\n else {\n callback();\n }\n};\n//# sourceMappingURL=whenActivated.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter.js';\nimport { checkSoftNavsEnabled, storeSoftNavEntry } from './lib/softNavs.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { FCPEntryManager } from './lib/FCPEntryManager.js';\nimport { observe } from './lib/observe.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { whenActivated } from './lib/whenActivated.js';\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nexport const FCPThresholds = [1800, 3000];\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nexport const onFCP = (onReport, opts = {}) => {\n const softNavsEnabled = checkSoftNavsEnabled(opts);\n whenActivated(() => {\n // Create a new FCP entry manager for each page activation\n // This allows us to track soft navigations separately\n // needed when attribution is enabled.\n const fcpEntryManager = initUnique(opts, FCPEntryManager);\n const visibilityWatcher = getVisibilityWatcher();\n let metric = initMetric('FCP');\n let report;\n const handleEntries = (entries) => {\n for (const entry of entries) {\n if (entry.name === 'first-contentful-paint') {\n po.disconnect();\n // Only report if the page wasn't hidden prior to FCP.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The activationStart reference is used because FCP should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the FCP, this time should be clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries.push(entry);\n metric.navigationId = entry.navigationId || metric.navigationId;\n // FCP should only be reported once so can report right away\n report(true);\n }\n }\n }\n };\n const po = observe(['paint'], handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n // Only report after a bfcache restore if the `PerformanceObserver`\n // successfully registered or the `paint` entry exists.\n onBFCacheRestore((event) => {\n metric = initMetric('FCP', -1, 'back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n doubleRAF(() => {\n metric.value = performance.now() - event.timeStamp;\n report(true);\n });\n });\n }\n if (softNavsEnabled) {\n // As first-contentful-paint is only reported once, we can handle soft\n // navigations afterwards on their own for simplicity, as no need to\n // observe both and sort the entries like for the other metrics\n const handleSoftNavEntries = (entries) => {\n entries.forEach((entry) => {\n // Store the soft navigation entries in the entry manager so that\n // they can be retrieved for attribution if necessary. This code\n // is only used when attribution is enabled which sets the\n // _softNavigationEntryMap.\n if (fcpEntryManager._softNavigationEntryMap && entry.navigationId) {\n storeSoftNavEntry(fcpEntryManager._softNavigationEntryMap, entry);\n }\n // Clamp FCP at 0. It should never be less, but better safe than sorry.\n const FCPTime = Math.max((entry.presentationTime || entry.paintTime || 0) - entry.startTime, 0);\n metric = initMetric('FCP', FCPTime, 'soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n report(true);\n });\n };\n observe(['soft-navigation'], handleSoftNavEntries, opts);\n }\n });\n};\n//# sourceMappingURL=onFCP.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { LayoutShiftManager } from './lib/LayoutShiftManager.js';\nimport { observe } from './lib/observe.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nexport const CLSThresholds = [0.1, 0.25];\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport, opts = {}) => {\n const visibilityWatcher = getVisibilityWatcher();\n // Start monitoring FCP so we can only report CLS if FCP is also reported.\n // Note: this is done to match the current behavior of CrUX.\n onFCP(runOnce(() => {\n let metric = initMetric('CLS', 0);\n let report;\n const layoutShiftManager = initUnique(opts, LayoutShiftManager);\n const initNewCLSMetric = (navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n metric = initMetric('CLS', 0, navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n layoutShiftManager._sessionValue = 0;\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n };\n const updateAndReportMetric = (forceReport = false) => {\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (layoutShiftManager._sessionValue > metric.value) {\n metric.value = layoutShiftManager._sessionValue;\n metric.entries = layoutShiftManager._sessionEntries;\n }\n report(forceReport);\n };\n const handleSoftNavEntry = (entry) => {\n updateAndReportMetric(true);\n initNewCLSMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n };\n const handleEntries = (entries) => {\n for (const entry of entries) {\n if (entry.entryType === 'soft-navigation') {\n handleSoftNavEntry(entry);\n continue;\n }\n layoutShiftManager._processEntry(entry);\n }\n updateAndReportMetric();\n };\n const types = ['layout-shift'];\n if (checkSoftNavsEnabled(opts)) {\n types.push('soft-navigation');\n }\n const po = observe(types, handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n visibilityWatcher.onHidden(() => {\n handleEntries(po.takeRecords());\n report(true);\n });\n // Only report after a bfcache restore if the `PerformanceObserver`\n // successfully registered.\n onBFCacheRestore(() => {\n initNewCLSMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n doubleRAF(report);\n });\n // Queue a task to report (if nothing else triggers a report first).\n // This allows CLS to be reported as soon as FCP fires when\n // `reportAllChanges` is true.\n setTimeout(report);\n }\n }));\n};\n//# sourceMappingURL=onCLS.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LayoutShiftManager } from '../lib/LayoutShiftManager.js';\nimport { getLoadState } from '../lib/getLoadState.js';\nimport { getSelector } from '../lib/getSelector.js';\nimport { initUnique } from '../lib/initUnique.js';\nimport { onCLS as unattributedOnCLS } from '../onCLS.js';\nconst getLargestLayoutShiftEntry = (entries) => {\n return entries.reduce((a, b) => (a.value > b.value ? a : b));\n};\nconst getLargestLayoutShiftSource = (sources) => {\n return sources.find((s) => s.node?.nodeType === 1) || sources[0];\n};\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport, opts = {}) => {\n // Clone the opts object to ensure it's unique, so we can initialize a\n // single instance of the `LayoutShiftManager` class that's shared only with\n // this function invocation and the `unattributedOnCLS()` invocation below\n // (which is passed the same `opts` object).\n opts = Object.assign({}, opts);\n const layoutShiftManager = initUnique(opts, LayoutShiftManager);\n const layoutShiftTargetMap = new WeakMap();\n layoutShiftManager._onAfterProcessingUnexpectedShift = (entry) => {\n if (entry?.sources?.length) {\n const largestSource = getLargestLayoutShiftSource(entry.sources);\n const node = largestSource?.node;\n if (node) {\n const customTarget = opts.generateTarget?.(node) ?? getSelector(node);\n layoutShiftTargetMap.set(largestSource, customTarget);\n }\n }\n };\n const attributeCLS = (metric) => {\n // Use an empty object if no other attribution has been set.\n let attribution = {};\n if (metric.entries.length) {\n const largestEntry = getLargestLayoutShiftEntry(metric.entries);\n if (largestEntry?.sources?.length) {\n const largestSource = getLargestLayoutShiftSource(largestEntry.sources);\n if (largestSource) {\n attribution = {\n largestShiftTarget: layoutShiftTargetMap.get(largestSource),\n largestShiftTime: largestEntry.startTime,\n largestShiftValue: largestEntry.value,\n largestShiftSource: largestSource,\n largestShiftEntry: largestEntry,\n loadState: getLoadState(largestEntry.startTime),\n };\n }\n }\n }\n // Use `Object.assign()` to ensure the original metric object is returned.\n return Object.assign(metric, { attribution });\n };\n unattributedOnCLS((metric) => {\n onReport(attributeCLS(metric));\n }, opts);\n};\n//# sourceMappingURL=onCLS.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime } from '../lib/bfcache.js';\nimport { getLoadState } from '../lib/getLoadState.js';\nimport { getNavigationEntry } from '../lib/getNavigationEntry.js';\nimport { initUnique } from '../lib/initUnique.js';\nimport { FCPEntryManager } from '../lib/FCPEntryManager.js';\nimport { checkSoftNavsEnabled } from '../lib/softNavs.js';\nimport { onFCP as unattributedOnFCP } from '../onFCP.js';\nexport const onFCP = (onReport, opts = {}) => {\n opts = Object.assign({}, opts);\n // Init the fcpEntryManager (which will already be initialised in the\n // unattributed onFCP method if soft navigation reporting is enabled\n // and so will return that fcpEntryManager, rather than a new one)\n const fcpEntryManager = initUnique(opts, FCPEntryManager);\n if (checkSoftNavsEnabled(opts)) {\n fcpEntryManager._softNavigationEntryMap = new Map();\n }\n const attributeFCP = (metric) => {\n // Use a default object if no other attribution has been set.\n let attribution = {\n timeToFirstByte: 0,\n firstByteToFCP: metric.value,\n loadState: getLoadState(getBFCacheRestoreTime()),\n };\n if (metric.navigationType !== 'soft-navigation') {\n if (metric.entries.length) {\n const navigationEntry = getNavigationEntry();\n const fcpEntry = metric.entries.at(-1);\n if (navigationEntry) {\n const responseStart = navigationEntry.responseStart;\n const activationStart = navigationEntry.activationStart || 0;\n const ttfb = Math.max(0, responseStart - activationStart);\n attribution = {\n timeToFirstByte: ttfb,\n firstByteToFCP: metric.value - ttfb,\n loadState: getLoadState(metric.entries[0].startTime),\n navigationEntry,\n fcpEntry,\n };\n }\n }\n }\n else {\n // Lookup the soft navigation entry. Do not use getEntriesByType since\n // that is limited to the first 50 navigation entries due to buffer size.\n const navigationEntry = fcpEntryManager._softNavigationEntryMap?.get(metric.navigationId);\n if (navigationEntry) {\n attribution = {\n timeToFirstByte: 0,\n firstByteToFCP: metric.value,\n loadState: 'complete',\n navigationEntry,\n };\n }\n }\n // Use `Object.assign()` to ensure the original metric object is returned.\n const metricWithAttribution = Object.assign(metric, { attribution });\n return metricWithAttribution;\n };\n unattributedOnFCP((metric) => {\n onReport(attributeFCP(metric));\n }, opts);\n};\n//# sourceMappingURL=onFCP.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { observe } from '../observe.js';\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\nconst updateEstimate = (entries) => {\n for (const entry of entries) {\n if (entry.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, entry.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, entry.interactionId);\n interactionCountEstimate = maxKnownInteractionId\n ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1\n : 0;\n }\n }\n};\nlet po;\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = () => {\n return po ? interactionCountEstimate : (performance.interactionCount ?? 0);\n};\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = () => {\n if ('interactionCount' in performance || po)\n return;\n po = observe(['event'], updateEstimate, {\n durationThreshold: 0,\n });\n};\n//# sourceMappingURL=interactionCountPolyfill.js.map","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getInteractionCount } from './polyfills/interactionCountPolyfill.js';\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nlet prevInteractionCount = 0;\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n return getInteractionCount() - prevInteractionCount;\n};\nexport class InteractionManager {\n /**\n * A list of longest interactions on the page (by latency) sorted so the\n * longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER\n * long.\n */\n _longestInteractionList = [];\n /**\n * A mapping of longest interactions by their interaction ID.\n * This is used for faster lookup.\n */\n _longestInteractionMap = new Map();\n _onBeforeProcessingEntry;\n _onAfterProcessingINPCandidate;\n _resetInteractions() {\n prevInteractionCount = getInteractionCount();\n this._longestInteractionList.length = 0;\n this._longestInteractionMap.clear();\n }\n /**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\n _estimateP98LongestInteraction(navigationType) {\n const interactionCountForNavigation = getInteractionCountForNavigation();\n const candidateInteractionIndex = Math.min(this._longestInteractionList.length - 1, Math.floor(interactionCountForNavigation / 50));\n // If we have a non-zero interactionCountForNavigation but no\n // candidateInteractionIndex, then it's below the 16ms limit\n // so report a dummy 8ms interaction. This is only needed for\n // soft-navs and bfcache restores as `first-input` handles the\n // rest.\n if (interactionCountForNavigation &&\n candidateInteractionIndex === -1 &&\n (navigationType === 'soft-navigation' ||\n navigationType === 'back-forward-cache')) {\n return {\n _latency: 8,\n id: -1,\n entries: [],\n };\n }\n return this._longestInteractionList[candidateInteractionIndex];\n }\n /**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\n _processEntry(entry) {\n this._onBeforeProcessingEntry?.(entry);\n // Skip further processing for entries that cannot be INP candidates.\n if (!(entry.interactionId || entry.entryType === 'first-input'))\n return;\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = this._longestInteractionList.at(-1);\n let interaction = this._longestInteractionMap.get(entry.interactionId);\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (interaction ||\n this._longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n // If the above conditions are false, `minLongestInteraction` will be set.\n entry.duration > minLongestInteraction._latency) {\n // If the interaction already exists, update it. Otherwise create one.\n if (interaction) {\n // If the new entry has a longer duration, replace the old entries,\n // otherwise add to the array.\n if (entry.duration > interaction._latency) {\n interaction.entries = [entry];\n interaction._latency = entry.duration;\n }\n else if (entry.duration === interaction._latency &&\n entry.startTime === interaction.entries[0].startTime) {\n interaction.entries.push(entry);\n }\n }\n else {\n interaction = {\n id: entry.interactionId,\n entries: [entry],\n _latency: entry.duration,\n };\n this._longestInteractionMap.set(interaction.id, interaction);\n this._longestInteractionList.push(interaction);\n }\n // Sort the entries by latency (descending) and keep only the top ten.\n this._longestInteractionList.sort((a, b) => b._latency - a._latency);\n if (this._longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n const removedInteractions = this._longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER);\n for (const interaction of removedInteractions) {\n this._longestInteractionMap.delete(interaction.id);\n }\n }\n // Call any post-processing on the interaction\n this._onAfterProcessingINPCandidate?.(interaction);\n }\n }\n}\n//# sourceMappingURL=InteractionManager.js.map","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { runOnce } from './runOnce.js';\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nexport const whenIdleOrHidden = (cb) => {\n // Cap the requestIdleCallback to 1 sec for very busy apps\n // https://github.com/GoogleChrome/web-vitals/issues/754\n // If not using rIC, then the setTimeout timeout should be 0\n const timeout = 'requestIdleCallback' in globalThis ? 1000 : 0;\n const rIC = globalThis.requestIdleCallback || setTimeout;\n const cIC = globalThis.cancelIdleCallback || clearTimeout;\n // If the document is hidden, run the callback immediately, otherwise\n // race an idle callback with the next `visibilitychange` event.\n if (document.visibilityState === 'hidden') {\n cb();\n }\n else {\n const wrappedCb = runOnce(cb);\n let idleHandle = -1;\n const onHidden = () => {\n cIC(idleHandle);\n wrappedCb();\n };\n addEventListener('visibilitychange', onHidden, { once: true, capture: true });\n idleHandle = rIC(() => {\n removeEventListener('visibilitychange', onHidden, { capture: true });\n wrappedCb();\n }, { timeout: timeout });\n }\n};\n//# sourceMappingURL=whenIdleOrHidden.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { InteractionManager } from './lib/InteractionManager.js';\nimport { observe } from './lib/observe.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { whenIdleOrHidden } from './lib/whenIdleOrHidden.js';\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nexport const INPThresholds = [200, 500];\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\n// Event Timing entries have their durations rounded to the nearest 8ms,\n// so a duration of 40ms would be any event that spans 2.5 or more frames\n// at 60Hz. This threshold is chosen to strike a balance between usefulness\n// and performance. Running this callback for any interaction that spans\n// just one or two frames is likely not worth the insight that could be\n// gained.\nconst DEFAULT_DURATION_THRESHOLD = 40;\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed\n * to control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 will not\n * be reported. To avoid reporting no interactions in these cases, the library\n * will fall back to the input delay of the first interaction. Note that this\n * will not affect your 75th percentile INP value unless that value is also\n * less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport, opts = {}) => {\n // Return if the browser doesn't support all APIs needed to measure INP.\n if (!(globalThis.PerformanceEventTiming &&\n 'interactionId' in PerformanceEventTiming.prototype)) {\n return;\n }\n const visibilityWatcher = getVisibilityWatcher();\n whenActivated(() => {\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n let metric = initMetric('INP');\n let report;\n const interactionManager = initUnique(opts, InteractionManager);\n const initNewINPMetric = (navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n interactionManager._resetInteractions();\n metric = initMetric('INP', -1, navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n };\n const updateINPMetric = () => {\n const inp = interactionManager._estimateP98LongestInteraction(metric.navigationType);\n if (inp && inp._latency !== metric.value) {\n metric.value = inp._latency;\n metric.entries = inp.entries;\n report();\n }\n };\n const handleSoftNavEntry = (entry) => {\n updateINPMetric();\n report(true);\n initNewINPMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n };\n const handleEntries = (entries, forceReport = false) => {\n // Queue the `handleEntries()` callback in the next idle task.\n // This is needed to increase the chances that all event entries that\n // occurred between the user interaction and the next paint\n // have been dispatched. Note: there is currently an experiment\n // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n // 123+ that if rolled out fully may make this no longer necessary.\n whenIdleOrHidden(() => {\n for (const entry of entries) {\n if (entry.entryType === 'soft-navigation') {\n handleSoftNavEntry(entry);\n continue;\n }\n interactionManager._processEntry(entry);\n }\n updateINPMetric();\n if (forceReport) {\n report(true);\n }\n });\n };\n const types = ['event', 'first-input'];\n if (checkSoftNavsEnabled(opts)) {\n types.push('soft-navigation');\n }\n const po = observe(types, handleEntries, {\n ...opts,\n durationThreshold: opts.durationThreshold ?? DEFAULT_DURATION_THRESHOLD,\n });\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n if (po) {\n visibilityWatcher.onHidden(() => {\n handleEntries(po.takeRecords(), true);\n });\n // Only report after a bfcache restore if the `PerformanceObserver`\n // successfully registered.\n onBFCacheRestore(() => {\n initNewINPMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n });\n }\n });\n};\n//# sourceMappingURL=onINP.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getLoadState } from '../lib/getLoadState.js';\nimport { getSelector } from '../lib/getSelector.js';\nimport { initUnique } from '../lib/initUnique.js';\nimport { InteractionManager, } from '../lib/InteractionManager.js';\nimport { observe } from '../lib/observe.js';\nimport { whenIdleOrHidden } from '../lib/whenIdleOrHidden.js';\nimport { onINP as unattributedOnINP } from '../onINP.js';\n// The maximum number of previous frames for which data is kept.\n// Storing data about previous frames is necessary to handle cases where event\n// and LoAF entries are dispatched out of order, and so a buffer of previous\n// frame data is needed to determine various bits of INP attribution once all\n// the frame-related data has come in.\n// In most cases this out-of-order data is only off by a frame or two, so\n// keeping the most recent 10 should be more than sufficient.\nconst MAX_PENDING_FRAMES = 10;\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed\n * to control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 will not\n * be reported. To avoid reporting no interactions in these cases, the library\n * will fall back to the input delay of the first interaction. Note that this\n * will not affect your 75th percentile INP value unless that value is also\n * less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * A custom `includeProcessedEventEntries` configuration option can optionally\n * be passed to control whether the `processedEventEntries` array in the\n * attribution object is populated. The default value is `false`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it has been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport, opts = {}) => {\n // Clone the opts object to ensure it's unique, so we can initialize a\n // single instance of the `InteractionManager` class that's shared only with\n // this function invocation and the `unattributedOnINP()` invocation below\n // (which is passed the same `opts` object).\n opts = Object.assign({}, opts);\n const interactionManager = initUnique(opts, InteractionManager);\n // A list of LoAF entries that have been dispatched and could potentially\n // intersect with the INP candidate interaction. Note that periodically this\n // list is cleaned up and entries that are known to not match INP are removed.\n let pendingLoAFs = [];\n // An array of groups of all the event timing entries that occurred within a\n // particular frame. Note that periodically this array is cleaned up and entries\n // that are known to not match INP are removed.\n let pendingEntriesGroups = [];\n // The `processingEnd` time of most recently-processed event, chronologically.\n let latestProcessingEnd = 0;\n // A WeakMap to look up the event-timing-entries group of a given entry.\n // Note that this only maps from \"important\" entries: either the first input or\n // those with an `interactionId`.\n const entryToEntriesGroupMap = new WeakMap();\n // A mapping of interactionIds to the target Node.\n const interactionTargetMap = new WeakMap();\n // A boolean flag indicating whether or not a cleanup task has been queued.\n let cleanupPending = false;\n /**\n * Adds new LoAF entries to the `pendingLoAFs` list.\n */\n const handleLoAFEntries = (entries) => {\n pendingLoAFs = pendingLoAFs.concat(entries);\n queueCleanup();\n };\n const saveInteractionTarget = (interaction) => {\n if (!interactionTargetMap.get(interaction)) {\n // Use find to get first selector\n const node = interaction.entries.find((e) => e.target)?.target;\n if (node) {\n const customTarget = opts.generateTarget?.(node) ?? getSelector(node);\n interactionTargetMap.set(interaction, customTarget);\n }\n else {\n // Fall back to targetSelector\n const selector = interaction.entries.find((e) => e.targetSelector)?.targetSelector;\n if (selector) {\n interactionTargetMap.set(interaction, selector);\n }\n }\n }\n };\n /**\n * Groups entries that were presented within the same animation frame by\n * a common `renderTime`. This function works by referencing\n * `pendingEntriesGroups` and using an existing render time if one is found\n * (otherwise creating a new one). This function also adds all interaction\n * entries to an `entryToRenderTimeMap` WeakMap so that the \"grouped\" entries\n * can be looked up later.\n */\n const groupEntriesByRenderTime = (entry) => {\n const renderTime = entry.startTime + entry.duration;\n let group;\n // Update `latestProcessingEnd` to correspond to the `processingEnd`\n // value of the most recently dispatched `event` entry.\n latestProcessingEnd = Math.max(latestProcessingEnd, entry.processingEnd);\n // Iterate over all previous render times in reverse order to find a match.\n // Go in reverse since the most likely match will be at the end.\n for (let i = pendingEntriesGroups.length - 1; i >= 0; i--) {\n const potentialGroup = pendingEntriesGroups[i];\n // If a group's render time is within 8ms of the entry's render time,\n // assume they were part of the same frame and add it to the group.\n if (Math.abs(renderTime - potentialGroup.renderTime) <= 8) {\n group = potentialGroup;\n group.startTime = Math.min(entry.startTime, group.startTime);\n group.processingStart = Math.min(entry.processingStart, group.processingStart);\n group.processingEnd = Math.max(entry.processingEnd, group.processingEnd);\n // processedEventEntries can be quite large, so only include them if\n // the user explicitly requests them (default is to include).\n if (opts.includeProcessedEventEntries) {\n group.entries.push(entry);\n }\n break;\n }\n }\n // If there was no matching group, assume this is a new frame.\n if (!group) {\n group = {\n startTime: entry.startTime,\n processingStart: entry.processingStart,\n processingEnd: entry.processingEnd,\n renderTime,\n // processedEventEntries can be quite large, so only include them if\n // the user explicitly requests them (default is to include).\n entries: opts.includeProcessedEventEntries ? [entry] : [],\n };\n pendingEntriesGroups.push(group);\n }\n // Store the grouped render time for this entry for reference later.\n if (entry.interactionId || entry.entryType === 'first-input') {\n entryToEntriesGroupMap.set(entry, group);\n }\n queueCleanup();\n };\n const queueCleanup = () => {\n // Queue cleanup of entries that are not part of any INP candidates.\n if (!cleanupPending) {\n whenIdleOrHidden(cleanupEntries);\n cleanupPending = true;\n }\n };\n const cleanupEntries = () => {\n // Create a set of entries groups that are part of the longest\n // interactions (for faster lookup below).\n const longestInteractionGroups = new Set(interactionManager._longestInteractionList.map((i) => {\n return entryToEntriesGroupMap.get(i.entries[0]);\n }));\n // Clean up the `pendingEntriesGroups` list so it doesn't grow endlessly.\n // Keep any groups that:\n // 1) Correspond to one of the current longest interactions, OR\n // 2) Are part of one of the most recent set of frames (which is\n // determined by checking if the index in the group is within\n // `MAX_PENDING_FRAMES` of the group's length).\n const minIndexToKeep = pendingEntriesGroups.length - MAX_PENDING_FRAMES;\n pendingEntriesGroups = pendingEntriesGroups.filter((group, i) => {\n // Check index first because it's faster.\n return i >= minIndexToKeep || longestInteractionGroups.has(group);\n });\n // Create a set of LoAF entries that intersect with entries in the newly\n // cleaned up `pendingEntriesGroups` (for faster lookup below).\n const intersectingLoAFs = new Set();\n for (const group of pendingEntriesGroups) {\n const loafs = getIntersectingLoAFs(group.startTime, group.processingEnd);\n for (const loaf of loafs) {\n intersectingLoAFs.add(loaf);\n }\n }\n // Clean up the `pendingLoAFs` list so it doesn't grow endlessly.\n // Keep all LoAFs that either:\n // 1) Intersect with one of the above pending entries groups, OR\n // 2) Occurred more recently than the most recently process event entry.\n pendingLoAFs = pendingLoAFs.filter((loaf) => {\n return (\n // Compare times first because it's faster.\n loaf.startTime > latestProcessingEnd || intersectingLoAFs.has(loaf));\n });\n cleanupPending = false;\n };\n interactionManager._onBeforeProcessingEntry = groupEntriesByRenderTime;\n interactionManager._onAfterProcessingINPCandidate = saveInteractionTarget;\n const getIntersectingLoAFs = (start, end) => {\n const intersectingLoAFs = [];\n for (const loaf of pendingLoAFs) {\n // If the LoAF ends before the given start time, ignore it.\n if (loaf.startTime + loaf.duration < start)\n continue;\n // If the LoAF starts after the given end time, ignore it and all\n // subsequent pending LoAFs (because they're in time order).\n if (loaf.startTime > end)\n break;\n // Still here? If so this LoAF intersects with the interaction.\n intersectingLoAFs.push(loaf);\n }\n return intersectingLoAFs;\n };\n const attributeLoAFDetails = (attribution) => {\n const interactionTime = attribution.interactionTime;\n const nextPaintTime = attribution.nextPaintTime;\n // If there is no LoAF data, interactionTime or paintTime\n // then nothing further to attribute here.\n if (!attribution.longAnimationFrameEntries?.length ||\n !interactionTime ||\n !nextPaintTime) {\n return;\n }\n const inputDelay = attribution.inputDelay;\n const processingDuration = attribution.processingDuration;\n // Stats across all LoAF entries and scripts.\n let totalScriptDuration = 0;\n let totalStyleAndLayoutDuration = 0;\n let totalPaintDuration = 0;\n let longestScriptDuration = 0;\n let longestScriptEntry;\n let longestScriptSubpart;\n for (const loafEntry of attribution.longAnimationFrameEntries) {\n totalStyleAndLayoutDuration =\n totalStyleAndLayoutDuration +\n loafEntry.startTime +\n loafEntry.duration -\n loafEntry.styleAndLayoutStart;\n for (const script of loafEntry.scripts) {\n const scriptEndTime = script.startTime + script.duration;\n if (scriptEndTime < interactionTime) {\n continue;\n }\n const intersectingScriptDuration = scriptEndTime - Math.max(interactionTime, script.startTime);\n // Since forcedStyleAndLayoutDuration doesn't provide timestamps, we\n // apportion the total based on the intersectingScriptDuration. Not\n // correct depending on when it occurred, but the best we can do.\n const intersectingForceStyleAndLayoutDuration = script.duration\n ? (intersectingScriptDuration / script.duration) *\n script.forcedStyleAndLayoutDuration\n : 0;\n // For scripts we exclude forcedStyleAndLayout (same as DevTools does\n // in its summary totals) and instead include that in\n // totalStyleAndLayoutDuration\n totalScriptDuration +=\n intersectingScriptDuration - intersectingForceStyleAndLayoutDuration;\n totalStyleAndLayoutDuration += intersectingForceStyleAndLayoutDuration;\n if (intersectingScriptDuration > longestScriptDuration) {\n // Set the subpart this occurred in.\n longestScriptSubpart =\n script.startTime < interactionTime + inputDelay\n ? 'input-delay'\n : script.startTime >=\n interactionTime + inputDelay + processingDuration\n ? 'presentation-delay'\n : 'processing-duration';\n longestScriptEntry = script;\n longestScriptDuration = intersectingScriptDuration;\n }\n }\n }\n // Calculate the totalPaintDuration from the last LoAF after\n // presentationDelay starts (where available)\n const lastLoAF = attribution.longAnimationFrameEntries.at(-1);\n const lastLoAFEndTime = lastLoAF\n ? lastLoAF.startTime + lastLoAF.duration\n : 0;\n if (lastLoAFEndTime >= interactionTime + inputDelay + processingDuration) {\n totalPaintDuration = nextPaintTime - lastLoAFEndTime;\n }\n if (longestScriptEntry && longestScriptSubpart) {\n attribution.longestScript = {\n entry: longestScriptEntry,\n subpart: longestScriptSubpart,\n intersectingDuration: longestScriptDuration,\n };\n }\n attribution.totalScriptDuration = totalScriptDuration;\n attribution.totalStyleAndLayoutDuration = totalStyleAndLayoutDuration;\n attribution.totalPaintDuration = totalPaintDuration;\n attribution.totalUnattributedDuration =\n nextPaintTime -\n interactionTime -\n totalScriptDuration -\n totalStyleAndLayoutDuration -\n totalPaintDuration;\n };\n const attributeINP = (metric) => {\n // Soft navs and bfcache can have a dummy INP as no first-input entry to\n // fall back on so we report dummy values when the interactionCount has\n // gone up, even if no entry was emitted.\n // See https://github.com/GoogleChrome/web-vitals/issues/724\n // All other INPs should have at least one entry, but we'll do same dummy\n // processing if they don't for some reason.\n if (metric.entries.length === 0) {\n const navStartTime = metric.navigationStartTime || 0;\n const attribution = {\n processedEventEntries: [],\n longAnimationFrameEntries: [],\n inputDelay: 0,\n processingDuration: 0,\n presentationDelay: metric.value,\n loadState: getLoadState(navStartTime),\n };\n return Object.assign(metric, { attribution });\n }\n const firstEntry = metric.entries[0];\n const group = entryToEntriesGroupMap.get(firstEntry);\n const processingStart = group.processingStart;\n // Due to the fact that durations can be rounded down to the nearest 8ms,\n // we have to clamp `nextPaintTime` so it doesn't appear to occur before\n // processing starts. Note: we can't use `processingEnd` since processing\n // can extend beyond the event duration in some cases (see next comment).\n const nextPaintTime = Math.max(firstEntry.startTime + firstEntry.duration, processingStart);\n // For the purposes of attribution, clamp `processingEnd` to `nextPaintTime`,\n // so processing is never reported as taking longer than INP (which can\n // happen via the web APIs in the case of sync modals, e.g. `alert()`).\n // See: https://github.com/GoogleChrome/web-vitals/issues/492\n const processingEnd = Math.min(group.processingEnd, nextPaintTime);\n // Sort the entries in processing time order.\n const processedEventEntries = group.entries.sort((a, b) => {\n return a.processingStart - b.processingStart;\n });\n const longAnimationFrameEntries = getIntersectingLoAFs(firstEntry.startTime, processingEnd);\n const interaction = interactionManager._longestInteractionMap.get(firstEntry.interactionId);\n const attribution = {\n // TS flags the next line because `interactionTargetMap.get()` might\n // return `undefined`, but we ignore this assuming the user knows what\n // they are doing.\n interactionTarget: interactionTargetMap.get(interaction),\n interactionType: firstEntry.name.startsWith('key')\n ? 'keyboard'\n : 'pointer',\n interactionTime: firstEntry.startTime,\n nextPaintTime: nextPaintTime,\n processedEventEntries: processedEventEntries,\n longAnimationFrameEntries: longAnimationFrameEntries,\n inputDelay: processingStart - firstEntry.startTime,\n processingDuration: processingEnd - processingStart,\n presentationDelay: nextPaintTime - processingEnd,\n loadState: getLoadState(firstEntry.startTime),\n longestScript: undefined,\n totalScriptDuration: undefined,\n totalStyleAndLayoutDuration: undefined,\n totalPaintDuration: undefined,\n totalUnattributedDuration: undefined,\n };\n attributeLoAFDetails(attribution);\n // Use `Object.assign()` to ensure the original metric object is returned.\n return Object.assign(metric, { attribution });\n };\n // Start observing LoAF entries for attribution.\n observe(['long-animation-frame'], handleLoAFEntries, opts);\n unattributedOnINP((metric) => {\n onReport(attributeINP(metric));\n }, opts);\n};\n//# sourceMappingURL=onINP.js.map","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class LCPEntryManager {\n _onBeforeProcessingEntry;\n _softNavigationEntryMap;\n _processEntry(entry) {\n this._onBeforeProcessingEntry?.(entry);\n }\n}\n//# sourceMappingURL=LCPEntryManager.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LCPEntryManager } from './lib/LCPEntryManager.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { checkSoftNavsEnabled, storeSoftNavEntry } from './lib/softNavs.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdleOrHidden } from './lib/whenIdleOrHidden.js';\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nexport const LCPThresholds = [2500, 4000];\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nexport const onLCP = (onReport, opts = {}) => {\n // As InteractionContentfulPaint entries used by soft navs can emit after\n // LCP is finalized, we need a flag to know to ignore them.\n let isFinalized = false;\n const softNavsEnabled = checkSoftNavsEnabled(opts);\n whenActivated(() => {\n let visibilityWatcher = getVisibilityWatcher();\n let metric = initMetric('LCP');\n let report;\n const lcpEntryManager = initUnique(opts, LCPEntryManager);\n const initNewLCPMetric = (navigation, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n metric = initMetric('LCP', -1, navigation, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n // Reset the finalized flag\n isFinalized = false;\n // If it's a soft nav, then need to reset the visibilityWatcher\n if (navigation === 'soft-navigation') {\n visibilityWatcher = getVisibilityWatcher(true);\n }\n };\n const handleSoftNavEntry = (entry) => {\n if (lcpEntryManager._softNavigationEntryMap && entry.navigationId) {\n storeSoftNavEntry(lcpEntryManager._softNavigationEntryMap, entry);\n }\n if (!isFinalized)\n report(true);\n initNewLCPMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n // Soft Navs should contain the largest paint until now, so handle that\n // as if it just happened, then listen for more.\n // It can however be null in rare circumstances\n // (see https://github.com/GoogleChrome/web-vitals/issues/725)\n const largestInteractionContentfulPaint = entry.getLargestInteractionContentfulPaint?.();\n if (largestInteractionContentfulPaint) {\n handleEntries([largestInteractionContentfulPaint]);\n }\n };\n const handleEntries = (entries) => {\n // If reportAllChanges is set or soft navs is enabled then call this\n // function for each entry, otherwise only consider the last one.\n if (!opts.reportAllChanges && !softNavsEnabled) {\n entries = entries.slice(-1);\n }\n for (const entry of entries) {\n if (!entry)\n continue;\n if (entry.entryType === 'soft-navigation') {\n handleSoftNavEntry(entry);\n continue;\n }\n let value = 0;\n let metricEntries = [];\n let renderTime = entry.startTime;\n if (entry.entryType === 'largest-contentful-paint') {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered. But in cases\n // where `activationStart` occurs after the LCP, this time should be\n // clamped at 0.\n value = Math.max(entry.startTime - getActivationStart(), 0);\n lcpEntryManager._processEntry(entry);\n metricEntries = [entry];\n }\n else if (entry.entryType === 'interaction-contentful-paint') {\n const ICPEntry = entry;\n // InteractionContentfulPaints should only happen after a\n // PerformanceSoftNavigation so the metric should have been set\n // with a non-zero navigationId mapping to a soft nav.\n if (!metric.navigationId)\n continue;\n // Ignore interactions not for this soft nav\n // (either paints that have bled into this interaction or paints when\n // we should have already finalized)\n if ('interactionId' in ICPEntry &&\n ICPEntry.interactionId != metric.navigationInteractionId) {\n continue;\n }\n renderTime = ICPEntry.largestContentfulPaint?.renderTime || 0;\n // Paints should never be less than 0 but add cap just in case\n value = Math.max(renderTime - entry.startTime, 0);\n if (ICPEntry.largestContentfulPaint) {\n lcpEntryManager._processEntry(ICPEntry.largestContentfulPaint);\n metricEntries = [ICPEntry.largestContentfulPaint];\n }\n }\n // Only report if the page wasn't hidden prior to LCP.\n if (renderTime < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries = metricEntries;\n report();\n }\n }\n };\n const types = ['largest-contentful-paint'];\n if (softNavsEnabled) {\n types.push('interaction-contentful-paint', 'soft-navigation');\n }\n const po = observe(types, handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n const finalizeEventTypes = ['keydown', 'click', 'visibilitychange'];\n const finalizeLCP = (event) => {\n if (event.isTrusted && !isFinalized) {\n // Wrap the listener in an idle callback so it's run in a separate\n // task to reduce potential INP impact.\n // https://github.com/GoogleChrome/web-vitals/issues/383\n const metricIdToFinalize = metric.id;\n whenIdleOrHidden(() => {\n if (!isFinalized) {\n if (!softNavsEnabled) {\n // Do some clean up since these won't be needed anymore.\n po.disconnect();\n for (const type of finalizeEventTypes) {\n removeEventListener(type, finalizeLCP, { capture: true });\n }\n }\n // As this is in a whenIdleOrHidden check, whether we're still\n // on the metric you meant to finalize, and ignore if we've moved\n // on in the meantime.\n if (metricIdToFinalize === metric.id) {\n isFinalized = true;\n report(true);\n }\n }\n });\n }\n };\n // Finalize the current LCP after input or visibilitychange.\n // Although the browser will automatically stop emitting entries in these\n // cases, we don't know it's finalized, so we track to allow early report.\n // Note: while scrolling is an input that stops LCP observation, it's\n // unreliable since it can be programmatically generated.\n // See: https://github.com/GoogleChrome/web-vitals/issues/75\n for (const type of finalizeEventTypes) {\n addEventListener(type, finalizeLCP, {\n capture: true,\n });\n }\n // Only report after a bfcache restore if the `PerformanceObserver`\n // successfully registered.\n onBFCacheRestore((event) => {\n initNewLCPMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n doubleRAF(() => {\n metric.value = performance.now() - event.timeStamp;\n isFinalized = true;\n report(true);\n });\n });\n }\n });\n};\n//# sourceMappingURL=onLCP.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getNavigationEntry } from '../lib/getNavigationEntry.js';\nimport { getSelector } from '../lib/getSelector.js';\nimport { initUnique } from '../lib/initUnique.js';\nimport { LCPEntryManager } from '../lib/LCPEntryManager.js';\nimport { checkSoftNavsEnabled } from '../lib/softNavs.js';\nimport { observe } from '../lib/observe.js';\nimport { onLCP as unattributedOnLCP } from '../onLCP.js';\n/**\n * Default resource buffer size to 50 to help attribute media LCPs to a URL and\n * for subpart attribution. This can be increased for pages that request a\n * large number of resources between the LCP resource and LCP candidates being\n * processed, particularly for soft navigations where the browser default first\n * 250 entries may not contain the LCP resource.\n */\nconst DEFAULT_RESOURCE_BUFFER_SIZE = 50;\nlet resourceBufferSizeLimit = DEFAULT_RESOURCE_BUFFER_SIZE;\nconst resourceBuffer = [];\nobserve(['resource'], (entries) => {\n for (const entry of entries) {\n resourceBuffer.push(entry);\n // Keep only the last resourceBufferSizeLimit entries.\n if (resourceBuffer.length > resourceBufferSizeLimit) {\n resourceBuffer.shift();\n }\n }\n});\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nexport const onLCP = (onReport, opts = {}) => {\n // Clone the opts object to ensure it's unique, so we can initialize a\n // single instance of the `LCPEntryManager` class that's shared only with\n // this function invocation and the `unattributedOnLCP()` invocation below\n // (which is passed the same `opts` object).\n opts = Object.assign({}, opts);\n if (opts.resourceBufferSize != undefined) {\n resourceBufferSizeLimit = opts.resourceBufferSize;\n }\n const lcpEntryManager = initUnique(opts, LCPEntryManager);\n const lcpTargetMap = new WeakMap();\n if (checkSoftNavsEnabled(opts)) {\n lcpEntryManager._softNavigationEntryMap = new Map();\n }\n lcpEntryManager._onBeforeProcessingEntry = (entry) => {\n const node = entry.element;\n if (node) {\n const customTarget = opts.generateTarget?.(node) ?? getSelector(node);\n lcpTargetMap.set(entry, customTarget);\n }\n else if (entry.id) {\n // Use the LargestContentfulPaint.id property when the element has been\n // removed from the DOM (and so node is null), but still has an ID.\n lcpTargetMap.set(entry, `#${entry.id}`);\n }\n };\n const attributeLCP = (metric) => {\n // Use a default object if no other attribution has been set.\n let attribution = {\n timeToFirstByte: 0,\n resourceLoadDelay: 0,\n resourceLoadDuration: 0,\n elementRenderDelay: metric.value,\n };\n if (metric.entries.length) {\n // The `metric.entries.length` check ensures there will be an entry.\n const lcpEntry = metric.entries.at(-1);\n // Get the Resource Timing entry checking the local buffer first\n // Use findLast to get the latest entry in case a resource is requested\n // multiple times (can particularly affect soft nav page views).\n const lcpResourceEntry = lcpEntry.url &&\n (resourceBuffer.findLast((e) => e.name === lcpEntry.url) ||\n performance\n .getEntriesByType('resource')\n .findLast((e) => e.name === lcpEntry.url));\n attribution.target = lcpTargetMap.get(lcpEntry);\n attribution.lcpEntry = lcpEntry;\n // Only attribute the URL and resource entry if they exist.\n if (lcpEntry.url) {\n attribution.url = lcpEntry.url;\n }\n if (lcpResourceEntry) {\n attribution.lcpResourceEntry = lcpResourceEntry;\n }\n // Get subparts from navigation entry. Do this last as occasionally\n // Safari seems to fail to find a navigation entry.\n let navigationEntry;\n let activationStart = 0;\n let responseStart = 0;\n if (metric.navigationType !== 'soft-navigation') {\n navigationEntry = getNavigationEntry();\n activationStart = navigationEntry?.activationStart ?? 0;\n responseStart = navigationEntry?.responseStart ?? 0;\n }\n else {\n // Set activationStart to the navigation start time\n activationStart = metric.navigationStartTime || 0;\n // Lookup the soft navigation entry. Do not use getEntriesByType since\n // that is limited to the first 50 navigation entries due to buffer\n // size.\n navigationEntry = lcpEntryManager._softNavigationEntryMap?.get(metric.navigationId);\n }\n if (navigationEntry) {\n const ttfb = Math.max(0, responseStart - activationStart);\n const lcpRequestStart = Math.max(ttfb, \n // Prefer `requestStart` (if TOA is set), otherwise use `startTime`.\n lcpResourceEntry\n ? (lcpResourceEntry.requestStart || lcpResourceEntry.startTime) -\n activationStart\n : 0);\n const lcpResponseEnd = Math.min(\n // Cap at LCP time (videos continue downloading after LCP for example)\n metric.value, Math.max(lcpRequestStart, lcpResourceEntry\n ? lcpResourceEntry.responseEnd - activationStart\n : 0));\n attribution = {\n ...attribution,\n timeToFirstByte: ttfb,\n resourceLoadDelay: lcpRequestStart - ttfb,\n resourceLoadDuration: lcpResponseEnd - lcpRequestStart,\n elementRenderDelay: metric.value - lcpResponseEnd,\n navigationEntry,\n };\n }\n }\n // Use `Object.assign()` to ensure the original metric object is returned.\n return Object.assign(metric, { attribution });\n };\n unattributedOnLCP((metric) => {\n onReport(attributeLCP(metric));\n }, opts);\n};\n//# sourceMappingURL=onLCP.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { whenActivated } from './lib/whenActivated.js';\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nexport const TTFBThresholds = [800, 1800];\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n if (document.prerendering) {\n whenActivated(() => whenReady(callback));\n }\n else if (document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n }\n else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback);\n }\n};\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport, opts = {}) => {\n const softNavsEnabled = checkSoftNavsEnabled(opts);\n let metric = initMetric('TTFB');\n let report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n whenReady(() => {\n const hardNavEntry = getNavigationEntry();\n if (hardNavEntry) {\n const responseStart = hardNavEntry.responseStart;\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(responseStart - getActivationStart(), 0);\n metric.entries = [hardNavEntry];\n report(true);\n // Only report TTFB after bfcache restores if a `navigation` entry\n // was reported for the initial load.\n onBFCacheRestore(() => {\n metric = initMetric('TTFB', 0, 'back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n report(true);\n });\n // Listen for soft-navigation entries and emit a dummy 0 TTFB entry\n if (softNavsEnabled) {\n const reportSoftNavTTFBs = (entries) => {\n entries.forEach((entry) => {\n if (entry.navigationId) {\n metric = initMetric('TTFB', 0, 'soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n metric.entries = [entry];\n report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n report(true);\n }\n });\n };\n observe(['soft-navigation'], reportSoftNavTTFBs, opts);\n }\n }\n });\n};\n//# sourceMappingURL=onTTFB.js.map","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { onTTFB as unattributedOnTTFB } from '../onTTFB.js';\nconst attributeTTFB = (metric) => {\n const navigationEntry = metric.entries[0];\n // Use a default object if no other attribution has been set.\n let attribution = {\n waitingDuration: 0,\n cacheDuration: 0,\n dnsDuration: 0,\n connectionDuration: 0,\n requestDuration: 0,\n // There should only be one instance per TTFB metric\n navigationEntry: navigationEntry,\n };\n if (metric.entries.length) {\n // If it's the hard nav, then can give attribution.\n // Otherwise it's 0 so the defaults are fine.\n if (navigationEntry instanceof PerformanceNavigationTiming) {\n const activationStart = navigationEntry.activationStart || 0;\n // Measure from workerStart or fetchStart so any service worker startup\n // time is included in cacheDuration (which also includes other sw time\n // anyway, that cannot be accurately split out cross-browser).\n const waitEnd = Math.max((navigationEntry.workerStart || navigationEntry.fetchStart || 0) -\n activationStart, 0);\n const dnsStart = Math.max(navigationEntry.domainLookupStart - activationStart, 0);\n const connectStart = Math.max(navigationEntry.connectStart - activationStart, 0);\n const connectEnd = Math.max(navigationEntry.connectEnd - activationStart, 0);\n attribution = {\n waitingDuration: waitEnd,\n cacheDuration: dnsStart - waitEnd,\n // dnsEnd usually equals connectStart but use connectStart over dnsEnd\n // for dnsDuration in case there ever is a gap.\n dnsDuration: connectStart - dnsStart,\n connectionDuration: connectEnd - connectStart,\n // There is often a gap between connectEnd and requestStart. Attribute\n // that to requestDuration so connectionDuration remains 0 for\n // service worker controlled requests were connectStart and connectEnd\n // are the same.\n requestDuration: metric.value - connectEnd,\n navigationEntry: navigationEntry,\n };\n }\n }\n // Use `Object.assign()` to ensure the original metric object is returned.\n const metricWithAttribution = Object.assign(metric, { attribution });\n return metricWithAttribution;\n};\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport, opts = {}) => {\n unattributedOnTTFB((metric) => {\n onReport(attributeTTFB(metric));\n }, opts);\n};\n//# sourceMappingURL=onTTFB.js.map"]}