Skip to content

Core: Fix onboarding visual bugs, survey telemetry and modal dismissal#33326

Merged
ghengeveld merged 8 commits into
nextfrom
fix-onboarding-survey
Jan 8, 2026
Merged

Core: Fix onboarding visual bugs, survey telemetry and modal dismissal#33326
ghengeveld merged 8 commits into
nextfrom
fix-onboarding-survey

Conversation

@ghengeveld
Copy link
Copy Markdown
Member

@ghengeveld ghengeveld commented Dec 10, 2025

Closes #

What I did

  • Fixed some visual bugs related to the guided tour tooltips attempting to highlight elements outside the viewport, by ensuring the panel height is set correctly.
  • Fixed controls panel scrolling + sticky bar behavior.
  • Improved controls panel styling for better visual consistency.
  • Added "openSurvey" telemetry event for more reliable completion rate tracking.
  • Fixed Modal close button triggering form submission due to missing type attribute.
  • Fixed survey dismissal behavior to ensure modal stays closed.

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

Run through the onboarding until the onboarding survey, close it, reopen it (through Checklist) and close it again.

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli-storybook/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook publish.yml --field pr=<PR_NUMBER>

Summary by CodeRabbit

  • New Features

    • Survey automatically opens upon reaching step 6 of onboarding
    • Added control over survey visibility state for better UX management
  • Bug Fixes

    • Fixed modal close button to prevent unintended form submission
    • Corrected body viewport positioning alignment
  • Refactor

    • Simplified UI panel layout and styling consistency
    • Improved onboarding state management with state-driven approach

✏️ Tip: You can customize this high-level summary in your review settings.

@ghengeveld ghengeveld requested a review from ndelangen December 10, 2025 14:25
@ghengeveld ghengeveld self-assigned this Dec 10, 2025
@ghengeveld ghengeveld marked this pull request as ready for review December 10, 2025 14:25
@nx-cloud
Copy link
Copy Markdown

nx-cloud Bot commented Dec 10, 2025

View your CI Pipeline Execution ↗ for commit ef16fc8

Command Status Duration Result
nx run-many -t compile,check,knip,test,pretty-d... ✅ Succeeded 9m 9s View ↗

☁️ Nx Cloud last updated this comment at 2026-01-07 12:21:28 UTC

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 10, 2025

📝 Walkthrough

Walkthrough

Refactors onboarding survey to use a prop-driven isOpen flow for IntentSurvey, replaces direct URL query manipulation with api.applyQueryParams, emits an openSurvey event when reaching step 6, and makes UI/theming/layout adjustments (panel sizing, fixed viewport body, modal close button type).

Changes

Cohort / File(s) Summary
Onboarding / Survey
\code/addons/onboarding/src/Onboarding.tsx`, `code/addons/onboarding/src/Survey.tsx``
Replaced manual URL query manipulation with api.applyQueryParams(...); added isOpen state and effect to emit openSurvey at step 6; call api.setSizes({ bottomPanelHeight: 300 }) during onboarding setup; pass isOpen={enabled} / isOpen to IntentSurvey.
IntentSurvey component & stories
\code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx`, `code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx``
Added isOpen: boolean prop to public props; switched modal control from defaultOpen to open={isOpen}; updated story default args to include isOpen: true.
Modal styling
\code/core/src/components/components/Modal/Modal.styled.tsx``
Added type="button" to the Close button to prevent unintended form submission.
Controls / Addon panel UI
\code/core/src/controls/components/ControlsPanel.tsx`, `code/core/src/controls/components/SaveStory.tsx`, `code/core/src/controls/manager.tsx``
Removed ScrollArea wrapper around ArgsTable; AddonWrapper styling now uses theme and conditional padding; SaveStory layout changed from sticky to absolute with full width; removed hasScrollbar={false} from AddonPanel.
Global theming
\code/core/src/theming/global.ts``
Replaced overflow: 'hidden' body style with fixed viewport positioning (position: 'fixed', width: '100vw', height: '100vh', overflow: 'hidden').
Minor styling
\code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.tsx``
Adjusted lineHeight from 20px to 19px.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant Onboarding
participant API
participant Survey
participant IntentSurvey
Note over Onboarding,API: Initial onboarding setup
Onboarding->>API: api.setSizes({ bottomPanelHeight: 300 })
Onboarding->>API: api.applyQueryParams({ onboarding: undefined }, { replace: true })
Note over Onboarding,Survey: Step progression to step 6
Onboarding->>Survey: update step -> step === 6
Survey->>API: emit({ type: 'openSurvey' })
API->>IntentSurvey: props.isOpen = true (drives Modal open)
IntentSurvey->>IntentSurvey: render Modal open={isOpen}
IntentSurvey-->>API: onDismiss / onComplete -> api.applyQueryParams(...) to clear onboarding

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4877857 and ef16fc8.

