Compare commits
6 Commits
612f1ba751
...
1edc74daaf
Author | SHA1 | Date | |
---|---|---|---|
|
1edc74daaf | ||
|
0eb00122c8 | ||
|
deed113eae | ||
|
8ceeac545d | ||
|
a012f28c47 | ||
|
0f343c606e |
38
color-module/src/color_differ/cam16jch.rs
Normal file
38
color-module/src/color_differ/cam16jch.rs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
use palette::cam16::Cam16Jch;
|
||||||
|
use serde::Serialize;
|
||||||
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
use super::{ColorDifference, Differ};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct HctDiffference {
|
||||||
|
pub hue: Differ,
|
||||||
|
pub chroma: Differ,
|
||||||
|
pub lightness: Differ,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ColorDifference for Cam16Jch<f32> {
|
||||||
|
type Difference = HctDiffference;
|
||||||
|
|
||||||
|
fn difference(&self, other: &Self) -> Self::Difference {
|
||||||
|
let hue = self.hue.into_positive_degrees() - other.hue.into_positive_degrees();
|
||||||
|
let chroma = self.chroma - other.chroma;
|
||||||
|
let lightness = self.lightness - other.lightness;
|
||||||
|
|
||||||
|
HctDiffference {
|
||||||
|
hue: Differ {
|
||||||
|
delta: hue,
|
||||||
|
percent: hue / self.hue.into_positive_degrees(),
|
||||||
|
},
|
||||||
|
chroma: Differ {
|
||||||
|
delta: chroma,
|
||||||
|
percent: chroma / self.chroma,
|
||||||
|
},
|
||||||
|
lightness: Differ {
|
||||||
|
delta: lightness,
|
||||||
|
percent: lightness / self.lightness,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
color-module/src/color_differ/hsl.rs
Normal file
38
color-module/src/color_differ/hsl.rs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
use palette::Hsl;
|
||||||
|
use serde::Serialize;
|
||||||
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
use super::{ColorDifference, Differ};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct HSLDifference {
|
||||||
|
pub hue: Differ,
|
||||||
|
pub saturation: Differ,
|
||||||
|
pub lightness: Differ,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ColorDifference for Hsl {
|
||||||
|
type Difference = HSLDifference;
|
||||||
|
|
||||||
|
fn difference(&self, other: &Self) -> Self::Difference {
|
||||||
|
let hue = self.hue.into_positive_degrees() - other.hue.into_positive_degrees();
|
||||||
|
let saturation = self.saturation - other.saturation;
|
||||||
|
let lightness = self.lightness - other.lightness;
|
||||||
|
|
||||||
|
HSLDifference {
|
||||||
|
hue: Differ {
|
||||||
|
delta: hue,
|
||||||
|
percent: hue / self.hue.into_positive_degrees(),
|
||||||
|
},
|
||||||
|
saturation: Differ {
|
||||||
|
delta: saturation,
|
||||||
|
percent: saturation / self.saturation,
|
||||||
|
},
|
||||||
|
lightness: Differ {
|
||||||
|
delta: lightness,
|
||||||
|
percent: lightness / self.lightness,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
color-module/src/color_differ/mod.rs
Normal file
20
color-module/src/color_differ/mod.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
use serde::Serialize;
|
||||||
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
pub mod cam16jch;
|
||||||
|
pub mod hsl;
|
||||||
|
pub mod oklch;
|
||||||
|
pub mod rgb;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct Differ {
|
||||||
|
pub delta: f32,
|
||||||
|
pub percent: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ColorDifference {
|
||||||
|
type Difference;
|
||||||
|
|
||||||
|
fn difference(&self, other: &Self) -> Self::Difference;
|
||||||
|
}
|
38
color-module/src/color_differ/oklch.rs
Normal file
38
color-module/src/color_differ/oklch.rs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
use palette::Oklch;
|
||||||
|
use serde::Serialize;
|
||||||
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
use super::{ColorDifference, Differ};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct OklchDifference {
|
||||||
|
pub hue: Differ,
|
||||||
|
pub chroma: Differ,
|
||||||
|
pub lightness: Differ,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ColorDifference for Oklch {
|
||||||
|
type Difference = OklchDifference;
|
||||||
|
|
||||||
|
fn difference(&self, other: &Self) -> Self::Difference {
|
||||||
|
let hue = self.hue.into_positive_degrees() - other.hue.into_positive_degrees();
|
||||||
|
let chroma = self.chroma - other.chroma;
|
||||||
|
let lightness = self.l - other.l;
|
||||||
|
|
||||||
|
OklchDifference {
|
||||||
|
hue: Differ {
|
||||||
|
delta: hue,
|
||||||
|
percent: hue / self.hue.into_positive_degrees(),
|
||||||
|
},
|
||||||
|
chroma: Differ {
|
||||||
|
delta: chroma,
|
||||||
|
percent: chroma / self.chroma,
|
||||||
|
},
|
||||||
|
lightness: Differ {
|
||||||
|
delta: lightness,
|
||||||
|
percent: lightness / self.l,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
color-module/src/color_differ/rgb.rs
Normal file
38
color-module/src/color_differ/rgb.rs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
use palette::Srgb;
|
||||||
|
use serde::Serialize;
|
||||||
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
use super::{ColorDifference, Differ};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct RGBDifference {
|
||||||
|
pub r: Differ,
|
||||||
|
pub g: Differ,
|
||||||
|
pub b: Differ,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ColorDifference for Srgb {
|
||||||
|
type Difference = RGBDifference;
|
||||||
|
|
||||||
|
fn difference(&self, other: &Self) -> Self::Difference {
|
||||||
|
let r = self.red - other.red;
|
||||||
|
let g = self.green - other.green;
|
||||||
|
let b = self.blue - other.blue;
|
||||||
|
|
||||||
|
RGBDifference {
|
||||||
|
r: Differ {
|
||||||
|
delta: r,
|
||||||
|
percent: r / self.red,
|
||||||
|
},
|
||||||
|
g: Differ {
|
||||||
|
delta: g,
|
||||||
|
percent: g / self.green,
|
||||||
|
},
|
||||||
|
b: Differ {
|
||||||
|
delta: b,
|
||||||
|
percent: b / self.blue,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
use std::{str::FromStr, sync::Arc};
|
use std::{str::FromStr, sync::Arc};
|
||||||
|
|
||||||
use color_card::Category;
|
use color_card::Category;
|
||||||
|
use color_differ::ColorDifference;
|
||||||
use palette::{
|
use palette::{
|
||||||
cam16::{Cam16Jch, Parameters},
|
cam16::{Cam16Jch, Parameters},
|
||||||
color_difference::Wcag21RelativeContrast,
|
color_difference::Wcag21RelativeContrast,
|
||||||
@ -12,6 +13,7 @@ use strum::IntoEnumIterator;
|
|||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
mod color_card;
|
mod color_card;
|
||||||
|
mod color_differ;
|
||||||
mod errors;
|
mod errors;
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
@ -422,3 +424,75 @@ pub fn search_color_cards(tag: String, category: Option<String>) -> Result<JsVal
|
|||||||
|
|
||||||
serde_wasm_bindgen::to_value(&cards).map_err(|e| e.to_string())
|
serde_wasm_bindgen::to_value(&cards).map_err(|e| e.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn differ_in_rgb(
|
||||||
|
color: &str,
|
||||||
|
other: &str,
|
||||||
|
) -> Result<color_differ::rgb::RGBDifference, errors::ColorError> {
|
||||||
|
let srgb = Srgb::from_str(color)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(color.to_string()))?
|
||||||
|
.into_format::<f32>();
|
||||||
|
let other_srgb = Srgb::from_str(other)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(other.to_string()))?
|
||||||
|
.into_format::<f32>();
|
||||||
|
Ok(srgb.difference(&other_srgb))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn differ_in_hsl(
|
||||||
|
color: &str,
|
||||||
|
other: &str,
|
||||||
|
) -> Result<color_differ::hsl::HSLDifference, errors::ColorError> {
|
||||||
|
let hsl = Hsl::from_color(
|
||||||
|
Srgb::from_str(color)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(color.to_string()))?
|
||||||
|
.into_format::<f32>(),
|
||||||
|
);
|
||||||
|
let other_hsl = Hsl::from_color(
|
||||||
|
Srgb::from_str(other)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(other.to_string()))?
|
||||||
|
.into_format::<f32>(),
|
||||||
|
);
|
||||||
|
Ok(hsl.difference(&other_hsl))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn differ_in_hct(
|
||||||
|
color: &str,
|
||||||
|
other: &str,
|
||||||
|
) -> Result<color_differ::cam16jch::HctDiffference, errors::ColorError> {
|
||||||
|
let hct = Cam16Jch::from_xyz(
|
||||||
|
Srgb::from_str(color)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(color.to_string()))?
|
||||||
|
.into_format::<f32>()
|
||||||
|
.into_color(),
|
||||||
|
Parameters::default_static_wp(40.0),
|
||||||
|
);
|
||||||
|
let other_hct = Cam16Jch::from_xyz(
|
||||||
|
Srgb::from_str(other)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(other.to_string()))?
|
||||||
|
.into_format::<f32>()
|
||||||
|
.into_color(),
|
||||||
|
Parameters::default_static_wp(40.0),
|
||||||
|
);
|
||||||
|
Ok(hct.difference(&other_hct))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn differ_in_oklch(
|
||||||
|
color: &str,
|
||||||
|
other: &str,
|
||||||
|
) -> Result<color_differ::oklch::OklchDifference, errors::ColorError> {
|
||||||
|
let oklch = Oklch::from_color(
|
||||||
|
Srgb::from_str(color)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(color.to_string()))?
|
||||||
|
.into_format::<f32>(),
|
||||||
|
);
|
||||||
|
let other_oklch = Oklch::from_color(
|
||||||
|
Srgb::from_str(other)
|
||||||
|
.map_err(|_| errors::ColorError::UnrecogniazedRGB(other.to_string()))?
|
||||||
|
.into_format::<f32>(),
|
||||||
|
);
|
||||||
|
Ok(oklch.difference(&other_oklch))
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ import { ColorFunctionProvider } from './ColorFunctionContext';
|
|||||||
import { Notifications } from './components/Notifications';
|
import { Notifications } from './components/Notifications';
|
||||||
import { ColorCards } from './pages/Cards';
|
import { ColorCards } from './pages/Cards';
|
||||||
import { CardsDetail } from './pages/CardsDetail';
|
import { CardsDetail } from './pages/CardsDetail';
|
||||||
|
import { ColorCompare } from './pages/Compare';
|
||||||
import { Harmonies } from './pages/Harmonies';
|
import { Harmonies } from './pages/Harmonies';
|
||||||
import { Home } from './pages/Home';
|
import { Home } from './pages/Home';
|
||||||
import { LightenDarken } from './pages/LightenDarken';
|
import { LightenDarken } from './pages/LightenDarken';
|
||||||
@ -39,6 +40,7 @@ const routes = createBrowserRouter([
|
|||||||
{ path: 'lighten-darken', element: <LightenDarken /> },
|
{ path: 'lighten-darken', element: <LightenDarken /> },
|
||||||
{ path: 'mixer', element: <Mixer /> },
|
{ path: 'mixer', element: <Mixer /> },
|
||||||
{ path: 'wacg', element: <WACGCheck /> },
|
{ path: 'wacg', element: <WACGCheck /> },
|
||||||
|
{ path: 'compare', element: <ColorCompare /> },
|
||||||
{
|
{
|
||||||
path: 'cards',
|
path: 'cards',
|
||||||
element: <ColorCards />,
|
element: <ColorCards />,
|
||||||
|
46
src/color-q-scheme.ts
Normal file
46
src/color-q-scheme.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import { SchemeColor } from './models';
|
||||||
|
|
||||||
|
export type ColorSetVariant = {
|
||||||
|
chroma: number;
|
||||||
|
lightness: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Settings = {
|
||||||
|
hover: ColorSetVariant;
|
||||||
|
active: ColorSetVariant;
|
||||||
|
focus: ColorSetVariant;
|
||||||
|
disabled: ColorSetVariant;
|
||||||
|
foregroundRange: [SchemeColor, SchemeColor];
|
||||||
|
foregroundGeneration: 'fixed' | 'wacg_atuo';
|
||||||
|
};
|
||||||
|
|
||||||
|
export type SchemeSet = {
|
||||||
|
primary: SchemeColor;
|
||||||
|
onPrimary: SchemeColor;
|
||||||
|
secondary: SchemeColor;
|
||||||
|
onSecondary: SchemeColor;
|
||||||
|
accent: SchemeColor;
|
||||||
|
onAccent: SchemeColor;
|
||||||
|
neutral: SchemeColor;
|
||||||
|
onNeutral: SchemeColor;
|
||||||
|
danger: SchemeColor;
|
||||||
|
onDanger: SchemeColor;
|
||||||
|
warning: SchemeColor;
|
||||||
|
onWarning: SchemeColor;
|
||||||
|
success: SchemeColor;
|
||||||
|
onSuccess: SchemeColor;
|
||||||
|
info: SchemeColor;
|
||||||
|
onInfo: SchemeColor;
|
||||||
|
border: SchemeColor;
|
||||||
|
lightenBorder: SchemeColor;
|
||||||
|
elevation: SchemeColor;
|
||||||
|
background: SchemeColor;
|
||||||
|
onBackground: SchemeColor;
|
||||||
|
inverseBackground: SchemeColor;
|
||||||
|
onInverseBackground: SchemeColor;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ColorQScheme = {
|
||||||
|
scheme: SchemeSet;
|
||||||
|
setting: Settings;
|
||||||
|
};
|
75
src/color_functions/color_module.d.ts
vendored
75
src/color_functions/color_module.d.ts
vendored
@ -30,6 +30,44 @@ export function tonal_lighten_series(color: string, expand_amount: number, step:
|
|||||||
export function tonal_darken_series(color: string, expand_amount: number, step: number): (string)[];
|
export function tonal_darken_series(color: string, expand_amount: number, step: number): (string)[];
|
||||||
export function color_categories(): any;
|
export function color_categories(): any;
|
||||||
export function search_color_cards(tag: string, category?: string): any;
|
export function search_color_cards(tag: string, category?: string): any;
|
||||||
|
export function differ_in_rgb(color: string, other: string): RGBDifference;
|
||||||
|
export function differ_in_hsl(color: string, other: string): HSLDifference;
|
||||||
|
export function differ_in_hct(color: string, other: string): HctDiffference;
|
||||||
|
export function differ_in_oklch(color: string, other: string): OklchDifference;
|
||||||
|
export class Differ {
|
||||||
|
private constructor();
|
||||||
|
free(): void;
|
||||||
|
delta: number;
|
||||||
|
percent: number;
|
||||||
|
}
|
||||||
|
export class HSLDifference {
|
||||||
|
private constructor();
|
||||||
|
free(): void;
|
||||||
|
hue: Differ;
|
||||||
|
saturation: Differ;
|
||||||
|
lightness: Differ;
|
||||||
|
}
|
||||||
|
export class HctDiffference {
|
||||||
|
private constructor();
|
||||||
|
free(): void;
|
||||||
|
hue: Differ;
|
||||||
|
chroma: Differ;
|
||||||
|
lightness: Differ;
|
||||||
|
}
|
||||||
|
export class OklchDifference {
|
||||||
|
private constructor();
|
||||||
|
free(): void;
|
||||||
|
hue: Differ;
|
||||||
|
chroma: Differ;
|
||||||
|
lightness: Differ;
|
||||||
|
}
|
||||||
|
export class RGBDifference {
|
||||||
|
private constructor();
|
||||||
|
free(): void;
|
||||||
|
r: Differ;
|
||||||
|
g: Differ;
|
||||||
|
b: Differ;
|
||||||
|
}
|
||||||
|
|
||||||
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
||||||
|
|
||||||
@ -65,6 +103,43 @@ export interface InitOutput {
|
|||||||
readonly tonal_darken_series: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
readonly tonal_darken_series: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
||||||
readonly color_categories: () => [number, number, number];
|
readonly color_categories: () => [number, number, number];
|
||||||
readonly search_color_cards: (a: number, b: number, c: number, d: number) => [number, number, number];
|
readonly search_color_cards: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
readonly differ_in_rgb: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
readonly differ_in_hsl: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
readonly differ_in_hct: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
readonly differ_in_oklch: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
readonly __wbg_oklchdifference_free: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_oklchdifference_hue: (a: number) => number;
|
||||||
|
readonly __wbg_set_oklchdifference_hue: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_oklchdifference_chroma: (a: number) => number;
|
||||||
|
readonly __wbg_set_oklchdifference_chroma: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_oklchdifference_lightness: (a: number) => number;
|
||||||
|
readonly __wbg_set_oklchdifference_lightness: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_differ_free: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_differ_delta: (a: number) => number;
|
||||||
|
readonly __wbg_set_differ_delta: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_differ_percent: (a: number) => number;
|
||||||
|
readonly __wbg_set_differ_percent: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_hctdiffference_free: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hctdiffference_hue: (a: number) => number;
|
||||||
|
readonly __wbg_set_hctdiffference_hue: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hctdiffference_chroma: (a: number) => number;
|
||||||
|
readonly __wbg_set_hctdiffference_chroma: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hctdiffference_lightness: (a: number) => number;
|
||||||
|
readonly __wbg_set_hctdiffference_lightness: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_rgbdifference_free: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_rgbdifference_r: (a: number) => number;
|
||||||
|
readonly __wbg_set_rgbdifference_r: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_rgbdifference_g: (a: number) => number;
|
||||||
|
readonly __wbg_set_rgbdifference_g: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_rgbdifference_b: (a: number) => number;
|
||||||
|
readonly __wbg_set_rgbdifference_b: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_hsldifference_free: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hsldifference_hue: (a: number) => number;
|
||||||
|
readonly __wbg_set_hsldifference_hue: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hsldifference_saturation: (a: number) => number;
|
||||||
|
readonly __wbg_set_hsldifference_saturation: (a: number, b: number) => void;
|
||||||
|
readonly __wbg_get_hsldifference_lightness: (a: number) => number;
|
||||||
|
readonly __wbg_set_hsldifference_lightness: (a: number, b: number) => void;
|
||||||
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
||||||
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
||||||
readonly __wbindgen_export_2: WebAssembly.Table;
|
readonly __wbindgen_export_2: WebAssembly.Table;
|
||||||
|
@ -739,6 +739,421 @@ export function search_color_cards(tag, category) {
|
|||||||
return takeFromExternrefTable0(ret[0]);
|
return takeFromExternrefTable0(ret[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} color
|
||||||
|
* @param {string} other
|
||||||
|
* @returns {RGBDifference}
|
||||||
|
*/
|
||||||
|
export function differ_in_rgb(color, other) {
|
||||||
|
const ptr0 = passStringToWasm0(color, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len0 = WASM_VECTOR_LEN;
|
||||||
|
const ptr1 = passStringToWasm0(other, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len1 = WASM_VECTOR_LEN;
|
||||||
|
const ret = wasm.differ_in_rgb(ptr0, len0, ptr1, len1);
|
||||||
|
if (ret[2]) {
|
||||||
|
throw takeFromExternrefTable0(ret[1]);
|
||||||
|
}
|
||||||
|
return RGBDifference.__wrap(ret[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} color
|
||||||
|
* @param {string} other
|
||||||
|
* @returns {HSLDifference}
|
||||||
|
*/
|
||||||
|
export function differ_in_hsl(color, other) {
|
||||||
|
const ptr0 = passStringToWasm0(color, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len0 = WASM_VECTOR_LEN;
|
||||||
|
const ptr1 = passStringToWasm0(other, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len1 = WASM_VECTOR_LEN;
|
||||||
|
const ret = wasm.differ_in_hsl(ptr0, len0, ptr1, len1);
|
||||||
|
if (ret[2]) {
|
||||||
|
throw takeFromExternrefTable0(ret[1]);
|
||||||
|
}
|
||||||
|
return HSLDifference.__wrap(ret[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} color
|
||||||
|
* @param {string} other
|
||||||
|
* @returns {HctDiffference}
|
||||||
|
*/
|
||||||
|
export function differ_in_hct(color, other) {
|
||||||
|
const ptr0 = passStringToWasm0(color, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len0 = WASM_VECTOR_LEN;
|
||||||
|
const ptr1 = passStringToWasm0(other, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len1 = WASM_VECTOR_LEN;
|
||||||
|
const ret = wasm.differ_in_hct(ptr0, len0, ptr1, len1);
|
||||||
|
if (ret[2]) {
|
||||||
|
throw takeFromExternrefTable0(ret[1]);
|
||||||
|
}
|
||||||
|
return HctDiffference.__wrap(ret[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} color
|
||||||
|
* @param {string} other
|
||||||
|
* @returns {OklchDifference}
|
||||||
|
*/
|
||||||
|
export function differ_in_oklch(color, other) {
|
||||||
|
const ptr0 = passStringToWasm0(color, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len0 = WASM_VECTOR_LEN;
|
||||||
|
const ptr1 = passStringToWasm0(other, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
|
const len1 = WASM_VECTOR_LEN;
|
||||||
|
const ret = wasm.differ_in_oklch(ptr0, len0, ptr1, len1);
|
||||||
|
if (ret[2]) {
|
||||||
|
throw takeFromExternrefTable0(ret[1]);
|
||||||
|
}
|
||||||
|
return OklchDifference.__wrap(ret[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _assertClass(instance, klass) {
|
||||||
|
if (!(instance instanceof klass)) {
|
||||||
|
throw new Error(`expected instance of ${klass.name}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const DifferFinalization = (typeof FinalizationRegistry === 'undefined')
|
||||||
|
? { register: () => {}, unregister: () => {} }
|
||||||
|
: new FinalizationRegistry(ptr => wasm.__wbg_differ_free(ptr >>> 0, 1));
|
||||||
|
|
||||||
|
export class Differ {
|
||||||
|
|
||||||
|
static __wrap(ptr) {
|
||||||
|
ptr = ptr >>> 0;
|
||||||
|
const obj = Object.create(Differ.prototype);
|
||||||
|
obj.__wbg_ptr = ptr;
|
||||||
|
DifferFinalization.register(obj, obj.__wbg_ptr, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
__destroy_into_raw() {
|
||||||
|
const ptr = this.__wbg_ptr;
|
||||||
|
this.__wbg_ptr = 0;
|
||||||
|
DifferFinalization.unregister(this);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
free() {
|
||||||
|
const ptr = this.__destroy_into_raw();
|
||||||
|
wasm.__wbg_differ_free(ptr, 0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
get delta() {
|
||||||
|
const ret = wasm.__wbg_get_differ_delta(this.__wbg_ptr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} arg0
|
||||||
|
*/
|
||||||
|
set delta(arg0) {
|
||||||
|
wasm.__wbg_set_differ_delta(this.__wbg_ptr, arg0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
get percent() {
|
||||||
|
const ret = wasm.__wbg_get_differ_percent(this.__wbg_ptr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} arg0
|
||||||
|
*/
|
||||||
|
set percent(arg0) {
|
||||||
|
wasm.__wbg_set_differ_percent(this.__wbg_ptr, arg0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const HSLDifferenceFinalization = (typeof FinalizationRegistry === 'undefined')
|
||||||
|
? { register: () => {}, unregister: () => {} }
|
||||||
|
: new FinalizationRegistry(ptr => wasm.__wbg_hsldifference_free(ptr >>> 0, 1));
|
||||||
|
|
||||||
|
export class HSLDifference {
|
||||||
|
|
||||||
|
static __wrap(ptr) {
|
||||||
|
ptr = ptr >>> 0;
|
||||||
|
const obj = Object.create(HSLDifference.prototype);
|
||||||
|
obj.__wbg_ptr = ptr;
|
||||||
|
HSLDifferenceFinalization.register(obj, obj.__wbg_ptr, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
__destroy_into_raw() {
|
||||||
|
const ptr = this.__wbg_ptr;
|
||||||
|
this.__wbg_ptr = 0;
|
||||||
|
HSLDifferenceFinalization.unregister(this);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
free() {
|
||||||
|
const ptr = this.__destroy_into_raw();
|
||||||
|
wasm.__wbg_hsldifference_free(ptr, 0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get hue() {
|
||||||
|
const ret = wasm.__wbg_get_hsldifference_hue(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set hue(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hsldifference_hue(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get saturation() {
|
||||||
|
const ret = wasm.__wbg_get_hsldifference_saturation(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set saturation(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hsldifference_saturation(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get lightness() {
|
||||||
|
const ret = wasm.__wbg_get_hsldifference_lightness(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set lightness(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hsldifference_lightness(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const HctDiffferenceFinalization = (typeof FinalizationRegistry === 'undefined')
|
||||||
|
? { register: () => {}, unregister: () => {} }
|
||||||
|
: new FinalizationRegistry(ptr => wasm.__wbg_hctdiffference_free(ptr >>> 0, 1));
|
||||||
|
|
||||||
|
export class HctDiffference {
|
||||||
|
|
||||||
|
static __wrap(ptr) {
|
||||||
|
ptr = ptr >>> 0;
|
||||||
|
const obj = Object.create(HctDiffference.prototype);
|
||||||
|
obj.__wbg_ptr = ptr;
|
||||||
|
HctDiffferenceFinalization.register(obj, obj.__wbg_ptr, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
__destroy_into_raw() {
|
||||||
|
const ptr = this.__wbg_ptr;
|
||||||
|
this.__wbg_ptr = 0;
|
||||||
|
HctDiffferenceFinalization.unregister(this);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
free() {
|
||||||
|
const ptr = this.__destroy_into_raw();
|
||||||
|
wasm.__wbg_hctdiffference_free(ptr, 0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get hue() {
|
||||||
|
const ret = wasm.__wbg_get_hctdiffference_hue(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set hue(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hctdiffference_hue(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get chroma() {
|
||||||
|
const ret = wasm.__wbg_get_hctdiffference_chroma(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set chroma(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hctdiffference_chroma(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get lightness() {
|
||||||
|
const ret = wasm.__wbg_get_hctdiffference_lightness(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set lightness(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_hctdiffference_lightness(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const OklchDifferenceFinalization = (typeof FinalizationRegistry === 'undefined')
|
||||||
|
? { register: () => {}, unregister: () => {} }
|
||||||
|
: new FinalizationRegistry(ptr => wasm.__wbg_oklchdifference_free(ptr >>> 0, 1));
|
||||||
|
|
||||||
|
export class OklchDifference {
|
||||||
|
|
||||||
|
static __wrap(ptr) {
|
||||||
|
ptr = ptr >>> 0;
|
||||||
|
const obj = Object.create(OklchDifference.prototype);
|
||||||
|
obj.__wbg_ptr = ptr;
|
||||||
|
OklchDifferenceFinalization.register(obj, obj.__wbg_ptr, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
__destroy_into_raw() {
|
||||||
|
const ptr = this.__wbg_ptr;
|
||||||
|
this.__wbg_ptr = 0;
|
||||||
|
OklchDifferenceFinalization.unregister(this);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
free() {
|
||||||
|
const ptr = this.__destroy_into_raw();
|
||||||
|
wasm.__wbg_oklchdifference_free(ptr, 0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get hue() {
|
||||||
|
const ret = wasm.__wbg_get_oklchdifference_hue(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set hue(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_oklchdifference_hue(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get chroma() {
|
||||||
|
const ret = wasm.__wbg_get_oklchdifference_chroma(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set chroma(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_oklchdifference_chroma(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get lightness() {
|
||||||
|
const ret = wasm.__wbg_get_oklchdifference_lightness(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set lightness(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_oklchdifference_lightness(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const RGBDifferenceFinalization = (typeof FinalizationRegistry === 'undefined')
|
||||||
|
? { register: () => {}, unregister: () => {} }
|
||||||
|
: new FinalizationRegistry(ptr => wasm.__wbg_rgbdifference_free(ptr >>> 0, 1));
|
||||||
|
|
||||||
|
export class RGBDifference {
|
||||||
|
|
||||||
|
static __wrap(ptr) {
|
||||||
|
ptr = ptr >>> 0;
|
||||||
|
const obj = Object.create(RGBDifference.prototype);
|
||||||
|
obj.__wbg_ptr = ptr;
|
||||||
|
RGBDifferenceFinalization.register(obj, obj.__wbg_ptr, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
__destroy_into_raw() {
|
||||||
|
const ptr = this.__wbg_ptr;
|
||||||
|
this.__wbg_ptr = 0;
|
||||||
|
RGBDifferenceFinalization.unregister(this);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
free() {
|
||||||
|
const ptr = this.__destroy_into_raw();
|
||||||
|
wasm.__wbg_rgbdifference_free(ptr, 0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get r() {
|
||||||
|
const ret = wasm.__wbg_get_rgbdifference_r(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set r(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_rgbdifference_r(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get g() {
|
||||||
|
const ret = wasm.__wbg_get_rgbdifference_g(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set g(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_rgbdifference_g(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @returns {Differ}
|
||||||
|
*/
|
||||||
|
get b() {
|
||||||
|
const ret = wasm.__wbg_get_rgbdifference_b(this.__wbg_ptr);
|
||||||
|
return Differ.__wrap(ret);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Differ} arg0
|
||||||
|
*/
|
||||||
|
set b(arg0) {
|
||||||
|
_assertClass(arg0, Differ);
|
||||||
|
var ptr0 = arg0.__destroy_into_raw();
|
||||||
|
wasm.__wbg_set_rgbdifference_b(this.__wbg_ptr, ptr0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function __wbg_load(module, imports) {
|
async function __wbg_load(module, imports) {
|
||||||
if (typeof Response === 'function' && module instanceof Response) {
|
if (typeof Response === 'function' && module instanceof Response) {
|
||||||
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
||||||
|
Binary file not shown.
37
src/color_functions/color_module_bg.wasm.d.ts
vendored
37
src/color_functions/color_module_bg.wasm.d.ts
vendored
@ -31,6 +31,43 @@ export const tonal_lighten_series: (a: number, b: number, c: number, d: number)
|
|||||||
export const tonal_darken_series: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
export const tonal_darken_series: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
||||||
export const color_categories: () => [number, number, number];
|
export const color_categories: () => [number, number, number];
|
||||||
export const search_color_cards: (a: number, b: number, c: number, d: number) => [number, number, number];
|
export const search_color_cards: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
export const differ_in_rgb: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
export const differ_in_hsl: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
export const differ_in_hct: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
export const differ_in_oklch: (a: number, b: number, c: number, d: number) => [number, number, number];
|
||||||
|
export const __wbg_oklchdifference_free: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_oklchdifference_hue: (a: number) => number;
|
||||||
|
export const __wbg_set_oklchdifference_hue: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_oklchdifference_chroma: (a: number) => number;
|
||||||
|
export const __wbg_set_oklchdifference_chroma: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_oklchdifference_lightness: (a: number) => number;
|
||||||
|
export const __wbg_set_oklchdifference_lightness: (a: number, b: number) => void;
|
||||||
|
export const __wbg_differ_free: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_differ_delta: (a: number) => number;
|
||||||
|
export const __wbg_set_differ_delta: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_differ_percent: (a: number) => number;
|
||||||
|
export const __wbg_set_differ_percent: (a: number, b: number) => void;
|
||||||
|
export const __wbg_hctdiffference_free: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hctdiffference_hue: (a: number) => number;
|
||||||
|
export const __wbg_set_hctdiffference_hue: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hctdiffference_chroma: (a: number) => number;
|
||||||
|
export const __wbg_set_hctdiffference_chroma: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hctdiffference_lightness: (a: number) => number;
|
||||||
|
export const __wbg_set_hctdiffference_lightness: (a: number, b: number) => void;
|
||||||
|
export const __wbg_rgbdifference_free: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_rgbdifference_r: (a: number) => number;
|
||||||
|
export const __wbg_set_rgbdifference_r: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_rgbdifference_g: (a: number) => number;
|
||||||
|
export const __wbg_set_rgbdifference_g: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_rgbdifference_b: (a: number) => number;
|
||||||
|
export const __wbg_set_rgbdifference_b: (a: number, b: number) => void;
|
||||||
|
export const __wbg_hsldifference_free: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hsldifference_hue: (a: number) => number;
|
||||||
|
export const __wbg_set_hsldifference_hue: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hsldifference_saturation: (a: number) => number;
|
||||||
|
export const __wbg_set_hsldifference_saturation: (a: number, b: number) => void;
|
||||||
|
export const __wbg_get_hsldifference_lightness: (a: number) => number;
|
||||||
|
export const __wbg_set_hsldifference_lightness: (a: number, b: number) => void;
|
||||||
export const __wbindgen_malloc: (a: number, b: number) => number;
|
export const __wbindgen_malloc: (a: number, b: number) => number;
|
||||||
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
||||||
export const __wbindgen_export_2: WebAssembly.Table;
|
export const __wbindgen_export_2: WebAssembly.Table;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
@layer components {
|
@layer components {
|
||||||
.color_picker {
|
.color_picker {
|
||||||
|
min-width: calc(var(--spacing) * 105);
|
||||||
max-width: calc(var(--spacing) * 125);
|
max-width: calc(var(--spacing) * 125);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
16
src/material-2-scheme.ts
Normal file
16
src/material-2-scheme.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { SchemeColor } from './models';
|
||||||
|
|
||||||
|
export type SchemeSet = {
|
||||||
|
primary: SchemeColor;
|
||||||
|
primaryVariant: SchemeColor;
|
||||||
|
onPrimary: SchemeColor;
|
||||||
|
secondary: SchemeColor;
|
||||||
|
secondaryVariant: SchemeColor;
|
||||||
|
onSecondary: SchemeColor;
|
||||||
|
background: SchemeColor;
|
||||||
|
onBackground: SchemeColor;
|
||||||
|
surface: SchemeColor;
|
||||||
|
onSurface: SchemeColor;
|
||||||
|
error: SchemeColor;
|
||||||
|
onError: SchemeColor;
|
||||||
|
};
|
49
src/material-3-scheme.ts
Normal file
49
src/material-3-scheme.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { SchemeColor } from './models';
|
||||||
|
|
||||||
|
export type SchemeSet = {
|
||||||
|
primary: SchemeColor;
|
||||||
|
onPrimary: SchemeColor;
|
||||||
|
primaryContainer: SchemeColor;
|
||||||
|
onPrimaryContainer: SchemeColor;
|
||||||
|
primaryFixed: SchemeColor;
|
||||||
|
onPrimaryFixed: SchemeColor;
|
||||||
|
primaryFixedDim: SchemeColor;
|
||||||
|
onPrimaryFixedVaraint: SchemeColor;
|
||||||
|
secondary: SchemeColor;
|
||||||
|
onSecondary: SchemeColor;
|
||||||
|
secondaryContainer: SchemeColor;
|
||||||
|
onSecondaryContainer: SchemeColor;
|
||||||
|
secondaryFixed: SchemeColor;
|
||||||
|
onSecondaryFixed: SchemeColor;
|
||||||
|
secondaryFixedDim: SchemeColor;
|
||||||
|
onSecondaryFixedVaraint: SchemeColor;
|
||||||
|
tertiary: SchemeColor;
|
||||||
|
onTertiary: SchemeColor;
|
||||||
|
tertiaryContainer: SchemeColor;
|
||||||
|
onTertiaryContainer: SchemeColor;
|
||||||
|
tertiaryFixed: SchemeColor;
|
||||||
|
onTertiaryFixed: SchemeColor;
|
||||||
|
tertiaryFixedDim: SchemeColor;
|
||||||
|
onTertiaryFixedVaraint: SchemeColor;
|
||||||
|
error: SchemeColor;
|
||||||
|
onError: SchemeColor;
|
||||||
|
errorContainer: SchemeColor;
|
||||||
|
onErrorContainer: SchemeColor;
|
||||||
|
surface: SchemeColor;
|
||||||
|
surfaceDim: SchemeColor;
|
||||||
|
surfaceBright: SchemeColor;
|
||||||
|
onSurface: SchemeColor;
|
||||||
|
onSurfaceVariant: SchemeColor;
|
||||||
|
surfaceContainerLowest: SchemeColor;
|
||||||
|
surfaceContainerLow: SchemeColor;
|
||||||
|
surfaceContainer: SchemeColor;
|
||||||
|
surfaceContainerHigh: SchemeColor;
|
||||||
|
surfaceContainerHighest: SchemeColor;
|
||||||
|
inverseSurface: SchemeColor;
|
||||||
|
onInverseSurface: SchemeColor;
|
||||||
|
inversePrimary: SchemeColor;
|
||||||
|
outline: SchemeColor;
|
||||||
|
outlineVariant: SchemeColor;
|
||||||
|
scrim: SchemeColor;
|
||||||
|
shadow: SchemeColor;
|
||||||
|
};
|
@ -20,3 +20,15 @@ export type ColorDescription = {
|
|||||||
lab: [number, number, number];
|
lab: [number, number, number];
|
||||||
oklch: [number, number, number];
|
oklch: [number, number, number];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type SchemeType = 'color_q' | 'material_2' | 'material_3';
|
||||||
|
export type SchemeColor = string | null;
|
||||||
|
export type SchemeContent<Scheme> = {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
createdAt: string;
|
||||||
|
description: string | null;
|
||||||
|
type: SchemeType;
|
||||||
|
lightScheme: Scheme;
|
||||||
|
darkScheme: Scheme;
|
||||||
|
};
|
||||||
|
25
src/page-components/color-compare/CompareLayout.module.css
Normal file
25
src/page-components/color-compare/CompareLayout.module.css
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
@layer pages {
|
||||||
|
.elements {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: stretch;
|
||||||
|
gap: var(--spacing-m);
|
||||||
|
.element {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--spacing-xs);
|
||||||
|
.element_name {
|
||||||
|
font-size: var(--font-size-xxl);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.element_values {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-xs);
|
||||||
|
font-size: var(--font-size-xs);
|
||||||
|
line-height: var(--font-size-xs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
74
src/page-components/color-compare/HCTCompare.tsx
Normal file
74
src/page-components/color-compare/HCTCompare.tsx
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import { useMemo } from 'react';
|
||||||
|
import { HctDiffference } from '../../color_functions/color_module';
|
||||||
|
import { useColorFunction } from '../../ColorFunctionContext';
|
||||||
|
import styles from './CompareLayout.module.css';
|
||||||
|
import { CompareMethodProps } from './share-props';
|
||||||
|
|
||||||
|
const defaultCompareResult: HctDiffference = {
|
||||||
|
hue: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
chroma: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
lightness: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export function HCTCompare({ basic = '000000', compare = '000000' }: CompareMethodProps) {
|
||||||
|
const { colorFn } = useColorFunction();
|
||||||
|
const differ = useMemo(() => {
|
||||||
|
if (!colorFn) {
|
||||||
|
return defaultCompareResult;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const diff = colorFn.differ_in_hct(basic, compare);
|
||||||
|
return diff;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[Compare in HCT]', e);
|
||||||
|
}
|
||||||
|
return defaultCompareResult;
|
||||||
|
}, [basic, compare]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h6>Compare in HCT Space</h6>
|
||||||
|
<div className={styles.elements}>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>H</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.hue.delta.toFixed(2)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.hue.percent) ? '0.00' : (differ.hue.percent * 100).toFixed(2)}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>C</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.chroma.delta.toFixed(2)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.chroma.percent) ? '0.00' : (differ.chroma.percent * 100).toFixed(2)}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>T</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.lightness.delta.toFixed(2)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.lightness.percent)
|
||||||
|
? '0.00'
|
||||||
|
: (differ.lightness.percent * 100).toFixed(2)}
|
||||||
|
%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
77
src/page-components/color-compare/HSLCompare.tsx
Normal file
77
src/page-components/color-compare/HSLCompare.tsx
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import { useMemo } from 'react';
|
||||||
|
import { HSLDifference } from '../../color_functions/color_module';
|
||||||
|
import { useColorFunction } from '../../ColorFunctionContext';
|
||||||
|
import styles from './CompareLayout.module.css';
|
||||||
|
import { CompareMethodProps } from './share-props';
|
||||||
|
|
||||||
|
const defaultCompareResult: HSLDifference = {
|
||||||
|
hue: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
saturation: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
lightness: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export function HSLCompare({ basic = '000000', compare = '000000' }: CompareMethodProps) {
|
||||||
|
const { colorFn } = useColorFunction();
|
||||||
|
const differ = useMemo(() => {
|
||||||
|
if (!colorFn) {
|
||||||
|
return defaultCompareResult;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const diff = colorFn.differ_in_hsl(basic, compare);
|
||||||
|
return diff;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[Compare in HSL]', e);
|
||||||
|
}
|
||||||
|
return defaultCompareResult;
|
||||||
|
}, [basic, compare]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h6>Compare in HSL Space</h6>
|
||||||
|
<div className={styles.elements}>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>H</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.hue.delta.toFixed(2)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.hue.percent) ? '0.00' : (differ.hue.percent * 100).toFixed(2)}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>S</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{(differ.saturation.delta * 100).toFixed(2)}%</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.saturation.percent)
|
||||||
|
? '0.00'
|
||||||
|
: (differ.saturation.percent * 100).toFixed(2)}
|
||||||
|
%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>L</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{(differ.lightness.delta * 100).toFixed(2)}%</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.lightness.percent)
|
||||||
|
? '0.00'
|
||||||
|
: (differ.lightness.percent * 100).toFixed(2)}
|
||||||
|
%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
74
src/page-components/color-compare/OKLCHCompare.tsx
Normal file
74
src/page-components/color-compare/OKLCHCompare.tsx
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import { useMemo } from 'react';
|
||||||
|
import { OklchDifference } from '../../color_functions/color_module';
|
||||||
|
import { useColorFunction } from '../../ColorFunctionContext';
|
||||||
|
import styles from './CompareLayout.module.css';
|
||||||
|
import { CompareMethodProps } from './share-props';
|
||||||
|
|
||||||
|
const defaultCompareResult: OklchDifference = {
|
||||||
|
hue: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
chroma: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
lightness: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export function OklchCompare({ basic = '000000', compare = '000000' }: CompareMethodProps) {
|
||||||
|
const { colorFn } = useColorFunction();
|
||||||
|
const differ = useMemo(() => {
|
||||||
|
if (!colorFn) {
|
||||||
|
return defaultCompareResult;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const diff = colorFn.differ_in_oklch(basic, compare);
|
||||||
|
return diff;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[Compare in Oklch]', e);
|
||||||
|
}
|
||||||
|
return defaultCompareResult;
|
||||||
|
}, [basic, compare]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h6>Compare in Oklch Space</h6>
|
||||||
|
<div className={styles.elements}>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>L</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{(differ.lightness.delta * 100).toFixed(2)}%</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.lightness.percent)
|
||||||
|
? '0.0000'
|
||||||
|
: (differ.lightness.percent * 100).toFixed(2)}
|
||||||
|
%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>C</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.chroma.delta.toFixed(4)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.chroma.percent) ? '0.0000' : (differ.chroma.percent * 100).toFixed(2)}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>H</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.hue.delta.toFixed(2)}</span>
|
||||||
|
<span>
|
||||||
|
{isNaN(differ.hue.percent) ? '0.00' : (differ.hue.percent * 100).toFixed(2)}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
78
src/page-components/color-compare/RGBCompare.tsx
Normal file
78
src/page-components/color-compare/RGBCompare.tsx
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import { useMemo } from 'react';
|
||||||
|
import { RGBDifference } from '../../color_functions/color_module';
|
||||||
|
import { useColorFunction } from '../../ColorFunctionContext';
|
||||||
|
import styles from './CompareLayout.module.css';
|
||||||
|
import { CompareMethodProps } from './share-props';
|
||||||
|
|
||||||
|
const defaultCompareResult: RGBDifference = {
|
||||||
|
r: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
g: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
b: {
|
||||||
|
delta: 0,
|
||||||
|
percent: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export function RGBCompare({ basic = '000000', compare = '000000' }: CompareMethodProps) {
|
||||||
|
const { colorFn } = useColorFunction();
|
||||||
|
const differ = useMemo(() => {
|
||||||
|
if (!colorFn) {
|
||||||
|
return defaultCompareResult;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const diff = colorFn?.differ_in_rgb(basic, compare);
|
||||||
|
return {
|
||||||
|
r: {
|
||||||
|
delta: Math.round(diff.r.delta * 255),
|
||||||
|
percent: diff.r.percent,
|
||||||
|
},
|
||||||
|
g: {
|
||||||
|
delta: Math.round(diff.g.delta * 255),
|
||||||
|
percent: diff.g.percent,
|
||||||
|
},
|
||||||
|
b: {
|
||||||
|
delta: Math.round(diff.b.delta * 255),
|
||||||
|
percent: diff.b.percent,
|
||||||
|
},
|
||||||
|
} as RGBDifference;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[Compare in RGB]', e);
|
||||||
|
}
|
||||||
|
return defaultCompareResult;
|
||||||
|
}, [basic, compare]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h6>Compare in RGB Space</h6>
|
||||||
|
<div className={styles.elements}>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>R</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.r.delta}</span>
|
||||||
|
<span>{isNaN(differ.r.percent) ? '0.00' : (differ.r.percent * 100).toFixed(2)}%</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>G</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.g.delta}</span>
|
||||||
|
<span>{isNaN(differ.g.percent) ? '0.00' : (differ.g.percent * 100).toFixed(2)}%</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.element}>
|
||||||
|
<div className={styles.element_name}>B</div>
|
||||||
|
<div className={styles.element_values}>
|
||||||
|
<span>{differ.b.delta}</span>
|
||||||
|
<span>{isNaN(differ.b.percent) ? '0.00' : (differ.b.percent * 100).toFixed(2)}%</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
4
src/page-components/color-compare/share-props.ts
Normal file
4
src/page-components/color-compare/share-props.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export type CompareMethodProps = {
|
||||||
|
basic?: string;
|
||||||
|
compare?: string;
|
||||||
|
};
|
18
src/pages/Compare.module.css
Normal file
18
src/pages/Compare.module.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
@layer pages {
|
||||||
|
.compare_workspace {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.compare_content {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: var(--spacing-l);
|
||||||
|
.compare_column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-s);
|
||||||
|
font-size: var(--font-size-s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
44
src/pages/Compare.tsx
Normal file
44
src/pages/Compare.tsx
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import cx from 'clsx';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { ColorPicker } from '../components/ColorPicker';
|
||||||
|
import { ScrollArea } from '../components/ScrollArea';
|
||||||
|
import { HCTCompare } from '../page-components/color-compare/HCTCompare';
|
||||||
|
import { HSLCompare } from '../page-components/color-compare/HSLCompare';
|
||||||
|
import { OklchCompare } from '../page-components/color-compare/OKLCHCompare';
|
||||||
|
import { RGBCompare } from '../page-components/color-compare/RGBCompare';
|
||||||
|
import styles from './Compare.module.css';
|
||||||
|
|
||||||
|
export function ColorCompare() {
|
||||||
|
const [basicColor, setBasicColor] = useState('000000');
|
||||||
|
const [compareColor, setCompareColor] = useState('000000');
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={cx('workspace', styles.compare_workspace)}>
|
||||||
|
<header>
|
||||||
|
<h3>Color Compare</h3>
|
||||||
|
<p>
|
||||||
|
Compare the properties of two colors and find the associated patterns of color change.
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
<ScrollArea enableY>
|
||||||
|
<div className={styles.compare_content}>
|
||||||
|
<div className={styles.compare_column}>
|
||||||
|
<h5>Basic Color</h5>
|
||||||
|
<ColorPicker color={basicColor} onSelect={setBasicColor} />
|
||||||
|
</div>
|
||||||
|
<div className={styles.compare_column}>
|
||||||
|
<h5>Compare Color</h5>
|
||||||
|
<ColorPicker color={compareColor} onSelect={setCompareColor} />
|
||||||
|
</div>
|
||||||
|
<div className={styles.compare_column}>
|
||||||
|
<h5>Compare Result</h5>
|
||||||
|
<RGBCompare basic={basicColor} compare={compareColor} />
|
||||||
|
<HSLCompare basic={basicColor} compare={compareColor} />
|
||||||
|
<HCTCompare basic={basicColor} compare={compareColor} />
|
||||||
|
<OklchCompare basic={basicColor} compare={compareColor} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ScrollArea>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
@ -6,9 +6,8 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-around;
|
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
gap: var(--spacing-m);
|
gap: var(--spacing-l);
|
||||||
.mixer_column {
|
.mixer_column {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user