@shware/analytics 3.6.3 → 3.7.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.
- package/README.md +50 -3
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/constants/storage.cjs +12 -37
- package/dist/constants/storage.cjs.map +1 -1
- package/dist/constants/storage.d.cts +10 -8
- package/dist/constants/storage.d.cts.map +1 -0
- package/dist/constants/storage.d.mts +13 -0
- package/dist/constants/storage.d.mts.map +1 -0
- package/dist/constants/storage.mjs +12 -13
- package/dist/constants/storage.mjs.map +1 -1
- package/dist/feedback/index.cjs +14 -40
- package/dist/feedback/index.cjs.map +1 -1
- package/dist/feedback/index.d.cts +4 -4
- package/dist/feedback/index.d.cts.map +1 -0
- package/dist/feedback/index.d.mts +6 -0
- package/dist/feedback/index.d.mts.map +1 -0
- package/dist/feedback/index.mjs +12 -14
- package/dist/feedback/index.mjs.map +1 -1
- package/dist/hooks/use-app-analytics.cjs +46 -65
- package/dist/hooks/use-app-analytics.cjs.map +1 -1
- package/dist/hooks/use-app-analytics.d.cts +3 -1
- package/dist/hooks/use-app-analytics.d.cts.map +1 -0
- package/dist/hooks/use-app-analytics.d.mts +5 -0
- package/dist/hooks/use-app-analytics.d.mts.map +1 -0
- package/dist/hooks/use-app-analytics.mjs +41 -36
- package/dist/hooks/use-app-analytics.mjs.map +1 -1
- package/dist/hooks/use-click-id-persistence.cjs +43 -65
- package/dist/hooks/use-click-id-persistence.cjs.map +1 -1
- package/dist/hooks/use-click-id-persistence.d.cts +3 -1
- package/dist/hooks/use-click-id-persistence.d.cts.map +1 -0
- package/dist/hooks/use-click-id-persistence.d.mts +5 -0
- package/dist/hooks/use-click-id-persistence.d.mts.map +1 -0
- package/dist/hooks/use-click-id-persistence.mjs +40 -38
- package/dist/hooks/use-click-id-persistence.mjs.map +1 -1
- package/dist/hooks/use-outbound-click-analytics.cjs +33 -55
- package/dist/hooks/use-outbound-click-analytics.cjs.map +1 -1
- package/dist/hooks/use-outbound-click-analytics.d.cts +3 -1
- package/dist/hooks/use-outbound-click-analytics.d.cts.map +1 -0
- package/dist/hooks/{use-outbound-click-analytics.d.ts → use-outbound-click-analytics.d.mts} +3 -1
- package/dist/hooks/use-outbound-click-analytics.d.mts.map +1 -0
- package/dist/hooks/use-outbound-click-analytics.mjs +31 -29
- package/dist/hooks/use-outbound-click-analytics.mjs.map +1 -1
- package/dist/hooks/use-previous.cjs +11 -35
- package/dist/hooks/use-previous.cjs.map +1 -1
- package/dist/hooks/use-previous.d.cts +3 -1
- package/dist/hooks/use-previous.d.cts.map +1 -0
- package/dist/hooks/use-previous.d.mts +5 -0
- package/dist/hooks/use-previous.d.mts.map +1 -0
- package/dist/hooks/use-previous.mjs +9 -9
- package/dist/hooks/use-previous.mjs.map +1 -1
- package/dist/hooks/use-track-impression.cjs +24 -51
- package/dist/hooks/use-track-impression.cjs.map +1 -1
- package/dist/hooks/use-track-impression.d.cts +5 -6
- package/dist/hooks/use-track-impression.d.cts.map +1 -0
- package/dist/hooks/use-track-impression.d.mts +6 -0
- package/dist/hooks/use-track-impression.d.mts.map +1 -0
- package/dist/hooks/use-track-impression.mjs +22 -25
- package/dist/hooks/use-track-impression.mjs.map +1 -1
- package/dist/hooks/use-web-analytics.cjs +98 -109
- package/dist/hooks/use-web-analytics.cjs.map +1 -1
- package/dist/hooks/use-web-analytics.d.cts +3 -1
- package/dist/hooks/use-web-analytics.d.cts.map +1 -0
- package/dist/hooks/{use-web-analytics.d.ts → use-web-analytics.d.mts} +3 -1
- package/dist/hooks/use-web-analytics.d.mts.map +1 -0
- package/dist/hooks/use-web-analytics.mjs +93 -80
- package/dist/hooks/use-web-analytics.mjs.map +1 -1
- package/dist/index.cjs +28 -74
- package/dist/index.d.cts +11 -13
- package/dist/index.d.mts +11 -0
- package/dist/index.mjs +3 -34
- package/dist/link/index.cjs +31 -58
- package/dist/link/index.cjs.map +1 -1
- package/dist/link/index.d.cts +7 -7
- package/dist/link/index.d.cts.map +1 -0
- package/dist/link/index.d.mts +11 -0
- package/dist/link/index.d.mts.map +1 -0
- package/dist/link/index.mjs +28 -31
- package/dist/link/index.mjs.map +1 -1
- package/dist/native/fbsdk.cjs +12 -34
- package/dist/native/fbsdk.cjs.map +1 -1
- package/dist/native/fbsdk.d.cts +4 -4
- package/dist/native/fbsdk.d.cts.map +1 -0
- package/dist/native/{fbsdk.d.ts → fbsdk.d.mts} +4 -4
- package/dist/native/fbsdk.d.mts.map +1 -0
- package/dist/native/fbsdk.mjs +10 -8
- package/dist/native/fbsdk.mjs.map +1 -1
- package/dist/native/fingerprint.cjs +41 -64
- package/dist/native/fingerprint.cjs.map +1 -1
- package/dist/native/fingerprint.d.cts +22 -20
- package/dist/native/fingerprint.d.cts.map +1 -0
- package/dist/native/fingerprint.d.mts +28 -0
- package/dist/native/fingerprint.d.mts.map +1 -0
- package/dist/native/fingerprint.mjs +36 -42
- package/dist/native/fingerprint.mjs.map +1 -1
- package/dist/native/firebase.cjs +12 -39
- package/dist/native/firebase.cjs.map +1 -1
- package/dist/native/firebase.d.cts +4 -4
- package/dist/native/firebase.d.cts.map +1 -0
- package/dist/native/firebase.d.mts +6 -0
- package/dist/native/firebase.d.mts.map +1 -0
- package/dist/native/firebase.mjs +10 -13
- package/dist/native/firebase.mjs.map +1 -1
- package/dist/native/index.cjs +11 -45
- package/dist/native/index.d.cts +4 -7
- package/dist/native/index.d.mts +4 -0
- package/dist/native/index.mjs +2 -12
- package/dist/native/posthog.cjs +5 -30
- package/dist/native/posthog.cjs.map +1 -1
- package/dist/native/posthog.d.cts +3 -1
- package/dist/native/posthog.d.cts.map +1 -0
- package/dist/native/posthog.d.mts +5 -0
- package/dist/native/posthog.d.mts.map +1 -0
- package/dist/native/posthog.mjs +5 -6
- package/dist/native/posthog.mjs.map +1 -1
- package/dist/native/setup.cjs +91 -129
- package/dist/native/setup.cjs.map +1 -1
- package/dist/native/setup.d.cts +6 -6
- package/dist/native/setup.d.cts.map +1 -0
- package/dist/native/{setup.d.ts → setup.d.mts} +6 -6
- package/dist/native/setup.d.mts.map +1 -0
- package/dist/native/setup.mjs +83 -105
- package/dist/native/setup.mjs.map +1 -1
- package/dist/next/index.cjs +72 -145
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.d.cts +18 -19
- package/dist/next/index.d.cts.map +1 -0
- package/dist/next/index.d.mts +21 -0
- package/dist/next/index.d.mts.map +1 -0
- package/dist/next/index.mjs +65 -107
- package/dist/next/index.mjs.map +1 -1
- package/dist/react-router/index.cjs +80 -144
- package/dist/react-router/index.cjs.map +1 -1
- package/dist/react-router/index.d.cts +18 -19
- package/dist/react-router/index.d.cts.map +1 -0
- package/dist/react-router/index.d.mts +21 -0
- package/dist/react-router/index.d.mts.map +1 -0
- package/dist/react-router/index.mjs +75 -115
- package/dist/react-router/index.mjs.map +1 -1
- package/dist/schema/index.cjs +188 -233
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +236 -235
- package/dist/schema/index.d.cts.map +1 -0
- package/dist/schema/index.d.mts +325 -0
- package/dist/schema/index.d.mts.map +1 -0
- package/dist/schema/index.mjs +178 -222
- package/dist/schema/index.mjs.map +1 -1
- package/dist/server/index.cjs +9 -40
- package/dist/server/index.d.cts +5 -9
- package/dist/server/index.d.mts +5 -0
- package/dist/server/index.mjs +5 -12
- package/dist/server/linkedin-conversions-api.cjs +66 -95
- package/dist/server/linkedin-conversions-api.cjs.map +1 -1
- package/dist/server/linkedin-conversions-api.d.cts +45 -45
- package/dist/server/linkedin-conversions-api.d.cts.map +1 -0
- package/dist/server/linkedin-conversions-api.d.mts +56 -0
- package/dist/server/linkedin-conversions-api.d.mts.map +1 -0
- package/dist/server/linkedin-conversions-api.mjs +63 -68
- package/dist/server/linkedin-conversions-api.mjs.map +1 -1
- package/dist/server/meta-conversions-api.cjs +157 -265
- package/dist/server/meta-conversions-api.cjs.map +1 -1
- package/dist/server/meta-conversions-api.d.cts +8 -9
- package/dist/server/meta-conversions-api.d.cts.map +1 -0
- package/dist/server/meta-conversions-api.d.mts +10 -0
- package/dist/server/meta-conversions-api.d.mts.map +1 -0
- package/dist/server/meta-conversions-api.mjs +151 -243
- package/dist/server/meta-conversions-api.mjs.map +1 -1
- package/dist/server/openai-conversions-api.cjs +69 -96
- package/dist/server/openai-conversions-api.cjs.map +1 -1
- package/dist/server/openai-conversions-api.d.cts +34 -34
- package/dist/server/openai-conversions-api.d.cts.map +1 -0
- package/dist/server/openai-conversions-api.d.mts +47 -0
- package/dist/server/openai-conversions-api.d.mts.map +1 -0
- package/dist/server/openai-conversions-api.mjs +65 -68
- package/dist/server/openai-conversions-api.mjs.map +1 -1
- package/dist/server/reddit-conversions-api.cjs +64 -91
- package/dist/server/reddit-conversions-api.cjs.map +1 -1
- package/dist/server/reddit-conversions-api.d.cts +61 -61
- package/dist/server/reddit-conversions-api.d.cts.map +1 -0
- package/dist/server/reddit-conversions-api.d.mts +75 -0
- package/dist/server/reddit-conversions-api.d.mts.map +1 -0
- package/dist/server/reddit-conversions-api.mjs +59 -62
- package/dist/server/reddit-conversions-api.mjs.map +1 -1
- package/dist/setup/index.cjs +34 -63
- package/dist/setup/index.cjs.map +1 -1
- package/dist/setup/index.d.cts +30 -30
- package/dist/setup/index.d.cts.map +1 -0
- package/dist/setup/index.d.mts +41 -0
- package/dist/setup/index.d.mts.map +1 -0
- package/dist/setup/index.mjs +31 -36
- package/dist/setup/index.mjs.map +1 -1
- package/dist/setup/session.cjs +70 -106
- package/dist/setup/session.cjs.map +1 -1
- package/dist/setup/session.d.cts +26 -24
- package/dist/setup/session.d.cts.map +1 -0
- package/dist/setup/session.d.mts +31 -0
- package/dist/setup/session.d.mts.map +1 -0
- package/dist/setup/session.mjs +68 -80
- package/dist/setup/session.mjs.map +1 -1
- package/dist/tanstack/index.cjs +86 -156
- package/dist/tanstack/index.cjs.map +1 -1
- package/dist/tanstack/index.d.cts +19 -20
- package/dist/tanstack/index.d.cts.map +1 -0
- package/dist/tanstack/index.d.mts +22 -0
- package/dist/tanstack/index.d.mts.map +1 -0
- package/dist/tanstack/index.mjs +81 -127
- package/dist/tanstack/index.mjs.map +1 -1
- package/dist/third-parties/google-analytics.cjs +18 -43
- package/dist/third-parties/google-analytics.cjs.map +1 -1
- package/dist/third-parties/google-analytics.d.cts +7 -7
- package/dist/third-parties/google-analytics.d.cts.map +1 -0
- package/dist/third-parties/google-analytics.d.mts +12 -0
- package/dist/third-parties/google-analytics.d.mts.map +1 -0
- package/dist/third-parties/google-analytics.mjs +16 -17
- package/dist/third-parties/google-analytics.mjs.map +1 -1
- package/dist/third-parties/ignored-events.cjs +35 -68
- package/dist/third-parties/ignored-events.cjs.map +1 -1
- package/dist/third-parties/ignored-events.d.cts +3 -1
- package/dist/third-parties/ignored-events.d.cts.map +1 -0
- package/dist/third-parties/ignored-events.d.mts +5 -0
- package/dist/third-parties/ignored-events.d.mts.map +1 -0
- package/dist/third-parties/ignored-events.mjs +34 -43
- package/dist/third-parties/ignored-events.mjs.map +1 -1
- package/dist/third-parties/index.cjs +16 -53
- package/dist/third-parties/index.d.cts +6 -12
- package/dist/third-parties/index.d.mts +6 -0
- package/dist/third-parties/index.mjs +1 -14
- package/dist/third-parties/linkedin-insight-tag.cjs +28 -50
- package/dist/third-parties/linkedin-insight-tag.cjs.map +1 -1
- package/dist/third-parties/linkedin-insight-tag.d.cts +8 -9
- package/dist/third-parties/linkedin-insight-tag.d.cts.map +1 -0
- package/dist/third-parties/{linkedin-insight-tag.d.ts → linkedin-insight-tag.d.mts} +8 -9
- package/dist/third-parties/linkedin-insight-tag.d.mts.map +1 -0
- package/dist/third-parties/linkedin-insight-tag.mjs +25 -23
- package/dist/third-parties/linkedin-insight-tag.mjs.map +1 -1
- package/dist/third-parties/meta-pixel.cjs +45 -66
- package/dist/third-parties/meta-pixel.cjs.map +1 -1
- package/dist/third-parties/meta-pixel.d.cts +7 -8
- package/dist/third-parties/meta-pixel.d.cts.map +1 -0
- package/dist/third-parties/meta-pixel.d.mts +12 -0
- package/dist/third-parties/meta-pixel.d.mts.map +1 -0
- package/dist/third-parties/meta-pixel.mjs +41 -38
- package/dist/third-parties/meta-pixel.mjs.map +1 -1
- package/dist/third-parties/openai-pixel.cjs +63 -68
- package/dist/third-parties/openai-pixel.cjs.map +1 -1
- package/dist/third-parties/openai-pixel.d.cts +7 -8
- package/dist/third-parties/openai-pixel.d.cts.map +1 -0
- package/dist/third-parties/{openai-pixel.d.ts → openai-pixel.d.mts} +7 -8
- package/dist/third-parties/openai-pixel.d.mts.map +1 -0
- package/dist/third-parties/openai-pixel.mjs +60 -41
- package/dist/third-parties/openai-pixel.mjs.map +1 -1
- package/dist/third-parties/posthog.cjs +23 -43
- package/dist/third-parties/posthog.cjs.map +1 -1
- package/dist/third-parties/posthog.d.cts +5 -5
- package/dist/third-parties/posthog.d.cts.map +1 -0
- package/dist/third-parties/{posthog.d.ts → posthog.d.mts} +5 -5
- package/dist/third-parties/posthog.d.mts.map +1 -0
- package/dist/third-parties/posthog.mjs +20 -16
- package/dist/third-parties/posthog.mjs.map +1 -1
- package/dist/third-parties/reddit-pixel.cjs +37 -58
- package/dist/third-parties/reddit-pixel.cjs.map +1 -1
- package/dist/third-parties/reddit-pixel.d.cts +7 -8
- package/dist/third-parties/reddit-pixel.d.cts.map +1 -0
- package/dist/third-parties/reddit-pixel.d.mts +12 -0
- package/dist/third-parties/reddit-pixel.d.mts.map +1 -0
- package/dist/third-parties/reddit-pixel.mjs +33 -30
- package/dist/third-parties/reddit-pixel.mjs.map +1 -1
- package/dist/track/fbq.cjs +179 -135
- package/dist/track/fbq.cjs.map +1 -1
- package/dist/track/fbq.d.cts +234 -233
- package/dist/track/fbq.d.cts.map +1 -0
- package/dist/track/fbq.d.mts +280 -0
- package/dist/track/fbq.d.mts.map +1 -0
- package/dist/track/fbq.mjs +176 -108
- package/dist/track/fbq.mjs.map +1 -1
- package/dist/track/gtag.cjs +63 -86
- package/dist/track/gtag.cjs.map +1 -1
- package/dist/track/gtag.d.cts +685 -685
- package/dist/track/gtag.d.cts.map +1 -0
- package/dist/track/gtag.d.mts +762 -0
- package/dist/track/gtag.d.mts.map +1 -0
- package/dist/track/gtag.mjs +62 -61
- package/dist/track/gtag.mjs.map +1 -1
- package/dist/track/index.cjs +111 -136
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.d.cts +8 -8
- package/dist/track/index.d.cts.map +1 -0
- package/dist/track/{index.d.ts → index.d.mts} +8 -8
- package/dist/track/index.d.mts.map +1 -0
- package/dist/track/index.mjs +105 -106
- package/dist/track/index.mjs.map +1 -1
- package/dist/track/lintrk.cjs +0 -19
- package/dist/track/lintrk.d.cts +12 -10
- package/dist/track/lintrk.d.cts.map +1 -0
- package/dist/track/lintrk.d.mts +14 -0
- package/dist/track/lintrk.d.mts.map +1 -0
- package/dist/track/lintrk.mjs +1 -1
- package/dist/track/oaiq.cjs +153 -146
- package/dist/track/oaiq.cjs.map +1 -1
- package/dist/track/oaiq.d.cts +65 -64
- package/dist/track/oaiq.d.cts.map +1 -0
- package/dist/track/oaiq.d.mts +112 -0
- package/dist/track/oaiq.d.mts.map +1 -0
- package/dist/track/oaiq.mjs +149 -118
- package/dist/track/oaiq.mjs.map +1 -1
- package/dist/track/rdt.cjs +66 -110
- package/dist/track/rdt.cjs.map +1 -1
- package/dist/track/rdt.d.cts +74 -73
- package/dist/track/rdt.d.cts.map +1 -0
- package/dist/track/rdt.d.mts +97 -0
- package/dist/track/rdt.d.mts.map +1 -0
- package/dist/track/rdt.mjs +63 -83
- package/dist/track/rdt.mjs.map +1 -1
- package/dist/track/types.cjs +0 -19
- package/dist/track/types.d.cts +140 -111
- package/dist/track/types.d.cts.map +1 -0
- package/dist/track/types.d.mts +171 -0
- package/dist/track/types.d.mts.map +1 -0
- package/dist/track/types.mjs +1 -1
- package/dist/utils/field.cjs +8 -32
- package/dist/utils/field.cjs.map +1 -1
- package/dist/utils/field.d.cts +3 -1
- package/dist/utils/field.d.cts.map +1 -0
- package/dist/utils/{field.d.ts → field.d.mts} +3 -1
- package/dist/utils/field.d.mts.map +1 -0
- package/dist/utils/field.mjs +7 -7
- package/dist/utils/field.mjs.map +1 -1
- package/dist/utils/stripe.cjs +25 -49
- package/dist/utils/stripe.cjs.map +1 -1
- package/dist/utils/stripe.d.cts +3 -1
- package/dist/utils/stripe.d.cts.map +1 -0
- package/dist/utils/{stripe.d.ts → stripe.d.mts} +3 -1
- package/dist/utils/stripe.d.mts.map +1 -0
- package/dist/utils/stripe.mjs +23 -23
- package/dist/utils/stripe.mjs.map +1 -1
- package/dist/visitor/index.cjs +54 -86
- package/dist/visitor/index.cjs.map +1 -1
- package/dist/visitor/index.d.cts +4 -5
- package/dist/visitor/index.d.cts.map +1 -0
- package/dist/visitor/{index.d.ts → index.d.mts} +4 -5
- package/dist/visitor/index.d.mts.map +1 -0
- package/dist/visitor/index.mjs +51 -59
- package/dist/visitor/index.mjs.map +1 -1
- package/dist/visitor/types.cjs +0 -19
- package/dist/visitor/types.d.cts +15 -14
- package/dist/visitor/types.d.cts.map +1 -0
- package/dist/visitor/types.d.mts +21 -0
- package/dist/visitor/types.d.mts.map +1 -0
- package/dist/visitor/types.mjs +1 -1
- package/dist/web/index.cjs +108 -148
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.d.cts +5 -6
- package/dist/web/index.d.cts.map +1 -0
- package/dist/web/index.d.mts +9 -0
- package/dist/web/index.d.mts.map +1 -0
- package/dist/web/index.mjs +101 -109
- package/dist/web/index.mjs.map +1 -1
- package/package.json +103 -50
- package/dist/constants/storage.d.ts +0 -11
- package/dist/feedback/index.d.ts +0 -6
- package/dist/hooks/use-app-analytics.d.ts +0 -3
- package/dist/hooks/use-click-id-persistence.d.ts +0 -3
- package/dist/hooks/use-previous.d.ts +0 -3
- package/dist/hooks/use-track-impression.d.ts +0 -7
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.mjs.map +0 -1
- package/dist/link/index.d.ts +0 -11
- package/dist/native/fingerprint.d.ts +0 -26
- package/dist/native/firebase.d.ts +0 -6
- package/dist/native/index.cjs.map +0 -1
- package/dist/native/index.d.ts +0 -7
- package/dist/native/index.mjs.map +0 -1
- package/dist/native/posthog.d.ts +0 -3
- package/dist/next/index.d.ts +0 -22
- package/dist/react-router/index.d.ts +0 -22
- package/dist/schema/index.d.ts +0 -324
- package/dist/server/index.cjs.map +0 -1
- package/dist/server/index.d.ts +0 -9
- package/dist/server/index.mjs.map +0 -1
- package/dist/server/linkedin-conversions-api.d.ts +0 -56
- package/dist/server/meta-conversions-api.d.ts +0 -11
- package/dist/server/openai-conversions-api.d.ts +0 -47
- package/dist/server/reddit-conversions-api.d.ts +0 -75
- package/dist/setup/index.d.ts +0 -41
- package/dist/setup/session.d.ts +0 -29
- package/dist/tanstack/index.d.ts +0 -23
- package/dist/third-parties/google-analytics.d.ts +0 -12
- package/dist/third-parties/ignored-events.d.ts +0 -3
- package/dist/third-parties/index.cjs.map +0 -1
- package/dist/third-parties/index.d.ts +0 -12
- package/dist/third-parties/index.mjs.map +0 -1
- package/dist/third-parties/meta-pixel.d.ts +0 -13
- package/dist/third-parties/reddit-pixel.d.ts +0 -13
- package/dist/track/fbq.d.ts +0 -279
- package/dist/track/gtag.d.ts +0 -762
- package/dist/track/lintrk.cjs.map +0 -1
- package/dist/track/lintrk.d.ts +0 -12
- package/dist/track/lintrk.mjs.map +0 -1
- package/dist/track/oaiq.d.ts +0 -111
- package/dist/track/rdt.d.ts +0 -96
- package/dist/track/types.cjs.map +0 -1
- package/dist/track/types.d.ts +0 -142
- package/dist/track/types.mjs.map +0 -1
- package/dist/visitor/types.cjs.map +0 -1
- package/dist/visitor/types.d.ts +0 -20
- package/dist/visitor/types.mjs.map +0 -1
- package/dist/web/index.d.ts +0 -10
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
// src/hooks/use-previous.ts
|
|
2
1
|
import { useEffect, useRef } from "react";
|
|
2
|
+
//#region src/hooks/use-previous.ts
|
|
3
3
|
function usePrevious(value) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const ref = useRef(void 0);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
ref.current = value;
|
|
7
|
+
});
|
|
8
|
+
return ref.current;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
//#endregion
|
|
11
|
+
export { usePrevious };
|
|
12
|
+
|
|
13
13
|
//# sourceMappingURL=use-previous.mjs.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":"
|
|
1
|
+
{"version":3,"file":"use-previous.mjs","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,MAAM,OAAsB,KAAA,CAAS;CAC3C,gBAAgB;EACd,IAAI,UAAU;CAChB,CAAC;CACD,OAAO,IAAI;AACb"}
|
|
@@ -1,54 +1,27 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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-track-impression.ts
|
|
21
|
-
var use_track_impression_exports = {};
|
|
22
|
-
__export(use_track_impression_exports, {
|
|
23
|
-
useTrackImpression: () => useTrackImpression
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(use_track_impression_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-track-impression.ts
|
|
28
5
|
function useTrackImpression(name, properties) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return () => observer.disconnect();
|
|
47
|
-
}, [ref.current]);
|
|
48
|
-
return ref;
|
|
6
|
+
const fired = (0, react.useRef)(false);
|
|
7
|
+
const ref = (0, react.useRef)(null);
|
|
8
|
+
const onTrack = (0, react.useEffectEvent)(() => {
|
|
9
|
+
if (fired.current) return;
|
|
10
|
+
require_track_index.track(name, properties);
|
|
11
|
+
fired.current = true;
|
|
12
|
+
});
|
|
13
|
+
(0, react.useEffect)(() => {
|
|
14
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
15
|
+
if (!entry.isIntersecting) return;
|
|
16
|
+
onTrack();
|
|
17
|
+
observer.disconnect();
|
|
18
|
+
}, { threshold: .5 });
|
|
19
|
+
if (ref.current) observer.observe(ref.current);
|
|
20
|
+
return () => observer.disconnect();
|
|
21
|
+
}, [ref.current]);
|
|
22
|
+
return ref;
|
|
49
23
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
});
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.useTrackImpression = useTrackImpression;
|
|
26
|
+
|
|
54
27
|
//# sourceMappingURL=use-track-impression.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-track-impression.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\nimport { track } from '../track/index';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nexport function useTrackImpression<\n R extends Element = HTMLDivElement,\n T extends EventName = EventName,\n>(name: TrackName<T>, properties?: TrackProperties<T>) {\n const fired = useRef(false);\n const ref = useRef<R | null>(null);\n\n const onTrack = useEffectEvent(() => {\n if (fired.current) return;\n track(name, properties);\n fired.current = true;\n });\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n onTrack();\n observer.disconnect();\n },\n { threshold: 0.5 }\n );\n\n if (ref.current) observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return ref;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-track-impression.cjs","names":[],"sources":["../../src/hooks/use-track-impression.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\nimport { track } from '../track/index';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nexport function useTrackImpression<\n R extends Element = HTMLDivElement,\n T extends EventName = EventName,\n>(name: TrackName<T>, properties?: TrackProperties<T>) {\n const fired = useRef(false);\n const ref = useRef<R | null>(null);\n\n const onTrack = useEffectEvent(() => {\n if (fired.current) return;\n track(name, properties);\n fired.current = true;\n });\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n onTrack();\n observer.disconnect();\n },\n { threshold: 0.5 }\n );\n\n if (ref.current) observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return ref;\n}\n"],"mappings":";;;;AAIA,SAAgB,mBAGd,MAAoB,YAAiC;CACrD,MAAM,SAAA,GAAA,MAAA,OAAA,CAAe,KAAK;CAC1B,MAAM,OAAA,GAAA,MAAA,OAAA,CAAuB,IAAI;CAEjC,MAAM,WAAA,GAAA,MAAA,eAAA,OAA+B;EACnC,IAAI,MAAM,SAAS;EACnB,oBAAA,MAAM,MAAM,UAAU;EACtB,MAAM,UAAU;CAClB,CAAC;CAED,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,WAAW,IAAI,sBAClB,CAAC,WAAW;GACX,IAAI,CAAC,MAAM,gBAAgB;GAC3B,QAAQ;GACR,SAAS,WAAW;EACtB,GACA,EAAE,WAAW,GAAI,CACnB;EAEA,IAAI,IAAI,SAAS,SAAS,QAAQ,IAAI,OAAO;EAC7C,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,IAAI,OAAO,CAAC;CAEhB,OAAO;AACT"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
declare function useTrackImpression<R extends Element = HTMLDivElement, T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>): react.RefObject<R | null>;
|
|
6
|
-
|
|
1
|
+
import { EventName, TrackName, TrackProperties } from "../track/types.cjs";
|
|
2
|
+
//#region src/hooks/use-track-impression.d.ts
|
|
3
|
+
declare function useTrackImpression<R extends Element = HTMLDivElement, T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>): import("react").RefObject<R | null>;
|
|
4
|
+
//#endregion
|
|
7
5
|
export { useTrackImpression };
|
|
6
|
+
//# sourceMappingURL=use-track-impression.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-track-impression.d.cts","names":[],"sources":["../../src/hooks/use-track-impression.ts"],"mappings":";;iBAIgB,mBACd,UAAU,UAAU,gBACpB,UAAU,YAAY,WACtB,MAAM,UAAU,IAAI,aAAa,gBAAgB,qBAAE,UAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EventName, TrackName, TrackProperties } from "../track/types.mjs";
|
|
2
|
+
//#region src/hooks/use-track-impression.d.ts
|
|
3
|
+
declare function useTrackImpression<R extends Element = HTMLDivElement, T extends EventName = EventName>(name: TrackName<T>, properties?: TrackProperties<T>): import("react").RefObject<R | null>;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { useTrackImpression };
|
|
6
|
+
//# sourceMappingURL=use-track-impression.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-track-impression.d.mts","names":[],"sources":["../../src/hooks/use-track-impression.ts"],"mappings":";;iBAIgB,mBACd,UAAU,UAAU,gBACpB,UAAU,YAAY,WACtB,MAAM,UAAU,IAAI,aAAa,gBAAgB,qBAAE,UAAA"}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
// src/hooks/use-track-impression.ts
|
|
2
|
-
import { useEffect, useEffectEvent, useRef } from "react";
|
|
3
1
|
import { track } from "../track/index.mjs";
|
|
2
|
+
import { useEffect, useEffectEvent, useRef } from "react";
|
|
3
|
+
//#region src/hooks/use-track-impression.ts
|
|
4
4
|
function useTrackImpression(name, properties) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return () => observer.disconnect();
|
|
23
|
-
}, [ref.current]);
|
|
24
|
-
return ref;
|
|
5
|
+
const fired = useRef(false);
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
const onTrack = useEffectEvent(() => {
|
|
8
|
+
if (fired.current) return;
|
|
9
|
+
track(name, properties);
|
|
10
|
+
fired.current = true;
|
|
11
|
+
});
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
14
|
+
if (!entry.isIntersecting) return;
|
|
15
|
+
onTrack();
|
|
16
|
+
observer.disconnect();
|
|
17
|
+
}, { threshold: .5 });
|
|
18
|
+
if (ref.current) observer.observe(ref.current);
|
|
19
|
+
return () => observer.disconnect();
|
|
20
|
+
}, [ref.current]);
|
|
21
|
+
return ref;
|
|
25
22
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
//#endregion
|
|
24
|
+
export { useTrackImpression };
|
|
25
|
+
|
|
29
26
|
//# sourceMappingURL=use-track-impression.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-track-impression.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\nimport { track } from '../track/index';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nexport function useTrackImpression<\n R extends Element = HTMLDivElement,\n T extends EventName = EventName,\n>(name: TrackName<T>, properties?: TrackProperties<T>) {\n const fired = useRef(false);\n const ref = useRef<R | null>(null);\n\n const onTrack = useEffectEvent(() => {\n if (fired.current) return;\n track(name, properties);\n fired.current = true;\n });\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n onTrack();\n observer.disconnect();\n },\n { threshold: 0.5 }\n );\n\n if (ref.current) observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return ref;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-track-impression.mjs","names":[],"sources":["../../src/hooks/use-track-impression.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\nimport { track } from '../track/index';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nexport function useTrackImpression<\n R extends Element = HTMLDivElement,\n T extends EventName = EventName,\n>(name: TrackName<T>, properties?: TrackProperties<T>) {\n const fired = useRef(false);\n const ref = useRef<R | null>(null);\n\n const onTrack = useEffectEvent(() => {\n if (fired.current) return;\n track(name, properties);\n fired.current = true;\n });\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n onTrack();\n observer.disconnect();\n },\n { threshold: 0.5 }\n );\n\n if (ref.current) observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return ref;\n}\n"],"mappings":";;;AAIA,SAAgB,mBAGd,MAAoB,YAAiC;CACrD,MAAM,QAAQ,OAAO,KAAK;CAC1B,MAAM,MAAM,OAAiB,IAAI;CAEjC,MAAM,UAAU,qBAAqB;EACnC,IAAI,MAAM,SAAS;EACnB,MAAM,MAAM,UAAU;EACtB,MAAM,UAAU;CAClB,CAAC;CAED,gBAAgB;EACd,MAAM,WAAW,IAAI,sBAClB,CAAC,WAAW;GACX,IAAI,CAAC,MAAM,gBAAgB;GAC3B,QAAQ;GACR,SAAS,WAAW;EACtB,GACA,EAAE,WAAW,GAAI,CACnB;EAEA,IAAI,IAAI,SAAS,SAAS,QAAQ,IAAI,OAAO;EAC7C,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,IAAI,OAAO,CAAC;CAEhB,OAAO;AACT"}
|
|
@@ -1,124 +1,113 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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-web-analytics.ts
|
|
21
|
-
var use_web_analytics_exports = {};
|
|
22
|
-
__export(use_web_analytics_exports, {
|
|
23
|
-
useWebAnalytics: () => useWebAnalytics
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(use_web_analytics_exports);
|
|
26
|
-
var import_utils = require("@shware/utils");
|
|
27
|
-
var import_react = require("react");
|
|
28
|
-
var import_storage = require("../constants/storage.cjs");
|
|
29
|
-
var import_setup = require("../setup/index.cjs");
|
|
30
|
-
var import_session = require("../setup/session.cjs");
|
|
31
|
-
var import_track = require("../track/index.cjs");
|
|
32
|
-
var import_use_previous = require("./use-previous.cjs");
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_setup_index = require("../setup/index.cjs");
|
|
3
|
+
const require_setup_session = require("../setup/session.cjs");
|
|
4
|
+
const require_constants_storage = require("../constants/storage.cjs");
|
|
5
|
+
const require_track_index = require("../track/index.cjs");
|
|
6
|
+
const require_hooks_use_previous = require("./use-previous.cjs");
|
|
7
|
+
let _shware_utils = require("@shware/utils");
|
|
8
|
+
let react = require("react");
|
|
9
|
+
//#region src/hooks/use-web-analytics.ts
|
|
33
10
|
function sendFirstVisit(pathname) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
11
|
+
if (require_setup_index.config.storage.getItem(require_constants_storage.keys.first_visit_time)) return;
|
|
12
|
+
require_track_index.track("first_visit", {
|
|
13
|
+
page_path: pathname,
|
|
14
|
+
page_title: document.title,
|
|
15
|
+
page_referrer: document.referrer,
|
|
16
|
+
page_location: window.location.href
|
|
17
|
+
});
|
|
18
|
+
require_setup_index.config.storage.setItem(require_constants_storage.keys.first_visit_time, (/* @__PURE__ */ new Date()).toISOString());
|
|
42
19
|
}
|
|
43
20
|
function sendUserEngagement(trigger) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
21
|
+
const engagement_time_msec = require_setup_session.session.flush();
|
|
22
|
+
if (engagement_time_msec <= 0) return;
|
|
23
|
+
require_track_index.sendBeacon("user_engagement", {
|
|
24
|
+
engagement_time_msec,
|
|
25
|
+
trigger
|
|
26
|
+
});
|
|
47
27
|
}
|
|
48
28
|
function sendScroll() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
29
|
+
const engagement_time_msec = require_setup_session.session.flush();
|
|
30
|
+
if (engagement_time_msec <= 0) return;
|
|
31
|
+
require_track_index.track("scroll", { engagement_time_msec });
|
|
52
32
|
}
|
|
53
33
|
function getScrollPercent() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
34
|
+
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
35
|
+
const windowHeight = window.innerHeight;
|
|
36
|
+
const docHeight = document.documentElement.scrollHeight;
|
|
37
|
+
if (docHeight === 0) return 0;
|
|
38
|
+
return (scrollTop + windowHeight) * 100 / docHeight;
|
|
59
39
|
}
|
|
60
40
|
function onPageHide() {
|
|
61
|
-
|
|
62
|
-
|
|
41
|
+
require_setup_session.session.pagehide();
|
|
42
|
+
sendUserEngagement("pagehide");
|
|
63
43
|
}
|
|
64
44
|
function onVisibilityChange() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
sendUserEngagement("visibilitychange");
|
|
68
|
-
}
|
|
45
|
+
require_setup_session.session.visibilitychange(document.visibilityState);
|
|
46
|
+
if (document.visibilityState === "hidden") sendUserEngagement("visibilitychange");
|
|
69
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* 1. send session_start event when the page is loaded
|
|
50
|
+
* 2. send scroll event when the user scrolls more than 90% of the page
|
|
51
|
+
* 3. send user_engagement event when the page is hidden or the user is not focused
|
|
52
|
+
*/
|
|
70
53
|
function useWebAnalytics(pathname) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
54
|
+
const prevPathname = require_hooks_use_previous.usePrevious(pathname);
|
|
55
|
+
const hasSendScroll = (0, react.useRef)(false);
|
|
56
|
+
(0, react.useEffect)(() => {
|
|
57
|
+
hasSendScroll.current = false;
|
|
58
|
+
}, [pathname]);
|
|
59
|
+
(0, react.useEffect)(() => {
|
|
60
|
+
sendFirstVisit(pathname);
|
|
61
|
+
require_track_index.track("session_start", void 0);
|
|
62
|
+
const onScroll = (0, _shware_utils.throttle)(() => {
|
|
63
|
+
require_setup_session.session.updateAccumulator();
|
|
64
|
+
if (hasSendScroll.current) return;
|
|
65
|
+
if (getScrollPercent() < 90) return;
|
|
66
|
+
hasSendScroll.current = true;
|
|
67
|
+
sendScroll();
|
|
68
|
+
}, 500);
|
|
69
|
+
const checkpointEvents = [
|
|
70
|
+
"mousedown",
|
|
71
|
+
"keydown",
|
|
72
|
+
"touchstart"
|
|
73
|
+
];
|
|
74
|
+
const checkpoint = (0, _shware_utils.throttle)(require_setup_session.session.updateAccumulator, 1e3);
|
|
75
|
+
window.addEventListener("focus", require_setup_session.session.focus);
|
|
76
|
+
window.addEventListener("blur", require_setup_session.session.blur);
|
|
77
|
+
window.addEventListener("scroll", onScroll, { passive: true });
|
|
78
|
+
window.addEventListener("pageshow", require_setup_session.session.pageshow);
|
|
79
|
+
window.addEventListener("pagehide", onPageHide);
|
|
80
|
+
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
81
|
+
checkpointEvents.forEach((e) => {
|
|
82
|
+
window.addEventListener(e, checkpoint, {
|
|
83
|
+
passive: true,
|
|
84
|
+
capture: true
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return () => {
|
|
88
|
+
window.removeEventListener("focus", require_setup_session.session.focus);
|
|
89
|
+
window.removeEventListener("blur", require_setup_session.session.blur);
|
|
90
|
+
window.removeEventListener("scroll", onScroll);
|
|
91
|
+
window.removeEventListener("pageshow", require_setup_session.session.pageshow);
|
|
92
|
+
window.removeEventListener("pagehide", onPageHide);
|
|
93
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
94
|
+
checkpointEvents.forEach((e) => window.removeEventListener(e, checkpoint));
|
|
95
|
+
onScroll.cancel();
|
|
96
|
+
checkpoint.cancel();
|
|
97
|
+
};
|
|
98
|
+
}, []);
|
|
99
|
+
(0, react.useEffect)(() => {
|
|
100
|
+
require_track_index.track("page_view", {
|
|
101
|
+
page_path: pathname,
|
|
102
|
+
page_title: document.title,
|
|
103
|
+
page_referrer: document.referrer,
|
|
104
|
+
page_location: window.location.href,
|
|
105
|
+
previous_page_path: prevPathname ?? void 0,
|
|
106
|
+
engagement_time_msec: prevPathname ? require_setup_session.session.flush() : void 0
|
|
107
|
+
});
|
|
108
|
+
}, [pathname]);
|
|
119
109
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
});
|
|
110
|
+
//#endregion
|
|
111
|
+
exports.useWebAnalytics = useWebAnalytics;
|
|
112
|
+
|
|
124
113
|
//# sourceMappingURL=use-web-analytics.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-web-analytics.ts"],"sourcesContent":["import { throttle } from '@shware/utils';\nimport { useEffect, useRef } from 'react';\nimport { keys } from '../constants/storage';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { sendBeacon, track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstVisit(pathname: string) {\n if (config.storage.getItem(keys.first_visit_time)) return;\n track('first_visit', {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n });\n config.storage.setItem(keys.first_visit_time, new Date().toISOString());\n}\n\nfunction sendUserEngagement(trigger: 'pagehide' | 'visibilitychange') {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n sendBeacon('user_engagement', { engagement_time_msec, trigger });\n}\n\nfunction sendScroll() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('scroll', { engagement_time_msec });\n}\n\nfunction getScrollPercent() {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const windowHeight = window.innerHeight;\n const docHeight = document.documentElement.scrollHeight;\n if (docHeight === 0) return 0;\n return ((scrollTop + windowHeight) * 100) / docHeight;\n}\n\nfunction onPageHide() {\n session.pagehide();\n sendUserEngagement('pagehide');\n}\n\nfunction onVisibilityChange() {\n session.visibilitychange(document.visibilityState);\n if (document.visibilityState === 'hidden') {\n sendUserEngagement('visibilitychange');\n }\n}\n\n/**\n * 1. send session_start event when the page is loaded\n * 2. send scroll event when the user scrolls more than 90% of the page\n * 3. send user_engagement event when the page is hidden or the user is not focused\n */\nexport function useWebAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n // reset state when the pathname changes and send scroll when the user navigates to a new page\n const hasSendScroll = useRef(false);\n useEffect(() => {\n hasSendScroll.current = false;\n }, [pathname]);\n\n useEffect(() => {\n sendFirstVisit(pathname);\n track('session_start', undefined);\n\n const onScroll = throttle(() => {\n session.updateAccumulator();\n if (hasSendScroll.current) return;\n // only send scroll when the user has scrolled more than 90% of the page\n if (getScrollPercent() < 90) return;\n hasSendScroll.current = true;\n sendScroll();\n }, 500);\n\n const checkpointEvents = ['mousedown', 'keydown', 'touchstart'];\n const checkpoint = throttle(session.updateAccumulator, 1000);\n\n window.addEventListener('focus', session.focus);\n window.addEventListener('blur', session.blur);\n window.addEventListener('scroll', onScroll, { passive: true });\n window.addEventListener('pageshow', session.pageshow);\n window.addEventListener('pagehide', onPageHide);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n // save checkpoint\n checkpointEvents.forEach((e) => {\n window.addEventListener(e, checkpoint, { passive: true, capture: true });\n });\n\n return () => {\n window.removeEventListener('focus', session.focus);\n window.removeEventListener('blur', session.blur);\n window.removeEventListener('scroll', onScroll);\n window.removeEventListener('pageshow', session.pageshow);\n window.removeEventListener('pagehide', onPageHide);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n checkpointEvents.forEach((e) => window.removeEventListener(e, checkpoint));\n\n onScroll.cancel();\n checkpoint.cancel();\n };\n }, []);\n\n useEffect(() => {\n track('page_view', {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n previous_page_path: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-web-analytics.cjs","names":["config","keys","session","usePrevious"],"sources":["../../src/hooks/use-web-analytics.ts"],"sourcesContent":["import { throttle } from '@shware/utils';\nimport { useEffect, useRef } from 'react';\nimport { keys } from '../constants/storage';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { sendBeacon, track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstVisit(pathname: string) {\n if (config.storage.getItem(keys.first_visit_time)) return;\n track('first_visit', {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n });\n config.storage.setItem(keys.first_visit_time, new Date().toISOString());\n}\n\nfunction sendUserEngagement(trigger: 'pagehide' | 'visibilitychange') {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n sendBeacon('user_engagement', { engagement_time_msec, trigger });\n}\n\nfunction sendScroll() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('scroll', { engagement_time_msec });\n}\n\nfunction getScrollPercent() {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const windowHeight = window.innerHeight;\n const docHeight = document.documentElement.scrollHeight;\n if (docHeight === 0) return 0;\n return ((scrollTop + windowHeight) * 100) / docHeight;\n}\n\nfunction onPageHide() {\n session.pagehide();\n sendUserEngagement('pagehide');\n}\n\nfunction onVisibilityChange() {\n session.visibilitychange(document.visibilityState);\n if (document.visibilityState === 'hidden') {\n sendUserEngagement('visibilitychange');\n }\n}\n\n/**\n * 1. send session_start event when the page is loaded\n * 2. send scroll event when the user scrolls more than 90% of the page\n * 3. send user_engagement event when the page is hidden or the user is not focused\n */\nexport function useWebAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n // reset state when the pathname changes and send scroll when the user navigates to a new page\n const hasSendScroll = useRef(false);\n useEffect(() => {\n hasSendScroll.current = false;\n }, [pathname]);\n\n useEffect(() => {\n sendFirstVisit(pathname);\n track('session_start', undefined);\n\n const onScroll = throttle(() => {\n session.updateAccumulator();\n if (hasSendScroll.current) return;\n // only send scroll when the user has scrolled more than 90% of the page\n if (getScrollPercent() < 90) return;\n hasSendScroll.current = true;\n sendScroll();\n }, 500);\n\n const checkpointEvents = ['mousedown', 'keydown', 'touchstart'];\n const checkpoint = throttle(session.updateAccumulator, 1000);\n\n window.addEventListener('focus', session.focus);\n window.addEventListener('blur', session.blur);\n window.addEventListener('scroll', onScroll, { passive: true });\n window.addEventListener('pageshow', session.pageshow);\n window.addEventListener('pagehide', onPageHide);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n // save checkpoint\n checkpointEvents.forEach((e) => {\n window.addEventListener(e, checkpoint, { passive: true, capture: true });\n });\n\n return () => {\n window.removeEventListener('focus', session.focus);\n window.removeEventListener('blur', session.blur);\n window.removeEventListener('scroll', onScroll);\n window.removeEventListener('pageshow', session.pageshow);\n window.removeEventListener('pagehide', onPageHide);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n checkpointEvents.forEach((e) => window.removeEventListener(e, checkpoint));\n\n onScroll.cancel();\n checkpoint.cancel();\n };\n }, []);\n\n useEffect(() => {\n track('page_view', {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n previous_page_path: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
//#region src/hooks/use-web-analytics.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* 1. send session_start event when the page is loaded
|
|
3
4
|
* 2. send scroll event when the user scrolls more than 90% of the page
|
|
4
5
|
* 3. send user_engagement event when the page is hidden or the user is not focused
|
|
5
6
|
*/
|
|
6
7
|
declare function useWebAnalytics(pathname: string): void;
|
|
7
|
-
|
|
8
|
+
//#endregion
|
|
8
9
|
export { useWebAnalytics };
|
|
10
|
+
//# sourceMappingURL=use-web-analytics.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-web-analytics.d.cts","names":[],"sources":["../../src/hooks/use-web-analytics.ts"],"mappings":";;;;;;iBAwDgB,gBAAgB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
//#region src/hooks/use-web-analytics.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* 1. send session_start event when the page is loaded
|
|
3
4
|
* 2. send scroll event when the user scrolls more than 90% of the page
|
|
4
5
|
* 3. send user_engagement event when the page is hidden or the user is not focused
|
|
5
6
|
*/
|
|
6
7
|
declare function useWebAnalytics(pathname: string): void;
|
|
7
|
-
|
|
8
|
+
//#endregion
|
|
8
9
|
export { useWebAnalytics };
|
|
10
|
+
//# sourceMappingURL=use-web-analytics.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-web-analytics.d.mts","names":[],"sources":["../../src/hooks/use-web-analytics.ts"],"mappings":";;;;;;iBAwDgB,gBAAgB"}
|