diff --git a/apps/docs/docs/management/users/index.mdx b/apps/docs/docs/management/users/index.mdx index 655308000..9c32ba56f 100644 --- a/apps/docs/docs/management/users/index.mdx +++ b/apps/docs/docs/management/users/index.mdx @@ -77,17 +77,6 @@ Choose the first day of the week for the user. This will affect the calendar wid Option to show icons for status check instead of colored dots. -#### Header studio - -Personal control over what appears in the header and where. Drag controls between the Left, Center, and Right -sections, add optional board shortcuts, and choose how the search and logo controls are displayed. - -The header can be hidden entirely with the visibility toggle. While hidden, hovering the top edge of the page -reveals it temporarily; clicking inside it pins it open until the page is refreshed or you click elsewhere. - -When the header is visible, the **Auto-hide on scroll** toggle makes it slide away while scrolling down and -reappear on scroll-up or near the top of the page. It has no effect while the header itself is hidden. - #### Delete This action will permanently delete the user from the database, including any preferences they set. diff --git a/apps/docs/static/api/open-api-schema.json b/apps/docs/static/api/open-api-schema.json index 7ce94b623..5791847a3 100644 --- a/apps/docs/static/api/open-api-schema.json +++ b/apps/docs/static/api/open-api-schema.json @@ -4391,10 +4391,6 @@ "type": "string", "enum": ["logo", "logoAndText"] }, - "autoHideOnScroll": { - "default": false, - "type": "boolean" - }, "zones": { "type": "object", "properties": { diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/header-composer.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/header-composer.tsx index f85bc5acf..318e17f69 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/header-composer.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/header-composer.tsx @@ -18,7 +18,6 @@ import { Paper, SegmentedControl, Stack, - Switch, Text, ThemeIcon, Tooltip, @@ -203,16 +202,7 @@ export const HeaderComposer = ({ value, onChange, boards, homeBoardId }: HeaderC {t("description")} - - - onChange({ ...value, autoHideOnScroll: event.currentTarget.checked })} - /> - + new Map(boards.map((board) => [board.id, board])), [boards]); - const isEditMode = useOptionalEditMode(); - const isAutoHidden = useHeaderAutoHide( - headerPreferences.visible && headerPreferences.autoHideOnScroll && !isEditMode, - ); return ( @@ -120,7 +114,6 @@ export const ConfigurableHeader = ({ zIndex="var(--homarr-z-index-board-header)" className={classes.header} data-visible={headerPreferences.visible} - data-auto-hidden={isAutoHidden || undefined} data-advanced-focus-background data-app-shell-header > diff --git a/apps/nextjs/src/components/layout/header/use-header-auto-hide.ts b/apps/nextjs/src/components/layout/header/use-header-auto-hide.ts deleted file mode 100644 index 759de931d..000000000 --- a/apps/nextjs/src/components/layout/header/use-header-auto-hide.ts +++ /dev/null @@ -1,48 +0,0 @@ -"use client"; - -import { useEffect, useRef, useState } from "react"; - -const SCROLL_HIDE_THRESHOLD = 24; -const SCROLL_DIRECTION_HYSTERESIS = 6; - -export const useHeaderAutoHide = (enabled: boolean) => { - const [isHidden, setIsHidden] = useState(false); - const lastScrollYRef = useRef(0); - - useEffect(() => { - if (!enabled) { - setIsHidden(false); - return; - } - - lastScrollYRef.current = window.scrollY; - let frame: number | null = null; - - const handleScroll = () => { - if (frame !== null) return; - frame = window.requestAnimationFrame(() => { - frame = null; - const currentY = window.scrollY; - const delta = currentY - lastScrollYRef.current; - - if (currentY <= SCROLL_HIDE_THRESHOLD) { - setIsHidden(false); - } else if (delta > SCROLL_DIRECTION_HYSTERESIS) { - setIsHidden(true); - } else if (delta < -SCROLL_DIRECTION_HYSTERESIS) { - setIsHidden(false); - } - - lastScrollYRef.current = currentY; - }); - }; - - window.addEventListener("scroll", handleScroll, { passive: true }); - return () => { - window.removeEventListener("scroll", handleScroll); - if (frame !== null) window.cancelAnimationFrame(frame); - }; - }, [enabled]); - - return enabled && isHidden; -}; diff --git a/package.json b/package.json index 22aeb6b30..477724057 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "check:custom-widgets": "pnpm --filter @homarr/custom-widgets check:architecture", "check:custom-widget-bundle": "node ./scripts/check-custom-widget-bundle.mjs", "check:openapi": "tsx ./scripts/check-openapi-schema.mts", - "generate:openapi": "tsx ./scripts/generate-openapi-schema.mts", "ci:act:all": "bash scripts/ci/act.sh all", "ci:act:cleanup": "bash scripts/ci/act.sh cleanup", "ci:act:docker": "bash scripts/ci/act.sh docker", diff --git a/packages/boards/src/edit-mode.tsx b/packages/boards/src/edit-mode.tsx index 7503f872f..58288ce2a 100644 --- a/packages/boards/src/edit-mode.tsx +++ b/packages/boards/src/edit-mode.tsx @@ -26,8 +26,3 @@ export const useEditMode = () => { return context; }; - -export const useOptionalEditMode = (): boolean => { - const context = useContext(EditModeContext); - return context ? context[0] : false; -}; diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index ccf13fd16..04dabe9f7 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -5725,9 +5725,7 @@ "show": "Show the header", "configure": "Move or configure {item}", "remove": "Remove {item}", - "dropIntoZone": "Move into the {zone} section", - "autoHideOnScroll": "Auto-hide on scroll", - "autoHideOnScrollDescription": "Slides the header away while scrolling down and brings it back when scrolling up" + "dropIntoZone": "Move into the {zone} section" }, "preview": { "board": "Dashboard preview for {name}", diff --git a/packages/validation/src/header-preferences.ts b/packages/validation/src/header-preferences.ts index 3c2896a59..1235809b5 100644 --- a/packages/validation/src/header-preferences.ts +++ b/packages/validation/src/header-preferences.ts @@ -105,7 +105,6 @@ 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(); @@ -156,7 +155,6 @@ const migrateLegacyItems = ( visible, searchDisplay: "input", logoDisplay: "logoAndText", - autoHideOnScroll: false, zones: { left: zones.left.map(createBuiltinHeaderItem), center: zones.center.map(createBuiltinHeaderItem), @@ -211,7 +209,6 @@ export const defaultHeaderPreferences = { visible: true, searchDisplay: "input", logoDisplay: "logoAndText", - autoHideOnScroll: false, zones: { left: [createBuiltinHeaderItem("logo")], center: [createBuiltinHeaderItem("search")], diff --git a/scripts/generate-openapi-schema.mts b/scripts/generate-openapi-schema.mts deleted file mode 100644 index 4ab47e67a..000000000 --- a/scripts/generate-openapi-schema.mts +++ /dev/null @@ -1,8 +0,0 @@ -import { writeFile } from "node:fs/promises"; - -import { openApiDocument } from "../packages/api/src/open-api"; - -const baseUrl = "http://localhost:3000"; -const generated = openApiDocument(baseUrl); - -await writeFile("apps/docs/static/api/open-api-schema.json", `${JSON.stringify(generated, null, 2)}\n`, "utf8");