import { css } from 'styled-components'; export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'; export type Responsive = Partial>; declare const isResponsiveKey: unique symbol; declare const responsiveValue: unique symbol; /** * An opaque object that wraps a responsive value. we use symbols to make it * difficult to access responsive value directly. */ export declare class OpaqueResponsive { [isResponsiveKey]: symbol; [responsiveValue]: Responsive; constructor(value: Responsive); } /** * Either a single value or a responsive object of a certain type */ export type ValueOrResponsive = T | Responsive; /** * Creates an opaque object that wraps a responsive value */ export declare function wrapResponsive(value?: ValueOrResponsive | OpaqueResponsive): OpaqueResponsive; /** * Unwraps a responsive value from a wrapped responsive object and throws an error * if the value is not a OpaqueResponsive object. */ export declare function unwrapResponsive(value: OpaqueResponsive): Responsive; /** * Merge multiple responsive values into a single responsive value * where the values are merged together */ export declare function mergeResponsive(values: Array>): OpaqueResponsive; /** * Merge multiple responsive values into a unified responsive value * with keys that are merged together */ export declare function mergeNamedResponsive(values: { [K in keyof T]: OpaqueResponsive; }): OpaqueResponsive>; /** * Merge multiple responsive values into a single responsive value * where the values are merged together with values cascading from * smaller breakpoints to larger breakpoints like in CSS media queries * * For example, if we have the following values: * - { xs: 10, sm: 20, md: 30 } * - { xs: 5, md: 15, lg: 15 } * - { xxl: 30 } * * we would get the following merged values: * - { xs: 5, md: 15, xxl: 30 } */ export declare function mergeResponsivePreferringLastValue(values: Array>): OpaqueResponsive; /** * Map a responsive value to a new value */ export declare function mapResponsive(values: OpaqueResponsive, mapper: (value: T, breakpoint: Breakpoint) => R): OpaqueResponsive; /** * Reduce multiple responsive values into a single responsive value */ export declare function reduceResponsive(values: OpaqueResponsive, reducer: (acc: R, value: T, key: Breakpoint) => R, initialValue: R): R; /** * Predicate to check if an opaque object has values */ export declare function hasResponsiveValue(value: OpaqueResponsive): boolean; /** * Predicate to check if a value is a responsive object */ export declare function isResponsive(value: ValueOrResponsive): boolean; /** * Converts a value or responsive value into a CSS string using the * mediaForBreakpoint helper to generate media queries for each breakpoint * and the mapValue function to generate the CSS for each value */ export declare function cssForResponsive(values: OpaqueResponsive, mapValue: (value: T, key: Breakpoint, object: Responsive) => ReturnType | undefined): ReturnType; /** * Generates CSS for a specific property that can be responsive. A transform function is required * when the property value is not a string, otherwise an error will be thrown. */ export declare function cssForResponsiveProp(propName: string, propValue: OpaqueResponsive, transform: (value: T) => string): ReturnType; export declare function cssForResponsiveProp(propName: string, propValue: OpaqueResponsive, transform?: (value: T) => string): ReturnType; export {};