@shware/analytics 3.6.4 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/README.md +50 -3
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  3. package/dist/constants/storage.cjs +12 -37
  4. package/dist/constants/storage.cjs.map +1 -1
  5. package/dist/constants/storage.d.cts +10 -8
  6. package/dist/constants/storage.d.cts.map +1 -0
  7. package/dist/constants/storage.d.mts +13 -0
  8. package/dist/constants/storage.d.mts.map +1 -0
  9. package/dist/constants/storage.mjs +12 -13
  10. package/dist/constants/storage.mjs.map +1 -1
  11. package/dist/feedback/index.cjs +14 -40
  12. package/dist/feedback/index.cjs.map +1 -1
  13. package/dist/feedback/index.d.cts +4 -4
  14. package/dist/feedback/index.d.cts.map +1 -0
  15. package/dist/feedback/index.d.mts +6 -0
  16. package/dist/feedback/index.d.mts.map +1 -0
  17. package/dist/feedback/index.mjs +12 -14
  18. package/dist/feedback/index.mjs.map +1 -1
  19. package/dist/hooks/use-app-analytics.cjs +46 -65
  20. package/dist/hooks/use-app-analytics.cjs.map +1 -1
  21. package/dist/hooks/use-app-analytics.d.cts +3 -1
  22. package/dist/hooks/use-app-analytics.d.cts.map +1 -0
  23. package/dist/hooks/use-app-analytics.d.mts +5 -0
  24. package/dist/hooks/use-app-analytics.d.mts.map +1 -0
  25. package/dist/hooks/use-app-analytics.mjs +41 -36
  26. package/dist/hooks/use-app-analytics.mjs.map +1 -1
  27. package/dist/hooks/use-click-id-persistence.cjs +43 -65
  28. package/dist/hooks/use-click-id-persistence.cjs.map +1 -1
  29. package/dist/hooks/use-click-id-persistence.d.cts +3 -1
  30. package/dist/hooks/use-click-id-persistence.d.cts.map +1 -0
  31. package/dist/hooks/use-click-id-persistence.d.mts +5 -0
  32. package/dist/hooks/use-click-id-persistence.d.mts.map +1 -0
  33. package/dist/hooks/use-click-id-persistence.mjs +40 -38
  34. package/dist/hooks/use-click-id-persistence.mjs.map +1 -1
  35. package/dist/hooks/use-outbound-click-analytics.cjs +33 -55
  36. package/dist/hooks/use-outbound-click-analytics.cjs.map +1 -1
  37. package/dist/hooks/use-outbound-click-analytics.d.cts +3 -1
  38. package/dist/hooks/use-outbound-click-analytics.d.cts.map +1 -0
  39. package/dist/hooks/{use-outbound-click-analytics.d.ts → use-outbound-click-analytics.d.mts} +3 -1
  40. package/dist/hooks/use-outbound-click-analytics.d.mts.map +1 -0
  41. package/dist/hooks/use-outbound-click-analytics.mjs +31 -29
  42. package/dist/hooks/use-outbound-click-analytics.mjs.map +1 -1
  43. package/dist/hooks/use-previous.cjs +11 -35
  44. package/dist/hooks/use-previous.cjs.map +1 -1
  45. package/dist/hooks/use-previous.d.cts +3 -1
  46. package/dist/hooks/use-previous.d.cts.map +1 -0
  47. package/dist/hooks/use-previous.d.mts +5 -0
  48. package/dist/hooks/use-previous.d.mts.map +1 -0
  49. package/dist/hooks/use-previous.mjs +9 -9
  50. package/dist/hooks/use-previous.mjs.map +1 -1
  51. package/dist/hooks/use-track-impression.cjs +24 -51
  52. package/dist/hooks/use-track-impression.cjs.map +1 -1
  53. package/dist/hooks/use-track-impression.d.cts +5 -6
  54. package/dist/hooks/use-track-impression.d.cts.map +1 -0
  55. package/dist/hooks/use-track-impression.d.mts +6 -0
  56. package/dist/hooks/use-track-impression.d.mts.map +1 -0
  57. package/dist/hooks/use-track-impression.mjs +22 -25
  58. package/dist/hooks/use-track-impression.mjs.map +1 -1
  59. package/dist/hooks/use-web-analytics.cjs +98 -109
  60. package/dist/hooks/use-web-analytics.cjs.map +1 -1
  61. package/dist/hooks/use-web-analytics.d.cts +3 -1
  62. package/dist/hooks/use-web-analytics.d.cts.map +1 -0
  63. package/dist/hooks/{use-web-analytics.d.ts → use-web-analytics.d.mts} +3 -1
  64. package/dist/hooks/use-web-analytics.d.mts.map +1 -0
  65. package/dist/hooks/use-web-analytics.mjs +93 -80
  66. package/dist/hooks/use-web-analytics.mjs.map +1 -1
  67. package/dist/index.cjs +28 -74
  68. package/dist/index.d.cts +11 -13
  69. package/dist/index.d.mts +11 -0
  70. package/dist/index.mjs +3 -34
  71. package/dist/link/index.cjs +31 -58
  72. package/dist/link/index.cjs.map +1 -1
  73. package/dist/link/index.d.cts +7 -7
  74. package/dist/link/index.d.cts.map +1 -0
  75. package/dist/link/index.d.mts +11 -0
  76. package/dist/link/index.d.mts.map +1 -0
  77. package/dist/link/index.mjs +28 -31
  78. package/dist/link/index.mjs.map +1 -1
  79. package/dist/native/fbsdk.cjs +12 -33
  80. package/dist/native/fbsdk.cjs.map +1 -1
  81. package/dist/native/fbsdk.d.cts +4 -4
  82. package/dist/native/fbsdk.d.cts.map +1 -0
  83. package/dist/native/{fbsdk.d.ts → fbsdk.d.mts} +4 -4
  84. package/dist/native/fbsdk.d.mts.map +1 -0
  85. package/dist/native/fbsdk.mjs +10 -7
  86. package/dist/native/fbsdk.mjs.map +1 -1
  87. package/dist/native/fingerprint.cjs +41 -64
  88. package/dist/native/fingerprint.cjs.map +1 -1
  89. package/dist/native/fingerprint.d.cts +22 -20
  90. package/dist/native/fingerprint.d.cts.map +1 -0
  91. package/dist/native/fingerprint.d.mts +28 -0
  92. package/dist/native/fingerprint.d.mts.map +1 -0
  93. package/dist/native/fingerprint.mjs +36 -42
  94. package/dist/native/fingerprint.mjs.map +1 -1
  95. package/dist/native/firebase.cjs +12 -39
  96. package/dist/native/firebase.cjs.map +1 -1
  97. package/dist/native/firebase.d.cts +4 -4
  98. package/dist/native/firebase.d.cts.map +1 -0
  99. package/dist/native/firebase.d.mts +6 -0
  100. package/dist/native/firebase.d.mts.map +1 -0
  101. package/dist/native/firebase.mjs +10 -13
  102. package/dist/native/firebase.mjs.map +1 -1
  103. package/dist/native/index.cjs +11 -45
  104. package/dist/native/index.d.cts +4 -7
  105. package/dist/native/index.d.mts +4 -0
  106. package/dist/native/index.mjs +2 -12
  107. package/dist/native/posthog.cjs +5 -30
  108. package/dist/native/posthog.cjs.map +1 -1
  109. package/dist/native/posthog.d.cts +3 -1
  110. package/dist/native/posthog.d.cts.map +1 -0
  111. package/dist/native/posthog.d.mts +5 -0
  112. package/dist/native/posthog.d.mts.map +1 -0
  113. package/dist/native/posthog.mjs +5 -6
  114. package/dist/native/posthog.mjs.map +1 -1
  115. package/dist/native/setup.cjs +91 -129
  116. package/dist/native/setup.cjs.map +1 -1
  117. package/dist/native/setup.d.cts +6 -6
  118. package/dist/native/setup.d.cts.map +1 -0
  119. package/dist/native/{setup.d.ts → setup.d.mts} +6 -6
  120. package/dist/native/setup.d.mts.map +1 -0
  121. package/dist/native/setup.mjs +83 -105
  122. package/dist/native/setup.mjs.map +1 -1
  123. package/dist/next/index.cjs +72 -145
  124. package/dist/next/index.cjs.map +1 -1
  125. package/dist/next/index.d.cts +18 -19
  126. package/dist/next/index.d.cts.map +1 -0
  127. package/dist/next/index.d.mts +21 -0
  128. package/dist/next/index.d.mts.map +1 -0
  129. package/dist/next/index.mjs +65 -107
  130. package/dist/next/index.mjs.map +1 -1
  131. package/dist/react-router/index.cjs +80 -144
  132. package/dist/react-router/index.cjs.map +1 -1
  133. package/dist/react-router/index.d.cts +18 -19
  134. package/dist/react-router/index.d.cts.map +1 -0
  135. package/dist/react-router/index.d.mts +21 -0
  136. package/dist/react-router/index.d.mts.map +1 -0
  137. package/dist/react-router/index.mjs +75 -115
  138. package/dist/react-router/index.mjs.map +1 -1
  139. package/dist/schema/index.cjs +189 -233
  140. package/dist/schema/index.cjs.map +1 -1
  141. package/dist/schema/index.d.cts +308 -231
  142. package/dist/schema/index.d.cts.map +1 -0
  143. package/dist/schema/index.d.mts +401 -0
  144. package/dist/schema/index.d.mts.map +1 -0
  145. package/dist/schema/index.mjs +179 -222
  146. package/dist/schema/index.mjs.map +1 -1
  147. package/dist/server/index.cjs +9 -40
  148. package/dist/server/index.d.cts +5 -9
  149. package/dist/server/index.d.mts +5 -0
  150. package/dist/server/index.mjs +5 -12
  151. package/dist/server/linkedin-conversions-api.cjs +66 -95
  152. package/dist/server/linkedin-conversions-api.cjs.map +1 -1
  153. package/dist/server/linkedin-conversions-api.d.cts +45 -45
  154. package/dist/server/linkedin-conversions-api.d.cts.map +1 -0
  155. package/dist/server/linkedin-conversions-api.d.mts +56 -0
  156. package/dist/server/linkedin-conversions-api.d.mts.map +1 -0
  157. package/dist/server/linkedin-conversions-api.mjs +63 -68
  158. package/dist/server/linkedin-conversions-api.mjs.map +1 -1
  159. package/dist/server/meta-conversions-api.cjs +157 -265
  160. package/dist/server/meta-conversions-api.cjs.map +1 -1
  161. package/dist/server/meta-conversions-api.d.cts +8 -9
  162. package/dist/server/meta-conversions-api.d.cts.map +1 -0
  163. package/dist/server/meta-conversions-api.d.mts +10 -0
  164. package/dist/server/meta-conversions-api.d.mts.map +1 -0
  165. package/dist/server/meta-conversions-api.mjs +151 -243
  166. package/dist/server/meta-conversions-api.mjs.map +1 -1
  167. package/dist/server/openai-conversions-api.cjs +69 -96
  168. package/dist/server/openai-conversions-api.cjs.map +1 -1
  169. package/dist/server/openai-conversions-api.d.cts +34 -34
  170. package/dist/server/openai-conversions-api.d.cts.map +1 -0
  171. package/dist/server/openai-conversions-api.d.mts +47 -0
  172. package/dist/server/openai-conversions-api.d.mts.map +1 -0
  173. package/dist/server/openai-conversions-api.mjs +65 -68
  174. package/dist/server/openai-conversions-api.mjs.map +1 -1
  175. package/dist/server/reddit-conversions-api.cjs +64 -91
  176. package/dist/server/reddit-conversions-api.cjs.map +1 -1
  177. package/dist/server/reddit-conversions-api.d.cts +61 -61
  178. package/dist/server/reddit-conversions-api.d.cts.map +1 -0
  179. package/dist/server/reddit-conversions-api.d.mts +75 -0
  180. package/dist/server/reddit-conversions-api.d.mts.map +1 -0
  181. package/dist/server/reddit-conversions-api.mjs +59 -62
  182. package/dist/server/reddit-conversions-api.mjs.map +1 -1
  183. package/dist/setup/index.cjs +34 -63
  184. package/dist/setup/index.cjs.map +1 -1
  185. package/dist/setup/index.d.cts +30 -30
  186. package/dist/setup/index.d.cts.map +1 -0
  187. package/dist/setup/index.d.mts +41 -0
  188. package/dist/setup/index.d.mts.map +1 -0
  189. package/dist/setup/index.mjs +31 -36
  190. package/dist/setup/index.mjs.map +1 -1
  191. package/dist/setup/session.cjs +70 -106
  192. package/dist/setup/session.cjs.map +1 -1
  193. package/dist/setup/session.d.cts +26 -24
  194. package/dist/setup/session.d.cts.map +1 -0
  195. package/dist/setup/session.d.mts +31 -0
  196. package/dist/setup/session.d.mts.map +1 -0
  197. package/dist/setup/session.mjs +68 -80
  198. package/dist/setup/session.mjs.map +1 -1
  199. package/dist/tanstack/index.cjs +86 -156
  200. package/dist/tanstack/index.cjs.map +1 -1
  201. package/dist/tanstack/index.d.cts +19 -20
  202. package/dist/tanstack/index.d.cts.map +1 -0
  203. package/dist/tanstack/index.d.mts +22 -0
  204. package/dist/tanstack/index.d.mts.map +1 -0
  205. package/dist/tanstack/index.mjs +81 -127
  206. package/dist/tanstack/index.mjs.map +1 -1
  207. package/dist/third-parties/google-analytics.cjs +18 -43
  208. package/dist/third-parties/google-analytics.cjs.map +1 -1
  209. package/dist/third-parties/google-analytics.d.cts +7 -7
  210. package/dist/third-parties/google-analytics.d.cts.map +1 -0
  211. package/dist/third-parties/google-analytics.d.mts +12 -0
  212. package/dist/third-parties/google-analytics.d.mts.map +1 -0
  213. package/dist/third-parties/google-analytics.mjs +16 -17
  214. package/dist/third-parties/google-analytics.mjs.map +1 -1
  215. package/dist/third-parties/ignored-events.cjs +35 -68
  216. package/dist/third-parties/ignored-events.cjs.map +1 -1
  217. package/dist/third-parties/ignored-events.d.cts +3 -1
  218. package/dist/third-parties/ignored-events.d.cts.map +1 -0
  219. package/dist/third-parties/ignored-events.d.mts +5 -0
  220. package/dist/third-parties/ignored-events.d.mts.map +1 -0
  221. package/dist/third-parties/ignored-events.mjs +34 -43
  222. package/dist/third-parties/ignored-events.mjs.map +1 -1
  223. package/dist/third-parties/index.cjs +16 -53
  224. package/dist/third-parties/index.d.cts +6 -12
  225. package/dist/third-parties/index.d.mts +6 -0
  226. package/dist/third-parties/index.mjs +1 -14
  227. package/dist/third-parties/linkedin-insight-tag.cjs +28 -50
  228. package/dist/third-parties/linkedin-insight-tag.cjs.map +1 -1
  229. package/dist/third-parties/linkedin-insight-tag.d.cts +8 -9
  230. package/dist/third-parties/linkedin-insight-tag.d.cts.map +1 -0
  231. package/dist/third-parties/{linkedin-insight-tag.d.ts → linkedin-insight-tag.d.mts} +8 -9
  232. package/dist/third-parties/linkedin-insight-tag.d.mts.map +1 -0
  233. package/dist/third-parties/linkedin-insight-tag.mjs +25 -23
  234. package/dist/third-parties/linkedin-insight-tag.mjs.map +1 -1
  235. package/dist/third-parties/meta-pixel.cjs +45 -66
  236. package/dist/third-parties/meta-pixel.cjs.map +1 -1
  237. package/dist/third-parties/meta-pixel.d.cts +7 -8
  238. package/dist/third-parties/meta-pixel.d.cts.map +1 -0
  239. package/dist/third-parties/meta-pixel.d.mts +12 -0
  240. package/dist/third-parties/meta-pixel.d.mts.map +1 -0
  241. package/dist/third-parties/meta-pixel.mjs +41 -38
  242. package/dist/third-parties/meta-pixel.mjs.map +1 -1
  243. package/dist/third-parties/openai-pixel.cjs +63 -68
  244. package/dist/third-parties/openai-pixel.cjs.map +1 -1
  245. package/dist/third-parties/openai-pixel.d.cts +7 -8
  246. package/dist/third-parties/openai-pixel.d.cts.map +1 -0
  247. package/dist/third-parties/{openai-pixel.d.ts → openai-pixel.d.mts} +7 -8
  248. package/dist/third-parties/openai-pixel.d.mts.map +1 -0
  249. package/dist/third-parties/openai-pixel.mjs +60 -41
  250. package/dist/third-parties/openai-pixel.mjs.map +1 -1
  251. package/dist/third-parties/posthog.cjs +23 -43
  252. package/dist/third-parties/posthog.cjs.map +1 -1
  253. package/dist/third-parties/posthog.d.cts +5 -5
  254. package/dist/third-parties/posthog.d.cts.map +1 -0
  255. package/dist/third-parties/{posthog.d.ts → posthog.d.mts} +5 -5
  256. package/dist/third-parties/posthog.d.mts.map +1 -0
  257. package/dist/third-parties/posthog.mjs +20 -16
  258. package/dist/third-parties/posthog.mjs.map +1 -1
  259. package/dist/third-parties/reddit-pixel.cjs +37 -58
  260. package/dist/third-parties/reddit-pixel.cjs.map +1 -1
  261. package/dist/third-parties/reddit-pixel.d.cts +7 -8
  262. package/dist/third-parties/reddit-pixel.d.cts.map +1 -0
  263. package/dist/third-parties/reddit-pixel.d.mts +12 -0
  264. package/dist/third-parties/reddit-pixel.d.mts.map +1 -0
  265. package/dist/third-parties/reddit-pixel.mjs +33 -30
  266. package/dist/third-parties/reddit-pixel.mjs.map +1 -1
  267. package/dist/track/fbq.cjs +179 -135
  268. package/dist/track/fbq.cjs.map +1 -1
  269. package/dist/track/fbq.d.cts +234 -233
  270. package/dist/track/fbq.d.cts.map +1 -0
  271. package/dist/track/fbq.d.mts +280 -0
  272. package/dist/track/fbq.d.mts.map +1 -0
  273. package/dist/track/fbq.mjs +176 -108
  274. package/dist/track/fbq.mjs.map +1 -1
  275. package/dist/track/gtag.cjs +63 -86
  276. package/dist/track/gtag.cjs.map +1 -1
  277. package/dist/track/gtag.d.cts +682 -682
  278. package/dist/track/gtag.d.cts.map +1 -0
  279. package/dist/track/gtag.d.mts +762 -0
  280. package/dist/track/gtag.d.mts.map +1 -0
  281. package/dist/track/gtag.mjs +62 -61
  282. package/dist/track/gtag.mjs.map +1 -1
  283. package/dist/track/index.cjs +111 -136
  284. package/dist/track/index.cjs.map +1 -1
  285. package/dist/track/index.d.cts +8 -8
  286. package/dist/track/index.d.cts.map +1 -0
  287. package/dist/track/{index.d.ts → index.d.mts} +8 -8
  288. package/dist/track/index.d.mts.map +1 -0
  289. package/dist/track/index.mjs +105 -106
  290. package/dist/track/index.mjs.map +1 -1
  291. package/dist/track/lintrk.cjs +0 -19
  292. package/dist/track/lintrk.d.cts +12 -10
  293. package/dist/track/lintrk.d.cts.map +1 -0
  294. package/dist/track/lintrk.d.mts +14 -0
  295. package/dist/track/lintrk.d.mts.map +1 -0
  296. package/dist/track/lintrk.mjs +1 -1
  297. package/dist/track/oaiq.cjs +153 -146
  298. package/dist/track/oaiq.cjs.map +1 -1
  299. package/dist/track/oaiq.d.cts +65 -64
  300. package/dist/track/oaiq.d.cts.map +1 -0
  301. package/dist/track/oaiq.d.mts +112 -0
  302. package/dist/track/oaiq.d.mts.map +1 -0
  303. package/dist/track/oaiq.mjs +149 -118
  304. package/dist/track/oaiq.mjs.map +1 -1
  305. package/dist/track/rdt.cjs +66 -110
  306. package/dist/track/rdt.cjs.map +1 -1
  307. package/dist/track/rdt.d.cts +74 -73
  308. package/dist/track/rdt.d.cts.map +1 -0
  309. package/dist/track/rdt.d.mts +97 -0
  310. package/dist/track/rdt.d.mts.map +1 -0
  311. package/dist/track/rdt.mjs +63 -83
  312. package/dist/track/rdt.mjs.map +1 -1
  313. package/dist/track/types.cjs +0 -19
  314. package/dist/track/types.d.cts +140 -111
  315. package/dist/track/types.d.cts.map +1 -0
  316. package/dist/track/types.d.mts +171 -0
  317. package/dist/track/types.d.mts.map +1 -0
  318. package/dist/track/types.mjs +1 -1
  319. package/dist/utils/field.cjs +8 -32
  320. package/dist/utils/field.cjs.map +1 -1
  321. package/dist/utils/field.d.cts +3 -1
  322. package/dist/utils/field.d.cts.map +1 -0
  323. package/dist/utils/{field.d.ts → field.d.mts} +3 -1
  324. package/dist/utils/field.d.mts.map +1 -0
  325. package/dist/utils/field.mjs +7 -7
  326. package/dist/utils/field.mjs.map +1 -1
  327. package/dist/utils/stripe.cjs +25 -49
  328. package/dist/utils/stripe.cjs.map +1 -1
  329. package/dist/utils/stripe.d.cts +3 -1
  330. package/dist/utils/stripe.d.cts.map +1 -0
  331. package/dist/utils/{stripe.d.ts → stripe.d.mts} +3 -1
  332. package/dist/utils/stripe.d.mts.map +1 -0
  333. package/dist/utils/stripe.mjs +23 -23
  334. package/dist/utils/stripe.mjs.map +1 -1
  335. package/dist/visitor/index.cjs +60 -86
  336. package/dist/visitor/index.cjs.map +1 -1
  337. package/dist/visitor/index.d.cts +4 -5
  338. package/dist/visitor/index.d.cts.map +1 -0
  339. package/dist/visitor/{index.d.ts → index.d.mts} +4 -5
  340. package/dist/visitor/index.d.mts.map +1 -0
  341. package/dist/visitor/index.mjs +57 -59
  342. package/dist/visitor/index.mjs.map +1 -1
  343. package/dist/visitor/types.cjs +0 -19
  344. package/dist/visitor/types.d.cts +14 -14
  345. package/dist/visitor/types.d.cts.map +1 -0
  346. package/dist/visitor/types.d.mts +20 -0
  347. package/dist/visitor/types.d.mts.map +1 -0
  348. package/dist/visitor/types.mjs +1 -1
  349. package/dist/web/index.cjs +108 -148
  350. package/dist/web/index.cjs.map +1 -1
  351. package/dist/web/index.d.cts +5 -6
  352. package/dist/web/index.d.cts.map +1 -0
  353. package/dist/web/index.d.mts +9 -0
  354. package/dist/web/index.d.mts.map +1 -0
  355. package/dist/web/index.mjs +101 -109
  356. package/dist/web/index.mjs.map +1 -1
  357. package/package.json +102 -49
  358. package/dist/constants/storage.d.ts +0 -11
  359. package/dist/feedback/index.d.ts +0 -6
  360. package/dist/hooks/use-app-analytics.d.ts +0 -3
  361. package/dist/hooks/use-click-id-persistence.d.ts +0 -3
  362. package/dist/hooks/use-previous.d.ts +0 -3
  363. package/dist/hooks/use-track-impression.d.ts +0 -7
  364. package/dist/index.cjs.map +0 -1
  365. package/dist/index.d.ts +0 -13
  366. package/dist/index.mjs.map +0 -1
  367. package/dist/link/index.d.ts +0 -11
  368. package/dist/native/fingerprint.d.ts +0 -26
  369. package/dist/native/firebase.d.ts +0 -6
  370. package/dist/native/index.cjs.map +0 -1
  371. package/dist/native/index.d.ts +0 -7
  372. package/dist/native/index.mjs.map +0 -1
  373. package/dist/native/posthog.d.ts +0 -3
  374. package/dist/next/index.d.ts +0 -22
  375. package/dist/react-router/index.d.ts +0 -22
  376. package/dist/schema/index.d.ts +0 -324
  377. package/dist/server/index.cjs.map +0 -1
  378. package/dist/server/index.d.ts +0 -9
  379. package/dist/server/index.mjs.map +0 -1
  380. package/dist/server/linkedin-conversions-api.d.ts +0 -56
  381. package/dist/server/meta-conversions-api.d.ts +0 -11
  382. package/dist/server/openai-conversions-api.d.ts +0 -47
  383. package/dist/server/reddit-conversions-api.d.ts +0 -75
  384. package/dist/setup/index.d.ts +0 -41
  385. package/dist/setup/session.d.ts +0 -29
  386. package/dist/tanstack/index.d.ts +0 -23
  387. package/dist/third-parties/google-analytics.d.ts +0 -12
  388. package/dist/third-parties/ignored-events.d.ts +0 -3
  389. package/dist/third-parties/index.cjs.map +0 -1
  390. package/dist/third-parties/index.d.ts +0 -12
  391. package/dist/third-parties/index.mjs.map +0 -1
  392. package/dist/third-parties/meta-pixel.d.ts +0 -13
  393. package/dist/third-parties/reddit-pixel.d.ts +0 -13
  394. package/dist/track/fbq.d.ts +0 -279
  395. package/dist/track/gtag.d.ts +0 -762
  396. package/dist/track/lintrk.cjs.map +0 -1
  397. package/dist/track/lintrk.d.ts +0 -12
  398. package/dist/track/lintrk.mjs.map +0 -1
  399. package/dist/track/oaiq.d.ts +0 -111
  400. package/dist/track/rdt.d.ts +0 -96
  401. package/dist/track/types.cjs.map +0 -1
  402. package/dist/track/types.d.ts +0 -142
  403. package/dist/track/types.mjs.map +0 -1
  404. package/dist/visitor/types.cjs.map +0 -1
  405. package/dist/visitor/types.d.ts +0 -20
  406. package/dist/visitor/types.mjs.map +0 -1
  407. package/dist/web/index.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { keys } from '../constants/storage';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n if (config.storage.getItem(keys.first_open_time)) return;\n track('first_open', { screen_name: pathname, screen_class: pathname });\n config.storage.setItem(keys.first_open_time, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec, trigger: 'background' });\n}\n\nexport function useAppAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined);\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,cAAc,UAAkB;AACvC,MAAI,OAAO,QAAQ,QAAQ,KAAK,eAAe,EAAG;AAClD,QAAM,cAAc,EAAE,aAAa,UAAU,cAAc,SAAS,CAAC;AACrE,SAAO,QAAQ,QAAQ,KAAK,kBAAiB,oBAAI,KAAK,GAAE,YAAY,CAAC;AACvE;AAEA,SAAS,qBAAqB;AAC5B,QAAM,uBAAuB,QAAQ,MAAM;AAC3C,MAAI,wBAAwB,EAAG;AAC/B,QAAM,mBAAmB,EAAE,sBAAsB,SAAS,aAAa,CAAC;AAC1E;AAEO,SAAS,gBAAgB,UAAkB;AAChD,QAAM,eAAe,YAAY,QAAQ;AAEzC,YAAU,MAAM;AACd,kBAAc,QAAQ;AACtB,UAAM,iBAAiB,MAAS;AAEhC,UAAM,eAAe,SAAS,iBAAiB,UAAU,CAAC,UAAU;AAClE,cAAQ,kBAAkB;AAE1B,UAAI,UAAU,YAAY,CAAC,QAAQ,SAAS,GAAG;AAC7C,gBAAQ,aAAa,IAAI;AAAA,MAC3B,WAES,UAAU,YAAY,QAAQ,SAAS,GAAG;AACjD,gBAAQ,aAAa,KAAK;AAC1B,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,sBAAsB,eAAe,QAAQ,MAAM,IAAI;AAAA,IACzD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AACf;","names":[]}