📒 Files selected for processing (2)
  • code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
✅ Files skipped from review due to trivial changes (1)
  • code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • code/core/src/controls/components/ControlsPanel.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: normal
  • GitHub Check: nx
  • GitHub Check: Core Unit Tests, windows-latest

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (5)
code/core/src/controls/components/SaveStory.tsx (1)

19-27: Absolute footer bar + adjusted Info spacing are fine; ensure a stable positioning context

Switching the Save bar Container to position: 'absolute' with bottom: 0 and width: '100%', together with paddingBottom: 41 on the wrapper, is a reasonable way to keep the bar docked to the bottom of the panel while avoiding overlap with the ArgsTable. The added marginInlineStart on Info is a minor visual refinement.

One thing to double‑check: that there is always a positioned ancestor (e.g., position: 'relative' on the panel wrapper) so this bar is anchored to the controls panel rather than the viewport. If that’s not already true via AddonPanel, consider adding position: 'relative' to the immediate wrapper to make the relationship explicit.

Also applies to: 43-50

code/core/src/theming/global.ts (1)

100-108: Body‑level fixed viewport and scroll locking match the new layout model; validate cross‑browser behavior

Locking the body to position: 'fixed' with width: '100vw', height: '100vh', and overflow: 'hidden' is consistent with moving scrolling responsibilities into the app shell (panels, docs areas, etc.) and should help keep guided‑tour targeting aligned with the visible viewport.

Given this is a global change, it’s worth sanity‑checking:

  • Manager + docs views on small screens and mobile browsers (100vh/100vw quirks, address bar behavior).
  • Storybook when embedded inside another page or iframe, if that’s a supported scenario.

If you see issues there, an alternative would be to apply similar constraints to the manager root container instead of body.

code/core/src/controls/components/ControlsPanel.tsx (1)

33-43: AddonWrapper theming and padding look good; consider making it a positioned ancestor

The updated AddonWrapper styling (full height, maxHeight: '100vh', themed background, conditional bottom padding, and header styling) fits the new fixed‑viewport controls layout and ensures the Save bar doesn’t cover the last rows.

To make the Save bar’s position: 'absolute'; bottom: 0 behavior more robust, it would be safer for AddonWrapper itself to be a positioned ancestor rather than relying on upstream components:

