chore: refactoring ui hooks

This commit is contained in:
Adam
2026-03-08 06:34:02 -05:00
parent c797b60069
commit f386137fba
16 changed files with 123 additions and 129 deletions

View File

@@ -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"

View File

@@ -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
}

View File

@@ -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
})()

View File

@@ -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()
})