type Values = T[keyof T]; type KVPairs = Values<{ [Property in keyof T]: [Property, T[Property]]; }>; export type ConditionRange = readonly [boolean, T, T, boolean]; export type Condition = T | "{false}" | "{true}"; export type Conditional = { [Property in keyof T]: Condition; }; export type DiscreteFeatures = { "any-hover": "none" | "hover"; "any-pointer": "none" | "coarse" | "fine"; "color-gamut": readonly [ belowSrgb: boolean, srgbAndBelowP3: boolean, p3AndBelowRec2020: boolean, rec2020AndAbove: boolean ]; grid: 0 | 1; hover: "none" | "hover"; "overflow-block": "none" | "scroll" | "paged"; "overflow-inline": "none" | "scroll"; pointer: "none" | "coarse" | "fine"; scan: "interlace" | "progressive"; update: "none" | "slow" | "fast"; "display-mode": "fullscreen" | "standalone" | "minimal-ui" | "browser"; "dynamic-range": "standard" | "high"; "environment-blending": "opaque" | "additive" | "subtractive"; "forced-colors": "none" | "active"; "inverted-colors": "none" | "inverted"; "nav-controls": "none" | "back"; "prefers-color-scheme": "light" | "dark"; "prefers-contrast": "no-preference" | "less" | "more" | "custom"; "prefers-reduced-data": "no-preference" | "reduce"; "prefers-reduced-motion": "no-preference" | "reduce"; "prefers-reduced-transparency": "no-preference" | "reduce"; scripting: "none" | "initial-only" | "enabled"; "video-color-gamut": readonly [ belowSrgb: boolean, srgbAndBelowP3: boolean, p3AndBelowRec2020: boolean, rec2020AndAbove: boolean ]; "video-dynamic-range": "standard" | "high"; }; export type RangeRatioFeatures = { "aspect-ratio": ConditionRange; "device-aspect-ratio": ConditionRange; }; export type RangeNumberFeatures = { color: ConditionRange; "color-index": ConditionRange; "device-height": ConditionRange; "device-width": ConditionRange; height: ConditionRange; monochrome: ConditionRange; resolution: ConditionRange; width: ConditionRange; "horizontal-viewport-segments": ConditionRange; "vertical-viewport-segments": ConditionRange; }; export type RangeFeatures = RangeRatioFeatures & RangeNumberFeatures; export type MediaFeatures = DiscreteFeatures & RangeFeatures; export type Perm = Partial & { "media-type": "screen" | "print" | "not-screen" | "not-print" | "all" | "{false}"; "invalid-features": string[]; }>; export type ConditionPair = KVPairs>; export type DiscreteConditionPair = KVPairs>; export type RangeConditionPair = KVPairs>; export type RangeRatioConditionPair = KVPairs>; export type RangeNumberConditionPair = KVPairs>; export declare const DISCRETE_FEATURES: { readonly "any-hover": { readonly none: 1; readonly hover: 1; }; readonly "any-pointer": { readonly none: 1; readonly coarse: 1; readonly fine: 1; }; readonly "color-gamut": { readonly srgb: 1; readonly p3: 1; readonly rec2020: 1; }; readonly grid: { readonly 0: 1; readonly 1: 1; }; readonly hover: { readonly none: 1; readonly hover: 1; }; readonly "overflow-block": { readonly none: 1; readonly scroll: 1; readonly paged: 1; }; readonly "overflow-inline": { readonly none: 1; readonly scroll: 1; }; readonly pointer: { readonly none: 1; readonly coarse: 1; readonly fine: 1; }; readonly scan: { readonly interlace: 1; readonly progressive: 1; }; readonly update: { readonly none: 1; readonly slow: 1; readonly fast: 1; }; readonly "display-mode": { readonly fullscreen: 1; readonly standalone: 1; readonly "minimal-ui": 1; readonly browser: 1; }; readonly "dynamic-range": { readonly standard: 1; readonly high: 1; }; readonly "environment-blending": { readonly opaque: 1; readonly additive: 1; readonly subtractive: 1; }; readonly "forced-colors": { readonly none: 1; readonly active: 1; }; readonly "inverted-colors": { readonly none: 1; readonly inverted: 1; }; readonly "nav-controls": { readonly none: 1; readonly back: 1; }; readonly "prefers-color-scheme": { readonly light: 1; readonly dark: 1; }; readonly "prefers-contrast": { readonly "no-preference": 1; readonly less: 1; readonly more: 1; readonly custom: 1; }; readonly "prefers-reduced-data": { readonly "no-preference": 1; readonly reduce: 1; }; readonly "prefers-reduced-motion": { readonly "no-preference": 1; readonly reduce: 1; }; readonly "prefers-reduced-transparency": { readonly "no-preference": 1; readonly reduce: 1; }; readonly scripting: { readonly none: 1; readonly "initial-only": 1; readonly enabled: 1; }; readonly "video-color-gamut": { readonly srgb: 1; readonly p3: 1; readonly rec2020: 1; }; readonly "video-dynamic-range": { readonly standard: 1; readonly high: 1; }; }; export declare const RANGE_NUMBER_FEATURES: { readonly color: { readonly feature: "color"; readonly type: "integer"; readonly bounds: readonly [true, 0, number, false]; }; readonly "color-index": { readonly feature: "color-index"; readonly type: "integer"; readonly bounds: readonly [true, 0, number, false]; }; readonly monochrome: { readonly feature: "monochrome"; readonly type: "integer"; readonly bounds: readonly [true, 0, number, false]; }; readonly "device-height": { readonly feature: "device-height"; readonly type: "length"; readonly bounds: readonly [true, 0, number, false]; }; readonly "device-width": { readonly feature: "device-width"; readonly type: "length"; readonly bounds: readonly [true, 0, number, false]; }; readonly height: { readonly feature: "height"; readonly type: "length"; readonly bounds: readonly [true, 0, number, false]; }; readonly width: { readonly feature: "width"; readonly type: "length"; readonly bounds: readonly [true, 0, number, false]; }; readonly resolution: { readonly feature: "resolution"; readonly type: "resolution"; readonly bounds: readonly [true, 0, number, false]; }; readonly "horizontal-viewport-segments": { readonly feature: "horizontal-viewport-segments"; readonly type: "integer"; readonly bounds: readonly [true, 0, number, false]; }; readonly "vertical-viewport-segments": { readonly feature: "vertical-viewport-segments"; readonly type: "integer"; readonly bounds: readonly [true, 0, number, false]; }; }; export declare const RANGE_RATIO_FEATURES: { readonly "aspect-ratio": { readonly feature: "aspect-ratio"; readonly type: "ratio"; readonly bounds: readonly [false, readonly [0, 1], readonly [number, 1], false]; }; readonly "device-aspect-ratio": { readonly feature: "device-aspect-ratio"; readonly type: "ratio"; readonly bounds: readonly [false, readonly [0, 1], readonly [number, 1], false]; }; }; export declare const permToConditionPairs: (perm: Perm) => ConditionPair[]; export declare const hasDiscreteKey: (pair: ConditionPair) => pair is DiscreteConditionPair; export declare const isDiscreteKey: (key: string) => key is keyof DiscreteFeatures; export declare const hasRangeRatioKey: (pair: ConditionPair) => pair is RangeRatioConditionPair; export declare const isRangeRatioKey: (key: string) => key is keyof RangeRatioFeatures; export declare const hasRangeNumberKey: (pair: ConditionPair) => pair is RangeNumberConditionPair; export declare const isRangeNumberKey: (key: string) => key is keyof RangeNumberFeatures; export declare const hasRangeKey: (pair: ConditionPair) => pair is RangeConditionPair; export declare const isRangeKey: (key: string) => key is keyof RangeNumberFeatures; export declare const isPermKey: (key: string) => key is keyof DiscreteFeatures | keyof RangeRatioFeatures | keyof RangeNumberFeatures | "media-type" | "invalid-features"; export declare const isFeatureKey: (key: string) => key is keyof DiscreteFeatures | keyof RangeRatioFeatures | keyof RangeNumberFeatures; export declare const attachPair: (obj: T, pair: ConditionPair) => void; export declare const andRanges: (...ranges: ("{false}" | "{true}" | ConditionRange)[]) => "{false}" | "{true}" | ConditionRange; export declare const boundRange: (pair: T) => T[1]; export declare const binaryOrRanges: (a: ConditionRange, b: ConditionRange) => ConditionRange[]; export declare const notRatioRange: (pair: RangeRatioConditionPair) => ConditionRange[] | "{false}"; export declare function notNumberRange(pair: RangeNumberConditionPair): ConditionRange[] | "{false}"; export {};