-const AddonWrapper = styled.div<{ showSaveFromUI: boolean }>(({ showSaveFromUI, theme }) => ({
-  height: '100%',
-  maxHeight: '100vh',
+const AddonWrapper = styled.div<{ showSaveFromUI: boolean }>(({ showSaveFromUI, theme }) => ({
+  position: 'relative',
+  height: '100%',
+  maxHeight: '100vh',
   paddingBottom: showSaveFromUI ? 41 : 0,
   backgroundColor: theme.background.content,
   thead: {
     backgroundColor: theme.background.app,
     lineHeight: '19px',
   },
 }));

This guarantees the footer bar is anchored to the controls panel even if the parent panel’s positioning changes later.

code/addons/onboarding/src/Survey.tsx (1)

15-28: Local isOpen state + mount-time openSurvey event cleanly solve dismissal & telemetry

Using isOpen state (closed via disableOnboarding) to control <IntentSurvey> and emitting a one-shot { type: 'openSurvey', from: 'guide' } in useEffect gives you persistent dismissal behavior while instrumenting survey opens from the guide entry point. The dependency arrays and callback wiring look correct and should behave deterministically.

If you later introduce flows where Survey can mount with isOpen initially false, consider gating the openSurvey emit on isOpen as well so telemetry only counts actually visible surveys.

Also applies to: 51-51

code/addons/onboarding/src/Onboarding.tsx (1)

112-120: openSurvey telemetry on step 6 and fixed bottom panel height align with the intended UX fix

The new effect that emits { type: 'openSurvey', from: 'onboarding' } only when step === '6:IntentSurvey' and !hasCompletedSurvey gives you a clean telemetry signal for survey exposure from the onboarding flow without double‑counting. Adding api.setSizes({ bottomPanelHeight: 300 }) during initial onboarding setup should help keep the controls panel and tour highlights within the viewport, addressing the visual bugs mentioned in the PR description.

If you later want to preserve user‑customized panel sizes, consider capturing the previous sizes before calling setSizes and restoring them in a cleanup effect when onboarding is disabled or unmounted.

Also applies to: 122-129

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6127326 and 4877857.

📒 Files selected for processing (9)
  • code/addons/onboarding/src/Onboarding.tsx (3 hunks)
  • code/addons/onboarding/src/Survey.tsx (3 hunks)
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx (1 hunks)
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx (2 hunks)
  • code/core/src/components/components/Modal/Modal.styled.tsx (1 hunks)
  • code/core/src/controls/components/ControlsPanel.tsx (2 hunks)
  • code/core/src/controls/components/SaveStory.tsx (2 hunks)
  • code/core/src/controls/manager.tsx (1 hunks)
  • code/core/src/theming/global.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{js,jsx,json,html,ts,tsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use ESLint and Prettier configurations that are enforced in the codebase

Files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/core/src/controls/components/SaveStory.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/core/src/theming/global.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/core/src/controls/manager.tsx
  • code/addons/onboarding/src/Survey.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Enable TypeScript strict mode

Files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/core/src/controls/components/SaveStory.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/core/src/theming/global.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/core/src/controls/manager.tsx
  • code/addons/onboarding/src/Survey.tsx
code/**/*.{ts,tsx,js,jsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

code/**/*.{ts,tsx,js,jsx,mjs}: Use server-side logger from 'storybook/internal/node-logger' for Node.js code
Use client-side logger from 'storybook/internal/client-logger' for browser code
Do not use console.log, console.warn, or console.error directly unless in isolated files where importing loggers would significantly increase bundle size

Files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/core/src/controls/components/SaveStory.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/core/src/theming/global.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/core/src/controls/manager.tsx
  • code/addons/onboarding/src/Survey.tsx
code/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Export functions that need to be tested from their modules

Files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/core/src/controls/components/SaveStory.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/core/src/theming/global.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/core/src/controls/manager.tsx
  • code/addons/onboarding/src/Survey.tsx
code/**/*.{js,jsx,json,html,ts,tsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

code/**/*.{js,jsx,json,html,ts,tsx,mjs}: Run Prettier with --write flag to format code before committing
Run ESLint with yarn lint:js:cmd to check for linting issues and fix errors before committing

Files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/core/src/controls/components/SaveStory.tsx
  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/core/src/theming/global.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/core/src/controls/manager.tsx
  • code/addons/onboarding/src/Survey.tsx
🧠 Learnings (6)
📚 Learning: 2025-11-05T09:36:55.944Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Tabs/Tabs.stories.tsx:222-227
Timestamp: 2025-11-05T09:36:55.944Z
Learning: Repo: storybookjs/storybook PR: 32458 — In code/core/src/components/components/Button/Button.tsx (React/TypeScript), ButtonProps includes ariaLabel?: string | false and the component maps it to the DOM aria-label. Convention: ariaLabel is mandatory on all Button usages — provide a descriptive string for icon-only buttons; set ariaLabel=false when the button’s children already serve as the accessible name. Do not suggest using a raw aria-label prop on Button call sites.

Applied to files:

  • code/core/src/components/components/Modal/Modal.styled.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
📚 Learning: 2025-11-05T09:38:47.712Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Select/Select.tsx:200-204
Timestamp: 2025-11-05T09:38:47.712Z
Learning: Repo: storybookjs/storybook — Guidance: Until Storybook 11 is released, do not suggest using React.useId anywhere (e.g., in code/core/src/components/components/Select/Select.tsx) to maintain compatibility with React 17 runtimes. Prefer advising: accept a caller-provided props.id and, if needed, generate a client-only fallback id to minimize SSR hydration issues — but avoid useId. Resume prompting for useId after Storybook 11.

Applied to files:

  • code/core/src/controls/components/ControlsPanel.tsx
  • code/addons/onboarding/src/Survey.tsx
📚 Learning: 2025-09-19T15:49:02.264Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32270
File: code/core/src/components/components/AriaTabs/AriaTabPanel.tsx:27-30
Timestamp: 2025-09-19T15:49:02.264Z
Learning: In AriaTabPanel component, when hasScrollbar=false, the Panel container intentionally maintains overflowY: hidden. This forces consumers to implement their own scrolling within tab content rather than relying on automatic browser scrolling, preventing double scrollbars and giving full control over scroll behavior.

Applied to files:

  • code/core/src/controls/manager.tsx
📚 Learning: 2025-11-28T14:50:24.889Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-28T14:50:24.889Z
Learning: Follow existing patterns and conventions in the Storybook codebase

Applied to files:

  • code/addons/onboarding/src/Survey.tsx
📚 Learning: 2025-11-05T09:37:25.920Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/tooltip/WithTooltip.tsx:54-96
Timestamp: 2025-11-05T09:37:25.920Z
Learning: Repo: storybookjs/storybook — In code/core/src/components/components/tooltip/WithTooltip.tsx, the legacy WithTooltip implementation is intentionally reintroduced for backward compatibility and is deprecated; maintainers (per Sidnioulz) do not want maintenance or improvements on it. Prefer WithTooltipNew/Popover; avoid suggesting changes to WithTooltip.* going forward.

Applied to files:

  • code/addons/onboarding/src/Survey.tsx
📚 Learning: 2025-11-28T14:50:24.889Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-28T14:50:24.889Z
Learning: Applies to code/**/*.{ts,tsx,js,jsx,mjs} : Use client-side logger from 'storybook/internal/client-logger' for browser code

Applied to files:

  • code/addons/onboarding/src/Survey.tsx
🧬 Code graph analysis (3)
code/core/src/controls/components/ControlsPanel.tsx (1)
code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.tsx (1)
  • ArgsTable (320-481)
code/addons/onboarding/src/Onboarding.tsx (1)
code/addons/onboarding/src/constants.ts (2)
  • ADDON_ONBOARDING_CHANNEL (2-2)
  • ADDON_CONTROLS_ID (5-5)
code/addons/onboarding/src/Survey.tsx (2)
code/addons/onboarding/src/constants.ts (1)
  • ADDON_ONBOARDING_CHANNEL (2-2)
code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx (1)
  • IntentSurvey (67-257)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: normal
  • GitHub Check: Core Unit Tests, windows-latest
  • GitHub Check: nx
  • GitHub Check: nx
🔇 Additional comments (6)
code/core/src/controls/manager.tsx (1)

120-128: Letting AddonPanel manage its own scrollbar looks correct for the new layout

Dropping hasScrollbar={false} should allow the panel to provide a single scroll container, which fits with the removal of the inner ScrollArea and the new fixed‑viewport body styles. This should reduce nested scrolling and help guided‑tour highlighting stay in sync with the visible viewport.

I’d just recommend exercising a story with many controls to confirm scrolling, Save bar positioning, and tour highlights all behave as expected in the manager and in tabbed layouts. Based on learnings, this aligns with the pattern of delegating scrolling to the panel container when possible.

code/core/src/components/components/Modal/Modal.styled.tsx (1)

188-199: Explicit type="button" on Modal.Close resolves form‑submission bug

Adding type="button" to the default Close Button ensures it no longer acts as a submit button when rendered inside a <form>, while keeping existing asChild usages under caller control. This directly addresses the modal dismissal/form submission issue without side effects on other call sites.

code/core/src/controls/components/ControlsPanel.tsx (1)

107-121: Direct ArgsTable rendering inside the panel matches the new scroll model

Rendering ArgsTable directly inside AddonWrapper (with inAddonPanel, isLoading, sort, and the existing key={path}) and dropping the extra ScrollArea wrapper should eliminate nested scrollbars and align scrolling with AddonPanel’s own container.

The prop set looks complete for the controls use case, and the key={path} comment still accurately reflects that state will reset on story switches.

code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx (1)

9-13: Default isOpen story arg matches new required prop and behavior

Adding isOpen: true to meta.args keeps the survey visible in the Default story and satisfies the new required prop, so the Submitting play function can still find and interact with the modal without extra setup.

code/addons/onboarding/src/Onboarding.tsx (1)

84-97: Centralized query handling and isOpen wiring for IntentSurvey look solid

Using api.applyQueryParams({ onboarding: undefined }, { replace: true }) in disableOnboarding is a nice cleanup over manual URL manipulation and keeps the manager URL in sync when onboarding is dismissed. Passing isOpen={enabled} into <IntentSurvey> matches the new controlled API; even though enabled is always true while this component is mounted (because of the early if (!enabled) return null), it keeps the call site future‑proof if you ever decouple rendering from open state.

Also applies to: 313-317

code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx (1)

67-75: Controlled Modal via isOpen prop is consistent and parent-driven

Wiring IntentSurvey to accept an isOpen: boolean and passing it through as open={isOpen} on Modal, with onOpenChange calling onDismiss only when closing, makes visibility fully controlled by parents (Onboarding, Survey, stories) and fixes the previous reliance on internal default-open behavior. All call sites properly pass the isOpen prop.

@shilman shilman added ui patch:yes Bugfix & documentation PR that need to be picked to main branch labels Dec 11, 2025
@storybook-app-bot
Copy link
Copy Markdown

storybook-app-bot Bot commented Dec 14, 2025

Package Benchmarks

Commit: ef16fc8, ran on 7 January 2026 at 12:23:04 UTC

No significant changes detected, all good. 👏

Comment thread code/core/src/controls/components/ControlsPanel.tsx Outdated
@ghengeveld ghengeveld requested a review from ndelangen January 7, 2026 12:11
@ghengeveld ghengeveld merged commit 73828b0 into next Jan 8, 2026
71 checks passed
@ghengeveld ghengeveld deleted the fix-onboarding-survey branch January 8, 2026 08:45
@ghengeveld ghengeveld added needs qa Indicates that this needs manual QA during the upcoming minor/major release and removed Stale labels Jan 8, 2026
@ndelangen ndelangen removed the needs qa Indicates that this needs manual QA during the upcoming minor/major release label Jan 16, 2026
@ndelangen ndelangen removed the patch:yes Bugfix & documentation PR that need to be picked to main branch label Jan 26, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Mar 2, 2026
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants