feat(header): add opt-in auto-hide-on-scroll for the header (#6738)

* feat(header): add opt-in auto-hide-on-scroll for the header

New per-user header preference (default off): when enabled, the
header slides away while scrolling down and reappears on scroll-up or
near the top of the page. Disabled while in board edit mode, and
skipped entirely while focus is inside the header. Only applies when
the header is set to visible - the existing hover-to-reveal floating
controls already cover the hidden-header case.

* chore(api): regenerate the checked-in OpenAPI schema

check:openapi was failing in CI - the schema on disk hadn't been
regenerated after the header preferences gained autoHideOnScroll.

Add scripts/generate-openapi-schema.mts (and a generate:openapi
package script) alongside the existing check script so this is a
one-command fix next time the schema drifts.

* docs(users): document the header studio's visibility and auto-hide options

Header customization (drag-to-arrange controls, hide/show, hover-reveal
and pin, auto-hide-on-scroll) had no documentation on the user general
settings page.
This commit is contained in:
Bergasha authored and GitHub committed 2026-08-29 14:56:02 +10:00
1 parent ee08beef59
commit e58c229664
11 files changed
+107 -2

No files matched your search

@@ -105,6 +105,7 @@ export const headerPreferencesSchema = z
visible: z.boolean(),
searchDisplay: z.enum(headerSearchDisplayValues),
logoDisplay: z.enum(headerLogoDisplayValues).default("logoAndText"),
autoHideOnScroll: z.boolean().default(false),
zones: headerZonesSchema,
})
.strict();
@@ -155,6 +156,7 @@ const migrateLegacyItems = (
visible,
searchDisplay: "input",
logoDisplay: "logoAndText",
autoHideOnScroll: false,
zones: {
left: zones.left.map(createBuiltinHeaderItem),
center: zones.center.map(createBuiltinHeaderItem),
@@ -209,6 +211,7 @@ export const defaultHeaderPreferences = {
visible: true,
searchDisplay: "input",
logoDisplay: "logoAndText",
autoHideOnScroll: false,
zones: {
left: [createBuiltinHeaderItem("logo")],
center: [createBuiltinHeaderItem("search")],