import { createMedia as artsyCreateMedia } from "@artsy/fresnel" import { useContextSelector } from "use-context-selector" import { Size, createSizeProvider } from "./createSizeProvider" type CreateMediaOptions> = { initialWindowSize?: TSize } export function createMedia< TBreakpoints extends Record, TSize extends Partial, >(breakpoints: TBreakpoints, options: CreateMediaOptions = {}) { const { createMediaStyle, Media, MediaContextProvider } = artsyCreateMedia({ breakpoints, }) const { SizeProvider, SizeContext } = createSizeProvider(options) type SizeWithInitialSize = TSize & Partial function useSizeContextSelector( selector: (value: SizeWithInitialSize) => Selected, ) { return useContextSelector( SizeContext, selector, ) } return { createMediaStyle, breakpoints, SizeProvider, useSizeContextSelector, Media, MediaContextProvider, } }