@symblight/md-colors 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -24
- package/dist/cli.js +102 -0
- package/dist/client.esm.js +5 -5
- package/dist/client.esm.js.map +2 -2
- package/dist/client.js +1 -1
- package/dist/client.js.map +3 -3
- package/dist/index.js +33 -0
- package/dist/index.js.map +3 -3
- package/package.json +5 -2
package/dist/client.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/utils/math_utils.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/utils/color_utils.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/hct/viewing_conditions.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/hct/cam16.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/hct/hct_solver.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/hct/hct.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/blend/blend.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/contrast/contrast.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dislike/dislike_analyzer.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/dynamic_color.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/palettes/tonal_palette.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/contrast_curve.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/tone_delta_pair.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/variant.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/material_dynamic_colors.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/dynamiccolor/dynamic_scheme.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/palettes/core_palette.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/scheme/scheme.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/temperature/temperature_cache.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/scheme/scheme_content.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/scheme/scheme_expressive.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/scheme/scheme_vibrant.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/score/score.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/utils/string_utils.ts", "../../../node_modules/.pnpm/@material+material-color-utilities@0.3.0/node_modules/@material/material-color-utilities/utils/theme_utils.ts", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseNumber.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/colors/named.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseNamed.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseHex.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/util/regex.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseRgbLegacy.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/_prepare.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/converter.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/modes.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/parse.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/parseTransparent.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/interpolate/lerp.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/interpolate/piecewise.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/interpolate/linear.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/fixup/alpha.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rgb/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/a98/convertA98ToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/a98/convertXyz65ToA98.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lrgb/convertRgbToLrgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/convertRgbToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lrgb/convertLrgbToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz65ToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/a98/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/util/normalizeHue.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/fixup/hue.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/cubehelix/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/cubehelix/convertRgbToCubehelix.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/cubehelix/convertCubehelixToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/difference.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/average.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/cubehelix/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lch/convertLabToLch.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lch/convertLchToLab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab65/convertLab65ToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab65/convertLab65ToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab65/convertXyz65ToLab65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab65/convertRgbToLab65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/dlch/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/dlch/convertDlchToLab65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/dlch/convertLab65ToDlch.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/dlab/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/dlch/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsi/convertHsiToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsi/convertRgbToHsi.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsi/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsl/convertHslToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsl/convertRgbToHsl.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/util/hue.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsl/parseHslLegacy.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsl/parseHsl.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsl/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsv/convertHsvToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsv/convertRgbToHsv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hsv/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hwb/convertHwbToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hwb/convertRgbToHwb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hwb/parseHwb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hwb/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hdr/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/hdr/transfer.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/itp/convertItpToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/itp/convertXyz65ToItp.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/itp/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jab/convertXyz65ToJab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jab/convertJabToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jab/convertRgbToJab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jab/convertJabToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jab/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jch/convertJabToJch.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jch/convertJchToJab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/jch/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz50/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/convertLabToXyz50.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz50/convertXyz50ToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/convertLabToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz50/convertRgbToXyz50.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/convertXyz50ToLab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/convertRgbToLab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/parseLab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lab65/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lch/parseLch.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lch/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lch65/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lchuv/convertLuvToLchuv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lchuv/convertLchuvToLuv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/luv/convertXyz50ToLuv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/luv/convertLuvToXyz50.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lchuv/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/lrgb/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/luv/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/convertLrgbToOklab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/convertRgbToOklab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/convertOklabToLrgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/convertOklabToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsl/helpers.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsl/convertOklabToOkhsl.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsl/convertOkhslToOklab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsl/modeOkhsl.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsv/convertOklabToOkhsv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsv/convertOkhsvToOklab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/okhsv/modeOkhsv.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/parseOklab.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklab/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklch/parseOklch.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/oklch/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/p3/convertP3ToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/p3/convertXyz65ToP3.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/p3/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/prophoto/convertXyz50ToProphoto.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/prophoto/convertProphotoToXyz50.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/prophoto/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rec2020/convertXyz65ToRec2020.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rec2020/convertRec2020ToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/rec2020/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyb/constants.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyb/convertRgbToXyb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyb/convertXybToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyb/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz50/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz65ToXyz50.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz50ToXyz65.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/xyz65/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/yiq/convertRgbToYiq.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/yiq/convertYiqToRgb.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/yiq/definition.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/round.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/formatter.js", "../../../node_modules/.pnpm/culori@4.0.2/node_modules/culori/src/index.js", "../tokens.mjs", "../client.mjs"],
|
|
4
|
-
"sourcesContent": ["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\n/**\n * Utility methods for mathematical operations.\n */\n\n/**\n * The signum function.\n *\n * @return 1 if num > 0, -1 if num < 0, and 0 if num = 0\n */\nexport function signum(num: number): number {\n if (num < 0) {\n return -1;\n } else if (num === 0) {\n return 0;\n } else {\n return 1;\n }\n}\n\n/**\n * The linear interpolation function.\n *\n * @return start if amount = 0 and stop if amount = 1\n */\nexport function lerp(start: number, stop: number, amount: number): number {\n return (1.0 - amount) * start + amount * stop;\n}\n\n/**\n * Clamps an integer between two integers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampInt(min: number, max: number, input: number): number {\n if (input < min) {\n return min;\n } else if (input > max) {\n return max;\n }\n\n return input;\n}\n\n/**\n * Clamps an integer between two floating-point numbers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampDouble(min: number, max: number, input: number): number {\n if (input < min) {\n return min;\n } else if (input > max) {\n return max;\n }\n\n return input;\n}\n\n/**\n * Sanitizes a degree measure as an integer.\n *\n * @return a degree measure between 0 (inclusive) and 360\n * (exclusive).\n */\nexport function sanitizeDegreesInt(degrees: number): number {\n degrees = degrees % 360;\n if (degrees < 0) {\n degrees = degrees + 360;\n }\n return degrees;\n}\n\n/**\n * Sanitizes a degree measure as a floating-point number.\n *\n * @return a degree measure between 0.0 (inclusive) and 360.0\n * (exclusive).\n */\nexport function sanitizeDegreesDouble(degrees: number): number {\n degrees = degrees % 360.0;\n if (degrees < 0) {\n degrees = degrees + 360.0;\n }\n return degrees;\n}\n\n/**\n * Sign of direction change needed to travel from one angle to\n * another.\n *\n * For angles that are 180 degrees apart from each other, both\n * directions have the same travel distance, so either direction is\n * shortest. The value 1.0 is returned in this case.\n *\n * @param from The angle travel starts from, in degrees.\n * @param to The angle travel ends at, in degrees.\n * @return -1 if decreasing from leads to the shortest travel\n * distance, 1 if increasing from leads to the shortest travel\n * distance.\n */\nexport function rotationDirection(from: number, to: number): number {\n const increasingDifference = sanitizeDegreesDouble(to - from);\n return increasingDifference <= 180.0 ? 1.0 : -1.0;\n}\n\n/**\n * Distance of two points on a circle, represented using degrees.\n */\nexport function differenceDegrees(a: number, b: number): number {\n return 180.0 - Math.abs(Math.abs(a - b) - 180.0);\n}\n\n/**\n * Multiplies a 1x3 row vector with a 3x3 matrix.\n */\nexport function matrixMultiply(row: number[], matrix: number[][]): number[] {\n const a =\n row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2];\n const b =\n row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2];\n const c =\n row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2];\n return [a, b, c];\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport * as mathUtils from './math_utils.js';\n\n/**\n * Color science utilities.\n *\n * Utility methods for color science constants and color space\n * conversions that aren't HCT or CAM16.\n */\n\nconst SRGB_TO_XYZ = [\n [0.41233895, 0.35762064, 0.18051042],\n [0.2126, 0.7152, 0.0722],\n [0.01932141, 0.11916382, 0.95034478],\n];\n\nconst XYZ_TO_SRGB = [\n [\n 3.2413774792388685,\n -1.5376652402851851,\n -0.49885366846268053,\n ],\n [\n -0.9691452513005321,\n 1.8758853451067872,\n 0.04156585616912061,\n ],\n [\n 0.05562093689691305,\n -0.20395524564742123,\n 1.0571799111220335,\n ],\n];\n\nconst WHITE_POINT_D65 = [95.047, 100.0, 108.883];\n\n/**\n * Converts a color from RGB components to ARGB format.\n */\nexport function argbFromRgb(red: number, green: number, blue: number): number {\n return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>>\n 0;\n}\n\n/**\n * Converts a color from linear RGB components to ARGB format.\n */\nexport function argbFromLinrgb(linrgb: number[]): number {\n const r = delinearized(linrgb[0]);\n const g = delinearized(linrgb[1]);\n const b = delinearized(linrgb[2]);\n return argbFromRgb(r, g, b);\n}\n\n/**\n * Returns the alpha component of a color in ARGB format.\n */\nexport function alphaFromArgb(argb: number): number {\n return argb >> 24 & 255;\n}\n\n/**\n * Returns the red component of a color in ARGB format.\n */\nexport function redFromArgb(argb: number): number {\n return argb >> 16 & 255;\n}\n\n/**\n * Returns the green component of a color in ARGB format.\n */\nexport function greenFromArgb(argb: number): number {\n return argb >> 8 & 255;\n}\n\n/**\n * Returns the blue component of a color in ARGB format.\n */\nexport function blueFromArgb(argb: number): number {\n return argb & 255;\n}\n\n/**\n * Returns whether a color in ARGB format is opaque.\n */\nexport function isOpaque(argb: number): boolean {\n return alphaFromArgb(argb) >= 255;\n}\n\n/**\n * Converts a color from ARGB to XYZ.\n */\nexport function argbFromXyz(x: number, y: number, z: number): number {\n const matrix = XYZ_TO_SRGB;\n const linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z;\n const linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z;\n const linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;\n const r = delinearized(linearR);\n const g = delinearized(linearG);\n const b = delinearized(linearB);\n return argbFromRgb(r, g, b);\n}\n\n/**\n * Converts a color from XYZ to ARGB.\n */\nexport function xyzFromArgb(argb: number): number[] {\n const r = linearized(redFromArgb(argb));\n const g = linearized(greenFromArgb(argb));\n const b = linearized(blueFromArgb(argb));\n return mathUtils.matrixMultiply([r, g, b], SRGB_TO_XYZ);\n}\n\n/**\n * Converts a color represented in Lab color space into an ARGB\n * integer.\n */\nexport function argbFromLab(l: number, a: number, b: number): number {\n const whitePoint = WHITE_POINT_D65;\n const fy = (l + 16.0) / 116.0;\n const fx = a / 500.0 + fy;\n const fz = fy - b / 200.0;\n const xNormalized = labInvf(fx);\n const yNormalized = labInvf(fy);\n const zNormalized = labInvf(fz);\n const x = xNormalized * whitePoint[0];\n const y = yNormalized * whitePoint[1];\n const z = zNormalized * whitePoint[2];\n return argbFromXyz(x, y, z);\n}\n\n/**\n * Converts a color from ARGB representation to L*a*b*\n * representation.\n *\n * @param argb the ARGB representation of a color\n * @return a Lab object representing the color\n */\nexport function labFromArgb(argb: number): number[] {\n const linearR = linearized(redFromArgb(argb));\n const linearG = linearized(greenFromArgb(argb));\n const linearB = linearized(blueFromArgb(argb));\n const matrix = SRGB_TO_XYZ;\n const x =\n matrix[0][0] * linearR + matrix[0][1] * linearG + matrix[0][2] * linearB;\n const y =\n matrix[1][0] * linearR + matrix[1][1] * linearG + matrix[1][2] * linearB;\n const z =\n matrix[2][0] * linearR + matrix[2][1] * linearG + matrix[2][2] * linearB;\n const whitePoint = WHITE_POINT_D65;\n const xNormalized = x / whitePoint[0];\n const yNormalized = y / whitePoint[1];\n const zNormalized = z / whitePoint[2];\n const fx = labF(xNormalized);\n const fy = labF(yNormalized);\n const fz = labF(zNormalized);\n const l = 116.0 * fy - 16;\n const a = 500.0 * (fx - fy);\n const b = 200.0 * (fy - fz);\n return [l, a, b];\n}\n\n/**\n * Converts an L* value to an ARGB representation.\n *\n * @param lstar L* in L*a*b*\n * @return ARGB representation of grayscale color with lightness\n * matching L*\n */\nexport function argbFromLstar(lstar: number): number {\n const y = yFromLstar(lstar);\n const component = delinearized(y);\n return argbFromRgb(component, component, component);\n}\n\n/**\n * Computes the L* value of a color in ARGB representation.\n *\n * @param argb ARGB representation of a color\n * @return L*, from L*a*b*, coordinate of the color\n */\nexport function lstarFromArgb(argb: number): number {\n const y = xyzFromArgb(argb)[1];\n return 116.0 * labF(y / 100.0) - 16.0;\n}\n\n/**\n * Converts an L* value to a Y value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param lstar L* in L*a*b*\n * @return Y in XYZ\n */\nexport function yFromLstar(lstar: number): number {\n return 100.0 * labInvf((lstar + 16.0) / 116.0);\n}\n\n/**\n * Converts a Y value to an L* value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param y Y in XYZ\n * @return L* in L*a*b*\n */\nexport function lstarFromY(y: number): number {\n return labF(y / 100.0) * 116.0 - 16.0;\n}\n\n/**\n * Linearizes an RGB component.\n *\n * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B\n * channel\n * @return 0.0 <= output <= 100.0, color channel converted to\n * linear RGB space\n */\nexport function linearized(rgbComponent: number): number {\n const normalized = rgbComponent / 255.0;\n if (normalized <= 0.040449936) {\n return normalized / 12.92 * 100.0;\n } else {\n return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;\n }\n}\n\n/**\n * Delinearizes an RGB component.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0 <= output <= 255, color channel converted to regular\n * RGB space\n */\nexport function delinearized(rgbComponent: number): number {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n } else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));\n}\n\n/**\n * Returns the standard white point; white on a sunny day.\n *\n * @return The white point\n */\nexport function whitePointD65(): number[] {\n return WHITE_POINT_D65;\n}\n\n/**\n * RGBA component\n * \n * @param r Red value should be between 0-255\n * @param g Green value should be between 0-255\n * @param b Blue value should be between 0-255\n * @param a Alpha value should be between 0-255\n */\nexport interface Rgba {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\n/**\n * Return RGBA from a given int32 color\n *\n * @param argb ARGB representation of a int32 color.\n * @return RGBA representation of a int32 color.\n */\nexport function rgbaFromArgb(argb: number): Rgba {\n const r = redFromArgb(argb);\n const g = greenFromArgb(argb);\n const b = blueFromArgb(argb);\n const a = alphaFromArgb(argb);\n return {r, g, b, a};\n}\n\n/**\n * Return int32 color from a given RGBA component\n * \n * @param rgba RGBA representation of a int32 color.\n * @returns ARGB representation of a int32 color.\n */\nexport function argbFromRgba({r, g, b, a}: Rgba): number {\n const rValue = clampComponent(r);\n const gValue = clampComponent(g);\n const bValue = clampComponent(b);\n const aValue = clampComponent(a);\n return (aValue << 24) | (rValue << 16) | (gValue << 8) | bValue;\n}\n\nfunction clampComponent(value: number) {\n if (value < 0) return 0;\n if (value > 255) return 255;\n return value\n}\n\nfunction labF(t: number): number {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n if (t > e) {\n return Math.pow(t, 1.0 / 3.0);\n } else {\n return (kappa * t + 16) / 116;\n }\n}\n\nfunction labInvf(ft: number): number {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n const ft3 = ft * ft * ft;\n if (ft3 > e) {\n return ft3;\n } else {\n return (116 * ft - 16) / kappa;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n *\n * This class caches intermediate values of the CAM16 conversion process that\n * depend only on viewing conditions, enabling speed ups.\n */\nexport class ViewingConditions {\n /** sRGB-like viewing conditions. */\n static DEFAULT = ViewingConditions.make();\n\n /**\n * Create ViewingConditions from a simple, physically relevant, set of\n * parameters.\n *\n * @param whitePoint White point, measured in the XYZ color space.\n * default = D65, or sunny day afternoon\n * @param adaptingLuminance The luminance of the adapting field. Informally,\n * how bright it is in the room where the color is viewed. Can be\n * calculated from lux by multiplying lux by 0.0586. default = 11.72,\n * or 200 lux.\n * @param backgroundLstar The lightness of the area surrounding the color.\n * measured by L* in L*a*b*. default = 50.0\n * @param surround A general description of the lighting surrounding the\n * color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a\n * dimly light room, like watching TV at home at night. 2.0 means there\n * is no difference between the lighting on the color and around it.\n * default = 2.0\n * @param discountingIlluminant Whether the eye accounts for the tint of the\n * ambient lighting, such as knowing an apple is still red in green light.\n * default = false, the eye does not perform this process on\n * self-luminous objects like displays.\n */\n static make(\n whitePoint = utils.whitePointD65(),\n adaptingLuminance = (200.0 / Math.PI) * utils.yFromLstar(50.0) / 100.0,\n backgroundLstar = 50.0, surround = 2.0,\n discountingIlluminant = false): ViewingConditions {\n const xyz = whitePoint;\n const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;\n const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;\n const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;\n const f = 0.8 + surround / 10.0;\n const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10.0) :\n math.lerp(0.525, 0.59, (f - 0.8) * 10.0);\n let d = discountingIlluminant ?\n 1.0 :\n f * (1.0 - (1.0 / 3.6) * Math.exp((-adaptingLuminance - 42.0) / 92.0));\n d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;\n const nc = f;\n const rgbD = [\n d * (100.0 / rW) + 1.0 - d,\n d * (100.0 / gW) + 1.0 - d,\n d * (100.0 / bW) + 1.0 - d,\n ];\n const k = 1.0 / (5.0 * adaptingLuminance + 1.0);\n const k4 = k * k * k * k;\n const k4F = 1.0 - k4;\n const fl = k4 * adaptingLuminance +\n 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);\n const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];\n const z = 1.48 + Math.sqrt(n);\n const nbb = 0.725 / Math.pow(n, 0.2);\n const ncb = nbb;\n const rgbAFactors = [\n Math.pow((fl * rgbD[0] * rW) / 100.0, 0.42),\n Math.pow((fl * rgbD[1] * gW) / 100.0, 0.42),\n Math.pow((fl * rgbD[2] * bW) / 100.0, 0.42),\n ];\n const rgbA = [\n (400.0 * rgbAFactors[0]) / (rgbAFactors[0] + 27.13),\n (400.0 * rgbAFactors[1]) / (rgbAFactors[1] + 27.13),\n (400.0 * rgbAFactors[2]) / (rgbAFactors[2] + 27.13),\n ];\n const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;\n return new ViewingConditions(\n n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);\n }\n\n /**\n * Parameters are intermediate values of the CAM16 conversion process. Their\n * names are shorthand for technical color science terminology, this class\n * would not benefit from documenting them individually. A brief overview\n * is available in the CAM16 specification, and a complete overview requires\n * a color science textbook, such as Fairchild's Color Appearance Models.\n */\n private constructor(\n public n: number, public aw: number, public nbb: number,\n public ncb: number, public c: number, public nc: number,\n public rgbD: number[], public fl: number, public fLRoot: number,\n public z: number) {}\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {ViewingConditions} from './viewing_conditions.js';\n\n/**\n * CAM16, a color appearance model. Colors are not just defined by their hex\n * code, but rather, a hex code and viewing conditions.\n *\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*, a*,\n * b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and should be used when measuring distances between colors.\n *\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n */\nexport class Cam16 {\n /**\n * All of the CAM16 dimensions can be calculated from 3 of the dimensions, in\n * the following combinations:\n * - {j or q} and {c, m, or s} and hue\n * - jstar, astar, bstar\n * Prefer using a static method that constructs from 3 of those dimensions.\n * This constructor is intended for those methods to use to return all\n * possible dimensions.\n *\n * @param hue\n * @param chroma informally, colorfulness / color intensity. like saturation\n * in HSL, except perceptually accurate.\n * @param j lightness\n * @param q brightness; ratio of lightness to white point's lightness\n * @param m colorfulness\n * @param s saturation; ratio of chroma to white point's chroma\n * @param jstar CAM16-UCS J coordinate\n * @param astar CAM16-UCS a coordinate\n * @param bstar CAM16-UCS b coordinate\n */\n constructor(\n readonly hue: number, readonly chroma: number, readonly j: number,\n readonly q: number, readonly m: number, readonly s: number,\n readonly jstar: number, readonly astar: number, readonly bstar: number) {}\n\n /**\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*,\n * a*, b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and is used to measure distances between colors.\n */\n distance(other: Cam16): number {\n const dJ = this.jstar - other.jstar;\n const dA = this.astar - other.astar;\n const dB = this.bstar - other.bstar;\n const dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);\n const dE = 1.41 * Math.pow(dEPrime, 0.63);\n return dE;\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return CAM16 color, assuming the color was viewed in default viewing\n * conditions.\n */\n static fromInt(argb: number): Cam16 {\n return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n * @return CAM16 color.\n */\n static fromIntInViewingConditions(\n argb: number, viewingConditions: ViewingConditions): Cam16 {\n const red = (argb & 0x00ff0000) >> 16;\n const green = (argb & 0x0000ff00) >> 8;\n const blue = (argb & 0x000000ff);\n const redL = utils.linearized(red);\n const greenL = utils.linearized(green);\n const blueL = utils.linearized(blue);\n const x = 0.41233895 * redL + 0.35762064 * greenL + 0.18051042 * blueL;\n const y = 0.2126 * redL + 0.7152 * greenL + 0.0722 * blueL;\n const z = 0.01932141 * redL + 0.11916382 * greenL + 0.95034478 * blueL;\n\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n\n const rAF = Math.pow((viewingConditions.fl * Math.abs(rD)) / 100.0, 0.42);\n const gAF = Math.pow((viewingConditions.fl * Math.abs(gD)) / 100.0, 0.42);\n const bAF = Math.pow((viewingConditions.fl * Math.abs(bD)) / 100.0, 0.42);\n\n const rA = (math.signum(rD) * 400.0 * rAF) / (rAF + 27.13);\n const gA = (math.signum(gD) * 400.0 * gAF) / (gAF + 27.13);\n const bA = (math.signum(bD) * 400.0 * bAF) / (bAF + 27.13);\n\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n const b = (rA + gA - 2.0 * bA) / 9.0;\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n const atan2 = Math.atan2(b, a);\n const atanDegrees = (atan2 * 180.0) / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360.0 :\n atanDegrees;\n const hueRadians = (hue * Math.PI) / 180.0;\n\n const ac = p2 * viewingConditions.nbb;\n const j = 100.0 *\n Math.pow(\n ac / viewingConditions.aw,\n viewingConditions.c * viewingConditions.z);\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const huePrime = hue < 20.14 ? hue + 360 : hue;\n const eHue = 0.25 * (Math.cos((huePrime * Math.PI) / 180.0 + 2.0) + 3.8);\n const p1 =\n (50000.0 / 13.0) * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = (p1 * Math.sqrt(a * a + b * b)) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const c = alpha * Math.sqrt(j / 100.0);\n const m = c * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n\n return new Cam16(hue, c, j, q, m, s, jstar, astar, bstar);\n }\n\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n */\n static fromJch(j: number, c: number, h: number): Cam16 {\n return Cam16.fromJchInViewingConditions(j, c, h, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromJchInViewingConditions(\n j: number, c: number, h: number,\n viewingConditions: ViewingConditions): Cam16 {\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const m = c * viewingConditions.fLRoot;\n const alpha = c / Math.sqrt(j / 100.0);\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const hueRadians = (h * Math.PI) / 180.0;\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(h, c, j, q, m, s, jstar, astar, bstar);\n }\n\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n */\n static fromUcs(jstar: number, astar: number, bstar: number): Cam16 {\n return Cam16.fromUcsInViewingConditions(\n jstar, astar, bstar, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromUcsInViewingConditions(\n jstar: number, astar: number, bstar: number,\n viewingConditions: ViewingConditions): Cam16 {\n const a = astar;\n const b = bstar;\n const m = Math.sqrt(a * a + b * b);\n const M = (Math.exp(m * 0.0228) - 1.0) / 0.0228;\n const c = M / viewingConditions.fLRoot;\n let h = Math.atan2(b, a) * (180.0 / Math.PI);\n if (h < 0.0) {\n h += 360.0;\n }\n const j = jstar / (1 - (jstar - 100) * 0.007);\n return Cam16.fromJchInViewingConditions(j, c, h, viewingConditions);\n }\n\n /**\n * @return ARGB representation of color, assuming the color was viewed in\n * default viewing conditions, which are near-identical to the default\n * viewing conditions for sRGB.\n */\n toInt(): number {\n return this.viewed(ViewingConditions.DEFAULT);\n }\n\n /**\n * @param viewingConditions Information about the environment where the color\n * will be viewed.\n * @return ARGB representation of color\n */\n viewed(viewingConditions: ViewingConditions): number {\n const alpha = this.chroma === 0.0 || this.j === 0.0 ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n\n const t = Math.pow(\n alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73),\n 1.0 / 0.9);\n const hRad = (this.hue * Math.PI) / 180.0;\n\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(\n this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = ac / viewingConditions.nbb;\n\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n\n const gamma = (23.0 * (p2 + 0.305) * t) /\n (23.0 * p1 + 11.0 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n\n const argb = utils.argbFromXyz(x, y, z);\n return argb;\n }\n\n /// Given color expressed in XYZ and viewed in [viewingConditions], convert to\n /// CAM16.\n static fromXyzInViewingConditions(\n x: number, y: number, z: number,\n viewingConditions: ViewingConditions): Cam16 {\n // Transform XYZ to 'cone'/'rgb' responses\n\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n\n // Discount illuminant\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n\n // chromatic adaptation\n const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100.0, 0.42);\n const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100.0, 0.42);\n const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100.0, 0.42);\n const rA = math.signum(rD) * 400.0 * rAF / (rAF + 27.13);\n const gA = math.signum(gD) * 400.0 * gAF / (gAF + 27.13);\n const bA = math.signum(bD) * 400.0 * bAF / (bAF + 27.13);\n\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n\n // auxiliary components\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n\n // hue\n const atan2 = Math.atan2(b, a);\n const atanDegrees = atan2 * 180.0 / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360 :\n atanDegrees;\n const hueRadians = hue * Math.PI / 180.0;\n\n // achromatic response to color\n const ac = p2 * viewingConditions.nbb;\n\n // CAM16 lightness and brightness\n const J = 100.0 *\n Math.pow(\n ac / viewingConditions.aw,\n viewingConditions.c * viewingConditions.z);\n const Q = (4.0 / viewingConditions.c) * Math.sqrt(J / 100.0) *\n (viewingConditions.aw + 4.0) * (viewingConditions.fLRoot);\n\n const huePrime = (hue < 20.14) ? hue + 360 : hue;\n const eHue =\n (1.0 / 4.0) * (Math.cos(huePrime * Math.PI / 180.0 + 2.0) + 3.8);\n const p1 =\n 50000.0 / 13.0 * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = p1 * Math.sqrt(a * a + b * b) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n // CAM16 chroma, colorfulness, chroma\n const C = alpha * Math.sqrt(J / 100.0);\n const M = C * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n\n // CAM16-UCS components\n const jstar = (1.0 + 100.0 * 0.007) * J / (1.0 + 0.007 * J);\n const mstar = Math.log(1.0 + 0.0228 * M) / 0.0228;\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, C, J, Q, M, s, jstar, astar, bstar);\n }\n\n /// XYZ representation of CAM16 seen in [viewingConditions].\n xyzInViewingConditions(viewingConditions: ViewingConditions): number[] {\n const alpha = (this.chroma === 0.0 || this.j === 0.0) ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n\n const t = Math.pow(\n alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73),\n 1.0 / 0.9);\n const hRad = this.hue * Math.PI / 180.0;\n\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(\n this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n\n const p2 = (ac / viewingConditions.nbb);\n\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n\n return [x, y, z];\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\nimport {Cam16} from './cam16.js';\nimport {ViewingConditions} from './viewing_conditions.js';\n\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * A class that solves the HCT equation.\n */\nexport class HctSolver {\n static SCALED_DISCOUNT_FROM_LINRGB = [\n [\n 0.001200833568784504,\n 0.002389694492170889,\n 0.0002795742885861124,\n ],\n [\n 0.0005891086651375999,\n 0.0029785502573438758,\n 0.0003270666104008398,\n ],\n [\n 0.00010146692491640572,\n 0.0005364214359186694,\n 0.0032979401770712076,\n ],\n ];\n\n static LINRGB_FROM_SCALED_DISCOUNT = [\n [\n 1373.2198709594231,\n -1100.4251190754821,\n -7.278681089101213,\n ],\n [\n -271.815969077903,\n 559.6580465940733,\n -32.46047482791194,\n ],\n [\n 1.9622899599665666,\n -57.173814538844006,\n 308.7233197812385,\n ],\n ];\n\n static Y_FROM_LINRGB = [0.2126, 0.7152, 0.0722];\n\n static CRITICAL_PLANES = [\n 0.015176349177441876, 0.045529047532325624, 0.07588174588720938,\n 0.10623444424209313, 0.13658714259697685, 0.16693984095186062,\n 0.19729253930674434, 0.2276452376616281, 0.2579979360165119,\n 0.28835063437139563, 0.3188300904430532, 0.350925934958123,\n 0.3848314933096426, 0.42057480301049466, 0.458183274052838,\n 0.4976837250274023, 0.5391024159806381, 0.5824650784040898,\n 0.6277969426914107, 0.6751227633498623, 0.7244668422128921,\n 0.775853049866786, 0.829304845476233, 0.8848452951698498,\n 0.942497089126609, 1.0022825574869039, 1.0642236851973577,\n 1.1283421258858297, 1.1946592148522128, 1.2631959812511864,\n 1.3339731595349034, 1.407011200216447, 1.4823302800086415,\n 1.5599503113873272, 1.6398909516233677, 1.7221716113234105,\n 1.8068114625156377, 1.8938294463134073, 1.9832442801866852,\n 2.075074464868551, 2.1693382909216234, 2.2660538449872063,\n 2.36523901573795, 2.4669114995532007, 2.5710888059345764,\n 2.6777882626779785, 2.7870270208169257, 2.898822059350997,\n 3.0131901897720907, 3.1301480604002863, 3.2497121605402226,\n 3.3718988244681087, 3.4967242352587946, 3.624204428461639,\n 3.754355295633311, 3.887192587735158, 4.022731918402185,\n 4.160988767090289, 4.301978482107941, 4.445716283538092,\n 4.592217266055746, 4.741496401646282, 4.893568542229298,\n 5.048448422192488, 5.20615066083972, 5.3666897647573375,\n 5.5300801301023865, 5.696336044816294, 5.865471690767354,\n 6.037501145825082, 6.212438385869475, 6.390297286737924,\n 6.571091626112461, 6.7548350853498045, 6.941541251256611,\n 7.131223617812143, 7.323895587840543, 7.5195704746346665,\n 7.7182615035334345, 7.919981813454504, 8.124744458384042,\n 8.332562408825165, 8.543448553206703, 8.757415699253682,\n 8.974476575321063, 9.194643831691977, 9.417930041841839,\n 9.644347703669503, 9.873909240696694, 10.106627003236781,\n 10.342513269534024, 10.58158024687427, 10.8238400726681,\n 11.069304815507364, 11.317986476196008, 11.569896988756009,\n 11.825048221409341, 12.083451977536606, 12.345119996613247,\n 12.610063955123938, 12.878295467455942, 13.149826086772048,\n 13.42466730586372, 13.702830557985108, 13.984327217668513,\n 14.269168601521828, 14.55736596900856, 14.848930523210871,\n 15.143873411576273, 15.44220572664832, 15.743938506781891,\n 16.04908273684337, 16.35764934889634, 16.66964922287304,\n 16.985093187232053, 17.30399201960269, 17.62635644741625,\n 17.95219714852476, 18.281524751807332, 18.614349837764564,\n 18.95068293910138, 19.290534541298456, 19.633915083172692,\n 19.98083495742689, 20.331304511189067, 20.685334046541502,\n 21.042933821039977, 21.404114048223256, 21.76888489811322,\n 22.137256497705877, 22.50923893145328, 22.884842241736916,\n 23.264076429332462, 23.6469514538663, 24.033477234264016,\n 24.42366364919083, 24.817520537484558, 25.21505769858089,\n 25.61628489293138, 26.021211842414342, 26.429848230738664,\n 26.842203703840827, 27.258287870275353, 27.678110301598522,\n 28.10168053274597, 28.529008062403893, 28.96010235337422,\n 29.39497283293396, 29.83362889318845, 30.276079891419332,\n 30.722335150426627, 31.172403958865512, 31.62629557157785,\n 32.08401920991837, 32.54558406207592, 33.010999283389665,\n 33.4802739966603, 33.953417292456834, 34.430438229418264,\n 34.911345834551085, 35.39614910352207, 35.88485700094671,\n 36.37747846067349, 36.87402238606382, 37.37449765026789,\n 37.87891309649659, 38.38727753828926, 38.89959975977785,\n 39.41588851594697, 39.93615253289054, 40.460400508064545,\n 40.98864111053629, 41.520882981230194, 42.05713473317016,\n 42.597404951718396, 43.141702194811224, 43.6900349931913,\n 44.24241185063697, 44.798841244188324, 45.35933162437017,\n 45.92389141541209, 46.49252901546552, 47.065252796817916,\n 47.64207110610409, 48.22299226451468, 48.808024568002054,\n 49.3971762874833, 49.9904556690408, 50.587870934119984,\n 51.189430279724725, 51.79514187861014, 52.40501387947288,\n 53.0190544071392, 53.637271562750364, 54.259673423945976,\n 54.88626804504493, 55.517063457223934, 56.15206766869424,\n 56.79128866487574, 57.43473440856916, 58.08241284012621,\n 58.734331877617365, 59.39049941699807, 60.05092333227251,\n 60.715611475655585, 61.38457167773311, 62.057811747619894,\n 62.7353394731159, 63.417162620860914, 64.10328893648692,\n 64.79372614476921, 65.48848194977529, 66.18756403501224,\n 66.89098006357258, 67.59873767827808, 68.31084450182222,\n 69.02730813691093, 69.74813616640164, 70.47333615344107,\n 71.20291564160104, 71.93688215501312, 72.67524319850172,\n 73.41800625771542, 74.16517879925733, 74.9167682708136,\n 75.67278210128072, 76.43322770089146, 77.1981124613393,\n 77.96744375590167, 78.74122893956174, 79.51947534912904,\n 80.30219030335869, 81.08938110306934, 81.88105503125999,\n 82.67721935322541, 83.4778813166706, 84.28304815182372,\n 85.09272707154808, 85.90692527145302, 86.72564993000343,\n 87.54890820862819, 88.3767072518277, 89.2090541872801,\n 90.04595612594655, 90.88742016217518, 91.73345337380438,\n 92.58406282226491, 93.43925555268066, 94.29903859396902,\n 95.16341895893969, 96.03240364439274, 96.9059996312159,\n 97.78421388448044, 98.6670533535366, 99.55452497210776,\n ];\n\n /**\n * Sanitizes a small enough angle in radians.\n *\n * @param angle An angle in radians; must not deviate too much\n * from 0.\n * @return A coterminal angle between 0 and 2pi.\n */\n private static sanitizeRadians(angle: number): number {\n return (angle + Math.PI * 8) % (Math.PI * 2);\n }\n\n /**\n * Delinearizes an RGB component, returning a floating-point\n * number.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0.0 <= output <= 255.0, color channel converted to\n * regular RGB space\n */\n private static trueDelinearized(rgbComponent: number): number {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n } else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return delinearized * 255.0;\n }\n\n private static chromaticAdaptation(component: number): number {\n const af = Math.pow(Math.abs(component), 0.42);\n return mathUtils.signum(component) * 400.0 * af / (af + 27.13);\n }\n\n /**\n * Returns the hue of a linear RGB color in CAM16.\n *\n * @param linrgb The linear RGB coordinates of a color.\n * @return The hue of the color in CAM16, in radians.\n */\n private static hueOf(linrgb: number[]): number {\n const scaledDiscount =\n mathUtils.matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB);\n const rA = HctSolver.chromaticAdaptation(scaledDiscount[0]);\n const gA = HctSolver.chromaticAdaptation(scaledDiscount[1]);\n const bA = HctSolver.chromaticAdaptation(scaledDiscount[2]);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n return Math.atan2(b, a);\n }\n\n private static areInCyclicOrder(a: number, b: number, c: number): boolean {\n const deltaAB = HctSolver.sanitizeRadians(b - a);\n const deltaAC = HctSolver.sanitizeRadians(c - a);\n return deltaAB < deltaAC;\n }\n\n /**\n * Solves the lerp equation.\n *\n * @param source The starting number.\n * @param mid The number in the middle.\n * @param target The ending number.\n * @return A number t such that lerp(source, target, t) = mid.\n */\n private static intercept(source: number, mid: number, target: number):\n number {\n return (mid - source) / (target - source);\n }\n\n private static lerpPoint(source: number[], t: number, target: number[]):\n number[] {\n return [\n source[0] + (target[0] - source[0]) * t,\n source[1] + (target[1] - source[1]) * t,\n source[2] + (target[2] - source[2]) * t,\n ];\n }\n\n /**\n * Intersects a segment with a plane.\n *\n * @param source The coordinates of point A.\n * @param coordinate The R-, G-, or B-coordinate of the plane.\n * @param target The coordinates of point B.\n * @param axis The axis the plane is perpendicular with. (0: R, 1:\n * G, 2: B)\n * @return The intersection point of the segment AB with the plane\n * R=coordinate, G=coordinate, or B=coordinate\n */\n private static setCoordinate(\n source: number[],\n coordinate: number,\n target: number[],\n axis: number,\n ): number[] {\n const t = HctSolver.intercept(source[axis], coordinate, target[axis]);\n return HctSolver.lerpPoint(source, t, target);\n }\n\n private static isBounded(x: number): boolean {\n return 0.0 <= x && x <= 100.0;\n }\n\n /**\n * Returns the nth possible vertex of the polygonal intersection.\n *\n * @param y The Y value of the plane.\n * @param n The zero-based index of the point. 0 <= n <= 11.\n * @return The nth possible vertex of the polygonal intersection\n * of the y plane and the RGB cube, in linear RGB coordinates, if\n * it exists. If this possible vertex lies outside of the cube,\n * [-1.0, -1.0, -1.0] is returned.\n */\n private static nthVertex(y: number, n: number): number[] {\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const coordA = n % 4 <= 1 ? 0.0 : 100.0;\n const coordB = n % 2 === 0 ? 0.0 : 100.0;\n if (n < 4) {\n const g = coordA;\n const b = coordB;\n const r = (y - g * kG - b * kB) / kR;\n if (HctSolver.isBounded(r)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n } else if (n < 8) {\n const b = coordA;\n const r = coordB;\n const g = (y - r * kR - b * kB) / kG;\n if (HctSolver.isBounded(g)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n } else {\n const r = coordA;\n const g = coordB;\n const b = (y - r * kR - g * kG) / kB;\n if (HctSolver.isBounded(b)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n }\n }\n\n /**\n * Finds the segment containing the desired color.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return A list of two sets of linear RGB coordinates, each\n * corresponding to an endpoint of the segment containing the\n * desired color.\n */\n private static bisectToSegment(y: number, targetHue: number): number[][] {\n let left = [-1.0, -1.0, -1.0];\n let right = left;\n let leftHue = 0.0;\n let rightHue = 0.0;\n let initialized = false;\n let uncut = true;\n for (let n = 0; n < 12; n++) {\n const mid = HctSolver.nthVertex(y, n);\n if (mid[0] < 0) {\n continue;\n }\n const midHue = HctSolver.hueOf(mid);\n if (!initialized) {\n left = mid;\n right = mid;\n leftHue = midHue;\n rightHue = midHue;\n initialized = true;\n continue;\n }\n if (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) {\n uncut = false;\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rightHue = midHue;\n } else {\n left = mid;\n leftHue = midHue;\n }\n }\n }\n return [left, right];\n }\n\n private static midpoint(a: number[], b: number[]): number[] {\n return [\n (a[0] + b[0]) / 2,\n (a[1] + b[1]) / 2,\n (a[2] + b[2]) / 2,\n ];\n }\n\n private static criticalPlaneBelow(x: number): number {\n return Math.floor(x - 0.5);\n }\n\n private static criticalPlaneAbove(x: number): number {\n return Math.ceil(x - 0.5);\n }\n\n /**\n * Finds a color with the given Y and hue on the boundary of the\n * cube.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return The desired color, in linear RGB coordinates.\n */\n private static bisectToLimit(y: number, targetHue: number): number[] {\n const segment = HctSolver.bisectToSegment(y, targetHue);\n let left = segment[0];\n let leftHue = HctSolver.hueOf(left);\n let right = segment[1];\n for (let axis = 0; axis < 3; axis++) {\n if (left[axis] !== right[axis]) {\n let lPlane = -1;\n let rPlane = 255;\n if (left[axis] < right[axis]) {\n lPlane = HctSolver.criticalPlaneBelow(\n HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneAbove(\n HctSolver.trueDelinearized(right[axis]));\n } else {\n lPlane = HctSolver.criticalPlaneAbove(\n HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneBelow(\n HctSolver.trueDelinearized(right[axis]));\n }\n for (let i = 0; i < 8; i++) {\n if (Math.abs(rPlane - lPlane) <= 1) {\n break;\n } else {\n const mPlane = Math.floor((lPlane + rPlane) / 2.0);\n const midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane];\n const mid =\n HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis);\n const midHue = HctSolver.hueOf(mid);\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rPlane = mPlane;\n } else {\n left = mid;\n leftHue = midHue;\n lPlane = mPlane;\n }\n }\n }\n }\n }\n return HctSolver.midpoint(left, right);\n }\n\n private static inverseChromaticAdaptation(adapted: number): number {\n const adaptedAbs = Math.abs(adapted);\n const base = Math.max(0, 27.13 * adaptedAbs / (400.0 - adaptedAbs));\n return mathUtils.signum(adapted) * Math.pow(base, 1.0 / 0.42);\n }\n\n /**\n * Finds a color with the given hue, chroma, and Y.\n *\n * @param hueRadians The desired hue in radians.\n * @param chroma The desired chroma.\n * @param y The desired Y.\n * @return The desired color as a hexadecimal integer, if found; 0\n * otherwise.\n */\n private static findResultByJ(hueRadians: number, chroma: number, y: number):\n number {\n // Initial estimate of j.\n let j = Math.sqrt(y) * 11.0;\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const viewingConditions = ViewingConditions.DEFAULT;\n const tInnerCoeff =\n 1 / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const eHue = 0.25 * (Math.cos(hueRadians + 2.0) + 3.8);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const hSin = Math.sin(hueRadians);\n const hCos = Math.cos(hueRadians);\n for (let iterationRound = 0; iterationRound < 5; iterationRound++) {\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const jNormalized = j / 100.0;\n const alpha =\n chroma === 0.0 || j === 0.0 ? 0.0 : chroma / Math.sqrt(jNormalized);\n const t = Math.pow(alpha * tInnerCoeff, 1.0 / 0.9);\n const ac = viewingConditions.aw *\n Math.pow(\n jNormalized,\n 1.0 / viewingConditions.c / viewingConditions.z,\n );\n const p2 = ac / viewingConditions.nbb;\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCScaled = HctSolver.inverseChromaticAdaptation(rA);\n const gCScaled = HctSolver.inverseChromaticAdaptation(gA);\n const bCScaled = HctSolver.inverseChromaticAdaptation(bA);\n const linrgb = mathUtils.matrixMultiply(\n [rCScaled, gCScaled, bCScaled],\n HctSolver.LINRGB_FROM_SCALED_DISCOUNT,\n );\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) {\n return 0;\n }\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];\n if (fnj <= 0) {\n return 0;\n }\n if (iterationRound === 4 || Math.abs(fnj - y) < 0.002) {\n if (linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01) {\n return 0;\n }\n return colorUtils.argbFromLinrgb(linrgb);\n }\n // Iterates with Newton method,\n // Using 2 * fn(j) / j as the approximation of fn'(j)\n j = j - (fnj - y) * j / (2 * fnj);\n }\n return 0;\n }\n\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return A hexadecimal representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToInt(hueDegrees: number, chroma: number, lstar: number): number {\n if (chroma < 0.0001 || lstar < 0.0001 || lstar > 99.9999) {\n return colorUtils.argbFromLstar(lstar);\n }\n hueDegrees = mathUtils.sanitizeDegreesDouble(hueDegrees);\n const hueRadians = hueDegrees / 180 * Math.PI;\n const y = colorUtils.yFromLstar(lstar);\n const exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y);\n if (exactAnswer !== 0) {\n return exactAnswer;\n }\n const linrgb = HctSolver.bisectToLimit(y, hueRadians);\n return colorUtils.argbFromLinrgb(linrgb);\n }\n\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return An CAM16 object representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToCam(hueDegrees: number, chroma: number, lstar: number): Cam16 {\n return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A color system built using CAM16 hue and chroma, and L* from\n * L*a*b*.\n *\n * Using L* creates a link between the color system, contrast, and thus\n * accessibility. Contrast ratio depends on relative luminance, or Y in the XYZ\n * color space. L*, or perceptual luminance can be calculated from Y.\n *\n * Unlike Y, L* is linear to human perception, allowing trivial creation of\n * accurate color tones.\n *\n * Unlike contrast ratio, measuring contrast in L* is linear, and simple to\n * calculate. A difference of 40 in HCT tone guarantees a contrast ratio >= 3.0,\n * and a difference of 50 guarantees a contrast ratio >= 4.5.\n */\n\nimport * as utils from '../utils/color_utils.js';\n\nimport {Cam16} from './cam16.js';\nimport {HctSolver} from './hct_solver.js';\nimport {ViewingConditions} from './viewing_conditions.js';\n\n\n/**\n * HCT, hue, chroma, and tone. A color system that provides a perceptually\n * accurate color measurement system that can also accurately render what colors\n * will appear as in different lighting environments.\n */\nexport class Hct {\n /**\n * @param hue 0 <= hue < 360; invalid values are corrected.\n * @param chroma 0 <= chroma < ?; Informally, colorfulness. The color\n * returned may be lower than the requested chroma. Chroma has a different\n * maximum for any given hue and tone.\n * @param tone 0 <= tone <= 100; invalid values are corrected.\n * @return HCT representation of a color in default viewing conditions.\n */\n\n internalHue: number;\n internalChroma: number;\n internalTone: number;\n\n static from(hue: number, chroma: number, tone: number) {\n return new Hct(HctSolver.solveToInt(hue, chroma, tone));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return HCT representation of a color in default viewing conditions\n */\n static fromInt(argb: number) {\n return new Hct(argb);\n }\n\n toInt(): number {\n return this.argb;\n }\n\n /**\n * A number, in degrees, representing ex. red, orange, yellow, etc.\n * Ranges from 0 <= hue < 360.\n */\n get hue(): number {\n return this.internalHue;\n }\n\n /**\n * @param newHue 0 <= newHue < 360; invalid values are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set hue(newHue: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n newHue,\n this.internalChroma,\n this.internalTone,\n ),\n );\n }\n\n get chroma(): number {\n return this.internalChroma;\n }\n\n /**\n * @param newChroma 0 <= newChroma < ?\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set chroma(newChroma: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n this.internalHue,\n newChroma,\n this.internalTone,\n ),\n );\n }\n\n /** Lightness. Ranges from 0 to 100. */\n get tone(): number {\n return this.internalTone;\n }\n\n /**\n * @param newTone 0 <= newTone <= 100; invalid valids are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set tone(newTone: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n this.internalHue,\n this.internalChroma,\n newTone,\n ),\n );\n }\n\n private constructor(private argb: number) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n\n private setInternalState(argb: number) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n\n /**\n * Translates a color into different [ViewingConditions].\n *\n * Colors change appearance. They look different with lights on versus off,\n * the same color, as in hex code, on white looks different when on black.\n * This is called color relativity, most famously explicated by Josef Albers\n * in Interaction of Color.\n *\n * In color science, color appearance models can account for this and\n * calculate the appearance of a color in different settings. HCT is based on\n * CAM16, a color appearance model, and uses it to make these calculations.\n *\n * See [ViewingConditions.make] for parameters affecting color appearance.\n */\n inViewingConditions(vc: ViewingConditions): Hct {\n // 1. Use CAM16 to find XYZ coordinates of color in specified VC.\n const cam = Cam16.fromInt(this.toInt());\n const viewedInVc = cam.xyzInViewingConditions(vc);\n\n // 2. Create CAM16 of those XYZ coordinates in default VC.\n const recastInVc = Cam16.fromXyzInViewingConditions(\n viewedInVc[0],\n viewedInVc[1],\n viewedInVc[2],\n ViewingConditions.make(),\n );\n\n // 3. Create HCT from:\n // - CAM16 using default VC with XYZ coordinates in specified VC.\n // - L* converted from Y in XYZ coordinates in specified VC.\n const recastHct = Hct.from(\n recastInVc.hue,\n recastInVc.chroma,\n utils.lstarFromY(viewedInVc[1]),\n );\n return recastHct;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {Cam16} from '../hct/cam16.js';\nimport {Hct} from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\n/**\n * Functions for blending in HCT and CAM16.\n */\nexport class Blend {\n /**\n * Blend the design color's HCT hue towards the key color's HCT\n * hue, in a way that leaves the original color recognizable and\n * recognizably shifted towards the key color.\n *\n * @param designColor ARGB representation of an arbitrary color.\n * @param sourceColor ARGB representation of the main theme color.\n * @return The design color with a hue shifted towards the\n * system's color, a slightly warmer/cooler variant of the design\n * color's hue.\n */\n static harmonize(designColor: number, sourceColor: number): number {\n const fromHct = Hct.fromInt(designColor);\n const toHct = Hct.fromInt(sourceColor);\n const differenceDegrees =\n mathUtils.differenceDegrees(fromHct.hue, toHct.hue);\n const rotationDegrees = Math.min(differenceDegrees * 0.5, 15.0);\n const outputHue = mathUtils.sanitizeDegreesDouble(\n fromHct.hue +\n rotationDegrees * mathUtils.rotationDirection(fromHct.hue, toHct.hue));\n return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();\n }\n\n /**\n * Blends hue from one color into another. The chroma and tone of\n * the original color are maintained.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, with a hue blended towards to. Chroma and tone\n * are constant.\n */\n static hctHue(from: number, to: number, amount: number): number {\n const ucs = Blend.cam16Ucs(from, to, amount);\n const ucsCam = Cam16.fromInt(ucs);\n const fromCam = Cam16.fromInt(from);\n const blended = Hct.from(\n ucsCam.hue,\n fromCam.chroma,\n colorUtils.lstarFromArgb(from),\n );\n return blended.toInt();\n }\n\n /**\n * Blend in CAM16-UCS space.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, blended towards to. Hue, chroma, and tone will\n * change.\n */\n static cam16Ucs(from: number, to: number, amount: number): number {\n const fromCam = Cam16.fromInt(from);\n const toCam = Cam16.fromInt(to);\n const fromJ = fromCam.jstar;\n const fromA = fromCam.astar;\n const fromB = fromCam.bstar;\n const toJ = toCam.jstar;\n const toA = toCam.astar;\n const toB = toCam.bstar;\n const jstar = fromJ + (toJ - fromJ) * amount;\n const astar = fromA + (toA - fromA) * amount;\n const bstar = fromB + (toB - fromB) * amount;\n return Cam16.fromUcs(jstar, astar, bstar).toInt();\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * Utility methods for calculating contrast given two colors, or calculating a\n * color given one color and a contrast ratio.\n *\n * Contrast ratio is calculated using XYZ's Y. When linearized to match human\n * perception, Y becomes HCT's tone and L*a*b*'s' L*. Informally, this is the\n * lightness of a color.\n *\n * Methods refer to tone, T in the the HCT color space.\n * Tone is equivalent to L* in the L*a*b* color space, or L in the LCH color\n * space.\n */\nexport class Contrast {\n /**\n * Returns a contrast ratio, which ranges from 1 to 21.\n *\n * @param toneA Tone between 0 and 100. Values outside will be clamped.\n * @param toneB Tone between 0 and 100. Values outside will be clamped.\n */\n static ratioOfTones(toneA: number, toneB: number): number {\n toneA = math.clampDouble(0.0, 100.0, toneA);\n toneB = math.clampDouble(0.0, 100.0, toneB);\n return Contrast.ratioOfYs(utils.yFromLstar(toneA), utils.yFromLstar(toneB));\n }\n\n static ratioOfYs(y1: number, y2: number): number {\n const lighter = y1 > y2 ? y1 : y2;\n const darker = (lighter === y2) ? y1 : y2;\n return (lighter + 5.0) / (darker + 5.0);\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighter(tone: number, ratio: number): number {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n\n const darkY = utils.yFromLstar(tone);\n const lightY = ratio * (darkY + 5.0) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(lightY) + 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n\n /**\n * Returns a tone <= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darker(tone: number, ratio: number): number {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n\n const lightY = utils.yFromLstar(tone);\n const darkY = ((lightY + 5.0) / ratio) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(darkY) - 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the ratio with tone. For example, there is no color lighter than T100.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 100 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighterUnsafe(tone: number, ratio: number): number {\n const lighterSafe = Contrast.lighter(tone, ratio);\n return (lighterSafe < 0.0) ? 100.0 : lighterSafe;\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the [ratio with [tone]. For example, there is no color darker than T0.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 0 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darkerUnsafe(tone: number, ratio: number): number {\n const darkerSafe = Contrast.darker(tone, ratio);\n return (darkerSafe < 0.0) ? 0.0 : darkerSafe;\n }\n}", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\n/**\n * Check and/or fix universally disliked colors.\n * Color science studies of color preference indicate universal distaste for\n * dark yellow-greens, and also show this is correlated to distate for\n * biological waste and rotting food.\n *\n * See Palmer and Schloss, 2010 or Schloss and Palmer's Chapter 21 in Handbook\n * of Color Psychology (2015).\n */\nexport class DislikeAnalyzer {\n /**\n * Returns true if a color is disliked.\n *\n * @param hct A color to be judged.\n * @return Whether the color is disliked.\n *\n * Disliked is defined as a dark yellow-green that is not neutral.\n */\n static isDisliked(hct: Hct): boolean {\n const huePasses =\n Math.round(hct.hue) >= 90.0 && Math.round(hct.hue) <= 111.0;\n const chromaPasses = Math.round(hct.chroma) > 16.0;\n const tonePasses = Math.round(hct.tone) < 65.0;\n\n return huePasses && chromaPasses && tonePasses;\n }\n\n /**\n * If a color is disliked, lighten it to make it likable.\n *\n * @param hct A color to be judged.\n * @return A new color if the original color is disliked, or the original\n * color if it is acceptable.\n */\n static fixIfDisliked(hct: Hct): Hct {\n if (DislikeAnalyzer.isDisliked(hct)) {\n return Hct.from(\n hct.hue,\n hct.chroma,\n 70.0,\n );\n }\n\n return hct;\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Contrast} from '../contrast/contrast.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {ContrastCurve} from './contrast_curve.js';\nimport {DynamicScheme} from './dynamic_scheme.js';\nimport {ToneDeltaPair} from './tone_delta_pair.js';\n\n/**\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone given DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\ninterface FromPaletteOptions {\n name?: string;\n palette: (scheme: DynamicScheme) => TonalPalette;\n tone: (scheme: DynamicScheme) => number;\n isBackground?: boolean;\n background?: (scheme: DynamicScheme) => DynamicColor;\n secondBackground?: (scheme: DynamicScheme) => DynamicColor;\n contrastCurve?: ContrastCurve;\n toneDeltaPair?: (scheme: DynamicScheme) => ToneDeltaPair;\n}\n\n/**\n * A color that adjusts itself based on UI state provided by DynamicScheme.\n *\n * Colors without backgrounds do not change tone when contrast changes. Colors\n * with backgrounds become closer to their background as contrast lowers, and\n * further when contrast increases.\n *\n * Prefer static constructors. They require either a hexcode, a palette and\n * tone, or a hue and chroma. Optionally, they can provide a background\n * DynamicColor.\n */\nexport class DynamicColor {\n private readonly hctCache = new Map<DynamicScheme, Hct>();\n\n /**\n * Create a DynamicColor defined by a TonalPalette and HCT tone.\n *\n * @param args Functions with DynamicScheme as input. Must provide a palette\n * and tone. May provide a background DynamicColor and ToneDeltaConstraint.\n */\n static fromPalette(args: FromPaletteOptions): DynamicColor {\n return new DynamicColor(\n args.name ?? '',\n args.palette,\n args.tone,\n args.isBackground ?? false,\n args.background,\n args.secondBackground,\n args.contrastCurve,\n args.toneDeltaPair,\n );\n }\n\n /**\n * The base constructor for DynamicColor.\n *\n * _Strongly_ prefer using one of the convenience constructors. This class is\n * arguably too flexible to ensure it can support any scenario. Functional\n * arguments allow overriding without risks that come with subclasses.\n *\n * For example, the default behavior of adjust tone at max contrast\n * to be at a 7.0 ratio with its background is principled and\n * matches accessibility guidance. That does not mean it's the desired\n * approach for _every_ design system, and every color pairing,\n * always, in every case.\n *\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone, given a DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\n constructor(\n readonly name: string,\n readonly palette: (scheme: DynamicScheme) => TonalPalette,\n readonly tone: (scheme: DynamicScheme) => number,\n readonly isBackground: boolean,\n readonly background?: (scheme: DynamicScheme) => DynamicColor,\n readonly secondBackground?: (scheme: DynamicScheme) => DynamicColor,\n readonly contrastCurve?: ContrastCurve,\n readonly toneDeltaPair?: (scheme: DynamicScheme) => ToneDeltaPair,\n ) {\n if ((!background) && secondBackground) {\n throw new Error(\n `Color ${name} has secondBackground` +\n `defined, but background is not defined.`);\n }\n if ((!background) && contrastCurve) {\n throw new Error(\n `Color ${name} has contrastCurve` +\n `defined, but background is not defined.`);\n }\n if (background && !contrastCurve) {\n throw new Error(\n `Color ${name} has background` +\n `defined, but contrastCurve is not defined.`);\n }\n }\n\n /**\n * Return a ARGB integer (i.e. a hex code).\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getArgb(scheme: DynamicScheme): number {\n return this.getHct(scheme).toInt();\n }\n\n /**\n * Return a color, expressed in the HCT color space, that this\n * DynamicColor is under the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getHct(scheme: DynamicScheme): Hct {\n const cachedAnswer = this.hctCache.get(scheme);\n if (cachedAnswer != null) {\n return cachedAnswer;\n }\n const tone = this.getTone(scheme);\n const answer = this.palette(scheme).getHct(tone);\n if (this.hctCache.size > 4) {\n this.hctCache.clear();\n }\n this.hctCache.set(scheme, answer);\n return answer;\n }\n\n /**\n * Return a tone, T in the HCT color space, that this DynamicColor is under\n * the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getTone(scheme: DynamicScheme): number {\n const decreasingContrast = scheme.contrastLevel < 0;\n\n // Case 1: dual foreground, pair of colors with delta constraint.\n if (this.toneDeltaPair) {\n const toneDeltaPair = this.toneDeltaPair(scheme);\n const roleA = toneDeltaPair.roleA;\n const roleB = toneDeltaPair.roleB;\n const delta = toneDeltaPair.delta;\n const polarity = toneDeltaPair.polarity;\n const stayTogether = toneDeltaPair.stayTogether;\n\n const bg = this.background!(scheme);\n const bgTone = bg.getTone(scheme);\n\n const aIsNearer =\n (polarity === 'nearer' ||\n (polarity === 'lighter' && !scheme.isDark) ||\n (polarity === 'darker' && scheme.isDark));\n const nearer = aIsNearer ? roleA : roleB;\n const farther = aIsNearer ? roleB : roleA;\n const amNearer = this.name === nearer.name;\n const expansionDir = scheme.isDark ? 1 : -1;\n\n // 1st round: solve to min, each\n const nContrast = nearer.contrastCurve!.get(scheme.contrastLevel);\n const fContrast = farther.contrastCurve!.get(scheme.contrastLevel);\n\n // If a color is good enough, it is not adjusted.\n // Initial and adjusted tones for `nearer`\n const nInitialTone = nearer.tone(scheme);\n let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ?\n nInitialTone :\n DynamicColor.foregroundTone(bgTone, nContrast);\n // Initial and adjusted tones for `farther`\n const fInitialTone = farther.tone(scheme);\n let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ?\n fInitialTone :\n DynamicColor.foregroundTone(bgTone, fContrast);\n\n if (decreasingContrast) {\n // If decreasing contrast, adjust color to the \"bare minimum\"\n // that satisfies contrast.\n nTone = DynamicColor.foregroundTone(bgTone, nContrast);\n fTone = DynamicColor.foregroundTone(bgTone, fContrast);\n }\n\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones satisfy the constraint; no change needed.\n } else {\n // 2nd round: expand farther to match delta.\n fTone = math.clampDouble(0, 100, nTone + delta * expansionDir);\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones now satisfy the constraint; no change needed.\n } else {\n // 3rd round: contract nearer to match delta.\n nTone = math.clampDouble(0, 100, fTone - delta * expansionDir);\n }\n }\n\n // Avoids the 50-59 awkward zone.\n if (50 <= nTone && nTone < 60) {\n // If `nearer` is in the awkward zone, move it away, together with\n // `farther`.\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n } else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n } else if (50 <= fTone && fTone < 60) {\n if (stayTogether) {\n // Fixes both, to avoid two colors on opposite sides of the \"awkward\n // zone\".\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n } else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n } else {\n // Not required to stay together; fixes just one.\n if (expansionDir > 0) {\n fTone = 60;\n } else {\n fTone = 49;\n }\n }\n }\n\n // Returns `nTone` if this color is `nearer`, otherwise `fTone`.\n return amNearer ? nTone : fTone;\n }\n\n else {\n // Case 2: No contrast pair; just solve for itself.\n let answer = this.tone(scheme);\n\n if (this.background == null) {\n return answer; // No adjustment for colors with no background.\n }\n\n const bgTone = this.background(scheme).getTone(scheme);\n\n const desiredRatio = this.contrastCurve!.get(scheme.contrastLevel);\n\n if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio) {\n // Don't \"improve\" what's good enough.\n } else {\n // Rough improvement.\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n\n if (decreasingContrast) {\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n\n if (this.isBackground && 50 <= answer && answer < 60) {\n // Must adjust\n if (Contrast.ratioOfTones(49, bgTone) >= desiredRatio) {\n answer = 49;\n } else {\n answer = 60;\n }\n }\n\n if (this.secondBackground) {\n // Case 3: Adjust for dual backgrounds.\n\n const [bg1, bg2] = [this.background, this.secondBackground];\n const [bgTone1, bgTone2] =\n [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)];\n const [upper, lower] =\n [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];\n\n if (Contrast.ratioOfTones(upper, answer) >= desiredRatio &&\n Contrast.ratioOfTones(lower, answer) >= desiredRatio) {\n return answer;\n }\n\n // The darkest light tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const lightOption = Contrast.lighter(upper, desiredRatio);\n\n // The lightest dark tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const darkOption = Contrast.darker(lower, desiredRatio);\n\n // Tones suitable for the foreground.\n const availables = [];\n if (lightOption !== -1) availables.push(lightOption);\n if (darkOption !== -1) availables.push(darkOption);\n\n const prefersLight = DynamicColor.tonePrefersLightForeground(bgTone1) ||\n DynamicColor.tonePrefersLightForeground(bgTone2);\n if (prefersLight) {\n return (lightOption < 0) ? 100 : lightOption;\n }\n if (availables.length === 1) {\n return availables[0];\n }\n return (darkOption < 0) ? 0 : darkOption;\n }\n\n return answer;\n }\n }\n\n /**\n * Given a background tone, find a foreground tone, while ensuring they reach\n * a contrast ratio that is as close to [ratio] as possible.\n *\n * @param bgTone Tone in HCT. Range is 0 to 100, undefined behavior when it\n * falls outside that range.\n * @param ratio The contrast ratio desired between bgTone and the return\n * value.\n */\n static foregroundTone(bgTone: number, ratio: number): number {\n const lighterTone = Contrast.lighterUnsafe(bgTone, ratio);\n const darkerTone = Contrast.darkerUnsafe(bgTone, ratio);\n const lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone);\n const darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);\n const preferLighter = DynamicColor.tonePrefersLightForeground(bgTone);\n\n if (preferLighter) {\n // This handles an edge case where the initial contrast ratio is high\n // (ex. 13.0), and the ratio passed to the function is that high\n // ratio, and both the lighter and darker ratio fails to pass that\n // ratio.\n //\n // This was observed with Tonal Spot's On Primary Container turning\n // black momentarily between high and max contrast in light mode. PC's\n // standard tone was T90, OPC's was T10, it was light mode, and the\n // contrast value was 0.6568521221032331.\n const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < 0.1 &&\n lighterRatio < ratio && darkerRatio < ratio;\n return lighterRatio >= ratio || lighterRatio >= darkerRatio ||\n negligibleDifference ?\n lighterTone :\n darkerTone;\n } else {\n return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone :\n lighterTone;\n }\n }\n\n /**\n * Returns whether [tone] prefers a light foreground.\n *\n * People prefer white foregrounds on ~T60-70. Observed over time, and also\n * by Andrew Somers during research for APCA.\n *\n * T60 used as to create the smallest discontinuity possible when skipping\n * down to T49 in order to ensure light foregrounds.\n * Since `tertiaryContainer` in dark monochrome scheme requires a tone of\n * 60, it should not be adjusted. Therefore, 60 is excluded here.\n */\n static tonePrefersLightForeground(tone: number): boolean {\n return Math.round(tone) < 60.0;\n }\n\n /**\n * Returns whether [tone] can reach a contrast ratio of 4.5 with a lighter\n * color.\n */\n static toneAllowsLightForeground(tone: number): boolean {\n return Math.round(tone) <= 49.0;\n }\n\n /**\n * Adjust a tone such that white has 4.5 contrast, if the tone is\n * reasonably close to supporting it.\n */\n static enableLightForeground(tone: number): number {\n if (DynamicColor.tonePrefersLightForeground(tone) &&\n !DynamicColor.toneAllowsLightForeground(tone)) {\n return 49.0;\n }\n return tone;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\n/**\n * A convenience class for retrieving colors that are constant in hue and\n * chroma, but vary in tone.\n */\nexport class TonalPalette {\n private readonly cache = new Map<number, number>();\n\n /**\n * @param argb ARGB representation of a color\n * @return Tones matching that color's hue and chroma.\n */\n static fromInt(argb: number): TonalPalette {\n const hct = Hct.fromInt(argb);\n return TonalPalette.fromHct(hct);\n }\n\n /**\n * @param hct Hct\n * @return Tones matching that color's hue and chroma.\n */\n static fromHct(hct: Hct) {\n return new TonalPalette(hct.hue, hct.chroma, hct);\n }\n\n /**\n * @param hue HCT hue\n * @param chroma HCT chroma\n * @return Tones matching hue and chroma.\n */\n static fromHueAndChroma(hue: number, chroma: number): TonalPalette {\n const keyColor = new KeyColor(hue, chroma).create();\n return new TonalPalette(hue, chroma, keyColor);\n }\n\n private constructor(readonly hue: number, readonly chroma: number, readonly keyColor: Hct) {}\n\n /**\n * @param tone HCT tone, measured from 0 to 100.\n * @return ARGB representation of a color with that tone.\n */\n tone(tone: number): number {\n let argb = this.cache.get(tone);\n if (argb === undefined) {\n argb = Hct.from(this.hue, this.chroma, tone).toInt();\n this.cache.set(tone, argb);\n }\n return argb;\n }\n\n /**\n * @param tone HCT tone.\n * @return HCT representation of a color with that tone.\n */\n getHct(tone: number): Hct {\n return Hct.fromInt(this.tone(tone));\n }\n}\n\n/**\n * Key color is a color that represents the hue and chroma of a tonal palette\n */\nclass KeyColor {\n // Cache that maps tone to max chroma to avoid duplicated HCT calculation.\n private readonly chromaCache = new Map<number, number>();\n private readonly maxChromaValue = 200.0;\n\n constructor(readonly hue: number, readonly requestedChroma: number) {}\n\n /**\n * Creates a key color from a [hue] and a [chroma].\n * The key color is the first tone, starting from T50, matching the given hue\n * and chroma.\n *\n * @return Key color [Hct]\n */\n create(): Hct {\n // Pivot around T50 because T50 has the most chroma available, on\n // average. Thus it is most likely to have a direct answer.\n const pivotTone = 50;\n const toneStepSize = 1;\n // Epsilon to accept values slightly higher than the requested chroma.\n const epsilon = 0.01;\n\n // Binary search to find the tone that can provide a chroma that is closest\n // to the requested chroma.\n let lowerTone = 0;\n let upperTone = 100;\n while (lowerTone < upperTone) {\n const midTone = Math.floor((lowerTone + upperTone) / 2);\n const isAscending =\n this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);\n const sufficientChroma =\n this.maxChroma(midTone) >= this.requestedChroma - epsilon;\n\n if (sufficientChroma) {\n // Either range [lowerTone, midTone] or [midTone, upperTone] has\n // the answer, so search in the range that is closer the pivot tone.\n if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {\n upperTone = midTone;\n } else {\n if (lowerTone === midTone) {\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n lowerTone = midTone;\n }\n } else {\n // As there is no sufficient chroma in the midTone, follow the direction\n // to the chroma peak.\n if (isAscending) {\n lowerTone = midTone + toneStepSize;\n } else {\n // Keep midTone for potential chroma peak.\n upperTone = midTone;\n }\n }\n }\n\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n\n // Find the maximum chroma for a given tone\n private maxChroma(tone: number): number {\n if (this.chromaCache.has(tone)) {\n return this.chromaCache.get(tone)!;\n }\n const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;\n this.chromaCache.set(tone, chroma);\n return chroma;\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as math from '../utils/math_utils.js';\n\n/**\n * A class containing a value that changes with the contrast level.\n *\n * Usually represents the contrast requirements for a dynamic color on its\n * background. The four values correspond to values for contrast levels -1.0,\n * 0.0, 0.5, and 1.0, respectively.\n */\nexport class ContrastCurve {\n /**\n * Creates a `ContrastCurve` object.\n *\n * @param low Value for contrast level -1.0\n * @param normal Value for contrast level 0.0\n * @param medium Value for contrast level 0.5\n * @param high Value for contrast level 1.0\n */\n constructor(\n readonly low: number,\n readonly normal: number,\n readonly medium: number,\n readonly high: number,\n ) {}\n\n /**\n * Returns the value at a given contrast level.\n *\n * @param contrastLevel The contrast level. 0.0 is the default (normal); -1.0\n * is the lowest; 1.0 is the highest.\n * @return The value. For contrast ratios, a number between 1.0 and 21.0.\n */\n get(contrastLevel: number): number {\n if (contrastLevel <= -1.0) {\n return this.low;\n } else if (contrastLevel < 0.0) {\n return math.lerp(this.low, this.normal, (contrastLevel - (-1)) / 1);\n } else if (contrastLevel < 0.5) {\n return math.lerp(this.normal, this.medium, (contrastLevel - 0) / 0.5);\n } else if (contrastLevel < 1.0) {\n return math.lerp(this.medium, this.high, (contrastLevel - 0.5) / 0.5);\n } else {\n return this.high;\n }\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicColor} from './dynamic_color.js';\n\n/**\n * Describes the different in tone between colors.\n */\nexport type TonePolarity = 'darker'|'lighter'|'nearer'|'farther';\n\n/**\n * Documents a constraint between two DynamicColors, in which their tones must\n * have a certain distance from each other.\n *\n * Prefer a DynamicColor with a background, this is for special cases when\n * designers want tonal distance, literally contrast, between two colors that\n * don't have a background / foreground relationship or a contrast guarantee.\n */\nexport class ToneDeltaPair {\n /**\n * Documents a constraint in tone distance between two DynamicColors.\n *\n * The polarity is an adjective that describes \"A\", compared to \"B\".\n *\n * For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that\n * A's tone should be at least 15 darker than B's.\n *\n * 'nearer' and 'farther' describes closeness to the surface roles. For\n * instance, ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A\n * should be 10 lighter than B in light mode, and 10 darker than B in dark\n * mode.\n *\n * @param roleA The first role in a pair.\n * @param roleB The second role in a pair.\n * @param delta Required difference between tones. Absolute value, negative\n * values have undefined behavior.\n * @param polarity The relative relation between tones of roleA and roleB,\n * as described above.\n * @param stayTogether Whether these two roles should stay on the same side of\n * the \"awkward zone\" (T50-59). This is necessary for certain cases where\n * one role has two backgrounds.\n */\n constructor(\n readonly roleA: DynamicColor,\n readonly roleB: DynamicColor,\n readonly delta: number,\n readonly polarity: TonePolarity,\n readonly stayTogether: boolean,\n ) {}\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Set of themes supported by Dynamic Color.\n * Instantiate the corresponding subclass, ex. SchemeTonalSpot, to create\n * colors corresponding to the theme.\n */\nexport enum Variant {\n MONOCHROME,\n NEUTRAL,\n TONAL_SPOT,\n VIBRANT,\n EXPRESSIVE,\n FIDELITY,\n CONTENT,\n RAINBOW,\n FRUIT_SALAD\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DislikeAnalyzer} from '../dislike/dislike_analyzer.js';\nimport {Hct} from '../hct/hct.js';\n\nimport {ContrastCurve} from './contrast_curve.js';\nimport {DynamicColor} from './dynamic_color.js';\nimport {DynamicScheme} from './dynamic_scheme.js';\nimport {ToneDeltaPair} from './tone_delta_pair.js';\nimport {Variant} from './variant.js';\n\nfunction isFidelity(scheme: DynamicScheme): boolean {\n return scheme.variant === Variant.FIDELITY ||\n scheme.variant === Variant.CONTENT;\n}\n\nfunction isMonochrome(scheme: DynamicScheme): boolean {\n return scheme.variant === Variant.MONOCHROME;\n}\n\nfunction findDesiredChromaByTone(\n hue: number, chroma: number, tone: number,\n byDecreasingTone: boolean): number {\n let answer = tone;\n\n let closestToChroma = Hct.from(hue, chroma, tone);\n if (closestToChroma.chroma < chroma) {\n let chromaPeak = closestToChroma.chroma;\n while (closestToChroma.chroma < chroma) {\n answer += byDecreasingTone ? -1.0 : 1.0;\n const potentialSolution = Hct.from(hue, chroma, answer);\n if (chromaPeak > potentialSolution.chroma) {\n break;\n }\n if (Math.abs(potentialSolution.chroma - chroma) < 0.4) {\n break;\n }\n\n const potentialDelta = Math.abs(potentialSolution.chroma - chroma);\n const currentDelta = Math.abs(closestToChroma.chroma - chroma);\n if (potentialDelta < currentDelta) {\n closestToChroma = potentialSolution;\n }\n chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);\n }\n }\n\n return answer;\n}\n\n/**\n * DynamicColors for the colors in the Material Design system.\n */\n// Material Color Utilities namespaces the various utilities it provides.\n// tslint:disable-next-line:class-as-namespace\nexport class MaterialDynamicColors {\n static contentAccentToneDelta = 15.0;\n static highestSurface(s: DynamicScheme): DynamicColor {\n return s.isDark ? MaterialDynamicColors.surfaceBright :\n MaterialDynamicColors.surfaceDim;\n }\n\n static primaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'primary_palette_key_color',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.primaryPalette.keyColor.tone,\n });\n\n static secondaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'secondary_palette_key_color',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.secondaryPalette.keyColor.tone,\n });\n\n static tertiaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'tertiary_palette_key_color',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => s.tertiaryPalette.keyColor.tone,\n });\n\n static neutralPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_palette_key_color',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.neutralPalette.keyColor.tone,\n });\n\n static neutralVariantPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_variant_palette_key_color',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.neutralVariantPalette.keyColor.tone,\n });\n\n static background = DynamicColor.fromPalette({\n name: 'background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n });\n\n static onBackground = DynamicColor.fromPalette({\n name: 'on_background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.background,\n contrastCurve: new ContrastCurve(3, 3, 4.5, 7),\n });\n\n static surface = DynamicColor.fromPalette({\n name: 'surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n });\n\n static surfaceDim = DynamicColor.fromPalette({\n name: 'surface_dim',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? 6 : new ContrastCurve(87, 87, 80, 75).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceBright = DynamicColor.fromPalette({\n name: 'surface_bright',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? new ContrastCurve(24, 24, 29, 34).get(s.contrastLevel) : 98,\n isBackground: true,\n });\n\n static surfaceContainerLowest = DynamicColor.fromPalette({\n name: 'surface_container_lowest',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? new ContrastCurve(4, 4, 2, 0).get(s.contrastLevel) : 100,\n isBackground: true,\n });\n\n static surfaceContainerLow = DynamicColor.fromPalette({\n name: 'surface_container_low',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(10, 10, 11, 12).get(s.contrastLevel) :\n new ContrastCurve(96, 96, 96, 95).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainer = DynamicColor.fromPalette({\n name: 'surface_container',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(12, 12, 16, 20).get(s.contrastLevel) :\n new ContrastCurve(94, 94, 92, 90).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainerHigh = DynamicColor.fromPalette({\n name: 'surface_container_high',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(17, 17, 21, 25).get(s.contrastLevel) :\n new ContrastCurve(92, 92, 88, 85).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainerHighest = DynamicColor.fromPalette({\n name: 'surface_container_highest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(22, 22, 26, 30).get(s.contrastLevel) :\n new ContrastCurve(90, 90, 84, 80).get(s.contrastLevel),\n isBackground: true,\n });\n\n static onSurface = DynamicColor.fromPalette({\n name: 'on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static surfaceVariant = DynamicColor.fromPalette({\n name: 'surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n });\n\n static onSurfaceVariant = DynamicColor.fromPalette({\n name: 'on_surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 80 : 30,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static inverseSurface = DynamicColor.fromPalette({\n name: 'inverse_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 20,\n });\n\n static inverseOnSurface = DynamicColor.fromPalette({\n name: 'inverse_on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 20 : 95,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static outline = DynamicColor.fromPalette({\n name: 'outline',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 60 : 50,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7),\n });\n\n static outlineVariant = DynamicColor.fromPalette({\n name: 'outline_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 80,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n });\n\n static shadow = DynamicColor.fromPalette({\n name: 'shadow',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n });\n\n static scrim = DynamicColor.fromPalette({\n name: 'scrim',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n });\n\n static surfaceTint = DynamicColor.fromPalette({\n name: 'surface_tint',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n });\n\n static primary = DynamicColor.fromPalette({\n name: 'primary',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 100 : 0;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary,\n 10, 'nearer', false),\n });\n\n static onPrimary = DynamicColor.fromPalette({\n name: 'on_primary',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.primary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static primaryContainer = DynamicColor.fromPalette({\n name: 'primary_container',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isFidelity(s)) {\n return s.sourceColorHct.tone;\n }\n if (isMonochrome(s)) {\n return s.isDark ? 85 : 25;\n }\n return s.isDark ? 30 : 90;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary,\n 10, 'nearer', false),\n });\n\n static onPrimaryContainer = DynamicColor.fromPalette({\n name: 'on_primary_container',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isFidelity(s)) {\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.primaryContainer.tone(s), 4.5);\n }\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.primaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static inversePrimary = DynamicColor.fromPalette({\n name: 'inverse_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 40 : 80,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n });\n\n static secondary = DynamicColor.fromPalette({\n name: 'secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryContainer,\n MaterialDynamicColors.secondary, 10, 'nearer', false),\n });\n\n static onSecondary = DynamicColor.fromPalette({\n name: 'on_secondary',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 100;\n } else {\n return s.isDark ? 20 : 100;\n }\n },\n background: (s) => MaterialDynamicColors.secondary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static secondaryContainer = DynamicColor.fromPalette({\n name: 'secondary_container',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n const initialTone = s.isDark ? 30 : 90;\n if (isMonochrome(s)) {\n return s.isDark ? 30 : 85;\n }\n if (!isFidelity(s)) {\n return initialTone;\n }\n return findDesiredChromaByTone(\n s.secondaryPalette.hue, s.secondaryPalette.chroma, initialTone,\n s.isDark ? false : true);\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryContainer,\n MaterialDynamicColors.secondary, 10, 'nearer', false),\n });\n\n static onSecondaryContainer = DynamicColor.fromPalette({\n name: 'on_secondary_container',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.secondaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.secondaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static tertiary = DynamicColor.fromPalette({\n name: 'tertiary',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 25;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary,\n 10, 'nearer', false),\n });\n\n static onTertiary = DynamicColor.fromPalette({\n name: 'on_tertiary',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.tertiary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static tertiaryContainer = DynamicColor.fromPalette({\n name: 'tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 60 : 49;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 30 : 90;\n }\n const proposedHct = s.tertiaryPalette.getHct(s.sourceColorHct.tone);\n return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary,\n 10, 'nearer', false),\n });\n\n static onTertiaryContainer = DynamicColor.fromPalette({\n name: 'on_tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.tertiaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.tertiaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static error = DynamicColor.fromPalette({\n name: 'error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10,\n 'nearer', false),\n });\n\n static onError = DynamicColor.fromPalette({\n name: 'on_error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 20 : 100,\n background: (s) => MaterialDynamicColors.error,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static errorContainer = DynamicColor.fromPalette({\n name: 'error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10,\n 'nearer', false),\n });\n\n static onErrorContainer = DynamicColor.fromPalette({\n name: 'on_error_container',\n palette: (s) => s.errorPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.errorContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static primaryFixed = DynamicColor.fromPalette({\n name: 'primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryFixed,\n MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n });\n\n static primaryFixedDim = DynamicColor.fromPalette({\n name: 'primary_fixed_dim',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryFixed,\n MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n });\n\n static onPrimaryFixed = DynamicColor.fromPalette({\n name: 'on_primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onPrimaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_primary_fixed_variant',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static secondaryFixed = DynamicColor.fromPalette({\n name: 'secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 80.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryFixed,\n MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n });\n\n static secondaryFixedDim = DynamicColor.fromPalette({\n name: 'secondary_fixed_dim',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 70.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryFixed,\n MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n });\n\n static onSecondaryFixed = DynamicColor.fromPalette({\n name: 'on_secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => 10.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onSecondaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_secondary_fixed_variant',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 25.0 : 30.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static tertiaryFixed = DynamicColor.fromPalette({\n name: 'tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryFixed,\n MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n });\n\n static tertiaryFixedDim = DynamicColor.fromPalette({\n name: 'tertiary_fixed_dim',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryFixed,\n MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n });\n\n static onTertiaryFixed = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onTertiaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed_variant',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {DynamicColor} from './dynamic_color.js';\nimport {MaterialDynamicColors} from './material_dynamic_colors.js';\nimport {Variant} from './variant.js';\n\n/**\n * @param sourceColorArgb The source color of the theme as an ARGB 32-bit\n * integer.\n * @param variant The variant, or style, of the theme.\n * @param contrastLevel Value from -1 to 1. -1 represents minimum contrast,\n * 0 represents standard (i.e. the design as spec'd), and 1 represents maximum\n * contrast.\n * @param isDark Whether the scheme is in dark mode or light mode.\n * @param primaryPalette Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually\n * colorful.\n * @param secondaryPalette Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * less colorful.\n * @param tertiaryPalette Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * a different hue from primary and colorful.\n * @param neutralPalette Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually not\n * colorful at all, intended for background & surface colors.\n * @param neutralVariantPalette Given a tone, produces a color. Hue and chroma\n * of the color are specified in the design specification of the variant.\n * Usually not colorful, but slightly more colorful than Neutral. Intended for\n * backgrounds & surfaces.\n */\ninterface DynamicSchemeOptions {\n sourceColorArgb: number;\n variant: Variant;\n contrastLevel: number;\n isDark: boolean;\n primaryPalette: TonalPalette;\n secondaryPalette: TonalPalette;\n tertiaryPalette: TonalPalette;\n neutralPalette: TonalPalette;\n neutralVariantPalette: TonalPalette;\n}\n\n/**\n * Constructed by a set of values representing the current UI state (such as\n * whether or not its dark theme, what the theme style is, etc.), and\n * provides a set of TonalPalettes that can create colors that fit in\n * with the theme style. Used by DynamicColor to resolve into a color.\n */\nexport class DynamicScheme {\n /**\n * The source color of the theme as an HCT color.\n */\n sourceColorHct: Hct;\n /**\n * Given a tone, produces a reddish, colorful, color.\n */\n errorPalette: TonalPalette;\n\n /** The source color of the theme as an ARGB 32-bit integer. */\n readonly sourceColorArgb: number;\n\n /** The variant, or style, of the theme. */\n readonly variant: Variant;\n\n /**\n * Value from -1 to 1. -1 represents minimum contrast. 0 represents standard\n * (i.e. the design as spec'd), and 1 represents maximum contrast.\n */\n readonly contrastLevel: number;\n\n /** Whether the scheme is in dark mode or light mode. */\n readonly isDark: boolean;\n\n /**\n * Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually\n * colorful.\n */\n readonly primaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * less colorful.\n */\n readonly secondaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * a different hue from primary and colorful.\n */\n readonly tertiaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually not\n * colorful at all, intended for background & surface colors.\n */\n readonly neutralPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma\n * of the color are specified in the design specification of the variant.\n * Usually not colorful, but slightly more colorful than Neutral. Intended for\n * backgrounds & surfaces.\n */\n readonly neutralVariantPalette: TonalPalette;\n\n constructor(args: DynamicSchemeOptions) {\n this.sourceColorArgb = args.sourceColorArgb;\n this.variant = args.variant;\n this.contrastLevel = args.contrastLevel;\n this.isDark = args.isDark;\n this.sourceColorHct = Hct.fromInt(args.sourceColorArgb);\n this.primaryPalette = args.primaryPalette;\n this.secondaryPalette = args.secondaryPalette;\n this.tertiaryPalette = args.tertiaryPalette;\n this.neutralPalette = args.neutralPalette;\n this.neutralVariantPalette = args.neutralVariantPalette;\n this.errorPalette = TonalPalette.fromHueAndChroma(25.0, 84.0);\n }\n\n /**\n * Support design spec'ing Dynamic Color by schemes that specify hue\n * rotations that should be applied at certain breakpoints.\n * @param sourceColor the source color of the theme, in HCT.\n * @param hues The \"breakpoints\", i.e. the hues at which a rotation should\n * be apply.\n * @param rotations The rotation that should be applied when source color's\n * hue is >= the same index in hues array, and <= the hue at the next index\n * in hues array.\n */\n static getRotatedHue(sourceColor: Hct, hues: number[], rotations: number[]):\n number {\n const sourceHue = sourceColor.hue;\n if (hues.length !== rotations.length) {\n throw new Error(`mismatch between hue length ${hues.length} & rotations ${\n rotations.length}`);\n }\n if (rotations.length === 1) {\n return math.sanitizeDegreesDouble(sourceColor.hue + rotations[0]);\n }\n const size = hues.length;\n for (let i = 0; i <= size - 2; i++) {\n const thisHue = hues[i];\n const nextHue = hues[i + 1];\n if (thisHue < sourceHue && sourceHue < nextHue) {\n return math.sanitizeDegreesDouble(sourceHue + rotations[i]);\n }\n }\n // If this statement executes, something is wrong, there should have been a\n // rotation found using the arrays.\n return sourceHue;\n }\n\n\n getArgb(dynamicColor: DynamicColor): number {\n return dynamicColor.getArgb(this);\n }\n\n getHct(dynamicColor: DynamicColor): Hct {\n return dynamicColor.getHct(this);\n }\n\n get primaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.primaryPaletteKeyColor);\n }\n\n get secondaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.secondaryPaletteKeyColor);\n }\n\n get tertiaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryPaletteKeyColor);\n }\n\n get neutralPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.neutralPaletteKeyColor);\n }\n\n get neutralVariantPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.neutralVariantPaletteKeyColor);\n }\n\n get background(): number {\n return this.getArgb(MaterialDynamicColors.background);\n }\n\n get onBackground(): number {\n return this.getArgb(MaterialDynamicColors.onBackground);\n }\n\n get surface(): number {\n return this.getArgb(MaterialDynamicColors.surface);\n }\n\n get surfaceDim(): number {\n return this.getArgb(MaterialDynamicColors.surfaceDim);\n }\n\n get surfaceBright(): number {\n return this.getArgb(MaterialDynamicColors.surfaceBright);\n }\n\n get surfaceContainerLowest(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerLowest);\n }\n\n get surfaceContainerLow(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerLow);\n }\n\n get surfaceContainer(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainer);\n }\n\n get surfaceContainerHigh(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerHigh);\n }\n\n get surfaceContainerHighest(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerHighest);\n }\n\n get onSurface(): number {\n return this.getArgb(MaterialDynamicColors.onSurface);\n }\n\n get surfaceVariant(): number {\n return this.getArgb(MaterialDynamicColors.surfaceVariant);\n }\n\n get onSurfaceVariant(): number {\n return this.getArgb(MaterialDynamicColors.onSurfaceVariant);\n }\n\n get inverseSurface(): number {\n return this.getArgb(MaterialDynamicColors.inverseSurface);\n }\n\n get inverseOnSurface(): number {\n return this.getArgb(MaterialDynamicColors.inverseOnSurface);\n }\n\n get outline(): number {\n return this.getArgb(MaterialDynamicColors.outline);\n }\n\n get outlineVariant(): number {\n return this.getArgb(MaterialDynamicColors.outlineVariant);\n }\n\n get shadow(): number {\n return this.getArgb(MaterialDynamicColors.shadow);\n }\n\n get scrim(): number {\n return this.getArgb(MaterialDynamicColors.scrim);\n }\n\n get surfaceTint(): number {\n return this.getArgb(MaterialDynamicColors.surfaceTint);\n }\n\n get primary(): number {\n return this.getArgb(MaterialDynamicColors.primary);\n }\n\n get onPrimary(): number {\n return this.getArgb(MaterialDynamicColors.onPrimary);\n }\n\n get primaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.primaryContainer);\n }\n\n get onPrimaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryContainer);\n }\n\n get inversePrimary(): number {\n return this.getArgb(MaterialDynamicColors.inversePrimary);\n }\n\n get secondary(): number {\n return this.getArgb(MaterialDynamicColors.secondary);\n }\n\n get onSecondary(): number {\n return this.getArgb(MaterialDynamicColors.onSecondary);\n }\n\n get secondaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.secondaryContainer);\n }\n\n get onSecondaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryContainer);\n }\n\n get tertiary(): number {\n return this.getArgb(MaterialDynamicColors.tertiary);\n }\n\n get onTertiary(): number {\n return this.getArgb(MaterialDynamicColors.onTertiary);\n }\n\n get tertiaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryContainer);\n }\n\n get onTertiaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryContainer);\n }\n\n get error(): number {\n return this.getArgb(MaterialDynamicColors.error);\n }\n\n get onError(): number {\n return this.getArgb(MaterialDynamicColors.onError);\n }\n\n get errorContainer(): number {\n return this.getArgb(MaterialDynamicColors.errorContainer);\n }\n\n get onErrorContainer(): number {\n return this.getArgb(MaterialDynamicColors.onErrorContainer);\n }\n\n get primaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.primaryFixed);\n }\n\n get primaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.primaryFixedDim);\n }\n\n get onPrimaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryFixed);\n }\n\n get onPrimaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryFixedVariant);\n }\n\n get secondaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.secondaryFixed);\n }\n\n get secondaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.secondaryFixedDim);\n }\n\n get onSecondaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryFixed);\n }\n\n get onSecondaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryFixedVariant);\n }\n\n get tertiaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryFixed);\n }\n\n get tertiaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryFixedDim);\n }\n\n get onTertiaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryFixed);\n }\n\n get onTertiaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryFixedVariant);\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\nimport {TonalPalette} from './tonal_palette.js';\n\n/**\n * Set of colors to generate a [CorePalette] from\n */\nexport interface CorePaletteColors {\n primary: number;\n secondary?: number;\n tertiary?: number;\n neutral?: number;\n neutralVariant?: number;\n error?: number;\n}\n\n/**\n * An intermediate concept between the key color for a UI theme, and a full\n * color scheme. 5 sets of tones are generated, all except one use the same hue\n * as the key color, and all vary in chroma.\n */\nexport class CorePalette {\n a1: TonalPalette;\n a2: TonalPalette;\n a3: TonalPalette;\n n1: TonalPalette;\n n2: TonalPalette;\n error: TonalPalette;\n\n /**\n * @param argb ARGB representation of a color\n */\n static of(argb: number): CorePalette {\n return new CorePalette(argb, false);\n }\n\n /**\n * @param argb ARGB representation of a color\n */\n static contentOf(argb: number): CorePalette {\n return new CorePalette(argb, true);\n }\n\n /**\n * Create a [CorePalette] from a set of colors\n */\n static fromColors(colors: CorePaletteColors): CorePalette {\n return CorePalette.createPaletteFromColors(false, colors);\n }\n\n /**\n * Create a content [CorePalette] from a set of colors\n */\n static contentFromColors(colors: CorePaletteColors): CorePalette {\n return CorePalette.createPaletteFromColors(true, colors);\n }\n\n private static createPaletteFromColors(\n content: boolean,\n colors: CorePaletteColors,\n ) {\n const palette = new CorePalette(colors.primary, content);\n if (colors.secondary) {\n const p = new CorePalette(colors.secondary, content);\n palette.a2 = p.a1;\n }\n if (colors.tertiary) {\n const p = new CorePalette(colors.tertiary, content);\n palette.a3 = p.a1;\n }\n if (colors.error) {\n const p = new CorePalette(colors.error, content);\n palette.error = p.a1;\n }\n if (colors.neutral) {\n const p = new CorePalette(colors.neutral, content);\n palette.n1 = p.n1;\n }\n if (colors.neutralVariant) {\n const p = new CorePalette(colors.neutralVariant, content);\n palette.n2 = p.n2;\n }\n return palette;\n }\n\n private constructor(argb: number, isContent: boolean) {\n const hct = Hct.fromInt(argb);\n const hue = hct.hue;\n const chroma = hct.chroma;\n if (isContent) {\n this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);\n this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);\n this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));\n this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));\n } else {\n this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));\n this.a2 = TonalPalette.fromHueAndChroma(hue, 16);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);\n this.n1 = TonalPalette.fromHueAndChroma(hue, 4);\n this.n2 = TonalPalette.fromHueAndChroma(hue, 8);\n }\n this.error = TonalPalette.fromHueAndChroma(25, 84);\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {CorePalette} from '../palettes/core_palette.js';\n\n/**\n * DEPRECATED. The `Scheme` class is deprecated in favor of `DynamicScheme`.\n * Please see\n * https://github.com/material-foundation/material-color-utilities/blob/main/make_schemes.md\n * for migration guidance.\n *\n * Represents a Material color scheme, a mapping of color roles to colors.\n */\nexport class Scheme {\n get primary(): number {\n return this.props.primary;\n }\n\n get onPrimary(): number {\n return this.props.onPrimary;\n }\n\n get primaryContainer(): number {\n return this.props.primaryContainer;\n }\n\n get onPrimaryContainer(): number {\n return this.props.onPrimaryContainer;\n }\n\n get secondary(): number {\n return this.props.secondary;\n }\n\n get onSecondary(): number {\n return this.props.onSecondary;\n }\n\n get secondaryContainer(): number {\n return this.props.secondaryContainer;\n }\n\n get onSecondaryContainer(): number {\n return this.props.onSecondaryContainer;\n }\n\n get tertiary(): number {\n return this.props.tertiary;\n }\n\n get onTertiary(): number {\n return this.props.onTertiary;\n }\n\n get tertiaryContainer(): number {\n return this.props.tertiaryContainer;\n }\n\n get onTertiaryContainer(): number {\n return this.props.onTertiaryContainer;\n }\n\n get error(): number {\n return this.props.error;\n }\n\n get onError(): number {\n return this.props.onError;\n }\n\n get errorContainer(): number {\n return this.props.errorContainer;\n }\n\n get onErrorContainer(): number {\n return this.props.onErrorContainer;\n }\n\n get background(): number {\n return this.props.background;\n }\n\n get onBackground(): number {\n return this.props.onBackground;\n }\n\n get surface(): number {\n return this.props.surface;\n }\n\n get onSurface(): number {\n return this.props.onSurface;\n }\n\n get surfaceVariant(): number {\n return this.props.surfaceVariant;\n }\n\n get onSurfaceVariant(): number {\n return this.props.onSurfaceVariant;\n }\n\n get outline(): number {\n return this.props.outline;\n }\n\n get outlineVariant(): number {\n return this.props.outlineVariant;\n }\n\n get shadow(): number {\n return this.props.shadow;\n }\n\n get scrim(): number {\n return this.props.scrim;\n }\n\n get inverseSurface(): number {\n return this.props.inverseSurface;\n }\n\n get inverseOnSurface(): number {\n return this.props.inverseOnSurface;\n }\n\n get inversePrimary(): number {\n return this.props.inversePrimary;\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material color scheme, based on the color's hue.\n */\n static light(argb: number): Scheme {\n return Scheme.lightFromCorePalette(CorePalette.of(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material color scheme, based on the color's hue.\n */\n static dark(argb: number): Scheme {\n return Scheme.darkFromCorePalette(CorePalette.of(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material content color scheme, based on the color's hue.\n */\n static lightContent(argb: number): Scheme {\n return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material content color scheme, based on the color's hue.\n */\n static darkContent(argb: number): Scheme {\n return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));\n }\n\n /**\n * Light scheme from core palette\n */\n static lightFromCorePalette(core: CorePalette): Scheme {\n return new Scheme({\n primary: core.a1.tone(40),\n onPrimary: core.a1.tone(100),\n primaryContainer: core.a1.tone(90),\n onPrimaryContainer: core.a1.tone(10),\n secondary: core.a2.tone(40),\n onSecondary: core.a2.tone(100),\n secondaryContainer: core.a2.tone(90),\n onSecondaryContainer: core.a2.tone(10),\n tertiary: core.a3.tone(40),\n onTertiary: core.a3.tone(100),\n tertiaryContainer: core.a3.tone(90),\n onTertiaryContainer: core.a3.tone(10),\n error: core.error.tone(40),\n onError: core.error.tone(100),\n errorContainer: core.error.tone(90),\n onErrorContainer: core.error.tone(10),\n background: core.n1.tone(99),\n onBackground: core.n1.tone(10),\n surface: core.n1.tone(99),\n onSurface: core.n1.tone(10),\n surfaceVariant: core.n2.tone(90),\n onSurfaceVariant: core.n2.tone(30),\n outline: core.n2.tone(50),\n outlineVariant: core.n2.tone(80),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(20),\n inverseOnSurface: core.n1.tone(95),\n inversePrimary: core.a1.tone(80)\n });\n }\n\n /**\n * Dark scheme from core palette\n */\n static darkFromCorePalette(core: CorePalette): Scheme {\n return new Scheme({\n primary: core.a1.tone(80),\n onPrimary: core.a1.tone(20),\n primaryContainer: core.a1.tone(30),\n onPrimaryContainer: core.a1.tone(90),\n secondary: core.a2.tone(80),\n onSecondary: core.a2.tone(20),\n secondaryContainer: core.a2.tone(30),\n onSecondaryContainer: core.a2.tone(90),\n tertiary: core.a3.tone(80),\n onTertiary: core.a3.tone(20),\n tertiaryContainer: core.a3.tone(30),\n onTertiaryContainer: core.a3.tone(90),\n error: core.error.tone(80),\n onError: core.error.tone(20),\n errorContainer: core.error.tone(30),\n onErrorContainer: core.error.tone(80),\n background: core.n1.tone(10),\n onBackground: core.n1.tone(90),\n surface: core.n1.tone(10),\n onSurface: core.n1.tone(90),\n surfaceVariant: core.n2.tone(30),\n onSurfaceVariant: core.n2.tone(80),\n outline: core.n2.tone(60),\n outlineVariant: core.n2.tone(30),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(90),\n inverseOnSurface: core.n1.tone(20),\n inversePrimary: core.a1.tone(40)\n });\n }\n\n private constructor(private readonly props: {\n primary: number,\n onPrimary: number,\n primaryContainer: number,\n onPrimaryContainer: number,\n secondary: number,\n onSecondary: number,\n secondaryContainer: number,\n onSecondaryContainer: number,\n tertiary: number,\n onTertiary: number,\n tertiaryContainer: number,\n onTertiaryContainer: number,\n error: number,\n onError: number,\n errorContainer: number,\n onErrorContainer: number,\n background: number,\n onBackground: number,\n surface: number,\n onSurface: number,\n surfaceVariant: number,\n onSurfaceVariant: number,\n outline: number,\n outlineVariant: number,\n shadow: number,\n scrim: number,\n inverseSurface: number,\n inverseOnSurface: number,\n inversePrimary: number\n }) {}\n\n toJSON() {\n return {\n ...this.props\n };\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {Hct} from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\n/**\n * Design utilities using color temperature theory.\n *\n * Analogous colors, complementary color, and cache to efficiently, lazily,\n * generate data for calculations when needed.\n */\nexport class TemperatureCache {\n constructor(public input: Hct) {}\n\n hctsByTempCache: Hct[] = [];\n hctsByHueCache: Hct[] = [];\n tempsByHctCache = new Map<Hct, number>();\n inputRelativeTemperatureCache: number = -1.0;\n complementCache: Hct|null = null;\n\n get hctsByTemp(): Hct[] {\n if (this.hctsByTempCache.length > 0) {\n return this.hctsByTempCache;\n }\n\n const hcts = this.hctsByHue.concat([this.input]);\n const temperaturesByHct = this.tempsByHct;\n hcts.sort((a, b) => temperaturesByHct.get(a)! - temperaturesByHct.get(b)!);\n this.hctsByTempCache = hcts;\n return hcts;\n }\n\n get warmest(): Hct {\n return this.hctsByTemp[this.hctsByTemp.length - 1];\n }\n\n get coldest(): Hct {\n return this.hctsByTemp[0];\n }\n\n /**\n * A set of colors with differing hues, equidistant in temperature.\n *\n * In art, this is usually described as a set of 5 colors on a color wheel\n * divided into 12 sections. This method allows provision of either of those\n * values.\n *\n * Behavior is undefined when [count] or [divisions] is 0.\n * When divisions < count, colors repeat.\n *\n * [count] The number of colors to return, includes the input color.\n * [divisions] The number of divisions on the color wheel.\n */\n analogous(count = 5, divisions = 12): Hct[] {\n const startHue = Math.round(this.input.hue);\n const startHct = this.hctsByHue[startHue];\n let lastTemp = this.relativeTemperature(startHct);\n const allColors = [startHct];\n\n let absoluteTotalTempDelta = 0.0;\n for (let i = 0; i < 360; i++) {\n const hue = mathUtils.sanitizeDegreesInt(startHue + i);\n const hct = this.hctsByHue[hue];\n const temp = this.relativeTemperature(hct);\n const tempDelta = Math.abs(temp - lastTemp);\n lastTemp = temp;\n absoluteTotalTempDelta += tempDelta;\n }\n let hueAddend = 1;\n const tempStep = absoluteTotalTempDelta / divisions;\n let totalTempDelta = 0.0;\n lastTemp = this.relativeTemperature(startHct);\n while (allColors.length < divisions) {\n const hue = mathUtils.sanitizeDegreesInt(startHue + hueAddend);\n const hct = this.hctsByHue[hue];\n const temp = this.relativeTemperature(hct);\n const tempDelta = Math.abs(temp - lastTemp);\n totalTempDelta += tempDelta;\n\n const desiredTotalTempDeltaForIndex = allColors.length * tempStep;\n let indexSatisfied = totalTempDelta >= desiredTotalTempDeltaForIndex;\n let indexAddend = 1;\n // Keep adding this hue to the answers until its temperature is\n // insufficient. This ensures consistent behavior when there aren't\n // [divisions] discrete steps between 0 and 360 in hue with [tempStep]\n // delta in temperature between them.\n //\n // For example, white and black have no analogues: there are no other\n // colors at T100/T0. Therefore, they should just be added to the array\n // as answers.\n while (indexSatisfied && allColors.length < divisions) {\n allColors.push(hct);\n const desiredTotalTempDeltaForIndex =\n ((allColors.length + indexAddend) * tempStep);\n indexSatisfied = totalTempDelta >= desiredTotalTempDeltaForIndex;\n indexAddend++;\n }\n lastTemp = temp;\n hueAddend++;\n if (hueAddend > 360) {\n while (allColors.length < divisions) {\n allColors.push(hct);\n }\n break;\n }\n }\n\n const answers = [this.input];\n\n // First, generate analogues from rotating counter-clockwise.\n const increaseHueCount = Math.floor((count - 1) / 2.0);\n for (let i = 1; i < (increaseHueCount + 1); i++) {\n let index = 0 - i;\n while (index < 0) {\n index = allColors.length + index;\n }\n if (index >= allColors.length) {\n index = index % allColors.length;\n }\n answers.splice(0, 0, allColors[index]);\n }\n\n // Second, generate analogues from rotating clockwise.\n const decreaseHueCount = count - increaseHueCount - 1;\n for (let i = 1; i < (decreaseHueCount + 1); i++) {\n let index = i;\n while (index < 0) {\n index = allColors.length + index;\n }\n if (index >= allColors.length) {\n index = index % allColors.length;\n }\n answers.push(allColors[index]);\n }\n\n return answers;\n }\n\n /**\n * A color that complements the input color aesthetically.\n *\n * In art, this is usually described as being across the color wheel.\n * History of this shows intent as a color that is just as cool-warm as the\n * input color is warm-cool.\n */\n get complement(): Hct {\n if (this.complementCache != null) {\n return this.complementCache;\n }\n\n const coldestHue = this.coldest.hue;\n const coldestTemp = this.tempsByHct.get(this.coldest)!;\n\n const warmestHue = this.warmest.hue;\n const warmestTemp = this.tempsByHct.get(this.warmest)!;\n const range = warmestTemp - coldestTemp;\n const startHueIsColdestToWarmest =\n TemperatureCache.isBetween(this.input.hue, coldestHue, warmestHue);\n const startHue = startHueIsColdestToWarmest ? warmestHue : coldestHue;\n const endHue = startHueIsColdestToWarmest ? coldestHue : warmestHue;\n const directionOfRotation = 1.0;\n let smallestError = 1000.0;\n let answer = this.hctsByHue[Math.round(this.input.hue)];\n\n const complementRelativeTemp = 1.0 - this.inputRelativeTemperature;\n // Find the color in the other section, closest to the inverse percentile\n // of the input color. This is the complement.\n for (let hueAddend = 0.0; hueAddend <= 360.0; hueAddend += 1.0) {\n const hue = mathUtils.sanitizeDegreesDouble(\n startHue + directionOfRotation * hueAddend);\n if (!TemperatureCache.isBetween(hue, startHue, endHue)) {\n continue;\n }\n const possibleAnswer = this.hctsByHue[Math.round(hue)];\n const relativeTemp =\n (this.tempsByHct.get(possibleAnswer)! - coldestTemp) / range;\n const error = Math.abs(complementRelativeTemp - relativeTemp);\n if (error < smallestError) {\n smallestError = error;\n answer = possibleAnswer;\n }\n }\n this.complementCache = answer;\n return this.complementCache;\n }\n\n /**\n * Temperature relative to all colors with the same chroma and tone.\n * Value on a scale from 0 to 1.\n */\n relativeTemperature(hct: Hct): number {\n const range =\n this.tempsByHct.get(this.warmest)! - this.tempsByHct.get(this.coldest)!;\n const differenceFromColdest =\n this.tempsByHct.get(hct)! - this.tempsByHct.get(this.coldest)!;\n // Handle when there's no difference in temperature between warmest and\n // coldest: for example, at T100, only one color is available, white.\n if (range === 0.0) {\n return 0.5;\n }\n return differenceFromColdest / range;\n }\n\n /** Relative temperature of the input color. See [relativeTemperature]. */\n get inputRelativeTemperature(): number {\n if (this.inputRelativeTemperatureCache >= 0.0) {\n return this.inputRelativeTemperatureCache;\n }\n\n this.inputRelativeTemperatureCache = this.relativeTemperature(this.input);\n return this.inputRelativeTemperatureCache;\n }\n\n /** A Map with keys of HCTs in [hctsByTemp], values of raw temperature. */\n get tempsByHct(): Map<Hct, number> {\n if (this.tempsByHctCache.size > 0) {\n return this.tempsByHctCache;\n }\n const allHcts = this.hctsByHue.concat([this.input]);\n const temperaturesByHct = new Map<Hct, number>();\n for (const e of allHcts) {\n temperaturesByHct.set(e, TemperatureCache.rawTemperature(e));\n }\n this.tempsByHctCache = temperaturesByHct;\n return temperaturesByHct;\n }\n\n /**\n * HCTs for all hues, with the same chroma/tone as the input.\n * Sorted ascending, hue 0 to 360.\n */\n get hctsByHue(): Hct[] {\n if (this.hctsByHueCache.length > 0) {\n return this.hctsByHueCache;\n }\n const hcts: Hct[] = [];\n for (let hue = 0.0; hue <= 360.0; hue += 1.0) {\n const colorAtHue = Hct.from(hue, this.input.chroma, this.input.tone);\n hcts.push(colorAtHue);\n }\n this.hctsByHueCache = hcts;\n return this.hctsByHueCache;\n }\n\n /** Determines if an angle is between two other angles, rotating clockwise. */\n static isBetween(angle: number, a: number, b: number): boolean {\n if (a < b) {\n return a <= angle && angle <= b;\n }\n return a <= angle || angle <= b;\n }\n\n /**\n * Value representing cool-warm factor of a color.\n * Values below 0 are considered cool, above, warm.\n *\n * Color science has researched emotion and harmony, which art uses to select\n * colors. Warm-cool is the foundation of analogous and complementary colors.\n * See:\n * - Li-Chen Ou's Chapter 19 in Handbook of Color Psychology (2015).\n * - Josef Albers' Interaction of Color chapters 19 and 21.\n *\n * Implementation of Ou, Woodcock and Wright's algorithm, which uses\n * L*a*b* / LCH color space.\n * Return value has these properties:\n * - Values below 0 are cool, above 0 are warm.\n * - Lower bound: -0.52 - (chroma ^ 1.07 / 20). L*a*b* chroma is infinite.\n * Assuming max of 130 chroma, -9.66.\n * - Upper bound: -0.52 + (chroma ^ 1.07 / 20). L*a*b* chroma is infinite.\n * Assuming max of 130 chroma, 8.61.\n */\n static rawTemperature(color: Hct): number {\n const lab = colorUtils.labFromArgb(color.toInt());\n const hue = mathUtils.sanitizeDegreesDouble(\n Math.atan2(lab[2], lab[1]) * 180.0 / Math.PI);\n const chroma = Math.sqrt((lab[1] * lab[1]) + (lab[2] * lab[2]));\n const temperature = -0.5 +\n 0.02 * Math.pow(chroma, 1.07) *\n Math.cos(\n mathUtils.sanitizeDegreesDouble(hue - 50.0) * Math.PI / 180.0,\n );\n return temperature;\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DislikeAnalyzer} from '../dislike/dislike_analyzer.js';\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport {TemperatureCache} from '../temperature/temperature_cache.js';\n\n/**\n * A scheme that places the source color in `Scheme.primaryContainer`.\n *\n * Primary Container is the source color, adjusted for color relativity.\n * It maintains constant appearance in light mode and dark mode.\n * This adds ~5 tone in light mode, and subtracts ~5 tone in dark mode.\n * Tertiary Container is the complement to the source color, using\n * `TemperatureCache`. It also maintains constant appearance.\n */\nexport class SchemeContent extends DynamicScheme {\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.CONTENT,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue,\n Math.max(sourceColorHct.chroma - 32.0, sourceColorHct.chroma * 0.5)),\n tertiaryPalette: TonalPalette.fromInt(\n DislikeAnalyzer\n .fixIfDisliked(\n new TemperatureCache(sourceColorHct).analogous(3, 6)[2])\n .toInt()),\n neutralPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma / 8.0),\n neutralVariantPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma / 8.0 + 4.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * A Dynamic Color theme that is intentionally detached from the source color.\n */\nexport class SchemeExpressive extends DynamicScheme {\n /**\n * Hues (in degrees) used at breakpoints such that designers can specify a\n * hue rotation that occurs at a given break point.\n */\n private static readonly hues: number[] = [\n 0.0,\n 21.0,\n 51.0,\n 121.0,\n 151.0,\n 191.0,\n 271.0,\n 321.0,\n 360.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Secondary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly secondaryRotations: number[] = [\n 45.0,\n 95.0,\n 45.0,\n 20.0,\n 45.0,\n 90.0,\n 45.0,\n 45.0,\n 45.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Tertiary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly tertiaryRotations: number[] = [\n 120.0,\n 120.0,\n 20.0,\n 45.0,\n 20.0,\n 15.0,\n 20.0,\n 120.0,\n 120.0,\n ];\n\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.EXPRESSIVE,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(\n math.sanitizeDegreesDouble(sourceColorHct.hue + 240.0), 40.0),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeExpressive.hues,\n SchemeExpressive.secondaryRotations),\n 24.0),\n tertiaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeExpressive.hues,\n SchemeExpressive.tertiaryRotations),\n 32.0),\n neutralPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue + 15, 8.0),\n neutralVariantPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue + 15, 12.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\n\n/**\n * A Dynamic Color theme that maxes out colorfulness at each position in the\n * Primary Tonal Palette.\n */\nexport class SchemeVibrant extends DynamicScheme {\n /**\n * Hues (in degrees) used at breakpoints such that designers can specify a\n * hue rotation that occurs at a given break point.\n */\n private static readonly hues = [\n 0.0,\n 41.0,\n 61.0,\n 101.0,\n 131.0,\n 181.0,\n 251.0,\n 301.0,\n 360.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Secondary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly secondaryRotations = [\n 18.0,\n 15.0,\n 10.0,\n 12.0,\n 15.0,\n 18.0,\n 15.0,\n 12.0,\n 12.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Tertiary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly tertiaryRotations = [\n 35.0,\n 30.0,\n 20.0,\n 25.0,\n 30.0,\n 35.0,\n 30.0,\n 25.0,\n 25.0,\n ];\n\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.VIBRANT,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(sourceColorHct.hue, 200.0),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeVibrant.hues,\n SchemeVibrant.secondaryRotations),\n 24.0),\n tertiaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeVibrant.hues,\n SchemeVibrant.tertiaryRotations),\n 32.0),\n neutralPalette: TonalPalette.fromHueAndChroma(sourceColorHct.hue, 10.0),\n neutralVariantPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue, 12.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * Default options for ranking colors based on usage counts.\n * desired: is the max count of the colors returned.\n * fallbackColorARGB: Is the default color that should be used if no\n * other colors are suitable.\n * filter: controls if the resulting colors should be filtered to not include\n * hues that are not used often enough, and colors that are effectively\n * grayscale.\n */\ndeclare interface ScoreOptions {\n desired?: number;\n fallbackColorARGB?: number;\n filter?: boolean;\n}\n\nconst SCORE_OPTION_DEFAULTS = {\n desired: 4, // 4 colors matches what Android wallpaper picker.\n fallbackColorARGB: 0xff4285f4, // Google Blue.\n filter: true, // Avoid unsuitable colors.\n};\n\nfunction compare(a: {hct: Hct, score: number}, b: {hct: Hct, score: number}): number {\n if (a.score > b.score) {\n return -1;\n } else if (a.score < b.score) {\n return 1;\n }\n return 0;\n}\n\n/**\n * Given a large set of colors, remove colors that are unsuitable for a UI\n * theme, and rank the rest based on suitability.\n *\n * Enables use of a high cluster count for image quantization, thus ensuring\n * colors aren't muddied, while curating the high cluster count to a much\n * smaller number of appropriate choices.\n */\nexport class Score {\n private static readonly TARGET_CHROMA = 48.0; // A1 Chroma\n private static readonly WEIGHT_PROPORTION = 0.7;\n private static readonly WEIGHT_CHROMA_ABOVE = 0.3;\n private static readonly WEIGHT_CHROMA_BELOW = 0.1;\n private static readonly CUTOFF_CHROMA = 5.0;\n private static readonly CUTOFF_EXCITED_PROPORTION = 0.01;\n\n private constructor() {}\n\n /**\n * Given a map with keys of colors and values of how often the color appears,\n * rank the colors based on suitability for being used for a UI theme.\n *\n * @param colorsToPopulation map with keys of colors and values of how often\n * the color appears, usually from a source image.\n * @param {ScoreOptions} options optional parameters.\n * @return Colors sorted by suitability for a UI theme. The most suitable\n * color is the first item, the least suitable is the last. There will\n * always be at least one color returned. If all the input colors\n * were not suitable for a theme, a default fallback color will be\n * provided, Google Blue.\n */\n static score(\n colorsToPopulation: Map<number, number>, options?: ScoreOptions):\n number[] {\n const {desired, fallbackColorARGB, filter} = {...SCORE_OPTION_DEFAULTS, ...options};\n // Get the HCT color for each Argb value, while finding the per hue count and\n // total count.\n const colorsHct: Hct[] = [];\n const huePopulation = new Array<number>(360).fill(0);\n let populationSum = 0;\n for (const [argb, population] of colorsToPopulation.entries()) {\n const hct = Hct.fromInt(argb);\n colorsHct.push(hct);\n const hue = Math.floor(hct.hue);\n huePopulation[hue] += population;\n populationSum += population;\n }\n\n // Hues with more usage in neighboring 30 degree slice get a larger number.\n const hueExcitedProportions = new Array<number>(360).fill(0.0);\n for (let hue = 0; hue < 360; hue++) {\n const proportion = huePopulation[hue] / populationSum;\n for (let i = hue - 14; i < hue + 16; i++) {\n const neighborHue = math.sanitizeDegreesInt(i);\n hueExcitedProportions[neighborHue] += proportion;\n }\n }\n\n // Scores each HCT color based on usage and chroma, while optionally\n // filtering out values that do not have enough chroma or usage.\n const scoredHct = new Array<{hct: Hct, score: number}>();\n for (const hct of colorsHct) {\n const hue = math.sanitizeDegreesInt(Math.round(hct.hue));\n const proportion = hueExcitedProportions[hue];\n if (filter && (hct.chroma < Score.CUTOFF_CHROMA || proportion <= Score.CUTOFF_EXCITED_PROPORTION)) {\n continue;\n }\n\n const proportionScore = proportion * 100.0 * Score.WEIGHT_PROPORTION;\n const chromaWeight = hct.chroma < Score.TARGET_CHROMA ? Score.WEIGHT_CHROMA_BELOW : Score.WEIGHT_CHROMA_ABOVE;\n const chromaScore = (hct.chroma - Score.TARGET_CHROMA) * chromaWeight;\n const score = proportionScore + chromaScore;\n scoredHct.push({hct, score});\n }\n // Sorted so that colors with higher scores come first.\n scoredHct.sort(compare);\n\n // Iterates through potential hue differences in degrees in order to select\n // the colors with the largest distribution of hues possible. Starting at\n // 90 degrees(maximum difference for 4 colors) then decreasing down to a\n // 15 degree minimum.\n const chosenColors: Hct[] = [];\n for (let differenceDegrees = 90; differenceDegrees >= 15; differenceDegrees--) {\n chosenColors.length = 0;\n for (const {hct} of scoredHct) {\n const duplicateHue = chosenColors.find(chosenHct => {\n return math.differenceDegrees(hct.hue, chosenHct.hue) < differenceDegrees;\n });\n if (!duplicateHue) {\n chosenColors.push(hct);\n }\n if (chosenColors.length >= desired) break;\n }\n if (chosenColors.length >= desired) break;\n }\n const colors: number[] = [];\n if (chosenColors.length === 0) {\n colors.push(fallbackColorARGB);\n }\n for (const chosenHct of chosenColors) {\n colors.push(chosenHct.toInt());\n }\n return colors;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as colorUtils from './color_utils.js';\n\n/**\n * Utility methods for hexadecimal representations of colors.\n */\n\n/**\n * @param argb ARGB representation of a color.\n * @return Hex string representing color, ex. #ff0000 for red.\n */\nexport function hexFromArgb(argb: number) {\n const r = colorUtils.redFromArgb(argb);\n const g = colorUtils.greenFromArgb(argb);\n const b = colorUtils.blueFromArgb(argb);\n const outParts = [r.toString(16), g.toString(16), b.toString(16)];\n\n // Pad single-digit output values\n for (const [i, part] of outParts.entries()) {\n if (part.length === 1) {\n outParts[i] = '0' + part;\n }\n }\n\n return '#' + outParts.join('');\n}\n\n/**\n * @param hex String representing color as hex code. Accepts strings with or\n * without leading #, and string representing the color using 3, 6, or 8\n * hex characters.\n * @return ARGB representation of color.\n */\nexport function argbFromHex(hex: string) {\n hex = hex.replace('#', '');\n const isThree = hex.length === 3;\n const isSix = hex.length === 6;\n const isEight = hex.length === 8;\n if (!isThree && !isSix && !isEight) {\n throw new Error('unexpected hex ' + hex);\n }\n let r = 0;\n let g = 0;\n let b = 0;\n if (isThree) {\n r = parseIntHex(hex.slice(0, 1).repeat(2));\n g = parseIntHex(hex.slice(1, 2).repeat(2));\n b = parseIntHex(hex.slice(2, 3).repeat(2));\n } else if (isSix) {\n r = parseIntHex(hex.slice(0, 2));\n g = parseIntHex(hex.slice(2, 4));\n b = parseIntHex(hex.slice(4, 6));\n } else if (isEight) {\n r = parseIntHex(hex.slice(2, 4));\n g = parseIntHex(hex.slice(4, 6));\n b = parseIntHex(hex.slice(6, 8));\n }\n\n return (\n ((255 << 24) | ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff)) >>>\n 0);\n}\n\nfunction parseIntHex(value: string) {\n // tslint:disable-next-line:ban\n return parseInt(value, 16);\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Blend} from '../blend/blend.js';\nimport {CorePalette} from '../palettes/core_palette.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport {Scheme} from '../scheme/scheme.js';\n\nimport {sourceColorFromImage} from './image_utils.js';\nimport {hexFromArgb} from './string_utils.js';\n\n/**\n * Custom color used to pair with a theme\n */\nexport interface CustomColor {\n value: number;\n name: string;\n blend: boolean;\n}\n\n/**\n * Color group\n */\nexport interface ColorGroup {\n color: number;\n onColor: number;\n colorContainer: number;\n onColorContainer: number;\n}\n\n/**\n * Custom Color Group\n */\nexport interface CustomColorGroup {\n color: CustomColor;\n value: number;\n light: ColorGroup;\n dark: ColorGroup;\n}\n\n/**\n * Theme\n */\nexport interface Theme {\n source: number;\n schemes: {light: Scheme; dark: Scheme;};\n palettes: {\n primary: TonalPalette; secondary: TonalPalette; tertiary: TonalPalette;\n neutral: TonalPalette;\n neutralVariant: TonalPalette;\n error: TonalPalette;\n };\n customColors: CustomColorGroup[];\n}\n\n/**\n * Generate a theme from a source color\n *\n * @param source Source color\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport function themeFromSourceColor(\n source: number, customColors: CustomColor[] = []): Theme {\n const palette = CorePalette.of(source);\n return {\n source,\n schemes: {\n light: Scheme.light(source),\n dark: Scheme.dark(source),\n },\n palettes: {\n primary: palette.a1,\n secondary: palette.a2,\n tertiary: palette.a3,\n neutral: palette.n1,\n neutralVariant: palette.n2,\n error: palette.error,\n },\n customColors: customColors.map((c) => customColor(source, c)),\n };\n}\n\n/**\n * Generate a theme from an image source\n *\n * @param image Image element\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport async function themeFromImage(\n image: HTMLImageElement, customColors: CustomColor[] = []) {\n const source = await sourceColorFromImage(image);\n return themeFromSourceColor(source, customColors);\n}\n\n/**\n * Generate custom color group from source and target color\n *\n * @param source Source color\n * @param color Custom color\n * @return Custom color group\n *\n * @link https://m3.material.io/styles/color/the-color-system/color-roles\n */\nexport function customColor(\n source: number, color: CustomColor): CustomColorGroup {\n let value = color.value;\n const from = value;\n const to = source;\n if (color.blend) {\n value = Blend.harmonize(from, to);\n }\n const palette = CorePalette.of(value);\n const tones = palette.a1;\n return {\n color,\n value,\n light: {\n color: tones.tone(40),\n onColor: tones.tone(100),\n colorContainer: tones.tone(90),\n onColorContainer: tones.tone(10),\n },\n dark: {\n color: tones.tone(80),\n onColor: tones.tone(20),\n colorContainer: tones.tone(30),\n onColorContainer: tones.tone(90),\n },\n };\n}\n\n/**\n * Apply a theme to an element\n *\n * @param theme Theme object\n * @param options Options\n */\nexport function applyTheme(theme: Theme, options?: {\n dark?: boolean,\n target?: HTMLElement,\n brightnessSuffix?: boolean,\n paletteTones?: number[],\n}) {\n const target = options?.target || document.body;\n const isDark = options?.dark ?? false;\n const scheme = isDark ? theme.schemes.dark : theme.schemes.light;\n setSchemeProperties(target, scheme);\n if (options?.brightnessSuffix) {\n setSchemeProperties(target, theme.schemes.dark, '-dark');\n setSchemeProperties(target, theme.schemes.light, '-light');\n }\n if (options?.paletteTones) {\n const tones = options?.paletteTones ?? [];\n for (const [key, palette] of Object.entries(theme.palettes)) {\n const paletteKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n for (const tone of tones) {\n const token = `--md-ref-palette-${paletteKey}-${paletteKey}${tone}`;\n const color = hexFromArgb(palette.tone(tone));\n target.style.setProperty(token, color);\n }\n }\n }\n}\n\nfunction setSchemeProperties(\n target: HTMLElement,\n scheme: Scheme,\n suffix: string = '',\n) {\n for (const [key, value] of Object.entries(scheme.toJSON())) {\n const token = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const color = hexFromArgb(value);\n target.style.setProperty(`--md-sys-color-${token}${suffix}`, color);\n }\n}", "const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n", "const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n", "import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n", "import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n", "/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n", "import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n", "import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n", "import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n", "import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n", "import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n", "import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n", "const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n", "const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n", "const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n", "import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n", "const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n", "import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n", "/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n", "/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n", "/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n", "import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n", "const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n", "export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n", "/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n", "import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n", "import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1\u201316. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\t\u0394E_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n", "import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n", "/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n", "/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2\u00B0 \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n", "import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n", "import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n", "export const kE = 1;\nexport const kCH = 1;\nexport const \u03B8 = (26 / 180) * Math.PI;\nexport const cos\u03B8 = Math.cos(\u03B8);\nexport const sin\u03B8 = Math.sin(\u03B8);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - \u03B8);\n\tlet f = G * Math.sin((h / 180) * Math.PI - \u03B8);\n\tres.a = e * cos\u03B8 - (f / 0.83) * sin\u03B8;\n\tres.b = e * sin\u03B8 + (f / 0.83) * cos\u03B8;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cos\u03B8 + b * sin\u03B8;\n\tlet f = 0.83 * (b * cos\u03B8 - a * sin\u03B8);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + \u03B8) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n", "import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n", "import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n", "import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n", "/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n", "import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n", "import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\tRelative XYZ has Y=1 for media white,\n\tBT.2048 says media white Y=203 (at PQ 58).\n\tSee: https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2408-3-2019-PDF-E.pdf\n*/\nexport const YW = 203;\n", "/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n ICtCp is drafted to be supported in CSS within\n [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n", "/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n", "import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n", "/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n", "const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n", "import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n", "/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n", "import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n", "import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n", "import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n", "import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t}\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n", "import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n", "const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n", "import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n", "/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n", "/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.cbrt(\n\t\t0.412221469470763 * r + 0.5363325372617348 * g + 0.0514459932675022 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034958178252 * r + 0.6806995506452344 * g + 0.1073969535369406 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.0883024591900564 * r + 0.2817188391361215 * g + 0.6299787016738222 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl:\n\t\t\t0.210454268309314 * L +\n\t\t\t0.7936177747023054 * M -\n\t\t\t0.0040720430116193 * S,\n\t\ta:\n\t\t\t1.9779985324311684 * L -\n\t\t\t2.4285922420485799 * M +\n\t\t\t0.450593709617411 * S,\n\t\tb:\n\t\t\t0.0259040424655478 * L +\n\t\t\t0.7827717124575296 * M -\n\t\t\t0.8086757549230774 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n", "const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.pow(l + 0.3963377773761749 * a + 0.2158037573099136 * b, 3);\n\tlet M = Math.pow(l - 0.1055613458156586 * a - 0.0638541728258133 * b, 3);\n\tlet S = Math.pow(l - 0.0894841775298119 * a - 1.2914855480194092 * b, 3);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t4.0767416360759574 * L -\n\t\t\t3.3077115392580616 * M +\n\t\t\t0.2309699031821044 * S,\n\t\tg:\n\t\t\t-1.2684379732850317 * L +\n\t\t\t2.6097573492876887 * M -\n\t\t\t0.3413193760026573 * S,\n\t\tb:\n\t\t\t-0.0041960761386756 * L -\n\t\t\t0.7034186179359362 * M +\n\t\t\t1.7076146940746117 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n", "/*\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n", "import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Bj\u00F6rn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n", "import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n", "/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n", "import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n", "/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > \u03B2) {\n\t\treturn (Math.sign(v) || 1) * (\u03B1 * Math.pow(abs, 0.45) - (\u03B1 - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n", "/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < \u03B2 * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + \u03B1 - 1) / \u03B1, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n", "export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n", "/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n", "/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n", "const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n", "import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "// From: https://github.com/d3/d3-format/issues/32\n\nconst r = (value, precision) =>\n\tMath.round(value * (precision = Math.pow(10, precision))) / precision;\n\nconst round =\n\t(precision = 4) =>\n\tvalue =>\n\t\ttypeof value === 'number' ? r(value, precision) : value;\n\nexport default round;\n", "import converter from './converter.js';\nimport round from './round.js';\nimport prepare from './_prepare.js';\nimport { getMode } from './modes.js';\n\nlet twoDecimals = round(2);\n\nconst clamp = value => Math.max(0, Math.min(1, value || 0));\nconst fixup = value => Math.round(clamp(value) * 255);\n\nconst rgb = converter('rgb');\nconst hsl = converter('hsl');\n\nexport const serializeHex = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\treturn '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\n};\n\nexport const serializeHex8 = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet a = fixup(color.alpha !== undefined ? color.alpha : 1);\n\treturn serializeHex(color) + ((1 << 8) | a).toString(16).slice(1);\n};\n\nexport const serializeRgb = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `rgba(${r}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const serializeHsl = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst h = twoDecimals(color.h || 0);\n\tconst s = twoDecimals(clamp(color.s) * 100) + '%';\n\tconst l = twoDecimals(clamp(color.l) * 100) + '%';\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `hsl(${h}, ${s}, ${l})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const formatCss = c => {\n\tconst color = prepare(c);\n\tif (!color) {\n\t\treturn undefined;\n\t}\n\tconst def = getMode(color.mode);\n\tif (!def.serialize || typeof def.serialize === 'string') {\n\t\tlet res = `color(${def.serialize || `--${color.mode}`} `;\n\t\tdef.channels.forEach((ch, i) => {\n\t\t\tif (ch !== 'alpha') {\n\t\t\t\tres +=\n\t\t\t\t\t(i ? ' ' : '') +\n\t\t\t\t\t(color[ch] !== undefined ? color[ch] : 'none');\n\t\t\t}\n\t\t});\n\t\tif (color.alpha !== undefined && color.alpha < 1) {\n\t\t\tres += ` / ${color.alpha}`;\n\t\t}\n\t\treturn res + ')';\n\t}\n\tif (typeof def.serialize === 'function') {\n\t\treturn def.serialize(color);\n\t}\n\treturn undefined;\n};\n\nexport const formatHex = c => serializeHex(rgb(c));\nexport const formatHex8 = c => serializeHex8(rgb(c));\nexport const formatRgb = c => serializeRgb(rgb(c));\nexport const formatHsl = c => serializeHsl(hsl(c));\n", "// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n", "import {\n argbFromHex,\n themeFromSourceColor,\n hexFromArgb,\n MaterialDynamicColors,\n SchemeContent,\n Hct,\n} from \"@material/material-color-utilities\";\nimport { converter, formatCss } from \"culori\";\n\nlet oklch = converter(\"oklch\");\n\nconst materialColors = {\n \"surface-container-highest\": MaterialDynamicColors.surfaceContainerHighest,\n \"surface-container-high\": MaterialDynamicColors.surfaceContainerHigh,\n \"surface-dim\": MaterialDynamicColors.surfaceDim,\n \"surface-bright\": MaterialDynamicColors.surfaceBright,\n \"surface-container-lowest\": MaterialDynamicColors.surfaceContainerLowest,\n \"surface-container-low\": MaterialDynamicColors.surfaceContainerLow,\n};\n\n/**\n * Converts a Material color scheme object into a map of CSS custom property\n * names to oklch color values.\n *\n * Each camelCase key is converted to kebab-case and prefixed with\n * `--md-sys-color-`. An optional suffix can be appended to the variable name.\n *\n * @param {Record<string, number>} scheme - Map of token names to ARGB integers.\n * @param {string} [suffix=\"\"] - Optional suffix appended to every variable name.\n * @returns {Record<string, string>} Map of CSS variable names to oklch strings.\n *\n * @example\n * const vars = setSchemeProperties({ primary: 0xff1d5d78 });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\" }\n */\nexport function setSchemeProperties(scheme, suffix = \"\") {\n let result = {};\n for (const [key, value] of Object.entries(scheme)) {\n const token = key.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n const color = hexFromArgb(value);\n const converted = oklch(color);\n const name = formatCss(converted);\n const variableName = `--md-sys-color-${token}${suffix}`;\n result[variableName] = name;\n }\n\n return result;\n}\n\n/**\n * Generates a full set of Material Design 3 color tokens for a given source\n * color and color scheme.\n *\n * Tokens cover the standard MD3 scheme palette plus additional surface\n * container roles provided by {@link MaterialDynamicColors}. All color values\n * are expressed as oklch CSS strings so they can be used directly in\n * `var(--md-sys-color-*)` declarations.\n *\n * @param {{ scheme?: \"light\" | \"dark\", sourceColor?: string }} [config]\n * @param {string} [config.sourceColor=\"#1D5D78\"] - Seed color as a hex string (e.g. `\"#6750A4\"`).\n * @param {\"light\" | \"dark\"} [config.scheme=\"light\"] - Color scheme variant.\n * @returns {Record<string, string>} Map of CSS variable names to oklch color strings.\n *\n * @example\n * const tokens = generateTokens({ sourceColor: \"#6750A4\", scheme: \"dark\" });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\", \u2026 }\n */\nexport function generateTokens(config = { scheme: \"light\", sourceColor: \"#1D5D78\" }) {\n const theme = themeFromSourceColor(argbFromHex(config.sourceColor), []);\n\n const scheme = new SchemeContent(\n Hct.fromInt(argbFromHex(config.sourceColor)),\n config.scheme === \"dark\",\n 0\n );\n let palette = {};\n for (const [key, value] of Object.entries(materialColors)) {\n palette[key] = value.getArgb(scheme);\n }\n const currentTheme = theme.schemes[config.scheme].toJSON();\n const tokens = setSchemeProperties({ ...currentTheme, ...palette });\n\n return tokens;\n}\n", "import * as tokensUtils from \"./tokens.mjs\";\n\n/**\n * Generates Material Design 3 color tokens from a source color and injects\n * them as CSS custom properties on `:root` (`document.documentElement`).\n *\n * After calling this function every `var(--md-sys-color-*)` token in the page\n * reflects the chosen color scheme derived from `sourceColor`.\n *\n * Exposed on `window` so it can be called from plain `<script>` tags or\n * browser DevTools without an import.\n *\n * @param {{ sourceColor: string, scheme?: \"light\" | \"dark\" }} [options]\n * @param {string} options.sourceColor - Seed color as a hex string (e.g. `\"#6750A4\"`).\n * @param {\"light\" | \"dark\"} [options.scheme=\"light\"] - Color scheme variant.\n * @returns {void}\n *\n * @example\n * window.generateTheme({ sourceColor: \"#6750A4\", scheme: \"dark\" });\n */\nwindow.generateTheme = function ({ sourceColor, scheme = \"light\" } = {}) {\n const tokens = tokensUtils.generateTokens({\n sourceColor,\n scheme,\n });\n\n const root = document.documentElement;\n for (const [variable, value] of Object.entries(tokens)) {\n root.style.setProperty(variable, value);\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\n/**\n * Utility methods for mathematical operations.\n */\n\n/**\n * The signum function.\n *\n * @return 1 if num > 0, -1 if num < 0, and 0 if num = 0\n */\nexport function signum(num: number): number {\n if (num < 0) {\n return -1;\n } else if (num === 0) {\n return 0;\n } else {\n return 1;\n }\n}\n\n/**\n * The linear interpolation function.\n *\n * @return start if amount = 0 and stop if amount = 1\n */\nexport function lerp(start: number, stop: number, amount: number): number {\n return (1.0 - amount) * start + amount * stop;\n}\n\n/**\n * Clamps an integer between two integers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampInt(min: number, max: number, input: number): number {\n if (input < min) {\n return min;\n } else if (input > max) {\n return max;\n }\n\n return input;\n}\n\n/**\n * Clamps an integer between two floating-point numbers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampDouble(min: number, max: number, input: number): number {\n if (input < min) {\n return min;\n } else if (input > max) {\n return max;\n }\n\n return input;\n}\n\n/**\n * Sanitizes a degree measure as an integer.\n *\n * @return a degree measure between 0 (inclusive) and 360\n * (exclusive).\n */\nexport function sanitizeDegreesInt(degrees: number): number {\n degrees = degrees % 360;\n if (degrees < 0) {\n degrees = degrees + 360;\n }\n return degrees;\n}\n\n/**\n * Sanitizes a degree measure as a floating-point number.\n *\n * @return a degree measure between 0.0 (inclusive) and 360.0\n * (exclusive).\n */\nexport function sanitizeDegreesDouble(degrees: number): number {\n degrees = degrees % 360.0;\n if (degrees < 0) {\n degrees = degrees + 360.0;\n }\n return degrees;\n}\n\n/**\n * Sign of direction change needed to travel from one angle to\n * another.\n *\n * For angles that are 180 degrees apart from each other, both\n * directions have the same travel distance, so either direction is\n * shortest. The value 1.0 is returned in this case.\n *\n * @param from The angle travel starts from, in degrees.\n * @param to The angle travel ends at, in degrees.\n * @return -1 if decreasing from leads to the shortest travel\n * distance, 1 if increasing from leads to the shortest travel\n * distance.\n */\nexport function rotationDirection(from: number, to: number): number {\n const increasingDifference = sanitizeDegreesDouble(to - from);\n return increasingDifference <= 180.0 ? 1.0 : -1.0;\n}\n\n/**\n * Distance of two points on a circle, represented using degrees.\n */\nexport function differenceDegrees(a: number, b: number): number {\n return 180.0 - Math.abs(Math.abs(a - b) - 180.0);\n}\n\n/**\n * Multiplies a 1x3 row vector with a 3x3 matrix.\n */\nexport function matrixMultiply(row: number[], matrix: number[][]): number[] {\n const a =\n row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2];\n const b =\n row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2];\n const c =\n row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2];\n return [a, b, c];\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport * as mathUtils from './math_utils.js';\n\n/**\n * Color science utilities.\n *\n * Utility methods for color science constants and color space\n * conversions that aren't HCT or CAM16.\n */\n\nconst SRGB_TO_XYZ = [\n [0.41233895, 0.35762064, 0.18051042],\n [0.2126, 0.7152, 0.0722],\n [0.01932141, 0.11916382, 0.95034478],\n];\n\nconst XYZ_TO_SRGB = [\n [\n 3.2413774792388685,\n -1.5376652402851851,\n -0.49885366846268053,\n ],\n [\n -0.9691452513005321,\n 1.8758853451067872,\n 0.04156585616912061,\n ],\n [\n 0.05562093689691305,\n -0.20395524564742123,\n 1.0571799111220335,\n ],\n];\n\nconst WHITE_POINT_D65 = [95.047, 100.0, 108.883];\n\n/**\n * Converts a color from RGB components to ARGB format.\n */\nexport function argbFromRgb(red: number, green: number, blue: number): number {\n return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>>\n 0;\n}\n\n/**\n * Converts a color from linear RGB components to ARGB format.\n */\nexport function argbFromLinrgb(linrgb: number[]): number {\n const r = delinearized(linrgb[0]);\n const g = delinearized(linrgb[1]);\n const b = delinearized(linrgb[2]);\n return argbFromRgb(r, g, b);\n}\n\n/**\n * Returns the alpha component of a color in ARGB format.\n */\nexport function alphaFromArgb(argb: number): number {\n return argb >> 24 & 255;\n}\n\n/**\n * Returns the red component of a color in ARGB format.\n */\nexport function redFromArgb(argb: number): number {\n return argb >> 16 & 255;\n}\n\n/**\n * Returns the green component of a color in ARGB format.\n */\nexport function greenFromArgb(argb: number): number {\n return argb >> 8 & 255;\n}\n\n/**\n * Returns the blue component of a color in ARGB format.\n */\nexport function blueFromArgb(argb: number): number {\n return argb & 255;\n}\n\n/**\n * Returns whether a color in ARGB format is opaque.\n */\nexport function isOpaque(argb: number): boolean {\n return alphaFromArgb(argb) >= 255;\n}\n\n/**\n * Converts a color from ARGB to XYZ.\n */\nexport function argbFromXyz(x: number, y: number, z: number): number {\n const matrix = XYZ_TO_SRGB;\n const linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z;\n const linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z;\n const linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;\n const r = delinearized(linearR);\n const g = delinearized(linearG);\n const b = delinearized(linearB);\n return argbFromRgb(r, g, b);\n}\n\n/**\n * Converts a color from XYZ to ARGB.\n */\nexport function xyzFromArgb(argb: number): number[] {\n const r = linearized(redFromArgb(argb));\n const g = linearized(greenFromArgb(argb));\n const b = linearized(blueFromArgb(argb));\n return mathUtils.matrixMultiply([r, g, b], SRGB_TO_XYZ);\n}\n\n/**\n * Converts a color represented in Lab color space into an ARGB\n * integer.\n */\nexport function argbFromLab(l: number, a: number, b: number): number {\n const whitePoint = WHITE_POINT_D65;\n const fy = (l + 16.0) / 116.0;\n const fx = a / 500.0 + fy;\n const fz = fy - b / 200.0;\n const xNormalized = labInvf(fx);\n const yNormalized = labInvf(fy);\n const zNormalized = labInvf(fz);\n const x = xNormalized * whitePoint[0];\n const y = yNormalized * whitePoint[1];\n const z = zNormalized * whitePoint[2];\n return argbFromXyz(x, y, z);\n}\n\n/**\n * Converts a color from ARGB representation to L*a*b*\n * representation.\n *\n * @param argb the ARGB representation of a color\n * @return a Lab object representing the color\n */\nexport function labFromArgb(argb: number): number[] {\n const linearR = linearized(redFromArgb(argb));\n const linearG = linearized(greenFromArgb(argb));\n const linearB = linearized(blueFromArgb(argb));\n const matrix = SRGB_TO_XYZ;\n const x =\n matrix[0][0] * linearR + matrix[0][1] * linearG + matrix[0][2] * linearB;\n const y =\n matrix[1][0] * linearR + matrix[1][1] * linearG + matrix[1][2] * linearB;\n const z =\n matrix[2][0] * linearR + matrix[2][1] * linearG + matrix[2][2] * linearB;\n const whitePoint = WHITE_POINT_D65;\n const xNormalized = x / whitePoint[0];\n const yNormalized = y / whitePoint[1];\n const zNormalized = z / whitePoint[2];\n const fx = labF(xNormalized);\n const fy = labF(yNormalized);\n const fz = labF(zNormalized);\n const l = 116.0 * fy - 16;\n const a = 500.0 * (fx - fy);\n const b = 200.0 * (fy - fz);\n return [l, a, b];\n}\n\n/**\n * Converts an L* value to an ARGB representation.\n *\n * @param lstar L* in L*a*b*\n * @return ARGB representation of grayscale color with lightness\n * matching L*\n */\nexport function argbFromLstar(lstar: number): number {\n const y = yFromLstar(lstar);\n const component = delinearized(y);\n return argbFromRgb(component, component, component);\n}\n\n/**\n * Computes the L* value of a color in ARGB representation.\n *\n * @param argb ARGB representation of a color\n * @return L*, from L*a*b*, coordinate of the color\n */\nexport function lstarFromArgb(argb: number): number {\n const y = xyzFromArgb(argb)[1];\n return 116.0 * labF(y / 100.0) - 16.0;\n}\n\n/**\n * Converts an L* value to a Y value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param lstar L* in L*a*b*\n * @return Y in XYZ\n */\nexport function yFromLstar(lstar: number): number {\n return 100.0 * labInvf((lstar + 16.0) / 116.0);\n}\n\n/**\n * Converts a Y value to an L* value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param y Y in XYZ\n * @return L* in L*a*b*\n */\nexport function lstarFromY(y: number): number {\n return labF(y / 100.0) * 116.0 - 16.0;\n}\n\n/**\n * Linearizes an RGB component.\n *\n * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B\n * channel\n * @return 0.0 <= output <= 100.0, color channel converted to\n * linear RGB space\n */\nexport function linearized(rgbComponent: number): number {\n const normalized = rgbComponent / 255.0;\n if (normalized <= 0.040449936) {\n return normalized / 12.92 * 100.0;\n } else {\n return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;\n }\n}\n\n/**\n * Delinearizes an RGB component.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0 <= output <= 255, color channel converted to regular\n * RGB space\n */\nexport function delinearized(rgbComponent: number): number {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n } else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));\n}\n\n/**\n * Returns the standard white point; white on a sunny day.\n *\n * @return The white point\n */\nexport function whitePointD65(): number[] {\n return WHITE_POINT_D65;\n}\n\n/**\n * RGBA component\n * \n * @param r Red value should be between 0-255\n * @param g Green value should be between 0-255\n * @param b Blue value should be between 0-255\n * @param a Alpha value should be between 0-255\n */\nexport interface Rgba {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\n/**\n * Return RGBA from a given int32 color\n *\n * @param argb ARGB representation of a int32 color.\n * @return RGBA representation of a int32 color.\n */\nexport function rgbaFromArgb(argb: number): Rgba {\n const r = redFromArgb(argb);\n const g = greenFromArgb(argb);\n const b = blueFromArgb(argb);\n const a = alphaFromArgb(argb);\n return {r, g, b, a};\n}\n\n/**\n * Return int32 color from a given RGBA component\n * \n * @param rgba RGBA representation of a int32 color.\n * @returns ARGB representation of a int32 color.\n */\nexport function argbFromRgba({r, g, b, a}: Rgba): number {\n const rValue = clampComponent(r);\n const gValue = clampComponent(g);\n const bValue = clampComponent(b);\n const aValue = clampComponent(a);\n return (aValue << 24) | (rValue << 16) | (gValue << 8) | bValue;\n}\n\nfunction clampComponent(value: number) {\n if (value < 0) return 0;\n if (value > 255) return 255;\n return value\n}\n\nfunction labF(t: number): number {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n if (t > e) {\n return Math.pow(t, 1.0 / 3.0);\n } else {\n return (kappa * t + 16) / 116;\n }\n}\n\nfunction labInvf(ft: number): number {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n const ft3 = ft * ft * ft;\n if (ft3 > e) {\n return ft3;\n } else {\n return (116 * ft - 16) / kappa;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n *\n * This class caches intermediate values of the CAM16 conversion process that\n * depend only on viewing conditions, enabling speed ups.\n */\nexport class ViewingConditions {\n /** sRGB-like viewing conditions. */\n static DEFAULT = ViewingConditions.make();\n\n /**\n * Create ViewingConditions from a simple, physically relevant, set of\n * parameters.\n *\n * @param whitePoint White point, measured in the XYZ color space.\n * default = D65, or sunny day afternoon\n * @param adaptingLuminance The luminance of the adapting field. Informally,\n * how bright it is in the room where the color is viewed. Can be\n * calculated from lux by multiplying lux by 0.0586. default = 11.72,\n * or 200 lux.\n * @param backgroundLstar The lightness of the area surrounding the color.\n * measured by L* in L*a*b*. default = 50.0\n * @param surround A general description of the lighting surrounding the\n * color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a\n * dimly light room, like watching TV at home at night. 2.0 means there\n * is no difference between the lighting on the color and around it.\n * default = 2.0\n * @param discountingIlluminant Whether the eye accounts for the tint of the\n * ambient lighting, such as knowing an apple is still red in green light.\n * default = false, the eye does not perform this process on\n * self-luminous objects like displays.\n */\n static make(\n whitePoint = utils.whitePointD65(),\n adaptingLuminance = (200.0 / Math.PI) * utils.yFromLstar(50.0) / 100.0,\n backgroundLstar = 50.0, surround = 2.0,\n discountingIlluminant = false): ViewingConditions {\n const xyz = whitePoint;\n const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;\n const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;\n const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;\n const f = 0.8 + surround / 10.0;\n const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10.0) :\n math.lerp(0.525, 0.59, (f - 0.8) * 10.0);\n let d = discountingIlluminant ?\n 1.0 :\n f * (1.0 - (1.0 / 3.6) * Math.exp((-adaptingLuminance - 42.0) / 92.0));\n d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;\n const nc = f;\n const rgbD = [\n d * (100.0 / rW) + 1.0 - d,\n d * (100.0 / gW) + 1.0 - d,\n d * (100.0 / bW) + 1.0 - d,\n ];\n const k = 1.0 / (5.0 * adaptingLuminance + 1.0);\n const k4 = k * k * k * k;\n const k4F = 1.0 - k4;\n const fl = k4 * adaptingLuminance +\n 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);\n const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];\n const z = 1.48 + Math.sqrt(n);\n const nbb = 0.725 / Math.pow(n, 0.2);\n const ncb = nbb;\n const rgbAFactors = [\n Math.pow((fl * rgbD[0] * rW) / 100.0, 0.42),\n Math.pow((fl * rgbD[1] * gW) / 100.0, 0.42),\n Math.pow((fl * rgbD[2] * bW) / 100.0, 0.42),\n ];\n const rgbA = [\n (400.0 * rgbAFactors[0]) / (rgbAFactors[0] + 27.13),\n (400.0 * rgbAFactors[1]) / (rgbAFactors[1] + 27.13),\n (400.0 * rgbAFactors[2]) / (rgbAFactors[2] + 27.13),\n ];\n const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;\n return new ViewingConditions(\n n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);\n }\n\n /**\n * Parameters are intermediate values of the CAM16 conversion process. Their\n * names are shorthand for technical color science terminology, this class\n * would not benefit from documenting them individually. A brief overview\n * is available in the CAM16 specification, and a complete overview requires\n * a color science textbook, such as Fairchild's Color Appearance Models.\n */\n private constructor(\n public n: number, public aw: number, public nbb: number,\n public ncb: number, public c: number, public nc: number,\n public rgbD: number[], public fl: number, public fLRoot: number,\n public z: number) {}\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {ViewingConditions} from './viewing_conditions.js';\n\n/**\n * CAM16, a color appearance model. Colors are not just defined by their hex\n * code, but rather, a hex code and viewing conditions.\n *\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*, a*,\n * b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and should be used when measuring distances between colors.\n *\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n */\nexport class Cam16 {\n /**\n * All of the CAM16 dimensions can be calculated from 3 of the dimensions, in\n * the following combinations:\n * - {j or q} and {c, m, or s} and hue\n * - jstar, astar, bstar\n * Prefer using a static method that constructs from 3 of those dimensions.\n * This constructor is intended for those methods to use to return all\n * possible dimensions.\n *\n * @param hue\n * @param chroma informally, colorfulness / color intensity. like saturation\n * in HSL, except perceptually accurate.\n * @param j lightness\n * @param q brightness; ratio of lightness to white point's lightness\n * @param m colorfulness\n * @param s saturation; ratio of chroma to white point's chroma\n * @param jstar CAM16-UCS J coordinate\n * @param astar CAM16-UCS a coordinate\n * @param bstar CAM16-UCS b coordinate\n */\n constructor(\n readonly hue: number, readonly chroma: number, readonly j: number,\n readonly q: number, readonly m: number, readonly s: number,\n readonly jstar: number, readonly astar: number, readonly bstar: number) {}\n\n /**\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*,\n * a*, b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and is used to measure distances between colors.\n */\n distance(other: Cam16): number {\n const dJ = this.jstar - other.jstar;\n const dA = this.astar - other.astar;\n const dB = this.bstar - other.bstar;\n const dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);\n const dE = 1.41 * Math.pow(dEPrime, 0.63);\n return dE;\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return CAM16 color, assuming the color was viewed in default viewing\n * conditions.\n */\n static fromInt(argb: number): Cam16 {\n return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n * @return CAM16 color.\n */\n static fromIntInViewingConditions(\n argb: number, viewingConditions: ViewingConditions): Cam16 {\n const red = (argb & 0x00ff0000) >> 16;\n const green = (argb & 0x0000ff00) >> 8;\n const blue = (argb & 0x000000ff);\n const redL = utils.linearized(red);\n const greenL = utils.linearized(green);\n const blueL = utils.linearized(blue);\n const x = 0.41233895 * redL + 0.35762064 * greenL + 0.18051042 * blueL;\n const y = 0.2126 * redL + 0.7152 * greenL + 0.0722 * blueL;\n const z = 0.01932141 * redL + 0.11916382 * greenL + 0.95034478 * blueL;\n\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n\n const rAF = Math.pow((viewingConditions.fl * Math.abs(rD)) / 100.0, 0.42);\n const gAF = Math.pow((viewingConditions.fl * Math.abs(gD)) / 100.0, 0.42);\n const bAF = Math.pow((viewingConditions.fl * Math.abs(bD)) / 100.0, 0.42);\n\n const rA = (math.signum(rD) * 400.0 * rAF) / (rAF + 27.13);\n const gA = (math.signum(gD) * 400.0 * gAF) / (gAF + 27.13);\n const bA = (math.signum(bD) * 400.0 * bAF) / (bAF + 27.13);\n\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n const b = (rA + gA - 2.0 * bA) / 9.0;\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n const atan2 = Math.atan2(b, a);\n const atanDegrees = (atan2 * 180.0) / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360.0 :\n atanDegrees;\n const hueRadians = (hue * Math.PI) / 180.0;\n\n const ac = p2 * viewingConditions.nbb;\n const j = 100.0 *\n Math.pow(\n ac / viewingConditions.aw,\n viewingConditions.c * viewingConditions.z);\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const huePrime = hue < 20.14 ? hue + 360 : hue;\n const eHue = 0.25 * (Math.cos((huePrime * Math.PI) / 180.0 + 2.0) + 3.8);\n const p1 =\n (50000.0 / 13.0) * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = (p1 * Math.sqrt(a * a + b * b)) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const c = alpha * Math.sqrt(j / 100.0);\n const m = c * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n\n return new Cam16(hue, c, j, q, m, s, jstar, astar, bstar);\n }\n\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n */\n static fromJch(j: number, c: number, h: number): Cam16 {\n return Cam16.fromJchInViewingConditions(j, c, h, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromJchInViewingConditions(\n j: number, c: number, h: number,\n viewingConditions: ViewingConditions): Cam16 {\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const m = c * viewingConditions.fLRoot;\n const alpha = c / Math.sqrt(j / 100.0);\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const hueRadians = (h * Math.PI) / 180.0;\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(h, c, j, q, m, s, jstar, astar, bstar);\n }\n\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n */\n static fromUcs(jstar: number, astar: number, bstar: number): Cam16 {\n return Cam16.fromUcsInViewingConditions(\n jstar, astar, bstar, ViewingConditions.DEFAULT);\n }\n\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromUcsInViewingConditions(\n jstar: number, astar: number, bstar: number,\n viewingConditions: ViewingConditions): Cam16 {\n const a = astar;\n const b = bstar;\n const m = Math.sqrt(a * a + b * b);\n const M = (Math.exp(m * 0.0228) - 1.0) / 0.0228;\n const c = M / viewingConditions.fLRoot;\n let h = Math.atan2(b, a) * (180.0 / Math.PI);\n if (h < 0.0) {\n h += 360.0;\n }\n const j = jstar / (1 - (jstar - 100) * 0.007);\n return Cam16.fromJchInViewingConditions(j, c, h, viewingConditions);\n }\n\n /**\n * @return ARGB representation of color, assuming the color was viewed in\n * default viewing conditions, which are near-identical to the default\n * viewing conditions for sRGB.\n */\n toInt(): number {\n return this.viewed(ViewingConditions.DEFAULT);\n }\n\n /**\n * @param viewingConditions Information about the environment where the color\n * will be viewed.\n * @return ARGB representation of color\n */\n viewed(viewingConditions: ViewingConditions): number {\n const alpha = this.chroma === 0.0 || this.j === 0.0 ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n\n const t = Math.pow(\n alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73),\n 1.0 / 0.9);\n const hRad = (this.hue * Math.PI) / 180.0;\n\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(\n this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = ac / viewingConditions.nbb;\n\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n\n const gamma = (23.0 * (p2 + 0.305) * t) /\n (23.0 * p1 + 11.0 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n\n const argb = utils.argbFromXyz(x, y, z);\n return argb;\n }\n\n /// Given color expressed in XYZ and viewed in [viewingConditions], convert to\n /// CAM16.\n static fromXyzInViewingConditions(\n x: number, y: number, z: number,\n viewingConditions: ViewingConditions): Cam16 {\n // Transform XYZ to 'cone'/'rgb' responses\n\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n\n // Discount illuminant\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n\n // chromatic adaptation\n const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100.0, 0.42);\n const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100.0, 0.42);\n const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100.0, 0.42);\n const rA = math.signum(rD) * 400.0 * rAF / (rAF + 27.13);\n const gA = math.signum(gD) * 400.0 * gAF / (gAF + 27.13);\n const bA = math.signum(bD) * 400.0 * bAF / (bAF + 27.13);\n\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n\n // auxiliary components\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n\n // hue\n const atan2 = Math.atan2(b, a);\n const atanDegrees = atan2 * 180.0 / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360 :\n atanDegrees;\n const hueRadians = hue * Math.PI / 180.0;\n\n // achromatic response to color\n const ac = p2 * viewingConditions.nbb;\n\n // CAM16 lightness and brightness\n const J = 100.0 *\n Math.pow(\n ac / viewingConditions.aw,\n viewingConditions.c * viewingConditions.z);\n const Q = (4.0 / viewingConditions.c) * Math.sqrt(J / 100.0) *\n (viewingConditions.aw + 4.0) * (viewingConditions.fLRoot);\n\n const huePrime = (hue < 20.14) ? hue + 360 : hue;\n const eHue =\n (1.0 / 4.0) * (Math.cos(huePrime * Math.PI / 180.0 + 2.0) + 3.8);\n const p1 =\n 50000.0 / 13.0 * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = p1 * Math.sqrt(a * a + b * b) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n // CAM16 chroma, colorfulness, chroma\n const C = alpha * Math.sqrt(J / 100.0);\n const M = C * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n\n // CAM16-UCS components\n const jstar = (1.0 + 100.0 * 0.007) * J / (1.0 + 0.007 * J);\n const mstar = Math.log(1.0 + 0.0228 * M) / 0.0228;\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, C, J, Q, M, s, jstar, astar, bstar);\n }\n\n /// XYZ representation of CAM16 seen in [viewingConditions].\n xyzInViewingConditions(viewingConditions: ViewingConditions): number[] {\n const alpha = (this.chroma === 0.0 || this.j === 0.0) ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n\n const t = Math.pow(\n alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73),\n 1.0 / 0.9);\n const hRad = this.hue * Math.PI / 180.0;\n\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(\n this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n\n const p2 = (ac / viewingConditions.nbb);\n\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n\n return [x, y, z];\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\nimport {Cam16} from './cam16.js';\nimport {ViewingConditions} from './viewing_conditions.js';\n\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * A class that solves the HCT equation.\n */\nexport class HctSolver {\n static SCALED_DISCOUNT_FROM_LINRGB = [\n [\n 0.001200833568784504,\n 0.002389694492170889,\n 0.0002795742885861124,\n ],\n [\n 0.0005891086651375999,\n 0.0029785502573438758,\n 0.0003270666104008398,\n ],\n [\n 0.00010146692491640572,\n 0.0005364214359186694,\n 0.0032979401770712076,\n ],\n ];\n\n static LINRGB_FROM_SCALED_DISCOUNT = [\n [\n 1373.2198709594231,\n -1100.4251190754821,\n -7.278681089101213,\n ],\n [\n -271.815969077903,\n 559.6580465940733,\n -32.46047482791194,\n ],\n [\n 1.9622899599665666,\n -57.173814538844006,\n 308.7233197812385,\n ],\n ];\n\n static Y_FROM_LINRGB = [0.2126, 0.7152, 0.0722];\n\n static CRITICAL_PLANES = [\n 0.015176349177441876, 0.045529047532325624, 0.07588174588720938,\n 0.10623444424209313, 0.13658714259697685, 0.16693984095186062,\n 0.19729253930674434, 0.2276452376616281, 0.2579979360165119,\n 0.28835063437139563, 0.3188300904430532, 0.350925934958123,\n 0.3848314933096426, 0.42057480301049466, 0.458183274052838,\n 0.4976837250274023, 0.5391024159806381, 0.5824650784040898,\n 0.6277969426914107, 0.6751227633498623, 0.7244668422128921,\n 0.775853049866786, 0.829304845476233, 0.8848452951698498,\n 0.942497089126609, 1.0022825574869039, 1.0642236851973577,\n 1.1283421258858297, 1.1946592148522128, 1.2631959812511864,\n 1.3339731595349034, 1.407011200216447, 1.4823302800086415,\n 1.5599503113873272, 1.6398909516233677, 1.7221716113234105,\n 1.8068114625156377, 1.8938294463134073, 1.9832442801866852,\n 2.075074464868551, 2.1693382909216234, 2.2660538449872063,\n 2.36523901573795, 2.4669114995532007, 2.5710888059345764,\n 2.6777882626779785, 2.7870270208169257, 2.898822059350997,\n 3.0131901897720907, 3.1301480604002863, 3.2497121605402226,\n 3.3718988244681087, 3.4967242352587946, 3.624204428461639,\n 3.754355295633311, 3.887192587735158, 4.022731918402185,\n 4.160988767090289, 4.301978482107941, 4.445716283538092,\n 4.592217266055746, 4.741496401646282, 4.893568542229298,\n 5.048448422192488, 5.20615066083972, 5.3666897647573375,\n 5.5300801301023865, 5.696336044816294, 5.865471690767354,\n 6.037501145825082, 6.212438385869475, 6.390297286737924,\n 6.571091626112461, 6.7548350853498045, 6.941541251256611,\n 7.131223617812143, 7.323895587840543, 7.5195704746346665,\n 7.7182615035334345, 7.919981813454504, 8.124744458384042,\n 8.332562408825165, 8.543448553206703, 8.757415699253682,\n 8.974476575321063, 9.194643831691977, 9.417930041841839,\n 9.644347703669503, 9.873909240696694, 10.106627003236781,\n 10.342513269534024, 10.58158024687427, 10.8238400726681,\n 11.069304815507364, 11.317986476196008, 11.569896988756009,\n 11.825048221409341, 12.083451977536606, 12.345119996613247,\n 12.610063955123938, 12.878295467455942, 13.149826086772048,\n 13.42466730586372, 13.702830557985108, 13.984327217668513,\n 14.269168601521828, 14.55736596900856, 14.848930523210871,\n 15.143873411576273, 15.44220572664832, 15.743938506781891,\n 16.04908273684337, 16.35764934889634, 16.66964922287304,\n 16.985093187232053, 17.30399201960269, 17.62635644741625,\n 17.95219714852476, 18.281524751807332, 18.614349837764564,\n 18.95068293910138, 19.290534541298456, 19.633915083172692,\n 19.98083495742689, 20.331304511189067, 20.685334046541502,\n 21.042933821039977, 21.404114048223256, 21.76888489811322,\n 22.137256497705877, 22.50923893145328, 22.884842241736916,\n 23.264076429332462, 23.6469514538663, 24.033477234264016,\n 24.42366364919083, 24.817520537484558, 25.21505769858089,\n 25.61628489293138, 26.021211842414342, 26.429848230738664,\n 26.842203703840827, 27.258287870275353, 27.678110301598522,\n 28.10168053274597, 28.529008062403893, 28.96010235337422,\n 29.39497283293396, 29.83362889318845, 30.276079891419332,\n 30.722335150426627, 31.172403958865512, 31.62629557157785,\n 32.08401920991837, 32.54558406207592, 33.010999283389665,\n 33.4802739966603, 33.953417292456834, 34.430438229418264,\n 34.911345834551085, 35.39614910352207, 35.88485700094671,\n 36.37747846067349, 36.87402238606382, 37.37449765026789,\n 37.87891309649659, 38.38727753828926, 38.89959975977785,\n 39.41588851594697, 39.93615253289054, 40.460400508064545,\n 40.98864111053629, 41.520882981230194, 42.05713473317016,\n 42.597404951718396, 43.141702194811224, 43.6900349931913,\n 44.24241185063697, 44.798841244188324, 45.35933162437017,\n 45.92389141541209, 46.49252901546552, 47.065252796817916,\n 47.64207110610409, 48.22299226451468, 48.808024568002054,\n 49.3971762874833, 49.9904556690408, 50.587870934119984,\n 51.189430279724725, 51.79514187861014, 52.40501387947288,\n 53.0190544071392, 53.637271562750364, 54.259673423945976,\n 54.88626804504493, 55.517063457223934, 56.15206766869424,\n 56.79128866487574, 57.43473440856916, 58.08241284012621,\n 58.734331877617365, 59.39049941699807, 60.05092333227251,\n 60.715611475655585, 61.38457167773311, 62.057811747619894,\n 62.7353394731159, 63.417162620860914, 64.10328893648692,\n 64.79372614476921, 65.48848194977529, 66.18756403501224,\n 66.89098006357258, 67.59873767827808, 68.31084450182222,\n 69.02730813691093, 69.74813616640164, 70.47333615344107,\n 71.20291564160104, 71.93688215501312, 72.67524319850172,\n 73.41800625771542, 74.16517879925733, 74.9167682708136,\n 75.67278210128072, 76.43322770089146, 77.1981124613393,\n 77.96744375590167, 78.74122893956174, 79.51947534912904,\n 80.30219030335869, 81.08938110306934, 81.88105503125999,\n 82.67721935322541, 83.4778813166706, 84.28304815182372,\n 85.09272707154808, 85.90692527145302, 86.72564993000343,\n 87.54890820862819, 88.3767072518277, 89.2090541872801,\n 90.04595612594655, 90.88742016217518, 91.73345337380438,\n 92.58406282226491, 93.43925555268066, 94.29903859396902,\n 95.16341895893969, 96.03240364439274, 96.9059996312159,\n 97.78421388448044, 98.6670533535366, 99.55452497210776,\n ];\n\n /**\n * Sanitizes a small enough angle in radians.\n *\n * @param angle An angle in radians; must not deviate too much\n * from 0.\n * @return A coterminal angle between 0 and 2pi.\n */\n private static sanitizeRadians(angle: number): number {\n return (angle + Math.PI * 8) % (Math.PI * 2);\n }\n\n /**\n * Delinearizes an RGB component, returning a floating-point\n * number.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0.0 <= output <= 255.0, color channel converted to\n * regular RGB space\n */\n private static trueDelinearized(rgbComponent: number): number {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n } else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return delinearized * 255.0;\n }\n\n private static chromaticAdaptation(component: number): number {\n const af = Math.pow(Math.abs(component), 0.42);\n return mathUtils.signum(component) * 400.0 * af / (af + 27.13);\n }\n\n /**\n * Returns the hue of a linear RGB color in CAM16.\n *\n * @param linrgb The linear RGB coordinates of a color.\n * @return The hue of the color in CAM16, in radians.\n */\n private static hueOf(linrgb: number[]): number {\n const scaledDiscount =\n mathUtils.matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB);\n const rA = HctSolver.chromaticAdaptation(scaledDiscount[0]);\n const gA = HctSolver.chromaticAdaptation(scaledDiscount[1]);\n const bA = HctSolver.chromaticAdaptation(scaledDiscount[2]);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n return Math.atan2(b, a);\n }\n\n private static areInCyclicOrder(a: number, b: number, c: number): boolean {\n const deltaAB = HctSolver.sanitizeRadians(b - a);\n const deltaAC = HctSolver.sanitizeRadians(c - a);\n return deltaAB < deltaAC;\n }\n\n /**\n * Solves the lerp equation.\n *\n * @param source The starting number.\n * @param mid The number in the middle.\n * @param target The ending number.\n * @return A number t such that lerp(source, target, t) = mid.\n */\n private static intercept(source: number, mid: number, target: number):\n number {\n return (mid - source) / (target - source);\n }\n\n private static lerpPoint(source: number[], t: number, target: number[]):\n number[] {\n return [\n source[0] + (target[0] - source[0]) * t,\n source[1] + (target[1] - source[1]) * t,\n source[2] + (target[2] - source[2]) * t,\n ];\n }\n\n /**\n * Intersects a segment with a plane.\n *\n * @param source The coordinates of point A.\n * @param coordinate The R-, G-, or B-coordinate of the plane.\n * @param target The coordinates of point B.\n * @param axis The axis the plane is perpendicular with. (0: R, 1:\n * G, 2: B)\n * @return The intersection point of the segment AB with the plane\n * R=coordinate, G=coordinate, or B=coordinate\n */\n private static setCoordinate(\n source: number[],\n coordinate: number,\n target: number[],\n axis: number,\n ): number[] {\n const t = HctSolver.intercept(source[axis], coordinate, target[axis]);\n return HctSolver.lerpPoint(source, t, target);\n }\n\n private static isBounded(x: number): boolean {\n return 0.0 <= x && x <= 100.0;\n }\n\n /**\n * Returns the nth possible vertex of the polygonal intersection.\n *\n * @param y The Y value of the plane.\n * @param n The zero-based index of the point. 0 <= n <= 11.\n * @return The nth possible vertex of the polygonal intersection\n * of the y plane and the RGB cube, in linear RGB coordinates, if\n * it exists. If this possible vertex lies outside of the cube,\n * [-1.0, -1.0, -1.0] is returned.\n */\n private static nthVertex(y: number, n: number): number[] {\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const coordA = n % 4 <= 1 ? 0.0 : 100.0;\n const coordB = n % 2 === 0 ? 0.0 : 100.0;\n if (n < 4) {\n const g = coordA;\n const b = coordB;\n const r = (y - g * kG - b * kB) / kR;\n if (HctSolver.isBounded(r)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n } else if (n < 8) {\n const b = coordA;\n const r = coordB;\n const g = (y - r * kR - b * kB) / kG;\n if (HctSolver.isBounded(g)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n } else {\n const r = coordA;\n const g = coordB;\n const b = (y - r * kR - g * kG) / kB;\n if (HctSolver.isBounded(b)) {\n return [r, g, b];\n } else {\n return [-1.0, -1.0, -1.0];\n }\n }\n }\n\n /**\n * Finds the segment containing the desired color.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return A list of two sets of linear RGB coordinates, each\n * corresponding to an endpoint of the segment containing the\n * desired color.\n */\n private static bisectToSegment(y: number, targetHue: number): number[][] {\n let left = [-1.0, -1.0, -1.0];\n let right = left;\n let leftHue = 0.0;\n let rightHue = 0.0;\n let initialized = false;\n let uncut = true;\n for (let n = 0; n < 12; n++) {\n const mid = HctSolver.nthVertex(y, n);\n if (mid[0] < 0) {\n continue;\n }\n const midHue = HctSolver.hueOf(mid);\n if (!initialized) {\n left = mid;\n right = mid;\n leftHue = midHue;\n rightHue = midHue;\n initialized = true;\n continue;\n }\n if (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) {\n uncut = false;\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rightHue = midHue;\n } else {\n left = mid;\n leftHue = midHue;\n }\n }\n }\n return [left, right];\n }\n\n private static midpoint(a: number[], b: number[]): number[] {\n return [\n (a[0] + b[0]) / 2,\n (a[1] + b[1]) / 2,\n (a[2] + b[2]) / 2,\n ];\n }\n\n private static criticalPlaneBelow(x: number): number {\n return Math.floor(x - 0.5);\n }\n\n private static criticalPlaneAbove(x: number): number {\n return Math.ceil(x - 0.5);\n }\n\n /**\n * Finds a color with the given Y and hue on the boundary of the\n * cube.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return The desired color, in linear RGB coordinates.\n */\n private static bisectToLimit(y: number, targetHue: number): number[] {\n const segment = HctSolver.bisectToSegment(y, targetHue);\n let left = segment[0];\n let leftHue = HctSolver.hueOf(left);\n let right = segment[1];\n for (let axis = 0; axis < 3; axis++) {\n if (left[axis] !== right[axis]) {\n let lPlane = -1;\n let rPlane = 255;\n if (left[axis] < right[axis]) {\n lPlane = HctSolver.criticalPlaneBelow(\n HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneAbove(\n HctSolver.trueDelinearized(right[axis]));\n } else {\n lPlane = HctSolver.criticalPlaneAbove(\n HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneBelow(\n HctSolver.trueDelinearized(right[axis]));\n }\n for (let i = 0; i < 8; i++) {\n if (Math.abs(rPlane - lPlane) <= 1) {\n break;\n } else {\n const mPlane = Math.floor((lPlane + rPlane) / 2.0);\n const midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane];\n const mid =\n HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis);\n const midHue = HctSolver.hueOf(mid);\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rPlane = mPlane;\n } else {\n left = mid;\n leftHue = midHue;\n lPlane = mPlane;\n }\n }\n }\n }\n }\n return HctSolver.midpoint(left, right);\n }\n\n private static inverseChromaticAdaptation(adapted: number): number {\n const adaptedAbs = Math.abs(adapted);\n const base = Math.max(0, 27.13 * adaptedAbs / (400.0 - adaptedAbs));\n return mathUtils.signum(adapted) * Math.pow(base, 1.0 / 0.42);\n }\n\n /**\n * Finds a color with the given hue, chroma, and Y.\n *\n * @param hueRadians The desired hue in radians.\n * @param chroma The desired chroma.\n * @param y The desired Y.\n * @return The desired color as a hexadecimal integer, if found; 0\n * otherwise.\n */\n private static findResultByJ(hueRadians: number, chroma: number, y: number):\n number {\n // Initial estimate of j.\n let j = Math.sqrt(y) * 11.0;\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const viewingConditions = ViewingConditions.DEFAULT;\n const tInnerCoeff =\n 1 / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const eHue = 0.25 * (Math.cos(hueRadians + 2.0) + 3.8);\n const p1 =\n eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const hSin = Math.sin(hueRadians);\n const hCos = Math.cos(hueRadians);\n for (let iterationRound = 0; iterationRound < 5; iterationRound++) {\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const jNormalized = j / 100.0;\n const alpha =\n chroma === 0.0 || j === 0.0 ? 0.0 : chroma / Math.sqrt(jNormalized);\n const t = Math.pow(alpha * tInnerCoeff, 1.0 / 0.9);\n const ac = viewingConditions.aw *\n Math.pow(\n jNormalized,\n 1.0 / viewingConditions.c / viewingConditions.z,\n );\n const p2 = ac / viewingConditions.nbb;\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCScaled = HctSolver.inverseChromaticAdaptation(rA);\n const gCScaled = HctSolver.inverseChromaticAdaptation(gA);\n const bCScaled = HctSolver.inverseChromaticAdaptation(bA);\n const linrgb = mathUtils.matrixMultiply(\n [rCScaled, gCScaled, bCScaled],\n HctSolver.LINRGB_FROM_SCALED_DISCOUNT,\n );\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) {\n return 0;\n }\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];\n if (fnj <= 0) {\n return 0;\n }\n if (iterationRound === 4 || Math.abs(fnj - y) < 0.002) {\n if (linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01) {\n return 0;\n }\n return colorUtils.argbFromLinrgb(linrgb);\n }\n // Iterates with Newton method,\n // Using 2 * fn(j) / j as the approximation of fn'(j)\n j = j - (fnj - y) * j / (2 * fnj);\n }\n return 0;\n }\n\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return A hexadecimal representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToInt(hueDegrees: number, chroma: number, lstar: number): number {\n if (chroma < 0.0001 || lstar < 0.0001 || lstar > 99.9999) {\n return colorUtils.argbFromLstar(lstar);\n }\n hueDegrees = mathUtils.sanitizeDegreesDouble(hueDegrees);\n const hueRadians = hueDegrees / 180 * Math.PI;\n const y = colorUtils.yFromLstar(lstar);\n const exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y);\n if (exactAnswer !== 0) {\n return exactAnswer;\n }\n const linrgb = HctSolver.bisectToLimit(y, hueRadians);\n return colorUtils.argbFromLinrgb(linrgb);\n }\n\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return An CAM16 object representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToCam(hueDegrees: number, chroma: number, lstar: number): Cam16 {\n return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A color system built using CAM16 hue and chroma, and L* from\n * L*a*b*.\n *\n * Using L* creates a link between the color system, contrast, and thus\n * accessibility. Contrast ratio depends on relative luminance, or Y in the XYZ\n * color space. L*, or perceptual luminance can be calculated from Y.\n *\n * Unlike Y, L* is linear to human perception, allowing trivial creation of\n * accurate color tones.\n *\n * Unlike contrast ratio, measuring contrast in L* is linear, and simple to\n * calculate. A difference of 40 in HCT tone guarantees a contrast ratio >= 3.0,\n * and a difference of 50 guarantees a contrast ratio >= 4.5.\n */\n\nimport * as utils from '../utils/color_utils.js';\n\nimport {Cam16} from './cam16.js';\nimport {HctSolver} from './hct_solver.js';\nimport {ViewingConditions} from './viewing_conditions.js';\n\n\n/**\n * HCT, hue, chroma, and tone. A color system that provides a perceptually\n * accurate color measurement system that can also accurately render what colors\n * will appear as in different lighting environments.\n */\nexport class Hct {\n /**\n * @param hue 0 <= hue < 360; invalid values are corrected.\n * @param chroma 0 <= chroma < ?; Informally, colorfulness. The color\n * returned may be lower than the requested chroma. Chroma has a different\n * maximum for any given hue and tone.\n * @param tone 0 <= tone <= 100; invalid values are corrected.\n * @return HCT representation of a color in default viewing conditions.\n */\n\n internalHue: number;\n internalChroma: number;\n internalTone: number;\n\n static from(hue: number, chroma: number, tone: number) {\n return new Hct(HctSolver.solveToInt(hue, chroma, tone));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return HCT representation of a color in default viewing conditions\n */\n static fromInt(argb: number) {\n return new Hct(argb);\n }\n\n toInt(): number {\n return this.argb;\n }\n\n /**\n * A number, in degrees, representing ex. red, orange, yellow, etc.\n * Ranges from 0 <= hue < 360.\n */\n get hue(): number {\n return this.internalHue;\n }\n\n /**\n * @param newHue 0 <= newHue < 360; invalid values are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set hue(newHue: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n newHue,\n this.internalChroma,\n this.internalTone,\n ),\n );\n }\n\n get chroma(): number {\n return this.internalChroma;\n }\n\n /**\n * @param newChroma 0 <= newChroma < ?\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set chroma(newChroma: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n this.internalHue,\n newChroma,\n this.internalTone,\n ),\n );\n }\n\n /** Lightness. Ranges from 0 to 100. */\n get tone(): number {\n return this.internalTone;\n }\n\n /**\n * @param newTone 0 <= newTone <= 100; invalid valids are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set tone(newTone: number) {\n this.setInternalState(\n HctSolver.solveToInt(\n this.internalHue,\n this.internalChroma,\n newTone,\n ),\n );\n }\n\n private constructor(private argb: number) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n\n private setInternalState(argb: number) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n\n /**\n * Translates a color into different [ViewingConditions].\n *\n * Colors change appearance. They look different with lights on versus off,\n * the same color, as in hex code, on white looks different when on black.\n * This is called color relativity, most famously explicated by Josef Albers\n * in Interaction of Color.\n *\n * In color science, color appearance models can account for this and\n * calculate the appearance of a color in different settings. HCT is based on\n * CAM16, a color appearance model, and uses it to make these calculations.\n *\n * See [ViewingConditions.make] for parameters affecting color appearance.\n */\n inViewingConditions(vc: ViewingConditions): Hct {\n // 1. Use CAM16 to find XYZ coordinates of color in specified VC.\n const cam = Cam16.fromInt(this.toInt());\n const viewedInVc = cam.xyzInViewingConditions(vc);\n\n // 2. Create CAM16 of those XYZ coordinates in default VC.\n const recastInVc = Cam16.fromXyzInViewingConditions(\n viewedInVc[0],\n viewedInVc[1],\n viewedInVc[2],\n ViewingConditions.make(),\n );\n\n // 3. Create HCT from:\n // - CAM16 using default VC with XYZ coordinates in specified VC.\n // - L* converted from Y in XYZ coordinates in specified VC.\n const recastHct = Hct.from(\n recastInVc.hue,\n recastInVc.chroma,\n utils.lstarFromY(viewedInVc[1]),\n );\n return recastHct;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {Cam16} from '../hct/cam16.js';\nimport {Hct} from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\n/**\n * Functions for blending in HCT and CAM16.\n */\nexport class Blend {\n /**\n * Blend the design color's HCT hue towards the key color's HCT\n * hue, in a way that leaves the original color recognizable and\n * recognizably shifted towards the key color.\n *\n * @param designColor ARGB representation of an arbitrary color.\n * @param sourceColor ARGB representation of the main theme color.\n * @return The design color with a hue shifted towards the\n * system's color, a slightly warmer/cooler variant of the design\n * color's hue.\n */\n static harmonize(designColor: number, sourceColor: number): number {\n const fromHct = Hct.fromInt(designColor);\n const toHct = Hct.fromInt(sourceColor);\n const differenceDegrees =\n mathUtils.differenceDegrees(fromHct.hue, toHct.hue);\n const rotationDegrees = Math.min(differenceDegrees * 0.5, 15.0);\n const outputHue = mathUtils.sanitizeDegreesDouble(\n fromHct.hue +\n rotationDegrees * mathUtils.rotationDirection(fromHct.hue, toHct.hue));\n return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();\n }\n\n /**\n * Blends hue from one color into another. The chroma and tone of\n * the original color are maintained.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, with a hue blended towards to. Chroma and tone\n * are constant.\n */\n static hctHue(from: number, to: number, amount: number): number {\n const ucs = Blend.cam16Ucs(from, to, amount);\n const ucsCam = Cam16.fromInt(ucs);\n const fromCam = Cam16.fromInt(from);\n const blended = Hct.from(\n ucsCam.hue,\n fromCam.chroma,\n colorUtils.lstarFromArgb(from),\n );\n return blended.toInt();\n }\n\n /**\n * Blend in CAM16-UCS space.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, blended towards to. Hue, chroma, and tone will\n * change.\n */\n static cam16Ucs(from: number, to: number, amount: number): number {\n const fromCam = Cam16.fromInt(from);\n const toCam = Cam16.fromInt(to);\n const fromJ = fromCam.jstar;\n const fromA = fromCam.astar;\n const fromB = fromCam.bstar;\n const toJ = toCam.jstar;\n const toA = toCam.astar;\n const toB = toCam.bstar;\n const jstar = fromJ + (toJ - fromJ) * amount;\n const astar = fromA + (toA - fromA) * amount;\n const bstar = fromB + (toB - fromB) * amount;\n return Cam16.fromUcs(jstar, astar, bstar).toInt();\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * Utility methods for calculating contrast given two colors, or calculating a\n * color given one color and a contrast ratio.\n *\n * Contrast ratio is calculated using XYZ's Y. When linearized to match human\n * perception, Y becomes HCT's tone and L*a*b*'s' L*. Informally, this is the\n * lightness of a color.\n *\n * Methods refer to tone, T in the the HCT color space.\n * Tone is equivalent to L* in the L*a*b* color space, or L in the LCH color\n * space.\n */\nexport class Contrast {\n /**\n * Returns a contrast ratio, which ranges from 1 to 21.\n *\n * @param toneA Tone between 0 and 100. Values outside will be clamped.\n * @param toneB Tone between 0 and 100. Values outside will be clamped.\n */\n static ratioOfTones(toneA: number, toneB: number): number {\n toneA = math.clampDouble(0.0, 100.0, toneA);\n toneB = math.clampDouble(0.0, 100.0, toneB);\n return Contrast.ratioOfYs(utils.yFromLstar(toneA), utils.yFromLstar(toneB));\n }\n\n static ratioOfYs(y1: number, y2: number): number {\n const lighter = y1 > y2 ? y1 : y2;\n const darker = (lighter === y2) ? y1 : y2;\n return (lighter + 5.0) / (darker + 5.0);\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighter(tone: number, ratio: number): number {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n\n const darkY = utils.yFromLstar(tone);\n const lightY = ratio * (darkY + 5.0) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(lightY) + 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n\n /**\n * Returns a tone <= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darker(tone: number, ratio: number): number {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n\n const lightY = utils.yFromLstar(tone);\n const darkY = ((lightY + 5.0) / ratio) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(darkY) - 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the ratio with tone. For example, there is no color lighter than T100.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 100 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighterUnsafe(tone: number, ratio: number): number {\n const lighterSafe = Contrast.lighter(tone, ratio);\n return (lighterSafe < 0.0) ? 100.0 : lighterSafe;\n }\n\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the [ratio with [tone]. For example, there is no color darker than T0.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 0 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darkerUnsafe(tone: number, ratio: number): number {\n const darkerSafe = Contrast.darker(tone, ratio);\n return (darkerSafe < 0.0) ? 0.0 : darkerSafe;\n }\n}", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n\n/**\n * Check and/or fix universally disliked colors.\n * Color science studies of color preference indicate universal distaste for\n * dark yellow-greens, and also show this is correlated to distate for\n * biological waste and rotting food.\n *\n * See Palmer and Schloss, 2010 or Schloss and Palmer's Chapter 21 in Handbook\n * of Color Psychology (2015).\n */\nexport class DislikeAnalyzer {\n /**\n * Returns true if a color is disliked.\n *\n * @param hct A color to be judged.\n * @return Whether the color is disliked.\n *\n * Disliked is defined as a dark yellow-green that is not neutral.\n */\n static isDisliked(hct: Hct): boolean {\n const huePasses =\n Math.round(hct.hue) >= 90.0 && Math.round(hct.hue) <= 111.0;\n const chromaPasses = Math.round(hct.chroma) > 16.0;\n const tonePasses = Math.round(hct.tone) < 65.0;\n\n return huePasses && chromaPasses && tonePasses;\n }\n\n /**\n * If a color is disliked, lighten it to make it likable.\n *\n * @param hct A color to be judged.\n * @return A new color if the original color is disliked, or the original\n * color if it is acceptable.\n */\n static fixIfDisliked(hct: Hct): Hct {\n if (DislikeAnalyzer.isDisliked(hct)) {\n return Hct.from(\n hct.hue,\n hct.chroma,\n 70.0,\n );\n }\n\n return hct;\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Contrast} from '../contrast/contrast.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {ContrastCurve} from './contrast_curve.js';\nimport {DynamicScheme} from './dynamic_scheme.js';\nimport {ToneDeltaPair} from './tone_delta_pair.js';\n\n/**\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone given DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\ninterface FromPaletteOptions {\n name?: string;\n palette: (scheme: DynamicScheme) => TonalPalette;\n tone: (scheme: DynamicScheme) => number;\n isBackground?: boolean;\n background?: (scheme: DynamicScheme) => DynamicColor;\n secondBackground?: (scheme: DynamicScheme) => DynamicColor;\n contrastCurve?: ContrastCurve;\n toneDeltaPair?: (scheme: DynamicScheme) => ToneDeltaPair;\n}\n\n/**\n * A color that adjusts itself based on UI state provided by DynamicScheme.\n *\n * Colors without backgrounds do not change tone when contrast changes. Colors\n * with backgrounds become closer to their background as contrast lowers, and\n * further when contrast increases.\n *\n * Prefer static constructors. They require either a hexcode, a palette and\n * tone, or a hue and chroma. Optionally, they can provide a background\n * DynamicColor.\n */\nexport class DynamicColor {\n private readonly hctCache = new Map<DynamicScheme, Hct>();\n\n /**\n * Create a DynamicColor defined by a TonalPalette and HCT tone.\n *\n * @param args Functions with DynamicScheme as input. Must provide a palette\n * and tone. May provide a background DynamicColor and ToneDeltaConstraint.\n */\n static fromPalette(args: FromPaletteOptions): DynamicColor {\n return new DynamicColor(\n args.name ?? '',\n args.palette,\n args.tone,\n args.isBackground ?? false,\n args.background,\n args.secondBackground,\n args.contrastCurve,\n args.toneDeltaPair,\n );\n }\n\n /**\n * The base constructor for DynamicColor.\n *\n * _Strongly_ prefer using one of the convenience constructors. This class is\n * arguably too flexible to ensure it can support any scenario. Functional\n * arguments allow overriding without risks that come with subclasses.\n *\n * For example, the default behavior of adjust tone at max contrast\n * to be at a 7.0 ratio with its background is principled and\n * matches accessibility guidance. That does not mean it's the desired\n * approach for _every_ design system, and every color pairing,\n * always, in every case.\n *\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone, given a DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\n constructor(\n readonly name: string,\n readonly palette: (scheme: DynamicScheme) => TonalPalette,\n readonly tone: (scheme: DynamicScheme) => number,\n readonly isBackground: boolean,\n readonly background?: (scheme: DynamicScheme) => DynamicColor,\n readonly secondBackground?: (scheme: DynamicScheme) => DynamicColor,\n readonly contrastCurve?: ContrastCurve,\n readonly toneDeltaPair?: (scheme: DynamicScheme) => ToneDeltaPair,\n ) {\n if ((!background) && secondBackground) {\n throw new Error(\n `Color ${name} has secondBackground` +\n `defined, but background is not defined.`);\n }\n if ((!background) && contrastCurve) {\n throw new Error(\n `Color ${name} has contrastCurve` +\n `defined, but background is not defined.`);\n }\n if (background && !contrastCurve) {\n throw new Error(\n `Color ${name} has background` +\n `defined, but contrastCurve is not defined.`);\n }\n }\n\n /**\n * Return a ARGB integer (i.e. a hex code).\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getArgb(scheme: DynamicScheme): number {\n return this.getHct(scheme).toInt();\n }\n\n /**\n * Return a color, expressed in the HCT color space, that this\n * DynamicColor is under the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getHct(scheme: DynamicScheme): Hct {\n const cachedAnswer = this.hctCache.get(scheme);\n if (cachedAnswer != null) {\n return cachedAnswer;\n }\n const tone = this.getTone(scheme);\n const answer = this.palette(scheme).getHct(tone);\n if (this.hctCache.size > 4) {\n this.hctCache.clear();\n }\n this.hctCache.set(scheme, answer);\n return answer;\n }\n\n /**\n * Return a tone, T in the HCT color space, that this DynamicColor is under\n * the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getTone(scheme: DynamicScheme): number {\n const decreasingContrast = scheme.contrastLevel < 0;\n\n // Case 1: dual foreground, pair of colors with delta constraint.\n if (this.toneDeltaPair) {\n const toneDeltaPair = this.toneDeltaPair(scheme);\n const roleA = toneDeltaPair.roleA;\n const roleB = toneDeltaPair.roleB;\n const delta = toneDeltaPair.delta;\n const polarity = toneDeltaPair.polarity;\n const stayTogether = toneDeltaPair.stayTogether;\n\n const bg = this.background!(scheme);\n const bgTone = bg.getTone(scheme);\n\n const aIsNearer =\n (polarity === 'nearer' ||\n (polarity === 'lighter' && !scheme.isDark) ||\n (polarity === 'darker' && scheme.isDark));\n const nearer = aIsNearer ? roleA : roleB;\n const farther = aIsNearer ? roleB : roleA;\n const amNearer = this.name === nearer.name;\n const expansionDir = scheme.isDark ? 1 : -1;\n\n // 1st round: solve to min, each\n const nContrast = nearer.contrastCurve!.get(scheme.contrastLevel);\n const fContrast = farther.contrastCurve!.get(scheme.contrastLevel);\n\n // If a color is good enough, it is not adjusted.\n // Initial and adjusted tones for `nearer`\n const nInitialTone = nearer.tone(scheme);\n let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ?\n nInitialTone :\n DynamicColor.foregroundTone(bgTone, nContrast);\n // Initial and adjusted tones for `farther`\n const fInitialTone = farther.tone(scheme);\n let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ?\n fInitialTone :\n DynamicColor.foregroundTone(bgTone, fContrast);\n\n if (decreasingContrast) {\n // If decreasing contrast, adjust color to the \"bare minimum\"\n // that satisfies contrast.\n nTone = DynamicColor.foregroundTone(bgTone, nContrast);\n fTone = DynamicColor.foregroundTone(bgTone, fContrast);\n }\n\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones satisfy the constraint; no change needed.\n } else {\n // 2nd round: expand farther to match delta.\n fTone = math.clampDouble(0, 100, nTone + delta * expansionDir);\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones now satisfy the constraint; no change needed.\n } else {\n // 3rd round: contract nearer to match delta.\n nTone = math.clampDouble(0, 100, fTone - delta * expansionDir);\n }\n }\n\n // Avoids the 50-59 awkward zone.\n if (50 <= nTone && nTone < 60) {\n // If `nearer` is in the awkward zone, move it away, together with\n // `farther`.\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n } else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n } else if (50 <= fTone && fTone < 60) {\n if (stayTogether) {\n // Fixes both, to avoid two colors on opposite sides of the \"awkward\n // zone\".\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n } else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n } else {\n // Not required to stay together; fixes just one.\n if (expansionDir > 0) {\n fTone = 60;\n } else {\n fTone = 49;\n }\n }\n }\n\n // Returns `nTone` if this color is `nearer`, otherwise `fTone`.\n return amNearer ? nTone : fTone;\n }\n\n else {\n // Case 2: No contrast pair; just solve for itself.\n let answer = this.tone(scheme);\n\n if (this.background == null) {\n return answer; // No adjustment for colors with no background.\n }\n\n const bgTone = this.background(scheme).getTone(scheme);\n\n const desiredRatio = this.contrastCurve!.get(scheme.contrastLevel);\n\n if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio) {\n // Don't \"improve\" what's good enough.\n } else {\n // Rough improvement.\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n\n if (decreasingContrast) {\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n\n if (this.isBackground && 50 <= answer && answer < 60) {\n // Must adjust\n if (Contrast.ratioOfTones(49, bgTone) >= desiredRatio) {\n answer = 49;\n } else {\n answer = 60;\n }\n }\n\n if (this.secondBackground) {\n // Case 3: Adjust for dual backgrounds.\n\n const [bg1, bg2] = [this.background, this.secondBackground];\n const [bgTone1, bgTone2] =\n [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)];\n const [upper, lower] =\n [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];\n\n if (Contrast.ratioOfTones(upper, answer) >= desiredRatio &&\n Contrast.ratioOfTones(lower, answer) >= desiredRatio) {\n return answer;\n }\n\n // The darkest light tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const lightOption = Contrast.lighter(upper, desiredRatio);\n\n // The lightest dark tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const darkOption = Contrast.darker(lower, desiredRatio);\n\n // Tones suitable for the foreground.\n const availables = [];\n if (lightOption !== -1) availables.push(lightOption);\n if (darkOption !== -1) availables.push(darkOption);\n\n const prefersLight = DynamicColor.tonePrefersLightForeground(bgTone1) ||\n DynamicColor.tonePrefersLightForeground(bgTone2);\n if (prefersLight) {\n return (lightOption < 0) ? 100 : lightOption;\n }\n if (availables.length === 1) {\n return availables[0];\n }\n return (darkOption < 0) ? 0 : darkOption;\n }\n\n return answer;\n }\n }\n\n /**\n * Given a background tone, find a foreground tone, while ensuring they reach\n * a contrast ratio that is as close to [ratio] as possible.\n *\n * @param bgTone Tone in HCT. Range is 0 to 100, undefined behavior when it\n * falls outside that range.\n * @param ratio The contrast ratio desired between bgTone and the return\n * value.\n */\n static foregroundTone(bgTone: number, ratio: number): number {\n const lighterTone = Contrast.lighterUnsafe(bgTone, ratio);\n const darkerTone = Contrast.darkerUnsafe(bgTone, ratio);\n const lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone);\n const darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);\n const preferLighter = DynamicColor.tonePrefersLightForeground(bgTone);\n\n if (preferLighter) {\n // This handles an edge case where the initial contrast ratio is high\n // (ex. 13.0), and the ratio passed to the function is that high\n // ratio, and both the lighter and darker ratio fails to pass that\n // ratio.\n //\n // This was observed with Tonal Spot's On Primary Container turning\n // black momentarily between high and max contrast in light mode. PC's\n // standard tone was T90, OPC's was T10, it was light mode, and the\n // contrast value was 0.6568521221032331.\n const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < 0.1 &&\n lighterRatio < ratio && darkerRatio < ratio;\n return lighterRatio >= ratio || lighterRatio >= darkerRatio ||\n negligibleDifference ?\n lighterTone :\n darkerTone;\n } else {\n return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone :\n lighterTone;\n }\n }\n\n /**\n * Returns whether [tone] prefers a light foreground.\n *\n * People prefer white foregrounds on ~T60-70. Observed over time, and also\n * by Andrew Somers during research for APCA.\n *\n * T60 used as to create the smallest discontinuity possible when skipping\n * down to T49 in order to ensure light foregrounds.\n * Since `tertiaryContainer` in dark monochrome scheme requires a tone of\n * 60, it should not be adjusted. Therefore, 60 is excluded here.\n */\n static tonePrefersLightForeground(tone: number): boolean {\n return Math.round(tone) < 60.0;\n }\n\n /**\n * Returns whether [tone] can reach a contrast ratio of 4.5 with a lighter\n * color.\n */\n static toneAllowsLightForeground(tone: number): boolean {\n return Math.round(tone) <= 49.0;\n }\n\n /**\n * Adjust a tone such that white has 4.5 contrast, if the tone is\n * reasonably close to supporting it.\n */\n static enableLightForeground(tone: number): number {\n if (DynamicColor.tonePrefersLightForeground(tone) &&\n !DynamicColor.toneAllowsLightForeground(tone)) {\n return 49.0;\n }\n return tone;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\n/**\n * A convenience class for retrieving colors that are constant in hue and\n * chroma, but vary in tone.\n */\nexport class TonalPalette {\n private readonly cache = new Map<number, number>();\n\n /**\n * @param argb ARGB representation of a color\n * @return Tones matching that color's hue and chroma.\n */\n static fromInt(argb: number): TonalPalette {\n const hct = Hct.fromInt(argb);\n return TonalPalette.fromHct(hct);\n }\n\n /**\n * @param hct Hct\n * @return Tones matching that color's hue and chroma.\n */\n static fromHct(hct: Hct) {\n return new TonalPalette(hct.hue, hct.chroma, hct);\n }\n\n /**\n * @param hue HCT hue\n * @param chroma HCT chroma\n * @return Tones matching hue and chroma.\n */\n static fromHueAndChroma(hue: number, chroma: number): TonalPalette {\n const keyColor = new KeyColor(hue, chroma).create();\n return new TonalPalette(hue, chroma, keyColor);\n }\n\n private constructor(readonly hue: number, readonly chroma: number, readonly keyColor: Hct) {}\n\n /**\n * @param tone HCT tone, measured from 0 to 100.\n * @return ARGB representation of a color with that tone.\n */\n tone(tone: number): number {\n let argb = this.cache.get(tone);\n if (argb === undefined) {\n argb = Hct.from(this.hue, this.chroma, tone).toInt();\n this.cache.set(tone, argb);\n }\n return argb;\n }\n\n /**\n * @param tone HCT tone.\n * @return HCT representation of a color with that tone.\n */\n getHct(tone: number): Hct {\n return Hct.fromInt(this.tone(tone));\n }\n}\n\n/**\n * Key color is a color that represents the hue and chroma of a tonal palette\n */\nclass KeyColor {\n // Cache that maps tone to max chroma to avoid duplicated HCT calculation.\n private readonly chromaCache = new Map<number, number>();\n private readonly maxChromaValue = 200.0;\n\n constructor(readonly hue: number, readonly requestedChroma: number) {}\n\n /**\n * Creates a key color from a [hue] and a [chroma].\n * The key color is the first tone, starting from T50, matching the given hue\n * and chroma.\n *\n * @return Key color [Hct]\n */\n create(): Hct {\n // Pivot around T50 because T50 has the most chroma available, on\n // average. Thus it is most likely to have a direct answer.\n const pivotTone = 50;\n const toneStepSize = 1;\n // Epsilon to accept values slightly higher than the requested chroma.\n const epsilon = 0.01;\n\n // Binary search to find the tone that can provide a chroma that is closest\n // to the requested chroma.\n let lowerTone = 0;\n let upperTone = 100;\n while (lowerTone < upperTone) {\n const midTone = Math.floor((lowerTone + upperTone) / 2);\n const isAscending =\n this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);\n const sufficientChroma =\n this.maxChroma(midTone) >= this.requestedChroma - epsilon;\n\n if (sufficientChroma) {\n // Either range [lowerTone, midTone] or [midTone, upperTone] has\n // the answer, so search in the range that is closer the pivot tone.\n if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {\n upperTone = midTone;\n } else {\n if (lowerTone === midTone) {\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n lowerTone = midTone;\n }\n } else {\n // As there is no sufficient chroma in the midTone, follow the direction\n // to the chroma peak.\n if (isAscending) {\n lowerTone = midTone + toneStepSize;\n } else {\n // Keep midTone for potential chroma peak.\n upperTone = midTone;\n }\n }\n }\n\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n\n // Find the maximum chroma for a given tone\n private maxChroma(tone: number): number {\n if (this.chromaCache.has(tone)) {\n return this.chromaCache.get(tone)!;\n }\n const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;\n this.chromaCache.set(tone, chroma);\n return chroma;\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as math from '../utils/math_utils.js';\n\n/**\n * A class containing a value that changes with the contrast level.\n *\n * Usually represents the contrast requirements for a dynamic color on its\n * background. The four values correspond to values for contrast levels -1.0,\n * 0.0, 0.5, and 1.0, respectively.\n */\nexport class ContrastCurve {\n /**\n * Creates a `ContrastCurve` object.\n *\n * @param low Value for contrast level -1.0\n * @param normal Value for contrast level 0.0\n * @param medium Value for contrast level 0.5\n * @param high Value for contrast level 1.0\n */\n constructor(\n readonly low: number,\n readonly normal: number,\n readonly medium: number,\n readonly high: number,\n ) {}\n\n /**\n * Returns the value at a given contrast level.\n *\n * @param contrastLevel The contrast level. 0.0 is the default (normal); -1.0\n * is the lowest; 1.0 is the highest.\n * @return The value. For contrast ratios, a number between 1.0 and 21.0.\n */\n get(contrastLevel: number): number {\n if (contrastLevel <= -1.0) {\n return this.low;\n } else if (contrastLevel < 0.0) {\n return math.lerp(this.low, this.normal, (contrastLevel - (-1)) / 1);\n } else if (contrastLevel < 0.5) {\n return math.lerp(this.normal, this.medium, (contrastLevel - 0) / 0.5);\n } else if (contrastLevel < 1.0) {\n return math.lerp(this.medium, this.high, (contrastLevel - 0.5) / 0.5);\n } else {\n return this.high;\n }\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicColor} from './dynamic_color.js';\n\n/**\n * Describes the different in tone between colors.\n */\nexport type TonePolarity = 'darker'|'lighter'|'nearer'|'farther';\n\n/**\n * Documents a constraint between two DynamicColors, in which their tones must\n * have a certain distance from each other.\n *\n * Prefer a DynamicColor with a background, this is for special cases when\n * designers want tonal distance, literally contrast, between two colors that\n * don't have a background / foreground relationship or a contrast guarantee.\n */\nexport class ToneDeltaPair {\n /**\n * Documents a constraint in tone distance between two DynamicColors.\n *\n * The polarity is an adjective that describes \"A\", compared to \"B\".\n *\n * For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that\n * A's tone should be at least 15 darker than B's.\n *\n * 'nearer' and 'farther' describes closeness to the surface roles. For\n * instance, ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A\n * should be 10 lighter than B in light mode, and 10 darker than B in dark\n * mode.\n *\n * @param roleA The first role in a pair.\n * @param roleB The second role in a pair.\n * @param delta Required difference between tones. Absolute value, negative\n * values have undefined behavior.\n * @param polarity The relative relation between tones of roleA and roleB,\n * as described above.\n * @param stayTogether Whether these two roles should stay on the same side of\n * the \"awkward zone\" (T50-59). This is necessary for certain cases where\n * one role has two backgrounds.\n */\n constructor(\n readonly roleA: DynamicColor,\n readonly roleB: DynamicColor,\n readonly delta: number,\n readonly polarity: TonePolarity,\n readonly stayTogether: boolean,\n ) {}\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Set of themes supported by Dynamic Color.\n * Instantiate the corresponding subclass, ex. SchemeTonalSpot, to create\n * colors corresponding to the theme.\n */\nexport enum Variant {\n MONOCHROME,\n NEUTRAL,\n TONAL_SPOT,\n VIBRANT,\n EXPRESSIVE,\n FIDELITY,\n CONTENT,\n RAINBOW,\n FRUIT_SALAD\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DislikeAnalyzer} from '../dislike/dislike_analyzer.js';\nimport {Hct} from '../hct/hct.js';\n\nimport {ContrastCurve} from './contrast_curve.js';\nimport {DynamicColor} from './dynamic_color.js';\nimport {DynamicScheme} from './dynamic_scheme.js';\nimport {ToneDeltaPair} from './tone_delta_pair.js';\nimport {Variant} from './variant.js';\n\nfunction isFidelity(scheme: DynamicScheme): boolean {\n return scheme.variant === Variant.FIDELITY ||\n scheme.variant === Variant.CONTENT;\n}\n\nfunction isMonochrome(scheme: DynamicScheme): boolean {\n return scheme.variant === Variant.MONOCHROME;\n}\n\nfunction findDesiredChromaByTone(\n hue: number, chroma: number, tone: number,\n byDecreasingTone: boolean): number {\n let answer = tone;\n\n let closestToChroma = Hct.from(hue, chroma, tone);\n if (closestToChroma.chroma < chroma) {\n let chromaPeak = closestToChroma.chroma;\n while (closestToChroma.chroma < chroma) {\n answer += byDecreasingTone ? -1.0 : 1.0;\n const potentialSolution = Hct.from(hue, chroma, answer);\n if (chromaPeak > potentialSolution.chroma) {\n break;\n }\n if (Math.abs(potentialSolution.chroma - chroma) < 0.4) {\n break;\n }\n\n const potentialDelta = Math.abs(potentialSolution.chroma - chroma);\n const currentDelta = Math.abs(closestToChroma.chroma - chroma);\n if (potentialDelta < currentDelta) {\n closestToChroma = potentialSolution;\n }\n chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);\n }\n }\n\n return answer;\n}\n\n/**\n * DynamicColors for the colors in the Material Design system.\n */\n// Material Color Utilities namespaces the various utilities it provides.\n// tslint:disable-next-line:class-as-namespace\nexport class MaterialDynamicColors {\n static contentAccentToneDelta = 15.0;\n static highestSurface(s: DynamicScheme): DynamicColor {\n return s.isDark ? MaterialDynamicColors.surfaceBright :\n MaterialDynamicColors.surfaceDim;\n }\n\n static primaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'primary_palette_key_color',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.primaryPalette.keyColor.tone,\n });\n\n static secondaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'secondary_palette_key_color',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.secondaryPalette.keyColor.tone,\n });\n\n static tertiaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'tertiary_palette_key_color',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => s.tertiaryPalette.keyColor.tone,\n });\n\n static neutralPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_palette_key_color',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.neutralPalette.keyColor.tone,\n });\n\n static neutralVariantPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_variant_palette_key_color',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.neutralVariantPalette.keyColor.tone,\n });\n\n static background = DynamicColor.fromPalette({\n name: 'background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n });\n\n static onBackground = DynamicColor.fromPalette({\n name: 'on_background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.background,\n contrastCurve: new ContrastCurve(3, 3, 4.5, 7),\n });\n\n static surface = DynamicColor.fromPalette({\n name: 'surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n });\n\n static surfaceDim = DynamicColor.fromPalette({\n name: 'surface_dim',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? 6 : new ContrastCurve(87, 87, 80, 75).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceBright = DynamicColor.fromPalette({\n name: 'surface_bright',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? new ContrastCurve(24, 24, 29, 34).get(s.contrastLevel) : 98,\n isBackground: true,\n });\n\n static surfaceContainerLowest = DynamicColor.fromPalette({\n name: 'surface_container_lowest',\n palette: (s) => s.neutralPalette,\n tone: (s) =>\n s.isDark ? new ContrastCurve(4, 4, 2, 0).get(s.contrastLevel) : 100,\n isBackground: true,\n });\n\n static surfaceContainerLow = DynamicColor.fromPalette({\n name: 'surface_container_low',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(10, 10, 11, 12).get(s.contrastLevel) :\n new ContrastCurve(96, 96, 96, 95).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainer = DynamicColor.fromPalette({\n name: 'surface_container',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(12, 12, 16, 20).get(s.contrastLevel) :\n new ContrastCurve(94, 94, 92, 90).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainerHigh = DynamicColor.fromPalette({\n name: 'surface_container_high',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(17, 17, 21, 25).get(s.contrastLevel) :\n new ContrastCurve(92, 92, 88, 85).get(s.contrastLevel),\n isBackground: true,\n });\n\n static surfaceContainerHighest = DynamicColor.fromPalette({\n name: 'surface_container_highest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(22, 22, 26, 30).get(s.contrastLevel) :\n new ContrastCurve(90, 90, 84, 80).get(s.contrastLevel),\n isBackground: true,\n });\n\n static onSurface = DynamicColor.fromPalette({\n name: 'on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static surfaceVariant = DynamicColor.fromPalette({\n name: 'surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n });\n\n static onSurfaceVariant = DynamicColor.fromPalette({\n name: 'on_surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 80 : 30,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static inverseSurface = DynamicColor.fromPalette({\n name: 'inverse_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 20,\n });\n\n static inverseOnSurface = DynamicColor.fromPalette({\n name: 'inverse_on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 20 : 95,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static outline = DynamicColor.fromPalette({\n name: 'outline',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 60 : 50,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7),\n });\n\n static outlineVariant = DynamicColor.fromPalette({\n name: 'outline_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 80,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n });\n\n static shadow = DynamicColor.fromPalette({\n name: 'shadow',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n });\n\n static scrim = DynamicColor.fromPalette({\n name: 'scrim',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n });\n\n static surfaceTint = DynamicColor.fromPalette({\n name: 'surface_tint',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n });\n\n static primary = DynamicColor.fromPalette({\n name: 'primary',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 100 : 0;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary,\n 10, 'nearer', false),\n });\n\n static onPrimary = DynamicColor.fromPalette({\n name: 'on_primary',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.primary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static primaryContainer = DynamicColor.fromPalette({\n name: 'primary_container',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isFidelity(s)) {\n return s.sourceColorHct.tone;\n }\n if (isMonochrome(s)) {\n return s.isDark ? 85 : 25;\n }\n return s.isDark ? 30 : 90;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary,\n 10, 'nearer', false),\n });\n\n static onPrimaryContainer = DynamicColor.fromPalette({\n name: 'on_primary_container',\n palette: (s) => s.primaryPalette,\n tone:\n (s) => {\n if (isFidelity(s)) {\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.primaryContainer.tone(s), 4.5);\n }\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.primaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static inversePrimary = DynamicColor.fromPalette({\n name: 'inverse_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 40 : 80,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n });\n\n static secondary = DynamicColor.fromPalette({\n name: 'secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryContainer,\n MaterialDynamicColors.secondary, 10, 'nearer', false),\n });\n\n static onSecondary = DynamicColor.fromPalette({\n name: 'on_secondary',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 100;\n } else {\n return s.isDark ? 20 : 100;\n }\n },\n background: (s) => MaterialDynamicColors.secondary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static secondaryContainer = DynamicColor.fromPalette({\n name: 'secondary_container',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n const initialTone = s.isDark ? 30 : 90;\n if (isMonochrome(s)) {\n return s.isDark ? 30 : 85;\n }\n if (!isFidelity(s)) {\n return initialTone;\n }\n return findDesiredChromaByTone(\n s.secondaryPalette.hue, s.secondaryPalette.chroma, initialTone,\n s.isDark ? false : true);\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryContainer,\n MaterialDynamicColors.secondary, 10, 'nearer', false),\n });\n\n static onSecondaryContainer = DynamicColor.fromPalette({\n name: 'on_secondary_container',\n palette: (s) => s.secondaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.secondaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.secondaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static tertiary = DynamicColor.fromPalette({\n name: 'tertiary',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 25;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary,\n 10, 'nearer', false),\n });\n\n static onTertiary = DynamicColor.fromPalette({\n name: 'on_tertiary',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.tertiary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static tertiaryContainer = DynamicColor.fromPalette({\n name: 'tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 60 : 49;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 30 : 90;\n }\n const proposedHct = s.tertiaryPalette.getHct(s.sourceColorHct.tone);\n return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary,\n 10, 'nearer', false),\n });\n\n static onTertiaryContainer = DynamicColor.fromPalette({\n name: 'on_tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(\n MaterialDynamicColors.tertiaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.tertiaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static error = DynamicColor.fromPalette({\n name: 'error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10,\n 'nearer', false),\n });\n\n static onError = DynamicColor.fromPalette({\n name: 'on_error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 20 : 100,\n background: (s) => MaterialDynamicColors.error,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static errorContainer = DynamicColor.fromPalette({\n name: 'error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10,\n 'nearer', false),\n });\n\n static onErrorContainer = DynamicColor.fromPalette({\n name: 'on_error_container',\n palette: (s) => s.errorPalette,\n tone:\n (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.errorContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static primaryFixed = DynamicColor.fromPalette({\n name: 'primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryFixed,\n MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n });\n\n static primaryFixedDim = DynamicColor.fromPalette({\n name: 'primary_fixed_dim',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.primaryFixed,\n MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n });\n\n static onPrimaryFixed = DynamicColor.fromPalette({\n name: 'on_primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onPrimaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_primary_fixed_variant',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static secondaryFixed = DynamicColor.fromPalette({\n name: 'secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 80.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryFixed,\n MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n });\n\n static secondaryFixedDim = DynamicColor.fromPalette({\n name: 'secondary_fixed_dim',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 70.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.secondaryFixed,\n MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n });\n\n static onSecondaryFixed = DynamicColor.fromPalette({\n name: 'on_secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => 10.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onSecondaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_secondary_fixed_variant',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 25.0 : 30.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n\n static tertiaryFixed = DynamicColor.fromPalette({\n name: 'tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryFixed,\n MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n });\n\n static tertiaryFixedDim = DynamicColor.fromPalette({\n name: 'tertiary_fixed_dim',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(\n MaterialDynamicColors.tertiaryFixed,\n MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n });\n\n static onTertiaryFixed = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n });\n\n static onTertiaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed_variant',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n });\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\nimport {DynamicColor} from './dynamic_color.js';\nimport {MaterialDynamicColors} from './material_dynamic_colors.js';\nimport {Variant} from './variant.js';\n\n/**\n * @param sourceColorArgb The source color of the theme as an ARGB 32-bit\n * integer.\n * @param variant The variant, or style, of the theme.\n * @param contrastLevel Value from -1 to 1. -1 represents minimum contrast,\n * 0 represents standard (i.e. the design as spec'd), and 1 represents maximum\n * contrast.\n * @param isDark Whether the scheme is in dark mode or light mode.\n * @param primaryPalette Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually\n * colorful.\n * @param secondaryPalette Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * less colorful.\n * @param tertiaryPalette Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * a different hue from primary and colorful.\n * @param neutralPalette Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually not\n * colorful at all, intended for background & surface colors.\n * @param neutralVariantPalette Given a tone, produces a color. Hue and chroma\n * of the color are specified in the design specification of the variant.\n * Usually not colorful, but slightly more colorful than Neutral. Intended for\n * backgrounds & surfaces.\n */\ninterface DynamicSchemeOptions {\n sourceColorArgb: number;\n variant: Variant;\n contrastLevel: number;\n isDark: boolean;\n primaryPalette: TonalPalette;\n secondaryPalette: TonalPalette;\n tertiaryPalette: TonalPalette;\n neutralPalette: TonalPalette;\n neutralVariantPalette: TonalPalette;\n}\n\n/**\n * Constructed by a set of values representing the current UI state (such as\n * whether or not its dark theme, what the theme style is, etc.), and\n * provides a set of TonalPalettes that can create colors that fit in\n * with the theme style. Used by DynamicColor to resolve into a color.\n */\nexport class DynamicScheme {\n /**\n * The source color of the theme as an HCT color.\n */\n sourceColorHct: Hct;\n /**\n * Given a tone, produces a reddish, colorful, color.\n */\n errorPalette: TonalPalette;\n\n /** The source color of the theme as an ARGB 32-bit integer. */\n readonly sourceColorArgb: number;\n\n /** The variant, or style, of the theme. */\n readonly variant: Variant;\n\n /**\n * Value from -1 to 1. -1 represents minimum contrast. 0 represents standard\n * (i.e. the design as spec'd), and 1 represents maximum contrast.\n */\n readonly contrastLevel: number;\n\n /** Whether the scheme is in dark mode or light mode. */\n readonly isDark: boolean;\n\n /**\n * Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually\n * colorful.\n */\n readonly primaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * less colorful.\n */\n readonly secondaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of\n * the color are specified in the design specification of the variant. Usually\n * a different hue from primary and colorful.\n */\n readonly tertiaryPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma of the\n * color are specified in the design specification of the variant. Usually not\n * colorful at all, intended for background & surface colors.\n */\n readonly neutralPalette: TonalPalette;\n\n /**\n * Given a tone, produces a color. Hue and chroma\n * of the color are specified in the design specification of the variant.\n * Usually not colorful, but slightly more colorful than Neutral. Intended for\n * backgrounds & surfaces.\n */\n readonly neutralVariantPalette: TonalPalette;\n\n constructor(args: DynamicSchemeOptions) {\n this.sourceColorArgb = args.sourceColorArgb;\n this.variant = args.variant;\n this.contrastLevel = args.contrastLevel;\n this.isDark = args.isDark;\n this.sourceColorHct = Hct.fromInt(args.sourceColorArgb);\n this.primaryPalette = args.primaryPalette;\n this.secondaryPalette = args.secondaryPalette;\n this.tertiaryPalette = args.tertiaryPalette;\n this.neutralPalette = args.neutralPalette;\n this.neutralVariantPalette = args.neutralVariantPalette;\n this.errorPalette = TonalPalette.fromHueAndChroma(25.0, 84.0);\n }\n\n /**\n * Support design spec'ing Dynamic Color by schemes that specify hue\n * rotations that should be applied at certain breakpoints.\n * @param sourceColor the source color of the theme, in HCT.\n * @param hues The \"breakpoints\", i.e. the hues at which a rotation should\n * be apply.\n * @param rotations The rotation that should be applied when source color's\n * hue is >= the same index in hues array, and <= the hue at the next index\n * in hues array.\n */\n static getRotatedHue(sourceColor: Hct, hues: number[], rotations: number[]):\n number {\n const sourceHue = sourceColor.hue;\n if (hues.length !== rotations.length) {\n throw new Error(`mismatch between hue length ${hues.length} & rotations ${\n rotations.length}`);\n }\n if (rotations.length === 1) {\n return math.sanitizeDegreesDouble(sourceColor.hue + rotations[0]);\n }\n const size = hues.length;\n for (let i = 0; i <= size - 2; i++) {\n const thisHue = hues[i];\n const nextHue = hues[i + 1];\n if (thisHue < sourceHue && sourceHue < nextHue) {\n return math.sanitizeDegreesDouble(sourceHue + rotations[i]);\n }\n }\n // If this statement executes, something is wrong, there should have been a\n // rotation found using the arrays.\n return sourceHue;\n }\n\n\n getArgb(dynamicColor: DynamicColor): number {\n return dynamicColor.getArgb(this);\n }\n\n getHct(dynamicColor: DynamicColor): Hct {\n return dynamicColor.getHct(this);\n }\n\n get primaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.primaryPaletteKeyColor);\n }\n\n get secondaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.secondaryPaletteKeyColor);\n }\n\n get tertiaryPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryPaletteKeyColor);\n }\n\n get neutralPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.neutralPaletteKeyColor);\n }\n\n get neutralVariantPaletteKeyColor(): number {\n return this.getArgb(MaterialDynamicColors.neutralVariantPaletteKeyColor);\n }\n\n get background(): number {\n return this.getArgb(MaterialDynamicColors.background);\n }\n\n get onBackground(): number {\n return this.getArgb(MaterialDynamicColors.onBackground);\n }\n\n get surface(): number {\n return this.getArgb(MaterialDynamicColors.surface);\n }\n\n get surfaceDim(): number {\n return this.getArgb(MaterialDynamicColors.surfaceDim);\n }\n\n get surfaceBright(): number {\n return this.getArgb(MaterialDynamicColors.surfaceBright);\n }\n\n get surfaceContainerLowest(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerLowest);\n }\n\n get surfaceContainerLow(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerLow);\n }\n\n get surfaceContainer(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainer);\n }\n\n get surfaceContainerHigh(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerHigh);\n }\n\n get surfaceContainerHighest(): number {\n return this.getArgb(MaterialDynamicColors.surfaceContainerHighest);\n }\n\n get onSurface(): number {\n return this.getArgb(MaterialDynamicColors.onSurface);\n }\n\n get surfaceVariant(): number {\n return this.getArgb(MaterialDynamicColors.surfaceVariant);\n }\n\n get onSurfaceVariant(): number {\n return this.getArgb(MaterialDynamicColors.onSurfaceVariant);\n }\n\n get inverseSurface(): number {\n return this.getArgb(MaterialDynamicColors.inverseSurface);\n }\n\n get inverseOnSurface(): number {\n return this.getArgb(MaterialDynamicColors.inverseOnSurface);\n }\n\n get outline(): number {\n return this.getArgb(MaterialDynamicColors.outline);\n }\n\n get outlineVariant(): number {\n return this.getArgb(MaterialDynamicColors.outlineVariant);\n }\n\n get shadow(): number {\n return this.getArgb(MaterialDynamicColors.shadow);\n }\n\n get scrim(): number {\n return this.getArgb(MaterialDynamicColors.scrim);\n }\n\n get surfaceTint(): number {\n return this.getArgb(MaterialDynamicColors.surfaceTint);\n }\n\n get primary(): number {\n return this.getArgb(MaterialDynamicColors.primary);\n }\n\n get onPrimary(): number {\n return this.getArgb(MaterialDynamicColors.onPrimary);\n }\n\n get primaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.primaryContainer);\n }\n\n get onPrimaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryContainer);\n }\n\n get inversePrimary(): number {\n return this.getArgb(MaterialDynamicColors.inversePrimary);\n }\n\n get secondary(): number {\n return this.getArgb(MaterialDynamicColors.secondary);\n }\n\n get onSecondary(): number {\n return this.getArgb(MaterialDynamicColors.onSecondary);\n }\n\n get secondaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.secondaryContainer);\n }\n\n get onSecondaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryContainer);\n }\n\n get tertiary(): number {\n return this.getArgb(MaterialDynamicColors.tertiary);\n }\n\n get onTertiary(): number {\n return this.getArgb(MaterialDynamicColors.onTertiary);\n }\n\n get tertiaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryContainer);\n }\n\n get onTertiaryContainer(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryContainer);\n }\n\n get error(): number {\n return this.getArgb(MaterialDynamicColors.error);\n }\n\n get onError(): number {\n return this.getArgb(MaterialDynamicColors.onError);\n }\n\n get errorContainer(): number {\n return this.getArgb(MaterialDynamicColors.errorContainer);\n }\n\n get onErrorContainer(): number {\n return this.getArgb(MaterialDynamicColors.onErrorContainer);\n }\n\n get primaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.primaryFixed);\n }\n\n get primaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.primaryFixedDim);\n }\n\n get onPrimaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryFixed);\n }\n\n get onPrimaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onPrimaryFixedVariant);\n }\n\n get secondaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.secondaryFixed);\n }\n\n get secondaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.secondaryFixedDim);\n }\n\n get onSecondaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryFixed);\n }\n\n get onSecondaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onSecondaryFixedVariant);\n }\n\n get tertiaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryFixed);\n }\n\n get tertiaryFixedDim(): number {\n return this.getArgb(MaterialDynamicColors.tertiaryFixedDim);\n }\n\n get onTertiaryFixed(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryFixed);\n }\n\n get onTertiaryFixedVariant(): number {\n return this.getArgb(MaterialDynamicColors.onTertiaryFixedVariant);\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\n\nimport {TonalPalette} from './tonal_palette.js';\n\n/**\n * Set of colors to generate a [CorePalette] from\n */\nexport interface CorePaletteColors {\n primary: number;\n secondary?: number;\n tertiary?: number;\n neutral?: number;\n neutralVariant?: number;\n error?: number;\n}\n\n/**\n * An intermediate concept between the key color for a UI theme, and a full\n * color scheme. 5 sets of tones are generated, all except one use the same hue\n * as the key color, and all vary in chroma.\n */\nexport class CorePalette {\n a1: TonalPalette;\n a2: TonalPalette;\n a3: TonalPalette;\n n1: TonalPalette;\n n2: TonalPalette;\n error: TonalPalette;\n\n /**\n * @param argb ARGB representation of a color\n */\n static of(argb: number): CorePalette {\n return new CorePalette(argb, false);\n }\n\n /**\n * @param argb ARGB representation of a color\n */\n static contentOf(argb: number): CorePalette {\n return new CorePalette(argb, true);\n }\n\n /**\n * Create a [CorePalette] from a set of colors\n */\n static fromColors(colors: CorePaletteColors): CorePalette {\n return CorePalette.createPaletteFromColors(false, colors);\n }\n\n /**\n * Create a content [CorePalette] from a set of colors\n */\n static contentFromColors(colors: CorePaletteColors): CorePalette {\n return CorePalette.createPaletteFromColors(true, colors);\n }\n\n private static createPaletteFromColors(\n content: boolean,\n colors: CorePaletteColors,\n ) {\n const palette = new CorePalette(colors.primary, content);\n if (colors.secondary) {\n const p = new CorePalette(colors.secondary, content);\n palette.a2 = p.a1;\n }\n if (colors.tertiary) {\n const p = new CorePalette(colors.tertiary, content);\n palette.a3 = p.a1;\n }\n if (colors.error) {\n const p = new CorePalette(colors.error, content);\n palette.error = p.a1;\n }\n if (colors.neutral) {\n const p = new CorePalette(colors.neutral, content);\n palette.n1 = p.n1;\n }\n if (colors.neutralVariant) {\n const p = new CorePalette(colors.neutralVariant, content);\n palette.n2 = p.n2;\n }\n return palette;\n }\n\n private constructor(argb: number, isContent: boolean) {\n const hct = Hct.fromInt(argb);\n const hue = hct.hue;\n const chroma = hct.chroma;\n if (isContent) {\n this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);\n this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);\n this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));\n this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));\n } else {\n this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));\n this.a2 = TonalPalette.fromHueAndChroma(hue, 16);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);\n this.n1 = TonalPalette.fromHueAndChroma(hue, 4);\n this.n2 = TonalPalette.fromHueAndChroma(hue, 8);\n }\n this.error = TonalPalette.fromHueAndChroma(25, 84);\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {CorePalette} from '../palettes/core_palette.js';\n\n/**\n * DEPRECATED. The `Scheme` class is deprecated in favor of `DynamicScheme`.\n * Please see\n * https://github.com/material-foundation/material-color-utilities/blob/main/make_schemes.md\n * for migration guidance.\n *\n * Represents a Material color scheme, a mapping of color roles to colors.\n */\nexport class Scheme {\n get primary(): number {\n return this.props.primary;\n }\n\n get onPrimary(): number {\n return this.props.onPrimary;\n }\n\n get primaryContainer(): number {\n return this.props.primaryContainer;\n }\n\n get onPrimaryContainer(): number {\n return this.props.onPrimaryContainer;\n }\n\n get secondary(): number {\n return this.props.secondary;\n }\n\n get onSecondary(): number {\n return this.props.onSecondary;\n }\n\n get secondaryContainer(): number {\n return this.props.secondaryContainer;\n }\n\n get onSecondaryContainer(): number {\n return this.props.onSecondaryContainer;\n }\n\n get tertiary(): number {\n return this.props.tertiary;\n }\n\n get onTertiary(): number {\n return this.props.onTertiary;\n }\n\n get tertiaryContainer(): number {\n return this.props.tertiaryContainer;\n }\n\n get onTertiaryContainer(): number {\n return this.props.onTertiaryContainer;\n }\n\n get error(): number {\n return this.props.error;\n }\n\n get onError(): number {\n return this.props.onError;\n }\n\n get errorContainer(): number {\n return this.props.errorContainer;\n }\n\n get onErrorContainer(): number {\n return this.props.onErrorContainer;\n }\n\n get background(): number {\n return this.props.background;\n }\n\n get onBackground(): number {\n return this.props.onBackground;\n }\n\n get surface(): number {\n return this.props.surface;\n }\n\n get onSurface(): number {\n return this.props.onSurface;\n }\n\n get surfaceVariant(): number {\n return this.props.surfaceVariant;\n }\n\n get onSurfaceVariant(): number {\n return this.props.onSurfaceVariant;\n }\n\n get outline(): number {\n return this.props.outline;\n }\n\n get outlineVariant(): number {\n return this.props.outlineVariant;\n }\n\n get shadow(): number {\n return this.props.shadow;\n }\n\n get scrim(): number {\n return this.props.scrim;\n }\n\n get inverseSurface(): number {\n return this.props.inverseSurface;\n }\n\n get inverseOnSurface(): number {\n return this.props.inverseOnSurface;\n }\n\n get inversePrimary(): number {\n return this.props.inversePrimary;\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material color scheme, based on the color's hue.\n */\n static light(argb: number): Scheme {\n return Scheme.lightFromCorePalette(CorePalette.of(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material color scheme, based on the color's hue.\n */\n static dark(argb: number): Scheme {\n return Scheme.darkFromCorePalette(CorePalette.of(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material content color scheme, based on the color's hue.\n */\n static lightContent(argb: number): Scheme {\n return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));\n }\n\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material content color scheme, based on the color's hue.\n */\n static darkContent(argb: number): Scheme {\n return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));\n }\n\n /**\n * Light scheme from core palette\n */\n static lightFromCorePalette(core: CorePalette): Scheme {\n return new Scheme({\n primary: core.a1.tone(40),\n onPrimary: core.a1.tone(100),\n primaryContainer: core.a1.tone(90),\n onPrimaryContainer: core.a1.tone(10),\n secondary: core.a2.tone(40),\n onSecondary: core.a2.tone(100),\n secondaryContainer: core.a2.tone(90),\n onSecondaryContainer: core.a2.tone(10),\n tertiary: core.a3.tone(40),\n onTertiary: core.a3.tone(100),\n tertiaryContainer: core.a3.tone(90),\n onTertiaryContainer: core.a3.tone(10),\n error: core.error.tone(40),\n onError: core.error.tone(100),\n errorContainer: core.error.tone(90),\n onErrorContainer: core.error.tone(10),\n background: core.n1.tone(99),\n onBackground: core.n1.tone(10),\n surface: core.n1.tone(99),\n onSurface: core.n1.tone(10),\n surfaceVariant: core.n2.tone(90),\n onSurfaceVariant: core.n2.tone(30),\n outline: core.n2.tone(50),\n outlineVariant: core.n2.tone(80),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(20),\n inverseOnSurface: core.n1.tone(95),\n inversePrimary: core.a1.tone(80)\n });\n }\n\n /**\n * Dark scheme from core palette\n */\n static darkFromCorePalette(core: CorePalette): Scheme {\n return new Scheme({\n primary: core.a1.tone(80),\n onPrimary: core.a1.tone(20),\n primaryContainer: core.a1.tone(30),\n onPrimaryContainer: core.a1.tone(90),\n secondary: core.a2.tone(80),\n onSecondary: core.a2.tone(20),\n secondaryContainer: core.a2.tone(30),\n onSecondaryContainer: core.a2.tone(90),\n tertiary: core.a3.tone(80),\n onTertiary: core.a3.tone(20),\n tertiaryContainer: core.a3.tone(30),\n onTertiaryContainer: core.a3.tone(90),\n error: core.error.tone(80),\n onError: core.error.tone(20),\n errorContainer: core.error.tone(30),\n onErrorContainer: core.error.tone(80),\n background: core.n1.tone(10),\n onBackground: core.n1.tone(90),\n surface: core.n1.tone(10),\n onSurface: core.n1.tone(90),\n surfaceVariant: core.n2.tone(30),\n onSurfaceVariant: core.n2.tone(80),\n outline: core.n2.tone(60),\n outlineVariant: core.n2.tone(30),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(90),\n inverseOnSurface: core.n1.tone(20),\n inversePrimary: core.a1.tone(40)\n });\n }\n\n private constructor(private readonly props: {\n primary: number,\n onPrimary: number,\n primaryContainer: number,\n onPrimaryContainer: number,\n secondary: number,\n onSecondary: number,\n secondaryContainer: number,\n onSecondaryContainer: number,\n tertiary: number,\n onTertiary: number,\n tertiaryContainer: number,\n onTertiaryContainer: number,\n error: number,\n onError: number,\n errorContainer: number,\n onErrorContainer: number,\n background: number,\n onBackground: number,\n surface: number,\n onSurface: number,\n surfaceVariant: number,\n onSurfaceVariant: number,\n outline: number,\n outlineVariant: number,\n shadow: number,\n scrim: number,\n inverseSurface: number,\n inverseOnSurface: number,\n inversePrimary: number\n }) {}\n\n toJSON() {\n return {\n ...this.props\n };\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is automatically generated. Do not modify it.\n\nimport {Hct} from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n\n/**\n * Design utilities using color temperature theory.\n *\n * Analogous colors, complementary color, and cache to efficiently, lazily,\n * generate data for calculations when needed.\n */\nexport class TemperatureCache {\n constructor(public input: Hct) {}\n\n hctsByTempCache: Hct[] = [];\n hctsByHueCache: Hct[] = [];\n tempsByHctCache = new Map<Hct, number>();\n inputRelativeTemperatureCache: number = -1.0;\n complementCache: Hct|null = null;\n\n get hctsByTemp(): Hct[] {\n if (this.hctsByTempCache.length > 0) {\n return this.hctsByTempCache;\n }\n\n const hcts = this.hctsByHue.concat([this.input]);\n const temperaturesByHct = this.tempsByHct;\n hcts.sort((a, b) => temperaturesByHct.get(a)! - temperaturesByHct.get(b)!);\n this.hctsByTempCache = hcts;\n return hcts;\n }\n\n get warmest(): Hct {\n return this.hctsByTemp[this.hctsByTemp.length - 1];\n }\n\n get coldest(): Hct {\n return this.hctsByTemp[0];\n }\n\n /**\n * A set of colors with differing hues, equidistant in temperature.\n *\n * In art, this is usually described as a set of 5 colors on a color wheel\n * divided into 12 sections. This method allows provision of either of those\n * values.\n *\n * Behavior is undefined when [count] or [divisions] is 0.\n * When divisions < count, colors repeat.\n *\n * [count] The number of colors to return, includes the input color.\n * [divisions] The number of divisions on the color wheel.\n */\n analogous(count = 5, divisions = 12): Hct[] {\n const startHue = Math.round(this.input.hue);\n const startHct = this.hctsByHue[startHue];\n let lastTemp = this.relativeTemperature(startHct);\n const allColors = [startHct];\n\n let absoluteTotalTempDelta = 0.0;\n for (let i = 0; i < 360; i++) {\n const hue = mathUtils.sanitizeDegreesInt(startHue + i);\n const hct = this.hctsByHue[hue];\n const temp = this.relativeTemperature(hct);\n const tempDelta = Math.abs(temp - lastTemp);\n lastTemp = temp;\n absoluteTotalTempDelta += tempDelta;\n }\n let hueAddend = 1;\n const tempStep = absoluteTotalTempDelta / divisions;\n let totalTempDelta = 0.0;\n lastTemp = this.relativeTemperature(startHct);\n while (allColors.length < divisions) {\n const hue = mathUtils.sanitizeDegreesInt(startHue + hueAddend);\n const hct = this.hctsByHue[hue];\n const temp = this.relativeTemperature(hct);\n const tempDelta = Math.abs(temp - lastTemp);\n totalTempDelta += tempDelta;\n\n const desiredTotalTempDeltaForIndex = allColors.length * tempStep;\n let indexSatisfied = totalTempDelta >= desiredTotalTempDeltaForIndex;\n let indexAddend = 1;\n // Keep adding this hue to the answers until its temperature is\n // insufficient. This ensures consistent behavior when there aren't\n // [divisions] discrete steps between 0 and 360 in hue with [tempStep]\n // delta in temperature between them.\n //\n // For example, white and black have no analogues: there are no other\n // colors at T100/T0. Therefore, they should just be added to the array\n // as answers.\n while (indexSatisfied && allColors.length < divisions) {\n allColors.push(hct);\n const desiredTotalTempDeltaForIndex =\n ((allColors.length + indexAddend) * tempStep);\n indexSatisfied = totalTempDelta >= desiredTotalTempDeltaForIndex;\n indexAddend++;\n }\n lastTemp = temp;\n hueAddend++;\n if (hueAddend > 360) {\n while (allColors.length < divisions) {\n allColors.push(hct);\n }\n break;\n }\n }\n\n const answers = [this.input];\n\n // First, generate analogues from rotating counter-clockwise.\n const increaseHueCount = Math.floor((count - 1) / 2.0);\n for (let i = 1; i < (increaseHueCount + 1); i++) {\n let index = 0 - i;\n while (index < 0) {\n index = allColors.length + index;\n }\n if (index >= allColors.length) {\n index = index % allColors.length;\n }\n answers.splice(0, 0, allColors[index]);\n }\n\n // Second, generate analogues from rotating clockwise.\n const decreaseHueCount = count - increaseHueCount - 1;\n for (let i = 1; i < (decreaseHueCount + 1); i++) {\n let index = i;\n while (index < 0) {\n index = allColors.length + index;\n }\n if (index >= allColors.length) {\n index = index % allColors.length;\n }\n answers.push(allColors[index]);\n }\n\n return answers;\n }\n\n /**\n * A color that complements the input color aesthetically.\n *\n * In art, this is usually described as being across the color wheel.\n * History of this shows intent as a color that is just as cool-warm as the\n * input color is warm-cool.\n */\n get complement(): Hct {\n if (this.complementCache != null) {\n return this.complementCache;\n }\n\n const coldestHue = this.coldest.hue;\n const coldestTemp = this.tempsByHct.get(this.coldest)!;\n\n const warmestHue = this.warmest.hue;\n const warmestTemp = this.tempsByHct.get(this.warmest)!;\n const range = warmestTemp - coldestTemp;\n const startHueIsColdestToWarmest =\n TemperatureCache.isBetween(this.input.hue, coldestHue, warmestHue);\n const startHue = startHueIsColdestToWarmest ? warmestHue : coldestHue;\n const endHue = startHueIsColdestToWarmest ? coldestHue : warmestHue;\n const directionOfRotation = 1.0;\n let smallestError = 1000.0;\n let answer = this.hctsByHue[Math.round(this.input.hue)];\n\n const complementRelativeTemp = 1.0 - this.inputRelativeTemperature;\n // Find the color in the other section, closest to the inverse percentile\n // of the input color. This is the complement.\n for (let hueAddend = 0.0; hueAddend <= 360.0; hueAddend += 1.0) {\n const hue = mathUtils.sanitizeDegreesDouble(\n startHue + directionOfRotation * hueAddend);\n if (!TemperatureCache.isBetween(hue, startHue, endHue)) {\n continue;\n }\n const possibleAnswer = this.hctsByHue[Math.round(hue)];\n const relativeTemp =\n (this.tempsByHct.get(possibleAnswer)! - coldestTemp) / range;\n const error = Math.abs(complementRelativeTemp - relativeTemp);\n if (error < smallestError) {\n smallestError = error;\n answer = possibleAnswer;\n }\n }\n this.complementCache = answer;\n return this.complementCache;\n }\n\n /**\n * Temperature relative to all colors with the same chroma and tone.\n * Value on a scale from 0 to 1.\n */\n relativeTemperature(hct: Hct): number {\n const range =\n this.tempsByHct.get(this.warmest)! - this.tempsByHct.get(this.coldest)!;\n const differenceFromColdest =\n this.tempsByHct.get(hct)! - this.tempsByHct.get(this.coldest)!;\n // Handle when there's no difference in temperature between warmest and\n // coldest: for example, at T100, only one color is available, white.\n if (range === 0.0) {\n return 0.5;\n }\n return differenceFromColdest / range;\n }\n\n /** Relative temperature of the input color. See [relativeTemperature]. */\n get inputRelativeTemperature(): number {\n if (this.inputRelativeTemperatureCache >= 0.0) {\n return this.inputRelativeTemperatureCache;\n }\n\n this.inputRelativeTemperatureCache = this.relativeTemperature(this.input);\n return this.inputRelativeTemperatureCache;\n }\n\n /** A Map with keys of HCTs in [hctsByTemp], values of raw temperature. */\n get tempsByHct(): Map<Hct, number> {\n if (this.tempsByHctCache.size > 0) {\n return this.tempsByHctCache;\n }\n const allHcts = this.hctsByHue.concat([this.input]);\n const temperaturesByHct = new Map<Hct, number>();\n for (const e of allHcts) {\n temperaturesByHct.set(e, TemperatureCache.rawTemperature(e));\n }\n this.tempsByHctCache = temperaturesByHct;\n return temperaturesByHct;\n }\n\n /**\n * HCTs for all hues, with the same chroma/tone as the input.\n * Sorted ascending, hue 0 to 360.\n */\n get hctsByHue(): Hct[] {\n if (this.hctsByHueCache.length > 0) {\n return this.hctsByHueCache;\n }\n const hcts: Hct[] = [];\n for (let hue = 0.0; hue <= 360.0; hue += 1.0) {\n const colorAtHue = Hct.from(hue, this.input.chroma, this.input.tone);\n hcts.push(colorAtHue);\n }\n this.hctsByHueCache = hcts;\n return this.hctsByHueCache;\n }\n\n /** Determines if an angle is between two other angles, rotating clockwise. */\n static isBetween(angle: number, a: number, b: number): boolean {\n if (a < b) {\n return a <= angle && angle <= b;\n }\n return a <= angle || angle <= b;\n }\n\n /**\n * Value representing cool-warm factor of a color.\n * Values below 0 are considered cool, above, warm.\n *\n * Color science has researched emotion and harmony, which art uses to select\n * colors. Warm-cool is the foundation of analogous and complementary colors.\n * See:\n * - Li-Chen Ou's Chapter 19 in Handbook of Color Psychology (2015).\n * - Josef Albers' Interaction of Color chapters 19 and 21.\n *\n * Implementation of Ou, Woodcock and Wright's algorithm, which uses\n * L*a*b* / LCH color space.\n * Return value has these properties:\n * - Values below 0 are cool, above 0 are warm.\n * - Lower bound: -0.52 - (chroma ^ 1.07 / 20). L*a*b* chroma is infinite.\n * Assuming max of 130 chroma, -9.66.\n * - Upper bound: -0.52 + (chroma ^ 1.07 / 20). L*a*b* chroma is infinite.\n * Assuming max of 130 chroma, 8.61.\n */\n static rawTemperature(color: Hct): number {\n const lab = colorUtils.labFromArgb(color.toInt());\n const hue = mathUtils.sanitizeDegreesDouble(\n Math.atan2(lab[2], lab[1]) * 180.0 / Math.PI);\n const chroma = Math.sqrt((lab[1] * lab[1]) + (lab[2] * lab[2]));\n const temperature = -0.5 +\n 0.02 * Math.pow(chroma, 1.07) *\n Math.cos(\n mathUtils.sanitizeDegreesDouble(hue - 50.0) * Math.PI / 180.0,\n );\n return temperature;\n }\n}\n", "/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DislikeAnalyzer} from '../dislike/dislike_analyzer.js';\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport {TemperatureCache} from '../temperature/temperature_cache.js';\n\n/**\n * A scheme that places the source color in `Scheme.primaryContainer`.\n *\n * Primary Container is the source color, adjusted for color relativity.\n * It maintains constant appearance in light mode and dark mode.\n * This adds ~5 tone in light mode, and subtracts ~5 tone in dark mode.\n * Tertiary Container is the complement to the source color, using\n * `TemperatureCache`. It also maintains constant appearance.\n */\nexport class SchemeContent extends DynamicScheme {\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.CONTENT,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue,\n Math.max(sourceColorHct.chroma - 32.0, sourceColorHct.chroma * 0.5)),\n tertiaryPalette: TonalPalette.fromInt(\n DislikeAnalyzer\n .fixIfDisliked(\n new TemperatureCache(sourceColorHct).analogous(3, 6)[2])\n .toInt()),\n neutralPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma / 8.0),\n neutralVariantPalette: TonalPalette.fromHueAndChroma(\n sourceColorHct.hue, sourceColorHct.chroma / 8.0 + 4.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * A Dynamic Color theme that is intentionally detached from the source color.\n */\nexport class SchemeExpressive extends DynamicScheme {\n /**\n * Hues (in degrees) used at breakpoints such that designers can specify a\n * hue rotation that occurs at a given break point.\n */\n private static readonly hues: number[] = [\n 0.0,\n 21.0,\n 51.0,\n 121.0,\n 151.0,\n 191.0,\n 271.0,\n 321.0,\n 360.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Secondary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly secondaryRotations: number[] = [\n 45.0,\n 95.0,\n 45.0,\n 20.0,\n 45.0,\n 90.0,\n 45.0,\n 45.0,\n 45.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Tertiary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly tertiaryRotations: number[] = [\n 120.0,\n 120.0,\n 20.0,\n 45.0,\n 20.0,\n 15.0,\n 20.0,\n 120.0,\n 120.0,\n ];\n\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.EXPRESSIVE,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(\n math.sanitizeDegreesDouble(sourceColorHct.hue + 240.0), 40.0),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeExpressive.hues,\n SchemeExpressive.secondaryRotations),\n 24.0),\n tertiaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeExpressive.hues,\n SchemeExpressive.tertiaryRotations),\n 32.0),\n neutralPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue + 15, 8.0),\n neutralVariantPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue + 15, 12.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DynamicScheme} from '../dynamiccolor/dynamic_scheme.js';\nimport {Variant} from '../dynamiccolor/variant.js';\nimport {Hct} from '../hct/hct.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\n\n/**\n * A Dynamic Color theme that maxes out colorfulness at each position in the\n * Primary Tonal Palette.\n */\nexport class SchemeVibrant extends DynamicScheme {\n /**\n * Hues (in degrees) used at breakpoints such that designers can specify a\n * hue rotation that occurs at a given break point.\n */\n private static readonly hues = [\n 0.0,\n 41.0,\n 61.0,\n 101.0,\n 131.0,\n 181.0,\n 251.0,\n 301.0,\n 360.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Secondary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly secondaryRotations = [\n 18.0,\n 15.0,\n 10.0,\n 12.0,\n 15.0,\n 18.0,\n 15.0,\n 12.0,\n 12.0,\n ];\n\n /**\n * Hue rotations (in degrees) of the Tertiary [TonalPalette],\n * corresponding to the breakpoints in [hues].\n */\n private static readonly tertiaryRotations = [\n 35.0,\n 30.0,\n 20.0,\n 25.0,\n 30.0,\n 35.0,\n 30.0,\n 25.0,\n 25.0,\n ];\n\n constructor(sourceColorHct: Hct, isDark: boolean, contrastLevel: number) {\n super({\n sourceColorArgb: sourceColorHct.toInt(),\n variant: Variant.VIBRANT,\n contrastLevel,\n isDark,\n primaryPalette: TonalPalette.fromHueAndChroma(sourceColorHct.hue, 200.0),\n secondaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeVibrant.hues,\n SchemeVibrant.secondaryRotations),\n 24.0),\n tertiaryPalette: TonalPalette.fromHueAndChroma(\n DynamicScheme.getRotatedHue(\n sourceColorHct, SchemeVibrant.hues,\n SchemeVibrant.tertiaryRotations),\n 32.0),\n neutralPalette: TonalPalette.fromHueAndChroma(sourceColorHct.hue, 10.0),\n neutralVariantPalette:\n TonalPalette.fromHueAndChroma(sourceColorHct.hue, 12.0),\n });\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Hct} from '../hct/hct.js';\nimport * as math from '../utils/math_utils.js';\n\n/**\n * Default options for ranking colors based on usage counts.\n * desired: is the max count of the colors returned.\n * fallbackColorARGB: Is the default color that should be used if no\n * other colors are suitable.\n * filter: controls if the resulting colors should be filtered to not include\n * hues that are not used often enough, and colors that are effectively\n * grayscale.\n */\ndeclare interface ScoreOptions {\n desired?: number;\n fallbackColorARGB?: number;\n filter?: boolean;\n}\n\nconst SCORE_OPTION_DEFAULTS = {\n desired: 4, // 4 colors matches what Android wallpaper picker.\n fallbackColorARGB: 0xff4285f4, // Google Blue.\n filter: true, // Avoid unsuitable colors.\n};\n\nfunction compare(a: {hct: Hct, score: number}, b: {hct: Hct, score: number}): number {\n if (a.score > b.score) {\n return -1;\n } else if (a.score < b.score) {\n return 1;\n }\n return 0;\n}\n\n/**\n * Given a large set of colors, remove colors that are unsuitable for a UI\n * theme, and rank the rest based on suitability.\n *\n * Enables use of a high cluster count for image quantization, thus ensuring\n * colors aren't muddied, while curating the high cluster count to a much\n * smaller number of appropriate choices.\n */\nexport class Score {\n private static readonly TARGET_CHROMA = 48.0; // A1 Chroma\n private static readonly WEIGHT_PROPORTION = 0.7;\n private static readonly WEIGHT_CHROMA_ABOVE = 0.3;\n private static readonly WEIGHT_CHROMA_BELOW = 0.1;\n private static readonly CUTOFF_CHROMA = 5.0;\n private static readonly CUTOFF_EXCITED_PROPORTION = 0.01;\n\n private constructor() {}\n\n /**\n * Given a map with keys of colors and values of how often the color appears,\n * rank the colors based on suitability for being used for a UI theme.\n *\n * @param colorsToPopulation map with keys of colors and values of how often\n * the color appears, usually from a source image.\n * @param {ScoreOptions} options optional parameters.\n * @return Colors sorted by suitability for a UI theme. The most suitable\n * color is the first item, the least suitable is the last. There will\n * always be at least one color returned. If all the input colors\n * were not suitable for a theme, a default fallback color will be\n * provided, Google Blue.\n */\n static score(\n colorsToPopulation: Map<number, number>, options?: ScoreOptions):\n number[] {\n const {desired, fallbackColorARGB, filter} = {...SCORE_OPTION_DEFAULTS, ...options};\n // Get the HCT color for each Argb value, while finding the per hue count and\n // total count.\n const colorsHct: Hct[] = [];\n const huePopulation = new Array<number>(360).fill(0);\n let populationSum = 0;\n for (const [argb, population] of colorsToPopulation.entries()) {\n const hct = Hct.fromInt(argb);\n colorsHct.push(hct);\n const hue = Math.floor(hct.hue);\n huePopulation[hue] += population;\n populationSum += population;\n }\n\n // Hues with more usage in neighboring 30 degree slice get a larger number.\n const hueExcitedProportions = new Array<number>(360).fill(0.0);\n for (let hue = 0; hue < 360; hue++) {\n const proportion = huePopulation[hue] / populationSum;\n for (let i = hue - 14; i < hue + 16; i++) {\n const neighborHue = math.sanitizeDegreesInt(i);\n hueExcitedProportions[neighborHue] += proportion;\n }\n }\n\n // Scores each HCT color based on usage and chroma, while optionally\n // filtering out values that do not have enough chroma or usage.\n const scoredHct = new Array<{hct: Hct, score: number}>();\n for (const hct of colorsHct) {\n const hue = math.sanitizeDegreesInt(Math.round(hct.hue));\n const proportion = hueExcitedProportions[hue];\n if (filter && (hct.chroma < Score.CUTOFF_CHROMA || proportion <= Score.CUTOFF_EXCITED_PROPORTION)) {\n continue;\n }\n\n const proportionScore = proportion * 100.0 * Score.WEIGHT_PROPORTION;\n const chromaWeight = hct.chroma < Score.TARGET_CHROMA ? Score.WEIGHT_CHROMA_BELOW : Score.WEIGHT_CHROMA_ABOVE;\n const chromaScore = (hct.chroma - Score.TARGET_CHROMA) * chromaWeight;\n const score = proportionScore + chromaScore;\n scoredHct.push({hct, score});\n }\n // Sorted so that colors with higher scores come first.\n scoredHct.sort(compare);\n\n // Iterates through potential hue differences in degrees in order to select\n // the colors with the largest distribution of hues possible. Starting at\n // 90 degrees(maximum difference for 4 colors) then decreasing down to a\n // 15 degree minimum.\n const chosenColors: Hct[] = [];\n for (let differenceDegrees = 90; differenceDegrees >= 15; differenceDegrees--) {\n chosenColors.length = 0;\n for (const {hct} of scoredHct) {\n const duplicateHue = chosenColors.find(chosenHct => {\n return math.differenceDegrees(hct.hue, chosenHct.hue) < differenceDegrees;\n });\n if (!duplicateHue) {\n chosenColors.push(hct);\n }\n if (chosenColors.length >= desired) break;\n }\n if (chosenColors.length >= desired) break;\n }\n const colors: number[] = [];\n if (chosenColors.length === 0) {\n colors.push(fallbackColorARGB);\n }\n for (const chosenHct of chosenColors) {\n colors.push(chosenHct.toInt());\n }\n return colors;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as colorUtils from './color_utils.js';\n\n/**\n * Utility methods for hexadecimal representations of colors.\n */\n\n/**\n * @param argb ARGB representation of a color.\n * @return Hex string representing color, ex. #ff0000 for red.\n */\nexport function hexFromArgb(argb: number) {\n const r = colorUtils.redFromArgb(argb);\n const g = colorUtils.greenFromArgb(argb);\n const b = colorUtils.blueFromArgb(argb);\n const outParts = [r.toString(16), g.toString(16), b.toString(16)];\n\n // Pad single-digit output values\n for (const [i, part] of outParts.entries()) {\n if (part.length === 1) {\n outParts[i] = '0' + part;\n }\n }\n\n return '#' + outParts.join('');\n}\n\n/**\n * @param hex String representing color as hex code. Accepts strings with or\n * without leading #, and string representing the color using 3, 6, or 8\n * hex characters.\n * @return ARGB representation of color.\n */\nexport function argbFromHex(hex: string) {\n hex = hex.replace('#', '');\n const isThree = hex.length === 3;\n const isSix = hex.length === 6;\n const isEight = hex.length === 8;\n if (!isThree && !isSix && !isEight) {\n throw new Error('unexpected hex ' + hex);\n }\n let r = 0;\n let g = 0;\n let b = 0;\n if (isThree) {\n r = parseIntHex(hex.slice(0, 1).repeat(2));\n g = parseIntHex(hex.slice(1, 2).repeat(2));\n b = parseIntHex(hex.slice(2, 3).repeat(2));\n } else if (isSix) {\n r = parseIntHex(hex.slice(0, 2));\n g = parseIntHex(hex.slice(2, 4));\n b = parseIntHex(hex.slice(4, 6));\n } else if (isEight) {\n r = parseIntHex(hex.slice(2, 4));\n g = parseIntHex(hex.slice(4, 6));\n b = parseIntHex(hex.slice(6, 8));\n }\n\n return (\n ((255 << 24) | ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff)) >>>\n 0);\n}\n\nfunction parseIntHex(value: string) {\n // tslint:disable-next-line:ban\n return parseInt(value, 16);\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Blend} from '../blend/blend.js';\nimport {CorePalette} from '../palettes/core_palette.js';\nimport {TonalPalette} from '../palettes/tonal_palette.js';\nimport {Scheme} from '../scheme/scheme.js';\n\nimport {sourceColorFromImage} from './image_utils.js';\nimport {hexFromArgb} from './string_utils.js';\n\n/**\n * Custom color used to pair with a theme\n */\nexport interface CustomColor {\n value: number;\n name: string;\n blend: boolean;\n}\n\n/**\n * Color group\n */\nexport interface ColorGroup {\n color: number;\n onColor: number;\n colorContainer: number;\n onColorContainer: number;\n}\n\n/**\n * Custom Color Group\n */\nexport interface CustomColorGroup {\n color: CustomColor;\n value: number;\n light: ColorGroup;\n dark: ColorGroup;\n}\n\n/**\n * Theme\n */\nexport interface Theme {\n source: number;\n schemes: {light: Scheme; dark: Scheme;};\n palettes: {\n primary: TonalPalette; secondary: TonalPalette; tertiary: TonalPalette;\n neutral: TonalPalette;\n neutralVariant: TonalPalette;\n error: TonalPalette;\n };\n customColors: CustomColorGroup[];\n}\n\n/**\n * Generate a theme from a source color\n *\n * @param source Source color\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport function themeFromSourceColor(\n source: number, customColors: CustomColor[] = []): Theme {\n const palette = CorePalette.of(source);\n return {\n source,\n schemes: {\n light: Scheme.light(source),\n dark: Scheme.dark(source),\n },\n palettes: {\n primary: palette.a1,\n secondary: palette.a2,\n tertiary: palette.a3,\n neutral: palette.n1,\n neutralVariant: palette.n2,\n error: palette.error,\n },\n customColors: customColors.map((c) => customColor(source, c)),\n };\n}\n\n/**\n * Generate a theme from an image source\n *\n * @param image Image element\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport async function themeFromImage(\n image: HTMLImageElement, customColors: CustomColor[] = []) {\n const source = await sourceColorFromImage(image);\n return themeFromSourceColor(source, customColors);\n}\n\n/**\n * Generate custom color group from source and target color\n *\n * @param source Source color\n * @param color Custom color\n * @return Custom color group\n *\n * @link https://m3.material.io/styles/color/the-color-system/color-roles\n */\nexport function customColor(\n source: number, color: CustomColor): CustomColorGroup {\n let value = color.value;\n const from = value;\n const to = source;\n if (color.blend) {\n value = Blend.harmonize(from, to);\n }\n const palette = CorePalette.of(value);\n const tones = palette.a1;\n return {\n color,\n value,\n light: {\n color: tones.tone(40),\n onColor: tones.tone(100),\n colorContainer: tones.tone(90),\n onColorContainer: tones.tone(10),\n },\n dark: {\n color: tones.tone(80),\n onColor: tones.tone(20),\n colorContainer: tones.tone(30),\n onColorContainer: tones.tone(90),\n },\n };\n}\n\n/**\n * Apply a theme to an element\n *\n * @param theme Theme object\n * @param options Options\n */\nexport function applyTheme(theme: Theme, options?: {\n dark?: boolean,\n target?: HTMLElement,\n brightnessSuffix?: boolean,\n paletteTones?: number[],\n}) {\n const target = options?.target || document.body;\n const isDark = options?.dark ?? false;\n const scheme = isDark ? theme.schemes.dark : theme.schemes.light;\n setSchemeProperties(target, scheme);\n if (options?.brightnessSuffix) {\n setSchemeProperties(target, theme.schemes.dark, '-dark');\n setSchemeProperties(target, theme.schemes.light, '-light');\n }\n if (options?.paletteTones) {\n const tones = options?.paletteTones ?? [];\n for (const [key, palette] of Object.entries(theme.palettes)) {\n const paletteKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n for (const tone of tones) {\n const token = `--md-ref-palette-${paletteKey}-${paletteKey}${tone}`;\n const color = hexFromArgb(palette.tone(tone));\n target.style.setProperty(token, color);\n }\n }\n }\n}\n\nfunction setSchemeProperties(\n target: HTMLElement,\n scheme: Scheme,\n suffix: string = '',\n) {\n for (const [key, value] of Object.entries(scheme.toJSON())) {\n const token = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const color = hexFromArgb(value);\n target.style.setProperty(`--md-sys-color-${token}${suffix}`, color);\n }\n}", "const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n", "const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n", "import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n", "import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n", "/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n", "import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n", "import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n", "import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n", "import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n", "import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n", "import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n", "const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n", "const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n", "const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n", "import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n", "const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n", "import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n", "/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n", "/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n", "/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n", "import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n", "const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n", "export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n", "/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n", "import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n", "import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1\u201316. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\t\u0394E_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n", "import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n", "/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n", "/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2\u00B0 \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n", "import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n", "import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n", "export const kE = 1;\nexport const kCH = 1;\nexport const \u03B8 = (26 / 180) * Math.PI;\nexport const cos\u03B8 = Math.cos(\u03B8);\nexport const sin\u03B8 = Math.sin(\u03B8);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - \u03B8);\n\tlet f = G * Math.sin((h / 180) * Math.PI - \u03B8);\n\tres.a = e * cos\u03B8 - (f / 0.83) * sin\u03B8;\n\tres.b = e * sin\u03B8 + (f / 0.83) * cos\u03B8;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cos\u03B8 + b * sin\u03B8;\n\tlet f = 0.83 * (b * cos\u03B8 - a * sin\u03B8);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + \u03B8) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n", "import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n", "import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n", "import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n", "/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n", "import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n", "import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\tRelative XYZ has Y=1 for media white,\n\tBT.2048 says media white Y=203 (at PQ 58).\n\tSee: https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2408-3-2019-PDF-E.pdf\n*/\nexport const YW = 203;\n", "/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n ICtCp is drafted to be supported in CSS within\n [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n", "/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n", "import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n", "/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n", "const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n", "import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n", "/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n", "import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n", "import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n", "import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n", "import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t}\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n", "import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n", "const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n", "import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n", "/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n", "/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.cbrt(\n\t\t0.412221469470763 * r + 0.5363325372617348 * g + 0.0514459932675022 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034958178252 * r + 0.6806995506452344 * g + 0.1073969535369406 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.0883024591900564 * r + 0.2817188391361215 * g + 0.6299787016738222 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl:\n\t\t\t0.210454268309314 * L +\n\t\t\t0.7936177747023054 * M -\n\t\t\t0.0040720430116193 * S,\n\t\ta:\n\t\t\t1.9779985324311684 * L -\n\t\t\t2.4285922420485799 * M +\n\t\t\t0.450593709617411 * S,\n\t\tb:\n\t\t\t0.0259040424655478 * L +\n\t\t\t0.7827717124575296 * M -\n\t\t\t0.8086757549230774 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n", "const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.pow(l + 0.3963377773761749 * a + 0.2158037573099136 * b, 3);\n\tlet M = Math.pow(l - 0.1055613458156586 * a - 0.0638541728258133 * b, 3);\n\tlet S = Math.pow(l - 0.0894841775298119 * a - 1.2914855480194092 * b, 3);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t4.0767416360759574 * L -\n\t\t\t3.3077115392580616 * M +\n\t\t\t0.2309699031821044 * S,\n\t\tg:\n\t\t\t-1.2684379732850317 * L +\n\t\t\t2.6097573492876887 * M -\n\t\t\t0.3413193760026573 * S,\n\t\tb:\n\t\t\t-0.0041960761386756 * L -\n\t\t\t0.7034186179359362 * M +\n\t\t\t1.7076146940746117 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n", "/*\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n", "import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Bj\u00F6rn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n", "import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n", "/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n", "import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n", "/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > \u03B2) {\n\t\treturn (Math.sign(v) || 1) * (\u03B1 * Math.pow(abs, 0.45) - (\u03B1 - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n", "/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < \u03B2 * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + \u03B1 - 1) / \u03B1, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n", "export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n", "/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n", "/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n", "const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n", "import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "// From: https://github.com/d3/d3-format/issues/32\n\nconst r = (value, precision) =>\n\tMath.round(value * (precision = Math.pow(10, precision))) / precision;\n\nconst round =\n\t(precision = 4) =>\n\tvalue =>\n\t\ttypeof value === 'number' ? r(value, precision) : value;\n\nexport default round;\n", "import converter from './converter.js';\nimport round from './round.js';\nimport prepare from './_prepare.js';\nimport { getMode } from './modes.js';\n\nlet twoDecimals = round(2);\n\nconst clamp = value => Math.max(0, Math.min(1, value || 0));\nconst fixup = value => Math.round(clamp(value) * 255);\n\nconst rgb = converter('rgb');\nconst hsl = converter('hsl');\n\nexport const serializeHex = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\treturn '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\n};\n\nexport const serializeHex8 = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet a = fixup(color.alpha !== undefined ? color.alpha : 1);\n\treturn serializeHex(color) + ((1 << 8) | a).toString(16).slice(1);\n};\n\nexport const serializeRgb = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `rgba(${r}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const serializeHsl = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst h = twoDecimals(color.h || 0);\n\tconst s = twoDecimals(clamp(color.s) * 100) + '%';\n\tconst l = twoDecimals(clamp(color.l) * 100) + '%';\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `hsl(${h}, ${s}, ${l})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const formatCss = c => {\n\tconst color = prepare(c);\n\tif (!color) {\n\t\treturn undefined;\n\t}\n\tconst def = getMode(color.mode);\n\tif (!def.serialize || typeof def.serialize === 'string') {\n\t\tlet res = `color(${def.serialize || `--${color.mode}`} `;\n\t\tdef.channels.forEach((ch, i) => {\n\t\t\tif (ch !== 'alpha') {\n\t\t\t\tres +=\n\t\t\t\t\t(i ? ' ' : '') +\n\t\t\t\t\t(color[ch] !== undefined ? color[ch] : 'none');\n\t\t\t}\n\t\t});\n\t\tif (color.alpha !== undefined && color.alpha < 1) {\n\t\t\tres += ` / ${color.alpha}`;\n\t\t}\n\t\treturn res + ')';\n\t}\n\tif (typeof def.serialize === 'function') {\n\t\treturn def.serialize(color);\n\t}\n\treturn undefined;\n};\n\nexport const formatHex = c => serializeHex(rgb(c));\nexport const formatHex8 = c => serializeHex8(rgb(c));\nexport const formatRgb = c => serializeRgb(rgb(c));\nexport const formatHsl = c => serializeHsl(hsl(c));\n", "// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n", "import {\n argbFromHex,\n themeFromSourceColor,\n hexFromArgb,\n MaterialDynamicColors,\n SchemeContent,\n Hct,\n} from \"@material/material-color-utilities\";\nimport { converter, formatCss } from \"culori\";\n\nlet oklch = converter(\"oklch\");\n\nconst materialColors = {\n \"surface-container-highest\": MaterialDynamicColors.surfaceContainerHighest,\n \"surface-container-high\": MaterialDynamicColors.surfaceContainerHigh,\n \"surface-dim\": MaterialDynamicColors.surfaceDim,\n \"surface-bright\": MaterialDynamicColors.surfaceBright,\n \"surface-container-lowest\": MaterialDynamicColors.surfaceContainerLowest,\n \"surface-container-low\": MaterialDynamicColors.surfaceContainerLow,\n};\n\n/**\n * Converts a Material color scheme object into a map of CSS custom property\n * names to oklch color values.\n *\n * Each camelCase key is converted to kebab-case and prefixed with\n * `--md-sys-color-`. An optional suffix can be appended to the variable name.\n *\n * @param {Record<string, number>} scheme - Map of token names to ARGB integers.\n * @param {string} [suffix=\"\"] - Optional suffix appended to every variable name.\n * @returns {Record<string, string>} Map of CSS variable names to oklch strings.\n *\n * @example\n * const vars = setSchemeProperties({ primary: 0xff1d5d78 });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\" }\n */\nexport function setSchemeProperties(scheme, suffix = \"\") {\n let result = {};\n for (const [key, value] of Object.entries(scheme)) {\n const token = key.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n const color = hexFromArgb(value);\n const converted = oklch(color);\n const name = formatCss(converted);\n const variableName = `--md-sys-color-${token}${suffix}`;\n result[variableName] = name;\n }\n\n return result;\n}\n\n/**\n * Generates a full set of Material Design 3 color tokens for a given source\n * color and color scheme.\n *\n * Tokens cover the standard MD3 scheme palette plus additional surface\n * container roles provided by {@link MaterialDynamicColors}. All color values\n * are expressed as oklch CSS strings so they can be used directly in\n * `var(--md-sys-color-*)` declarations.\n *\n * @param {{ scheme?: \"light\" | \"dark\", sourceColor?: string }} [config]\n * @param {string} [config.sourceColor=\"#1D5D78\"] - Seed color as a hex string (e.g. `\"#6750A4\"`).\n * @param {\"light\" | \"dark\"} [config.scheme=\"light\"] - Color scheme variant.\n * @returns {Record<string, string>} Map of CSS variable names to oklch color strings.\n *\n * @example\n * const tokens = generateTokens({ sourceColor: \"#6750A4\", scheme: \"dark\" });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\", \u2026 }\n */\nexport function generateTokens(config = { scheme: \"light\", sourceColor: \"#1D5D78\" }) {\n const theme = themeFromSourceColor(argbFromHex(config.sourceColor), []);\n\n const scheme = new SchemeContent(\n Hct.fromInt(argbFromHex(config.sourceColor)),\n config.scheme === \"dark\",\n 0\n );\n let palette = {};\n for (const [key, value] of Object.entries(materialColors)) {\n palette[key] = value.getArgb(scheme);\n }\n const currentTheme = theme.schemes[config.scheme].toJSON();\n const tokens = setSchemeProperties({ ...currentTheme, ...palette });\n\n return tokens;\n}\n", "import * as tokensUtils from \"./tokens.mjs\";\n\n/**\n * Generates Material Design 3 color tokens from a source color and injects\n * them as CSS custom properties on `:root` (`document.documentElement`).\n *\n * @param {{ sourceColor: string, scheme?: \"light\" | \"dark\" }} [options]\n * @param {string} options.sourceColor - Seed color as a hex string (e.g. `\"#6750A4\"`).\n * @param {\"light\" | \"dark\"} [options.scheme=\"light\"] - Color scheme variant.\n * @returns {void}\n *\n * @example\n * import { generateTheme } from \"@symblight/md-colors/client\";\n * generateTheme({ sourceColor: \"#6750A4\", scheme: \"dark\" });\n *\n */\nexport function generateTheme({ sourceColor, scheme = \"light\" } = {}) {\n const tokens = tokensUtils.generateTokens({ sourceColor, scheme });\n\n const root = document.documentElement;\n for (const [variable, value] of Object.entries(tokens)) {\n root.style.setProperty(variable, value);\n }\n}\n"],
|
|
5
|
+
"mappings": ";AA4BM,SAAU,OAAOA,MAAW;AAChC,MAAIA,OAAM,GAAG;AACX,WAAO;aACEA,SAAQ,GAAG;AACpB,WAAO;SACF;AACL,WAAO;;AAEX;AAOM,SAAU,KAAK,OAAe,MAAc,QAAc;AAC9D,UAAQ,IAAM,UAAU,QAAQ,SAAS;AAC3C;AAQM,SAAU,SAAS,KAAa,KAAa,OAAa;AAC9D,MAAI,QAAQ,KAAK;AACf,WAAO;aACE,QAAQ,KAAK;AACtB,WAAO;;AAGT,SAAO;AACT;AAQM,SAAU,YAAY,KAAa,KAAa,OAAa;AACjE,MAAI,QAAQ,KAAK;AACf,WAAO;aACE,QAAQ,KAAK;AACtB,WAAO;;AAGT,SAAO;AACT;AAQM,SAAU,mBAAmB,SAAe;AAChD,YAAU,UAAU;AACpB,MAAI,UAAU,GAAG;AACf,cAAU,UAAU;;AAEtB,SAAO;AACT;AAQM,SAAU,sBAAsB,SAAe;AACnD,YAAU,UAAU;AACpB,MAAI,UAAU,GAAG;AACf,cAAU,UAAU;;AAEtB,SAAO;AACT;AAgBM,SAAU,kBAAkB,MAAc,IAAU;AACxD,QAAM,uBAAuB,sBAAsB,KAAK,IAAI;AAC5D,SAAO,wBAAwB,MAAQ,IAAM;AAC/C;AAKM,SAAU,kBAAkB,GAAW,GAAS;AACpD,SAAO,MAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,GAAK;AACjD;AAKM,SAAU,eAAe,KAAe,QAAkB;AAC9D,QAAM,IACF,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACxE,QAAM,IACF,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACxE,QAAMC,KACF,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACxE,SAAO,CAAC,GAAG,GAAGA,EAAC;AACjB;;;ACpHA,IAAM,cAAc;EAClB,CAAC,YAAY,YAAY,UAAU;EACnC,CAAC,QAAQ,QAAQ,MAAM;EACvB,CAAC,YAAY,YAAY,UAAU;;AAGrC,IAAM,cAAc;EAClB;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;;AAIJ,IAAM,kBAAkB,CAAC,QAAQ,KAAO,OAAO;AAKzC,SAAU,YAAY,KAAa,OAAe,MAAY;AAClE,UAAQ,OAAO,MAAM,MAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,OAAO,SAChE;AACN;AAKM,SAAU,eAAe,QAAgB;AAC7C,QAAMC,KAAI,aAAa,OAAO,CAAC,CAAC;AAChC,QAAM,IAAI,aAAa,OAAO,CAAC,CAAC;AAChC,QAAM,IAAI,aAAa,OAAO,CAAC,CAAC;AAChC,SAAO,YAAYA,IAAG,GAAG,CAAC;AAC5B;AAYM,SAAU,YAAY,MAAY;AACtC,SAAO,QAAQ,KAAK;AACtB;AAKM,SAAU,cAAc,MAAY;AACxC,SAAO,QAAQ,IAAI;AACrB;AAKM,SAAU,aAAa,MAAY;AACvC,SAAO,OAAO;AAChB;AAYM,SAAU,YAAY,GAAW,GAAW,GAAS;AACzD,QAAM,SAAS;AACf,QAAM,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAM,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAM,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAMC,KAAI,aAAa,OAAO;AAC9B,QAAM,IAAI,aAAa,OAAO;AAC9B,QAAM,IAAI,aAAa,OAAO;AAC9B,SAAO,YAAYA,IAAG,GAAG,CAAC;AAC5B;AAKM,SAAU,YAAY,MAAY;AACtC,QAAMA,KAAI,WAAW,YAAY,IAAI,CAAC;AACtC,QAAM,IAAI,WAAW,cAAc,IAAI,CAAC;AACxC,QAAM,IAAI,WAAW,aAAa,IAAI,CAAC;AACvC,SAAiB,eAAe,CAACA,IAAG,GAAG,CAAC,GAAG,WAAW;AACxD;AA2BM,SAAU,YAAY,MAAY;AACtC,QAAM,UAAU,WAAW,YAAY,IAAI,CAAC;AAC5C,QAAM,UAAU,WAAW,cAAc,IAAI,CAAC;AAC9C,QAAM,UAAU,WAAW,aAAa,IAAI,CAAC;AAC7C,QAAM,SAAS;AACf,QAAM,IACF,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAM,IACF,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAM,IACF,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC,IAAI;AACrE,QAAM,aAAa;AACnB,QAAM,cAAc,IAAI,WAAW,CAAC;AACpC,QAAM,cAAc,IAAI,WAAW,CAAC;AACpC,QAAM,cAAc,IAAI,WAAW,CAAC;AACpC,QAAM,KAAK,KAAK,WAAW;AAC3B,QAAM,KAAK,KAAK,WAAW;AAC3B,QAAM,KAAK,KAAK,WAAW;AAC3B,QAAM,IAAI,MAAQ,KAAK;AACvB,QAAM,IAAI,OAAS,KAAK;AACxB,QAAM,IAAI,OAAS,KAAK;AACxB,SAAO,CAAC,GAAG,GAAG,CAAC;AACjB;AASM,SAAU,cAAc,OAAa;AACzC,QAAM,IAAI,WAAW,KAAK;AAC1B,QAAM,YAAY,aAAa,CAAC;AAChC,SAAO,YAAY,WAAW,WAAW,SAAS;AACpD;AAQM,SAAU,cAAc,MAAY;AACxC,QAAM,IAAI,YAAY,IAAI,EAAE,CAAC;AAC7B,SAAO,MAAQ,KAAK,IAAI,GAAK,IAAI;AACnC;AAaM,SAAU,WAAW,OAAa;AACtC,SAAO,MAAQ,SAAS,QAAQ,MAAQ,GAAK;AAC/C;AAaM,SAAU,WAAW,GAAS;AAClC,SAAO,KAAK,IAAI,GAAK,IAAI,MAAQ;AACnC;AAUM,SAAU,WAAW,cAAoB;AAC7C,QAAM,aAAa,eAAe;AAClC,MAAI,cAAc,aAAa;AAC7B,WAAO,aAAa,QAAQ;SACvB;AACL,WAAO,KAAK,KAAK,aAAa,SAAS,OAAO,GAAG,IAAI;;AAEzD;AAUM,SAAU,aAAa,cAAoB;AAC/C,QAAM,aAAa,eAAe;AAClC,MAAIC,gBAAe;AACnB,MAAI,cAAc,UAAW;AAC3B,IAAAA,gBAAe,aAAa;SACvB;AACL,IAAAA,gBAAe,QAAQ,KAAK,IAAI,YAAY,IAAM,GAAG,IAAI;;AAE3D,SAAiB,SAAS,GAAG,KAAK,KAAK,MAAMA,gBAAe,GAAK,CAAC;AACpE;AAOM,SAAU,gBAAa;AAC3B,SAAO;AACT;AAmDA,SAAS,KAAK,GAAS;AACrB,QAAMC,KAAI,MAAQ;AAClB,QAAM,QAAQ,QAAU;AACxB,MAAI,IAAIA,IAAG;AACT,WAAO,KAAK,IAAI,GAAG,IAAM,CAAG;SACvB;AACL,YAAQ,QAAQ,IAAI,MAAM;;AAE9B;AAEA,SAAS,QAAQ,IAAU;AACzB,QAAMA,KAAI,MAAQ;AAClB,QAAM,QAAQ,QAAU;AACxB,QAAM,MAAM,KAAK,KAAK;AACtB,MAAI,MAAMA,IAAG;AACX,WAAO;SACF;AACL,YAAQ,MAAM,KAAK,MAAM;;AAE7B;;;AC1TM,IAAO,oBAAP,MAAO,mBAAiB;;;;;;;;;;;;;;;;;;;;;;;EA0B5B,OAAO,KACH,aAAmB,cAAa,GAChC,oBAAqB,MAAQ,KAAK,KAAY,WAAW,EAAI,IAAI,KACjE,kBAAkB,IAAM,WAAW,GACnC,wBAAwB,OAAK;AAC/B,UAAM,MAAM;AACZ,UAAM,KAAK,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI;AAC5D,UAAM,KAAK,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI;AAC7D,UAAM,KAAK,IAAI,CAAC,IAAI,WAAY,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI;AAC7D,UAAMC,KAAI,MAAM,WAAW;AAC3B,UAAMC,KAAID,MAAK,MAAW,KAAK,MAAM,OAAOA,KAAI,OAAO,EAAI,IACjC,KAAK,OAAO,OAAOA,KAAI,OAAO,EAAI;AAC5D,QAAI,IAAI,wBACJ,IACAA,MAAK,IAAO,IAAM,MAAO,KAAK,KAAK,CAAC,oBAAoB,MAAQ,EAAI;AACxE,QAAI,IAAI,IAAM,IAAM,IAAI,IAAM,IAAM;AACpC,UAAM,KAAKA;AACX,UAAM,OAAO;MACX,KAAK,MAAQ,MAAM,IAAM;MACzB,KAAK,MAAQ,MAAM,IAAM;MACzB,KAAK,MAAQ,MAAM,IAAM;;AAE3B,UAAME,KAAI,KAAO,IAAM,oBAAoB;AAC3C,UAAMC,MAAKD,KAAIA,KAAIA,KAAIA;AACvB,UAAM,MAAM,IAAMC;AAClB,UAAM,KAAKA,MAAK,oBACZ,MAAM,MAAM,MAAM,KAAK,KAAK,IAAM,iBAAiB;AACvD,UAAM,IAAU,WAAW,eAAe,IAAI,WAAW,CAAC;AAC1D,UAAM,IAAI,OAAO,KAAK,KAAK,CAAC;AAC5B,UAAM,MAAM,QAAQ,KAAK,IAAI,GAAG,GAAG;AACnC,UAAM,MAAM;AACZ,UAAM,cAAc;MAClB,KAAK,IAAK,KAAK,KAAK,CAAC,IAAI,KAAM,KAAO,IAAI;MAC1C,KAAK,IAAK,KAAK,KAAK,CAAC,IAAI,KAAM,KAAO,IAAI;MAC1C,KAAK,IAAK,KAAK,KAAK,CAAC,IAAI,KAAM,KAAO,IAAI;;AAE5C,UAAM,OAAO;MACV,MAAQ,YAAY,CAAC,KAAM,YAAY,CAAC,IAAI;MAC5C,MAAQ,YAAY,CAAC,KAAM,YAAY,CAAC,IAAI;MAC5C,MAAQ,YAAY,CAAC,KAAM,YAAY,CAAC,IAAI;;AAE/C,UAAM,MAAM,IAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK;AACxD,WAAO,IAAI,mBACP,GAAG,IAAI,KAAK,KAAKF,IAAG,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC;EAC7D;;;;;;;;EASA,YACW,GAAkB,IAAmB,KACrC,KAAoBA,IAAkB,IACtC,MAAuB,IAAmB,QAC1C,GAAS;AAHT,SAAA,IAAA;AAAkB,SAAA,KAAA;AAAmB,SAAA,MAAA;AACrC,SAAA,MAAA;AAAoB,SAAA,IAAAA;AAAkB,SAAA,KAAA;AACtC,SAAA,OAAA;AAAuB,SAAA,KAAA;AAAmB,SAAA,SAAA;AAC1C,SAAA,IAAA;EAAY;;AAjFhB,kBAAA,UAAU,kBAAkB,KAAI;;;ACInC,IAAO,QAAP,MAAO,OAAK;;;;;;;;;;;;;;;;;;;;;EAqBhB,YACaG,MAAsB,QAAyB,GAC/C,GAAoB,GAAoB,GACxC,OAAwB,OAAwB,OAAa;AAF7D,SAAA,MAAAA;AAAsB,SAAA,SAAA;AAAyB,SAAA,IAAA;AAC/C,SAAA,IAAA;AAAoB,SAAA,IAAA;AAAoB,SAAA,IAAA;AACxC,SAAA,QAAA;AAAwB,SAAA,QAAA;AAAwB,SAAA,QAAA;EAAgB;;;;;;EAO7E,SAAS,OAAY;AACnB,UAAM,KAAK,KAAK,QAAQ,MAAM;AAC9B,UAAM,KAAK,KAAK,QAAQ,MAAM;AAC9B,UAAM,KAAK,KAAK,QAAQ,MAAM;AAC9B,UAAM,UAAU,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACrD,UAAM,KAAK,OAAO,KAAK,IAAI,SAAS,IAAI;AACxC,WAAO;EACT;;;;;;EAOA,OAAO,QAAQ,MAAY;AACzB,WAAO,OAAM,2BAA2B,MAAM,kBAAkB,OAAO;EACzE;;;;;;;EAQA,OAAO,2BACH,MAAc,mBAAoC;AACpD,UAAM,OAAO,OAAO,aAAe;AACnC,UAAM,SAAS,OAAO,UAAe;AACrC,UAAM,OAAQ,OAAO;AACrB,UAAM,OAAa,WAAW,GAAG;AACjC,UAAM,SAAe,WAAW,KAAK;AACrC,UAAM,QAAc,WAAW,IAAI;AACnC,UAAM,IAAI,aAAa,OAAO,aAAa,SAAS,aAAa;AACjE,UAAM,IAAI,SAAS,OAAO,SAAS,SAAS,SAAS;AACrD,UAAM,IAAI,aAAa,OAAO,aAAa,SAAS,aAAa;AAEjE,UAAM,KAAK,WAAW,IAAI,WAAW,IAAI,WAAW;AACpD,UAAM,KAAK,YAAY,IAAI,WAAW,IAAI,WAAW;AACrD,UAAM,KAAK,WAAY,IAAI,WAAW,IAAI,WAAW;AAErD,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AACvC,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AACvC,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AAEvC,UAAM,MAAM,KAAK,IAAK,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAK,KAAO,IAAI;AACxE,UAAM,MAAM,KAAK,IAAK,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAK,KAAO,IAAI;AACxE,UAAM,MAAM,KAAK,IAAK,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAK,KAAO,IAAI;AAExE,UAAM,KAAW,OAAO,EAAE,IAAI,MAAQ,OAAQ,MAAM;AACpD,UAAM,KAAW,OAAO,EAAE,IAAI,MAAQ,OAAQ,MAAM;AACpD,UAAM,KAAW,OAAO,EAAE,IAAI,MAAQ,OAAQ,MAAM;AAEpD,UAAM,KAAK,KAAO,KAAK,MAAQ,KAAK,MAAM;AAC1C,UAAM,KAAK,KAAK,KAAK,IAAM,MAAM;AACjC,UAAM,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM;AAChD,UAAMC,OAAM,KAAO,KAAK,KAAO,KAAK,MAAM;AAC1C,UAAM,QAAQ,KAAK,MAAM,GAAG,CAAC;AAC7B,UAAM,cAAe,QAAQ,MAAS,KAAK;AAC3C,UAAMD,OAAM,cAAc,IAAI,cAAc,MACxC,eAAe,MAAW,cAAc,MACd;AAC9B,UAAM,aAAcA,OAAM,KAAK,KAAM;AAErC,UAAM,KAAKC,MAAK,kBAAkB;AAClC,UAAM,IAAI,MACN,KAAK,IACD,KAAK,kBAAkB,IACvB,kBAAkB,IAAI,kBAAkB,CAAC;AACjD,UAAM,IAAK,IAAM,kBAAkB,IAAK,KAAK,KAAK,IAAI,GAAK,KACtD,kBAAkB,KAAK,KAAO,kBAAkB;AACrD,UAAM,WAAWD,OAAM,QAAQA,OAAM,MAAMA;AAC3C,UAAM,OAAO,QAAQ,KAAK,IAAK,WAAW,KAAK,KAAM,MAAQ,CAAG,IAAI;AACpE,UAAM,KACD,MAAU,KAAQ,OAAO,kBAAkB,KAAK,kBAAkB;AACvE,UAAM,IAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAM,IAAI;AACjD,UAAM,QAAQ,KAAK,IAAI,GAAG,GAAG,IACzB,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC,GAAG,IAAI;AAC7D,UAAME,KAAI,QAAQ,KAAK,KAAK,IAAI,GAAK;AACrC,UAAM,IAAIA,KAAI,kBAAkB;AAChC,UAAM,IAAI,KACN,KAAK,KAAM,QAAQ,kBAAkB,KAAM,kBAAkB,KAAK,EAAI;AAC1E,UAAM,SAAU,IAAM,MAAQ,QAAS,KAAM,IAAM,OAAQ;AAC3D,UAAM,QAAS,IAAM,SAAU,KAAK,IAAI,IAAM,SAAS,CAAC;AACxD,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AACzC,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AAEzC,WAAO,IAAI,OAAMF,MAAKE,IAAG,GAAG,GAAG,GAAG,GAAG,OAAO,OAAO,KAAK;EAC1D;;;;;;EAOA,OAAO,QAAQ,GAAWA,IAAW,GAAS;AAC5C,WAAO,OAAM,2BAA2B,GAAGA,IAAG,GAAG,kBAAkB,OAAO;EAC5E;;;;;;;;EASA,OAAO,2BACH,GAAWA,IAAW,GACtB,mBAAoC;AACtC,UAAM,IAAK,IAAM,kBAAkB,IAAK,KAAK,KAAK,IAAI,GAAK,KACtD,kBAAkB,KAAK,KAAO,kBAAkB;AACrD,UAAM,IAAIA,KAAI,kBAAkB;AAChC,UAAM,QAAQA,KAAI,KAAK,KAAK,IAAI,GAAK;AACrC,UAAM,IAAI,KACN,KAAK,KAAM,QAAQ,kBAAkB,KAAM,kBAAkB,KAAK,EAAI;AAC1E,UAAM,aAAc,IAAI,KAAK,KAAM;AACnC,UAAM,SAAU,IAAM,MAAQ,QAAS,KAAM,IAAM,OAAQ;AAC3D,UAAM,QAAS,IAAM,SAAU,KAAK,IAAI,IAAM,SAAS,CAAC;AACxD,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AACzC,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AACzC,WAAO,IAAI,OAAM,GAAGA,IAAG,GAAG,GAAG,GAAG,GAAG,OAAO,OAAO,KAAK;EACxD;;;;;;;;EASA,OAAO,QAAQ,OAAe,OAAe,OAAa;AACxD,WAAO,OAAM,2BACT,OAAO,OAAO,OAAO,kBAAkB,OAAO;EACpD;;;;;;;;;;EAWA,OAAO,2BACH,OAAe,OAAe,OAC9B,mBAAoC;AACtC,UAAM,IAAI;AACV,UAAM,IAAI;AACV,UAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AACjC,UAAMC,MAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAO;AACzC,UAAMD,KAAIC,KAAI,kBAAkB;AAChC,QAAI,IAAI,KAAK,MAAM,GAAG,CAAC,KAAK,MAAQ,KAAK;AACzC,QAAI,IAAI,GAAK;AACX,WAAK;;AAEP,UAAM,IAAI,SAAS,KAAK,QAAQ,OAAO;AACvC,WAAO,OAAM,2BAA2B,GAAGD,IAAG,GAAG,iBAAiB;EACpE;;;;;;EAOA,QAAK;AACH,WAAO,KAAK,OAAO,kBAAkB,OAAO;EAC9C;;;;;;EAOA,OAAO,mBAAoC;AACzC,UAAM,QAAQ,KAAK,WAAW,KAAO,KAAK,MAAM,IAC5C,IACA,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI,GAAK;AAE1C,UAAM,IAAI,KAAK,IACX,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC,GAAG,IAAI,GACjE,IAAM,GAAG;AACb,UAAM,OAAQ,KAAK,MAAM,KAAK,KAAM;AAEpC,UAAM,OAAO,QAAQ,KAAK,IAAI,OAAO,CAAG,IAAI;AAC5C,UAAM,KAAK,kBAAkB,KACzB,KAAK,IACD,KAAK,IAAI,KAAO,IAAM,kBAAkB,IAAI,kBAAkB,CAAC;AACvE,UAAM,KACF,QAAQ,MAAU,MAAQ,kBAAkB,KAAK,kBAAkB;AACvE,UAAMD,MAAK,KAAK,kBAAkB;AAElC,UAAM,OAAO,KAAK,IAAI,IAAI;AAC1B,UAAM,OAAO,KAAK,IAAI,IAAI;AAE1B,UAAMG,SAAS,MAAQH,MAAK,SAAS,KAChC,KAAO,KAAK,KAAO,IAAI,OAAO,MAAQ,IAAI;AAC/C,UAAM,IAAIG,SAAQ;AAClB,UAAM,IAAIA,SAAQ;AAClB,UAAM,MAAM,MAAQH,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,UAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,UAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,OAAS,KAAK;AAEnD,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACxC,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACxC,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AAExC,UAAM,IAAI,aAAa,KAAK,aAAa,KAAK,aAAa;AAC3D,UAAM,IAAI,aAAa,KAAK,aAAa,KAAK,YAAa;AAC3D,UAAM,IAAI,aAAc,KAAK,aAAa,KAAK,aAAa;AAE5D,UAAM,OAAa,YAAY,GAAG,GAAG,CAAC;AACtC,WAAO;EACT;;;EAIA,OAAO,2BACH,GAAW,GAAW,GACtB,mBAAoC;AAGtC,UAAM,KAAK,WAAW,IAAI,WAAW,IAAI,WAAW;AACpD,UAAM,KAAK,YAAY,IAAI,WAAW,IAAI,WAAW;AACrD,UAAM,KAAK,WAAY,IAAI,WAAW,IAAI,WAAW;AAGrD,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AACvC,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AACvC,UAAM,KAAK,kBAAkB,KAAK,CAAC,IAAI;AAGvC,UAAM,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAI,KAAO,IAAI;AACtE,UAAM,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAI,KAAO,IAAI;AACtE,UAAM,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAK,IAAI,EAAE,IAAI,KAAO,IAAI;AACtE,UAAM,KAAU,OAAO,EAAE,IAAI,MAAQ,OAAO,MAAM;AAClD,UAAM,KAAU,OAAO,EAAE,IAAI,MAAQ,OAAO,MAAM;AAClD,UAAM,KAAU,OAAO,EAAE,IAAI,MAAQ,OAAO,MAAM;AAGlD,UAAM,KAAK,KAAO,KAAK,MAAQ,KAAK,MAAM;AAE1C,UAAM,KAAK,KAAK,KAAK,IAAM,MAAM;AAGjC,UAAM,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM;AAChD,UAAMA,OAAM,KAAO,KAAK,KAAO,KAAK,MAAM;AAG1C,UAAM,QAAQ,KAAK,MAAM,GAAG,CAAC;AAC7B,UAAM,cAAc,QAAQ,MAAQ,KAAK;AACzC,UAAMD,OAAM,cAAc,IAAI,cAAc,MACxC,eAAe,MAAW,cAAc,MACd;AAC9B,UAAM,aAAaA,OAAM,KAAK,KAAK;AAGnC,UAAM,KAAKC,MAAK,kBAAkB;AAGlC,UAAM,IAAI,MACN,KAAK,IACD,KAAK,kBAAkB,IACvB,kBAAkB,IAAI,kBAAkB,CAAC;AACjD,UAAM,IAAK,IAAM,kBAAkB,IAAK,KAAK,KAAK,IAAI,GAAK,KACtD,kBAAkB,KAAK,KAAQ,kBAAkB;AAEtD,UAAM,WAAYD,OAAM,QAASA,OAAM,MAAMA;AAC7C,UAAM,OACD,IAAM,KAAQ,KAAK,IAAI,WAAW,KAAK,KAAK,MAAQ,CAAG,IAAI;AAChE,UAAM,KACF,MAAU,KAAO,OAAO,kBAAkB,KAAK,kBAAkB;AACrE,UAAM,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI;AAC/C,UAAM,QAAQ,KAAK,IAAI,GAAG,GAAG,IACzB,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC,GAAG,IAAI;AAE7D,UAAM,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAK;AACrC,UAAMG,KAAI,IAAI,kBAAkB;AAChC,UAAM,IAAI,KACN,KAAK,KAAM,QAAQ,kBAAkB,KAAM,kBAAkB,KAAK,EAAI;AAG1E,UAAM,SAAS,IAAM,MAAQ,QAAS,KAAK,IAAM,OAAQ;AACzD,UAAM,QAAQ,KAAK,IAAI,IAAM,SAASA,EAAC,IAAI;AAC3C,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AACzC,UAAM,QAAQ,QAAQ,KAAK,IAAI,UAAU;AACzC,WAAO,IAAI,OAAMH,MAAK,GAAG,GAAG,GAAGG,IAAG,GAAG,OAAO,OAAO,KAAK;EAC1D;;EAGA,uBAAuB,mBAAoC;AACzD,UAAM,QAAS,KAAK,WAAW,KAAO,KAAK,MAAM,IAC7C,IACA,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI,GAAK;AAE1C,UAAM,IAAI,KAAK,IACX,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC,GAAG,IAAI,GACjE,IAAM,GAAG;AACb,UAAM,OAAO,KAAK,MAAM,KAAK,KAAK;AAElC,UAAM,OAAO,QAAQ,KAAK,IAAI,OAAO,CAAG,IAAI;AAC5C,UAAM,KAAK,kBAAkB,KACzB,KAAK,IACD,KAAK,IAAI,KAAO,IAAM,kBAAkB,IAAI,kBAAkB,CAAC;AACvE,UAAM,KACF,QAAQ,MAAU,MAAQ,kBAAkB,KAAK,kBAAkB;AAEvE,UAAMF,MAAM,KAAK,kBAAkB;AAEnC,UAAM,OAAO,KAAK,IAAI,IAAI;AAC1B,UAAM,OAAO,KAAK,IAAI,IAAI;AAE1B,UAAMG,SAAQ,MAAQH,MAAK,SAAS,KAC/B,KAAO,KAAK,KAAK,IAAI,OAAO,MAAQ,IAAI;AAC7C,UAAM,IAAIG,SAAQ;AAClB,UAAM,IAAIA,SAAQ;AAClB,UAAM,MAAM,MAAQH,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,UAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,UAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,OAAS,KAAK;AAEnD,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,SAAS,KAAK,IAAI,GAAI,QAAQ,KAAK,IAAI,EAAE,KAAM,MAAQ,KAAK,IAAI,EAAE,EAAE;AAC1E,UAAM,KAAU,OAAO,EAAE,KAAK,MAAQ,kBAAkB,MACpD,KAAK,IAAI,QAAQ,IAAM,IAAI;AAC/B,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACxC,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACxC,UAAM,KAAK,KAAK,kBAAkB,KAAK,CAAC;AAExC,UAAM,IAAI,aAAa,KAAK,aAAa,KAAK,aAAa;AAC3D,UAAM,IAAI,aAAa,KAAK,aAAa,KAAK,YAAa;AAC3D,UAAM,IAAI,aAAc,KAAK,aAAa,KAAK,aAAa;AAE5D,WAAO,CAAC,GAAG,GAAG,CAAC;EACjB;;;;AC9XI,IAAO,YAAP,MAAO,WAAS;;;;;;;;EAsIZ,OAAO,gBAAgB,OAAa;AAC1C,YAAQ,QAAQ,KAAK,KAAK,MAAM,KAAK,KAAK;EAC5C;;;;;;;;;;EAWQ,OAAO,iBAAiB,cAAoB;AAClD,UAAM,aAAa,eAAe;AAClC,QAAII,gBAAe;AACnB,QAAI,cAAc,UAAW;AAC3B,MAAAA,gBAAe,aAAa;WACvB;AACL,MAAAA,gBAAe,QAAQ,KAAK,IAAI,YAAY,IAAM,GAAG,IAAI;;AAE3D,WAAOA,gBAAe;EACxB;EAEQ,OAAO,oBAAoB,WAAiB;AAClD,UAAM,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI;AAC7C,WAAiB,OAAO,SAAS,IAAI,MAAQ,MAAM,KAAK;EAC1D;;;;;;;EAQQ,OAAO,MAAM,QAAgB;AACnC,UAAM,iBACQ,eAAe,QAAQ,WAAU,2BAA2B;AAC1E,UAAM,KAAK,WAAU,oBAAoB,eAAe,CAAC,CAAC;AAC1D,UAAM,KAAK,WAAU,oBAAoB,eAAe,CAAC,CAAC;AAC1D,UAAM,KAAK,WAAU,oBAAoB,eAAe,CAAC,CAAC;AAE1D,UAAM,KAAK,KAAO,KAAK,MAAQ,KAAK,MAAM;AAE1C,UAAM,KAAK,KAAK,KAAK,IAAM,MAAM;AACjC,WAAO,KAAK,MAAM,GAAG,CAAC;EACxB;EAEQ,OAAO,iBAAiB,GAAW,GAAWC,IAAS;AAC7D,UAAM,UAAU,WAAU,gBAAgB,IAAI,CAAC;AAC/C,UAAM,UAAU,WAAU,gBAAgBA,KAAI,CAAC;AAC/C,WAAO,UAAU;EACnB;;;;;;;;;EAUQ,OAAO,UAAU,QAAgB,KAAa,QAAc;AAElE,YAAQ,MAAM,WAAW,SAAS;EACpC;EAEQ,OAAO,UAAU,QAAkB,GAAW,QAAgB;AAEpE,WAAO;MACL,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK;MACtC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK;MACtC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK;;EAE1C;;;;;;;;;;;;EAaQ,OAAO,cACX,QACA,YACA,QACA,MAAY;AAEd,UAAM,IAAI,WAAU,UAAU,OAAO,IAAI,GAAG,YAAY,OAAO,IAAI,CAAC;AACpE,WAAO,WAAU,UAAU,QAAQ,GAAG,MAAM;EAC9C;EAEQ,OAAO,UAAU,GAAS;AAChC,WAAO,KAAO,KAAK,KAAK;EAC1B;;;;;;;;;;;EAYQ,OAAO,UAAU,GAAW,GAAS;AAC3C,UAAM,KAAK,WAAU,cAAc,CAAC;AACpC,UAAM,KAAK,WAAU,cAAc,CAAC;AACpC,UAAM,KAAK,WAAU,cAAc,CAAC;AACpC,UAAM,SAAS,IAAI,KAAK,IAAI,IAAM;AAClC,UAAM,SAAS,IAAI,MAAM,IAAI,IAAM;AACnC,QAAI,IAAI,GAAG;AACT,YAAM,IAAI;AACV,YAAM,IAAI;AACV,YAAMC,MAAK,IAAI,IAAI,KAAK,IAAI,MAAM;AAClC,UAAI,WAAU,UAAUA,EAAC,GAAG;AAC1B,eAAO,CAACA,IAAG,GAAG,CAAC;aACV;AACL,eAAO,CAAC,IAAM,IAAM,EAAI;;eAEjB,IAAI,GAAG;AAChB,YAAM,IAAI;AACV,YAAMA,KAAI;AACV,YAAM,KAAK,IAAIA,KAAI,KAAK,IAAI,MAAM;AAClC,UAAI,WAAU,UAAU,CAAC,GAAG;AAC1B,eAAO,CAACA,IAAG,GAAG,CAAC;aACV;AACL,eAAO,CAAC,IAAM,IAAM,EAAI;;WAErB;AACL,YAAMA,KAAI;AACV,YAAM,IAAI;AACV,YAAM,KAAK,IAAIA,KAAI,KAAK,IAAI,MAAM;AAClC,UAAI,WAAU,UAAU,CAAC,GAAG;AAC1B,eAAO,CAACA,IAAG,GAAG,CAAC;aACV;AACL,eAAO,CAAC,IAAM,IAAM,EAAI;;;EAG9B;;;;;;;;;;EAWQ,OAAO,gBAAgB,GAAW,WAAiB;AACzD,QAAI,OAAO,CAAC,IAAM,IAAM,EAAI;AAC5B,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,WAAW;AACf,QAAI,cAAc;AAClB,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,MAAM,WAAU,UAAU,GAAG,CAAC;AACpC,UAAI,IAAI,CAAC,IAAI,GAAG;AACd;;AAEF,YAAM,SAAS,WAAU,MAAM,GAAG;AAClC,UAAI,CAAC,aAAa;AAChB,eAAO;AACP,gBAAQ;AACR,kBAAU;AACV,mBAAW;AACX,sBAAc;AACd;;AAEF,UAAI,SAAS,WAAU,iBAAiB,SAAS,QAAQ,QAAQ,GAAG;AAClE,gBAAQ;AACR,YAAI,WAAU,iBAAiB,SAAS,WAAW,MAAM,GAAG;AAC1D,kBAAQ;AACR,qBAAW;eACN;AACL,iBAAO;AACP,oBAAU;;;;AAIhB,WAAO,CAAC,MAAM,KAAK;EACrB;EAEQ,OAAO,SAAS,GAAa,GAAW;AAC9C,WAAO;OACJ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;OACf,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;OACf,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;;EAEpB;EAEQ,OAAO,mBAAmB,GAAS;AACzC,WAAO,KAAK,MAAM,IAAI,GAAG;EAC3B;EAEQ,OAAO,mBAAmB,GAAS;AACzC,WAAO,KAAK,KAAK,IAAI,GAAG;EAC1B;;;;;;;;;EAUQ,OAAO,cAAc,GAAW,WAAiB;AACvD,UAAM,UAAU,WAAU,gBAAgB,GAAG,SAAS;AACtD,QAAI,OAAO,QAAQ,CAAC;AACpB,QAAI,UAAU,WAAU,MAAM,IAAI;AAClC,QAAI,QAAQ,QAAQ,CAAC;AACrB,aAAS,OAAO,GAAG,OAAO,GAAG,QAAQ;AACnC,UAAI,KAAK,IAAI,MAAM,MAAM,IAAI,GAAG;AAC9B,YAAI,SAAS;AACb,YAAI,SAAS;AACb,YAAI,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG;AAC5B,mBAAS,WAAU,mBACf,WAAU,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAC1C,mBAAS,WAAU,mBACf,WAAU,iBAAiB,MAAM,IAAI,CAAC,CAAC;eACtC;AACL,mBAAS,WAAU,mBACf,WAAU,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAC1C,mBAAS,WAAU,mBACf,WAAU,iBAAiB,MAAM,IAAI,CAAC,CAAC;;AAE7C,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI,KAAK,IAAI,SAAS,MAAM,KAAK,GAAG;AAClC;iBACK;AACL,kBAAM,SAAS,KAAK,OAAO,SAAS,UAAU,CAAG;AACjD,kBAAM,qBAAqB,WAAU,gBAAgB,MAAM;AAC3D,kBAAM,MACF,WAAU,cAAc,MAAM,oBAAoB,OAAO,IAAI;AACjE,kBAAM,SAAS,WAAU,MAAM,GAAG;AAClC,gBAAI,WAAU,iBAAiB,SAAS,WAAW,MAAM,GAAG;AAC1D,sBAAQ;AACR,uBAAS;mBACJ;AACL,qBAAO;AACP,wBAAU;AACV,uBAAS;;;;;;AAMnB,WAAO,WAAU,SAAS,MAAM,KAAK;EACvC;EAEQ,OAAO,2BAA2B,SAAe;AACvD,UAAM,aAAa,KAAK,IAAI,OAAO;AACnC,UAAM,OAAO,KAAK,IAAI,GAAG,QAAQ,cAAc,MAAQ,WAAW;AAClE,WAAiB,OAAO,OAAO,IAAI,KAAK,IAAI,MAAM,IAAM,IAAI;EAC9D;;;;;;;;;;EAWQ,OAAO,cAAc,YAAoB,QAAgB,GAAS;AAGxE,QAAI,IAAI,KAAK,KAAK,CAAC,IAAI;AAIvB,UAAM,oBAAoB,kBAAkB;AAC5C,UAAM,cACF,IAAI,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC,GAAG,IAAI;AACjE,UAAM,OAAO,QAAQ,KAAK,IAAI,aAAa,CAAG,IAAI;AAClD,UAAM,KACF,QAAQ,MAAU,MAAQ,kBAAkB,KAAK,kBAAkB;AACvE,UAAM,OAAO,KAAK,IAAI,UAAU;AAChC,UAAM,OAAO,KAAK,IAAI,UAAU;AAChC,aAAS,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB;AAIjE,YAAM,cAAc,IAAI;AACxB,YAAM,QACF,WAAW,KAAO,MAAM,IAAM,IAAM,SAAS,KAAK,KAAK,WAAW;AACtE,YAAM,IAAI,KAAK,IAAI,QAAQ,aAAa,IAAM,GAAG;AACjD,YAAM,KAAK,kBAAkB,KACzB,KAAK,IACD,aACA,IAAM,kBAAkB,IAAI,kBAAkB,CAAC;AAEvD,YAAMC,MAAK,KAAK,kBAAkB;AAClC,YAAMC,SAAQ,MAAQD,MAAK,SAAS,KAC/B,KAAO,KAAK,KAAK,IAAI,OAAO,MAAQ,IAAI;AAC7C,YAAM,IAAIC,SAAQ;AAClB,YAAM,IAAIA,SAAQ;AAClB,YAAM,MAAM,MAAQD,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,YAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,MAAQ,KAAK;AAClD,YAAM,MAAM,MAAQA,MAAK,MAAQ,IAAI,OAAS,KAAK;AACnD,YAAM,WAAW,WAAU,2BAA2B,EAAE;AACxD,YAAM,WAAW,WAAU,2BAA2B,EAAE;AACxD,YAAM,WAAW,WAAU,2BAA2B,EAAE;AACxD,YAAM,SAAmB,eACrB,CAAC,UAAU,UAAU,QAAQ,GAC7B,WAAU,2BAA2B;AAKzC,UAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG;AACnD,eAAO;;AAET,YAAM,KAAK,WAAU,cAAc,CAAC;AACpC,YAAM,KAAK,WAAU,cAAc,CAAC;AACpC,YAAM,KAAK,WAAU,cAAc,CAAC;AACpC,YAAM,MAAM,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;AAC3D,UAAI,OAAO,GAAG;AACZ,eAAO;;AAET,UAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,MAAO;AACrD,YAAI,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI,QAAQ;AAClE,iBAAO;;AAET,eAAkB,eAAe,MAAM;;AAIzC,UAAI,KAAK,MAAM,KAAK,KAAK,IAAI;;AAE/B,WAAO;EACT;;;;;;;;;;;;;EAcA,OAAO,WAAW,YAAoB,QAAgB,OAAa;AACjE,QAAI,SAAS,QAAU,QAAQ,QAAU,QAAQ,SAAS;AACxD,aAAkB,cAAc,KAAK;;AAEvC,iBAAuB,sBAAsB,UAAU;AACvD,UAAM,aAAa,aAAa,MAAM,KAAK;AAC3C,UAAM,IAAe,WAAW,KAAK;AACrC,UAAM,cAAc,WAAU,cAAc,YAAY,QAAQ,CAAC;AACjE,QAAI,gBAAgB,GAAG;AACrB,aAAO;;AAET,UAAM,SAAS,WAAU,cAAc,GAAG,UAAU;AACpD,WAAkB,eAAe,MAAM;EACzC;;;;;;;;;;;;;EAcA,OAAO,WAAW,YAAoB,QAAgB,OAAa;AACjE,WAAO,MAAM,QAAQ,WAAU,WAAW,YAAY,QAAQ,KAAK,CAAC;EACtE;;AArgBO,UAAA,8BAA8B;EACnC;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;;AAIG,UAAA,8BAA8B;EACnC;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;;AAIG,UAAA,gBAAgB,CAAC,QAAQ,QAAQ,MAAM;AAEvC,UAAA,kBAAkB;EACvB;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;EAC5C;EAAsB;EAAsB;;;;ACjH1C,IAAO,MAAP,MAAO,KAAG;EAcd,OAAO,KAAKE,MAAa,QAAgB,MAAY;AACnD,WAAO,IAAI,KAAI,UAAU,WAAWA,MAAK,QAAQ,IAAI,CAAC;EACxD;;;;;EAMA,OAAO,QAAQ,MAAY;AACzB,WAAO,IAAI,KAAI,IAAI;EACrB;EAEA,QAAK;AACH,WAAO,KAAK;EACd;;;;;EAMA,IAAI,MAAG;AACL,WAAO,KAAK;EACd;;;;;;EAOA,IAAI,IAAI,QAAc;AACpB,SAAK,iBACD,UAAU,WACN,QACA,KAAK,gBACL,KAAK,YAAY,CAChB;EAEX;EAEA,IAAI,SAAM;AACR,WAAO,KAAK;EACd;;;;;;EAOA,IAAI,OAAO,WAAiB;AAC1B,SAAK,iBACD,UAAU,WACN,KAAK,aACL,WACA,KAAK,YAAY,CAChB;EAEX;;EAGA,IAAI,OAAI;AACN,WAAO,KAAK;EACd;;;;;;EAOA,IAAI,KAAK,SAAe;AACtB,SAAK,iBACD,UAAU,WACN,KAAK,aACL,KAAK,gBACL,OAAO,CACN;EAEX;EAEA,YAA4B,MAAY;AAAZ,SAAA,OAAA;AAC1B,UAAM,MAAM,MAAM,QAAQ,IAAI;AAC9B,SAAK,cAAc,IAAI;AACvB,SAAK,iBAAiB,IAAI;AAC1B,SAAK,eAAqB,cAAc,IAAI;AAC5C,SAAK,OAAO;EACd;EAEQ,iBAAiB,MAAY;AACnC,UAAM,MAAM,MAAM,QAAQ,IAAI;AAC9B,SAAK,cAAc,IAAI;AACvB,SAAK,iBAAiB,IAAI;AAC1B,SAAK,eAAqB,cAAc,IAAI;AAC5C,SAAK,OAAO;EACd;;;;;;;;;;;;;;;EAgBA,oBAAoB,IAAqB;AAEvC,UAAM,MAAM,MAAM,QAAQ,KAAK,MAAK,CAAE;AACtC,UAAM,aAAa,IAAI,uBAAuB,EAAE;AAGhD,UAAM,aAAa,MAAM,2BACrB,WAAW,CAAC,GACZ,WAAW,CAAC,GACZ,WAAW,CAAC,GACZ,kBAAkB,KAAI,CAAE;AAM5B,UAAM,YAAY,KAAI,KAClB,WAAW,KACX,WAAW,QACL,WAAW,WAAW,CAAC,CAAC,CAAC;AAEnC,WAAO;EACT;;;;AC5JI,IAAO,QAAP,MAAO,OAAK;;;;;;;;;;;;EAYhB,OAAO,UAAU,aAAqB,aAAmB;AACvD,UAAM,UAAU,IAAI,QAAQ,WAAW;AACvC,UAAM,QAAQ,IAAI,QAAQ,WAAW;AACrC,UAAMC,qBACQ,kBAAkB,QAAQ,KAAK,MAAM,GAAG;AACtD,UAAM,kBAAkB,KAAK,IAAIA,qBAAoB,KAAK,EAAI;AAC9D,UAAM,YAAsB,sBACxB,QAAQ,MACR,kBAA4B,kBAAkB,QAAQ,KAAK,MAAM,GAAG,CAAC;AACzE,WAAO,IAAI,KAAK,WAAW,QAAQ,QAAQ,QAAQ,IAAI,EAAE,MAAK;EAChE;;;;;;;;;;;EAYA,OAAO,OAAO,MAAc,IAAY,QAAc;AACpD,UAAM,MAAM,OAAM,SAAS,MAAM,IAAI,MAAM;AAC3C,UAAM,SAAS,MAAM,QAAQ,GAAG;AAChC,UAAM,UAAU,MAAM,QAAQ,IAAI;AAClC,UAAM,UAAU,IAAI,KAChB,OAAO,KACP,QAAQ,QACG,cAAc,IAAI,CAAC;AAElC,WAAO,QAAQ,MAAK;EACtB;;;;;;;;;;EAWA,OAAO,SAAS,MAAc,IAAY,QAAc;AACtD,UAAM,UAAU,MAAM,QAAQ,IAAI;AAClC,UAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,UAAM,QAAQ,QAAQ;AACtB,UAAM,QAAQ,QAAQ;AACtB,UAAM,QAAQ,QAAQ;AACtB,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,MAAM;AAClB,UAAM,QAAQ,SAAS,MAAM,SAAS;AACtC,UAAM,QAAQ,SAAS,MAAM,SAAS;AACtC,UAAM,QAAQ,SAAS,MAAM,SAAS;AACtC,WAAO,MAAM,QAAQ,OAAO,OAAO,KAAK,EAAE,MAAK;EACjD;;;;AC/DI,IAAO,WAAP,MAAO,UAAQ;;;;;;;EAOnB,OAAO,aAAa,OAAe,OAAa;AAC9C,YAAa,YAAY,GAAK,KAAO,KAAK;AAC1C,YAAa,YAAY,GAAK,KAAO,KAAK;AAC1C,WAAO,UAAS,UAAgB,WAAW,KAAK,GAAS,WAAW,KAAK,CAAC;EAC5E;EAEA,OAAO,UAAU,IAAY,IAAU;AACrC,UAAM,UAAU,KAAK,KAAK,KAAK;AAC/B,UAAM,SAAU,YAAY,KAAM,KAAK;AACvC,YAAQ,UAAU,MAAQ,SAAS;EACrC;;;;;;;;;;;EAYA,OAAO,QAAQ,MAAc,OAAa;AACxC,QAAI,OAAO,KAAO,OAAO,KAAO;AAC9B,aAAO;;AAGT,UAAM,QAAc,WAAW,IAAI;AACnC,UAAM,SAAS,SAAS,QAAQ,KAAO;AACvC,UAAM,eAAe,UAAS,UAAU,QAAQ,KAAK;AACrD,UAAM,QAAQ,KAAK,IAAI,eAAe,KAAK;AAC3C,QAAI,eAAe,SAAS,QAAQ,MAAM;AACxC,aAAO;;AAKT,UAAM,cAAoB,WAAW,MAAM,IAAI;AAC/C,QAAI,cAAc,KAAK,cAAc,KAAK;AACxC,aAAO;;AAET,WAAO;EACT;;;;;;;;;;;EAYA,OAAO,OAAO,MAAc,OAAa;AACvC,QAAI,OAAO,KAAO,OAAO,KAAO;AAC9B,aAAO;;AAGT,UAAM,SAAe,WAAW,IAAI;AACpC,UAAM,SAAU,SAAS,KAAO,QAAS;AACzC,UAAM,eAAe,UAAS,UAAU,QAAQ,KAAK;AAErD,UAAM,QAAQ,KAAK,IAAI,eAAe,KAAK;AAC3C,QAAI,eAAe,SAAS,QAAQ,MAAM;AACxC,aAAO;;AAKT,UAAM,cAAoB,WAAW,KAAK,IAAI;AAC9C,QAAI,cAAc,KAAK,cAAc,KAAK;AACxC,aAAO;;AAET,WAAO;EACT;;;;;;;;;;;;;;;EAgBA,OAAO,cAAc,MAAc,OAAa;AAC9C,UAAM,cAAc,UAAS,QAAQ,MAAM,KAAK;AAChD,WAAQ,cAAc,IAAO,MAAQ;EACvC;;;;;;;;;;;;;;;EAgBA,OAAO,aAAa,MAAc,OAAa;AAC7C,UAAM,aAAa,UAAS,OAAO,MAAM,KAAK;AAC9C,WAAQ,aAAa,IAAO,IAAM;EACpC;;;;AC5HI,IAAO,kBAAP,MAAO,iBAAe;;;;;;;;;EAS1B,OAAO,WAAW,KAAQ;AACxB,UAAM,YACF,KAAK,MAAM,IAAI,GAAG,KAAK,MAAQ,KAAK,MAAM,IAAI,GAAG,KAAK;AAC1D,UAAM,eAAe,KAAK,MAAM,IAAI,MAAM,IAAI;AAC9C,UAAM,aAAa,KAAK,MAAM,IAAI,IAAI,IAAI;AAE1C,WAAO,aAAa,gBAAgB;EACtC;;;;;;;;EASA,OAAO,cAAc,KAAQ;AAC3B,QAAI,iBAAgB,WAAW,GAAG,GAAG;AACnC,aAAO,IAAI,KACP,IAAI,KACJ,IAAI,QACJ,EAAI;;AAIV,WAAO;EACT;;;;ACDI,IAAO,eAAP,MAAO,cAAY;;;;;;;EASvB,OAAO,YAAY,MAAwB;AACzC,WAAO,IAAI,cACP,KAAK,QAAQ,IACb,KAAK,SACL,KAAK,MACL,KAAK,gBAAgB,OACrB,KAAK,YACL,KAAK,kBACL,KAAK,eACL,KAAK,aAAa;EAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,YACa,MACA,SACA,MACA,cACA,YACA,kBACA,eACA,eAAwD;AAPxD,SAAA,OAAA;AACA,SAAA,UAAA;AACA,SAAA,OAAA;AACA,SAAA,eAAA;AACA,SAAA,aAAA;AACA,SAAA,mBAAA;AACA,SAAA,gBAAA;AACA,SAAA,gBAAA;AA7DI,SAAA,WAAW,oBAAI,IAAG;AA+DjC,QAAK,CAAC,cAAe,kBAAkB;AACrC,YAAM,IAAI,MACN,SAAS,IAAI,8DAC4B;;AAE/C,QAAK,CAAC,cAAe,eAAe;AAClC,YAAM,IAAI,MACN,SAAS,IAAI,2DAC4B;;AAE/C,QAAI,cAAc,CAAC,eAAe;AAChC,YAAM,IAAI,MACN,SAAS,IAAI,2DAC+B;;EAEpD;;;;;;;;EASA,QAAQ,QAAqB;AAC3B,WAAO,KAAK,OAAO,MAAM,EAAE,MAAK;EAClC;;;;;;;;;EAUA,OAAO,QAAqB;AAC1B,UAAM,eAAe,KAAK,SAAS,IAAI,MAAM;AAC7C,QAAI,gBAAgB,MAAM;AACxB,aAAO;;AAET,UAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,UAAM,SAAS,KAAK,QAAQ,MAAM,EAAE,OAAO,IAAI;AAC/C,QAAI,KAAK,SAAS,OAAO,GAAG;AAC1B,WAAK,SAAS,MAAK;;AAErB,SAAK,SAAS,IAAI,QAAQ,MAAM;AAChC,WAAO;EACT;;;;;;;;;EAUA,QAAQ,QAAqB;AAC3B,UAAM,qBAAqB,OAAO,gBAAgB;AAGlD,QAAI,KAAK,eAAe;AACtB,YAAM,gBAAgB,KAAK,cAAc,MAAM;AAC/C,YAAM,QAAQ,cAAc;AAC5B,YAAM,QAAQ,cAAc;AAC5B,YAAM,QAAQ,cAAc;AAC5B,YAAM,WAAW,cAAc;AAC/B,YAAM,eAAe,cAAc;AAEnC,YAAM,KAAK,KAAK,WAAY,MAAM;AAClC,YAAM,SAAS,GAAG,QAAQ,MAAM;AAEhC,YAAM,YACD,aAAa,YACZ,aAAa,aAAa,CAAC,OAAO,UAClC,aAAa,YAAY,OAAO;AACtC,YAAM,SAAS,YAAY,QAAQ;AACnC,YAAM,UAAU,YAAY,QAAQ;AACpC,YAAM,WAAW,KAAK,SAAS,OAAO;AACtC,YAAM,eAAe,OAAO,SAAS,IAAI;AAGzC,YAAM,YAAY,OAAO,cAAe,IAAI,OAAO,aAAa;AAChE,YAAM,YAAY,QAAQ,cAAe,IAAI,OAAO,aAAa;AAIjE,YAAM,eAAe,OAAO,KAAK,MAAM;AACvC,UAAI,QAAQ,SAAS,aAAa,QAAQ,YAAY,KAAK,YACvD,eACA,cAAa,eAAe,QAAQ,SAAS;AAEjD,YAAM,eAAe,QAAQ,KAAK,MAAM;AACxC,UAAI,QAAQ,SAAS,aAAa,QAAQ,YAAY,KAAK,YACvD,eACA,cAAa,eAAe,QAAQ,SAAS;AAEjD,UAAI,oBAAoB;AAGtB,gBAAQ,cAAa,eAAe,QAAQ,SAAS;AACrD,gBAAQ,cAAa,eAAe,QAAQ,SAAS;;AAGvD,WAAK,QAAQ,SAAS,gBAAgB,OAAO;aAEtC;AAEL,gBAAa,YAAY,GAAG,KAAK,QAAQ,QAAQ,YAAY;AAC7D,aAAK,QAAQ,SAAS,gBAAgB,OAAO;eAEtC;AAEL,kBAAa,YAAY,GAAG,KAAK,QAAQ,QAAQ,YAAY;;;AAKjE,UAAI,MAAM,SAAS,QAAQ,IAAI;AAG7B,YAAI,eAAe,GAAG;AACpB,kBAAQ;AACR,kBAAQ,KAAK,IAAI,OAAO,QAAQ,QAAQ,YAAY;eAC/C;AACL,kBAAQ;AACR,kBAAQ,KAAK,IAAI,OAAO,QAAQ,QAAQ,YAAY;;iBAE7C,MAAM,SAAS,QAAQ,IAAI;AACpC,YAAI,cAAc;AAGhB,cAAI,eAAe,GAAG;AACpB,oBAAQ;AACR,oBAAQ,KAAK,IAAI,OAAO,QAAQ,QAAQ,YAAY;iBAC/C;AACL,oBAAQ;AACR,oBAAQ,KAAK,IAAI,OAAO,QAAQ,QAAQ,YAAY;;eAEjD;AAEL,cAAI,eAAe,GAAG;AACpB,oBAAQ;iBACH;AACL,oBAAQ;;;;AAMd,aAAO,WAAW,QAAQ;WAGvB;AAEH,UAAI,SAAS,KAAK,KAAK,MAAM;AAE7B,UAAI,KAAK,cAAc,MAAM;AAC3B,eAAO;;AAGT,YAAM,SAAS,KAAK,WAAW,MAAM,EAAE,QAAQ,MAAM;AAErD,YAAM,eAAe,KAAK,cAAe,IAAI,OAAO,aAAa;AAEjE,UAAI,SAAS,aAAa,QAAQ,MAAM,KAAK,cAAc;aAEpD;AAEL,iBAAS,cAAa,eAAe,QAAQ,YAAY;;AAG3D,UAAI,oBAAoB;AACtB,iBAAS,cAAa,eAAe,QAAQ,YAAY;;AAG3D,UAAI,KAAK,gBAAgB,MAAM,UAAU,SAAS,IAAI;AAEpD,YAAI,SAAS,aAAa,IAAI,MAAM,KAAK,cAAc;AACrD,mBAAS;eACJ;AACL,mBAAS;;;AAIb,UAAI,KAAK,kBAAkB;AAGzB,cAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,YAAY,KAAK,gBAAgB;AAC1D,cAAM,CAAC,SAAS,OAAO,IACnB,CAAC,IAAI,MAAM,EAAE,QAAQ,MAAM,GAAG,IAAI,MAAM,EAAE,QAAQ,MAAM,CAAC;AAC7D,cAAM,CAAC,OAAO,KAAK,IACf,CAAC,KAAK,IAAI,SAAS,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,CAAC;AAE3D,YAAI,SAAS,aAAa,OAAO,MAAM,KAAK,gBACxC,SAAS,aAAa,OAAO,MAAM,KAAK,cAAc;AACxD,iBAAO;;AAKT,cAAM,cAAc,SAAS,QAAQ,OAAO,YAAY;AAIxD,cAAM,aAAa,SAAS,OAAO,OAAO,YAAY;AAGtD,cAAM,aAAa,CAAA;AACnB,YAAI,gBAAgB;AAAI,qBAAW,KAAK,WAAW;AACnD,YAAI,eAAe;AAAI,qBAAW,KAAK,UAAU;AAEjD,cAAM,eAAe,cAAa,2BAA2B,OAAO,KAChE,cAAa,2BAA2B,OAAO;AACnD,YAAI,cAAc;AAChB,iBAAQ,cAAc,IAAK,MAAM;;AAEnC,YAAI,WAAW,WAAW,GAAG;AAC3B,iBAAO,WAAW,CAAC;;AAErB,eAAQ,aAAa,IAAK,IAAI;;AAGhC,aAAO;;EAEX;;;;;;;;;;EAWA,OAAO,eAAe,QAAgB,OAAa;AACjD,UAAM,cAAc,SAAS,cAAc,QAAQ,KAAK;AACxD,UAAM,aAAa,SAAS,aAAa,QAAQ,KAAK;AACtD,UAAM,eAAe,SAAS,aAAa,aAAa,MAAM;AAC9D,UAAM,cAAc,SAAS,aAAa,YAAY,MAAM;AAC5D,UAAM,gBAAgB,cAAa,2BAA2B,MAAM;AAEpE,QAAI,eAAe;AAUjB,YAAM,uBAAuB,KAAK,IAAI,eAAe,WAAW,IAAI,OAChE,eAAe,SAAS,cAAc;AAC1C,aAAO,gBAAgB,SAAS,gBAAgB,eACxC,uBACJ,cACA;WACC;AACL,aAAO,eAAe,SAAS,eAAe,eAAe,aACA;;EAEjE;;;;;;;;;;;;EAaA,OAAO,2BAA2B,MAAY;AAC5C,WAAO,KAAK,MAAM,IAAI,IAAI;EAC5B;;;;;EAMA,OAAO,0BAA0B,MAAY;AAC3C,WAAO,KAAK,MAAM,IAAI,KAAK;EAC7B;;;;;EAMA,OAAO,sBAAsB,MAAY;AACvC,QAAI,cAAa,2BAA2B,IAAI,KAC5C,CAAC,cAAa,0BAA0B,IAAI,GAAG;AACjD,aAAO;;AAET,WAAO;EACT;;;;ACxZI,IAAO,eAAP,MAAO,cAAY;;;;;EAOvB,OAAO,QAAQ,MAAY;AACzB,UAAM,MAAM,IAAI,QAAQ,IAAI;AAC5B,WAAO,cAAa,QAAQ,GAAG;EACjC;;;;;EAMA,OAAO,QAAQ,KAAQ;AACrB,WAAO,IAAI,cAAa,IAAI,KAAK,IAAI,QAAQ,GAAG;EAClD;;;;;;EAOA,OAAO,iBAAiBC,MAAa,QAAc;AACjD,UAAM,WAAW,IAAI,SAASA,MAAK,MAAM,EAAE,OAAM;AACjD,WAAO,IAAI,cAAaA,MAAK,QAAQ,QAAQ;EAC/C;EAEA,YAA6BA,MAAsB,QAAyB,UAAa;AAA5D,SAAA,MAAAA;AAAsB,SAAA,SAAA;AAAyB,SAAA,WAAA;AA7B3D,SAAA,QAAQ,oBAAI,IAAG;EA6B4D;;;;;EAM5F,KAAK,MAAY;AACf,QAAI,OAAO,KAAK,MAAM,IAAI,IAAI;AAC9B,QAAI,SAAS,QAAW;AACtB,aAAO,IAAI,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI,EAAE,MAAK;AAClD,WAAK,MAAM,IAAI,MAAM,IAAI;;AAE3B,WAAO;EACT;;;;;EAMA,OAAO,MAAY;AACjB,WAAO,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC;EACpC;;AAMF,IAAM,WAAN,MAAc;EAKZ,YAAqBA,MAAsB,iBAAuB;AAA7C,SAAA,MAAAA;AAAsB,SAAA,kBAAA;AAH1B,SAAA,cAAc,oBAAI,IAAG;AACrB,SAAA,iBAAiB;EAEmC;;;;;;;;EASrE,SAAM;AAGJ,UAAM,YAAY;AAClB,UAAM,eAAe;AAErB,UAAM,UAAU;AAIhB,QAAI,YAAY;AAChB,QAAI,YAAY;AAChB,WAAO,YAAY,WAAW;AAC5B,YAAM,UAAU,KAAK,OAAO,YAAY,aAAa,CAAC;AACtD,YAAM,cACF,KAAK,UAAU,OAAO,IAAI,KAAK,UAAU,UAAU,YAAY;AACnE,YAAM,mBACF,KAAK,UAAU,OAAO,KAAK,KAAK,kBAAkB;AAEtD,UAAI,kBAAkB;AAGpB,YAAI,KAAK,IAAI,YAAY,SAAS,IAAI,KAAK,IAAI,YAAY,SAAS,GAAG;AACrE,sBAAY;eACP;AACL,cAAI,cAAc,SAAS;AACzB,mBAAO,IAAI,KAAK,KAAK,KAAK,KAAK,iBAAiB,SAAS;;AAE3D,sBAAY;;aAET;AAGL,YAAI,aAAa;AACf,sBAAY,UAAU;eACjB;AAEL,sBAAY;;;;AAKlB,WAAO,IAAI,KAAK,KAAK,KAAK,KAAK,iBAAiB,SAAS;EAC3D;;EAGQ,UAAU,MAAY;AAC5B,QAAI,KAAK,YAAY,IAAI,IAAI,GAAG;AAC9B,aAAO,KAAK,YAAY,IAAI,IAAI;;AAElC,UAAM,SAAS,IAAI,KAAK,KAAK,KAAK,KAAK,gBAAgB,IAAI,EAAE;AAC7D,SAAK,YAAY,IAAI,MAAM,MAAM;AACjC,WAAO;EACT;;;;ACzHI,IAAO,gBAAP,MAAoB;;;;;;;;;EASxB,YACa,KACA,QACA,QACA,MAAY;AAHZ,SAAA,MAAA;AACA,SAAA,SAAA;AACA,SAAA,SAAA;AACA,SAAA,OAAA;EACV;;;;;;;;EASH,IAAI,eAAqB;AACvB,QAAI,iBAAiB,IAAM;AACzB,aAAO,KAAK;eACH,gBAAgB,GAAK;AAC9B,aAAY,KAAK,KAAK,KAAK,KAAK,SAAS,gBAAiB,MAAO,CAAC;eACzD,gBAAgB,KAAK;AAC9B,aAAY,KAAK,KAAK,QAAQ,KAAK,SAAS,gBAAgB,KAAK,GAAG;eAC3D,gBAAgB,GAAK;AAC9B,aAAY,KAAK,KAAK,QAAQ,KAAK,OAAO,gBAAgB,OAAO,GAAG;WAC/D;AACL,aAAO,KAAK;;EAEhB;;;;AC7BI,IAAO,gBAAP,MAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAwBxB,YACa,OACA,OACA,OACA,UACA,cAAqB;AAJrB,SAAA,QAAA;AACA,SAAA,QAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AACA,SAAA,eAAA;EACV;;;;ACxCL,IAAY;CAAZ,SAAYC,UAAO;AACjB,EAAAA,SAAAA,SAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,UAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,aAAA,IAAA,CAAA,IAAA;AACF,GAVY,YAAA,UAAO,CAAA,EAAA;;;ACInB,SAAS,WAAW,QAAqB;AACvC,SAAO,OAAO,YAAY,QAAQ,YAC9B,OAAO,YAAY,QAAQ;AACjC;AAEA,SAAS,aAAa,QAAqB;AACzC,SAAO,OAAO,YAAY,QAAQ;AACpC;AAEA,SAAS,wBACLC,MAAa,QAAgB,MAC7B,kBAAyB;AAC3B,MAAI,SAAS;AAEb,MAAI,kBAAkB,IAAI,KAAKA,MAAK,QAAQ,IAAI;AAChD,MAAI,gBAAgB,SAAS,QAAQ;AACnC,QAAI,aAAa,gBAAgB;AACjC,WAAO,gBAAgB,SAAS,QAAQ;AACtC,gBAAU,mBAAmB,KAAO;AACpC,YAAM,oBAAoB,IAAI,KAAKA,MAAK,QAAQ,MAAM;AACtD,UAAI,aAAa,kBAAkB,QAAQ;AACzC;;AAEF,UAAI,KAAK,IAAI,kBAAkB,SAAS,MAAM,IAAI,KAAK;AACrD;;AAGF,YAAM,iBAAiB,KAAK,IAAI,kBAAkB,SAAS,MAAM;AACjE,YAAM,eAAe,KAAK,IAAI,gBAAgB,SAAS,MAAM;AAC7D,UAAI,iBAAiB,cAAc;AACjC,0BAAkB;;AAEpB,mBAAa,KAAK,IAAI,YAAY,kBAAkB,MAAM;;;AAI9D,SAAO;AACT;AAOM,IAAO,wBAAP,MAAO,uBAAqB;EAEhC,OAAO,eAAe,GAAgB;AACpC,WAAO,EAAE,SAAS,uBAAsB,gBACtB,uBAAsB;EAC1C;;AAJO,sBAAA,yBAAyB;AAMzB,sBAAA,yBAAyB,aAAa,YAAY;EACvD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,eAAe,SAAS;CACxC;AAEM,sBAAA,2BAA2B,aAAa,YAAY;EACzD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,iBAAiB,SAAS;CAC1C;AAEM,sBAAA,0BAA0B,aAAa,YAAY;EACxD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,gBAAgB,SAAS;CACzC;AAEM,sBAAA,yBAAyB,aAAa,YAAY;EACvD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,eAAe,SAAS;CACxC;AAEM,sBAAA,gCAAgC,aAAa,YAAY;EAC9D,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,sBAAsB,SAAS;CAC/C;AAEM,sBAAA,aAAa,aAAa,YAAY;EAC3C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI;EAC5B,cAAc;CACf;AAEM,sBAAA,eAAe,aAAa,YAAY;EAC7C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,GAAG,KAAK,CAAC;CAC9C;AAEM,sBAAA,UAAU,aAAa,YAAY;EACxC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI;EAC5B,cAAc;CACf;AAEM,sBAAA,aAAa,aAAa,YAAY;EAC3C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MACH,EAAE,SAAS,IAAI,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa;EACxE,cAAc;CACf;AAEM,sBAAA,gBAAgB,aAAa,YAAY;EAC9C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MACH,EAAE,SAAS,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IAAI;EACxE,cAAc;CACf;AAEM,sBAAA,yBAAyB,aAAa,YAAY;EACvD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MACH,EAAE,SAAS,IAAI,cAAc,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,IAAI;EACpE,cAAc;CACf;AAEM,sBAAA,sBAAsB,aAAa,YAAY;EACpD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SACX,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IACrD,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa;EACzD,cAAc;CACf;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SACX,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IACrD,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa;EACzD,cAAc;CACf;AAEM,sBAAA,uBAAuB,aAAa,YAAY;EACrD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SACX,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IACrD,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa;EACzD,cAAc;CACf;AAEM,sBAAA,0BAA0B,aAAa,YAAY;EACxD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SACX,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IACrD,IAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa;EACzD,cAAc;CACf;AAEM,sBAAA,YAAY,aAAa,YAAY;EAC1C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,cAAc;CACf;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;CAC9B;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,UAAU,aAAa,YAAY;EACxC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,KAAK,GAAG,KAAK,CAAC;CAChD;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;CAC9C;AAEM,sBAAA,SAAS,aAAa,YAAY;EACvC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM;CACd;AAEM,sBAAA,QAAQ,aAAa,YAAY;EACtC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM;CACd;AAEM,sBAAA,cAAc,aAAa,YAAY;EAC5C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,cAAc;CACf;AAEM,sBAAA,UAAU,aAAa,YAAY;EACxC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,MAAM;;AAE1B,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,kBAAkB,sBAAsB,SAC9D,IAAI,UAAU,KAAK;CACxB;AAEM,sBAAA,YAAY,aAAa,YAAY;EAC1C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,WAAW,CAAC,GAAG;AACjB,aAAO,EAAE,eAAe;;AAE1B,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,kBAAkB,sBAAsB,SAC9D,IAAI,UAAU,KAAK;CACxB;AAEM,sBAAA,qBAAqB,aAAa,YAAY;EACnD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,WAAW,CAAC,GAAG;AACjB,aAAO,aAAa,eAChB,sBAAsB,iBAAiB,KAAK,CAAC,GAAG,GAAG;;AAEzD,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,IAAI;;AAExB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC;CAC9C;AAEM,sBAAA,YAAY,aAAa,YAAY;EAC1C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,oBACtB,sBAAsB,WAAW,IAAI,UAAU,KAAK;CACzD;AAEM,sBAAA,cAAc,aAAa,YAAY;EAC5C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;WAClB;AACL,aAAO,EAAE,SAAS,KAAK;;EAE3B;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,qBAAqB,aAAa,YAAY;EACnD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,UAAM,cAAc,EAAE,SAAS,KAAK;AACpC,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,QAAI,CAAC,WAAW,CAAC,GAAG;AAClB,aAAO;;AAET,WAAO,wBACH,EAAE,iBAAiB,KAAK,EAAE,iBAAiB,QAAQ,aACnD,EAAE,SAAS,QAAQ,IAAI;EAC7B;EACJ,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,oBACtB,sBAAsB,WAAW,IAAI,UAAU,KAAK;CACzD;AAEM,sBAAA,uBAAuB,aAAa,YAAY;EACrD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,QAAI,CAAC,WAAW,CAAC,GAAG;AAClB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,aAAa,eAChB,sBAAsB,mBAAmB,KAAK,CAAC,GAAG,GAAG;EAC3D;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,WAAW,aAAa,YAAY;EACzC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,mBAAmB,sBAAsB,UAC/D,IAAI,UAAU,KAAK;CACxB;AAEM,sBAAA,aAAa,aAAa,YAAY;EAC3C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,oBAAoB,aAAa,YAAY;EAClD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,QAAI,CAAC,WAAW,CAAC,GAAG;AAClB,aAAO,EAAE,SAAS,KAAK;;AAEzB,UAAM,cAAc,EAAE,gBAAgB,OAAO,EAAE,eAAe,IAAI;AAClE,WAAO,gBAAgB,cAAc,WAAW,EAAE;EACpD;EACJ,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,mBAAmB,sBAAsB,UAC/D,IAAI,UAAU,KAAK;CACxB;AAEM,sBAAA,sBAAsB,aAAa,YAAY;EACpD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,IAAI;;AAExB,QAAI,CAAC,WAAW,CAAC,GAAG;AAClB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,aAAa,eAChB,sBAAsB,kBAAkB,KAAK,CAAC,GAAG,GAAG;EAC1D;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,QAAQ,aAAa,YAAY;EACtC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,gBAAgB,sBAAsB,OAAO,IACnE,UAAU,KAAK;CACpB;AAEM,sBAAA,UAAU,aAAa,YAAY;EACxC,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;EAC7B,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,gBAAgB,sBAAsB,OAAO,IACnE,UAAU,KAAK;CACpB;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MACI,CAAC,MAAK;AACJ,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,EAAE,SAAS,KAAK;;AAEzB,WAAO,EAAE,SAAS,KAAK;EACzB;EACJ,YAAY,CAAC,MAAM,sBAAsB;EACzC,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,eAAe,aAAa,YAAY;EAC7C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,cACtB,sBAAsB,iBAAiB,IAAI,WAAW,IAAI;CAC/D;AAEM,sBAAA,kBAAkB,aAAa,YAAY;EAChD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,cACtB,sBAAsB,iBAAiB,IAAI,WAAW,IAAI;CAC/D;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,MAAQ;EACvC,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,wBAAwB,aAAa,YAAY;EACtD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,iBAAiB,aAAa,YAAY;EAC/C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,gBACtB,sBAAsB,mBAAmB,IAAI,WAAW,IAAI;CACjE;AAEM,sBAAA,oBAAoB,aAAa,YAAY;EAClD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,gBACtB,sBAAsB,mBAAmB,IAAI,WAAW,IAAI;CACjE;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM;EACb,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,0BAA0B,aAAa,YAAY;EACxD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;AAEM,sBAAA,gBAAgB,aAAa,YAAY;EAC9C,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,eACtB,sBAAsB,kBAAkB,IAAI,WAAW,IAAI;CAChE;AAEM,sBAAA,mBAAmB,aAAa,YAAY;EACjD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,cAAc;EACd,YAAY,CAAC,MAAM,sBAAsB,eAAe,CAAC;EACzD,eAAe,IAAI,cAAc,GAAG,GAAG,GAAG,GAAG;EAC7C,eAAe,CAAC,MAAM,IAAI,cACtB,sBAAsB,eACtB,sBAAsB,kBAAkB,IAAI,WAAW,IAAI;CAChE;AAEM,sBAAA,kBAAkB,aAAa,YAAY;EAChD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,MAAQ;EACvC,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,KAAK,GAAG,IAAI,EAAE;CAChD;AAEM,sBAAA,yBAAyB,aAAa,YAAY;EACvD,MAAM;EACN,SAAS,CAAC,MAAM,EAAE;EAClB,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,KAAO;EACtC,YAAY,CAAC,MAAM,sBAAsB;EACzC,kBAAkB,CAAC,MAAM,sBAAsB;EAC/C,eAAe,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE;CAC/C;;;ACvkBG,IAAO,gBAAP,MAAoB;EA6DxB,YAAY,MAA0B;AACpC,SAAK,kBAAkB,KAAK;AAC5B,SAAK,UAAU,KAAK;AACpB,SAAK,gBAAgB,KAAK;AAC1B,SAAK,SAAS,KAAK;AACnB,SAAK,iBAAiB,IAAI,QAAQ,KAAK,eAAe;AACtD,SAAK,iBAAiB,KAAK;AAC3B,SAAK,mBAAmB,KAAK;AAC7B,SAAK,kBAAkB,KAAK;AAC5B,SAAK,iBAAiB,KAAK;AAC3B,SAAK,wBAAwB,KAAK;AAClC,SAAK,eAAe,aAAa,iBAAiB,IAAM,EAAI;EAC9D;;;;;;;;;;;EAYA,OAAO,cAAc,aAAkB,MAAgB,WAAmB;AAExE,UAAM,YAAY,YAAY;AAC9B,QAAI,KAAK,WAAW,UAAU,QAAQ;AACpC,YAAM,IAAI,MAAM,+BAA+B,KAAK,MAAM,gBACtD,UAAU,MAAM,EAAE;;AAExB,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAY,sBAAsB,YAAY,MAAM,UAAU,CAAC,CAAC;;AAElE,UAAM,OAAO,KAAK;AAClB,aAAS,IAAI,GAAG,KAAK,OAAO,GAAG,KAAK;AAClC,YAAM,UAAU,KAAK,CAAC;AACtB,YAAM,UAAU,KAAK,IAAI,CAAC;AAC1B,UAAI,UAAU,aAAa,YAAY,SAAS;AAC9C,eAAY,sBAAsB,YAAY,UAAU,CAAC,CAAC;;;AAK9D,WAAO;EACT;EAGA,QAAQ,cAA0B;AAChC,WAAO,aAAa,QAAQ,IAAI;EAClC;EAEA,OAAO,cAA0B;AAC/B,WAAO,aAAa,OAAO,IAAI;EACjC;EAEA,IAAI,yBAAsB;AACxB,WAAO,KAAK,QAAQ,sBAAsB,sBAAsB;EAClE;EAEA,IAAI,2BAAwB;AAC1B,WAAO,KAAK,QAAQ,sBAAsB,wBAAwB;EACpE;EAEA,IAAI,0BAAuB;AACzB,WAAO,KAAK,QAAQ,sBAAsB,uBAAuB;EACnE;EAEA,IAAI,yBAAsB;AACxB,WAAO,KAAK,QAAQ,sBAAsB,sBAAsB;EAClE;EAEA,IAAI,gCAA6B;AAC/B,WAAO,KAAK,QAAQ,sBAAsB,6BAA6B;EACzE;EAEA,IAAI,aAAU;AACZ,WAAO,KAAK,QAAQ,sBAAsB,UAAU;EACtD;EAEA,IAAI,eAAY;AACd,WAAO,KAAK,QAAQ,sBAAsB,YAAY;EACxD;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,QAAQ,sBAAsB,OAAO;EACnD;EAEA,IAAI,aAAU;AACZ,WAAO,KAAK,QAAQ,sBAAsB,UAAU;EACtD;EAEA,IAAI,gBAAa;AACf,WAAO,KAAK,QAAQ,sBAAsB,aAAa;EACzD;EAEA,IAAI,yBAAsB;AACxB,WAAO,KAAK,QAAQ,sBAAsB,sBAAsB;EAClE;EAEA,IAAI,sBAAmB;AACrB,WAAO,KAAK,QAAQ,sBAAsB,mBAAmB;EAC/D;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,uBAAoB;AACtB,WAAO,KAAK,QAAQ,sBAAsB,oBAAoB;EAChE;EAEA,IAAI,0BAAuB;AACzB,WAAO,KAAK,QAAQ,sBAAsB,uBAAuB;EACnE;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,QAAQ,sBAAsB,SAAS;EACrD;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,QAAQ,sBAAsB,OAAO;EACnD;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,SAAM;AACR,WAAO,KAAK,QAAQ,sBAAsB,MAAM;EAClD;EAEA,IAAI,QAAK;AACP,WAAO,KAAK,QAAQ,sBAAsB,KAAK;EACjD;EAEA,IAAI,cAAW;AACb,WAAO,KAAK,QAAQ,sBAAsB,WAAW;EACvD;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,QAAQ,sBAAsB,OAAO;EACnD;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,QAAQ,sBAAsB,SAAS;EACrD;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,qBAAkB;AACpB,WAAO,KAAK,QAAQ,sBAAsB,kBAAkB;EAC9D;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,QAAQ,sBAAsB,SAAS;EACrD;EAEA,IAAI,cAAW;AACb,WAAO,KAAK,QAAQ,sBAAsB,WAAW;EACvD;EAEA,IAAI,qBAAkB;AACpB,WAAO,KAAK,QAAQ,sBAAsB,kBAAkB;EAC9D;EAEA,IAAI,uBAAoB;AACtB,WAAO,KAAK,QAAQ,sBAAsB,oBAAoB;EAChE;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,QAAQ,sBAAsB,QAAQ;EACpD;EAEA,IAAI,aAAU;AACZ,WAAO,KAAK,QAAQ,sBAAsB,UAAU;EACtD;EAEA,IAAI,oBAAiB;AACnB,WAAO,KAAK,QAAQ,sBAAsB,iBAAiB;EAC7D;EAEA,IAAI,sBAAmB;AACrB,WAAO,KAAK,QAAQ,sBAAsB,mBAAmB;EAC/D;EAEA,IAAI,QAAK;AACP,WAAO,KAAK,QAAQ,sBAAsB,KAAK;EACjD;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,QAAQ,sBAAsB,OAAO;EACnD;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,eAAY;AACd,WAAO,KAAK,QAAQ,sBAAsB,YAAY;EACxD;EAEA,IAAI,kBAAe;AACjB,WAAO,KAAK,QAAQ,sBAAsB,eAAe;EAC3D;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,wBAAqB;AACvB,WAAO,KAAK,QAAQ,sBAAsB,qBAAqB;EACjE;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,QAAQ,sBAAsB,cAAc;EAC1D;EAEA,IAAI,oBAAiB;AACnB,WAAO,KAAK,QAAQ,sBAAsB,iBAAiB;EAC7D;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,0BAAuB;AACzB,WAAO,KAAK,QAAQ,sBAAsB,uBAAuB;EACnE;EAEA,IAAI,gBAAa;AACf,WAAO,KAAK,QAAQ,sBAAsB,aAAa;EACzD;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,QAAQ,sBAAsB,gBAAgB;EAC5D;EAEA,IAAI,kBAAe;AACjB,WAAO,KAAK,QAAQ,sBAAsB,eAAe;EAC3D;EAEA,IAAI,yBAAsB;AACxB,WAAO,KAAK,QAAQ,sBAAsB,sBAAsB;EAClE;;;;ACzWI,IAAO,cAAP,MAAO,aAAW;;;;EAWtB,OAAO,GAAG,MAAY;AACpB,WAAO,IAAI,aAAY,MAAM,KAAK;EACpC;;;;EAKA,OAAO,UAAU,MAAY;AAC3B,WAAO,IAAI,aAAY,MAAM,IAAI;EACnC;;;;EAKA,OAAO,WAAW,QAAyB;AACzC,WAAO,aAAY,wBAAwB,OAAO,MAAM;EAC1D;;;;EAKA,OAAO,kBAAkB,QAAyB;AAChD,WAAO,aAAY,wBAAwB,MAAM,MAAM;EACzD;EAEQ,OAAO,wBACX,SACA,QAAyB;AAE3B,UAAM,UAAU,IAAI,aAAY,OAAO,SAAS,OAAO;AACvD,QAAI,OAAO,WAAW;AACpB,YAAMC,KAAI,IAAI,aAAY,OAAO,WAAW,OAAO;AACnD,cAAQ,KAAKA,GAAE;;AAEjB,QAAI,OAAO,UAAU;AACnB,YAAMA,KAAI,IAAI,aAAY,OAAO,UAAU,OAAO;AAClD,cAAQ,KAAKA,GAAE;;AAEjB,QAAI,OAAO,OAAO;AAChB,YAAMA,KAAI,IAAI,aAAY,OAAO,OAAO,OAAO;AAC/C,cAAQ,QAAQA,GAAE;;AAEpB,QAAI,OAAO,SAAS;AAClB,YAAMA,KAAI,IAAI,aAAY,OAAO,SAAS,OAAO;AACjD,cAAQ,KAAKA,GAAE;;AAEjB,QAAI,OAAO,gBAAgB;AACzB,YAAMA,KAAI,IAAI,aAAY,OAAO,gBAAgB,OAAO;AACxD,cAAQ,KAAKA,GAAE;;AAEjB,WAAO;EACT;EAEA,YAAoB,MAAc,WAAkB;AAClD,UAAM,MAAM,IAAI,QAAQ,IAAI;AAC5B,UAAMC,OAAM,IAAI;AAChB,UAAM,SAAS,IAAI;AACnB,QAAI,WAAW;AACb,WAAK,KAAK,aAAa,iBAAiBA,MAAK,MAAM;AACnD,WAAK,KAAK,aAAa,iBAAiBA,MAAK,SAAS,CAAC;AACvD,WAAK,KAAK,aAAa,iBAAiBA,OAAM,IAAI,SAAS,CAAC;AAC5D,WAAK,KAAK,aAAa,iBAAiBA,MAAK,KAAK,IAAI,SAAS,IAAI,CAAC,CAAC;AACrE,WAAK,KAAK,aAAa,iBAAiBA,MAAK,KAAK,IAAI,SAAS,GAAG,CAAC,CAAC;WAC/D;AACL,WAAK,KAAK,aAAa,iBAAiBA,MAAK,KAAK,IAAI,IAAI,MAAM,CAAC;AACjE,WAAK,KAAK,aAAa,iBAAiBA,MAAK,EAAE;AAC/C,WAAK,KAAK,aAAa,iBAAiBA,OAAM,IAAI,EAAE;AACpD,WAAK,KAAK,aAAa,iBAAiBA,MAAK,CAAC;AAC9C,WAAK,KAAK,aAAa,iBAAiBA,MAAK,CAAC;;AAEhD,SAAK,QAAQ,aAAa,iBAAiB,IAAI,EAAE;EACnD;;;;AC3FI,IAAO,SAAP,MAAO,QAAM;EACjB,IAAI,UAAO;AACT,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,qBAAkB;AACpB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,cAAW;AACb,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,qBAAkB;AACpB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,uBAAoB;AACtB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,oBAAiB;AACnB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,sBAAmB;AACrB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,QAAK;AACP,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,eAAY;AACd,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,YAAS;AACX,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,SAAM;AACR,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,QAAK;AACP,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,mBAAgB;AAClB,WAAO,KAAK,MAAM;EACpB;EAEA,IAAI,iBAAc;AAChB,WAAO,KAAK,MAAM;EACpB;;;;;EAMA,OAAO,MAAM,MAAY;AACvB,WAAO,QAAO,qBAAqB,YAAY,GAAG,IAAI,CAAC;EACzD;;;;;EAMA,OAAO,KAAK,MAAY;AACtB,WAAO,QAAO,oBAAoB,YAAY,GAAG,IAAI,CAAC;EACxD;;;;;EAMA,OAAO,aAAa,MAAY;AAC9B,WAAO,QAAO,qBAAqB,YAAY,UAAU,IAAI,CAAC;EAChE;;;;;EAMA,OAAO,YAAY,MAAY;AAC7B,WAAO,QAAO,oBAAoB,YAAY,UAAU,IAAI,CAAC;EAC/D;;;;EAKA,OAAO,qBAAqB,MAAiB;AAC3C,WAAO,IAAI,QAAO;MAChB,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,WAAW,KAAK,GAAG,KAAK,GAAG;MAC3B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,oBAAoB,KAAK,GAAG,KAAK,EAAE;MACnC,WAAW,KAAK,GAAG,KAAK,EAAE;MAC1B,aAAa,KAAK,GAAG,KAAK,GAAG;MAC7B,oBAAoB,KAAK,GAAG,KAAK,EAAE;MACnC,sBAAsB,KAAK,GAAG,KAAK,EAAE;MACrC,UAAU,KAAK,GAAG,KAAK,EAAE;MACzB,YAAY,KAAK,GAAG,KAAK,GAAG;MAC5B,mBAAmB,KAAK,GAAG,KAAK,EAAE;MAClC,qBAAqB,KAAK,GAAG,KAAK,EAAE;MACpC,OAAO,KAAK,MAAM,KAAK,EAAE;MACzB,SAAS,KAAK,MAAM,KAAK,GAAG;MAC5B,gBAAgB,KAAK,MAAM,KAAK,EAAE;MAClC,kBAAkB,KAAK,MAAM,KAAK,EAAE;MACpC,YAAY,KAAK,GAAG,KAAK,EAAE;MAC3B,cAAc,KAAK,GAAG,KAAK,EAAE;MAC7B,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,WAAW,KAAK,GAAG,KAAK,EAAE;MAC1B,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,QAAQ,KAAK,GAAG,KAAK,CAAC;MACtB,OAAO,KAAK,GAAG,KAAK,CAAC;MACrB,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,gBAAgB,KAAK,GAAG,KAAK,EAAE;KAChC;EACH;;;;EAKA,OAAO,oBAAoB,MAAiB;AAC1C,WAAO,IAAI,QAAO;MAChB,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,WAAW,KAAK,GAAG,KAAK,EAAE;MAC1B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,oBAAoB,KAAK,GAAG,KAAK,EAAE;MACnC,WAAW,KAAK,GAAG,KAAK,EAAE;MAC1B,aAAa,KAAK,GAAG,KAAK,EAAE;MAC5B,oBAAoB,KAAK,GAAG,KAAK,EAAE;MACnC,sBAAsB,KAAK,GAAG,KAAK,EAAE;MACrC,UAAU,KAAK,GAAG,KAAK,EAAE;MACzB,YAAY,KAAK,GAAG,KAAK,EAAE;MAC3B,mBAAmB,KAAK,GAAG,KAAK,EAAE;MAClC,qBAAqB,KAAK,GAAG,KAAK,EAAE;MACpC,OAAO,KAAK,MAAM,KAAK,EAAE;MACzB,SAAS,KAAK,MAAM,KAAK,EAAE;MAC3B,gBAAgB,KAAK,MAAM,KAAK,EAAE;MAClC,kBAAkB,KAAK,MAAM,KAAK,EAAE;MACpC,YAAY,KAAK,GAAG,KAAK,EAAE;MAC3B,cAAc,KAAK,GAAG,KAAK,EAAE;MAC7B,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,WAAW,KAAK,GAAG,KAAK,EAAE;MAC1B,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,SAAS,KAAK,GAAG,KAAK,EAAE;MACxB,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,QAAQ,KAAK,GAAG,KAAK,CAAC;MACtB,OAAO,KAAK,GAAG,KAAK,CAAC;MACrB,gBAAgB,KAAK,GAAG,KAAK,EAAE;MAC/B,kBAAkB,KAAK,GAAG,KAAK,EAAE;MACjC,gBAAgB,KAAK,GAAG,KAAK,EAAE;KAChC;EACH;EAEA,YAAqC,OA8BpC;AA9BoC,SAAA,QAAA;EA8BjC;EAEJ,SAAM;AACJ,WAAO;MACL,GAAG,KAAK;;EAEZ;;;;ACnQI,IAAO,mBAAP,MAAO,kBAAgB;EAC3B,YAAmB,OAAU;AAAV,SAAA,QAAA;AAEnB,SAAA,kBAAyB,CAAA;AACzB,SAAA,iBAAwB,CAAA;AACxB,SAAA,kBAAkB,oBAAI,IAAG;AACzB,SAAA,gCAAwC;AACxC,SAAA,kBAA4B;EANI;EAQhC,IAAI,aAAU;AACZ,QAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,aAAO,KAAK;;AAGd,UAAM,OAAO,KAAK,UAAU,OAAO,CAAC,KAAK,KAAK,CAAC;AAC/C,UAAM,oBAAoB,KAAK;AAC/B,SAAK,KAAK,CAAC,GAAG,MAAM,kBAAkB,IAAI,CAAC,IAAK,kBAAkB,IAAI,CAAC,CAAE;AACzE,SAAK,kBAAkB;AACvB,WAAO;EACT;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,WAAW,KAAK,WAAW,SAAS,CAAC;EACnD;EAEA,IAAI,UAAO;AACT,WAAO,KAAK,WAAW,CAAC;EAC1B;;;;;;;;;;;;;;EAeA,UAAU,QAAQ,GAAG,YAAY,IAAE;AACjC,UAAM,WAAW,KAAK,MAAM,KAAK,MAAM,GAAG;AAC1C,UAAM,WAAW,KAAK,UAAU,QAAQ;AACxC,QAAI,WAAW,KAAK,oBAAoB,QAAQ;AAChD,UAAM,YAAY,CAAC,QAAQ;AAE3B,QAAI,yBAAyB;AAC7B,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,YAAMC,OAAgB,mBAAmB,WAAW,CAAC;AACrD,YAAM,MAAM,KAAK,UAAUA,IAAG;AAC9B,YAAM,OAAO,KAAK,oBAAoB,GAAG;AACzC,YAAM,YAAY,KAAK,IAAI,OAAO,QAAQ;AAC1C,iBAAW;AACX,gCAA0B;;AAE5B,QAAI,YAAY;AAChB,UAAM,WAAW,yBAAyB;AAC1C,QAAI,iBAAiB;AACrB,eAAW,KAAK,oBAAoB,QAAQ;AAC5C,WAAO,UAAU,SAAS,WAAW;AACnC,YAAMA,OAAgB,mBAAmB,WAAW,SAAS;AAC7D,YAAM,MAAM,KAAK,UAAUA,IAAG;AAC9B,YAAM,OAAO,KAAK,oBAAoB,GAAG;AACzC,YAAM,YAAY,KAAK,IAAI,OAAO,QAAQ;AAC1C,wBAAkB;AAElB,YAAM,gCAAgC,UAAU,SAAS;AACzD,UAAI,iBAAiB,kBAAkB;AACvC,UAAI,cAAc;AASlB,aAAO,kBAAkB,UAAU,SAAS,WAAW;AACrD,kBAAU,KAAK,GAAG;AAClB,cAAMC,kCACA,UAAU,SAAS,eAAe;AACxC,yBAAiB,kBAAkBA;AACnC;;AAEF,iBAAW;AACX;AACA,UAAI,YAAY,KAAK;AACnB,eAAO,UAAU,SAAS,WAAW;AACnC,oBAAU,KAAK,GAAG;;AAEpB;;;AAIJ,UAAM,UAAU,CAAC,KAAK,KAAK;AAG3B,UAAM,mBAAmB,KAAK,OAAO,QAAQ,KAAK,CAAG;AACrD,aAAS,IAAI,GAAG,IAAK,mBAAmB,GAAI,KAAK;AAC/C,UAAI,QAAQ,IAAI;AAChB,aAAO,QAAQ,GAAG;AAChB,gBAAQ,UAAU,SAAS;;AAE7B,UAAI,SAAS,UAAU,QAAQ;AAC7B,gBAAQ,QAAQ,UAAU;;AAE5B,cAAQ,OAAO,GAAG,GAAG,UAAU,KAAK,CAAC;;AAIvC,UAAM,mBAAmB,QAAQ,mBAAmB;AACpD,aAAS,IAAI,GAAG,IAAK,mBAAmB,GAAI,KAAK;AAC/C,UAAI,QAAQ;AACZ,aAAO,QAAQ,GAAG;AAChB,gBAAQ,UAAU,SAAS;;AAE7B,UAAI,SAAS,UAAU,QAAQ;AAC7B,gBAAQ,QAAQ,UAAU;;AAE5B,cAAQ,KAAK,UAAU,KAAK,CAAC;;AAG/B,WAAO;EACT;;;;;;;;EASA,IAAI,aAAU;AACZ,QAAI,KAAK,mBAAmB,MAAM;AAChC,aAAO,KAAK;;AAGd,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,cAAc,KAAK,WAAW,IAAI,KAAK,OAAO;AAEpD,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,cAAc,KAAK,WAAW,IAAI,KAAK,OAAO;AACpD,UAAM,QAAQ,cAAc;AAC5B,UAAM,6BACF,kBAAiB,UAAU,KAAK,MAAM,KAAK,YAAY,UAAU;AACrE,UAAM,WAAW,6BAA6B,aAAa;AAC3D,UAAM,SAAS,6BAA6B,aAAa;AACzD,UAAM,sBAAsB;AAC5B,QAAI,gBAAgB;AACpB,QAAI,SAAS,KAAK,UAAU,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;AAEtD,UAAM,yBAAyB,IAAM,KAAK;AAG1C,aAAS,YAAY,GAAK,aAAa,KAAO,aAAa,GAAK;AAC9D,YAAMD,OAAgB,sBAClB,WAAW,sBAAsB,SAAS;AAC9C,UAAI,CAAC,kBAAiB,UAAUA,MAAK,UAAU,MAAM,GAAG;AACtD;;AAEF,YAAM,iBAAiB,KAAK,UAAU,KAAK,MAAMA,IAAG,CAAC;AACrD,YAAM,gBACD,KAAK,WAAW,IAAI,cAAc,IAAK,eAAe;AAC3D,YAAM,QAAQ,KAAK,IAAI,yBAAyB,YAAY;AAC5D,UAAI,QAAQ,eAAe;AACzB,wBAAgB;AAChB,iBAAS;;;AAGb,SAAK,kBAAkB;AACvB,WAAO,KAAK;EACd;;;;;EAMA,oBAAoB,KAAQ;AAC1B,UAAM,QACF,KAAK,WAAW,IAAI,KAAK,OAAO,IAAK,KAAK,WAAW,IAAI,KAAK,OAAO;AACzE,UAAM,wBACF,KAAK,WAAW,IAAI,GAAG,IAAK,KAAK,WAAW,IAAI,KAAK,OAAO;AAGhE,QAAI,UAAU,GAAK;AACjB,aAAO;;AAET,WAAO,wBAAwB;EACjC;;EAGA,IAAI,2BAAwB;AAC1B,QAAI,KAAK,iCAAiC,GAAK;AAC7C,aAAO,KAAK;;AAGd,SAAK,gCAAgC,KAAK,oBAAoB,KAAK,KAAK;AACxE,WAAO,KAAK;EACd;;EAGA,IAAI,aAAU;AACZ,QAAI,KAAK,gBAAgB,OAAO,GAAG;AACjC,aAAO,KAAK;;AAEd,UAAM,UAAU,KAAK,UAAU,OAAO,CAAC,KAAK,KAAK,CAAC;AAClD,UAAM,oBAAoB,oBAAI,IAAG;AACjC,eAAWE,MAAK,SAAS;AACvB,wBAAkB,IAAIA,IAAG,kBAAiB,eAAeA,EAAC,CAAC;;AAE7D,SAAK,kBAAkB;AACvB,WAAO;EACT;;;;;EAMA,IAAI,YAAS;AACX,QAAI,KAAK,eAAe,SAAS,GAAG;AAClC,aAAO,KAAK;;AAEd,UAAM,OAAc,CAAA;AACpB,aAASF,OAAM,GAAKA,QAAO,KAAOA,QAAO,GAAK;AAC5C,YAAM,aAAa,IAAI,KAAKA,MAAK,KAAK,MAAM,QAAQ,KAAK,MAAM,IAAI;AACnE,WAAK,KAAK,UAAU;;AAEtB,SAAK,iBAAiB;AACtB,WAAO,KAAK;EACd;;EAGA,OAAO,UAAU,OAAe,GAAW,GAAS;AAClD,QAAI,IAAI,GAAG;AACT,aAAO,KAAK,SAAS,SAAS;;AAEhC,WAAO,KAAK,SAAS,SAAS;EAChC;;;;;;;;;;;;;;;;;;;;EAqBA,OAAO,eAAe,OAAU;AAC9B,UAAMG,OAAiB,YAAY,MAAM,MAAK,CAAE;AAChD,UAAMH,OAAgB,sBAClB,KAAK,MAAMG,KAAI,CAAC,GAAGA,KAAI,CAAC,CAAC,IAAI,MAAQ,KAAK,EAAE;AAChD,UAAM,SAAS,KAAK,KAAMA,KAAI,CAAC,IAAIA,KAAI,CAAC,IAAMA,KAAI,CAAC,IAAIA,KAAI,CAAC,CAAE;AAC9D,UAAM,cAAc,OAChB,OAAO,KAAK,IAAI,QAAQ,IAAI,IACxB,KAAK,IACS,sBAAsBH,OAAM,EAAI,IAAI,KAAK,KAAK,GAAK;AAEzE,WAAO;EACT;;;;AC3QI,IAAO,gBAAP,cAA6B,cAAa;EAC9C,YAAY,gBAAqB,QAAiB,eAAqB;AACrE,UAAM;MACJ,iBAAiB,eAAe,MAAK;MACrC,SAAS,QAAQ;MACjB;MACA;MACA,gBAAgB,aAAa,iBACzB,eAAe,KAAK,eAAe,MAAM;MAC7C,kBAAkB,aAAa,iBAC3B,eAAe,KACf,KAAK,IAAI,eAAe,SAAS,IAAM,eAAe,SAAS,GAAG,CAAC;MACvE,iBAAiB,aAAa,QAC1B,gBACK,cACG,IAAI,iBAAiB,cAAc,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,EAC1D,MAAK,CAAE;MAChB,gBAAgB,aAAa,iBACzB,eAAe,KAAK,eAAe,SAAS,CAAG;MACnD,uBAAuB,aAAa,iBAChC,eAAe,KAAK,eAAe,SAAS,IAAM,CAAG;KAC1D;EACH;;;;AC7BI,IAAO,mBAAP,MAAO,0BAAyB,cAAa;EAiDjD,YAAY,gBAAqB,QAAiB,eAAqB;AACrE,UAAM;MACJ,iBAAiB,eAAe,MAAK;MACrC,SAAS,QAAQ;MACjB;MACA;MACA,gBAAgB,aAAa,iBACpB,sBAAsB,eAAe,MAAM,GAAK,GAAG,EAAI;MAChE,kBAAkB,aAAa,iBAC3B,cAAc,cACV,gBAAgB,kBAAiB,MACjC,kBAAiB,kBAAkB,GACvC,EAAI;MACR,iBAAiB,aAAa,iBAC1B,cAAc,cACV,gBAAgB,kBAAiB,MACjC,kBAAiB,iBAAiB,GACtC,EAAI;MACR,gBACI,aAAa,iBAAiB,eAAe,MAAM,IAAI,CAAG;MAC9D,uBACI,aAAa,iBAAiB,eAAe,MAAM,IAAI,EAAI;KAChE;EACH;;AAnEwB,iBAAA,OAAiB;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOsB,iBAAA,qBAA+B;EACrD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOsB,iBAAA,oBAA8B;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;AC9CE,IAAO,gBAAP,MAAO,uBAAsB,cAAa;EAiD9C,YAAY,gBAAqB,QAAiB,eAAqB;AACrE,UAAM;MACJ,iBAAiB,eAAe,MAAK;MACrC,SAAS,QAAQ;MACjB;MACA;MACA,gBAAgB,aAAa,iBAAiB,eAAe,KAAK,GAAK;MACvE,kBAAkB,aAAa,iBAC3B,cAAc,cACV,gBAAgB,eAAc,MAC9B,eAAc,kBAAkB,GACpC,EAAI;MACR,iBAAiB,aAAa,iBAC1B,cAAc,cACV,gBAAgB,eAAc,MAC9B,eAAc,iBAAiB,GACnC,EAAI;MACR,gBAAgB,aAAa,iBAAiB,eAAe,KAAK,EAAI;MACtE,uBACI,aAAa,iBAAiB,eAAe,KAAK,EAAI;KAC3D;EACH;;AAjEwB,cAAA,OAAO;EAC7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOsB,cAAA,qBAAqB;EAC3C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOsB,cAAA,oBAAoB;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;ACrCJ,IAAM,wBAAwB;EAC5B,SAAS;EACT,mBAAmB;EACnB,QAAQ;;;AAGV,SAAS,QAAQ,GAA8B,GAA4B;AACzE,MAAI,EAAE,QAAQ,EAAE,OAAO;AACrB,WAAO;aACE,EAAE,QAAQ,EAAE,OAAO;AAC5B,WAAO;;AAET,SAAO;AACT;AAUM,IAAO,QAAP,MAAO,OAAK;EAQhB,cAAA;EAAuB;;;;;;;;;;;;;;EAevB,OAAO,MACL,oBAAyC,SAAsB;AAE/D,UAAM,EAAC,SAAS,mBAAmB,OAAM,IAAI,EAAC,GAAG,uBAAuB,GAAG,QAAO;AAGlF,UAAM,YAAmB,CAAA;AACzB,UAAM,gBAAgB,IAAI,MAAc,GAAG,EAAE,KAAK,CAAC;AACnD,QAAI,gBAAgB;AACpB,eAAW,CAAC,MAAM,UAAU,KAAK,mBAAmB,QAAO,GAAI;AAC7D,YAAM,MAAM,IAAI,QAAQ,IAAI;AAC5B,gBAAU,KAAK,GAAG;AAClB,YAAMI,OAAM,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAcA,IAAG,KAAK;AACtB,uBAAiB;;AAInB,UAAM,wBAAwB,IAAI,MAAc,GAAG,EAAE,KAAK,CAAG;AAC7D,aAASA,OAAM,GAAGA,OAAM,KAAKA,QAAO;AAClC,YAAM,aAAa,cAAcA,IAAG,IAAI;AACxC,eAAS,IAAIA,OAAM,IAAI,IAAIA,OAAM,IAAI,KAAK;AACxC,cAAM,cAAmB,mBAAmB,CAAC;AAC7C,8BAAsB,WAAW,KAAK;;;AAM1C,UAAM,YAAY,IAAI,MAAK;AAC3B,eAAW,OAAO,WAAW;AAC3B,YAAMA,OAAW,mBAAmB,KAAK,MAAM,IAAI,GAAG,CAAC;AACvD,YAAM,aAAa,sBAAsBA,IAAG;AAC5C,UAAI,WAAW,IAAI,SAAS,OAAM,iBAAiB,cAAc,OAAM,4BAA4B;AACjG;;AAGF,YAAM,kBAAkB,aAAa,MAAQ,OAAM;AACnD,YAAM,eAAe,IAAI,SAAS,OAAM,gBAAgB,OAAM,sBAAsB,OAAM;AAC1F,YAAM,eAAe,IAAI,SAAS,OAAM,iBAAiB;AACzD,YAAM,QAAQ,kBAAkB;AAChC,gBAAU,KAAK,EAAC,KAAK,MAAK,CAAC;;AAG7B,cAAU,KAAK,OAAO;AAMtB,UAAM,eAAsB,CAAA;AAC5B,aAASC,qBAAoB,IAAIA,sBAAqB,IAAIA,sBAAqB;AAC7E,mBAAa,SAAS;AACtB,iBAAW,EAAC,IAAG,KAAK,WAAW;AAC7B,cAAM,eAAe,aAAa,KAAK,eAAY;AACjD,iBAAY,kBAAkB,IAAI,KAAK,UAAU,GAAG,IAAIA;QAC1D,CAAC;AACD,YAAI,CAAC,cAAc;AACjB,uBAAa,KAAK,GAAG;;AAEvB,YAAI,aAAa,UAAU;AAAS;;AAEtC,UAAI,aAAa,UAAU;AAAS;;AAEtC,UAAM,SAAmB,CAAA;AACzB,QAAI,aAAa,WAAW,GAAG;AAC7B,aAAO,KAAK,iBAAiB;;AAE/B,eAAW,aAAa,cAAc;AACpC,aAAO,KAAK,UAAU,MAAK,CAAE;;AAE/B,WAAO;EACT;;AA9FwB,MAAA,gBAAgB;AAChB,MAAA,oBAAoB;AACpB,MAAA,sBAAsB;AACtB,MAAA,sBAAsB;AACtB,MAAA,gBAAgB;AAChB,MAAA,4BAA4B;;;ACrChD,SAAU,YAAY,MAAY;AACtC,QAAMC,KAAe,YAAY,IAAI;AACrC,QAAM,IAAe,cAAc,IAAI;AACvC,QAAM,IAAe,aAAa,IAAI;AACtC,QAAM,WAAW,CAACA,GAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAGhE,aAAW,CAAC,GAAG,IAAI,KAAK,SAAS,QAAO,GAAI;AAC1C,QAAI,KAAK,WAAW,GAAG;AACrB,eAAS,CAAC,IAAI,MAAM;;;AAIxB,SAAO,MAAM,SAAS,KAAK,EAAE;AAC/B;AAQM,SAAU,YAAYC,MAAW;AACrC,EAAAA,OAAMA,KAAI,QAAQ,KAAK,EAAE;AACzB,QAAM,UAAUA,KAAI,WAAW;AAC/B,QAAM,QAAQA,KAAI,WAAW;AAC7B,QAAM,UAAUA,KAAI,WAAW;AAC/B,MAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS;AAClC,UAAM,IAAI,MAAM,oBAAoBA,IAAG;;AAEzC,MAAID,KAAI;AACR,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,SAAS;AACX,IAAAA,KAAI,YAAYC,KAAI,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;aAChC,OAAO;AAChB,IAAAD,KAAI,YAAYC,KAAI,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,CAAC;aACtB,SAAS;AAClB,IAAAD,KAAI,YAAYC,KAAI,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAI,YAAYA,KAAI,MAAM,GAAG,CAAC,CAAC;;AAGjC,UACM,OAAO,MAAQD,KAAI,QAAU,MAAQ,IAAI,QAAU,IAAM,IAAI,SAC/D;AACN;AAEA,SAAS,YAAY,OAAa;AAEhC,SAAO,SAAS,OAAO,EAAE;AAC3B;;;ACNM,SAAU,qBACZ,QAAgB,eAA8B,CAAA,GAAE;AAClD,QAAM,UAAU,YAAY,GAAG,MAAM;AACrC,SAAO;IACL;IACA,SAAS;MACP,OAAO,OAAO,MAAM,MAAM;MAC1B,MAAM,OAAO,KAAK,MAAM;;IAE1B,UAAU;MACR,SAAS,QAAQ;MACjB,WAAW,QAAQ;MACnB,UAAU,QAAQ;MAClB,SAAS,QAAQ;MACjB,gBAAgB,QAAQ;MACxB,OAAO,QAAQ;;IAEjB,cAAc,aAAa,IAAI,CAACE,OAAM,YAAY,QAAQA,EAAC,CAAC;;AAEhE;AAwBM,SAAU,YACZ,QAAgB,OAAkB;AACpC,MAAI,QAAQ,MAAM;AAClB,QAAM,OAAO;AACb,QAAM,KAAK;AACX,MAAI,MAAM,OAAO;AACf,YAAQ,MAAM,UAAU,MAAM,EAAE;;AAElC,QAAM,UAAU,YAAY,GAAG,KAAK;AACpC,QAAM,QAAQ,QAAQ;AACtB,SAAO;IACL;IACA;IACA,OAAO;MACL,OAAO,MAAM,KAAK,EAAE;MACpB,SAAS,MAAM,KAAK,GAAG;MACvB,gBAAgB,MAAM,KAAK,EAAE;MAC7B,kBAAkB,MAAM,KAAK,EAAE;;IAEjC,MAAM;MACJ,OAAO,MAAM,KAAK,EAAE;MACpB,SAAS,MAAM,KAAK,EAAE;MACtB,gBAAgB,MAAM,KAAK,EAAE;MAC7B,kBAAkB,MAAM,KAAK,EAAE;;;AAGrC;;;ACjJA,IAAM,cAAc,CAAC,OAAO,QAAQ;AACnC,MAAI,OAAO,UAAU,SAAU;AAG/B,MAAI,QAAQ,GAAG;AACd,WAAO;AAAA,MACN,MAAM;AAAA,MACN,IAAM,SAAS,IAAK,KAAS,SAAS,IAAK,OAAS;AAAA,MACpD,IAAM,SAAS,IAAK,KAAQ,QAAQ,OAAS;AAAA,MAC7C,IAAK,QAAQ,KAAS,SAAS,IAAK,OAAS;AAAA,IAC9C;AAAA,EACD;AAGA,MAAI,QAAQ,GAAG;AACd,WAAO;AAAA,MACN,MAAM;AAAA,MACN,IAAM,SAAS,KAAM,KAAS,SAAS,IAAK,OAAS;AAAA,MACrD,IAAM,SAAS,IAAK,KAAS,SAAS,IAAK,OAAS;AAAA,MACpD,IAAM,SAAS,IAAK,KAAQ,QAAQ,OAAS;AAAA,MAC7C,QAAS,QAAQ,KAAS,SAAS,IAAK,OAAS;AAAA,IAClD;AAAA,EACD;AAGA,MAAI,QAAQ,GAAG;AACd,WAAO;AAAA,MACN,MAAM;AAAA,MACN,IAAK,SAAS,KAAM,OAAQ;AAAA,MAC5B,IAAK,SAAS,IAAK,OAAQ;AAAA,MAC3B,IAAI,QAAQ,OAAQ;AAAA,IACrB;AAAA,EACD;AAGA,MAAI,QAAQ,GAAG;AACd,WAAO;AAAA,MACN,MAAM;AAAA,MACN,IAAK,SAAS,KAAM,OAAQ;AAAA,MAC5B,IAAK,SAAS,KAAM,OAAQ;AAAA,MAC5B,IAAK,SAAS,IAAK,OAAQ;AAAA,MAC3B,QAAQ,QAAQ,OAAQ;AAAA,IACzB;AAAA,EACD;AACD;AAEA,IAAO,sBAAQ;;;AC9Cf,IAAM,QAAQ;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,WAAW;AAAA,EACX,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AAAA;AAAA;AAAA,EAIR,eAAe;AAAA,EAEf,KAAK;AAAA,EACL,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AACd;AAEA,IAAO,gBAAQ;;;ACtJf,IAAM,aAAa,WAAS;AAC3B,SAAO,oBAAY,cAAM,MAAM,YAAY,CAAC,GAAG,CAAC;AACjD;AAEA,IAAO,qBAAQ;;;ACPf,IAAM,MAAM;AAEZ,IAAM,WAAW,WAAS;AACzB,MAAI;AAEJ,UAAQ,QAAQ,MAAM,MAAM,GAAG,KAC5B,oBAAY,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,IACnD;AACJ;AAEA,IAAO,mBAAQ;;;ACHR,IAAM,MAAM;AAGZ,IAAM,WAAW,MAAM,GAAG;AAG1B,IAAM,MAAM,GAAG,GAAG;AAGlB,IAAM,WAAW,MAAM,GAAG;AAG1B,IAAM,UAAU,MAAM,GAAG,KAAK,GAAG;AAGjC,IAAM,eAAe,MAAM,GAAG,KAAK,GAAG;AAGtC,IAAM,MAAM,MAAM,GAAG,uBAAuB,GAAG;AAG/C,IAAM,WAAW,MAAM,GAAG,uBAAuB,GAAG;AAEpD,IAAM,IAAI;AAIV,IAAM,kBAAkB,IAAI,OAAO,MAAM,eAAe,GAAG;;;AC9BlE,IAAM,cAAc,IAAI;AAAA,EACvB,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,eAAe,OAAO;AAC9D;AAEA,IAAM,cAAc,IAAI;AAAA,EACvB,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,eAAe,OAAO;AAC9D;AAEA,IAAM,iBAAiB,WAAS;AAC/B,MAAI,MAAM,EAAE,MAAM,MAAM;AACxB,MAAI;AACJ,MAAK,QAAQ,MAAM,MAAM,WAAW,GAAI;AACvC,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AACA,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AACA,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AAAA,EACD,WAAY,QAAQ,MAAM,MAAM,WAAW,GAAI;AAC9C,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AACA,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AACA,QAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,UAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpB;AAAA,EACD,OAAO;AACN,WAAO;AAAA,EACR;AAEA,MAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,QAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC;AAAA,EACpD,WAAW,MAAM,CAAC,MAAM,QAAW;AAClC,QAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EAC/C;AAEA,SAAO;AACR;AAEA,IAAO,yBAAQ;;;AChDf,IAAM,UAAU,CAAC,OAAO,SACvB,UAAU,SACP,SACA,OAAO,UAAU,WACjB,cAAM,KAAK,IACX,MAAM,SAAS,SACf,QACA,OACA,EAAE,GAAG,OAAO,KAAK,IACjB;AAEJ,IAAO,kBAAQ;;;ACVf,IAAM,YACL,CAAC,cAAc,UACf,YACE,QAAQ,gBAAQ,OAAO,WAAW,OAAO;AAAA;AAAA,EAEvC,MAAM,SAAS;AAAA;AAAA,IAEd;AAAA;AAAA;AAAA;AAAA,IAGF,WAAW,MAAM,IAAI,EAAE,WAAW;AAAA;AAAA,MAEhC,WAAW,MAAM,IAAI,EAAE,WAAW,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA,MAG3C,gBAAgB;AAAA;AAAA,QAEd,WAAW,MAAM,IAAI,EAAE,IAAI,KAAK;AAAA;AAAA;AAAA,QAEhC,WAAW,IAAI,WAAW,EAAE,WAAW,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,IAC9D;AAEL,IAAO,oBAAQ;;;ACvBf,IAAM,aAAa,CAAC;AACpB,IAAM,QAAQ,CAAC;AAEf,IAAM,UAAU,CAAC;AACjB,IAAM,gBAAgB,CAAC;AAEvB,IAAM,WAAW,OAAK;AAEtB,IAAM,UAAU,CAAAC,iBAAc;AAC7B,aAAWA,aAAW,IAAI,IAAI;AAAA,IAC7B,GAAG,WAAWA,aAAW,IAAI;AAAA,IAC7B,GAAGA,aAAW;AAAA,EACf;AAEA,SAAO,KAAKA,aAAW,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAAC,OAAK;AACnD,QAAI,CAAC,WAAWA,EAAC,GAAG;AACnB,iBAAWA,EAAC,IAAI,CAAC;AAAA,IAClB;AACA,eAAWA,EAAC,EAAED,aAAW,IAAI,IAAIA,aAAW,SAASC,EAAC;AAAA,EACvD,CAAC;AAGD,MAAI,CAACD,aAAW,QAAQ;AACvB,IAAAA,aAAW,SAAS,CAAC;AAAA,EACtB;AAEA,MAAI,CAACA,aAAW,YAAY;AAC3B,IAAAA,aAAW,aAAa,CAAC;AAAA,EAC1B;AAEA,EAAAA,aAAW,SAAS,QAAQ,aAAW;AAEtC,QAAIA,aAAW,OAAO,OAAO,MAAM,QAAW;AAC7C,MAAAA,aAAW,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC;AAAA,IACnC;AAEA,QAAI,CAACA,aAAW,YAAY,OAAO,GAAG;AACrC,YAAM,IAAI,MAAM,6BAA6B,OAAO,EAAE;AAAA,IACvD;AAEA,QAAI,OAAOA,aAAW,YAAY,OAAO,MAAM,YAAY;AAC1D,MAAAA,aAAW,YAAY,OAAO,IAAI;AAAA,QACjC,KAAKA,aAAW,YAAY,OAAO;AAAA,MACpC;AAAA,IACD;AAEA,QAAI,CAACA,aAAW,YAAY,OAAO,EAAE,OAAO;AAC3C,MAAAA,aAAW,YAAY,OAAO,EAAE,QAAQ;AAAA,IACzC;AAAA,EACD,CAAC;AAED,QAAMA,aAAW,IAAI,IAAIA;AACzB,GAACA,aAAW,SAAS,CAAC,GAAG,QAAQ,YAAU;AAC1C,cAAU,QAAQA,aAAW,IAAI;AAAA,EAClC,CAAC;AAED,SAAO,kBAAUA,aAAW,IAAI;AACjC;AAEA,IAAM,UAAU,UAAQ,MAAM,IAAI;AAElC,IAAM,YAAY,CAAC,QAAQ,SAAS;AACnC,MAAI,OAAO,WAAW,UAAU;AAC/B,QAAI,CAAC,MAAM;AACV,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC5D;AACA,kBAAc,MAAM,IAAI;AAAA,EACzB,WAAW,OAAO,WAAW,YAAY;AACxC,QAAI,QAAQ,QAAQ,MAAM,IAAI,GAAG;AAChC,cAAQ,KAAK,MAAM;AAAA,IACpB;AAAA,EACD;AACD;;;ACvEA,IAAM,sBAAsB;AAG5B,IAAM,iBAAiB;AAEhB,IAAM,MAAM;AAAA,EAClB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AACR;AAEA,IAAI,KAAK;AAMT,SAAS,OAAO,OAAO;AACtB,MAAI,KAAK,MAAM,EAAE;AACjB,MAAI,MAAM,MAAM,KAAK,CAAC;AACtB,MAAI,OAAO,OAAO,OAAO,KAAK;AAC7B,WAAO,KAAK,KAAK,GAAG,KAAM,QAAQ,OAAO,KAAK,KAAK,MAAM,KAAK,CAAC,CAAC;AAAA,EACjE;AACA,MAAI,OAAO,KAAK;AACf,WAAO,KAAK,KAAK,GAAG;AAAA,EACrB;AACA,SAAO,KAAK,KAAK,EAAE;AACpB;AAMA,SAAS,SAAS,OAAO;AACxB,MAAI,MAAM,MAAM,QAAQ;AACvB,WAAO;AAAA,EACR;AACA,MAAI,KAAK,MAAM,EAAE;AACjB,MAAI,oBAAoB,KAAK,EAAE,GAAG;AACjC,WAAO;AAAA,EACR;AACA,MAAI,OAAO,KAAK;AACf,QAAI,MAAM,SAAS,KAAK,GAAG;AAC1B,aAAO;AAAA,IACR;AACA,QAAI,MAAM,MAAM,KAAK,CAAC;AACtB,QAAI,QAAQ,OAAO,oBAAoB,KAAK,GAAG,GAAG;AACjD,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAOA,IAAM,UAAU;AAAA,EACf,KAAK;AAAA,EACL,KAAK,MAAM,KAAK;AAAA,EAChB,MAAM,IAAI;AAAA,EACV,MAAM;AACP;AAEA,SAASE,KAAI,OAAO;AACnB,MAAI,QAAQ;AACZ,MAAI,MAAM,EAAE,MAAM,OAAO,MAAM,EAAE,MAAM,KAAK;AAC3C,aAAS,MAAM,IAAI;AAAA,EACpB;AACA,WAAS,OAAO,KAAK;AACrB,MAAI,MAAM,EAAE,MAAM,OAAO,KAAK,KAAK,MAAM,KAAK,CAAC,CAAC,GAAG;AAClD,aAAS,MAAM,IAAI,IAAI,OAAO,KAAK;AAAA,EACpC;AACA,MAAI,MAAM,EAAE,MAAM,OAAO,MAAM,EAAE,MAAM,KAAK;AAC3C,SACE,MAAM,KAAK,CAAC,MAAM,OAAO,MAAM,KAAK,CAAC,MAAM,QAC5C,KAAK,KAAK,MAAM,KAAK,CAAC,CAAC,GACtB;AACD,eAAS,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,KAAK;AAAA,IAClD,WAAW,KAAK,KAAK,MAAM,KAAK,CAAC,CAAC,GAAG;AACpC,eAAS,MAAM,IAAI,IAAI,OAAO,KAAK;AAAA,IACpC;AAAA,EACD;AACA,MAAI,SAAS,KAAK,GAAG;AACpB,QAAI,KAAK,MAAM,KAAK;AACpB,QAAI,OAAO,SAAS,OAAO,SAAS,OAAO,UAAU,OAAO,QAAQ;AACnE,aAAO,EAAE,MAAM,IAAI,KAAK,OAAO,QAAQ,QAAQ,EAAE,EAAE;AAAA,IACpD;AACA,WAAO;AAAA,EACR;AACA,MAAI,MAAM,EAAE,MAAM,KAAK;AACtB;AACA,WAAO,EAAE,MAAM,IAAI,YAAY,OAAO,CAAC,MAAM;AAAA,EAC9C;AACA,SAAO,EAAE,MAAM,IAAI,QAAQ,OAAO,CAAC,MAAM;AAC1C;AAKA,SAAS,OAAO,OAAO;AACtB,MAAI,IAAI;AACR,SAAO,KAAK,KAAK,MAAM,EAAE,CAAC,GAAG;AAC5B,SAAK,MAAM,IAAI;AAAA,EAChB;AACA,SAAO;AACR;AAKA,SAAS,MAAM,OAAO;AACrB,MAAI,IAAI;AACR,SAAO,KAAK,MAAM,UAAU,eAAe,KAAK,MAAM,EAAE,CAAC,GAAG;AAC3D,SAAK,MAAM,IAAI;AAAA,EAChB;AACA,SAAO;AACR;AAKA,SAAS,UAAU,OAAO;AACzB,MAAI,IAAI,MAAM,KAAK;AACnB,MAAI,MAAM,EAAE,MAAM,KAAK;AACtB;AACA,WAAO,EAAE,MAAM,IAAI,UAAU,OAAO,EAAE;AAAA,EACvC;AACA,MAAI,MAAM,QAAQ;AACjB,WAAO,EAAE,MAAM,IAAI,MAAM,OAAO,OAAU;AAAA,EAC3C;AACA,SAAO,EAAE,MAAM,IAAI,OAAO,OAAO,EAAE;AACpC;AAEO,SAAS,SAAS,MAAM,IAAI;AAClC,MAAI,QAAQ,IAAI,KAAK;AACrB,MAAI,SAAS,CAAC;AACd,MAAI;AAGJ,OAAK;AAEL,SAAO,KAAK,MAAM,QAAQ;AACzB,SAAK,MAAM,IAAI;AAKf,QAAI,OAAO,QAAQ,OAAO,OAAQ,OAAO,KAAK;AAC7C,aACC,KAAK,MAAM,WACV,MAAM,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,OAAQ,MAAM,EAAE,MAAM,MAC1D;AACD;AAAA,MACD;AACA;AAAA,IACD;AAEA,QAAI,OAAO,KAAK;AACf,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,KAAK;AACf,aAAO,KAAK,EAAE,MAAM,IAAI,WAAW,CAAC;AACpC;AAAA,IACD;AAEA,QAAI,OAAO,KAAK;AACf;AACA,UAAI,OAAO,KAAK,GAAG;AAClB,eAAO,KAAKA,KAAI,KAAK,CAAC;AACtB;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,KAAK;AACf;AACA,UAAI,OAAO,KAAK,GAAG;AAClB,eAAO,KAAKA,KAAI,KAAK,CAAC;AACtB;AAAA,MACD;AACA,UAAI,SAAS,KAAK,GAAG;AACpB,eAAO,KAAK,EAAE,MAAM,IAAI,OAAO,OAAO,MAAM,KAAK,EAAE,CAAC;AACpD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,KAAK;AACf;AACA,UAAI,OAAO,KAAK,GAAG;AAClB,eAAO,KAAKA,KAAI,KAAK,CAAC;AACtB;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,KAAK;AACf,aACC,KAAK,MAAM,WACV,MAAM,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,OAAQ,MAAM,EAAE,MAAM,MAC1D;AACD;AAAA,MACD;AACA,UAAI;AACJ,UAAI,OAAO,KAAK,GAAG;AAClB,gBAAQA,KAAI,KAAK;AACjB,YAAI,MAAM,SAAS,IAAI,KAAK;AAC3B,iBAAO,KAAK,EAAE,MAAM,IAAI,OAAO,OAAO,MAAM,CAAC;AAC7C;AAAA,QACD;AAAA,MACD;AACA,UAAI,SAAS,KAAK,GAAG;AACpB,YAAI,MAAM,KAAK,MAAM,QAAQ;AAC5B,iBAAO,KAAK;AAAA,YACX,MAAM,IAAI;AAAA,YACV,OAAO,EAAE,MAAM,IAAI,MAAM,OAAO,OAAU;AAAA,UAC3C,CAAC;AACD;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,KAAK,KAAK,EAAE,GAAG;AAClB;AACA,aAAO,KAAKA,KAAI,KAAK,CAAC;AACtB;AAAA,IACD;AAEA,QAAI,oBAAoB,KAAK,EAAE,GAAG;AACjC;AACA,aAAO,KAAK,UAAU,KAAK,CAAC;AAC5B;AAAA,IACD;AAKA,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAEO,SAAS,iBAAiB,QAAQ;AACxC,SAAO,KAAK;AACZ,MAAI,QAAQ,OAAO,OAAO,IAAI;AAC9B,MAAI,CAAC,SAAS,MAAM,SAAS,IAAI,YAAY,MAAM,UAAU,SAAS;AACrE,WAAO;AAAA,EACR;AACA,UAAQ,OAAO,OAAO,IAAI;AAC1B,MAAI,MAAM,SAAS,IAAI,OAAO;AAC7B,WAAO;AAAA,EACR;AACA,QAAM,OAAO,cAAc,MAAM,KAAK;AACtC,MAAI,CAAC,MAAM;AACV,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,KAAK;AACnB,QAAM,SAAS,cAAc,QAAQ,KAAK;AAC1C,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AACA,QAAM,WAAW,QAAQ,IAAI,EAAE;AAC/B,WAAS,KAAK,GAAGC,IAAG,IAAI,KAAK,SAAS,QAAQ,MAAM;AACnD,IAAAA,KAAI,OAAO,EAAE;AACb,SAAK,SAAS,EAAE;AAChB,QAAIA,GAAE,SAAS,IAAI,MAAM;AACxB,UAAI,EAAE,IAAIA,GAAE,SAAS,IAAI,SAASA,GAAE,QAAQA,GAAE,QAAQ;AACtD,UAAI,OAAO,SAAS;AACnB,YAAI,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,cAAc,QAAQ,YAAY;AAC1C,QAAM,SAAS,CAAC;AAChB,MAAI;AACJ,SAAO,OAAO,KAAK,OAAO,QAAQ;AACjC,YAAQ,OAAO,OAAO,IAAI;AAC1B,QACC,MAAM,SAAS,IAAI,QACnB,MAAM,SAAS,IAAI,UACnB,MAAM,SAAS,IAAI,SACnB,MAAM,SAAS,IAAI,cAClB,cAAc,MAAM,SAAS,IAAI,KACjC;AACD,aAAO,KAAK,KAAK;AACjB;AAAA,IACD;AACA,QAAI,MAAM,SAAS,IAAI,YAAY;AAClC,UAAI,OAAO,KAAK,OAAO,QAAQ;AAC9B,eAAO;AAAA,MACR;AACA;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAEA,MAAI,OAAO,SAAS,KAAK,OAAO,SAAS,GAAG;AAC3C,WAAO;AAAA,EACR;AAEA,MAAI,OAAO,WAAW,GAAG;AACxB,QAAI,OAAO,CAAC,EAAE,SAAS,IAAI,OAAO;AACjC,aAAO;AAAA,IACR;AACA,WAAO,CAAC,IAAI,OAAO,CAAC,EAAE;AAAA,EACvB;AACA,MAAI,OAAO,WAAW,GAAG;AACxB,WAAO,KAAK,EAAE,MAAM,IAAI,MAAM,OAAO,OAAU,CAAC;AAAA,EACjD;AAEA,SAAO,OAAO,MAAM,CAAAA,OAAKA,GAAE,SAAS,IAAI,KAAK,IAAI,SAAS;AAC3D;AAEO,SAAS,kBAAkB,QAAQ,YAAY;AACrD,SAAO,KAAK;AACZ,MAAI,QAAQ,OAAO,OAAO,IAAI;AAC9B,MAAI,CAAC,SAAS,MAAM,SAAS,IAAI,UAAU;AAC1C,WAAO;AAAA,EACR;AACA,MAAI,SAAS,cAAc,QAAQ,UAAU;AAC7C,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AACA,SAAO,QAAQ,MAAM,KAAK;AAC1B,SAAO;AACR;AAEA,IAAM,QAAQ,WAAS;AACtB,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO;AAAA,EACR;AACA,QAAM,SAAS,SAAS,KAAK;AAC7B,QAAM,SAAS,SAAS,kBAAkB,QAAQ,IAAI,IAAI;AAC1D,MAAI,SAAS;AACb,MAAI,IAAI;AACR,MAAI,MAAM,QAAQ;AAClB,SAAO,IAAI,KAAK;AACf,SAAK,SAAS,QAAQ,GAAG,EAAE,OAAO,MAAM,OAAO,QAAW;AACzD,aAAO;AAAA,IACR;AAAA,EACD;AACA,SAAO,SAAS,iBAAiB,MAAM,IAAI;AAC5C;AAEA,IAAO,gBAAQ;;;ACvWf,SAAS,SAAS,OAAO,QAAQ;AAChC,MAAI,CAAC,UAAW,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,QAAS;AAC7D,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,QAAM,CAAC,EAAEC,IAAG,GAAG,GAAG,KAAK,IAAI;AAC3B,MAAIA,GAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK;AACnE,WAAO;AAAA,EACR;AACA,MAAIA,GAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAIA,GAAE,SAAS,IAAI,SAASA,GAAE,QAAQ,MAAMA,GAAE,QAAQ;AAAA,EAC3D;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAQ,MAAM,EAAE,QAAQ;AAAA,EAC3D;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAQ,MAAM,EAAE,QAAQ;AAAA,EAC3D;AACA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,mBAAQ;;;ACjCf,IAAM,mBAAmB,CAAAC,OACxBA,OAAM,gBACH,EAAE,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,EAAE,IAC1C;AAEJ,IAAO,2BAAQ;;;ACLf,IAAMC,QAAO,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,IAAI;;;ACAvC,IAAM,cAAc,SAAO;AAC1B,MAAI,UAAU,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,IAAI,SAAS,GAAG,KAAK;AACxC,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI,IAAI,IAAI,CAAC;AACjB,QAAI,MAAM,UAAa,MAAM,QAAW;AACvC,cAAQ,KAAK,MAAS;AAAA,IACvB,WAAW,MAAM,UAAa,MAAM,QAAW;AAC9C,cAAQ,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,IACpB,OAAO;AACN,cAAQ,KAAK,MAAM,SAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,IAC/C;AAAA,EACD;AACA,SAAO;AACR;AAEA,IAAM,wBAAwB,kBAAgB,SAAO;AACpD,MAAI,UAAU,YAAY,GAAG;AAC7B,SAAO,OAAK;AACX,QAAI,MAAM,IAAI,QAAQ;AACtB,QAAI,MAAM,KAAK,IAAI,QAAQ,SAAS,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC;AACnE,QAAI,OAAO,QAAQ,GAAG;AACtB,WAAO,SAAS,SACb,SACA,aAAa,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,GAAG;AAAA,EAC5C;AACD;;;ACvBO,IAAM,qBAAqB,sBAAsBC,KAAI;;;ACH5D,IAAM,aAAa,SAAO;AACzB,MAAI,eAAe;AACnB,MAAI,MAAM,IAAI,IAAI,OAAK;AACtB,QAAI,MAAM,QAAW;AACpB,qBAAe;AACf,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR,CAAC;AACD,SAAO,eAAe,MAAM;AAC7B;;;ACEA,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,WAAW;AAAA,EACX,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,EACP,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC1B,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAC3B;AAEA,IAAO,qBAAQ;;;AC1Bf,IAAM,YAAY,CAAC,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC;AAE3E,IAAM,oBAAoB,CAAAC,SAAO;AAChC,MAAIC,KAAI,UAAUD,KAAI,CAAC;AACvB,MAAI,IAAI,UAAUA,KAAI,CAAC;AACvB,MAAI,IAAI,UAAUA,KAAI,CAAC;AACvB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqBC,KACrB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,oBAAoBA,KACpB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,qBAAqBA,KACrB,qBAAqB,IACrB,qBAAqB;AAAA,EACvB;AACA,MAAID,KAAI,UAAU,QAAW;AAC5B,QAAI,QAAQA,KAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC5Bf,IAAM,QAAQ,OAAK,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC;AAEjE,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,MACF,IAAI,qBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,MACF,IAAI,sBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,MACF,IAAI,qBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,EACD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACtCf,IAAM,KAAK,CAACE,KAAI,MAAM;AACrB,QAAMC,OAAM,KAAK,IAAID,EAAC;AACtB,MAAIC,QAAO,SAAS;AACnB,WAAOD,KAAI;AAAA,EACZ;AACA,UAAQ,KAAK,KAAKA,EAAC,KAAK,KAAK,KAAK,KAAKC,OAAM,SAAS,OAAO,GAAG;AACjE;AAEA,IAAM,mBAAmB,CAAC,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,MAAM;AAChD,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAG,GAAGA,EAAC;AAAA,IACP,GAAG,GAAG,CAAC;AAAA,IACP,GAAG,GAAG,CAAC;AAAA,EACR;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,2BAAQ;;;ACRf,IAAM,oBAAoB,CAAAC,SAAO;AAChC,MAAI,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,IAAI,yBAAiBD,IAAG;AAC7C,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqBC,KACrB,oBAAoB,IACpB,qBAAqB;AAAA,IACtB,GACC,qBAAqBA,KACrB,oBAAoB,IACpB,qBAAqB;AAAA,IACtB,GACC,qBAAqBA,KACrB,oBAAoB,IACpB,qBAAqB;AAAA,EACvB;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AClCf,IAAMC,MAAK,CAACC,KAAI,MAAM;AACrB,QAAMC,OAAM,KAAK,IAAID,EAAC;AACtB,MAAIC,OAAM,UAAW;AACpB,YAAQ,KAAK,KAAKD,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAIC,MAAK,IAAI,GAAG,IAAI;AAAA,EAChE;AACA,SAAOD,KAAI;AACZ;AAEA,IAAM,mBAAmB,CAAC,EAAE,GAAAE,IAAG,GAAG,GAAG,MAAM,GAAG,OAAO,UAAU;AAC9D,MAAI,MAAM;AAAA,IACT;AAAA,IACA,GAAGH,IAAGG,EAAC;AAAA,IACP,GAAGH,IAAG,CAAC;AAAA,IACP,GAAGA,IAAG,CAAC;AAAA,EACR;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,2BAAQ;;;ACRf,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,yBAAiB;AAAA,IAC1B,GACC,IAAI,qBACJ,IAAI,oBACJ,qBAAqB;AAAA,IACtB,GACC,IAAI,sBACJ,IAAI,qBACJ,qBAAqB;AAAA,IACtB,GACC,IAAI,qBACJ,IAAI,qBACJ,qBAAqB;AAAA,EACvB,CAAC;AACD,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC5Bf,IAAMI,cAAa;AAAA,EAClB,GAAG;AAAA,EACH,MAAM;AAAA,EACN,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,KAAK,WAAS,0BAAkB,0BAAkB,KAAK,CAAC;AAAA,IACxD,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAAA,IACP,KAAK,WAAS,0BAAkB,0BAAkB,KAAK,CAAC;AAAA,IACxD,OAAO;AAAA,EACR;AACD;AAEA,IAAOC,sBAAQD;;;ACxBf,IAAM,eAAe,CAAAE,UAASA,OAAMA,OAAM,OAAO,IAAIA,OAAM,MAAMA;AAEjE,IAAO,uBAAQ;;;ACAf,IAAMC,OAAM,CAAC,MAAMC,QAAO;AACzB,SAAO,KACL,IAAI,CAACD,MAAK,KAAK,QAAQ;AACvB,QAAIA,SAAQ,QAAW;AACtB,aAAOA;AAAA,IACR;AACA,QAAI,aAAa,qBAAaA,IAAG;AACjC,QAAI,QAAQ,KAAK,KAAK,MAAM,CAAC,MAAM,QAAW;AAC7C,aAAO;AAAA,IACR;AACA,WAAOC,IAAG,aAAa,qBAAa,IAAI,MAAM,CAAC,CAAC,CAAC;AAAA,EAClD,CAAC,EACA,OAAO,CAAC,KAAK,SAAS;AACtB,QACC,CAAC,IAAI,UACL,SAAS,UACT,IAAI,IAAI,SAAS,CAAC,MAAM,QACvB;AACD,UAAI,KAAK,IAAI;AACb,aAAO;AAAA,IACR;AACA,QAAI,KAAK,OAAO,IAAI,IAAI,SAAS,CAAC,CAAC;AACnC,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AACP;AAEA,IAAM,kBAAkB,SACvBD,KAAI,KAAK,OAAM,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,CAAE;;;AC7BzD,IAAM,IAAI,CAAC,UAAU,SAAS,UAAU,UAAU,SAAS,CAAC;AAE5D,IAAM,WAAW,KAAK,KAAK;AAC3B,IAAM,WAAW,MAAM,KAAK;;;ACYnC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACnB,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACnB,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAEnC,IAAM,wBAAwB,CAAC,EAAE,GAAAE,IAAG,GAAG,GAAG,MAAM,MAAM;AACrD,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,KAAK,OAAO,IAAIA,KAAI,KAAK,IAAI,OAAO,OAAO,KAAK;AACpD,MAAI,IAAI,IAAI;AACZ,MAAI,KAAK,EAAE,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;AAEzC,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,GACC,MAAM,KAAK,MAAM,IACd,SACA,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI;AAAA,EACjD;AAEA,MAAI,IAAI,EAAG,KAAI,IAAI,KAAK,MAAM,GAAG,CAAC,IAAI,WAAW;AACjD,MAAI,UAAU,OAAW,KAAI,QAAQ;AAErC,SAAO;AACR;AAEA,IAAO,gCAAQ;;;ACxCf,IAAM,wBAAwB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACrD,MAAI,MAAM,EAAE,MAAM,MAAM;AAExB,OAAK,MAAM,SAAY,IAAI,IAAI,OAAO;AACtC,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,MAAM,MAAM,SAAY,IAAI,IAAI,KAAK,IAAI;AAE7C,MAAI,OAAO,KAAK,IAAI,CAAC;AACrB,MAAI,OAAO,KAAK,IAAI,CAAC;AAErB,MAAI,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI;AACxC,MAAI,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI;AACxC,MAAI,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI;AAExC,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,gCAAQ;;;ACjBf,IAAM,0BAA0B,CAAC,KAAK,QAAQ;AAC7C,MAAI,IAAI,MAAM,UAAa,IAAI,MAAM,UAAa,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG;AACnE,WAAO;AAAA,EACR;AACA,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,KAAK,KAAK,KAAO,QAAQ,QAAQ,OAAO,IAAK,KAAK,KAAM,GAAG;AAC/D,SAAO,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI;AACvC;AAEA,IAAM,qBAAqB,CAAC,KAAK,QAAQ;AACxC,MAAI,IAAI,MAAM,UAAa,IAAI,MAAM,QAAW;AAC/C,WAAO;AAAA,EACR;AACA,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,KAAK;AAElC,WAAO,SAAS,QAAQ,MAAM,KAAK,KAAK,QAAQ,KAAK;AAAA,EACtD;AACA,SAAO,QAAQ;AAChB;AAEA,IAAM,sBAAsB,CAAC,KAAK,QAAQ;AACzC,MAAI,IAAI,MAAM,UAAa,IAAI,MAAM,UAAa,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG;AACnE,WAAO;AAAA,EACR;AACA,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,QAAQ,qBAAa,IAAI,CAAC;AAC9B,MAAI,KAAK,KAAK,KAAO,QAAQ,QAAQ,OAAO,IAAK,KAAK,KAAM,GAAG;AAC/D,SAAO,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI;AACvC;;;AChCA,IAAM,eAAe,SAAO;AAE3B,MAAI,MAAM,IAAI;AAAA,IACb,CAACC,MAAKC,SAAQ;AACb,UAAIA,SAAQ,QAAW;AACtB,YAAI,MAAOA,OAAM,KAAK,KAAM;AAC5B,QAAAD,KAAI,OAAO,KAAK,IAAI,GAAG;AACvB,QAAAA,KAAI,OAAO,KAAK,IAAI,GAAG;AAAA,MACxB;AACA,aAAOA;AAAA,IACR;AAAA,IACA,EAAE,KAAK,GAAG,KAAK,EAAE;AAAA,EAClB;AACA,MAAI,QAAS,KAAK,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,MAAO,KAAK;AACxD,SAAO,QAAQ,IAAI,MAAM,QAAQ;AAClC;;;ACuBA,IAAME,cAAa;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO,CAAC,aAAa;AAAA,EACrB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,GAAG,CAAC;AAAA,EACT;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,MACF,KAAK;AAAA,MACL,OAAO;AAAA,IACR;AAAA,IACA,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQD;;;AC5Ef,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,OAAO,UAAU;AAC7D,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIE,KAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,MAAI,MAAM,EAAE,MAAM,GAAG,GAAAA,GAAE;AACvB,MAAIA,GAAG,KAAI,IAAI,qBAAc,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,EAAE;AAC9D,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACZf,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAAC,IAAG,GAAG,MAAM,GAAG,OAAO,UAAU;AAC7D,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT;AAAA,IACA;AAAA,IACA,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,IAC3C,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,EAC5C;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACjBR,IAAM,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AACzC,IAAM,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC;;;ACOzC,IAAM,MAAM;AAAA,EAClB,GAAG,SAAS;AAAA,EACZ,GAAG;AAAA,EACH,IAAI,IAAI,SAAS,UAAU;AAC5B;AAEO,IAAM,MAAM;AAAA,EAClB,GAAG,SAAS;AAAA,EACZ,GAAG;AAAA,EACH,IAAI,IAAI,SAAS,SAAS;AAC3B;AAEO,IAAMC,KAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AACzC,IAAMC,KAAI,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC;;;AClBhD,IAAIC,MAAK,OAAM,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,IAAI,MAAM;AAEtE,IAAM,sBAAsB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACnD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,MAAM,IAAI,MAAM;AACpB,MAAI,KAAK,IAAI,MAAM;AACnB,MAAI,KAAK,KAAK,IAAI;AAElB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGA,IAAG,EAAE,IAAI,IAAI;AAAA,IAChB,GAAGA,IAAG,EAAE,IAAI,IAAI;AAAA,IAChB,GAAGA,IAAG,EAAE,IAAI,IAAI;AAAA,EACjB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,8BAAQ;;;ACzBf,IAAM,oBAAoB,CAAAC,SAAO,0BAAkB,4BAAoBA,IAAG,CAAC;AAE3E,IAAO,4BAAQ;;;ACFf,IAAM,IAAI,WAAU,QAAQ,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,QAAQ,MAAM;AAEtE,IAAM,sBAAsB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACnD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,KAAK,EAAE,IAAI,IAAI,CAAC;AACpB,MAAI,KAAK,EAAE,IAAI,IAAI,CAAC;AACpB,MAAIC,MAAK,EAAE,IAAI,IAAI,CAAC;AAEpB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAG,MAAM,KAAK;AAAA,IACd,GAAG,OAAO,KAAK;AAAA,IACf,GAAG,OAAO,KAAKA;AAAA,EAChB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,8BAAQ;;;ACxBf,IAAM,oBAAoB,CAAAC,SAAO;AAChC,MAAI,MAAM,4BAAoB,0BAAkBA,IAAG,CAAC;AAKpD,MAAIA,KAAI,MAAMA,KAAI,KAAKA,KAAI,MAAMA,KAAI,GAAG;AACvC,QAAI,IAAI,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACfR,IAAM,KAAK;AACX,IAAM,MAAM;AACZ,IAAM,SAAK,KAAK,MAAO,KAAK;AAC5B,IAAM,YAAO,KAAK,IAAI,MAAC;AACvB,IAAM,YAAO,KAAK,IAAI,MAAC;AACvB,IAAM,SAAS,MAAM,KAAK,IAAI,MAAM,GAAG;;;ACE9C,IAAM,qBAAqB,CAAC,EAAE,GAAG,GAAAC,IAAG,GAAG,MAAM,MAAM;AAClD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,IAAI,KAAK,IAAK,IAAI,KAAM,MAAM,IAAI,KAAK;AAAA,EACxC;AAEA,MAAI,KAAK,KAAK,IAAI,SAASA,KAAI,MAAM,EAAE,IAAI,KAAK;AAChD,MAAIC,KAAI,IAAI,KAAK,IAAK,IAAI,MAAO,KAAK,KAAK,MAAC;AAC5C,MAAIC,KAAI,IAAI,KAAK,IAAK,IAAI,MAAO,KAAK,KAAK,MAAC;AAC5C,MAAI,IAAID,KAAI,YAAQC,KAAI,OAAQ;AAChC,MAAI,IAAID,KAAI,YAAQC,KAAI,OAAQ;AAEhC,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,6BAAQ;;;AClBf,IAAM,qBAAqB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAClD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIC,KAAI,IAAI,YAAO,IAAI;AACvB,MAAIC,KAAI,QAAQ,IAAI,YAAO,IAAI;AAC/B,MAAI,IAAI,KAAK,KAAKD,KAAIA,KAAIC,KAAIA,EAAC;AAC/B,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAI,SAAS,KAAM,KAAK,IAAI,IAAI,QAAS,CAAC;AAAA,IAC1C,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,SAAS,MAAM;AAAA,EAC9C;AAEA,MAAI,IAAI,GAAG;AACV,QAAI,IAAI,sBAAe,KAAK,MAAMA,IAAGD,EAAC,IAAI,UAAK,KAAK,KAAM,GAAG;AAAA,EAC9D;AAEA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,6BAAQ;;;ACpBf,IAAM,qBAAqB,CAAAE,OAAK,2BAAmB,wBAAgBA,IAAG,MAAM,CAAC;AAC7E,IAAM,qBAAqB,CAAAA,OAAK,wBAAgB,2BAAmBA,EAAC,GAAG,MAAM;AAE7E,IAAMC,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,OAAO,CAAC,cAAc;AAAA,EACtB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAAAD,OAAK,0BAAkB,mBAAmBA,EAAC,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAAAA,OAAK,mBAAmB,0BAAkBA,EAAC,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,QAAQ,MAAM;AAAA,IAClB,GAAG,CAAC,SAAS,MAAM;AAAA,EACpB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,IACR;AAAA,EACD;AACD;AAEA,IAAOE,sBAAQD;;;AClCf,IAAME,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,OAAO,CAAC,cAAc;AAAA,EACtB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,MAAM,CAAAC,OAAK,wBAAgBA,IAAG,MAAM;AAAA,IACpC,KAAK,CAAAA,OAAK,0BAAkB,2BAAmBA,EAAC,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,MAAM,CAAAA,OAAK,wBAAgBA,IAAG,MAAM;AAAA,IACpC,KAAK,CAAAA,OAAK,2BAAmB,0BAAkBA,EAAC,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,MAAM;AAAA,IACb,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,MACF,KAAK;AAAA,MACL,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQF;;;ACzDA,SAAR,gBAAiC,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAI,qBAAa,MAAM,SAAY,IAAI,CAAC;AACxC,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIG,KAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AACnC,MAAI;AACJ,UAAQ,KAAK,MAAM,IAAI,EAAE,GAAG;AAAA,IAC3B,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,QAC/B,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,QAC3C,GAAG,KAAK,IAAI;AAAA,MACb;AACA;AAAA,IACD,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,QAC3C,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,QAC/B,GAAG,KAAK,IAAI;AAAA,MACb;AACA;AAAA,IACD,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI;AAAA,QACZ,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,QAC/B,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,MAC5C;AACA;AAAA,IACD,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI;AAAA,QACZ,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,QAC3C,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,MAChC;AACA;AAAA,IACD,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,QAC3C,GAAG,KAAK,IAAI;AAAA,QACZ,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,MAChC;AACA;AAAA,IACD,KAAK;AACJ,YAAM;AAAA,QACL,GAAG,KAAK,IAAI,KAAK,KAAK,IAAIA,MAAK;AAAA,QAC/B,GAAG,KAAK,IAAI;AAAA,QACZ,GAAG,KAAK,IAAI,KAAM,KAAK,IAAIA,OAAO,IAAIA,MAAK;AAAA,MAC5C;AACA;AAAA,IACD;AACC,YAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG;AAAA,EACzD;AAEA,MAAI,OAAO;AACX,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;AC1De,SAAR,gBAAiC,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIC,KAAI,KAAK,IAAID,IAAG,GAAG,CAAC,GACvB,IAAI,KAAK,IAAIA,IAAG,GAAG,CAAC;AACrB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGA,KAAI,IAAI,MAAM,IAAI,IAAI,IAAK,IAAI,KAAMA,KAAI,IAAI;AAAA,IAChD,IAAIA,KAAI,IAAI,KAAK;AAAA,EAClB;AACA,MAAIC,KAAI,MAAM;AACb,QAAI,KACFA,OAAMD,MACH,IAAI,MAAMC,KAAI,MAAM,IAAI,KAAK,IAC9BA,OAAM,KACL,IAAID,OAAMC,KAAI,KAAK,KACnBD,KAAI,MAAMC,KAAI,KAAK,KAAK;AAC9B,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;ACdA,IAAMC,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,OAAO,CAAC,OAAO;AAAA,EACf,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,EAEP,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQD;;;AC3CA,SAAR,gBAAiC,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAI,qBAAa,MAAM,SAAY,IAAI,CAAC;AACxC,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI;AACpC,MAAI,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AACxD,MAAI;AACJ,UAAQ,KAAK,MAAM,IAAI,EAAE,GAAG;AAAA,IAC3B,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG;AACpC;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG;AACpC;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG;AACpC;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG;AACpC;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG;AACpC;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG;AACpC;AAAA,IACD;AACC,YAAM,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG;AAAA,EACtD;AACA,MAAI,OAAO;AACX,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;ACjCe,SAAR,gBAAiC,EAAE,GAAAE,IAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIC,KAAI,KAAK,IAAID,IAAG,GAAG,CAAC,GACvB,IAAI,KAAK,IAAIA,IAAG,GAAG,CAAC;AACrB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGC,OAAM,IAAI,KAAKA,KAAI,MAAM,IAAI,KAAK,IAAIA,KAAI,IAAI,CAAC;AAAA,IAClD,GAAG,OAAOA,KAAI;AAAA,EACf;AACA,MAAIA,KAAI,MAAM;AACb,QAAI,KACFA,OAAMD,MACH,IAAI,MAAMC,KAAI,MAAM,IAAI,KAAK,IAC9BA,OAAM,KACL,IAAID,OAAMC,KAAI,KAAK,KACnBD,KAAI,MAAMC,KAAI,KAAK,KAAK;AAC9B,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;ACtBA,IAAM,WAAW,CAAC,KAAK,SAAS;AAC/B,UAAQ,MAAM;AAAA,IACb,KAAK;AACJ,aAAO,CAAC;AAAA,IACT,KAAK;AACJ,aAAQ,MAAM,KAAK,KAAM;AAAA,IAC1B,KAAK;AACJ,aAAQ,MAAM,KAAM;AAAA,IACrB,KAAK;AACJ,aAAO,MAAM;AAAA,EACf;AACD;AAEA,IAAO,cAAQ;;;ACNf,IAAM,UAAU,IAAI;AAAA,EACnB,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,eAAe,OAAO;AAC9D;AAEA,IAAM,iBAAiB,WAAS;AAC/B,MAAI,QAAQ,MAAM,MAAM,OAAO;AAC/B,MAAI,CAAC,MAAO;AACZ,MAAI,MAAM,EAAE,MAAM,MAAM;AAExB,MAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,QAAI,IAAI,CAAC,MAAM,CAAC;AAAA,EACjB,WAAW,MAAM,CAAC,MAAM,UAAa,MAAM,CAAC,MAAM,QAAW;AAC5D,QAAI,IAAI,YAAS,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,EACpC;AAEA,MAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,QAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AAAA,EAChD;AAEA,MAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,QAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AAAA,EAChD;AAEA,MAAI,MAAM,CAAC,MAAM,QAAW;AAC3B,QAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC;AAAA,EACpD,WAAW,MAAM,CAAC,MAAM,QAAW;AAClC,QAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EAC/C;AACA,SAAO;AACR;AAEA,IAAO,yBAAQ;;;ACpCf,SAAS,SAAS,OAAO,QAAQ;AAChC,MAAI,CAAC,UAAW,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,QAAS;AAC7D,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,QAAM,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI;AAE3B,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,YAAY;AAC9B,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE;AAAA,EACX;AAEA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE,QAAQ;AAAA,EACnB;AAEA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE,QAAQ;AAAA,EACnB;AAEA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,mBAAQ;;;ACjCf,IAAMC,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,EAEP,OAAO,CAAC,kBAAU,sBAAc;AAAA,EAChC,WAAW,CAAAC,OACV,OAAOA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACtCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,MAAM,MACvC,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,MAAM,MAAM,GAC/CA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AAAA,EAED,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQF;;;ACjDA,SAAR,gBAAiC,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAI,qBAAa,MAAM,SAAY,IAAI,CAAC;AACxC,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIG,KAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AACnC,MAAI;AACJ,UAAQ,KAAK,MAAM,IAAI,EAAE,GAAG;AAAA,IAC3B,KAAK;AACJ,YAAM,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI,IAAIA,KAAI,GAAG,KAAK,IAAI,GAAG;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,KAAK,IAAI,IAAIA,KAAI,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,IAAIA,IAAG;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAIA,KAAI,GAAG,EAAE;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,KAAK,IAAI,IAAIA,KAAI,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAIA,IAAG;AACjD;AAAA,IACD;AACC,YAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG;AAAA,EACzD;AACA,MAAI,OAAO;AACX,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;ACjCe,SAAR,gBAAiC,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIC,KAAI,KAAK,IAAID,IAAG,GAAG,CAAC,GACvB,IAAI,KAAK,IAAIA,IAAG,GAAG,CAAC;AACrB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGC,OAAM,IAAI,IAAI,IAAI,IAAIA;AAAA,IACzB,GAAGA;AAAA,EACJ;AACA,MAAIA,KAAI,MAAM;AACb,QAAI,KACFA,OAAMD,MACH,IAAI,MAAMC,KAAI,MAAM,IAAI,KAAK,IAC9BA,OAAM,KACL,IAAID,OAAMC,KAAI,KAAK,KACnBD,KAAI,MAAMC,KAAI,KAAK,KAAK;AAC9B,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;;;ACdA,IAAMC,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,OAAO,CAAC,OAAO;AAAA,EACf,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,EAEP,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQD;;;AClCA,SAAR,gBAAiC,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG;AAC3D,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,IAAI,IAAI,GAAG;AACd,QAAI,IAAI,IAAI;AACZ,SAAK;AACL,SAAK;AAAA,EACN;AACA,SAAO,gBAAgB;AAAA,IACtB;AAAA,IACA,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,EACD,CAAC;AACF;;;ACfe,SAAR,gBAAiC,MAAM;AAC7C,MAAIE,OAAM,gBAAgB,IAAI;AAC9B,MAAIA,SAAQ,OAAW,QAAO;AAC9B,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,IAAI,IAAI,KAAK;AAAA,IACb,GAAG,IAAI;AAAA,EACR;AACA,MAAIA,KAAI,MAAM,OAAW,KAAI,IAAIA,KAAI;AACrC,MAAIA,KAAI,UAAU,OAAW,KAAI,QAAQA,KAAI;AAC7C,SAAO;AACR;;;ACvBA,SAAS,SAAS,OAAO,QAAQ;AAChC,MAAI,CAAC,UAAU,OAAO,CAAC,MAAM,OAAO;AACnC,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,QAAM,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI;AAE3B,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,YAAY;AAC9B,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE;AAAA,EACX;AAEA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE,QAAQ;AAAA,EACnB;AAEA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE,QAAQ;AAAA,EACnB;AAEA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,mBAAQ;;;AClCf,IAAMC,cAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,EAEP,OAAO,CAAC,gBAAQ;AAAA,EAChB,WAAW,CAAAC,OACV,OAAOA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACtCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,MAAM,MACvC,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,MAAM,MAAM,GAC/CA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AAAA,EAED,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,sBAAQF;;;AC/CR,IAAM,KAAK;;;ACDX,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,KAAK;AAUX,SAAS,iBAAiB,GAAG;AACnC,MAAI,IAAI,EAAG,QAAO;AAClB,QAAMG,KAAI,KAAK,IAAI,GAAG,IAAI,EAAE;AAC5B,SAAO,MAAM,KAAK,IAAI,KAAK,IAAI,GAAGA,KAAI,EAAE,KAAK,KAAK,KAAKA,KAAI,IAAI,EAAE;AAClE;AAGO,SAAS,iBAAiB,GAAG;AACnC,MAAI,IAAI,EAAG,QAAO;AAClB,QAAMA,KAAI,KAAK,IAAI,IAAI,KAAK,EAAE;AAC9B,SAAO,KAAK,KAAK,KAAK,KAAKA,OAAM,IAAI,KAAKA,KAAI,EAAE;AACjD;;;AC1BA,IAAM,QAAQ,CAAAC,OAAK,KAAK,IAAIA,KAAI,IAAI,CAAC;AAErC,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAAC,IAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIA,OAAM,OAAW,CAAAA,KAAI;AAEzB,QAAM,IAAI;AAAA,IACT,IAAI,uBAAuB,IAAI,sBAAsBA;AAAA,EACtD;AACA,QAAM,IAAI;AAAA,IACT,IAAI,sBAAsB,IAAI,sBAAsBA;AAAA,EACrD;AACA,QAAM,IAAI;AAAA,IACT,IAAI,qBAAqB,IAAI,sBAAsBA;AAAA,EACpD;AAEA,QAAM,MAAM;AAAA,IACX,MAAM;AAAA,IACN,GAAG;AAAA,MACF,oBAAqB,IACpB,qBAAqB,IACrB,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,MACF,qBAAqB,IACpB,oBAAoB,IACpB,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,MACF,qBAAqB,IACpB,qBAAqB,IACrB,qBAAqB;AAAA,IACvB;AAAA,EACD;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC3Cf,IAAM,QAAQ,CAACC,KAAI,MAAM,KAAK,IAAIA,KAAI,IAAI,CAAC;AAE3C,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,IAAI;AAAA,IACT,qBAAqB,OACpB,qBAAqB,OACrB,qBAAqB;AAAA,EACvB;AACA,QAAM,IAAI;AAAA,IACT,sBAAsB,OACrB,qBAAqB,OACrB,qBAAqB;AAAA,EACvB;AACA,QAAM,IAAI;AAAA,IACT,qBAAqB,OACpB,qBAAqB,OACrB,qBAAqB;AAAA,EACvB;AAEA,QAAM,IAAI,MAAM,IAAI,MAAM;AAC1B,QAAM,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,iBAAiB;AACpE,QAAMC,KAAI,iBAAiB,IAAI,gBAAgB,IAAI,iBAAiB;AAEpE,QAAM,MAAM,EAAE,MAAM,OAAO,GAAG,GAAG,GAAAA,GAAE;AACnC,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACvBf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,WAAS,0BAAkB,0BAAkB,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,WAAS,0BAAkB,0BAAkB,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,QAAQ,KAAK;AAAA,IACjB,GAAG,CAAC,QAAQ,KAAK;AAAA,EAClB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;AC3Cf,IAAM,IAAI;AACV,IAAM,KAAK;AAKX,IAAM,cAAc,OAAK;AACxB,MAAI,IAAI,EAAG,QAAO;AAClB,MAAIE,MAAK,KAAK,IAAI,IAAI,KAAO,EAAC;AAC9B,SAAO,KAAK,KAAK,KAAK,KAAKA,QAAO,IAAI,KAAKA,MAAK,CAAC;AAClD;AAGA,IAAM,MAAM,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC;AAE1C,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,IAAI,CAAC;AACT,MAAI,IAAI,CAAC;AACT,MAAI,IAAI,CAAC;AAET,MAAI,KAAK,OAAO,IAAI,OAAO;AAC3B,MAAI,KAAK,OAAO,IAAI,OAAO;AAE3B,MAAI,IAAI,YAAY,aAAa,KAAK,WAAW,KAAK,WAAW,CAAC;AAClE,MAAI,IAAI,YAAY,WAAW,KAAK,WAAW,KAAK,YAAY,CAAC;AACjE,MAAI,IAAI,YAAY,aAAa,KAAK,SAAS,KAAK,YAAY,CAAC;AAEjE,MAAI,KAAK,IAAI,KAAK;AAElB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAI,OAAO,KAAM,IAAI,OAAO,KAAK;AAAA,IACjC,GAAG,QAAQ,IAAI,WAAW,IAAI,WAAW;AAAA,IACzC,GAAG,WAAW,IAAI,WAAW,IAAI,WAAW;AAAA,EAC7C;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC3Cf,IAAMC,KAAI;AACV,IAAMC,MAAK;AAKX,IAAM,cAAc,OAAK;AACxB,MAAI,IAAI,EAAG,QAAO;AAClB,MAAI,KAAK,KAAK,IAAI,GAAG,IAAID,EAAC;AAC1B,SAAO,MAAQ,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,IAAI,EAAC;AAC1D;AAEA,IAAM,MAAM,OAAK,IAAI;AAErB,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,KAAK,IAAIC,QAAO,OAAO,QAAQ,IAAIA;AAEvC,MAAI,IAAI,YAAY,IAAI,aAAa,IAAI,cAAc,CAAC;AACxD,MAAI,IAAI,YAAY,IAAI,aAAa,IAAI,cAAc,CAAC;AACxD,MAAI,IAAI,YAAY,IAAI,cAAc,IAAI,YAAY,CAAC;AAEvD,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,MACF,oBAAoB,IACnB,oBAAoB,IACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,GAAG;AAAA,MACF,sBAAsB,IACrB,oBAAoB,IACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,GAAG,IAAI,eAAe,IAAI,aAAa,IAAI,YAAY,CAAC;AAAA,EACzD;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACrCf,IAAM,kBAAkB,CAAAC,SAAO;AAC9B,MAAI,MAAM,0BAAkB,0BAAkBA,IAAG,CAAC;AAClD,MAAIA,KAAI,MAAMA,KAAI,KAAKA,KAAI,MAAMA,KAAI,GAAG;AACvC,QAAI,IAAI,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACff,IAAM,kBAAkB,WAAS,0BAAkB,0BAAkB,KAAK,CAAC;AAE3E,IAAO,0BAAQ;;;ACgBf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,OAAO,CAAC,UAAU;AAAA,EAClB,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,KAAK;AAAA,IACL,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,QAAQ,KAAK;AAAA,IACjB,GAAG,CAAC,QAAQ,KAAK;AAAA,EAClB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;AClDf,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAC/C,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIE,KAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,GAAAA;AAAA,EACD;AACA,MAAIA,IAAG;AACN,QAAI,IAAI,qBAAc,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,EAAE;AAAA,EACxD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACpBf,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAAC,IAAG,GAAG,MAAM,MAAM;AAC/C,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,IAC3C,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,EAC5C;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACDf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,OAAO,CAAC,UAAU;AAAA,EAClB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,KAAK,CAAAC,OAAK,wBAAgB,wBAAgBA,EAAC,CAAC;AAAA,EAC7C;AAAA,EAEA,UAAU;AAAA,IACT,KAAK,CAAAA,OAAK,wBAAgB,wBAAgBA,EAAC,CAAC;AAAA,IAC5C,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,GAAG,IAAI;AAAA,IACX,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,uBAAQF;;;ACnDR,IAAMG,KAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AACzC,IAAMC,KAAI,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC;;;ACEhD,IAAIC,MAAK,OAAM,KAAK,IAAI,GAAG,CAAC,IAAIC,KAAI,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,IAAI,MAAMC;AAEtE,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,IAAI,MAAM;AACpB,MAAI,KAAK,IAAI,MAAM;AACnB,MAAI,KAAK,KAAK,IAAI;AAElB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGF,IAAG,EAAE,IAAI,IAAI;AAAA,IAChB,GAAGA,IAAG,EAAE,IAAI,IAAI;AAAA,IAChB,GAAGA,IAAG,EAAE,IAAI,IAAI;AAAA,EACjB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACjBf,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,yBAAiB;AAAA,IAC1B,GACC,IAAI,qBACJ,IAAI,qBACJ,qBAAqB;AAAA,IACtB,GACC,IAAI,qBACJ,IAAI,oBACJ,sBAAsB;AAAA,IACvB,GACC,IAAI,sBACJ,IAAI,qBACJ,oBAAoB;AAAA,EACtB,CAAC;AACD,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC/Bf,IAAM,kBAAkB,CAAAG,SAAO,0BAAkB,0BAAkBA,IAAG,CAAC;AAEvE,IAAO,0BAAQ;;;ACMf,IAAM,oBAAoB,CAAAC,SAAO;AAChC,MAAI,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,IAAI,yBAAiBD,IAAG;AAC7C,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,oBAAoBC,KACpB,qBAAqB,IACrB,sBAAsB;AAAA,IACvB,GACC,sBAAsBA,KACtB,qBAAqB,IACrB,sBAAsB;AAAA,IACvB,GACC,uBAAuBA,KACvB,sBAAsB,IACtB,qBAAqB;AAAA,EACvB;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;AC/Bf,IAAMC,KAAI,WAAU,QAAQC,KAAI,KAAK,KAAK,KAAK,KAAKC,KAAI,QAAQ,MAAM;AAEtE,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,KAAKF,GAAE,IAAI,IAAI,CAAC;AACpB,MAAI,KAAKA,GAAE,IAAI,IAAI,CAAC;AACpB,MAAIG,MAAKH,GAAE,IAAI,IAAI,CAAC;AAEpB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAG,MAAM,KAAK;AAAA,IACd,GAAG,OAAO,KAAK;AAAA,IACf,GAAG,OAAO,KAAKG;AAAA,EAChB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACxBf,IAAM,kBAAkB,CAAAC,SAAO;AAC9B,MAAI,MAAM,0BAAkB,0BAAkBA,IAAG,CAAC;AAKlD,MAAIA,KAAI,MAAMA,KAAI,KAAKA,KAAI,MAAMA,KAAI,GAAG;AACvC,QAAI,IAAI,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACbf,SAAS,SAAS,OAAO,QAAQ;AAChC,MAAI,CAAC,UAAU,OAAO,CAAC,MAAM,OAAO;AACnC,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,QAAM,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI;AAC3B,MAAI,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK;AACnE,WAAO;AAAA,EACR;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG;AAAA,EAC3C;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAS,EAAE,QAAQ,MAAO;AAAA,EAC7D;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAS,EAAE,QAAQ,MAAO;AAAA,EAC7D;AACA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,mBAAQ;;;ACzBf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,MAAM,GAAG;AAAA,IACb,GAAG,CAAC,MAAM,GAAG;AAAA,EACd;AAAA,EAEA,OAAO,CAAC,gBAAQ;AAAA,EAChB,WAAW,CAAAC,OACV,OAAOA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACtCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAC3B,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,GACnCA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AAAA,EAED,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQF;;;ACvCf,IAAMG,eAAa;AAAA,EAClB,GAAGC;AAAA,EACH,MAAM;AAAA,EAEN,OAAO,CAAC,WAAW;AAAA,EACnB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,MAAM,GAAG;AAAA,IACb,GAAG,CAAC,MAAM,GAAG;AAAA,EACd;AACD;AAEA,IAAOA,uBAAQD;;;AC5Bf,SAAS,SAAS,OAAO,QAAQ;AAChC,MAAI,CAAC,UAAU,OAAO,CAAC,MAAM,OAAO;AACnC,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,QAAM,CAAC,EAAE,GAAGE,IAAG,GAAG,KAAK,IAAI;AAC3B,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,GAAG;AAAA,EAC3C;AACA,MAAIA,GAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,KAAK;AAAA,MACZ;AAAA,MACAA,GAAE,SAAS,IAAI,SAASA,GAAE,QAASA,GAAE,QAAQ,MAAO;AAAA,IACrD;AAAA,EACD;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,YAAY;AAC9B,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE;AAAA,EACX;AACA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,mBAAQ;;;AC5Bf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,KAAK,CAAAC,OAAK,wBAAgB,wBAAgBA,EAAC,CAAC;AAAA,EAC7C;AAAA,EAEA,UAAU;AAAA,IACT,KAAK,CAAAA,OAAK,wBAAgB,wBAAgBA,EAAC,CAAC;AAAA,IAC5C,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,OAAO,CAAC,gBAAQ;AAAA,EAChB,WAAW,CAAAA,OACV,OAAOA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACtCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAC3B,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,GACnCA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AAAA,EAED,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,uBAAQF;;;AClDf,IAAMG,eAAa;AAAA,EAClB,GAAGC;AAAA,EACH,MAAM;AAAA,EAEN,OAAO,CAAC,WAAW;AAAA,EACnB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,OAAO,CAAAC,OAAK,wBAAgBA,IAAG,OAAO;AAAA,IACtC,KAAK,CAAAA,OAAK,0BAAkB,wBAAgBA,IAAG,OAAO,CAAC;AAAA,EACxD;AAAA,EAEA,UAAU;AAAA,IACT,KAAK,CAAAA,OAAK,wBAAgB,0BAAkBA,EAAC,GAAG,OAAO;AAAA,IACvD,OAAO,CAAAA,OAAK,wBAAgBA,IAAG,OAAO;AAAA,EACvC;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AACD;AAEA,IAAOD,uBAAQD;;;AC5Bf,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAIG,KAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,GAAGA;AAAA,EACJ;AACA,MAAIA,IAAG;AACN,QAAI,IAAI,qBAAc,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,EAAE;AAAA,EACxD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACpBf,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAAC,IAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,IAC3C,GAAGA,KAAIA,KAAI,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE,IAAI;AAAA,EAC5C;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACXR,IAAM,OAAO,CAAC,GAAG,GAAG,MAAO,IAAI,KAAM,IAAI,KAAK,IAAI,IAAI;AACtD,IAAM,OAAO,CAAC,GAAG,GAAG,MAAO,IAAI,KAAM,IAAI,KAAK,IAAI,IAAI;AAEtD,IAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,IAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,IAAM,OAAO,WAAU,SAASC,KAAIC,KAAI,QAAQ,MAAM,KAAK,KAAK,KAAK,IAAI;AAEzE,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,IAAI,KAAK,IAAI,IAAI,CAAC;AACtB,MAAI,IAAI,KAAK,GAAG,GAAG,CAAC;AACpB,MAAI,IAAI,KAAK,GAAG,GAAG,CAAC;AAGpB,MAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;AACjC,QAAI,IAAI,IAAI;AAAA,EACb,OAAO;AACN,QAAI,KAAK,KAAK,IAAI;AAClB,QAAI,KAAK,KAAK,IAAI;AAAA,EACnB;AAEA,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACtCR,IAAMC,QAAO,CAAC,GAAG,GAAG,MAAO,IAAI,KAAM,IAAI,KAAK,IAAI,IAAI;AACtD,IAAMC,QAAO,CAAC,GAAG,GAAG,MAAO,IAAI,KAAM,IAAI,KAAK,IAAI,IAAI;AAEtD,IAAMC,MAAKF,MAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,IAAMG,MAAKF,MAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,IAAM,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACjD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,GAAG;AACZ,WAAO,EAAE,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC1C;AAEA,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,KAAK,KAAK,KAAK,KAAKC;AACxB,MAAI,KAAK,KAAK,KAAK,KAAKC;AACxB,MAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAIC,KAAI,KAAK,KAAK,IAAI,MAAM,KAAK,CAAC;AAC5D,MAAI,IAAK,KAAK,IAAI,OAAQ,IAAI;AAC9B,MAAI,IAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAQ,IAAI;AAE7C,MAAI,MAAM,EAAE,MAAM,SAAS,GAAG,GAAG,EAAE;AACnC,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACVf,IAAM,oBAAoB,CAAAC,SACzB,0BAAkB,0BAAkB,0BAAkBA,IAAG,CAAC,CAAC;AAC5D,IAAM,oBAAoB,CAAAC,WACzB,0BAAkB,0BAAkB,0BAAkBA,MAAK,CAAC,CAAC;AAE9D,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,OAAO;AAAA,IACd,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG,EAAE,KAAK,oBAAoB,OAAO,gBAAgB;AAAA,IACrD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AAAA,EAEA,YAAY;AAAA,IACX,GAAG;AAAA,EACJ;AAAA,EAEA,SAAS;AAAA,IACR,GAAG;AAAA,EACJ;AACD;AAEA,IAAOC,uBAAQD;;;AC/Df,IAAME,eAAa;AAAA,EAClB,GAAG;AAAA,EACH,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,OAAO,CAAC,aAAa;AAAA,EACrB,WAAW;AACZ;AAEA,IAAOC,uBAAQD;;;ACHf,IAAME,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAAAC,SAAO,0BAAkB,0BAAkBA,IAAG,CAAC;AAAA,EACrD;AAAA,EAEA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAAAC,SAAO,0BAAkB,0BAAkBA,IAAG,CAAC;AAAA,EACrD;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,OAAO,CAAC,OAAO;AAAA,EACf,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,SAAS,OAAO;AAAA,IACpB,GAAG,CAAC,UAAU,MAAM;AAAA,EACrB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQH;;;ACjDf,IAAM,qBAAqB,CAAC,EAAE,GAAAI,IAAG,GAAG,GAAG,MAAM,MAAM;AAClD,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,IAAI,KAAK;AAAA,IACZ,oBAAoBA,KAAI,qBAAqB,IAAI,qBAAqB;AAAA,EACvE;AACA,MAAIC,KAAI,KAAK;AAAA,IACZ,qBAAqBD,KAAI,qBAAqB,IAAI,qBAAqB;AAAA,EACxE;AACA,MAAI,IAAI,KAAK;AAAA,IACZ,qBAAqBA,KAAI,qBAAqB,IAAI,qBAAqB;AAAA,EACxE;AAEA,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,oBAAoB,IACpB,qBAAqBC,KACrB,qBAAqB;AAAA,IACtB,GACC,qBAAqB,IACrB,mBAAqBA,KACrB,oBAAoB;AAAA,IACrB,GACC,qBAAqB,IACrB,qBAAqBA,KACrB,qBAAqB;AAAA,EACvB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,6BAAQ;;;ACnCf,IAAM,oBAAoB,CAAAC,SAAO;AAChC,MAAI,MAAM,2BAAmB,yBAAiBA,IAAG,CAAC;AAClD,MAAIA,KAAI,MAAMA,KAAI,KAAKA,KAAI,MAAMA,KAAI,GAAG;AACvC,QAAI,IAAI,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAO,4BAAQ;;;ACXf,IAAM,qBAAqB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAClD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AAEzB,MAAI,IAAI,KAAK,IAAI,IAAI,qBAAqB,IAAI,qBAAqB,GAAG,CAAC;AACvE,MAAIC,KAAI,KAAK,IAAI,IAAI,qBAAqB,IAAI,qBAAqB,GAAG,CAAC;AACvE,MAAI,IAAI,KAAK,IAAI,IAAI,qBAAqB,IAAI,qBAAqB,GAAG,CAAC;AAEvE,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,oBAAqB,IACrB,qBAAqBA,KACrB,qBAAqB;AAAA,IACtB,GACC,sBAAsB,IACtB,qBAAqBA,KACrB,qBAAqB;AAAA,IACtB,GACC,sBAAsB,IACtB,qBAAqBA,KACrB,qBAAqB;AAAA,EACvB;AAEA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AAEA,SAAO;AACR;AAEA,IAAO,6BAAQ;;;AC7Bf,IAAM,oBAAoB,CAAAC,OAAK,yBAAiB,2BAAmBA,EAAC,CAAC;AAErE,IAAO,4BAAQ;;;ACsBR,SAAS,IAAI,GAAG;AACtB,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,OAAO,IAAI,QAAQ,IAAI;AAC7B,SACC,OACC,MAAM,IACN,MACA,KAAK,MAAM,MAAM,IAAI,QAAQ,MAAM,IAAI,OAAO,IAAI,MAAM,MAAM,CAAC;AAElE;AAEO,SAAS,QAAQ,GAAG;AAC1B,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,OAAO,IAAI,QAAQ,IAAI;AAC7B,UAAQ,IAAI,IAAI,MAAM,MAAM,OAAO,IAAI;AACxC;AAKA,SAAS,uBAAuB,GAAG,GAAG;AAIrC,MAAI,IAAI,IAAIC,KAAIC,KAAI,IAAI,IAAI,IAAI;AAEhC,MAAI,cAAc,IAAI,aAAa,IAAI,GAAG;AAEzC,SAAK;AACL,SAAK;AACL,IAAAD,MAAK;AACL,IAAAC,MAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AAAA,EACN,WAAW,aAAa,IAAI,aAAa,IAAI,GAAG;AAE/C,SAAK;AACL,SAAK;AACL,IAAAD,MAAK;AACL,IAAAC,MAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AAAA,EACN,OAAO;AAEN,SAAK;AACL,SAAK;AACL,IAAAD,MAAK;AACL,IAAAC,MAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AACL,SAAK;AAAA,EACN;AAGA,MAAI,IAAI,KAAK,KAAK,IAAID,MAAK,IAAIC,MAAK,IAAI,IAAI,KAAK,IAAI;AAMrD,MAAI,MAAM,eAAgB,IAAI,eAAe;AAC7C,MAAI,MAAM,gBAAgB,IAAI,eAAe;AAC7C,MAAI,MAAM,gBAAgB,IAAI,cAAc;AAE5C;AACC,QAAI,KAAK,IAAI,IAAI;AACjB,QAAI,KAAK,IAAI,IAAI;AACjB,QAAI,KAAK,IAAI,IAAI;AAEjB,QAAI,IAAI,KAAK,KAAK;AAClB,QAAI,IAAI,KAAK,KAAK;AAClB,QAAI,IAAI,KAAK,KAAK;AAElB,QAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,QAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,QAAI,OAAO,IAAI,MAAM,KAAK;AAE1B,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,QAAI,QAAQ,IAAI,MAAM,MAAM;AAE5B,QAAIC,KAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAC/B,QAAI,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK;AACtC,QAAIC,MAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAExC,QAAI,IAAKD,KAAI,MAAO,KAAK,KAAK,MAAMA,KAAIC;AAAA,EACzC;AAEA,SAAO;AACR;AAEO,SAAS,UAAU,GAAG,GAAG;AAE/B,MAAI,SAAS,uBAAuB,GAAG,CAAC;AAGxC,MAAIC,OAAM,2BAAmB,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,SAAS,EAAE,CAAC;AACnE,MAAI,SAAS,KAAK,KAAK,IAAI,KAAK,IAAIA,KAAI,GAAGA,KAAI,GAAGA,KAAI,CAAC,CAAC;AACxD,MAAI,SAAS,SAAS;AAEtB,SAAO,CAAC,QAAQ,MAAM;AACvB;AAMA,SAAS,wBAAwB,GAAG,GAAG,IAAIC,KAAI,IAAI,OAAO,MAAM;AAC/D,MAAI,CAAC,MAAM;AAEV,WAAO,UAAU,GAAG,CAAC;AAAA,EACtB;AAGA,MAAI;AACJ,OAAK,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,MAAMA,OAAM,GAAG;AAGnD,QAAK,KAAK,CAAC,IAAI,MAAOA,MAAK,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK;AAAA,EACtD,OAAO;AAIN,QAAK,KAAK,CAAC,KAAK,KAAK,MAAOA,OAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,KAAK;AAGjE;AACC,UAAI,KAAK,KAAK;AACd,UAAI,KAAKA;AAET,UAAI,MAAM,eAAgB,IAAI,eAAe;AAC7C,UAAI,MAAM,gBAAgB,IAAI,eAAe;AAC7C,UAAI,MAAM,gBAAgB,IAAI,cAAc;AAE5C,UAAI,OAAO,KAAK,KAAK;AACrB,UAAI,OAAO,KAAK,KAAK;AACrB,UAAI,OAAO,KAAK,KAAK;AAGrB;AACC,YAAI,IAAI,MAAM,IAAI,KAAK,IAAI;AAC3B,YAAI,IAAI,IAAIA;AAEZ,YAAI,KAAK,IAAI,IAAI;AACjB,YAAI,KAAK,IAAI,IAAI;AACjB,YAAI,KAAK,IAAI,IAAI;AAEjB,YAAI,IAAI,KAAK,KAAK;AAClB,YAAI,IAAI,KAAK,KAAK;AAClB,YAAI,IAAI,KAAK,KAAK;AAElB,YAAI,MAAM,IAAI,OAAO,KAAK;AAC1B,YAAI,MAAM,IAAI,OAAO,KAAK;AAC1B,YAAI,MAAM,IAAI,OAAO,KAAK;AAE1B,YAAI,OAAO,IAAI,OAAO,OAAO;AAC7B,YAAI,OAAO,IAAI,OAAO,OAAO;AAC7B,YAAI,OAAO,IAAI,OAAO,OAAO;AAE7B,YAAIC,KACH,eAAe,IAAI,eAAe,IAAI,eAAe,IAAI;AAC1D,YAAI,KACH,eAAe,MACf,eAAe,MACf,eAAe;AAChB,YAAIC,MACH,eAAe,OACf,eAAe,OACf,eAAe;AAEhB,YAAI,MAAM,MAAM,KAAK,KAAK,MAAMD,KAAIC;AACpC,YAAI,MAAM,CAACD,KAAI;AAEf,YAAI,IACH,gBAAgB,IAAI,eAAe,IAAI,eAAe,IAAI;AAC3D,YAAI,KACH,gBAAgB,MAChB,eAAe,MACf,eAAe;AAChB,YAAI,KACH,gBAAgB,OAChB,eAAe,OACf,eAAe;AAEhB,YAAI,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI;AACpC,YAAI,MAAM,CAAC,IAAI;AAEf,YAAIE,KACH,gBAAgB,IAAI,eAAe,IAAI,cAAc,IAAI;AAC1D,YAAI,KACH,gBAAgB,MAChB,eAAe,MACf,cAAc;AACf,YAAIC,MACH,gBAAgB,OAChB,eAAe,OACf,cAAc;AAEf,YAAI,MAAM,MAAM,KAAK,KAAK,MAAMD,KAAIC;AACpC,YAAI,MAAM,CAACD,KAAI;AAEf,cAAM,OAAO,IAAI,MAAM;AACvB,cAAM,OAAO,IAAI,MAAM;AACvB,cAAM,OAAO,IAAI,MAAM;AAEvB,aAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,WAAW,IAAI,IAAI,OAAO,MAAM;AAC/C,MAAI,CAAC,MAAM;AACV,WAAO,UAAU,IAAI,EAAE;AAAA,EACxB;AACA,MAAI,IAAI,KAAK,CAAC;AACd,MAAI,IAAI,KAAK,CAAC;AACd,SAAO,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE;AAC3B;AAsCO,SAAS,OAAO,GAAG,IAAI,IAAI;AACjC,MAAI,OAAO,UAAU,IAAI,EAAE;AAE3B,MAAI,QAAQ,wBAAwB,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI;AACzD,MAAI,SAAS,WAAW,IAAI,IAAI,IAAI;AAEpC,MAAI,QACH,aACA,KACE,YACA,YAAY,KACZ,MACE,cACA,aAAa,KACb,MACE,cACA,cAAc,KACd,MACE,cACA,aAAa,KACb,aAAa;AAEtB,MAAI,QACH,aACA,KACE,YACA,aAAa,KACb,MACE,aACA,aAAa,KACb,MACE,cACA,YAAY,KACZ,MACE,YACA,aAAa,KACb,aAAa;AAEtB,MAAIE,KAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;AAE3D,MAAI,MAAM,IAAI;AACd,MAAI,OAAO,IAAI,KAAK;AACpB,MAAI,QACH,MACAA,KACA,KAAK;AAAA,IACJ,KAAK;AAAA,MACJ,KAAK,KAAK,MAAM,MAAM,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM;AAAA,IAC3D;AAAA,EACD;AAED,QAAM,IAAI;AACV,SAAO,IAAI,KAAK;AAChB,MAAI,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK;AAC3D,SAAO,CAAC,KAAK,OAAO,KAAK;AAC1B;;;AC/Te,SAAR,oBAAqCC,MAAK;AAChD,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACxC,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACxC,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AAExC,QAAM,MAAM,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE;AAEvC,MAAIA,KAAI,UAAU,QAAW;AAC5B,QAAI,QAAQA,KAAI;AAAA,EACjB;AACA,MAAIC,KAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,MAAI,CAACA,IAAG;AACP,QAAI,IAAI;AACR,WAAO;AAAA,EACR;AACA,MAAI,CAAC,KAAK,OAAO,KAAK,IAAI,OAAO,GAAG,IAAIA,IAAG,IAAIA,EAAC;AAChD,MAAI;AACJ,MAAIA,KAAI,OAAO;AACd,QAAI,MAAM;AACV,QAAI,MAAM,MAAM;AAChB,QAAI,MAAM,IAAI,MAAM;AACpB,QAAI,KAAKA,KAAI,QAAQ,MAAM,OAAOA,KAAI;AACtC,QAAI,IAAI;AAAA,EACT,OAAO;AACN,QAAI,MAAM;AACV,QAAI,MAAO,MAAM,QAAQ,QAAQ,OAAO,OAAQ;AAChD,QAAI,MAAM,IAAI,OAAO,QAAQ;AAC7B,QAAI,KAAKA,KAAI,QAAQ,MAAM,OAAOA,KAAI;AACtC,QAAI,MAAM,MAAM;AAAA,EACjB;AACA,MAAI,GAAG;AACN,QAAI,IAAI;AACR,QAAI,IAAI,qBAAc,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,EAAE;AAAA,EACxD;AACA,SAAO;AACR;;;ACpCe,SAAR,oBAAqCC,MAAK;AAChD,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AAEtC,QAAM,MAAM,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE;AAE3C,MAAIA,KAAI,UAAU,QAAW;AAC5B,QAAI,QAAQA,KAAI;AAAA,EACjB;AAEA,MAAI,CAAC,KAAK,MAAM,GAAG;AAClB,QAAI,IAAI,IAAI,IAAI;AAChB,WAAO;AAAA,EACR;AAEA,MAAI,KAAK,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE;AACrC,MAAI,KAAK,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE;AACrC,MAAI,CAAC,KAAK,OAAO,KAAK,IAAI,OAAO,IAAI,GAAG,IAAI,EAAE;AAC9C,MAAI,GAAG,KAAK,KAAK;AACjB,MAAI,IAAI,KAAK;AACZ,QAAI,OAAO;AACX,UAAM;AACN,UAAM,MAAM;AACZ,UAAM,IAAI,MAAM;AAAA,EACjB,OAAO;AACN,QAAI,KAAK,IAAI;AACb,UAAM;AACN,UAAO,MAAM,QAAQ,QAAQ,OAAO,OAAQ;AAC5C,UAAM,IAAI,OAAO,QAAQ;AAAA,EAC1B;AACA,MAAI,IAAI,MAAO,IAAI,OAAQ,IAAI,MAAM;AACrC,MAAI,IAAI,IAAI;AACZ,MAAI,IAAI,IAAI;AAEZ,SAAO;AACR;;;ACxDA,IAAM,YAAY;AAAA,EACjB,GAAGC;AAAA,EACH,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAAAC,OAAK,oBAAoB,0BAAkBA,EAAC,CAAC;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAAAA,OAAK,0BAAkB,oBAAoBA,EAAC,CAAC;AAAA,EACnD;AACD;AAEA,IAAO,oBAAQ;;;ACMA,SAAR,oBAAqCC,MAAK;AAChD,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACtC,MAAI,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AAEtC,MAAIC,KAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAG/B,MAAI,KAAKA,KAAI,IAAIA,KAAI;AACrB,MAAI,KAAKA,KAAI,IAAIA,KAAI;AAErB,MAAI,CAAC,OAAO,CAAC,IAAI,WAAW,IAAI,EAAE;AAClC,MAAI,MAAM;AACV,MAAIC,KAAI,IAAI,MAAM;AAElB,MAAI,IAAI,KAAKD,KAAI,IAAI;AACrB,MAAI,MAAM,IAAI;AACd,MAAI,MAAM,IAAIA;AAEd,MAAI,OAAO,QAAQ,GAAG;AACtB,MAAI,OAAQ,MAAM,OAAQ;AAE1B,MAAI,YAAY,2BAAmB,EAAE,GAAG,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK,CAAC;AAC1E,MAAI,UAAU,KAAK;AAAA,IAClB,IAAI,KAAK,IAAI,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC;AAAA,EACtD;AAEA,MAAI,IAAI;AACR,EAAAA,KAAMA,KAAI,UAAW,IAAI,CAAC,IAAK;AAC/B,MAAI,IAAI,CAAC;AAET,QAAM,MAAM;AAAA,IACX,MAAM;AAAA,IACN,GAAGA,MAAM,MAAM,KAAK,OAAQ,IAAI,MAAM,IAAIC,KAAI,OAAO;AAAA,IACrD,GAAG,IAAI,IAAI,MAAM;AAAA,EAClB;AACA,MAAI,IAAI,GAAG;AACV,QAAI,IAAI,qBAAc,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,EAAE;AAAA,EACxD;AACA,MAAIF,KAAI,UAAU,QAAW;AAC5B,QAAI,QAAQA,KAAI;AAAA,EACjB;AACA,SAAO;AACR;;;AC/Ce,SAAR,oBAAqCG,MAAK;AAChD,QAAM,MAAM,EAAE,MAAM,QAAQ;AAC5B,MAAIA,KAAI,UAAU,QAAW;AAC5B,QAAI,QAAQA,KAAI;AAAA,EACjB;AAEA,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACxC,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AACxC,QAAM,IAAIA,KAAI,MAAM,SAAYA,KAAI,IAAI;AAExC,QAAM,KAAK,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE;AACvC,QAAM,KAAK,KAAK,IAAK,IAAI,MAAO,KAAK,EAAE;AAEvC,QAAM,CAAC,OAAO,CAAC,IAAI,WAAW,IAAI,EAAE;AACpC,QAAM,MAAM;AACZ,QAAMC,KAAI,IAAI,MAAM;AACpB,QAAM,MAAM,IAAK,IAAI,OAAQ,MAAM,IAAI,IAAIA,KAAI;AAC/C,QAAM,MAAO,IAAI,IAAI,OAAQ,MAAM,IAAI,IAAIA,KAAI;AAE/C,QAAM,OAAO,QAAQ,GAAG;AACxB,QAAM,OAAQ,MAAM,OAAQ;AAC5B,QAAM,YAAY,2BAAmB;AAAA,IACpC,GAAG;AAAA,IACH,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,EACT,CAAC;AACD,QAAM,UAAU,KAAK;AAAA,IACpB,IAAI,KAAK,IAAI,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC;AAAA,EACtD;AAEA,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,QAAM,IAAK,MAAM,QAAS;AAE1B,MAAI,IAAI,QAAQ;AAChB,MAAI,IAAI,IAAI,KAAK;AACjB,MAAI,IAAI,IAAI,KAAK;AAEjB,SAAO;AACR;;;ACxDA,IAAM,YAAY;AAAA,EACjB,GAAGC;AAAA,EACH,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAAAC,OAAK,oBAAoB,0BAAkBA,EAAC,CAAC;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAAAA,OAAK,0BAAkB,oBAAoBA,EAAC,CAAC;AAAA,EACnD;AACD;AAEA,IAAO,oBAAQ;;;ACrBf,SAAS,WAAW,OAAO,QAAQ;AAClC,MAAI,CAAC,UAAU,OAAO,CAAC,MAAM,SAAS;AACrC,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,QAAQ;AAC5B,QAAM,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI;AAC3B,MAAI,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK;AACnE,WAAO;AAAA,EACR;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,KAAK;AAAA,MACZ,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,MAC3D;AAAA,IACD;AAAA,EACD;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAS,EAAE,QAAQ,MAAO;AAAA,EAC7D;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,EAAE,SAAS,IAAI,SAAS,EAAE,QAAS,EAAE,QAAQ,MAAO;AAAA,EAC7D;AACA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,qBAAQ;;;ACvBf,IAAMC,eAAa;AAAA,EAClB,GAAGC;AAAA,EACH,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,EACN;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,CAAC;AAAA,IACR,GAAG,CAAC,MAAM,GAAG;AAAA,IACb,GAAG,CAAC,MAAM,GAAG;AAAA,EACd;AAAA,EAEA,OAAO,CAAC,kBAAU;AAAA,EAClB,WAAW,CAAAC,OACV,SAASA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACxCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAC3B,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,GACnCA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AACF;AAEA,IAAOD,uBAAQD;;;ACxCf,SAAS,WAAW,OAAO,QAAQ;AAClC,MAAI,CAAC,UAAU,OAAO,CAAC,MAAM,SAAS;AACrC,WAAO;AAAA,EACR;AACA,QAAM,MAAM,EAAE,MAAM,QAAQ;AAC5B,QAAM,CAAC,EAAE,GAAGG,IAAG,GAAG,KAAK,IAAI;AAC3B,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,KAAK;AACvB,aAAO;AAAA,IACR;AACA,QAAI,IAAI,KAAK;AAAA,MACZ,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,MAC3D;AAAA,IACD;AAAA,EACD;AACA,MAAIA,GAAE,SAAS,IAAI,MAAM;AACxB,QAAI,IAAI,KAAK;AAAA,MACZ;AAAA,MACAA,GAAE,SAAS,IAAI,SAASA,GAAE,QAASA,GAAE,QAAQ,MAAO;AAAA,IACrD;AAAA,EACD;AACA,MAAI,EAAE,SAAS,IAAI,MAAM;AACxB,QAAI,EAAE,SAAS,IAAI,YAAY;AAC9B,aAAO;AAAA,IACR;AACA,QAAI,IAAI,EAAE;AAAA,EACX;AACA,MAAI,MAAM,SAAS,IAAI,MAAM;AAC5B,QAAI,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,QACJ;AAAA,QACA,MAAM,SAAS,IAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,qBAAQ;;;ACnCf,IAAMC,eAAa;AAAA,EAClB,GAAGC;AAAA,EACH,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,OAAO,CAAAC,OAAK,wBAAgBA,IAAG,OAAO;AAAA,IACtC,KAAK,CAAAA,OAAK,0BAAkB,wBAAgBA,IAAG,OAAO,CAAC;AAAA,EACxD;AAAA,EAEA,UAAU;AAAA,IACT,KAAK,CAAAA,OAAK,wBAAgB,0BAAkBA,EAAC,GAAG,OAAO;AAAA,IACvD,OAAO,CAAAA,OAAK,wBAAgBA,IAAG,OAAO;AAAA,EACvC;AAAA,EAEA,OAAO,CAAC,kBAAU;AAAA,EAClB,WAAW,CAAAA,OACV,SAASA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,IACxCA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAC3B,IAAIA,GAAE,MAAM,SAAYA,GAAE,IAAI,MAAM,GACnCA,GAAE,QAAQ,IAAI,MAAMA,GAAE,KAAK,KAAK,EACjC;AAAA,EAED,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,CAAC;AAAA,IACR,GAAG,CAAC,GAAG,GAAG;AAAA,IACV,GAAG,CAAC,GAAG,GAAG;AAAA,EACX;AACD;AAEA,IAAOD,uBAAQD;;;AC1Bf,IAAM,mBAAmB,CAAAG,SAAO;AAC/B,MAAI,EAAE,GAAAC,IAAG,GAAG,GAAG,MAAM,IAAI,yBAAiBD,IAAG;AAC7C,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,oBAAoBC,KACpB,oBAAoB,IACpB,qBAAqB;AAAA,IACtB,GACC,qBAAqBA,KACrB,qBAAqB,IACrB,oBAAoB;AAAA,IACrB,GAAG,IAAMA,KAAI,qBAAqB,IAAI,oBAAoB;AAAA,EAC3D;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,2BAAQ;;;ACpBf,IAAM,mBAAmB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAChD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT;AAAA,MACC,GACC,IAAI,qBACJ,IAAI,qBACJ,oBAAoB;AAAA,MACrB,GACC,IAAI,sBACJ,IAAI,qBACJ,qBAAqB;AAAA,MACtB,GACC,IAAI,qBACJ,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA;AAAA,EACD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,2BAAQ;;;AC/Bf,IAAMC,eAAa;AAAA,EAClB,GAAG;AAAA,EACH,MAAM;AAAA,EACN,OAAO,CAAC,YAAY;AAAA,EACpB,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,KAAK,WAAS,yBAAiB,0BAAkB,KAAK,CAAC;AAAA,IACvD,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAAA,IACP,KAAK,WAAS,0BAAkB,yBAAiB,KAAK,CAAC;AAAA,IACvD,OAAO;AAAA,EACR;AACD;AAEA,IAAOC,uBAAQD;;;ACff,IAAME,SAAQ,OAAK;AAClB,MAAIC,OAAM,KAAK,IAAI,CAAC;AACpB,MAAIA,QAAO,IAAI,KAAK;AACnB,WAAO,KAAK,KAAK,CAAC,IAAI,KAAK,IAAIA,MAAK,IAAI,GAAG;AAAA,EAC5C;AACA,SAAO,KAAK;AACb;AAEA,IAAM,yBAAyB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACtD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGD;AAAA,MACF,IAAI,qBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAGA;AAAA,MACF,IAAI,sBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAGA,OAAM,IAAI,IAAM,IAAI,IAAM,qBAAqB,CAAC;AAAA,EACpD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,iCAAQ;;;AChCf,IAAME,aAAY,CAAC,IAAI,MAAM;AAC5B,MAAIC,OAAM,KAAK,IAAI,CAAC;AACpB,MAAIA,QAAO,KAAK,KAAK;AACpB,WAAO,KAAK,KAAK,CAAC,IAAI,KAAK,IAAIA,MAAK,GAAG;AAAA,EACxC;AACA,SAAO,IAAI;AACZ;AAEA,IAAM,yBAAyB,CAAAC,cAAY;AAC1C,MAAIC,KAAIH,WAAUE,UAAS,CAAC;AAC5B,MAAI,IAAIF,WAAUE,UAAS,CAAC;AAC5B,MAAI,IAAIF,WAAUE,UAAS,CAAC;AAC5B,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqBC,KACrB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,qBAAqBA,KACrB,qBAAqB,IACrB,mBAAqB;AAAA,IACtB,GAAG,IAAIA,KAAI,IAAI,IAAI,qBAAqB;AAAA,EACzC;AACA,MAAID,UAAS,UAAU,QAAW;AACjC,QAAI,QAAQA,UAAS;AAAA,EACtB;AACA,SAAO;AACR;AAEA,IAAO,iCAAQ;;;ACvBf,IAAME,eAAa;AAAA,EAClB,GAAG;AAAA,EACH,MAAM;AAAA,EACN,OAAO,CAAC,cAAc;AAAA,EACtB,WAAW;AAAA,EAEX,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,WAAS,+BAAuB,0BAAkB,KAAK,CAAC;AAAA,EAC9D;AAAA,EAEA,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,WAAS,0BAAkB,+BAAuB,KAAK,CAAC;AAAA,EAC9D;AACD;AAEA,IAAOC,uBAAQD;;;ACvBf,IAAM,SAAI;AACV,IAAM,SAAI;AACV,IAAME,SAAQ,OAAK;AAClB,QAAMC,OAAM,KAAK,IAAI,CAAC;AACtB,MAAIA,OAAM,QAAG;AACZ,YAAQ,KAAK,KAAK,CAAC,KAAK,MAAM,SAAI,KAAK,IAAIA,MAAK,IAAI,KAAK,SAAI;AAAA,EAC9D;AACA,SAAO,MAAM;AACd;AAEA,IAAM,wBAAwB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AACrD,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GAAGD;AAAA,MACF,IAAI,qBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAGA;AAAA,MACF,IAAI,sBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,IACA,GAAGA;AAAA,MACF,IAAI,qBACH,IAAI,qBACJ,qBAAqB;AAAA,IACvB;AAAA,EACD;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,gCAAQ;;;ACtCf,IAAME,UAAI;AACV,IAAMC,UAAI;AAEV,IAAMC,aAAY,CAAC,IAAI,MAAM;AAC5B,MAAIC,OAAM,KAAK,IAAI,CAAC;AACpB,MAAIA,OAAMF,UAAI,KAAK;AAClB,WAAO,IAAI;AAAA,EACZ;AACA,UAAQ,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,KAAKE,OAAMH,UAAI,KAAKA,SAAG,IAAI,IAAI;AAClE;AAEA,IAAM,wBAAwB,CAAAI,aAAW;AACxC,MAAIC,KAAIH,WAAUE,SAAQ,CAAC;AAC3B,MAAI,IAAIF,WAAUE,SAAQ,CAAC;AAC3B,MAAI,IAAIF,WAAUE,SAAQ,CAAC;AAC3B,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqBC,KACrB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,oBAAoBA,KACpB,qBAAqB,IACrB,oBAAoB;AAAA,IACrB,GAAG,IAAIA,KAAI,qBAAqB,IAAI,qBAAqB;AAAA,EAC1D;AACA,MAAID,SAAQ,UAAU,QAAW;AAChC,QAAI,QAAQA,SAAQ;AAAA,EACrB;AACA,SAAO;AACR;AAEA,IAAO,gCAAQ;;;AClCf,IAAME,eAAa;AAAA,EAClB,GAAG;AAAA,EACH,MAAM;AAAA,EAEN,UAAU;AAAA,IACT,OAAO;AAAA,IACP,KAAK,WAAS,8BAAsB,0BAAkB,KAAK,CAAC;AAAA,EAC7D;AAAA,EAEA,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,KAAK,WAAS,0BAAkB,8BAAsB,KAAK,CAAC;AAAA,EAC7D;AAAA,EAEA,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AACZ;AAEA,IAAOC,uBAAQD;;;AC1BR,IAAM,OAAO;AACb,IAAM,YAAY,KAAK,KAAK,IAAI;;;ACEvC,IAAM,WAAW,OAAK,KAAK,KAAK,CAAC,IAAI;AAErC,IAAM,kBAAkB,WAAS;AAChC,QAAM,EAAE,GAAAE,IAAG,GAAG,GAAG,MAAM,IAAI,yBAAiB,KAAK;AACjD,QAAM,IAAI,SAAS,MAAMA,KAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI;AACzD,QAAM,IAAI,SAAS,OAAOA,KAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI;AAC1D,QAAM,IAAI;AAAA,IACT,qBAAsBA,KACrB,qBAAsB,IACtB,qBAAqB,IACrB;AAAA,EACF;AACA,QAAM,MAAM;AAAA,IACX,MAAM;AAAA,IACN,IAAI,IAAI,KAAK;AAAA,IACb,IAAI,IAAI,KAAK;AAAA;AAAA,IAEb,GAAG,KAAK,IAAI,KAAK;AAAA,EAClB;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACvBf,IAAMC,YAAW,OAAK,KAAK,IAAI,IAAI,WAAW,CAAC;AAE/C,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAC/C,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,QAAM,IAAIA,UAAS,IAAI,CAAC,IAAI;AAC5B,QAAM,IAAIA,UAAS,IAAI,CAAC,IAAI;AAE5B,QAAM,IAAIA,UAAS,IAAI,CAAC,IAAI;AAE5B,QAAM,MAAM,yBAAiB;AAAA,IAC5B,GACC,qBAAqB,IACrB,oBAAoB,IACpB,sBAAsB;AAAA,IACvB,GACC,sBAAsB,IACtB,oBAAoB,IACpB,sBAAsB;AAAA,IACvB,GACC,sBAAsB,IACtB,qBAAqB,IACrB,qBAAqB;AAAA,EACvB,CAAC;AACD,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACtBf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EACjC,OAAO,CAAC,OAAO;AAAA,EACf,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,SAAS,MAAM;AAAA,IACnB,GAAG,CAAC,GAAG,MAAM;AAAA,IACb,GAAG,CAAC,SAAS,KAAK;AAAA,EACnB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;AC1Bf,IAAME,eAAa;AAAA,EAClB,MAAM;AAAA,EACN,OAAO,CAAC,SAAS;AAAA,EACjB,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,GAAG,KAAK;AAAA,IACZ,GAAG,CAAC,GAAG,KAAK;AAAA,EACb;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;AClCf,IAAM,sBAAsB,CAAAE,WAAS;AACpC,MAAI,EAAE,GAAG,GAAG,GAAG,MAAM,IAAIA;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqB,IACrB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,qBAAqB,IACrB,oBAAoB,IACpB,qBAAqB;AAAA,IACtB,GACC,sBAAsB,IACtB,qBAAqB,IACrB,qBAAqB;AAAA,EACvB;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,8BAAQ;;;AC1Bf,IAAM,sBAAsB,CAAAC,WAAS;AACpC,MAAI,EAAE,GAAG,GAAG,GAAG,MAAM,IAAIA;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM;AAAA,IACT,MAAM;AAAA,IACN,GACC,qBAAqB,IACrB,qBAAqB,IACrB,qBAAqB;AAAA,IACtB,GACC,sBAAsB,IACtB,qBAAqB,IACrB,oBAAoB;AAAA,IACrB,GACC,qBAAqB,IACrB,qBAAqB,IACrB,qBAAqB;AAAA,EACvB;AACA,MAAI,UAAU,QAAW;AACxB,QAAI,QAAQ;AAAA,EACb;AACA,SAAO;AACR;AAEA,IAAO,8BAAQ;;;ACrBf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,EACR;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAAA,IACP,GAAG,CAAC,GAAG,IAAI;AAAA,IACX,GAAG,CAAC,GAAG,CAAC;AAAA,IACR,GAAG,CAAC,GAAG,KAAK;AAAA,EACb;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,OAAO,CAAC,OAAO,SAAS;AAAA,EACxB,WAAW;AAAA,EAEX,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;AC9Cf,IAAM,kBAAkB,CAAC,EAAE,GAAAE,IAAG,GAAG,GAAG,MAAM,MAAM;AAC/C,MAAIA,OAAM,OAAW,CAAAA,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,QAAM,MAAM;AAAA,IACX,MAAM;AAAA,IACN,GAAG,aAAaA,KAAI,aAAa,IAAI,aAAa;AAAA,IAClD,GAAG,aAAaA,KAAI,YAAY,IAAI,aAAa;AAAA,IACjD,GAAG,aAAaA,KAAI,aAAa,IAAI,aAAa;AAAA,EACnD;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACdf,IAAM,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,MAAM;AAC/C,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,MAAI,MAAM,OAAW,KAAI;AACzB,QAAM,MAAM;AAAA,IACX,MAAM;AAAA,IACN,GAAG,IAAI,aAAa,IAAI,YAAY;AAAA,IACpC,GAAG,IAAI,aAAa,IAAI,YAAY;AAAA,IACpC,GAAG,IAAI,aAAa,IAAI,aAAa;AAAA,EACtC;AACA,MAAI,UAAU,OAAW,KAAI,QAAQ;AACrC,SAAO;AACR;AAEA,IAAO,0BAAQ;;;ACWf,IAAMC,eAAa;AAAA,EAClB,MAAM;AAAA,EAEN,QAAQ;AAAA,IACP,KAAK;AAAA,EACN;AAAA,EAEA,UAAU;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,EAEjC,OAAO,CAAC,OAAO;AAAA,EACf,WAAW;AAAA,EAEX,QAAQ;AAAA,IACP,GAAG,CAAC,QAAQ,KAAK;AAAA,IACjB,GAAG,CAAC,QAAQ,KAAK;AAAA,EAClB;AAAA,EAEA,aAAa;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,EAAE,KAAK,oBAAoB,OAAO,WAAW;AAAA,EACrD;AACD;AAEA,IAAOC,uBAAQD;;;ACpDf,IAAM,IAAI,CAAC,OAAO,cACjB,KAAK,MAAM,SAAS,YAAY,KAAK,IAAI,IAAI,SAAS,EAAE,IAAI;AAE7D,IAAM,QACL,CAAC,YAAY,MACb,WACC,OAAO,UAAU,WAAW,EAAE,OAAO,SAAS,IAAI;AAEpD,IAAO,gBAAQ;;;ACLf,IAAI,cAAc,cAAM,CAAC;AAKzB,IAAM,MAAM,kBAAU,KAAK;AAC3B,IAAM,MAAM,kBAAU,KAAK;AA2DpB,IAAM,YAAY,CAAAE,OAAK;AAC7B,QAAM,QAAQ,gBAAQA,EAAC;AACvB,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AACA,QAAM,MAAM,QAAQ,MAAM,IAAI;AAC9B,MAAI,CAAC,IAAI,aAAa,OAAO,IAAI,cAAc,UAAU;AACxD,QAAI,MAAM,SAAS,IAAI,aAAa,KAAK,MAAM,IAAI,EAAE;AACrD,QAAI,SAAS,QAAQ,CAAC,IAAI,MAAM;AAC/B,UAAI,OAAO,SAAS;AACnB,gBACE,IAAI,MAAM,OACV,MAAM,EAAE,MAAM,SAAY,MAAM,EAAE,IAAI;AAAA,MACzC;AAAA,IACD,CAAC;AACD,QAAI,MAAM,UAAU,UAAa,MAAM,QAAQ,GAAG;AACjD,aAAO,MAAM,MAAM,KAAK;AAAA,IACzB;AACA,WAAO,MAAM;AAAA,EACd;AACA,MAAI,OAAO,IAAI,cAAc,YAAY;AACxC,WAAO,IAAI,UAAU,KAAK;AAAA,EAC3B;AACA,SAAO;AACR;;;AC2KO,IAAM,MAAM,QAAQC,mBAAO;AAC3B,IAAM,YAAY,QAAQA,mBAAa;AACvC,IAAM,OAAO,QAAQA,mBAAQ;AAC7B,IAAM,OAAO,QAAQA,mBAAQ;AAC7B,IAAM,MAAM,QAAQA,mBAAO;AAC3B,IAAMC,OAAM,QAAQD,mBAAO;AAC3B,IAAM,MAAM,QAAQA,mBAAO;AAC3B,IAAM,MAAM,QAAQA,mBAAO;AAC3B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,OAAO,QAAQA,oBAAQ;AAC7B,IAAM,MAAM,QAAQA,oBAAO;AAC3B,IAAM,QAAQ,QAAQ,iBAAS;AAC/B,IAAM,QAAQ,QAAQ,iBAAS;AAC/B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,KAAK,QAAQA,oBAAM;AACzB,IAAM,WAAW,QAAQA,oBAAY;AACrC,IAAM,UAAU,QAAQA,oBAAW;AACnC,IAAME,OAAM,QAAQ,kBAAO;AAC3B,IAAM,MAAM,QAAQF,oBAAO;AAC3B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,QAAQ,QAAQA,oBAAS;AAC/B,IAAM,MAAM,QAAQA,oBAAO;;;AC5RlC,IAAIG,SAAQ,kBAAU,OAAO;AAE7B,IAAM,iBAAiB;AAAA,EACrB,6BAA6B,sBAAsB;AAAA,EACnD,0BAA0B,sBAAsB;AAAA,EAChD,eAAe,sBAAsB;AAAA,EACrC,kBAAkB,sBAAsB;AAAA,EACxC,4BAA4B,sBAAsB;AAAA,EAClD,yBAAyB,sBAAsB;AACjD;AAiBO,SAAS,oBAAoB,QAAQ,SAAS,IAAI;AACvD,MAAI,SAAS,CAAC;AACd,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAM,QAAQ,IAAI,QAAQ,mBAAmB,OAAO,EAAE,YAAY;AAClE,UAAM,QAAQ,YAAY,KAAK;AAC/B,UAAM,YAAYA,OAAM,KAAK;AAC7B,UAAM,OAAO,UAAU,SAAS;AAChC,UAAM,eAAe,kBAAkB,KAAK,GAAG,MAAM;AACrD,WAAO,YAAY,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;AAoBO,SAAS,eAAe,SAAS,EAAE,QAAQ,SAAS,aAAa,UAAU,GAAG;AACnF,QAAM,QAAQ,qBAAqB,YAAY,OAAO,WAAW,GAAG,CAAC,CAAC;AAEtE,QAAM,SAAS,IAAI;AAAA,IACjB,IAAI,QAAQ,YAAY,OAAO,WAAW,CAAC;AAAA,IAC3C,OAAO,WAAW;AAAA,IAClB;AAAA,EACF;AACA,MAAI,UAAU,CAAC;AACf,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AACzD,YAAQ,GAAG,IAAI,MAAM,QAAQ,MAAM;AAAA,EACrC;AACA,QAAM,eAAe,MAAM,QAAQ,OAAO,MAAM,EAAE,OAAO;AACzD,QAAM,SAAS,oBAAoB,EAAE,GAAG,cAAc,GAAG,QAAQ,CAAC;AAElE,SAAO;AACT;;;ACpEO,SAAS,cAAc,EAAE,aAAa,SAAS,QAAQ,IAAI,CAAC,GAAG;AACpE,QAAM,SAAqB,eAAe,EAAE,aAAa,OAAO,CAAC;AAEjE,QAAM,OAAO,SAAS;AACtB,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACtD,SAAK,MAAM,YAAY,UAAU,KAAK;AAAA,EACxC;AACF;",
|
|
6
6
|
"names": ["num", "c", "r", "r", "delinearized", "e", "f", "c", "k", "k4", "hue", "p2", "c", "M", "gamma", "delinearized", "c", "r", "p2", "gamma", "hue", "differenceDegrees", "hue", "Variant", "hue", "p", "hue", "hue", "desiredTotalTempDeltaForIndex", "e", "lab", "hue", "differenceDegrees", "r", "hex", "c", "definition", "k", "num", "c", "r", "c", "lerp", "lerp", "a98", "r", "c", "abs", "r", "rgb", "r", "fn", "c", "abs", "r", "definition", "definition_default", "hue", "hue", "fn", "r", "sum", "val", "definition", "definition_default", "c", "c", "k", "e", "fn", "lab", "f2", "rgb", "c", "e", "f", "e", "f", "c", "definition", "definition_default", "definition", "c", "definition_default", "f", "r", "M", "definition", "definition_default", "r", "M", "definition", "c", "definition_default", "f", "r", "M", "definition", "definition_default", "hsv", "definition", "c", "definition_default", "c", "c", "p", "c", "p", "definition", "definition_default", "vn", "p", "d0", "rgb", "definition", "definition_default", "c", "c", "definition", "c", "definition_default", "k", "e", "fn", "e", "k", "lab", "rgb", "r", "f", "e", "k", "f2", "rgb", "definition", "c", "definition_default", "definition", "definition_default", "c", "definition", "c", "definition_default", "definition", "definition_default", "c", "c", "c", "e", "k", "u_fn", "v_fn", "un", "vn", "k", "rgb", "lchuv", "definition", "definition_default", "definition", "definition_default", "definition", "luv", "rgb", "definition_default", "r", "M", "rgb", "M", "c", "k2", "k3", "f", "f2", "rgb", "C1", "r", "r2", "b", "b2", "k", "lab", "c", "hsl", "definition_default", "c", "lab", "c", "k", "hsv", "k", "definition_default", "c", "definition", "definition_default", "c", "c", "definition", "definition_default", "c", "rgb", "r", "definition", "definition_default", "gamma", "abs", "linearize", "abs", "prophoto", "r", "definition", "definition_default", "gamma", "abs", "\u03B1", "\u03B2", "linearize", "abs", "rec2020", "r", "definition", "definition_default", "r", "transfer", "definition", "definition_default", "definition", "definition_default", "xyz65", "xyz50", "definition", "definition_default", "r", "definition", "definition_default", "c", "definition_default", "hsl", "rgb", "oklch"]
|
|
7
7
|
}
|