Skip to content

fix(funnels): flow horizontal funnel rows to fit step text#60843

Merged
sampennington merged 5 commits into
masterfrom
posthog-code/funnel-horizontal-flow-rows
Jun 1, 2026
Merged

fix(funnels): flow horizontal funnel rows to fit step text#60843
sampennington merged 5 commits into
masterfrom
posthog-code/funnel-horizontal-flow-rows

Conversation

@sampennington
Copy link
Copy Markdown
Contributor

Problem

The hog-charts horizontal ("top to bottom") funnel rendered every step as a band in one stacked canvas BarChart, with the step header/footer text living in an absolutely-positioned HTML overlay (StepDecorations) placed against a uniform band scale — every row the same height. A row therefore can't grow to fit its own content, so when a footer wraps to two lines on a narrow chart it overflows its fixed slot and visually overlaps the next step's header.

Changes

Restructured the funnel into a vertical flexbox column of per-step rows. Each row is just a bar plus some divs in normal document flow, so it grows to fit its own text and overlap becomes structurally impossible:

  • Removed the canvas overlay (StepDecorations) and its JS position math.
  • Each step's bar stays on hog-charts — one single-band <BarChart> per step (pill rounding / track / hover preserved).
  • Split the per-step decorations into plain flowing blocks: GlyphColumn (numbered glyph + connecting lines), StepHeader (title, duplicate-step indicator, optional styling, avg time), and StepFooter (completed / dropped-off value-inspector buttons).
  • Simplified the transform to emit per-step series; the tooltip now takes a single step.

Shared value scale

Every step's bar must share the same 0–100 axis so a 28% bar and a 100% bar stay comparable. Independent per-step charts would otherwise each scale to their own max. Rather than rely on the filler summing to 100 (which d3.nice() could round off and desync across charts), I added an opt-in BarChartConfig.bars.valueDomain?: [number, number] to hog-charts — a fixed linear domain with no nice() — and pass [0, 100] from the funnel. It's threaded BarChart → createBarScales → buildBarValueScale and defaults to off, so existing charts are unaffected. The per-step filler segment is retained as the visible drop-off track and the drop-off click target.

Preserved: color resolution, single-series and multi-breakdown cases, all persons-modal interactions (converted, drop-off, per-breakdown), the cursor tooltip, and the inCardView / showPersonsModal interactivity gating.

How did you test this code?

I'm an agent (Claude Code, Opus 4.8). This sandbox had no installed node_modules, so I could not run jest, Storybook, or a path-alias-aware tsc locally — these need to run in CI. I updated funnelBarHorizontalTransforms.test.ts to the new per-step output shape and added narrow-width Storybook stories (DefaultNarrow, BreakdownNarrow) so the wrapping fix is visible in the visual-regression suite. The intended visual checks (a single-line footer stays short, a wrapping footer grows only its own row, no cross-step overlap, no regression at normal width) still need a human to confirm against the rendered stories.

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

🤖 Agent context

Authored with Claude Code (Opus 4.8). Key decisions:

  • Chose the fixed valueDomain config over forcing the domain via a filler-that-sums-to-100, because d3.nice() on a float-imperfect [0, ~100] could round the max up and desync the scale between independent per-step charts. Kept the filler purely as the drop-off track / click target.
  • Kept each step's bar on hog-charts (one single-band chart per step) rather than reverting to DOM <div> bars — staying on the canvas library was the point of the prior rework. The header/footer/glyph moved to normal-flow divs since that's where the overlap problem lived.

Follow-up to #60762. Agent-assisted; requires human review. Visual regression snapshots will change and need eyeballing.

@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team June 1, 2026 09:36
@sampennington sampennington removed the request for review from a team June 1, 2026 09:36
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

Size Change: 0 B

Total Size: 80.9 MB

