| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566 |
- import {List} from 'immutable';
- import {Value} from './index';
- /** The HSL color space name. */
- export type ColorSpaceHsl = 'hsl';
- /** The HSL color space channel names. */
- export type ChannelNameHsl = 'hue' | 'saturation' | 'lightness' | 'alpha';
- /** The HWB color space name. */
- export type ColorSpaceHwb = 'hwb';
- /** The HWB color space channel names. */
- export type ChannelNameHwb = 'hue' | 'whiteness' | 'blackness' | 'alpha';
- /** The Lab / Oklab color space names. */
- export type ColorSpaceLab = 'lab' | 'oklab';
- /** The Lab / Oklab color space channel names. */
- export type ChannelNameLab = 'lightness' | 'a' | 'b' | 'alpha';
- /** The LCH / Oklch color space names. */
- export type ColorSpaceLch = 'lch' | 'oklch';
- /** The LCH / Oklch color space channel names. */
- export type ChannelNameLch = 'lightness' | 'chroma' | 'hue' | 'alpha';
- /** Names of color spaces with RGB channels. */
- export type ColorSpaceRgb =
- | 'a98-rgb'
- | 'display-p3'
- | 'prophoto-rgb'
- | 'rec2020'
- | 'rgb'
- | 'srgb'
- | 'srgb-linear';
- /** RGB channel names. */
- export type ChannelNameRgb = 'red' | 'green' | 'blue' | 'alpha';
- /** Names of color spaces with XYZ channels. */
- export type ColorSpaceXyz = 'xyz' | 'xyz-d50' | 'xyz-d65';
- /** XYZ channel names. */
- export type ChannelNameXyz = 'x' | 'y' | 'z' | 'alpha';
- /** All supported color space channel names. */
- export type ChannelName =
- | ChannelNameHsl
- | ChannelNameHwb
- | ChannelNameLab
- | ChannelNameLch
- | ChannelNameRgb
- | ChannelNameXyz;
- /** All supported color space names. */
- export type KnownColorSpace =
- | ColorSpaceHsl
- | ColorSpaceHwb
- | ColorSpaceLab
- | ColorSpaceLch
- | ColorSpaceRgb
- | ColorSpaceXyz;
- /** Polar color space names (HSL, HWB, LCH, and Oklch spaces). */
- export type PolarColorSpace = ColorSpaceHsl | ColorSpaceHwb | ColorSpaceLch;
- /** Rectangular color space names (Lab, Oklab, RGB, and XYZ spaces). */
- export type RectangularColorSpace = Exclude<KnownColorSpace, PolarColorSpace>;
- /**
- * Methods by which two hues are adjusted when interpolating between polar
- * colors.
- */
- export type HueInterpolationMethod =
- | 'decreasing'
- | 'increasing'
- | 'longer'
- | 'shorter';
- /**
- * Methods by which colors in bounded spaces can be mapped to within their
- * gamut.
- *
- * * `local-minde`: The algorithm specified in [the original Color Level 4
- * candidate recommendation]. This maps in the Oklch color space, using the
- * [deltaEOK] color difference formula and the [local-MINDE] improvement.
- *
- * * `clip`: Clamp each color channel that's outside the gamut to the minimum or
- * maximum value for that channel. This algorithm will produce poor visual
- * results, but it may be useful to match the behavior of other situations in
- * which a color can be clipped.
- *
- * [the original Color Level 4 candidate recommendation]: https://www.w3.org/TR/2024/CRD-css-color-4-20240213/#css-gamut-mapping
- * [deltaEOK]: https://www.w3.org/TR/2024/CRD-css-color-4-20240213/#color-difference-OK
- * [local-MINDE]: https://www.w3.org/TR/2024/CRD-css-color-4-20240213/#GM-chroma-local-MINDE
- */
- export type GamutMapMethod = 'clip' | 'local-minde';
- /**
- * Sass's [color type](https://sass-lang.com/documentation/values/colors).
- *
- * No matter what representation was originally used to create this color, all
- * of its channels are accessible.
- *
- * @category Custom Function
- */
- export class SassColor extends Value {
- /**
- * Creates an [RGB color].
- *
- * If `space` is missing, **only** `undefined` should be used to indicate that
- * `alpha` isn't passed. If `null` is used instead, it will be treated as a
- * [missing component]. See [breaking changes] for details.
- *
- * If `space` is defined and `null` is passed for any component, it will be
- * treated as a [missing component].
- *
- * [RGB color]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- * [breaking changes]: /documentation/breaking-changes/null-alpha
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- red: number | null;
- green: number | null;
- blue: number | null;
- alpha?: number | null;
- space?: 'rgb';
- });
- /**
- * Creates an [HSL color].
- *
- * If `space` is missing, **only** `undefined` should be used to indicate that
- * `alpha` isn't passed. If `null` is used instead, it will be treated as a
- * [missing component]. See [breaking changes] for details.
- *
- * If `space` is defined and `null` is passed for any component, it will be
- * treated as a [missing component].
- *
- * [HSL color]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- * [breaking changes]: /documentation/breaking-changes/null-alpha
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- hue: number | null;
- saturation: number | null;
- lightness: number | null;
- alpha?: number | null;
- space?: ColorSpaceHsl;
- });
- /**
- * Creates an [HWB color].
- *
- * If `space` is missing, **only** `undefined` should be used to indicate that
- * `alpha` isn't passed. If `null` is used instead, it will be treated as a
- * [missing component]. See [breaking changes] for details.
- *
- * If `space` is defined and `null` is passed for any component, it will be
- * treated as a [missing component].
- *
- * [HWB color]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hwb
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- * [breaking changes]: /documentation/breaking-changes/null-alpha
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- hue: number | null;
- whiteness: number | null;
- blackness: number | null;
- alpha?: number | null;
- space?: ColorSpaceHwb;
- });
- /**
- * Creates a [Lab] or [Oklab] color.
- *
- * If `null` is passed for any component, it will be treated as a [missing
- * component].
- *
- * [Lab]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lab
- * [Oklab]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklab
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- lightness: number | null;
- a: number | null;
- b: number | null;
- alpha?: number | null;
- space: ColorSpaceLab;
- });
- /**
- * Creates an [LCH] or [Oklch] color.
- *
- * If `null` is passed for any component, it will be treated as a [missing
- * component].
- *
- * [LCH]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lch
- * [Oklch]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- lightness: number | null;
- chroma: number | null;
- hue: number | null;
- alpha?: number | null;
- space: ColorSpaceLch;
- });
- /**
- * Creates a color in a predefined [RGB color space].
- *
- * If `null` is passed for any component, it will be treated as a [missing
- * component].
- *
- * [RGB color space]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color#using_predefined_colorspaces_with_color
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- red: number | null;
- green: number | null;
- blue: number | null;
- alpha?: number | null;
- space: Exclude<ColorSpaceRgb, 'rgb'>;
- });
- /**
- * Creates a color in a predefined [XYZ color space].
- *
- * If `null` is passed for any component, it will be treated as a [missing
- * component].
- *
- * [XYZ color space]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color#using_the_xyz_colorspace_with_color
- * [missing component]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- constructor(options: {
- x: number | null;
- y: number | null;
- z: number | null;
- alpha?: number | null;
- space: ColorSpaceXyz;
- });
- /** The name of this color's space. */
- get space(): KnownColorSpace;
- /**
- * Returns a new color that's the result of converting this color to the
- * specified `space`.
- */
- toSpace(space: KnownColorSpace): SassColor;
- /**
- * A boolean indicating whether this color is in a legacy color space (`rgb`,
- * `hsl`, or `hwb`).
- */
- get isLegacy(): boolean;
- /**
- * Returns a boolean indicating whether this color is in-gamut (as opposed to
- * having one or more of its channels out of bounds) for the specified
- * `space`, or its current color space if `space` is not specified.
- */
- isInGamut(space?: KnownColorSpace): boolean;
- /**
- * Returns a copy of this color, modified so it is in-gamut for the specified
- * `space`—or the current color space if `space` is not specified—using
- * `method` to map out-of-gamut colors into the desired gamut.
- */
- toGamut(options: {
- space?: KnownColorSpace;
- method: GamutMapMethod;
- }): SassColor;
- /**
- * A list of this color's channel values (excluding alpha), with [missing
- * channels] converted to `null`.
- *
- * [missing channels]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- */
- get channelsOrNull(): List<number | null>;
- /**
- * A list of this color's channel values (excluding alpha), with [missing
- * channels] converted to `0`.
- *
- * [missing channels]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- */
- get channels(): List<number>;
- /**
- * Returns the value of a single specified `channel` of this color, with
- * [missing channels] converted to `0`.
- *
- * [missing channels]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `channel` is not `alpha` or a channel in this color's
- * space.
- */
- channel(channel: ChannelName): number;
- /**
- * Returns the value of a single specified `channel` of this color after
- * converting this color to the specified `space`, with [missing channels]
- * converted to `0`.
- *
- * [missing channels]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- *
- * @throws `Error` if `channel` is not `alpha` or a channel in `space`.
- */
- channel(channel: ChannelNameHsl, options: {space: ColorSpaceHsl}): number;
- channel(channel: ChannelNameHwb, options: {space: ColorSpaceHwb}): number;
- channel(channel: ChannelNameLab, options: {space: ColorSpaceLab}): number;
- channel(channel: ChannelNameLch, options: {space: ColorSpaceLch}): number;
- channel(channel: ChannelNameRgb, options: {space: ColorSpaceRgb}): number;
- channel(channel: ChannelNameXyz, options: {space: ColorSpaceXyz}): number;
- /** This color's alpha channel, between `0` and `1`. */
- get alpha(): number;
- /**
- * Returns a boolean indicating whether a given channel value is a [missing
- * channel].
- *
- * [missing channel]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#missing_color_components
- */
- isChannelMissing(channel: ChannelName): boolean;
- /**
- * Returns a boolean indicating whether a given `channel` is [powerless] in
- * this color. This is a special state that's defined for individual color
- * spaces, which indicates that a channel's value won't affect how a color is
- * displayed.
- *
- * [powerless]: https://www.w3.org/TR/css-color-4/#powerless
- */
- isChannelPowerless(channel: ChannelName): boolean;
- isChannelPowerless(
- channel: ChannelNameHsl,
- options?: {space: ColorSpaceHsl}
- ): boolean;
- isChannelPowerless(
- channel: ChannelNameHwb,
- options?: {space: ColorSpaceHwb}
- ): boolean;
- isChannelPowerless(
- channel: ChannelNameLab,
- options?: {space: ColorSpaceLab}
- ): boolean;
- isChannelPowerless(
- channel: ChannelNameLch,
- options?: {space: ColorSpaceLch}
- ): boolean;
- isChannelPowerless(
- channel: ChannelNameRgb,
- options?: {space: ColorSpaceRgb}
- ): boolean;
- isChannelPowerless(
- channel: ChannelNameXyz,
- options?: {space: ColorSpaceXyz}
- ): boolean;
- /**
- * Returns a color partway between this color and `color2` according to
- * `method`, as defined by the CSS Color 4 [color interpolation] procedure.
- *
- * [color interpolation]: https://www.w3.org/TR/css-color-4/#interpolation
- *
- * If `method` is missing and this color is in a rectangular color space (Lab,
- * Oklab, RGB, and XYZ spaces), `method` defaults to the color space of this
- * color. Otherwise, `method` defaults to a space separated list containing
- * the color space of this color and the string "shorter".
- *
- * The `weight` is a number between 0 and 1 that indicates how much of this
- * color should be in the resulting color. If omitted, it defaults to 0.5.
- */
- interpolate(
- color2: SassColor,
- options?: {
- weight?: number;
- method?: HueInterpolationMethod;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's HSL channels.
- *
- * @throws `Error` if `space` is missing and this color is not in a legacy
- * color space (`rgb`, `hsl`, or `hwb`).
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameHsl]?: number | null;
- } & {
- space?: ColorSpaceHsl;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's HWB channels.
- *
- * @throws `Error` if `space` is missing and this color is not in a legacy
- * color space (`rgb`, `hsl`, or `hwb`).
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameHwb]?: number | null;
- } & {
- space?: ColorSpaceHwb;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's Lab channels.
- *
- * @throws `Error` if `space` is missing and this color is not in the Lab or
- * Oklab color spaces.
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameLab]?: number | null;
- } & {
- space?: ColorSpaceLab;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's LCH channels.
- *
- * @throws `Error` if `space` is missing and this color is not in the LCH or
- * Oklch color spaces.
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameLch]?: number | null;
- } & {
- space?: ColorSpaceLch;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's RGB channels.
- *
- * @throws `Error` if `space` is missing and this color is not in a legacy
- * color space (`rgb`, `hsl`, or `hwb`).
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameRgb]?: number | null;
- } & {
- space?: ColorSpaceRgb;
- }
- ): SassColor;
- /**
- * Returns a new color that's the result of changing one or more of this
- * color's XYZ channels.
- *
- * @throws `Error` if `space` is missing and this color is not in an XYZ color
- * space.
- * @throws `Error` if `alpha` is set and isn't `null` or a number between `0`
- * and `1`.
- */
- change(
- options: {
- [key in ChannelNameXyz]?: number | null;
- } & {
- space?: ColorSpaceXyz;
- }
- ): SassColor;
- /**
- * This color's red channel in the RGB color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get red(): number;
- /**
- * This color's green channel in the RGB color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get green(): number;
- /**
- * This color's blue channel in the RGB color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get blue(): number;
- /**
- * This color's hue in the HSL color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get hue(): number;
- /**
- * This color's saturation in the HSL color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get saturation(): number;
- /**
- * This color's lightness in the HSL color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get lightness(): number;
- /**
- * This color's whiteness in the HWB color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get whiteness(): number;
- /**
- * This color's blackness in the HWB color space.
- *
- * @deprecated Use {@link channel} instead.
- */
- get blackness(): number;
- }
|