learn and share notes on atproto (wip) 馃
malfestio.stormlightlabs.org/
readability
solid
axum
atproto
srs
1import { createContext, type ParentComponent, useContext } from "solid-js";
2import type { DensityMode } from "./design-tokens";
3import { prefStore } from "./store";
4
5/**
6 * Density Context Provider
7 *
8 * Provides density mode to all child components.
9 * Reads from user preferences and applies the appropriate density class to the container.
10 *
11 * Components can override density locally via props.
12 */
13const DensityContext = createContext<DensityMode>("comfortable");
14
15export const DensityProvider: ParentComponent = (props) => {
16 const density = () => (prefStore.densityMode?.() as DensityMode) || "comfortable";
17
18 return (
19 <DensityContext.Provider value={density()}>
20 <div class={`density-${density()}`}>{props.children}</div>
21 </DensityContext.Provider>
22 );
23};
24
25export const useDensity = () => useContext(DensityContext);