diff options
Diffstat (limited to 'packages/ui/src/hooks')
| -rw-r--r-- | packages/ui/src/hooks/index.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/hooks/use-element-height.ts | 25 | ||||
| -rw-r--r-- | packages/ui/src/hooks/use-page-visible.ts | 11 | ||||
| -rw-r--r-- | packages/ui/src/hooks/use-reduced-motion.ts | 17 |
4 files changed, 9 insertions, 46 deletions
diff --git a/packages/ui/src/hooks/index.ts b/packages/ui/src/hooks/index.ts index 4a218024d..0fcf6f086 100644 --- a/packages/ui/src/hooks/index.ts +++ b/packages/ui/src/hooks/index.ts @@ -1,5 +1,3 @@ export * from "./use-filtered-list" export * from "./create-auto-scroll" -export * from "./use-element-height" export * from "./use-reduced-motion" -export * from "./use-page-visible" diff --git a/packages/ui/src/hooks/use-element-height.ts b/packages/ui/src/hooks/use-element-height.ts deleted file mode 100644 index a9f06ec8b..000000000 --- a/packages/ui/src/hooks/use-element-height.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createEffect, createSignal, onCleanup, type Accessor } from "solid-js" - -/** - * Tracks an element's height via ResizeObserver. - * Returns a reactive signal that updates whenever the element resizes. - */ -export function useElementHeight( - ref: Accessor<HTMLElement | undefined> | (() => HTMLElement | undefined), - initial = 0, -): Accessor<number> { - const [height, setHeight] = createSignal(initial) - - createEffect(() => { - const el = ref() - if (!el) return - setHeight(el.getBoundingClientRect().height) - const observer = new ResizeObserver(() => { - setHeight(el.getBoundingClientRect().height) - }) - observer.observe(el) - onCleanup(() => observer.disconnect()) - }) - - return height -} diff --git a/packages/ui/src/hooks/use-page-visible.ts b/packages/ui/src/hooks/use-page-visible.ts deleted file mode 100644 index 88788ef4a..000000000 --- a/packages/ui/src/hooks/use-page-visible.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createSignal } from "solid-js" - -export const pageVisible = /* @__PURE__ */ (() => { - const [visible, setVisible] = createSignal(true) - if (typeof document !== "undefined") { - const sync = () => setVisible(document.visibilityState !== "hidden") - sync() - document.addEventListener("visibilitychange", sync) - } - return visible -})() diff --git a/packages/ui/src/hooks/use-reduced-motion.ts b/packages/ui/src/hooks/use-reduced-motion.ts index 7fa815bbd..0038760ec 100644 --- a/packages/ui/src/hooks/use-reduced-motion.ts +++ b/packages/ui/src/hooks/use-reduced-motion.ts @@ -1,9 +1,10 @@ -import { createSignal } from "solid-js" +import { isHydrated } from "@solid-primitives/lifecycle" +import { createMediaQuery } from "@solid-primitives/media" +import { createHydratableSingletonRoot } from "@solid-primitives/rootless" -export const prefersReducedMotion = /* @__PURE__ */ (() => { - if (typeof window === "undefined") return () => false - const mql = window.matchMedia("(prefers-reduced-motion: reduce)") - const [reduced, setReduced] = createSignal(mql.matches) - mql.addEventListener("change", () => setReduced(mql.matches)) - return reduced -})() +const query = "(prefers-reduced-motion: reduce)" + +export const useReducedMotion = createHydratableSingletonRoot(() => { + const value = createMediaQuery(query) + return () => !isHydrated() || value() +}) |