1
+ {"version":3,"file":"use-app-analytics.mjs","names":[],"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { keys } from '../constants/storage';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n if (config.storage.getItem(keys.first_open_time)) return;\n track('first_open', { screen_name: pathname, screen_class: pathname });\n config.storage.setItem(keys.first_open_time, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec, trigger: 'background' });\n}\n\nexport function useAppAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined);\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";;;;;;;;AAQA,SAAS,cAAc,UAAkB;CACvC,IAAI,OAAO,QAAQ,QAAQ,KAAK,eAAe,GAAG;CAClD,MAAM,cAAc;EAAE,aAAa;EAAU,cAAc;CAAS,CAAC;CACrE,OAAO,QAAQ,QAAQ,KAAK,kCAAiB,IAAI,KAAK,EAAA,CAAE,YAAY,CAAC;AACvE;AAEA,SAAS,qBAAqB;CAC5B,MAAM,uBAAuB,QAAQ,MAAM;CAC3C,IAAI,wBAAwB,GAAG;CAC/B,MAAM,mBAAmB;EAAE;EAAsB,SAAS;CAAa,CAAC;AAC1E;AAEA,SAAgB,gBAAgB,UAAkB;CAChD,MAAM,eAAe,YAAY,QAAQ;CAEzC,gBAAgB;EACd,cAAc,QAAQ;EACtB,MAAM,iBAAiB,KAAA,CAAS;EAEhC,MAAM,eAAe,SAAS,iBAAiB,WAAW,UAAU;GAClE,QAAQ,kBAAkB;GAE1B,IAAI,UAAU,YAAY,CAAC,QAAQ,SAAS,GAC1C,QAAQ,aAAa,IAAI;QAGtB,IAAI,UAAU,YAAY,QAAQ,SAAS,GAAG;IACjD,QAAQ,aAAa,KAAK;IAC1B,mBAAmB;GACrB;EACF,CAAC;EAED,aAAa,aAAa,OAAO;CACnC,GAAG,CAAC,CAAC;CAGL,gBAAgB;EACd,MAAM,eAAe;GACnB,aAAa;GACb,cAAc;GACd,uBAAuB,gBAAgB,KAAA;GACvC,sBAAsB,eAAe,QAAQ,MAAM,IAAI,KAAA;EACzD,CAAC;CACH,GAAG,CAAC,QAAQ,CAAC;AACf"}
@@ -1,74 +1,52 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/hooks/use-click-id-persistence.ts
21
- var use_click_id_persistence_exports = {};
22
- __export(use_click_id_persistence_exports, {
23
- useClickIdPersistence: () => useClickIdPersistence
24
- });
25
- module.exports = __toCommonJS(use_click_id_persistence_exports);
26
- var import_utils = require("@shware/utils");
27
- var import_cookie = require("cookie");
28
- var import_react = require("react");
29
- var import_storage = require("../constants/storage.cjs");
30
- var TTL_MS = 90 * 24 * 60 * 60 * 1e3;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_constants_storage = require("../constants/storage.cjs");
3
+ let _shware_utils = require("@shware/utils");
4
+ let react = require("react");
5
+ let cookie = require("cookie");
6
+ //#region src/hooks/use-click-id-persistence.ts
7
+ const TTL_MS = 2160 * 60 * 60 * 1e3;
31
8
  function setCookie(name, value, ttlInMs) {
32
- const d = /* @__PURE__ */ new Date();
33
- d.setTime(d.getTime() + ttlInMs);
34
- const expires = `expires=${d.toUTCString()}`;
35
- document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
9
+ const d = /* @__PURE__ */ new Date();
10
+ d.setTime(d.getTime() + ttlInMs);
11
+ const expires = `expires=${d.toUTCString()}`;
12
+ document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
36
13
  }
14
+ /** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */
37
15
  function extractFbclid(fbc) {
38
- const parts = fbc.split(".");
39
- return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
16
+ const parts = fbc.split(".");
17
+ return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
40
18
  }
19
+ /**
20
+ * Persist a click-id value across cookie + localStorage.
21
+ * - cookie: readable by third-party SDKs (e.g. Meta Pixel)
22
+ * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps
23
+ *
24
+ * If only one store has the value, sync it to the other.
25
+ */
41
26
  function persist(cookieName, storageKey, cookieValue, newValue) {
42
- if (newValue) {
43
- setCookie(cookieName, newValue, TTL_MS);
44
- import_utils.expiringStorage.setItem(storageKey, newValue, TTL_MS);
45
- } else {
46
- const stored = import_utils.expiringStorage.getItem(storageKey);
47
- if (cookieValue && !stored) {
48
- import_utils.expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
49
- } else if (!cookieValue && stored) {
50
- setCookie(cookieName, stored, TTL_MS);
51
- }
52
- }
27
+ if (newValue) {
28
+ setCookie(cookieName, newValue, TTL_MS);
29
+ _shware_utils.expiringStorage.setItem(storageKey, newValue, TTL_MS);
30
+ } else {
31
+ const stored = _shware_utils.expiringStorage.getItem(storageKey);
32
+ if (cookieValue && !stored) _shware_utils.expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
33
+ else if (!cookieValue && stored) setCookie(cookieName, stored, TTL_MS);
34
+ }
53
35
  }
54
36
  function useClickIdPersistence() {
55
- (0, import_react.useEffect)(() => {
56
- const params = new URLSearchParams(window.location.search);
57
- const parsed = (0, import_cookie.parseCookie)(document.cookie);
58
- const fbclid = params.get("fbclid");
59
- const existingFbc = parsed._fbc ?? import_utils.expiringStorage.getItem(import_storage.keys.fbc);
60
- const fbclidChanged = fbclid && extractFbclid(existingFbc ?? "") !== fbclid;
61
- const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : void 0;
62
- persist("_fbc", import_storage.keys.fbc, parsed._fbc, newFbc);
63
- if (fbclid) {
64
- import_utils.expiringStorage.setItem(import_storage.keys.fbclid, fbclid, TTL_MS);
65
- }
66
- const rdt_cid = params.get("rdt_cid");
67
- persist("_rdt_cid", import_storage.keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
68
- }, []);
37
+ (0, react.useEffect)(() => {
38
+ const params = new URLSearchParams(window.location.search);
39
+ const parsed = (0, cookie.parseCookie)(document.cookie);
40
+ const fbclid = params.get("fbclid");
41
+ const existingFbc = parsed._fbc ?? _shware_utils.expiringStorage.getItem(require_constants_storage.keys.fbc);
42
+ const newFbc = fbclid && extractFbclid(existingFbc ?? "") !== fbclid ? `fb.1.${Date.now()}.${fbclid}` : void 0;
43
+ persist("_fbc", require_constants_storage.keys.fbc, parsed._fbc, newFbc);
44
+ if (fbclid) _shware_utils.expiringStorage.setItem(require_constants_storage.keys.fbclid, fbclid, TTL_MS);
45
+ const rdt_cid = params.get("rdt_cid");
46
+ persist("_rdt_cid", require_constants_storage.keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
47
+ }, []);
69
48
  }
70
- // Annotate the CommonJS export names for ESM import in node:
71
- 0 && (module.exports = {
72
- useClickIdPersistence
73
- });
49
+ //#endregion
50
+ exports.useClickIdPersistence = useClickIdPersistence;
51
+
74
52
  //# sourceMappingURL=use-click-id-persistence.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,oBAA4B;AAC5B,mBAA0B;AAC1B,qBAAqB;AAGrB,IAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;AAC/D,QAAM,IAAI,oBAAI,KAAK;AACnB,IAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC/B,QAAM,UAAU,WAAW,EAAE,YAAY,CAAC;AAC1C,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK,KAAK,OAAO;AAChD;AAGA,SAAS,cAAc,KAAiC;AAEtD,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,SAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACxD;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;AACA,MAAI,UAAU;AACZ,cAAU,YAAY,UAAU,MAAM;AACtC,iCAAgB,QAAQ,YAAY,UAAU,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,SAAS,6BAAgB,QAAgB,UAAU;AACzD,QAAI,eAAe,CAAC,QAAQ;AAE1B,mCAAgB,QAAQ,YAAY,aAAa,MAAM;AAAA,IACzD,WAAW,CAAC,eAAe,QAAQ;AAEjC,gBAAU,YAAY,QAAQ,MAAM;AAAA,IACtC;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB;AACtC,8BAAU,MAAM;AACd,UAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,UAAM,aAAS,2BAAY,SAAS,MAAM;AAG1C,UAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,UAAM,cAAc,OAAO,QAAQ,6BAAgB,QAAgB,oBAAK,GAAG;AAE3E,UAAM,gBAAgB,UAAU,cAAc,eAAe,EAAE,MAAM;AACrE,UAAM,SAAS,gBAAgB,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM,KAAK;AAEhE,YAAQ,QAAQ,oBAAK,KAAK,OAAO,MAAM,MAAM;AAI7C,QAAI,QAAQ;AACV,mCAAgB,QAAQ,oBAAK,QAAQ,QAAQ,MAAM;AAAA,IACrD;AAGA,UAAM,UAAU,OAAO,IAAI,SAAS;AACpC,YAAQ,YAAY,oBAAK,SAAS,OAAO,UAAU,WAAW,MAAS;AAAA,EACzE,GAAG,CAAC,CAAC;AACP;","names":[]}
1
+ {"version":3,"file":"use-click-id-persistence.cjs","names":["expiringStorage","keys"],"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";;;;;;AAMA,MAAM,SAAS,OAAU,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;CAC/D,MAAM,oBAAI,IAAI,KAAK;CACnB,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;CAC/B,MAAM,UAAU,WAAW,EAAE,YAAY;CACzC,SAAS,SAAS,GAAG,KAAK,GAAG,MAAM,IAAI,QAAQ;AACjD;;AAGA,SAAS,cAAc,KAAiC;CAEtD,MAAM,QAAQ,IAAI,MAAM,GAAG;CAC3B,OAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAA;AACxD;;;;;;;;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;CACA,IAAI,UAAU;EACZ,UAAU,YAAY,UAAU,MAAM;EACtC,cAAA,gBAAgB,QAAQ,YAAY,UAAU,MAAM;CACtD,OAAO;EACL,MAAM,SAASA,cAAAA,gBAAgB,QAAgB,UAAU;EACzD,IAAI,eAAe,CAAC,QAElB,cAAA,gBAAgB,QAAQ,YAAY,aAAa,MAAM;OAClD,IAAI,CAAC,eAAe,QAEzB,UAAU,YAAY,QAAQ,MAAM;CAExC;AACF;AAKA,SAAgB,wBAAwB;CACtC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;EACzD,MAAM,UAAA,GAAA,OAAA,YAAA,CAAqB,SAAS,MAAM;EAG1C,MAAM,SAAS,OAAO,IAAI,QAAQ;EAClC,MAAM,cAAc,OAAO,QAAQA,cAAAA,gBAAgB,QAAgBC,0BAAAA,KAAK,GAAG;EAG3E,MAAM,SADgB,UAAU,cAAc,eAAe,EAAE,MAAM,SACtC,QAAQ,KAAK,IAAI,EAAE,GAAG,WAAW,KAAA;EAEhE,QAAQ,QAAQA,0BAAAA,KAAK,KAAK,OAAO,MAAM,MAAM;EAI7C,IAAI,QACF,cAAA,gBAAgB,QAAQA,0BAAAA,KAAK,QAAQ,QAAQ,MAAM;EAIrD,MAAM,UAAU,OAAO,IAAI,SAAS;EACpC,QAAQ,YAAYA,0BAAAA,KAAK,SAAS,OAAO,UAAU,WAAW,KAAA,CAAS;CACzE,GAAG,CAAC,CAAC;AACP"}
@@ -1,3 +1,5 @@
1
+ //#region src/hooks/use-click-id-persistence.d.ts
1
2
  declare function useClickIdPersistence(): void;
2
-
3
+ //#endregion
3
4
  export { useClickIdPersistence };
5
+ //# sourceMappingURL=use-click-id-persistence.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-id-persistence.d.cts","names":[],"sources":["../../src/hooks/use-click-id-persistence.ts"],"mappings":";iBAqDgB"}
@@ -0,0 +1,5 @@
1
+ //#region src/hooks/use-click-id-persistence.d.ts
2
+ declare function useClickIdPersistence(): void;
3
+ //#endregion
4
+ export { useClickIdPersistence };
5
+ //# sourceMappingURL=use-click-id-persistence.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-id-persistence.d.mts","names":[],"sources":["../../src/hooks/use-click-id-persistence.ts"],"mappings":";iBAqDgB"}
@@ -1,49 +1,51 @@
1
- // src/hooks/use-click-id-persistence.ts
1
+ import { keys } from "../constants/storage.mjs";
2
2
  import { expiringStorage } from "@shware/utils";
3
- import { parseCookie } from "cookie";
4
3
  import { useEffect } from "react";
5
- import { keys } from "../constants/storage.mjs";
6
- var TTL_MS = 90 * 24 * 60 * 60 * 1e3;
4
+ import { parseCookie } from "cookie";
5
+ //#region src/hooks/use-click-id-persistence.ts
6
+ const TTL_MS = 2160 * 60 * 60 * 1e3;
7
7
  function setCookie(name, value, ttlInMs) {
8
- const d = /* @__PURE__ */ new Date();
9
- d.setTime(d.getTime() + ttlInMs);
10
- const expires = `expires=${d.toUTCString()}`;
11
- document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
8
+ const d = /* @__PURE__ */ new Date();
9
+ d.setTime(d.getTime() + ttlInMs);
10
+ const expires = `expires=${d.toUTCString()}`;
11
+ document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;
12
12
  }
13
+ /** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */
13
14
  function extractFbclid(fbc) {
14
- const parts = fbc.split(".");
15
- return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
15
+ const parts = fbc.split(".");
16
+ return parts.length >= 4 ? parts.slice(3).join(".") : void 0;
16
17
  }
18
+ /**
19
+ * Persist a click-id value across cookie + localStorage.
20
+ * - cookie: readable by third-party SDKs (e.g. Meta Pixel)
21
+ * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps
22
+ *
23
+ * If only one store has the value, sync it to the other.
24
+ */
17
25
  function persist(cookieName, storageKey, cookieValue, newValue) {
18
- if (newValue) {
19
- setCookie(cookieName, newValue, TTL_MS);
20
- expiringStorage.setItem(storageKey, newValue, TTL_MS);
21
- } else {
22
- const stored = expiringStorage.getItem(storageKey);
23
- if (cookieValue && !stored) {
24
- expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
25
- } else if (!cookieValue && stored) {
26
- setCookie(cookieName, stored, TTL_MS);
27
- }
28
- }
26
+ if (newValue) {
27
+ setCookie(cookieName, newValue, TTL_MS);
28
+ expiringStorage.setItem(storageKey, newValue, TTL_MS);
29
+ } else {
30
+ const stored = expiringStorage.getItem(storageKey);
31
+ if (cookieValue && !stored) expiringStorage.setItem(storageKey, cookieValue, TTL_MS);
32
+ else if (!cookieValue && stored) setCookie(cookieName, stored, TTL_MS);
33
+ }
29
34
  }
30
35
  function useClickIdPersistence() {
31
- useEffect(() => {
32
- const params = new URLSearchParams(window.location.search);
33
- const parsed = parseCookie(document.cookie);
34
- const fbclid = params.get("fbclid");
35
- const existingFbc = parsed._fbc ?? expiringStorage.getItem(keys.fbc);
36
- const fbclidChanged = fbclid && extractFbclid(existingFbc ?? "") !== fbclid;
37
- const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : void 0;
38
- persist("_fbc", keys.fbc, parsed._fbc, newFbc);
39
- if (fbclid) {
40
- expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);
41
- }
42
- const rdt_cid = params.get("rdt_cid");
43
- persist("_rdt_cid", keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
44
- }, []);
36
+ useEffect(() => {
37
+ const params = new URLSearchParams(window.location.search);
38
+ const parsed = parseCookie(document.cookie);
39
+ const fbclid = params.get("fbclid");
40
+ const existingFbc = parsed._fbc ?? expiringStorage.getItem(keys.fbc);
41
+ const newFbc = fbclid && extractFbclid(existingFbc ?? "") !== fbclid ? `fb.1.${Date.now()}.${fbclid}` : void 0;
42
+ persist("_fbc", keys.fbc, parsed._fbc, newFbc);
43
+ if (fbclid) expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);
44
+ const rdt_cid = params.get("rdt_cid");
45
+ persist("_rdt_cid", keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? void 0);
46
+ }, []);
45
47
  }
46
- export {
47
- useClickIdPersistence
48
- };
48
+ //#endregion
49
+ export { useClickIdPersistence };
50
+
49
51
  //# sourceMappingURL=use-click-id-persistence.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";AAAA,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AAGrB,IAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;AAC/D,QAAM,IAAI,oBAAI,KAAK;AACnB,IAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC/B,QAAM,UAAU,WAAW,EAAE,YAAY,CAAC;AAC1C,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK,KAAK,OAAO;AAChD;AAGA,SAAS,cAAc,KAAiC;AAEtD,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,SAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACxD;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;AACA,MAAI,UAAU;AACZ,cAAU,YAAY,UAAU,MAAM;AACtC,oBAAgB,QAAQ,YAAY,UAAU,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,SAAS,gBAAgB,QAAgB,UAAU;AACzD,QAAI,eAAe,CAAC,QAAQ;AAE1B,sBAAgB,QAAQ,YAAY,aAAa,MAAM;AAAA,IACzD,WAAW,CAAC,eAAe,QAAQ;AAEjC,gBAAU,YAAY,QAAQ,MAAM;AAAA,IACtC;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB;AACtC,YAAU,MAAM;AACd,UAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,UAAM,SAAS,YAAY,SAAS,MAAM;AAG1C,UAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,UAAM,cAAc,OAAO,QAAQ,gBAAgB,QAAgB,KAAK,GAAG;AAE3E,UAAM,gBAAgB,UAAU,cAAc,eAAe,EAAE,MAAM;AACrE,UAAM,SAAS,gBAAgB,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM,KAAK;AAEhE,YAAQ,QAAQ,KAAK,KAAK,OAAO,MAAM,MAAM;AAI7C,QAAI,QAAQ;AACV,sBAAgB,QAAQ,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACrD;AAGA,UAAM,UAAU,OAAO,IAAI,SAAS;AACpC,YAAQ,YAAY,KAAK,SAAS,OAAO,UAAU,WAAW,MAAS;AAAA,EACzE,GAAG,CAAC,CAAC;AACP;","names":[]}
1
+ {"version":3,"file":"use-click-id-persistence.mjs","names":[],"sources":["../../src/hooks/use-click-id-persistence.ts"],"sourcesContent":["import { expiringStorage } from '@shware/utils';\nimport { parseCookie } from 'cookie';\nimport { useEffect } from 'react';\nimport { keys } from '../constants/storage';\n\n// common practice ~90 days\nconst TTL_MS = 90 * 24 * 60 * 60 * 1000;\n\nfunction setCookie(name: string, value: string, ttlInMs: number) {\n const d = new Date();\n d.setTime(d.getTime() + ttlInMs);\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${name}=${value}; ${expires}; path=/; SameSite=Lax; Secure`;\n}\n\n/** Extract the raw fbclid portion from a formatted fbc string (fb.1.ts.FBCLID) */\nfunction extractFbclid(fbc: string): string | undefined {\n // fb.<subdomainIndex>.<creationTime>.<fbclid>\n const parts = fbc.split('.');\n return parts.length >= 4 ? parts.slice(3).join('.') : undefined;\n}\n\n/**\n * Persist a click-id value across cookie + localStorage.\n * - cookie: readable by third-party SDKs (e.g. Meta Pixel)\n * - localStorage (via expiringStorage): survives Safari ITP JS-cookie caps\n *\n * If only one store has the value, sync it to the other.\n */\nfunction persist(\n cookieName: string,\n storageKey: string,\n cookieValue: string | undefined,\n newValue: string | undefined\n) {\n if (newValue) {\n setCookie(cookieName, newValue, TTL_MS);\n expiringStorage.setItem(storageKey, newValue, TTL_MS);\n } else {\n const stored = expiringStorage.getItem<string>(storageKey);\n if (cookieValue && !stored) {\n // cookie → localStorage: back up before ITP wipes the cookie\n expiringStorage.setItem(storageKey, cookieValue, TTL_MS);\n } else if (!cookieValue && stored) {\n // localStorage → cookie: restore so third-party SDKs (Meta Pixel) can read it\n setCookie(cookieName, stored, TTL_MS);\n }\n }\n}\n\n// todo: do not set tracking cookies before the user has granted consent where required.\n// reference: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/#3--store-clickid\n// reference: https://watsspace.com/blog/meta-conversions-api-fbc-and-fbp-parameters/\nexport function useClickIdPersistence() {\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const parsed = parseCookie(document.cookie);\n\n // --- Meta fbc ---\n const fbclid = params.get('fbclid');\n const existingFbc = parsed._fbc ?? expiringStorage.getItem<string>(keys.fbc);\n // Only build a new fbc if the fbclid actually changed (preserve original creationTime otherwise).\n const fbclidChanged = fbclid && extractFbclid(existingFbc ?? '') !== fbclid;\n const newFbc = fbclidChanged ? `fb.1.${Date.now()}.${fbclid}` : undefined;\n\n persist('_fbc', keys.fbc, parsed._fbc, newFbc);\n\n // Also persist raw fbclid so the server-side Conversions API fallback\n // (fbc reconstruction from fbclid) works even after SPA navigation.\n if (fbclid) {\n expiringStorage.setItem(keys.fbclid, fbclid, TTL_MS);\n }\n\n // --- Reddit rdt_cid ---\n const rdt_cid = params.get('rdt_cid');\n persist('_rdt_cid', keys.rdt_cid, parsed._rdt_cid, rdt_cid ?? undefined);\n }, []);\n}\n"],"mappings":";;;;;AAMA,MAAM,SAAS,OAAU,KAAK,KAAK;AAEnC,SAAS,UAAU,MAAc,OAAe,SAAiB;CAC/D,MAAM,oBAAI,IAAI,KAAK;CACnB,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO;CAC/B,MAAM,UAAU,WAAW,EAAE,YAAY;CACzC,SAAS,SAAS,GAAG,KAAK,GAAG,MAAM,IAAI,QAAQ;AACjD;;AAGA,SAAS,cAAc,KAAiC;CAEtD,MAAM,QAAQ,IAAI,MAAM,GAAG;CAC3B,OAAO,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAA;AACxD;;;;;;;;AASA,SAAS,QACP,YACA,YACA,aACA,UACA;CACA,IAAI,UAAU;EACZ,UAAU,YAAY,UAAU,MAAM;EACtC,gBAAgB,QAAQ,YAAY,UAAU,MAAM;CACtD,OAAO;EACL,MAAM,SAAS,gBAAgB,QAAgB,UAAU;EACzD,IAAI,eAAe,CAAC,QAElB,gBAAgB,QAAQ,YAAY,aAAa,MAAM;OAClD,IAAI,CAAC,eAAe,QAEzB,UAAU,YAAY,QAAQ,MAAM;CAExC;AACF;AAKA,SAAgB,wBAAwB;CACtC,gBAAgB;EACd,MAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;EACzD,MAAM,SAAS,YAAY,SAAS,MAAM;EAG1C,MAAM,SAAS,OAAO,IAAI,QAAQ;EAClC,MAAM,cAAc,OAAO,QAAQ,gBAAgB,QAAgB,KAAK,GAAG;EAG3E,MAAM,SADgB,UAAU,cAAc,eAAe,EAAE,MAAM,SACtC,QAAQ,KAAK,IAAI,EAAE,GAAG,WAAW,KAAA;EAEhE,QAAQ,QAAQ,KAAK,KAAK,OAAO,MAAM,MAAM;EAI7C,IAAI,QACF,gBAAgB,QAAQ,KAAK,QAAQ,QAAQ,MAAM;EAIrD,MAAM,UAAU,OAAO,IAAI,SAAS;EACpC,QAAQ,YAAY,KAAK,SAAS,OAAO,UAAU,WAAW,KAAA,CAAS;CACzE,GAAG,CAAC,CAAC;AACP"}
@@ -1,58 +1,36 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/hooks/use-outbound-click-analytics.ts
21
- var use_outbound_click_analytics_exports = {};
22
- __export(use_outbound_click_analytics_exports, {
23
- useOutboundClickAnalytics: () => useOutboundClickAnalytics
24
- });
25
- module.exports = __toCommonJS(use_outbound_click_analytics_exports);
26
- var import_react = require("react");
27
- var import_track = require("../track/index.cjs");
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_track_index = require("../track/index.cjs");
3
+ let react = require("react");
4
+ //#region src/hooks/use-outbound-click-analytics.ts
5
+ /**
6
+ * Tracks outbound link clicks - when a user clicks a link that leads away
7
+ * from the current domain to another website.
8
+ */
28
9
  function useOutboundClickAnalytics() {
29
- (0, import_react.useEffect)(() => {
30
- const onClick = (event) => {
31
- var _a;
32
- const target = event.target;
33
- const anchor = target.closest("a");
34
- if (!anchor || !anchor.href) return;
35
- try {
36
- const url = new URL(anchor.href, window.location.origin);
37
- if (url.hostname !== window.location.hostname) {
38
- (0, import_track.track)("click", {
39
- outbound: true,
40
- link_id: anchor.id || "",
41
- link_url: anchor.href,
42
- link_text: ((_a = anchor.textContent) == null ? void 0 : _a.trim()) || "",
43
- link_domain: url.hostname,
44
- link_classes: anchor.className || ""
45
- });
46
- }
47
- } catch {
48
- }
49
- };
50
- document.addEventListener("click", onClick, { passive: true, capture: true });
51
- return () => document.removeEventListener("click", onClick, { capture: true });
52
- }, []);
10
+ (0, react.useEffect)(() => {
11
+ const onClick = (event) => {
12
+ const anchor = event.target.closest("a");
13
+ if (!anchor || !anchor.href) return;
14
+ try {
15
+ const url = new URL(anchor.href, window.location.origin);
16
+ if (url.hostname !== window.location.hostname) require_track_index.track("click", {
17
+ outbound: true,
18
+ link_id: anchor.id || "",
19
+ link_url: anchor.href,
20
+ link_text: anchor.textContent?.trim() || "",
21
+ link_domain: url.hostname,
22
+ link_classes: anchor.className || ""
23
+ });
24
+ } catch {}
25
+ };
26
+ document.addEventListener("click", onClick, {
27
+ passive: true,
28
+ capture: true
29
+ });
30
+ return () => document.removeEventListener("click", onClick, { capture: true });
31
+ }, []);
53
32
  }
54
- // Annotate the CommonJS export names for ESM import in node:
55
- 0 && (module.exports = {
56
- useOutboundClickAnalytics
57
- });
33
+ //#endregion
34
+ exports.useOutboundClickAnalytics = useOutboundClickAnalytics;
35
+
58
36
  //# sourceMappingURL=use-outbound-click-analytics.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAC1B,mBAAsB;AAMf,SAAS,4BAA4B;AAC1C,8BAAU,MAAM;AACd,UAAM,UAAU,CAAC,UAAsB;AAT3C;AAWM,YAAM,SAAS,MAAM;AACrB,YAAM,SAAS,OAAO,QAAQ,GAAG;AACjC,UAAI,CAAC,UAAU,CAAC,OAAO,KAAM;AAE7B,UAAI;AACF,cAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;AAGvD,YAAI,IAAI,aAAa,OAAO,SAAS,UAAU;AAC7C,kCAAM,SAAS;AAAA,YACb,UAAU;AAAA,YACV,SAAS,OAAO,MAAM;AAAA,YACtB,UAAU,OAAO;AAAA,YACjB,aAAW,YAAO,gBAAP,mBAAoB,WAAU;AAAA,YACzC,aAAa,IAAI;AAAA,YACjB,cAAc,OAAO,aAAa;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,aAAS,iBAAiB,SAAS,SAAS,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAC5E,WAAO,MAAM,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC/E,GAAG,CAAC,CAAC;AACP;","names":[]}
1
+ {"version":3,"file":"use-outbound-click-analytics.cjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM;GAE7B,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,oBAAA,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,aAAa,KAAK,KAAK;KACzC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
@@ -1,7 +1,9 @@
1
+ //#region src/hooks/use-outbound-click-analytics.d.ts
1
2
  /**
2
3
  * Tracks outbound link clicks - when a user clicks a link that leads away
3
4
  * from the current domain to another website.
4
5
  */
5
6
  declare function useOutboundClickAnalytics(): void;
6
-
7
+ //#endregion
7
8
  export { useOutboundClickAnalytics };
9
+ //# sourceMappingURL=use-outbound-click-analytics.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-outbound-click-analytics.d.cts","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"mappings":";;;;;iBAOgB"}
@@ -1,7 +1,9 @@
1
+ //#region src/hooks/use-outbound-click-analytics.d.ts
1
2
  /**
2
3
  * Tracks outbound link clicks - when a user clicks a link that leads away
3
4
  * from the current domain to another website.
4
5
  */
5
6
  declare function useOutboundClickAnalytics(): void;
6
-
7
+ //#endregion
7
8
  export { useOutboundClickAnalytics };
9
+ //# sourceMappingURL=use-outbound-click-analytics.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-outbound-click-analytics.d.mts","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"mappings":";;;;;iBAOgB"}
@@ -1,33 +1,35 @@
1
- // src/hooks/use-outbound-click-analytics.ts
2
- import { useEffect } from "react";
3
1
  import { track } from "../track/index.mjs";
2
+ import { useEffect } from "react";
3
+ //#region src/hooks/use-outbound-click-analytics.ts
4
+ /**
5
+ * Tracks outbound link clicks - when a user clicks a link that leads away
6
+ * from the current domain to another website.
7
+ */
4
8
  function useOutboundClickAnalytics() {
5
- useEffect(() => {
6
- const onClick = (event) => {
7
- var _a;
8
- const target = event.target;
9
- const anchor = target.closest("a");
10
- if (!anchor || !anchor.href) return;
11
- try {
12
- const url = new URL(anchor.href, window.location.origin);
13
- if (url.hostname !== window.location.hostname) {
14
- track("click", {
15
- outbound: true,
16
- link_id: anchor.id || "",
17
- link_url: anchor.href,
18
- link_text: ((_a = anchor.textContent) == null ? void 0 : _a.trim()) || "",
19
- link_domain: url.hostname,
20
- link_classes: anchor.className || ""
21
- });
22
- }
23
- } catch {
24
- }
25
- };
26
- document.addEventListener("click", onClick, { passive: true, capture: true });
27
- return () => document.removeEventListener("click", onClick, { capture: true });
28
- }, []);
9
+ useEffect(() => {
10
+ const onClick = (event) => {
11
+ const anchor = event.target.closest("a");
12
+ if (!anchor || !anchor.href) return;
13
+ try {
14
+ const url = new URL(anchor.href, window.location.origin);
15
+ if (url.hostname !== window.location.hostname) track("click", {
16
+ outbound: true,
17
+ link_id: anchor.id || "",
18
+ link_url: anchor.href,
19
+ link_text: anchor.textContent?.trim() || "",
20
+ link_domain: url.hostname,
21
+ link_classes: anchor.className || ""
22
+ });
23
+ } catch {}
24
+ };
25
+ document.addEventListener("click", onClick, {
26
+ passive: true,
27
+ capture: true
28
+ });
29
+ return () => document.removeEventListener("click", onClick, { capture: true });
30
+ }, []);
29
31
  }
30
- export {
31
- useOutboundClickAnalytics
32
- };
32
+ //#endregion
33
+ export { useOutboundClickAnalytics };
34
+
33
35
  //# sourceMappingURL=use-outbound-click-analytics.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAMf,SAAS,4BAA4B;AAC1C,YAAU,MAAM;AACd,UAAM,UAAU,CAAC,UAAsB;AAT3C;AAWM,YAAM,SAAS,MAAM;AACrB,YAAM,SAAS,OAAO,QAAQ,GAAG;AACjC,UAAI,CAAC,UAAU,CAAC,OAAO,KAAM;AAE7B,UAAI;AACF,cAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;AAGvD,YAAI,IAAI,aAAa,OAAO,SAAS,UAAU;AAC7C,gBAAM,SAAS;AAAA,YACb,UAAU;AAAA,YACV,SAAS,OAAO,MAAM;AAAA,YACtB,UAAU,OAAO;AAAA,YACjB,aAAW,YAAO,gBAAP,mBAAoB,WAAU;AAAA,YACzC,aAAa,IAAI;AAAA,YACjB,cAAc,OAAO,aAAa;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,aAAS,iBAAiB,SAAS,SAAS,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAC5E,WAAO,MAAM,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC/E,GAAG,CAAC,CAAC;AACP;","names":[]}
1
+ {"version":3,"file":"use-outbound-click-analytics.mjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,gBAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM;GAE7B,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,aAAa,KAAK,KAAK;KACzC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
@@ -1,38 +1,14 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/hooks/use-previous.ts
21
- var use_previous_exports = {};
22
- __export(use_previous_exports, {
23
- usePrevious: () => usePrevious
24
- });
25
- module.exports = __toCommonJS(use_previous_exports);
26
- var import_react = require("react");
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let react = require("react");
3
+ //#region src/hooks/use-previous.ts
27
4
  function usePrevious(value) {
28
- const ref = (0, import_react.useRef)(void 0);
29
- (0, import_react.useEffect)(() => {
30
- ref.current = value;
31
- });
32
- return ref.current;
5
+ const ref = (0, react.useRef)(void 0);
6
+ (0, react.useEffect)(() => {
7
+ ref.current = value;
8
+ });
9
+ return ref.current;
33
10
  }
34
- // Annotate the CommonJS export names for ESM import in node:
35
- 0 && (module.exports = {
36
- usePrevious
37
- });
11
+ //#endregion
12
+ exports.usePrevious = usePrevious;
13
+
38
14
  //# sourceMappingURL=use-previous.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkC;AAE3B,SAAS,YAAe,OAAyB;AACtD,QAAM,UAAM,qBAAsB,MAAS;AAC3C,8BAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AACD,SAAO,IAAI;AACb;","names":[]}
1
+ {"version":3,"file":"use-previous.cjs","names":[],"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n"],"mappings":";;;AAEA,SAAgB,YAAe,OAAyB;CACtD,MAAM,OAAA,GAAA,MAAA,OAAA,CAA4B,KAAA,CAAS;CAC3C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,UAAU;CAChB,CAAC;CACD,OAAO,IAAI;AACb"}
@@ -1,3 +1,5 @@
1
+ //#region src/hooks/use-previous.d.ts
1
2
  declare function usePrevious<T>(value: T): T | undefined;
2
-
3
+ //#endregion
3
4
  export { usePrevious };
5
+ //# sourceMappingURL=use-previous.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-previous.d.cts","names":[],"sources":["../../src/hooks/use-previous.ts"],"mappings":";iBAEgB,YAAY,GAAG,OAAO,IAAI"}
@@ -0,0 +1,5 @@
1
+ //#region src/hooks/use-previous.d.ts
2
+ declare function usePrevious<T>(value: T): T | undefined;
3
+ //#endregion
4
+ export { usePrevious };
5
+ //# sourceMappingURL=use-previous.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-previous.d.mts","names":[],"sources":["../../src/hooks/use-previous.ts"],"mappings":";iBAEgB,YAAY,GAAG,OAAO,IAAI"}