ℹ️ View Unchanged
Filename Size Change
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB 0 B
frontend/dist-report/exporter/_chunks/chunk 8.43 MB +203 B (0%)
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Action 25 kB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 1.33 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 118 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 872 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.7 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55.1 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 3.64 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 59.9 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 28.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 915 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 5.19 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 4.83 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/skills/LLMSkillScene 929 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/skills/LLMSkillsScene 946 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 27.4 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 7.31 kB 0 B
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 19 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.67 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.06 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.06 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.82 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 33.9 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.07 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 53.1 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.65 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.18 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.86 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 46.8 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.12 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24.4 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.06 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.31 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployment 4.05 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/DeploymentProject 5.58 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployments 9.31 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.02 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.24 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 40.6 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 24.5 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.41 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 104 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 27.1 kB 0 B
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 7.38 kB 0 B
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.61 kB 0 B
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 6.12 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.5 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 5.31 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.2 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 4.55 kB 0 B
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.5 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 17.9 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.2 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 8.49 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.3 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.25 kB 0 B
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 14.9 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 40.6 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 18.5 kB 0 B
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 16.2 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 3.31 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 3.14 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 7.36 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.41 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.6 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.35 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 8.14 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 34 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 11.6 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerTemplatesScene 4.59 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26.5 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.05 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.2 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/SlackTaskContextScene 8.88 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskDetailScene 23.8 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskTracker 14.6 kB 0 B
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 59.2 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 9.32 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 7.79 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.08 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.56 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 44.7 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.32 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.1 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 13.9 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.6 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 16.6 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 111 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 60.2 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 19.7 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 2.02 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 19.9 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 3.02 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.71 MB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 1.13 kB 0 B
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.19 kB 0 B
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 11.3 kB 0 B
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 471 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2.25 kB 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 842 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 359 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 832 B 0 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 422 B 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 7.52 kB 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.09 kB 0 B
frontend/dist-report/exporter/src/queries/schema 855 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 884 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/passkeyLogic 824 B 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.2 kB 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 6.54 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 5.39 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 8.84 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 29.8 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB 0 B
frontend/dist-report/exporter/src/scenes/models/ModelsScene 19 kB 0 B
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 17 kB 0 B
frontend/dist-report/monaco-editor-worker/src/lib/monaco/workers/monacoEditorWorker 288 kB 0 B
frontend/dist-report/monaco-json-worker/src/lib/monaco/workers/monacoJsonWorker 419 kB 0 B
frontend/dist-report/monaco-typescript-worker/src/lib/monaco/workers/monacoTsWorker 7.02 MB 0 B
frontend/dist-report/posthog-app/_chunks/chunk 8.64 MB +201 B (0%)
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 25.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 1.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 119 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 906 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 3.67 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 59.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 28.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 949 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 5.23 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 4.86 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/skills/LLMSkillScene 963 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/skills/LLMSkillsScene 980 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 27.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 7.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 19 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.71 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.85 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 26.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.11 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 51.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.68 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.22 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 1.81 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.22 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.13 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployment 4.08 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/DeploymentProject 5.61 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployments 9.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.28 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 40.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 22.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.48 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 103 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 27.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 7.42 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.65 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 6.16 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 5.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 25.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 4.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 19.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 17.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 8.53 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.29 kB 0 B
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 14.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 40.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 18.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 16.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 3.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 3.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 7.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.45 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.64 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 8.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 11.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerTemplatesScene 4.63 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 8.91 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskDetailScene 23.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 14.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 59.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 9.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 7.83 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 6.12 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.59 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 44.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.36 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 13.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 16.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 104 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 60.3 kB 0 B
frontend/dist-report/posthog-app/src/index 61.1 kB 0 B
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 7.19 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 11.3 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 471 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2.29 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 876 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 359 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 866 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/posthog-app/src/lib/ui/Button/ButtonPrimitives 426 B 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 7.55 kB 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.12 kB 0 B
frontend/dist-report/posthog-app/src/queries/schema 855 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 3.32 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 4.72 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 5.62 kB 0 B
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.87 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 16.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 918 B 0 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 42.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 165 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AccountConnected 3.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AgenticAccountMismatch 2.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLIAuthorize 11.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLILive 4.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/credential-review/CredentialReview 3.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/EmailMFAVerify 3.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/InviteSignup 15.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/Login 10.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/Login2FA 5.11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/passkeyLogic 858 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordReset 4.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordResetComplete 3.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 28.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/verify-email/VerifyEmail 5.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/TwoFactorReset 4.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelConnect 5.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelLinkError 2.64 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 1.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 867 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 28.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 6.61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 9.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 1.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 1.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 19.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 6.09 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 1.02 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 17.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 24.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 7.63 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 2.72 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 3.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 2.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 2.96 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 1.75 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 1.52 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 20.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 7.75 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 207 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 20.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 6.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 923 B 0 B
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 4.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 144 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 1.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Group 15.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Groups 4.29 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 7.73 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 4.17 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 7.64 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 12.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 11.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 5.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 4.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 6.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 4.27 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 55.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 63.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 5.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 34.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 5.43 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 4.87 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 29.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 5.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 13.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 5.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 17.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 1.11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 42.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/Max 1.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 19.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 17.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.84 kB 0 B
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 1.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 3.92 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 5.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 9.29 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 7.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 1.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/coupon/OnboardingCouponRedemption 1.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 792 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/sdks/SdkDoctorScene 10.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 1.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.51 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 20.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 6.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.95 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 275 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 5.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 19.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 1.21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 9.56 kB 0 B
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 1.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 2.14 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 4.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 10.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 329 B 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 5.49 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 1.15 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 2.35 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 15.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 3.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.57 kB 0 B
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.92 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 14.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 5.23 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 1.93 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 1.39 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 26.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 72.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 3.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 2.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 2.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 7.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 13.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.83 kB 0 B
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.19 kB 0 B
frontend/dist-report/render-query/src/render-query/render-query 27.4 MB +207 B (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 15.7 MB 0 B

compressed-size-action

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 1, 2026

Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
frontend/src/lib/hog-charts/core/types.ts:235-239
The JSDoc says `valueDomain` is "Ignored for `barLayout: 'percent'`", but `buildBarValueScale` checks `if (valueDomain)` before the `percent` branch, so `valueDomain` actually takes precedence over the percent domain rather than being ignored. This will mislead future callers who think they can safely pass both — they'll get the fixed domain, not the `[0, 1]` percent scale.

```suggestion
    /** Fix the value-axis domain instead of deriving it from the data. Opt-in — when set, the
     *  value scale spans exactly this `[min, max]` with no `d3.nice()` rounding, so independent
     *  charts that share a logical scale (e.g. one single-bar chart per funnel step, all `0–100`)
     *  stay visually comparable. Takes precedence over `barLayout: 'percent'`'s built-in `[0, 1]`
     *  domain if both are supplied. */
    valueDomain?: [number, number]
```

### Issue 2 of 2
frontend/src/lib/hog-charts/charts/BarChart/BarChart.tsx:272-284
`valueDomain` is an array (`[number, number]`), and `useMemo` uses `Object.is` equality, so a consumer who passes the tuple inline (e.g. `bars: { valueDomain: [0, 100] }` in JSX without memoizing the config object) will get a new reference on every render and cause the callback — and thus a full canvas redraw — to fire on every render. The current funnel consumer is safe because `CHART_CONFIG` is a module-level constant, but this is easy to misuse. Consider noting in the `valueDomain` JSDoc (or the `BarsConfig` comment) that the domain array must be a stable reference to avoid spurious redraws.

Reviews (1): Last reviewed commit: "fix(funnels): flow horizontal funnel row..." | Re-trigger Greptile

Comment thread frontend/src/lib/hog-charts/core/types.ts Outdated
Comment on lines 272 to +284
_private: barChartPrivate,
}
},
[yScaleType, barLayout, axisOrientation, stackedData, isHorizontal, divergingStack, maxBandRange, bandPadding]
[
yScaleType,
barLayout,
axisOrientation,
stackedData,
isHorizontal,
divergingStack,
maxBandRange,
bandPadding,
valueDomain,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 valueDomain is an array ([number, number]), and useMemo uses Object.is equality, so a consumer who passes the tuple inline (e.g. bars: { valueDomain: [0, 100] } in JSX without memoizing the config object) will get a new reference on every render and cause the callback — and thus a full canvas redraw — to fire on every render. The current funnel consumer is safe because CHART_CONFIG is a module-level constant, but this is easy to misuse. Consider noting in the valueDomain JSDoc (or the BarsConfig comment) that the domain array must be a stable reference to avoid spurious redraws.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/lib/hog-charts/charts/BarChart/BarChart.tsx
Line: 272-284

Comment:
`valueDomain` is an array (`[number, number]`), and `useMemo` uses `Object.is` equality, so a consumer who passes the tuple inline (e.g. `bars: { valueDomain: [0, 100] }` in JSX without memoizing the config object) will get a new reference on every render and cause the callback — and thus a full canvas redraw — to fire on every render. The current funnel consumer is safe because `CHART_CONFIG` is a module-level constant, but this is easy to misuse. Consider noting in the `valueDomain` JSDoc (or the `BarsConfig` comment) that the domain array must be a stable reference to avoid spurious redraws.

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

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@posthog
Copy link
Copy Markdown
Contributor

posthog Bot commented Jun 1, 2026

Visual changes approved by @sampennington — baseline updated in da484a0.

View this run in PostHog

6 changed, 4 new.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Save an insight, make changes, discard them, and save a copy (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this comment? Help fix flakies and failures and it'll disappear!

Comment on lines +381 to 386
if (valueDomain) {
return d3.scaleLinear().domain(valueDomain).range(valueRange)
}
if (barLayout === 'percent') {
return d3.scaleLinear().domain([0, 1]).nice(tickCount).range(valueRange)
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The valueDomain parameter bypasses the barLayout === 'percent' check, contradicting the documented behavior.

According to the JSDoc in types.ts (line 239): "Ignored for barLayout: 'percent', which is already [0, 1]."

However, when both valueDomain and barLayout: 'percent' are set, the code returns early with the custom domain instead of using [0, 1].

Fix:

if (valueDomain && barLayout !== 'percent') {
    return d3.scaleLinear().domain(valueDomain).range(valueRange)
}
if (barLayout === 'percent') {
    return d3.scaleLinear().domain([0, 1]).nice(tickCount).range(valueRange)
}

This ensures percent layouts always use [0, 1] domain regardless of valueDomain setting.

Suggested change
if (valueDomain) {
return d3.scaleLinear().domain(valueDomain).range(valueRange)
}
if (barLayout === 'percent') {
return d3.scaleLinear().domain([0, 1]).nice(tickCount).range(valueRange)
}
if (valueDomain && barLayout !== 'percent') {
return d3.scaleLinear().domain(valueDomain).range(valueRange)
}
if (barLayout === 'percent') {
return d3.scaleLinear().domain([0, 1]).nice(tickCount).range(valueRange)
}

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Copy link
Copy Markdown
Contributor Author

@sampennington sampennington left a comment

Choose a reason for hiding this comment

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

(Duplicate of the automated review just below — posted twice by mistake. See #60843 (review) for the full review with inline comments.)

Copy link
Copy Markdown
Contributor Author

@sampennington sampennington left a comment

Choose a reason for hiding this comment

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

🤖 Automated review

Verdict: Ship it (with low-cost follow-ups)

Clean, well-decomposed refactor: the 211-line absolutely-positioned StepDecorations is replaced by flowing flex rows (GlyphColumn/StepHeader/StepFooter) + one canvas BarChart per step, and the new roundStackEnds pill-clip correctly rounds the stack's outer ends even for thin breakdown slivers. Canvas clip/shadow save-restore nesting is balanced, the per-band pill union is correct, and dep arrays are complete. Nothing blocks merge. The two worthwhile follow-ups: fix the valueDomain-vs-percent doc/code contradiction (1-liner) and add unit tests for the new library features.

Non-anchored findings

Should Fix

  • Missing library tests for the new public features — none of bar-scales.test.ts / canvas-renderer.test.ts / BarChart.test.tsx cover valueDomain, roundStackEnds, or stackPillRects. Worth: buildBarValueScale with valueDomain (spans exactly [min,max], no nice()); stackPillRects per-dataIndex union + zero-size filter + horizontal/vertical extension; clipToRoundedRects empty-array no-op. (hog-charts)
  • Missing funnel transform tests for two edge cases in funnelBarHorizontalTransforms.ts: a later step missing a breakdown variant still uses step-0's color/label (:78), and buildFiller floors at 0 when summed coverage exceeds 100% (:117). (code-reviewer)

Performance / Suggestion

  • SingleStepBar is not React.memo'd, and the parent redefines onSegmentClick/renderTooltip inline per step on every render (FunnelBarHorizontalChart.tsx:88-113). With one canvas chart per step now, any parent re-render (hover/modal/theme) re-renders all N charts. Memoizing SingleStepBar + stabilizing the per-step handlers is the refactor's intended payoff. (react + code-reviewer + quality)
  • Hoist stackPillRects into bar-layout.ts next to computeSeriesBars/computeBarTrackRect (pure geometry helpers already tested there) — makes it unit-testable instead of module-private to BarChart.tsx. (hog-charts + quality)

Suggestion (pre-existing)

  • StepHeader/StepFooter/GlyphColumn duplicate the funnel step title/legend/glyph-rail that already live in scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.tsx and FunnelBarVertical/StepLegend.tsx. This triplication was inherited from the deleted StepDecorations.tsx, not introduced here — a future shared FunnelStepConversionMetadata component would consolidate all three. (reuse)

Nits

  • Naming consistency: highlightRadius (drawHover) vs the inline stackPills.length > 0 ? 0 : barCornerRadius (drawStatic) express the same "square segments because the clip rounds the ends" intent — name both. LINE_CLASSCONNECTOR_LINE_CLASS to distinguish from the optional-step decoration lines. BAR_CORNER_RADIUS is the one chart-config constant defined locally in SingleStepBar.tsx while the others moved to the transforms module. (quality)
  • theme/fillerColor memos list isDarkModeOn as a dep without referencing it (proxy for "CSS vars changed") — pre-existing pattern, worth a one-line comment. (react)

Positive Observations

  • Decomposition removes the fragile coupling between decoration layout and the chart's internal plot dimensions; rows now flow to fit wrapped text (the PR's goal). (code-reviewer)
  • buildBreakdownSegments hoists getReferenceStep out of the inner breakdown loop — O(steps) instead of O(steps×breakdowns) calls. (efficiency)
  • FunnelBarHorizontalTooltip now takes step/stepIndex as props instead of re-deriving from context.dataIndex, removing an index-coupling footgun. (code-reviewer)
  • No branching logic in the test file; reference-step variations correctly use it.each. (personal)
  • New DefaultNarrow/BreakdownNarrow stories directly exercise the footer-wrapping behavior. (code-reviewer)

Reviewers: code-reviewer, react, personal, reuse, quality, efficiency, hog-charts. Inline comments below are tagged with the reviewer that raised them and the level of concern.

stackedSeries: Series[] | undefined,
valueDomain: [number, number] | undefined
): D3YScale {
if (valueDomain) {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 [hog-charts] · Should Fix

This returns the valueDomain scale before the barLayout === 'percent' branch, but the valueDomain docstring (types.ts:238) says it's "Ignored for barLayout: 'percent', which is already [0, 1]" — the code does the opposite. A caller setting both gets the custom domain, not [0,1]. Either move the percent check above this one, or fix the doc to say valueDomain overrides everything (incl. percent). The funnel uses 'stacked' so it isn't bitten today, but the JSDoc is a public-surface contract.

Same block also silently forces a linear scale and ignores yScaleType: 'log' / the diverging-stack bottom extension — worth a doc line on BarsConfig.valueDomain.

renderTooltip,
onError,
}: SingleStepBarProps): JSX.Element {
const onPointClick = useMemo(
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 [react+code-reviewer] · Suggestion

This useMemo never hits its cache: its dep onSegmentClick is redefined inline on every parent render (FunnelBarHorizontalChart.tsx:88), so it recomputes each render and buys nothing while BarChart isn't memoized. Either drop the memo (plain ternary), or — for the real win — React.memo(SingleStepBar) + stabilize onSegmentClick/renderTooltip upstream so this memo becomes effective and sibling step charts stop re-rendering on every hover.

}
// Match the resting bar's pill clip so the darker highlight rounds at the stack's outer
// ends instead of poking square corners past them.
const hoveredBandPills = roundStackEnds
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 [efficiency+quality] · Performance

When roundStackEnds is on, the hovered band's bars are iterated again here (a fresh iterBarsAtCursor pass + spread + .map) purely to build the pills, on every mousemove — items already iterated the same band above. Cost is O(series-in-band) so it's negligible for funnels, but the stacked path needs the full-stack span while the grouped/else path could reuse items' bars. Consider collecting bar into a local during the existing loop instead of re-iterating.

)

return (
<div className="flex" key={step.order}>
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 [code-reviewer] · Suggestion

key={step.order} (carried over from the deleted StepDecorations) assumes order is unique across rendered steps. If two steps can ever share an order (worth confirming for unordered funnels), React reconciliation misbehaves. key={${step.order}-${stepIndex}} is a cheap safeguard.

@sampennington
Copy link
Copy Markdown
Contributor Author

🔀 Split this PR in two. This one now contains just the horizontal funnel flow-rows refactor. The rounded pill bar-ends + cursor-following tooltip (and the StepDecorations.tsx removal) moved to a stacked follow-up: #60945 (based on this branch).

@sampennington sampennington force-pushed the posthog-code/funnel-horizontal-flow-rows branch from 3623c98 to 6d24e67 Compare June 1, 2026 15:35
@sampennington sampennington changed the base branch from master to sam/funnel-step-components June 1, 2026 15:35
@sampennington
Copy link
Copy Markdown
Contributor Author

📦 Now part of a 3-PR stack (this PR shrank from +484 to +308 by extracting the components):

  1. feat(funnels): add horizontal funnel step row components #60948 — new step-row components (GlyphColumn, StepHeader, StepFooter), base master
  2. this PR (fix(funnels): flow horizontal funnel rows to fit step text #60843) — the flow-rows refactor (chart rewire + SingleStepBar + transforms + valueDomain), base feat(funnels): add horizontal funnel step row components #60948
  3. feat(funnels): round funnel bar ends and follow cursor with tooltip #60945 — rounded pill bar-ends + cursor tooltip + StepDecorations removal, base fix(funnels): flow horizontal funnel rows to fit step text #60843

SingleStepBar stays here rather than in #60948 because it imports the rewritten transforms and the new hog-charts valueDomain config, which are coupled to the chart rewrite. StepDecorations.tsx remains present through #60948/#60843 and is deleted in #60945 — merge top-down to avoid it lingering on master.

Base automatically changed from sam/funnel-step-components to master June 1, 2026 17:05
Replace the absolutely-positioned StepDecorations overlay with flowing
flex rows and one canvas BarChart per step, so each row grows to fit its
wrapped step text instead of being crushed into a fixed-height band.
Adds the hog-charts `bars.valueDomain` option so the independent per-step
charts share a 0–100 scale. The now-unused StepDecorations file is left
in place and removed in the stacked follow-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sampennington sampennington force-pushed the posthog-code/funnel-horizontal-flow-rows branch from 6d24e67 to 149f70e Compare June 1, 2026 17:27
posthog Bot and others added 3 commits June 1, 2026 17:51
10 updated
Run: d1ed45d8-8ccf-4dba-810e-3522ca3133f6

Co-authored-by: sampennington <56024559+sampennington@users.noreply.github.com>
Drop the no-op useMemo in SingleStepBar and shorten two over-long doc
comments. No behavior change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the redundant breakdown-narrow story (DefaultNarrow already proves
the footer-wrap row growth), inline the single-use bar corner-radius
const, and tighten two doc comments to one line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sampennington sampennington added the stamphog Request AI review from stamphog label Jun 1, 2026
Copy link
Copy Markdown

@stamphog stamphog Bot left a comment

Choose a reason for hiding this comment

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

An unresolved substantive comment on scales.ts — flagged by two bots and acknowledged by the author as "Should Fix" — is still present in the merged diff: valueDomain is checked before barLayout === 'percent', but the JSDoc explicitly says valueDomain is "Ignored for barLayout: 'percent'". The code does the opposite, introducing a misleading contract in a shared library.

@stamphog stamphog Bot removed the stamphog Request AI review from stamphog label Jun 1, 2026
buildBarValueScale checks valueDomain before the percent branch, so it
takes precedence — the JSDoc claimed it was ignored for percent. Match
the doc to the code.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sampennington sampennington added the stamphog Request AI review from stamphog label Jun 1, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Clean frontend refactor with no showstoppers. The flagged valueDomain/percent JSDoc inconsistency was resolved in this very diff by updating the types.ts JSDoc to explicitly document override semantics. Logic changes are correct, tests cover the new per-step data shape, and the shared valueDomain constant ensures visual alignment across independent per-step charts.

@sampennington sampennington enabled auto-merge (squash) June 1, 2026 18:59
@sampennington sampennington merged commit 8cb9c24 into master Jun 1, 2026
208 checks passed
@sampennington sampennington deleted the posthog-code/funnel-horizontal-flow-rows branch June 1, 2026 19:14
@deployment-status-posthog
Copy link
Copy Markdown

deployment-status-posthog Bot commented Jun 1, 2026

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-06-01 19:38 UTC Run
prod-us ✅ Deployed 2026-06-01 19:51 UTC Run
prod-eu ✅ Deployed 2026-06-01 19:56 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI review from stamphog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant