Skip to content

Conversation

@pauldambra
Copy link
Member

@pauldambra pauldambra commented Oct 28, 2025

#2504 had weird unrelated build errors, let's split it up


i know i need to reuse the visibility and click trackers that are hidden in PostHogFeature, so split them out

@vercel
Copy link

vercel bot commented Oct 28, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Updated (UTC)
posthog-js Ready Ready Preview Oct 29, 2025 2:03pm

@github-actions
Copy link
Contributor

github-actions bot commented Oct 28, 2025

📝 No Changeset Found

This PR doesn't include a changeset. A changeset (and the release label) is required to release a new version.

How to add a changeset

Run this command and follow the prompts:

pnpm changeset

Remember: Never use major version bumps for posthog-js as it's autoloaded by clients.

Copy link
Member Author

pauldambra commented Oct 28, 2025

@pauldambra pauldambra marked this pull request as ready for review October 28, 2025 18:06
@github-actions
Copy link
Contributor

github-actions bot commented Oct 28, 2025

@github-actions
Copy link
Contributor

github-actions bot commented Oct 28, 2025

Size Change: 0 B

Total Size: 4.86 MB

ℹ️ View Unchanged
Filename Size Change
packages/ai/dist/anthropic/index.cjs 16.7 kB 0 B
packages/ai/dist/anthropic/index.mjs 16.5 kB 0 B
packages/ai/dist/gemini/index.cjs 18.5 kB 0 B
packages/ai/dist/gemini/index.mjs 18.4 kB 0 B
packages/ai/dist/index.cjs 121 kB 0 B
packages/ai/dist/index.mjs 121 kB 0 B
packages/ai/dist/langchain/index.cjs 40.5 kB 0 B
packages/ai/dist/langchain/index.mjs 40 kB 0 B
packages/ai/dist/openai/index.cjs 30.8 kB 0 B
packages/ai/dist/openai/index.mjs 30.5 kB 0 B
packages/ai/dist/vercel/index.cjs 23 kB 0 B
packages/ai/dist/vercel/index.mjs 23 kB 0 B
packages/browser/dist/all-external-dependencies.js 223 kB 0 B
packages/browser/dist/array.full.es5.js 292 kB 0 B
packages/browser/dist/array.full.js 359 kB 0 B
packages/browser/dist/array.full.no-external.js 374 kB 0 B
packages/browser/dist/array.js 158 kB 0 B
packages/browser/dist/array.no-external.js 171 kB 0 B
packages/browser/dist/crisp-chat-integration.js 1.97 kB 0 B
packages/browser/dist/customizations.full.js 19 kB 0 B
packages/browser/dist/dead-clicks-autocapture.js 12.6 kB 0 B
packages/browser/dist/exception-autocapture.js 11.6 kB 0 B
packages/browser/dist/external-scripts-loader.js 2.81 kB 0 B
packages/browser/dist/intercom-integration.js 2.02 kB 0 B
packages/browser/dist/lazy-recorder.js 147 kB 0 B
packages/browser/dist/main.js 160 kB 0 B
packages/browser/dist/module.full.js 360 kB 0 B
packages/browser/dist/module.full.no-external.js 374 kB 0 B
packages/browser/dist/module.js 159 kB 0 B
packages/browser/dist/module.no-external.js 172 kB 0 B
packages/browser/dist/posthog-recorder.js 242 kB 0 B
packages/browser/dist/recorder-v2.js 113 kB 0 B
packages/browser/dist/recorder.js 113 kB 0 B
packages/browser/dist/surveys-preview.js 71.1 kB 0 B
packages/browser/dist/surveys.js 80.1 kB 0 B
packages/browser/dist/tracing-headers.js 1.84 kB 0 B
packages/browser/dist/web-vitals.js 10.4 kB 0 B
packages/browser/react/dist/esm/index.js 15.1 kB 0 B
packages/browser/react/dist/umd/index.js 17.8 kB 0 B
packages/core/dist/error-tracking/chunk-ids.js 2.54 kB 0 B
packages/core/dist/error-tracking/chunk-ids.mjs 1.31 kB 0 B
packages/core/dist/error-tracking/coercers/dom-exception-coercer.js 2.3 kB 0 B
packages/core/dist/error-tracking/coercers/dom-exception-coercer.mjs 993 B 0 B
packages/core/dist/error-tracking/coercers/error-coercer.js 2.02 kB 0 B
packages/core/dist/error-tracking/coercers/error-coercer.mjs 794 B 0 B
packages/core/dist/error-tracking/coercers/error-event-coercer.js 1.76 kB 0 B
packages/core/dist/error-tracking/coercers/error-event-coercer.mjs 513 B 0 B
packages/core/dist/error-tracking/coercers/event-coercer.js 1.82 kB 0 B
packages/core/dist/error-tracking/coercers/event-coercer.mjs 548 B 0 B
packages/core/dist/error-tracking/coercers/index.js 6.79 kB 0 B
packages/core/dist/error-tracking/coercers/index.mjs 326 B 0 B
packages/core/dist/error-tracking/coercers/object-coercer.js 3.46 kB 0 B
packages/core/dist/error-tracking/coercers/object-coercer.mjs 2.07 kB 0 B
packages/core/dist/error-tracking/coercers/primitive-coercer.js 1.67 kB 0 B
packages/core/dist/error-tracking/coercers/primitive-coercer.mjs 419 B 0 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.js 2.25 kB 0 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.mjs 904 B 0 B
packages/core/dist/error-tracking/coercers/string-coercer.js 2.01 kB 0 B
packages/core/dist/error-tracking/coercers/string-coercer.mjs 820 B 0 B
packages/core/dist/error-tracking/coercers/utils.js 2.06 kB 0 B
packages/core/dist/error-tracking/coercers/utils.mjs 716 B 0 B
packages/core/dist/error-tracking/error-properties-builder.js 5.64 kB 0 B
packages/core/dist/error-tracking/error-properties-builder.mjs 4.24 kB 0 B
packages/core/dist/error-tracking/index.js 4.11 kB 0 B
packages/core/dist/error-tracking/index.mjs 152 B 0 B
packages/core/dist/error-tracking/parsers/base.js 1.84 kB 0 B
packages/core/dist/error-tracking/parsers/base.mjs 472 B 0 B
packages/core/dist/error-tracking/parsers/chrome.js 2.7 kB 0 B
packages/core/dist/error-tracking/parsers/chrome.mjs 1.29 kB 0 B
packages/core/dist/error-tracking/parsers/gecko.js 2.45 kB 0 B
packages/core/dist/error-tracking/parsers/gecko.mjs 1.11 kB 0 B
packages/core/dist/error-tracking/parsers/index.js 4.36 kB 0 B
packages/core/dist/error-tracking/parsers/index.mjs 1.92 kB 0 B
packages/core/dist/error-tracking/parsers/node.js 3.95 kB 0 B
packages/core/dist/error-tracking/parsers/node.mjs 2.68 kB 0 B
packages/core/dist/error-tracking/parsers/opera.js 2.22 kB 0 B
packages/core/dist/error-tracking/parsers/opera.mjs 706 B 0 B
packages/core/dist/error-tracking/parsers/react-native.js 203 B 0 B
packages/core/dist/error-tracking/parsers/react-native.mjs 0 B 0 B 🆕
packages/core/dist/error-tracking/parsers/safari.js 1.88 kB 0 B
packages/core/dist/error-tracking/parsers/safari.mjs 574 B 0 B
packages/core/dist/error-tracking/parsers/winjs.js 1.7 kB 0 B
packages/core/dist/error-tracking/parsers/winjs.mjs 406 B 0 B
packages/core/dist/error-tracking/types.js 1.33 kB 0 B
packages/core/dist/error-tracking/types.mjs 131 B 0 B
packages/core/dist/error-tracking/utils.js 1.8 kB 0 B
packages/core/dist/error-tracking/utils.mjs 604 B 0 B
packages/core/dist/eventemitter.js 1.78 kB 0 B
packages/core/dist/eventemitter.mjs 571 B 0 B
packages/core/dist/featureFlagUtils.js 6.5 kB 0 B
packages/core/dist/featureFlagUtils.mjs 4.28 kB 0 B
packages/core/dist/gzip.js 1.88 kB 0 B
packages/core/dist/gzip.mjs 577 B 0 B
packages/core/dist/index.js 5.7 kB 0 B
packages/core/dist/index.mjs 485 B 0 B
packages/core/dist/logger.js 2.46 kB 0 B
packages/core/dist/logger.mjs 1.17 kB 0 B
packages/core/dist/posthog-core-stateless.js 29.7 kB 0 B
packages/core/dist/posthog-core-stateless.mjs 27.1 kB 0 B
packages/core/dist/posthog-core.js 28 kB 0 B
packages/core/dist/posthog-core.mjs 24 kB 0 B
packages/core/dist/process/index.js 2.27 kB 0 B
packages/core/dist/process/index.mjs 35 B 0 B
packages/core/dist/process/spawn-local.js 2.33 kB 0 B
packages/core/dist/process/spawn-local.mjs 1.01 kB 0 B
packages/core/dist/process/utils.js 3.11 kB 0 B
packages/core/dist/process/utils.mjs 1.15 kB 0 B
packages/core/dist/testing/index.js 2.93 kB 0 B
packages/core/dist/testing/index.mjs 79 B 0 B
packages/core/dist/testing/PostHogCoreTestClient.js 3.15 kB 0 B
packages/core/dist/testing/PostHogCoreTestClient.mjs 1.74 kB 0 B
packages/core/dist/testing/test-utils.js 2.77 kB 0 B
packages/core/dist/testing/test-utils.mjs 1.09 kB 0 B
packages/core/dist/types.js 8.2 kB 0 B
packages/core/dist/types.mjs 5.93 kB 0 B
packages/core/dist/utils/bucketed-rate-limiter.js 3 kB 0 B
packages/core/dist/utils/bucketed-rate-limiter.mjs 1.62 kB 0 B
packages/core/dist/utils/index.js 9.26 kB 0 B
packages/core/dist/utils/index.mjs 1.88 kB 0 B
packages/core/dist/utils/number-utils.js 2 kB 0 B
packages/core/dist/utils/number-utils.mjs 735 B 0 B
packages/core/dist/utils/promise-queue.js 2 kB 0 B
packages/core/dist/utils/promise-queue.mjs 768 B 0 B
packages/core/dist/utils/string-utils.js 1.91 kB 0 B
packages/core/dist/utils/string-utils.mjs 414 B 0 B
packages/core/dist/utils/type-utils.js 6.93 kB 0 B
packages/core/dist/utils/type-utils.mjs 3.03 kB 0 B
packages/core/dist/vendor/uuidv7.js 8.29 kB 0 B
packages/core/dist/vendor/uuidv7.mjs 6.72 kB 0 B
packages/nextjs-config/dist/config.js 5.51 kB 0 B
packages/nextjs-config/dist/config.mjs 4.03 kB 0 B
packages/nextjs-config/dist/index.js 2.24 kB 0 B
packages/nextjs-config/dist/index.mjs 30 B 0 B
packages/nextjs-config/dist/utils.js 3.94 kB 0 B
packages/nextjs-config/dist/utils.mjs 2.05 kB 0 B
packages/nextjs-config/dist/webpack-plugin.js 3.69 kB 0 B
packages/nextjs-config/dist/webpack-plugin.mjs 1.98 kB 0 B
packages/node/dist/client.js 22.7 kB 0 B
packages/node/dist/client.mjs 20.8 kB 0 B
packages/node/dist/entrypoints/index.edge.js 4.14 kB 0 B
packages/node/dist/entrypoints/index.edge.mjs 652 B 0 B
packages/node/dist/entrypoints/index.node.js 5.08 kB 0 B
packages/node/dist/entrypoints/index.node.mjs 901 B 0 B
packages/node/dist/exports.js 3.6 kB 0 B
packages/node/dist/exports.mjs 124 B 0 B
packages/node/dist/extensions/error-tracking/autocapture.js 2.65 kB 0 B
packages/node/dist/extensions/error-tracking/autocapture.mjs 1.23 kB 0 B
packages/node/dist/extensions/error-tracking/index.js 3.88 kB 0 B
packages/node/dist/extensions/error-tracking/index.mjs 2.61 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.js 8.81 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs 7.15 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/module.node.js 2.78 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/module.node.mjs 1.45 kB 0 B
packages/node/dist/extensions/express.js 2.17 kB 0 B
packages/node/dist/extensions/express.mjs 548 B 0 B
packages/node/dist/extensions/feature-flags/crypto.js 1.57 kB 0 B
packages/node/dist/extensions/feature-flags/crypto.mjs 395 B 0 B
packages/node/dist/extensions/feature-flags/feature-flags.js 27.7 kB 0 B
packages/node/dist/extensions/feature-flags/feature-flags.mjs 25.7 kB 0 B
packages/node/dist/extensions/sentry-integration.js 4.66 kB 0 B
packages/node/dist/extensions/sentry-integration.mjs 3.17 kB 0 B
packages/node/dist/storage-memory.js 1.52 kB 0 B
packages/node/dist/storage-memory.mjs 297 B 0 B
packages/node/dist/types.js 603 B 0 B
packages/node/dist/types.mjs 0 B 0 B 🆕
packages/node/dist/version.js 1.21 kB 0 B
packages/node/dist/version.mjs 46 B 0 B
packages/nuxt/dist/module.mjs 3.71 kB 0 B
packages/nuxt/dist/runtime/nitro-plugin.js 1.07 kB 0 B
packages/nuxt/dist/runtime/vue-plugin.js 652 B 0 B
packages/react-native/dist/autocapture.js 4.68 kB 0 B
packages/react-native/dist/error-tracking/index.js 6.65 kB 0 B
packages/react-native/dist/error-tracking/utils.js 2.58 kB 0 B
packages/react-native/dist/frameworks/wix-navigation.js 1.3 kB 0 B
packages/react-native/dist/hooks/useFeatureFlag.js 1.49 kB 0 B
packages/react-native/dist/hooks/useFeatureFlags.js 821 B 0 B
packages/react-native/dist/hooks/useNavigationTracker.js 2.46 kB 0 B
packages/react-native/dist/hooks/usePostHog.js 467 B 0 B
packages/react-native/dist/index.js 3.12 kB 0 B
packages/react-native/dist/native-deps.js 13.9 kB 0 B
packages/react-native/dist/optional/OptionalAsyncStorage.js 299 B 0 B
packages/react-native/dist/optional/OptionalExpoApplication.js 377 B 0 B
packages/react-native/dist/optional/OptionalExpoDevice.js 347 B 0 B
packages/react-native/dist/optional/OptionalExpoFileSystem.js 386 B 0 B
packages/react-native/dist/optional/OptionalExpoFileSystemLegacy.js 423 B 0 B
packages/react-native/dist/optional/OptionalExpoLocalization.js 383 B 0 B
packages/react-native/dist/optional/OptionalReactNativeDeviceInfo.js 415 B 0 B
packages/react-native/dist/optional/OptionalReactNativeLocalize.js 303 B 0 B
packages/react-native/dist/optional/OptionalReactNativeNavigation.js 415 B 0 B
packages/react-native/dist/optional/OptionalReactNativeNavigationWix.js 443 B 0 B
packages/react-native/dist/optional/OptionalReactNativeSafeArea.js 644 B 0 B
packages/react-native/dist/optional/OptionalSessionReplay.js 455 B 0 B
packages/react-native/dist/posthog-rn.js 34.4 kB 0 B
packages/react-native/dist/PostHogContext.js 329 B 0 B
packages/react-native/dist/PostHogProvider.js 4.77 kB 0 B
packages/react-native/dist/storage.js 3.39 kB 0 B
packages/react-native/dist/surveys/components/BottomSection.js 1.34 kB 0 B
packages/react-native/dist/surveys/components/Cancel.js 909 B 0 B
packages/react-native/dist/surveys/components/ConfirmationMessage.js 1.58 kB 0 B
packages/react-native/dist/surveys/components/QuestionHeader.js 1.11 kB 0 B
packages/react-native/dist/surveys/components/QuestionTypes.js 10.1 kB 0 B
packages/react-native/dist/surveys/components/SurveyModal.js 3.86 kB 0 B
packages/react-native/dist/surveys/components/Surveys.js 7.18 kB 0 B
packages/react-native/dist/surveys/getActiveMatchingSurveys.js 3.69 kB 0 B
packages/react-native/dist/surveys/icons.js 7.76 kB 0 B
packages/react-native/dist/surveys/index.js 600 B 0 B
packages/react-native/dist/surveys/PostHogSurveyProvider.js 5.66 kB 0 B
packages/react-native/dist/surveys/surveys-utils.js 9.31 kB 0 B
packages/react-native/dist/surveys/useActivatedSurveys.js 3.38 kB 0 B
packages/react-native/dist/surveys/useSurveyStorage.js 2.16 kB 0 B
packages/react-native/dist/types.js 70 B 0 B
packages/react-native/dist/utils.js 539 B 0 B
packages/react-native/dist/version.js 130 B 0 B
packages/react/dist/esm/index.js 15.1 kB 0 B
packages/react/dist/umd/index.js 17.8 kB 0 B
packages/web/dist/index.cjs 13.8 kB 0 B
packages/web/dist/index.mjs 13.7 kB 0 B
tooling/rollup-utils/dist/index.js 1.17 kB 0 B

compressed-size-action

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +1 to +48
import React, { MouseEventHandler, useEffect, useMemo, useRef } from 'react'
import { isNull } from '../../utils/type-utils'

/**
* VisibilityAndClickTracker is an internal component,
* its API might change without warning and without being signalled as a breaking change
*
*/
export function VisibilityAndClickTracker({
children,
onIntersect,
onClick,
trackView,
options,
...props
}: {
children: React.ReactNode
onIntersect: (entry: IntersectionObserverEntry) => void
onClick?: MouseEventHandler<HTMLDivElement>
trackView: boolean
options?: IntersectionObserverInit
}): JSX.Element {
const ref = useRef<HTMLDivElement>(null)

const observerOptions = useMemo(
() => ({
threshold: 0.1,
...options,
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[options?.threshold, options?.root, options?.rootMargin]
)

useEffect(() => {
if (isNull(ref.current) || !trackView) return

// eslint-disable-next-line compat/compat
const observer = new IntersectionObserver(([entry]) => onIntersect(entry), observerOptions)
observer.observe(ref.current)
return () => observer.disconnect()
}, [observerOptions, trackView, onIntersect])

return (
<div ref={ref} {...props} onClick={onClick}>
{children}
</div>
)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: This file is a duplicate of VisibilityAndClickTracker.tsx (singular). Both files contain identical code. One should be deleted.

Based on PostHogFeature.tsx, there should be TWO different components:

  • VisibilityAndClickTracker (inner/simpler component)
  • VisibilityAndClickTrackers (outer wrapper with flag tracking)

Currently both files export the same simpler component.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/react/src/components/internal/VisibilityAndClickTrackers.tsx
Line: 1:48

Comment:
**logic:** This file is a duplicate of `VisibilityAndClickTracker.tsx` (singular). Both files contain identical code. One should be deleted.

Based on `PostHogFeature.tsx`, there should be TWO different components:
- `VisibilityAndClickTracker` (inner/simpler component)  
- `VisibilityAndClickTrackers` (outer wrapper with flag tracking)

Currently both files export the same simpler component.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +25 to +32
const observerOptions = useMemo(
() => ({
threshold: 0.1,
...options,
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[options?.threshold, options?.root, options?.rootMargin]
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: The useMemo dependency array is incomplete. The original in PostHogFeature.tsx:106-116 uses a different pattern without useMemo, passing options directly to IntersectionObserver.

This useMemo approach could cause issues - if other properties of options change (not just threshold/root/rootMargin), the observer won't be recreated because observerOptions won't change.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/react/src/components/internal/VisibilityAndClickTracker.tsx
Line: 25:32

Comment:
**logic:** The `useMemo` dependency array is incomplete. The original in `PostHogFeature.tsx:106-116` uses a different pattern without `useMemo`, passing options directly to `IntersectionObserver`.

This `useMemo` approach could cause issues - if other properties of `options` change (not just threshold/root/rootMargin), the observer won't be recreated because `observerOptions` won't change.

How can I resolve this? If you propose a fix, please make it concise.

}: {
children: React.ReactNode
onIntersect: (entry: IntersectionObserverEntry) => void
onClick?: MouseEventHandler<HTMLDivElement>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: onClick is optional here but required in the original PostHogFeature.tsx:99. This API inconsistency could lead to bugs when these components are actually used.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/react/src/components/internal/VisibilityAndClickTracker.tsx
Line: 19:19

Comment:
**logic:** `onClick` is optional here but required in the original `PostHogFeature.tsx:99`. This API inconsistency could lead to bugs when these components are actually used.

How can I resolve this? If you propose a fix, please make it concise.

@pauldambra pauldambra changed the base branch from chore/react-play to graphite-base/2515 October 29, 2025 13:52
@pauldambra pauldambra force-pushed the chore/rearrange-things-for-re-use branch from 7caa257 to e00ce28 Compare October 29, 2025 13:53
@graphite-app graphite-app bot changed the base branch from graphite-base/2515 to main October 29, 2025 13:53
@pauldambra pauldambra force-pushed the chore/rearrange-things-for-re-use branch from e00ce28 to bee42de Compare October 29, 2025 13:53
@pauldambra pauldambra merged commit 1a1e2cf into main Oct 29, 2025
28 of 29 checks passed
Copy link
Member Author

Merge activity

@pauldambra pauldambra deleted the chore/rearrange-things-for-re-use branch October 29, 2025 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants