@twick/live-player 0.15.0 → 0.15.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-H4HUGGQY-DIx_F8CA.js","sources":["../../../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/index.js","../../../node_modules/.pnpm/@twick+core@0.15.0/node_modules/@twick/core/dist/index.js","../../../node_modules/.pnpm/@twick+player-react@0.15.0/node_modules/@twick/player-react/dist/internal-H4HUGGQY.js"],"sourcesContent":["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–16. \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ón Matemática 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ΔE_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° \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 θ = (26 / 180) * Math.PI;\nexport const cosθ = Math.cos(θ);\nexport const sinθ = Math.sin(θ);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n","import { kCH, kE, sinθ, cosθ, θ, 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 - θ);\n\tlet f = G * Math.sin((h / 180) * Math.PI - θ);\n\tres.a = e * cosθ - (f / 0.83) * sinθ;\n\tres.b = e * sinθ + (f / 0.83) * cosθ;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n","import { kCH, kE, sinθ, cosθ, θ, 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θ + b * sinθ;\n\tlet f = 0.83 * (b * cosθ - a * sinθ);\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) + θ) / 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn 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örn 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 α = 1.09929682680944;\nconst β = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > β) {\n\t\treturn (Math.sign(v) || 1) * (α * Math.pow(abs, 0.45) - (α - 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 α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < β * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + α - 1) / α, 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ón Matemática 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","// 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","// src/events/EventDispatcherBase.ts\nvar EventDispatcherBase = class {\n constructor() {\n this.subscribable = new Subscribable(this);\n this.subscribers = /* @__PURE__ */ new Set();\n }\n /**\n * {@inheritDoc Subscribable.subscribe}\n */\n subscribe(handler) {\n this.subscribers.add(handler);\n return () => this.unsubscribe(handler);\n }\n /**\n * {@inheritDoc Subscribable.unsubscribe}\n */\n unsubscribe(handler) {\n this.subscribers.delete(handler);\n }\n /**\n * Unsubscribe all subscribers from the event.\n */\n clear() {\n this.subscribers.clear();\n }\n notifySubscribers(value) {\n return [...this.subscribers].map((handler) => handler(value));\n }\n};\nvar Subscribable = class {\n constructor(dispatcher) {\n this.dispatcher = dispatcher;\n }\n /**\n * Subscribe to the event.\n *\n * @param handler - The handler to invoke when the event occurs.\n *\n * @returns A callback function that cancels the subscription.\n */\n subscribe(handler) {\n return this.dispatcher.subscribe(handler);\n }\n /**\n * Unsubscribe from the event.\n *\n * @param handler - The handler to unsubscribe.\n */\n unsubscribe(handler) {\n this.dispatcher.unsubscribe(handler);\n }\n};\n\n// src/events/AsyncEventDispatcher.ts\nvar AsyncEventDispatcher = class extends EventDispatcherBase {\n async dispatch(value) {\n await Promise.all(this.notifySubscribers(value));\n }\n};\n\n// src/events/EventDispatcher.ts\nvar EventDispatcher = class extends EventDispatcherBase {\n dispatch(value) {\n this.notifySubscribers(value);\n }\n};\n\n// src/events/FlagDispatcher.ts\nvar FlagDispatcher = class extends EventDispatcherBase {\n constructor() {\n super(...arguments);\n this.value = false;\n }\n /**\n * Notify all current and future subscribers.\n */\n raise() {\n if (!this.value) {\n this.value = true;\n this.notifySubscribers();\n }\n }\n /**\n * Stop notifying future subscribers.\n */\n reset() {\n this.value = false;\n }\n /**\n * Are subscribers being notified?\n */\n isRaised() {\n return this.value;\n }\n subscribe(handler) {\n const unsubscribe = super.subscribe(handler);\n if (this.value) {\n handler();\n }\n return unsubscribe;\n }\n};\n\n// src/events/ValueDispatcher.ts\nvar ValueDispatcher = class extends EventDispatcherBase {\n /**\n * @param value - The initial value.\n */\n constructor(value) {\n super();\n this.value = value;\n this.subscribable = new SubscribableValueEvent(this);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.current}\n */\n get current() {\n return this.value;\n }\n /**\n * Set the current value of this dispatcher.\n *\n * @remarks\n * Setting the value will immediately notify all subscribers.\n *\n * @param value - The new value.\n */\n set current(value) {\n this.value = value;\n this.notifySubscribers(value);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.subscribe}\n */\n subscribe(handler, dispatchImmediately = true) {\n const unsubscribe = super.subscribe(handler);\n if (dispatchImmediately) {\n handler(this.value);\n }\n return unsubscribe;\n }\n};\nvar SubscribableValueEvent = class extends Subscribable {\n /**\n * Get the most recent value of this dispatcher.\n */\n get current() {\n return this.dispatcher.current;\n }\n /**\n * Subscribe to the event.\n *\n * Subscribing will immediately invoke the handler with the most recent value.\n *\n * @param handler - The handler to invoke when the event occurs.\n * @param dispatchImmediately - Whether the handler should be immediately\n * invoked with the most recent value.\n *\n * @returns Callback function that cancels the subscription.\n */\n subscribe(handler, dispatchImmediately = true) {\n return this.dispatcher.subscribe(\n handler,\n dispatchImmediately\n );\n }\n};\n\n// src/app/Logger.ts\nvar LogLevel = /* @__PURE__ */ ((LogLevel2) => {\n LogLevel2[\"Error\"] = \"error\";\n LogLevel2[\"Warn\"] = \"warn\";\n LogLevel2[\"Info\"] = \"info\";\n LogLevel2[\"Http\"] = \"http\";\n LogLevel2[\"Verbose\"] = \"verbose\";\n LogLevel2[\"Debug\"] = \"debug\";\n LogLevel2[\"Silly\"] = \"silly\";\n return LogLevel2;\n})(LogLevel || {});\nvar Logger = class {\n constructor() {\n this.logged = new EventDispatcher();\n this.history = [];\n this.profilers = {};\n }\n /**\n * Triggered when a new message is logged.\n */\n get onLogged() {\n return this.logged.subscribable;\n }\n log(payload) {\n this.logged.dispatch(payload);\n this.history.push(payload);\n }\n error(payload) {\n console.error(\n \"error from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"error\" /* Error */, payload);\n if (window.browserError) {\n window.browserError(\n typeof payload === \"string\" ? payload : payload.message\n );\n }\n }\n warn(payload) {\n console.warn(\n \"warning from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"warn\" /* Warn */, payload);\n }\n info(payload) {\n console.info(\n \"info from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"info\" /* Info */, payload);\n }\n http(payload) {\n console.log(\n \"http log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"http\" /* Http */, payload);\n }\n verbose(payload) {\n console.log(\n \"verbose log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"verbose\" /* Verbose */, payload);\n }\n debug(payload) {\n this.logLevel(\"debug\" /* Debug */, payload);\n }\n silly(payload) {\n console.log(\n \"silly log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"silly\" /* Silly */, payload);\n }\n logLevel(level, payload) {\n const result = typeof payload === \"string\" ? { message: payload } : payload;\n result.level = level;\n this.log(result);\n }\n profile(id, payload) {\n const time = performance.now();\n if (this.profilers[id]) {\n const timeEnd = this.profilers[id];\n delete this.profilers[id];\n const result = payload ?? { message: id };\n result.level ?? (result.level = \"debug\" /* Debug */);\n result.durationMs = time - timeEnd;\n this.log(result);\n return;\n }\n this.profilers[id] = time;\n }\n};\n\n// src/exporter/download-videos.ts\nasync function download(assets) {\n const videoRanges = /* @__PURE__ */ new Map();\n assets.forEach((frameAssets) => {\n frameAssets.forEach((asset) => {\n if (asset.type !== \"video\" || asset.decoder !== \"ffmpeg\") {\n return;\n }\n if (videoRanges.has(asset.src)) {\n const range2 = videoRanges.get(asset.src);\n range2.start = Math.min(range2.start, asset.currentTime);\n range2.end = Math.max(range2.end, asset.currentTime);\n return;\n }\n videoRanges.set(asset.src, {\n start: asset.currentTime,\n end: asset.currentTime\n });\n });\n });\n const videoDurations = Array.from(videoRanges.entries()).map(\n ([src, { start, end }]) => ({\n src,\n startTime: start,\n endTime: end\n })\n );\n videoDurations.forEach(({ src, startTime, endTime }) => {\n console.log(`downloading ${src} from ${startTime}s to ${endTime}s`);\n });\n const response = await fetch(\n \"/twick-ffmpeg-decoder/download-video-chunks\",\n {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(videoDurations)\n }\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const result = await response.json();\n if (!result.success) {\n throw new Error(`Error downloading video chunks: ${result.error}`);\n }\n console.log(\"finished downloading\");\n}\n\n// src/exporter/FFmpegExporter.ts\nvar _FFmpegExporterClient = class _FFmpegExporterClient {\n static async create(_, settings) {\n return new _FFmpegExporterClient(settings);\n }\n constructor(settings) {\n if (settings.exporter.name !== _FFmpegExporterClient.id) {\n throw new Error(\"Invalid exporter\");\n }\n this.settings = settings;\n this.exporterOptions = settings.exporter.options;\n }\n async start() {\n await this.invoke(\"start\", this.settings);\n }\n async handleFrame(canvas) {\n const blob = await new Promise(\n (resolve) => canvas.toBlob(resolve, \"image/png\")\n );\n if (!blob) {\n throw Error(\"Failed to convert canvas to Blob.\");\n }\n const dataUrl = await this.blobToDataUrl(blob);\n await this.invoke(\"handleFrame\", {\n data: dataUrl\n });\n }\n async blobToDataUrl(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n async stop(result) {\n await this.invoke(\"end\", result);\n await fetch(\"/twick-ffmpeg-decoder/finished\", {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({})\n });\n }\n async kill() {\n await this.invoke(\"kill\", {});\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n async generateAudio(assets, startFrame, endFrame) {\n await fetch(\"/audio-processing/generate-audio\", {\n method: \"POST\",\n body: JSON.stringify({\n tempDir: `twick-${this.settings.name}-${this.settings.hiddenFolderId}`,\n assets,\n startFrame,\n endFrame,\n fps: this.settings.fps\n })\n });\n }\n async mergeMedia() {\n const outputFilename = this.settings.name;\n const tempDir = `twick-${this.settings.name}-${this.settings.hiddenFolderId}`;\n const format = this.exporterOptions.format;\n await fetch(\"/audio-processing/merge-media\", {\n method: \"POST\",\n body: JSON.stringify({\n outputFilename,\n tempDir,\n format\n })\n });\n }\n /**\n * Remotely invoke a method on the server and wait for a response.\n *\n * @param method - The method name to execute on the server.\n * @param data - The data that will be passed as an argument to the method.\n * Should be serializable.\n */\n invoke(method, data) {\n if (import.meta.hot) {\n return new Promise((resolve, reject) => {\n const handle = (response) => {\n if (response.method !== method) {\n return;\n }\n _FFmpegExporterClient.response.unsubscribe(handle);\n if (response.status === \"success\") {\n resolve(response.data);\n } else {\n reject({\n message: `An error occurred while exporting the video: ${response.message}`,\n remarks: `Method: ${method}<br>Server error: ${response.message}`,\n object: data\n });\n }\n };\n _FFmpegExporterClient.response.subscribe(handle);\n import.meta.hot.send(\"twick:ffmpeg-exporter\", { method, data });\n });\n } else {\n throw new Error(\"FFmpegExporter can only be used locally.\");\n }\n }\n};\n_FFmpegExporterClient.id = \"@twick/core/ffmpeg\";\n_FFmpegExporterClient.displayName = \"Video (FFmpeg)\";\n_FFmpegExporterClient.response = new EventDispatcher();\n(() => {\n if (import.meta.hot) {\n import.meta.hot.on(\n `twick:ffmpeg-exporter-ack`,\n (response) => _FFmpegExporterClient.response.dispatch(response)\n );\n }\n})();\nvar FFmpegExporterClient = _FFmpegExporterClient;\n\n// src/tweening/helpers.ts\nfunction map(from, to, value) {\n return from + (to - from) * value;\n}\nfunction remap(fromIn, toIn, fromOut, toOut, value) {\n return fromOut + (value - fromIn) * (toOut - fromOut) / (toIn - fromIn);\n}\nfunction clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n}\nfunction clampRemap(fromIn, toIn, fromOut, toOut, value) {\n const remappedValue = remap(fromIn, toIn, fromOut, toOut, value);\n if (fromOut > toOut) [fromOut, toOut] = [toOut, fromOut];\n return clamp(fromOut, toOut, remappedValue);\n}\n\n// src/utils/useScene.ts\nvar SceneStack = [];\nfunction useScene() {\n const scene = SceneStack.at(-1);\n if (!scene) {\n throw new Error(\"The scene is not available in the current context.\");\n }\n return scene;\n}\nfunction startScene(scene) {\n SceneStack.push(scene);\n}\nfunction endScene(scene) {\n if (SceneStack.pop() !== scene) {\n throw new Error(\"startScene/endScene were called out of order.\");\n }\n}\nfunction useLogger() {\n return SceneStack.at(-1)?.logger ?? console;\n}\nfunction finishScene() {\n useScene().enterCanTransitionOut();\n}\n\n// src/utils/DetailedError.ts\nvar DetailedError = class extends Error {\n constructor(props, remarks) {\n if (typeof props === \"string\") {\n super(props);\n this.remarks = remarks;\n } else {\n super(props.message);\n this.remarks = props.remarks;\n this.object = props.object;\n this.durationMs = props.durationMs;\n this.inspect = props.inspect;\n }\n }\n};\n\n// src/utils/useThread.ts\nvar ThreadStack = [];\nfunction useThread() {\n const thread = ThreadStack.at(-1);\n if (!thread) {\n throw new DetailedError(\n \"The thread is not available in the current context.\",\n // language=markdown\n `\\`useThread()\\` can only be called from within generator functions.\n It's not available during rendering.`\n );\n }\n return thread;\n}\nfunction startThread(thread) {\n ThreadStack.push(thread);\n}\nfunction endThread(thread) {\n if (ThreadStack.pop() !== thread) {\n throw new Error(\"startThread/endThread was called out of order.\");\n }\n}\n\n// src/utils/beginSlide.ts\nfunction* beginSlide(name) {\n const { slides } = useScene();\n const thread = useThread();\n slides.register(name, thread.fixed);\n yield;\n while (slides.shouldWait(name)) {\n yield;\n }\n}\n\n// src/utils/capitalize.ts\nfunction capitalize(value) {\n return value[0].toUpperCase() + value.slice(1);\n}\n\n// src/utils/createRef.ts\nfunction createRef() {\n let value;\n const ref = (newValue) => {\n if (newValue !== void 0) {\n value = newValue;\n } else {\n return value;\n }\n };\n return ref;\n}\nfunction makeRef(object, key) {\n return (newValue) => {\n object[key] = newValue;\n };\n}\nfunction makeRefs() {\n return {};\n}\n\n// src/utils/createRefArray.ts\nfunction createRefArray() {\n const target = function() {\n };\n target.array = [];\n return new Proxy(target, Handler);\n}\nvar Handler = {\n apply(target, _, argArray) {\n if (argArray.length === 0) {\n return target.array[0];\n }\n target.array.push(...argArray);\n },\n get(target, property, receiver) {\n const value = Reflect.get(target.array, property, receiver);\n if (typeof value === \"function\") {\n return value.bind(target.array);\n }\n return value;\n },\n set(target, property, value, receiver) {\n return Reflect.set(target.array, property, value, receiver);\n }\n};\n\n// src/utils/createRefMap.ts\nfunction createRefMap() {\n const group = /* @__PURE__ */ new Map();\n group.entries();\n return new Proxy(group, Handler2);\n}\nvar Handler2 = {\n get(target, property) {\n if (Reflect.has(target, property)) {\n return Reflect.get(target, property);\n }\n if (property === \"mapRefs\") {\n return function(callback) {\n const result = [];\n for (const value of target.values()) {\n result.push(callback(value(), result.length));\n }\n return result;\n };\n }\n if (typeof property === \"string\") {\n let value = target.get(property);\n if (!value) {\n value = createRef();\n target.set(property, value);\n }\n return value;\n }\n },\n has(target, property) {\n if (Reflect.has(target, property)) {\n return true;\n }\n if (typeof property === \"string\") {\n return target.has(property);\n }\n return false;\n }\n};\n\n// src/utils/debug.ts\nfunction stringify(value) {\n switch (typeof value) {\n case \"string\":\n return value;\n case \"undefined\":\n return \"undefined\";\n default:\n if (Number.isNaN(value)) {\n return \"NaN\";\n }\n return JSON.stringify(value);\n }\n}\nfunction debug(payload) {\n const result = { message: stringify(payload) };\n if (payload && typeof payload === \"object\") {\n result.object = payload;\n }\n useLogger().debug(result);\n}\n\n// src/utils/deprecate.ts\nfunction deprecate(fn, message, remarks) {\n return function(...args) {\n useLogger().warn({ message, remarks, stack: new Error().stack });\n return fn.apply(this, args);\n };\n}\n\n// src/utils/errorToLog.ts\nfunction errorToLog(error) {\n return {\n message: error.message,\n stack: error.stack,\n remarks: error.remarks\n };\n}\n\n// src/utils/ExperimentalError.ts\nvar experimentalFeatures = `\nThis feature requires enabling the \\`experimentalFeatures\\` flag in your project\nconfiguration:\n\n\\`\\`\\`ts\nexport default makeProject({\n experimentalFeatures: true,\n // ...\n});\n\\`\\`\\`\n\n[Learn more](https://motioncanvas.io/docs/experimental) about experimental\nfeatures.\n`;\nvar ExperimentalError = class extends DetailedError {\n constructor(props, remarks) {\n if (typeof props === \"string\") {\n super({\n message: props,\n remarks: (remarks ?? \"\") + experimentalFeatures\n });\n } else {\n super({\n ...props,\n remarks: (props.remarks ?? \"\") + experimentalFeatures\n });\n }\n }\n};\n\n// src/utils/experimentalLog.ts\nfunction experimentalLog(message, remarks) {\n return {\n level: \"error\" /* Error */,\n message,\n remarks: (remarks ?? \"\") + experimentalFeatures\n };\n}\n\n// src/utils/getContext.ts\nfunction getContext(options, canvas = document.createElement(\"canvas\")) {\n const context = canvas.getContext(\"2d\", options);\n if (!context) {\n throw new Error(\"Could not create a 2D context.\");\n }\n return context;\n}\n\n// src/utils/math.ts\nvar RAD2DEG = 180 / Math.PI;\nvar DEG2RAD = Math.PI / 180;\n\n// src/utils/range.ts\nfunction range(first, second, step) {\n let from = 0;\n let to = first;\n if (second !== void 0) {\n from = first;\n to = second;\n }\n step = step === void 0 ? from < to ? 1 : -1 : step;\n const array = [];\n let length = Math.max(Math.ceil((to - from) / step), 0);\n let index = 0;\n while (length--) {\n array[index++] = from;\n from += step;\n }\n return array;\n}\n\n// src/utils/Semaphore.ts\nvar Semaphore = class {\n constructor() {\n this.resolveCurrent = null;\n this.current = null;\n }\n async acquire() {\n while (this.current) {\n await this.current;\n }\n this.current = new Promise((resolve) => {\n this.resolveCurrent = resolve;\n });\n }\n release() {\n this.current = null;\n this.resolveCurrent?.();\n this.resolveCurrent = null;\n }\n};\n\n// src/utils/useContext.ts\nfunction useContext(callback) {\n return useScene().lifecycleEvents.onBeginRender.subscribe(callback);\n}\nfunction useContextAfter(callback) {\n return useScene().lifecycleEvents.onFinishRender.subscribe(callback);\n}\n\n// src/utils/usePlayback.ts\nvar PlaybackStack = [];\nfunction usePlayback() {\n const playback = PlaybackStack.at(-1);\n if (!playback) {\n throw new Error(\"The playback is not available in the current context.\");\n }\n return playback;\n}\nfunction startPlayback(playback) {\n PlaybackStack.push(playback);\n}\nfunction endPlayback(playback) {\n if (PlaybackStack.pop() !== playback) {\n throw new Error(\"startPlayback/endPlayback were called out of order.\");\n }\n}\n\n// src/utils/useTime.ts\nfunction useTime() {\n return useThread().time();\n}\n\n// src/tweening/interpolationFunctions.ts\nfunction textLerp(from, to, value) {\n if (to.length >= from.length) {\n const current = Math.floor(to.length * value);\n const currentLength = Math.floor(map(from.length - 1, to.length, value));\n let text = \"\";\n for (let i = 0; i < to.length; i++) {\n if (i < current) {\n text += to[i];\n } else if (from[i] || i <= currentLength) {\n text += from[i] ?? to[i];\n }\n }\n return text;\n } else {\n const current = Math.round(from.length * (1 - value));\n const currentLength = Math.floor(map(from.length + 1, to.length, value));\n const text = [];\n for (let i = from.length - 1; i >= 0; i--) {\n if (i < current) {\n text.unshift(from[i]);\n } else if (to[i] || i < currentLength) {\n text.unshift(to[i] ?? from[i]);\n }\n }\n return text.join(\"\");\n }\n}\nfunction deepLerp(from, to, value, suppressWarnings = false) {\n if (value === 0) return from;\n if (value === 1) return to;\n if (from == null || to == null) {\n if (!suppressWarnings) {\n useLogger().warn(\n `Attempting to lerp ${from} -> ${to} may result in unexpected behavior.`\n );\n }\n return void 0;\n }\n if (typeof from === \"number\" && typeof to === \"number\") {\n return map(from, to, value);\n }\n if (typeof from === \"string\" && typeof to === \"string\") {\n return textLerp(from, to, value);\n }\n if (typeof from === \"boolean\" && typeof to === \"boolean\") {\n return value < 0.5 ? from : to;\n }\n if (\"lerp\" in from) {\n return from.lerp(to, value);\n }\n if (from && to && typeof from === \"object\" && typeof to === \"object\") {\n if (Array.isArray(from) && Array.isArray(to)) {\n if (from.length === to.length) {\n return from.map((f, i) => deepLerp(f, to[i], value));\n }\n } else {\n let toObject = false;\n if (!(from instanceof Map) && !(to instanceof Map)) {\n toObject = true;\n from = new Map(Object.entries(from));\n to = new Map(Object.entries(to));\n }\n if (from instanceof Map && to instanceof Map) {\n const result = /* @__PURE__ */ new Map();\n for (const key of /* @__PURE__ */ new Set([...from.keys(), ...to.keys()])) {\n const inter = deepLerp(from.get(key), to.get(key), value, true);\n if (inter !== void 0) result.set(key, inter);\n }\n return toObject ? Object.fromEntries(result) : result;\n }\n }\n }\n return to;\n}\nfunction boolLerp(from, to, value) {\n return value < 0.5 ? from : to;\n}\nfunction arcLerp(value, reverse, ratio) {\n let flip = reverse;\n if (ratio > 1) {\n ratio = 1 / ratio;\n } else {\n flip = !flip;\n }\n const normalized = flip ? Math.acos(clamp(-1, 1, 1 - value)) : Math.asin(value);\n const radians = map(normalized, map(0, Math.PI / 2, value), ratio);\n let xValue = Math.sin(radians);\n let yValue = 1 - Math.cos(radians);\n if (reverse) {\n [xValue, yValue] = [yValue, xValue];\n }\n return { x: xValue, y: yValue };\n}\n\n// src/decorators/decorate.ts\nfunction decorate(fn, ...decorators) {\n const target = { [fn.name]: fn };\n const descriptor = Object.getOwnPropertyDescriptor(target, fn.name);\n if (descriptor) {\n for (let i = decorators.length - 1; i >= 0; i--) {\n decorators[i](target, fn.name, descriptor);\n }\n }\n}\n\n// src/decorators/lazy.ts\nvar UNINITIALIZED = /* @__PURE__ */ Symbol.for(\"@twick/core/decorators/UNINITIALIZED\");\nfunction lazy(factory) {\n return (target, propertyKey) => {\n let value = UNINITIALIZED;\n Object.defineProperty(target, propertyKey, {\n get() {\n if (value === UNINITIALIZED) {\n value = factory.call(this);\n }\n return value;\n }\n });\n };\n}\n\n// src/decorators/threadable.ts\nfunction threadable(customName) {\n return function(_, propertyKey, descriptor) {\n const value = descriptor?.value;\n if (typeof value === \"function\" && value.prototype) {\n const prototype = value.prototype;\n try {\n const nameDescriptor = Object.getOwnPropertyDescriptor(\n prototype,\n \"name\"\n );\n if (!nameDescriptor || nameDescriptor.writable) {\n prototype.name = customName ?? propertyKey;\n }\n } catch {\n }\n prototype.threadable = true;\n }\n };\n}\n\n// src/tweening/spring.ts\ndecorate(spring, threadable());\nfunction* spring(spring2, from, to, settleToleranceOrOnProgress, onProgressOrOnEnd, onEnd) {\n const settleTolerance = typeof settleToleranceOrOnProgress === \"number\" ? settleToleranceOrOnProgress : 1e-3;\n onEnd = typeof settleToleranceOrOnProgress === \"number\" ? onEnd : onProgressOrOnEnd;\n const onProgress = (value, time) => {\n if (typeof settleToleranceOrOnProgress === \"function\") {\n settleToleranceOrOnProgress(value, time);\n } else if (typeof onProgressOrOnEnd === \"function\") {\n onProgressOrOnEnd(value, time);\n }\n };\n spring2 = spring2 ?? {\n mass: 0.05,\n stiffness: 10,\n damping: 0.5\n };\n if (spring2.mass <= 0) {\n useLogger().error(new Error(\"Spring mass must be greater than 0.\"));\n return;\n }\n if (spring2.stiffness < 0) {\n useLogger().error(\n new Error(\"Spring stiffness must be greater or equal to 0.\")\n );\n return;\n }\n if (spring2.damping < 0) {\n useLogger().error(\n new Error(\"Spring damping must be greater or equal to 0.\")\n );\n return;\n }\n const thread = useThread();\n let position = from;\n let velocity = spring2.initialVelocity ?? 0;\n const update = (dt) => {\n if (spring2 === null) {\n return;\n }\n const positionDelta = position - to;\n const force = -spring2.stiffness * positionDelta - spring2.damping * velocity;\n velocity += force / spring2.mass * dt;\n position += velocity * dt;\n };\n const simulationFrames = 120;\n const timeStep = 1 / simulationFrames;\n onProgress(from, 0);\n const startTime = thread.time();\n let simulationTime = startTime;\n let settled = false;\n while (!settled) {\n while (simulationTime < thread.fixed) {\n const difference = thread.fixed - simulationTime;\n if (timeStep > difference) {\n update(difference);\n simulationTime = thread.fixed;\n } else {\n update(timeStep);\n simulationTime += timeStep;\n }\n if (Math.abs(to - position) < settleTolerance && Math.abs(velocity) < settleTolerance) {\n thread.time(simulationTime);\n settled = true;\n break;\n }\n }\n if (!settled) {\n onProgress(position, thread.fixed - startTime);\n yield;\n }\n }\n onProgress(to, thread.fixed - startTime);\n onEnd?.(to, thread.fixed - startTime);\n}\nfunction makeSpring(mass, stiffness, damping, initialVelocity) {\n return {\n mass,\n stiffness,\n damping,\n initialVelocity\n };\n}\nvar BeatSpring = makeSpring(0.13, 5.7, 1.2, 10);\nvar PlopSpring = makeSpring(0.2, 20, 0.68, 0);\nvar BounceSpring = makeSpring(0.08, 4.75, 0.05, 0);\nvar SwingSpring = makeSpring(0.39, 19.85, 2.82, 0);\nvar JumpSpring = makeSpring(0.04, 10, 0.7, 8);\nvar StrikeSpring = makeSpring(0.03, 20, 0.9, 4.8);\nvar SmoothSpring = makeSpring(0.16, 15.35, 1.88, 0);\n\n// src/tweening/timingFunctions.ts\nfunction sin(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.sin(value));\n}\nfunction easeInSine(value, from = 0, to = 1) {\n value = 1 - Math.cos(value * Math.PI / 2);\n return map(from, to, value);\n}\nfunction easeOutSine(value, from = 0, to = 1) {\n value = Math.sin(value * Math.PI / 2);\n return map(from, to, value);\n}\nfunction easeInOutSine(value, from = 0, to = 1) {\n value = -(Math.cos(Math.PI * value) - 1) / 2;\n return map(from, to, value);\n}\nfunction easeInQuad(value, from = 0, to = 1) {\n value = value * value;\n return map(from, to, value);\n}\nfunction easeOutQuad(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 2);\n return map(from, to, value);\n}\nfunction easeInOutQuad(value, from = 0, to = 1) {\n value = value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n return map(from, to, value);\n}\nfunction easeInCubic(value, from = 0, to = 1) {\n value = value * value * value;\n return map(from, to, value);\n}\nfunction easeOutCubic(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 3);\n return map(from, to, value);\n}\nfunction easeInOutCubic(value, from = 0, to = 1) {\n value = value < 0.5 ? 4 * value * value * value : 1 - Math.pow(-2 * value + 2, 3) / 2;\n return map(from, to, value);\n}\nfunction easeInQuart(value, from = 0, to = 1) {\n value = value * value * value * value;\n return map(from, to, value);\n}\nfunction easeOutQuart(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 4);\n return map(from, to, value);\n}\nfunction easeInOutQuart(value, from = 0, to = 1) {\n value = value < 0.5 ? 8 * value * value * value * value : 1 - Math.pow(-2 * value + 2, 4) / 2;\n return map(from, to, value);\n}\nfunction easeInQuint(value, from = 0, to = 1) {\n value = value * value * value * value * value;\n return map(from, to, value);\n}\nfunction easeOutQuint(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 5);\n return map(from, to, value);\n}\nfunction easeInOutQuint(value, from = 0, to = 1) {\n value = value < 0.5 ? 16 * value * value * value * value * value : 1 - Math.pow(-2 * value + 2, 5) / 2;\n return map(from, to, value);\n}\nfunction easeInExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : Math.pow(2, 10 * value - 10);\n return map(from, to, value);\n}\nfunction easeOutExpo(value, from = 0, to = 1) {\n value = value === 1 ? 1 : 1 - Math.pow(2, -10 * value);\n return map(from, to, value);\n}\nfunction easeInOutExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : value === 1 ? 1 : value < 0.5 ? Math.pow(2, 20 * value - 10) / 2 : (2 - Math.pow(2, -20 * value + 10)) / 2;\n return map(from, to, value);\n}\nfunction easeInCirc(value, from = 0, to = 1) {\n value = 1 - Math.sqrt(1 - Math.pow(value, 2));\n return map(from, to, value);\n}\nfunction easeOutCirc(value, from = 0, to = 1) {\n value = Math.sqrt(1 - Math.pow(value - 1, 2));\n return map(from, to, value);\n}\nfunction easeInOutCirc(value, from = 0, to = 1) {\n value = value < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * value, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * value + 2, 2)) + 1) / 2;\n return map(from, to, value);\n}\nfunction createEaseInBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = (s + 1) * value * value * value - s * value * value;\n return map(from, to, value);\n };\n}\nfunction createEaseOutBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = 1 + (s + 1) * Math.pow(value - 1, 3) + s * Math.pow(value - 1, 2);\n return map(from, to, value);\n };\n}\nfunction createEaseInOutBack(s = 1.70158, v = 1.525) {\n return (value, from = 0, to = 1) => {\n value = value < 0.5 ? Math.pow(2 * value, 2) * ((s * v + 1) * 2 * value - s * v) / 2 : (Math.pow(2 * value - 2, 2) * ((s * v + 1) * (value * 2 - 2) + s * v) + 2) / 2;\n return map(from, to, value);\n };\n}\nfunction createEaseInElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : -Math.pow(2, 10 * value - 10) * Math.sin((value * 10 - 10.75) * s);\n return map(from, to, value);\n };\n}\nfunction createEaseOutElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : Math.pow(2, -10 * value) * Math.sin((value * 10 - 0.75) * s) + 1;\n return map(from, to, value);\n };\n}\nfunction createEaseInOutElastic(s = 1.39626) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : value < 0.5 ? -(Math.pow(2, 20 * value - 10) * Math.sin((20 * value - 11.125) * s)) / 2 : Math.pow(2, -20 * value + 10) * Math.sin((20 * value - 11.125) * s) / 2 + 1;\n return map(from, to, value);\n };\n}\nfunction createEaseInBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce2 = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return 1 - easeOutBounce2(1 - value, from, to);\n };\n}\nfunction createEaseOutBounce(n = 7.5625, d = 2.75) {\n return (value, from = 0, to = 1) => {\n if (value < 1 / d) {\n value = n * value * value;\n } else if (value < 2 / d) {\n value = n * (value -= 1.505 / d) * value + 0.75;\n } else if (value < 2.5 / d) {\n value = n * (value -= 2.25 / d) * value + 0.9375;\n } else {\n value = n * (value -= 2.625 / d) * value + 0.984375;\n }\n return map(from, to, value);\n };\n}\nfunction createEaseInOutBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce2 = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return value < 0.5 ? (1 - easeOutBounce2(1 - 2 * value, from, to)) / 2 : (1 + easeOutBounce2(2 * value - 1, from, to)) / 2;\n };\n}\nfunction linear(value, from = 0, to = 1) {\n return map(from, to, value);\n}\nfunction cos(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.cos(value));\n}\nvar easeInBack = createEaseInBack();\nvar easeOutBack = createEaseOutBack();\nvar easeInOutBack = createEaseInOutBack();\nvar easeInBounce = createEaseInBounce();\nvar easeOutBounce = createEaseOutBounce();\nvar easeInOutBounce = createEaseInOutBounce();\nvar easeInElastic = createEaseInElastic();\nvar easeOutElastic = createEaseOutElastic();\nvar easeInOutElastic = createEaseInOutElastic();\n\n// src/tweening/tween.ts\ndecorate(tween, threadable());\nfunction* tween(seconds, onProgress, onEnd) {\n const thread = useThread();\n const startTime = thread.time();\n const endTime = thread.time() + seconds;\n onProgress(0, 0);\n while (endTime > thread.fixed) {\n const time = thread.fixed - startTime;\n const value = time / seconds;\n if (time > 0) {\n onProgress(value, time);\n }\n yield;\n }\n thread.time(endTime);\n onProgress(1, seconds);\n onEnd?.(1, seconds);\n}\n\n// src/exporter/ImageExporter.ts\nvar EXPORT_FRAME_LIMIT = 256;\nvar EXPORT_RETRY_DELAY = 1e3;\nvar _ImageExporter = class _ImageExporter {\n constructor(logger, settings) {\n this.logger = logger;\n this.frameLookup = /* @__PURE__ */ new Set();\n this.handleResponse = ({ frame }) => {\n this.frameLookup.delete(frame);\n };\n if (settings.exporter.name !== _ImageExporter.id) {\n throw new Error(\n `Invalid exporter name: ${settings.exporter.name}. Expected: ${_ImageExporter.id}`\n );\n }\n const options = settings.exporter.options;\n this.projectName = settings.name;\n this.quality = clamp(0, 1, options.quality / 100);\n this.fileType = options.fileType;\n this.groupByScene = options.groupByScene;\n }\n static async create(project, settings) {\n return new _ImageExporter(project.logger, settings);\n }\n async start() {\n _ImageExporter.response.subscribe(this.handleResponse);\n }\n async handleFrame(canvas, frame, sceneFrame, sceneName, signal) {\n if (this.frameLookup.has(frame)) {\n this.logger.warn(`Frame no. ${frame} is already being exported.`);\n return;\n }\n if (import.meta.hot) {\n while (this.frameLookup.size > EXPORT_FRAME_LIMIT) {\n await new Promise((resolve) => setTimeout(resolve, EXPORT_RETRY_DELAY));\n if (signal.aborted) {\n return;\n }\n }\n this.frameLookup.add(frame);\n import.meta.hot.send(\"twick:export\", {\n frame,\n sceneFrame,\n data: canvas.toDataURL(this.fileType, this.quality),\n mimeType: this.fileType,\n subDirectories: this.groupByScene ? [this.projectName, sceneName] : [this.projectName],\n groupByScene: this.groupByScene\n });\n }\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n async stop() {\n while (this.frameLookup.size > 0) {\n await new Promise((resolve) => setTimeout(resolve, EXPORT_RETRY_DELAY));\n }\n _ImageExporter.response.unsubscribe(this.handleResponse);\n }\n};\n_ImageExporter.id = \"@twick/core/image-sequence\";\n_ImageExporter.displayName = \"Image sequence\";\n_ImageExporter.response = new EventDispatcher();\n(() => {\n if (import.meta.hot) {\n import.meta.hot.on(\"twick:export-ack\", (response) => {\n _ImageExporter.response.dispatch(response);\n });\n }\n})();\nvar ImageExporter = _ImageExporter;\n\n// src/exporter/WasmExporter.ts\nimport loadMp4Module from \"mp4-wasm\";\nvar _WasmExporter = class _WasmExporter {\n constructor(project, settings) {\n this.project = project;\n this.settings = settings;\n }\n static async create(project, settings) {\n return new _WasmExporter(project, settings);\n }\n async start() {\n const resp = await fetch(\"/@mp4-wasm\");\n const buffer = await resp.arrayBuffer();\n const mp4 = await loadMp4Module({\n wasmBinary: buffer\n });\n this.encoder = mp4.createWebCodecsEncoder({\n width: this.settings.size.x,\n height: this.settings.size.y,\n fps: this.project.settings.rendering.fps\n });\n }\n async handleFrame(canvas) {\n const frame = new VideoFrame(canvas, { timestamp: 0 });\n await this.encoder.addFrame(frame);\n frame.close();\n }\n async stop() {\n const buf = await this.encoder.end();\n const formData = new FormData();\n formData.append(\"file\", new Blob([buf], { type: \"video/mp4\" }), \"video.mp4\");\n formData.append(\n \"tempDir\",\n `twick-${this.settings.name}-${this.settings.hiddenFolderId}`\n );\n await fetch(\"/twick-ffmpeg-decoder/finished\", {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({})\n });\n await fetch(\"/uploadVideoFile\", {\n method: \"POST\",\n body: formData\n });\n }\n async generateAudio(assets, startFrame, endFrame) {\n await fetch(\"/audio-processing/generate-audio\", {\n method: \"POST\",\n // TODO: add type and validate on the other side\n body: JSON.stringify({\n tempDir: `twick-${this.settings.name}-${this.settings.hiddenFolderId}`,\n assets,\n startFrame,\n endFrame,\n fps: this.settings.fps\n })\n });\n }\n async mergeMedia() {\n const outputFilename = this.settings.name;\n const tempDir = `twick-${this.settings.name}-${this.settings.hiddenFolderId}`;\n await fetch(\"/audio-processing/merge-media\", {\n method: \"POST\",\n // TODO: add type and validate on the other side\n body: JSON.stringify({\n outputFilename,\n tempDir,\n format: \"mp4\"\n })\n });\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n};\n_WasmExporter.id = \"@twick/core/wasm\";\n_WasmExporter.displayName = \"Video (Wasm)\";\nvar WasmExporter = _WasmExporter;\n\n// src/plugin/makePlugin.ts\nfunction makePlugin(plugin) {\n return typeof plugin === \"function\" ? plugin : () => plugin;\n}\n\n// src/plugin/DefaultPlugin.ts\nvar DefaultPlugin_default = makePlugin({\n name: \"@twick/core/default\",\n exporters() {\n return [WasmExporter, FFmpegExporterClient, ImageExporter];\n }\n});\n\n// src/types/alignment-enums.ts\nvar Direction = /* @__PURE__ */ ((Direction2) => {\n Direction2[Direction2[\"Top\"] = 4] = \"Top\";\n Direction2[Direction2[\"Bottom\"] = 8] = \"Bottom\";\n Direction2[Direction2[\"Left\"] = 16] = \"Left\";\n Direction2[Direction2[\"Right\"] = 32] = \"Right\";\n return Direction2;\n})(Direction || {});\nvar Center = /* @__PURE__ */ ((Center2) => {\n Center2[Center2[\"Vertical\"] = 1] = \"Vertical\";\n Center2[Center2[\"Horizontal\"] = 2] = \"Horizontal\";\n return Center2;\n})(Center || {});\nvar Origin = /* @__PURE__ */ ((Origin2) => {\n Origin2[Origin2[\"Middle\"] = 3] = \"Middle\";\n Origin2[Origin2[\"Top\"] = 5] = \"Top\";\n Origin2[Origin2[\"Bottom\"] = 9] = \"Bottom\";\n Origin2[Origin2[\"Left\"] = 18] = \"Left\";\n Origin2[Origin2[\"Right\"] = 34] = \"Right\";\n Origin2[Origin2[\"TopLeft\"] = 20] = \"TopLeft\";\n Origin2[Origin2[\"TopRight\"] = 36] = \"TopRight\";\n Origin2[Origin2[\"BottomLeft\"] = 24] = \"BottomLeft\";\n Origin2[Origin2[\"BottomRight\"] = 40] = \"BottomRight\";\n return Origin2;\n})(Origin || {});\n\n// src/flow/join.ts\ndecorate(join, threadable());\nfunction* join(first, ...tasks) {\n let all2 = true;\n if (typeof first === \"boolean\") {\n all2 = first;\n } else {\n tasks.push(first);\n }\n const parent = useThread();\n const threads2 = tasks.map((task) => parent.children.find((thread) => thread.runner === task)).filter((thread) => thread);\n const startTime = parent.time();\n let childTime;\n if (all2) {\n while (threads2.find((thread) => !thread.canceled)) {\n yield;\n }\n childTime = Math.max(...threads2.map((thread) => thread.time()));\n } else {\n while (!threads2.find((thread) => thread.canceled)) {\n yield;\n }\n const canceled = threads2.filter((thread) => thread.canceled);\n childTime = Math.min(...canceled.map((thread) => thread.time()));\n }\n parent.time(Math.max(startTime, childTime));\n}\n\n// src/flow/all.ts\ndecorate(all, threadable());\nfunction* all(...tasks) {\n for (const task of tasks) {\n yield task;\n }\n yield* join(...tasks);\n}\n\n// src/flow/any.ts\ndecorate(any, threadable());\nfunction* any(...tasks) {\n for (const task of tasks) {\n yield task;\n }\n yield* join(false, ...tasks);\n}\n\n// src/flow/chain.ts\ndecorate(chain, threadable());\nfunction* chain(...tasks) {\n for (const generator of tasks) {\n if (\"next\" in generator) {\n yield* generator;\n } else {\n generator();\n }\n }\n}\n\n// src/flow/scheduling.ts\ndecorate(waitFor, threadable());\nfunction* waitFor(seconds = 0, after) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n while (targetTime - step > thread.fixed) {\n yield;\n }\n thread.time(targetTime);\n if (after) {\n yield* after;\n }\n}\n\n// src/flow/delay.ts\ndecorate(delay, threadable());\nfunction* delay(time, task) {\n yield* waitFor(time);\n if (\"next\" in task) {\n yield* task;\n } else {\n task();\n }\n}\n\n// src/flow/every.ts\nfunction every(interval, callback) {\n let changed = false;\n decorate(everyRunner, threadable(\"every\"));\n function* everyRunner() {\n const project = usePlayback();\n let acc = 0;\n let tick = 0;\n callback(tick);\n changed = true;\n while (true) {\n if (acc >= project.secondsToFrames(interval)) {\n acc = 0;\n tick++;\n callback(tick);\n changed = true;\n } else {\n changed = false;\n }\n acc++;\n yield;\n }\n }\n return {\n runner: everyRunner(),\n setInterval(value) {\n interval = value;\n changed = false;\n },\n setCallback(value) {\n callback = value;\n changed = false;\n },\n *sync() {\n while (!changed) {\n yield;\n }\n }\n };\n}\n\n// src/flow/loop.ts\nvar infiniteLoop = `\nMake sure to use \\`yield\\` or \\`spawn()\\` to execute the loop concurrently in a\nseparate thread:\n\n\\`\\`\\`ts wrong\n// prettier-ignore\nyield* loop(() => rect().opacity(0).opacity(1, 1));\n\\`\\`\\`\n\n\\`\\`\\`ts correct\nyield loop(() => rect().opacity(0).opacity(1, 1));\n// or\nspawn(loop(() => rect().opacity(0).opacity(1, 1)));\n\\`\\`\\`\n\nIf you want to execute the loop a finite number of times, specify the iteration\ncount as the first argument:\n\n\\`\\`\\`ts\n// prettier-ignore\nyield* loop(10, () => rect().opacity(0).opacity(1, 1));\n// ^ iteration count\n\\`\\`\\`\n`;\ndecorate(loop, threadable());\nfunction* loop(iterations, factory) {\n if (typeof iterations !== \"number\") {\n factory = iterations;\n iterations = Infinity;\n }\n if (iterations === Infinity && useThread().parent === null) {\n useLogger().error({\n message: \"Tried to execute an infinite loop in the main thread.\",\n remarks: infiniteLoop,\n stack: new Error().stack\n });\n return;\n }\n for (let i = 0; i < iterations; i++) {\n const generator = factory(i);\n if (generator) {\n yield* generator;\n } else {\n yield;\n }\n }\n}\n\n// src/flow/loopFor.ts\ndecorate(loopFor, threadable());\nfunction* loopFor(seconds, factory) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n let iteration = 0;\n while (targetTime - step > thread.fixed) {\n const generator = factory(iteration);\n if (generator) {\n yield* generator;\n } else {\n yield;\n }\n iteration += 1;\n }\n thread.time(targetTime);\n}\n\n// src/flow/names.ts\nfunction setTaskName(task, source) {\n const prototype = Object.getPrototypeOf(task);\n if (prototype && !prototype.threadable) {\n prototype.threadable = true;\n try {\n const resolvedName = typeof source === \"string\" ? source : getTaskName(source);\n const nameDescriptor = Object.getOwnPropertyDescriptor(\n prototype,\n \"name\"\n );\n if (!nameDescriptor || nameDescriptor.writable) {\n prototype.name = resolvedName;\n }\n } catch {\n }\n }\n}\nfunction getTaskName(task) {\n return Object.getPrototypeOf(task).name ?? null;\n}\n\n// src/flow/run.ts\nfunction run(firstArg, runner) {\n let task;\n if (typeof firstArg === \"string\") {\n task = runner();\n setTaskName(task, firstArg);\n } else {\n task = firstArg();\n setTaskName(task, task);\n }\n return task;\n}\n\n// src/flow/sequence.ts\ndecorate(sequence, threadable());\nfunction* sequence(delay2, ...tasks) {\n for (const task of tasks) {\n yield task;\n yield* waitFor(delay2);\n }\n yield* join(...tasks);\n}\n\n// src/signals/DependencyContext.ts\nvar _DependencyContext = class _DependencyContext {\n constructor(owner) {\n this.owner = owner;\n this.dependencies = /* @__PURE__ */ new Set();\n this.event = new FlagDispatcher();\n this.markDirty = () => this.event.raise();\n this.invokable = this.invoke.bind(this);\n Object.defineProperty(this.invokable, \"context\", {\n value: this\n });\n Object.defineProperty(this.invokable, \"toPromise\", {\n value: this.toPromise.bind(this)\n });\n }\n static collectPromise(promise, initialValue = null) {\n const handle = {\n promise,\n value: initialValue,\n stack: new Error().stack\n };\n const context = this.collectionStack.at(-1);\n if (context) {\n handle.owner = context.owner;\n }\n promise.then((value) => {\n handle.value = value;\n context?.markDirty();\n });\n this.promises.push(handle);\n return handle;\n }\n static hasPromises() {\n return this.promises.length > 0;\n }\n static async consumePromises() {\n const promises = [...this.promises];\n await Promise.all(promises.map((handle) => handle.promise));\n this.promises = this.promises.filter((v) => !promises.includes(v));\n return promises;\n }\n invoke() {\n }\n startCollecting() {\n if (_DependencyContext.collectionSet.has(this)) {\n throw new DetailedError(\n \"A circular dependency occurred between signals.\",\n `This can happen when signals reference each other in a loop.\n Try using the attached stack trace to locate said loop.`\n );\n }\n _DependencyContext.collectionSet.add(this);\n _DependencyContext.collectionStack.push(this);\n }\n finishCollecting() {\n _DependencyContext.collectionSet.delete(this);\n if (_DependencyContext.collectionStack.pop() !== this) {\n throw new Error(\"collectStart/collectEnd was called out of order.\");\n }\n }\n clearDependencies() {\n this.dependencies.forEach((dep) => dep.unsubscribe(this.markDirty));\n this.dependencies.clear();\n }\n collect() {\n const signal = _DependencyContext.collectionStack.at(-1);\n if (signal) {\n signal.dependencies.add(this.event.subscribable);\n this.event.subscribe(signal.markDirty);\n }\n }\n dispose() {\n this.clearDependencies();\n this.event.clear();\n this.owner = null;\n }\n async toPromise() {\n do {\n await _DependencyContext.consumePromises();\n this.invokable();\n } while (_DependencyContext.hasPromises());\n return this.invokable;\n }\n};\n_DependencyContext.collectionSet = /* @__PURE__ */ new Set();\n_DependencyContext.collectionStack = [];\n_DependencyContext.promises = [];\nvar DependencyContext = _DependencyContext;\n\n// src/signals/symbols.ts\nvar DEFAULT = /* @__PURE__ */ Symbol.for(\"@twick/core/signals/default\");\n\n// src/signals/utils.ts\nfunction isReactive(value) {\n return typeof value === \"function\";\n}\nfunction modify(value, modification) {\n return isReactive(value) ? () => modification(value()) : modification(value);\n}\nfunction unwrap(value) {\n return isReactive(value) ? value() : value;\n}\n\n// src/signals/SignalContext.ts\nvar SignalContext = class extends DependencyContext {\n constructor(initial, interpolation, owner = void 0, parser = (value) => value, extensions = {}) {\n super(owner);\n this.initial = initial;\n this.interpolation = interpolation;\n this.parser = parser;\n this.tweening = false;\n Object.defineProperty(this.invokable, \"reset\", {\n value: this.reset.bind(this)\n });\n Object.defineProperty(this.invokable, \"save\", {\n value: this.save.bind(this)\n });\n Object.defineProperty(this.invokable, \"isInitial\", {\n value: this.isInitial.bind(this)\n });\n if (this.initial !== void 0) {\n this.current = this.initial;\n this.markDirty();\n if (!isReactive(this.initial)) {\n this.last = this.parse(this.initial);\n }\n }\n this.extensions = {\n getter: this.getter.bind(this),\n setter: this.setter.bind(this),\n tweener: this.tweener.bind(this),\n ...extensions\n };\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n set(value) {\n this.extensions.setter(value);\n return this.owner;\n }\n setter(value) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n if (this.current === value) {\n return this.owner;\n }\n this.current = value;\n this.markDirty();\n this.clearDependencies();\n if (!isReactive(value)) {\n this.last = this.parse(value);\n }\n return this.owner;\n }\n get() {\n return this.extensions.getter();\n }\n getter() {\n if (this.event.isRaised() && isReactive(this.current)) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.parse(this.current());\n } catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n invoke(value, duration, timingFunction = easeInOutCubic, interpolationFunction = this.interpolation) {\n if (value === void 0) {\n return this.get();\n }\n if (duration === void 0) {\n return this.set(value);\n }\n const queue = this.createQueue(timingFunction, interpolationFunction);\n return queue.to(value, duration);\n }\n createQueue(defaultTimingFunction, defaultInterpolationFunction) {\n const initial = this.get();\n const queue = [];\n const task = run(\"animation chain\", function* animate() {\n while (queue.length > 0) {\n yield* queue.shift();\n }\n });\n task.to = (value, duration, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(\n this.tween(value, duration, timingFunction, interpolationFunction)\n );\n return task;\n };\n task.back = (time, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(\n this.tween(\n initial,\n time,\n defaultTimingFunction,\n defaultInterpolationFunction\n )\n );\n return task;\n };\n task.wait = (duration) => {\n queue.push(waitFor(duration));\n return task;\n };\n task.run = (generator) => {\n queue.push(generator);\n return task;\n };\n task.do = (callback) => {\n queue.push(\n run(function* () {\n callback();\n })\n );\n return task;\n };\n return task;\n }\n *tween(value, duration, timingFunction, interpolationFunction) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n this.tweening = true;\n yield* this.extensions.tweener(\n value,\n duration,\n timingFunction,\n interpolationFunction\n );\n this.set(value);\n this.tweening = false;\n }\n *tweener(value, duration, timingFunction, interpolationFunction) {\n const from = this.get();\n yield* tween(duration, (v) => {\n this.set(\n interpolationFunction(\n from,\n this.parse(unwrap(value)),\n timingFunction(v)\n )\n );\n });\n }\n dispose() {\n super.dispose();\n this.initial = void 0;\n this.current = void 0;\n this.last = void 0;\n }\n /**\n * Reset the signal to its initial value (if one has been set).\n *\n * @example\n * ```ts\n * const signal = createSignal(7);\n *\n * signal.reset();\n * // same as:\n * signal(7);\n * ```\n */\n reset() {\n if (this.initial !== void 0) {\n this.set(this.initial);\n }\n return this.owner;\n }\n /**\n * Compute the current value of the signal and immediately set it.\n *\n * @remarks\n * This method can be used to stop the signal from updating while keeping its\n * current value.\n *\n * @example\n * ```ts\n * signal.save();\n * // same as:\n * signal(signal());\n * ```\n */\n save() {\n return this.set(this.get());\n }\n /**\n * Check if the signal is currently using its initial value.\n *\n * @example\n * ```ts\n *\n * const signal = createSignal(0);\n * signal.isInitial(); // true\n *\n * signal(5);\n * signal.isInitial(); // false\n *\n * signal(DEFAULT);\n * signal.isInitial(); // true\n * ```\n */\n isInitial() {\n this.collect();\n return this.current === this.initial;\n }\n /**\n * Get the initial value of this signal.\n */\n getInitial() {\n return this.initial;\n }\n /**\n * Get the raw value of this signal.\n *\n * @remarks\n * If the signal was provided with a factory function, the function itself\n * will be returned, without invoking it.\n *\n * This method can be used to create copies of signals.\n *\n * @example\n * ```ts\n * const a = createSignal(2);\n * const b = createSignal(() => a);\n * // b() == 2\n *\n * const bClone = createSignal(b.raw());\n * // bClone() == 2\n *\n * a(4);\n * // b() == 4\n * // bClone() == 4\n * ```\n */\n raw() {\n return this.current;\n }\n /**\n * Is the signal undergoing a tween?\n */\n isTweening() {\n return this.tweening;\n }\n};\n\n// src/signals/CompoundSignalContext.ts\nvar CompoundSignalContext = class extends SignalContext {\n constructor(entries, parser, initial, interpolation, owner = void 0, extensions = {}) {\n var _a;\n super(void 0, interpolation, owner, parser, extensions);\n this.entries = entries;\n this.signals = [];\n this.parser = parser;\n for (const entry of entries) {\n let key;\n let signal;\n if (Array.isArray(entry)) {\n [key, signal] = entry;\n (_a = signal.context).owner ?? (_a.owner = this);\n } else {\n key = entry;\n signal = new SignalContext(\n modify(initial, (value) => parser(value)[entry]),\n map,\n owner ?? this.invokable\n ).toSignal();\n }\n this.signals.push([key, signal]);\n Object.defineProperty(this.invokable, key, { value: signal });\n }\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n getter() {\n return this.parse(\n Object.fromEntries(\n this.signals.map(([key, property]) => [key, property()])\n )\n );\n }\n setter(value) {\n if (isReactive(value)) {\n for (const [key, property] of this.signals) {\n property(() => this.parser(value())[key]);\n }\n } else {\n const parsed = this.parse(value);\n for (const [key, property] of this.signals) {\n property(parsed[key]);\n }\n }\n return this.owner;\n }\n reset() {\n for (const [, signal] of this.signals) {\n signal.reset();\n }\n return this.owner;\n }\n save() {\n for (const [, signal] of this.signals) {\n signal.save();\n }\n return this.owner;\n }\n isInitial() {\n for (const [, signal] of this.signals) {\n if (!signal.isInitial()) {\n return false;\n }\n }\n return true;\n }\n raw() {\n return Object.fromEntries(\n this.signals.map(([key, property]) => [key, property.context.raw()])\n );\n }\n};\n\n// src/signals/ComputedContext.ts\nvar ComputedContext = class extends DependencyContext {\n constructor(factory, owner) {\n super(owner);\n this.factory = factory;\n this.markDirty();\n }\n toSignal() {\n return this.invokable;\n }\n dispose() {\n super.dispose();\n this.last = void 0;\n }\n invoke(...args) {\n if (this.event.isRaised()) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.factory(...args);\n } catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n};\n\n// src/signals/createComputed.ts\nfunction createComputed(factory, owner) {\n return new ComputedContext(factory, owner).toSignal();\n}\n\n// src/signals/createSignal.ts\nfunction createSignal(initial, interpolation = deepLerp, owner) {\n return new SignalContext(\n initial,\n interpolation,\n owner\n ).toSignal();\n}\n\n// src/signals/createComputedAsync.ts\nfunction createComputedAsync(factory, initial = null) {\n let handle;\n const signal = createSignal(factory);\n return createComputed(() => {\n const promise = signal();\n if (!handle || handle.promise !== promise) {\n handle = ComputedContext.collectPromise(\n promise,\n handle?.value ?? initial\n );\n }\n return handle.value;\n });\n}\n\n// src/types/Spacing.ts\nvar _Spacing = class _Spacing {\n constructor(one = 0, two, three, four) {\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n this.left = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (Array.isArray(one)) {\n four = one[3];\n three = one[2];\n two = one[1];\n one = one[0];\n }\n if (typeof one === \"number\") {\n this.top = one;\n this.right = two !== void 0 ? two : one;\n this.bottom = three !== void 0 ? three : one;\n this.left = four !== void 0 ? four : two !== void 0 ? two : one;\n return;\n }\n this.top = one.top;\n this.right = one.right;\n this.bottom = one.bottom;\n this.left = one.left;\n }\n static createSignal(initial, interpolation = _Spacing.lerp) {\n return new CompoundSignalContext(\n [\"top\", \"right\", \"bottom\", \"left\"],\n (value) => new _Spacing(value),\n initial,\n interpolation\n ).toSignal();\n }\n static lerp(from, to, value) {\n return new _Spacing(\n map(from.top, to.top, value),\n map(from.right, to.right, value),\n map(from.bottom, to.bottom, value),\n map(from.left, to.left, value)\n );\n }\n get x() {\n return this.left + this.right;\n }\n get y() {\n return this.top + this.bottom;\n }\n lerp(to, value) {\n return _Spacing.lerp(this, to, value);\n }\n scale(value) {\n return new _Spacing(\n this.top * value,\n this.right * value,\n this.bottom * value,\n this.left * value\n );\n }\n addScalar(value) {\n return new _Spacing(\n this.top + value,\n this.right + value,\n this.bottom + value,\n this.left + value\n );\n }\n toSymbol() {\n return _Spacing.symbol;\n }\n toString() {\n return `Spacing(${this.top}, ${this.right}, ${this.bottom}, ${this.left})`;\n }\n toUniform(gl, location) {\n gl.uniform4f(location, this.top, this.right, this.bottom, this.left);\n }\n serialize() {\n return {\n top: this.top,\n right: this.right,\n bottom: this.bottom,\n left: this.left\n };\n }\n};\n_Spacing.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Spacing\");\nvar Spacing = _Spacing;\n\n// src/types/Type.ts\nvar EPSILON = 1e-6;\nfunction isType(value) {\n return value && typeof value === \"object\" && \"toSymbol\" in value;\n}\n\n// src/types/Vector.ts\nvar _Vector2 = class _Vector2 {\n constructor(one, two) {\n this.x = 0;\n this.y = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (typeof one !== \"object\") {\n this.x = one;\n this.y = two ?? one;\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n return;\n }\n if (\"width\" in one) {\n this.x = one.width;\n this.y = one.height;\n return;\n }\n this.x = one.x;\n this.y = one.y;\n }\n static createSignal(initial, interpolation = _Vector2.lerp, owner) {\n return new CompoundSignalContext(\n [\"x\", \"y\"],\n (value) => new _Vector2(value),\n initial,\n interpolation,\n owner\n ).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n if (typeof value === \"number\") {\n valueX = valueY = value;\n } else {\n valueX = value.x;\n valueY = value.y;\n }\n return new _Vector2(map(from.x, to.x, valueX), map(from.y, to.y, valueY));\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = from.sub(to).ctg);\n return _Vector2.lerp(from, to, new _Vector2(arcLerp(value, reverse, ratio)));\n }\n static createArcLerp(reverse, ratio) {\n return (from, to, value) => _Vector2.arcLerp(from, to, value, reverse, ratio);\n }\n /**\n * Interpolates between two vectors on the polar plane by interpolating\n * the angles and magnitudes of the vectors individually.\n *\n * @param from - The starting vector.\n * @param to - The target vector.\n * @param value - The t-value of the interpolation.\n * @param counterclockwise - Whether the vector should get rotated\n * counterclockwise. Defaults to `false`.\n * @param origin - The center of rotation. Defaults to the origin.\n *\n * @remarks\n * This function is useful when used in conjunction with {@link rotate} to\n * animate an object's position on a circular arc (see examples).\n *\n * @example\n * Animating an object in a circle around the origin\n * ```tsx\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.polarLerp\n * );\n * ```\n * @example\n * Rotating an object around the point `[-200, 100]`\n * ```ts\n * circle().position(\n * circle().position().rotate(180, [-200, 100]),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(false, [-200, 100]),\n * );\n * ```\n * @example\n * Rotating an object counterclockwise around the origin\n * ```ts\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(true),\n * );\n * ```\n */\n static polarLerp(from, to, value, counterclockwise = false, origin = _Vector2.zero) {\n from = from.sub(origin);\n to = to.sub(origin);\n const fromAngle = from.degrees;\n let toAngle = to.degrees;\n const isCounterclockwise = fromAngle > toAngle;\n if (isCounterclockwise !== counterclockwise) {\n toAngle = toAngle + (counterclockwise ? -360 : 360);\n }\n const angle = map(fromAngle, toAngle, value) * DEG2RAD;\n const magnitude = map(from.magnitude, to.magnitude, value);\n return new _Vector2(\n magnitude * Math.cos(angle) + origin.x,\n magnitude * Math.sin(angle) + origin.y\n );\n }\n /**\n * Helper function to create a {@link Vector2.polarLerp} interpolation\n * function with additional parameters.\n *\n * @param counterclockwise - Whether the point should get rotated\n * counterclockwise.\n * @param center - The center of rotation. Defaults to the origin.\n */\n static createPolarLerp(counterclockwise = false, center = _Vector2.zero) {\n return (from, to, value) => _Vector2.polarLerp(from, to, value, counterclockwise, new _Vector2(center));\n }\n static fromOrigin(origin) {\n const position = new _Vector2();\n if (origin === 3 /* Middle */) {\n return position;\n }\n if (origin & 16 /* Left */) {\n position.x = -1;\n } else if (origin & 32 /* Right */) {\n position.x = 1;\n }\n if (origin & 4 /* Top */) {\n position.y = -1;\n } else if (origin & 8 /* Bottom */) {\n position.y = 1;\n }\n return position;\n }\n static fromScalar(value) {\n return new _Vector2(value, value);\n }\n static fromRadians(radians) {\n return new _Vector2(Math.cos(radians), Math.sin(radians));\n }\n static fromDegrees(degrees) {\n return _Vector2.fromRadians(degrees * DEG2RAD);\n }\n /**\n * Return the angle in radians between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n */\n static radians(x, y) {\n return Math.atan2(y, x);\n }\n /**\n * Return the angle in degrees between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n static degrees(x, y) {\n return _Vector2.radians(x, y) * RAD2DEG;\n }\n static magnitude(x, y) {\n return Math.sqrt(x * x + y * y);\n }\n static squaredMagnitude(x, y) {\n return x * x + y * y;\n }\n static angleBetween(u, v) {\n return Math.acos(clamp(-1, 1, u.dot(v) / (u.magnitude * v.magnitude))) * (u.cross(v) >= 0 ? 1 : -1);\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n get magnitude() {\n return _Vector2.magnitude(this.x, this.y);\n }\n get squaredMagnitude() {\n return _Vector2.squaredMagnitude(this.x, this.y);\n }\n get normalized() {\n return this.scale(1 / _Vector2.magnitude(this.x, this.y));\n }\n get safe() {\n return new _Vector2(isNaN(this.x) ? 0 : this.x, isNaN(this.y) ? 0 : this.y);\n }\n get flipped() {\n return new _Vector2(-this.x, -this.y);\n }\n get floored() {\n return new _Vector2(Math.floor(this.x), Math.floor(this.y));\n }\n get perpendicular() {\n return new _Vector2(this.y, -this.x);\n }\n /**\n * Return the angle in radians between the vector and the positive x-axis.\n */\n get radians() {\n return _Vector2.radians(this.x, this.y);\n }\n /**\n * Return the angle in degrees between the vector and the positive x-axis.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n get degrees() {\n return _Vector2.degrees(this.x, this.y);\n }\n get ctg() {\n return this.x / this.y;\n }\n lerp(to, value) {\n return _Vector2.lerp(this, to, value);\n }\n getOriginOffset(origin) {\n const offset = _Vector2.fromOrigin(origin);\n offset.x *= this.x / 2;\n offset.y *= this.y / 2;\n return offset;\n }\n scale(value) {\n return new _Vector2(this.x * value, this.y * value);\n }\n mul(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x * vector.x, this.y * vector.y);\n }\n div(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x / vector.x, this.y / vector.y);\n }\n add(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x + vector.x, this.y + vector.y);\n }\n sub(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x - vector.x, this.y - vector.y);\n }\n dot(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return this.x * vector.x + this.y * vector.y;\n }\n cross(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return this.x * vector.y - this.y * vector.x;\n }\n mod(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x % vector.x, this.y % vector.y);\n }\n addX(value) {\n return new _Vector2(this.x + value, this.y);\n }\n addY(value) {\n return new _Vector2(this.x, this.y + value);\n }\n toSymbol() {\n return _Vector2.symbol;\n }\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n toUniform(gl, location) {\n gl.uniform2f(location, this.x, this.y);\n }\n serialize() {\n return { x: this.x, y: this.y };\n }\n /**\n * Check if two vectors are exactly equal to each other.\n *\n * @remarks\n * If you need to compensate for floating point inaccuracies, use the\n * {@link equals} method, instead.\n *\n * @param other - The vector to compare.\n */\n exactlyEquals(other) {\n return this.x === other.x && this.y === other.y;\n }\n /**\n * Check if two vectors are equal to each other.\n *\n * @remarks\n * This method allows passing an allowed error margin when comparing vectors\n * to compensate for floating point inaccuracies. To check if two vectors are\n * exactly equal, use the {@link exactlyEquals} method, instead.\n *\n * @param other - The vector to compare.\n * @param threshold - The allowed error threshold when comparing the vectors.\n */\n equals(other, threshold = EPSILON) {\n return Math.abs(this.x - other.x) <= threshold + Number.EPSILON && Math.abs(this.y - other.y) <= threshold + Number.EPSILON;\n }\n};\n_Vector2.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Vector2\");\n_Vector2.zero = new _Vector2();\n_Vector2.one = new _Vector2(1, 1);\n_Vector2.right = new _Vector2(1, 0);\n_Vector2.left = new _Vector2(-1, 0);\n_Vector2.up = new _Vector2(0, 1);\n_Vector2.down = new _Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, -1)`\n */\n_Vector2.top = new _Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, 1)`\n */\n_Vector2.bottom = new _Vector2(0, 1);\n/**\n * A constant equal to `Vector2(-1, -1)`\n */\n_Vector2.topLeft = new _Vector2(-1, -1);\n/**\n * A constant equal to `Vector2(1, -1)`\n */\n_Vector2.topRight = new _Vector2(1, -1);\n/**\n * A constant equal to `Vector2(-1, 1)`\n */\n_Vector2.bottomLeft = new _Vector2(-1, 1);\n/**\n * A constant equal to `Vector2(1, 1)`\n */\n_Vector2.bottomRight = new _Vector2(1, 1);\nvar Vector2 = _Vector2;\n\n// src/types/Matrix2D.ts\nvar _Matrix2D = class _Matrix2D {\n constructor(a, b, c, d, tx, ty) {\n this.values = new Float32Array(6);\n if (arguments.length === 0) {\n this.values = new Float32Array([1, 0, 0, 1, 0, 0]);\n return;\n }\n if (arguments.length === 6) {\n this.values[0] = a;\n this.values[1] = b;\n this.values[2] = c;\n this.values[3] = d;\n this.values[4] = tx;\n this.values[5] = ty;\n return;\n }\n if (a instanceof DOMMatrix) {\n this.values[0] = a.m11;\n this.values[1] = a.m12;\n this.values[2] = a.m21;\n this.values[3] = a.m22;\n this.values[4] = a.m41;\n this.values[5] = a.m42;\n return;\n }\n if (a instanceof _Matrix2D) {\n this.values = a.values;\n return;\n }\n if (Array.isArray(a)) {\n if (a.length === 2) {\n this.values[0] = a[0];\n this.values[1] = a[1];\n this.values[2] = b[0];\n this.values[3] = b[1];\n this.values[4] = c[0];\n this.values[5] = c[1];\n return;\n }\n if (a.length === 3) {\n const x2 = new Vector2(a[0]);\n const y2 = new Vector2(a[1]);\n const z2 = new Vector2(a[2]);\n this.values[0] = x2.x;\n this.values[1] = x2.y;\n this.values[2] = y2.x;\n this.values[3] = y2.y;\n this.values[4] = z2.x;\n this.values[5] = z2.y;\n return;\n }\n this.values[0] = a[0];\n this.values[1] = a[1];\n this.values[2] = a[2];\n this.values[3] = a[3];\n this.values[4] = a[4];\n this.values[5] = a[5];\n return;\n }\n const x = new Vector2(a);\n const y = new Vector2(b);\n const z = new Vector2(c);\n this.values[0] = x.x;\n this.values[1] = x.y;\n this.values[2] = y.x;\n this.values[3] = y.y;\n this.values[4] = z.x;\n this.values[5] = z.y;\n }\n static fromRotation(angle) {\n return _Matrix2D.identity.rotate(angle);\n }\n static fromTranslation(translation) {\n return _Matrix2D.identity.translate(new Vector2(translation));\n }\n static fromScaling(scale) {\n return _Matrix2D.identity.scale(new Vector2(scale));\n }\n get x() {\n return new Vector2(this.values[0], this.values[1]);\n }\n get y() {\n return new Vector2(this.values[2], this.values[3]);\n }\n get scaleX() {\n return this.values[0];\n }\n set scaleX(value) {\n this.values[0] = this.x.normalized.scale(value).x;\n }\n get skewX() {\n return this.values[1];\n }\n set skewX(value) {\n this.values[1] = value;\n }\n get scaleY() {\n return this.values[3];\n }\n set scaleY(value) {\n this.values[3] = this.y.normalized.scale(value).y;\n }\n get skewY() {\n return this.values[2];\n }\n set skewY(value) {\n this.values[2] = value;\n }\n get translateX() {\n return this.values[4];\n }\n set translateX(value) {\n this.values[4] = value;\n }\n get translateY() {\n return this.values[5];\n }\n set translateY(value) {\n this.values[5] = value;\n }\n get rotation() {\n return Vector2.degrees(this.values[0], this.values[1]);\n }\n set rotation(angle) {\n const result = this.rotate(angle - this.rotation);\n this.values[0] = result.values[0];\n this.values[1] = result.values[1];\n this.values[2] = result.values[2];\n this.values[3] = result.values[3];\n }\n get translation() {\n return new Vector2(this.values[4], this.values[5]);\n }\n set translation(translation) {\n const vec = new Vector2(translation);\n this.values[4] = vec.x;\n this.values[5] = vec.y;\n }\n get scaling() {\n return new Vector2(this.values[0], this.values[3]);\n }\n set scaling(value) {\n const scale = new Vector2(value);\n const x = new Vector2(this.values[0], this.values[1]).normalized;\n const y = new Vector2(this.values[2], this.values[3]).normalized;\n this.values[0] = x.x * scale.x;\n this.values[1] = x.y * scale.y;\n this.values[2] = y.x * scale.x;\n this.values[3] = y.y * scale.y;\n }\n /**\n * Get the inverse of the matrix.\n *\n * @remarks\n * If the matrix is not invertible, i.e. its determinant is `0`, this will\n * return `null`, instead.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const inverse = matrix.inverse;\n * // => Matrix2D(\n * // [-2, 1],\n * // [1.5, -0.5],\n * // [1, -2],\n * // )\n * ```\n */\n get inverse() {\n const aa = this.values[0], ab = this.values[1], ac = this.values[2], ad = this.values[3];\n const atx = this.values[4], aty = this.values[5];\n let det = aa * ad - ab * ac;\n if (!det) {\n return null;\n }\n det = 1 / det;\n return new _Matrix2D(\n ad * det,\n -ab * det,\n -ac * det,\n aa * det,\n (ac * aty - ad * atx) * det,\n (ab * atx - aa * aty) * det\n );\n }\n /**\n * Get the determinant of the matrix.\n */\n get determinant() {\n return this.values[0] * this.values[3] - this.values[1] * this.values[2];\n }\n get domMatrix() {\n return new DOMMatrix([\n this.values[0],\n this.values[1],\n this.values[2],\n this.values[3],\n this.values[4],\n this.values[5]\n ]);\n }\n /**\n * Get the nth component vector of the matrix. Only defined for 0, 1, and 2.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 0],\n * [0, 0],\n * [1, 0],\n * );\n *\n * const x = matrix.column(0);\n * // Vector2(1, 0)\n *\n * const y = matrix.column(1);\n * // Vector2(0, 0)\n *\n * const z = matrix.column(1);\n * // Vector2(1, 0)\n * ```\n *\n * @param index - The index of the component vector to retrieve.\n */\n column(index) {\n return new Vector2(this.values[index * 2], this.values[index * 2 + 1]);\n }\n /**\n * Returns the nth row of the matrix. Only defined for 0 and 1.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 0],\n * [0, 0],\n * [1, 0],\n * );\n *\n * const firstRow = matrix.column(0);\n * // [1, 0, 1]\n *\n * const secondRow = matrix.column(1);\n * // [0, 0, 0]\n * ```\n *\n * @param index - The index of the row to retrieve.\n */\n row(index) {\n return [this.values[index], this.values[index + 2], this.values[index + 4]];\n }\n /**\n * Returns the matrix product of this matrix with the provided matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [0, 1],\n * [1, 1],\n * );\n * const b = new Matrix2D(\n * [2, 1],\n * [1, 1],\n * [1, 1],\n * );\n *\n * const result = a.mul(b);\n * // => Matrix2D(\n * // [2, 5],\n * // [1, 3],\n * // [2, 4],\n * // )\n * ```\n *\n * @param other - The matrix to multiply with\n */\n mul(other) {\n const a0 = this.values[0], a1 = this.values[1], a2 = this.values[2], a3 = this.values[3], a4 = this.values[4], a5 = this.values[5];\n const b0 = other.values[0], b1 = other.values[1], b2 = other.values[2], b3 = other.values[3], b4 = other.values[4], b5 = other.values[5];\n return new _Matrix2D(\n a0 * b0 + a2 * b1,\n a1 * b0 + a3 * b1,\n a0 * b2 + a2 * b3,\n a1 * b2 + a3 * b3,\n a0 * b4 + a2 * b5 + a4,\n a1 * b4 + a3 * b5 + a5\n );\n }\n /**\n * Rotate the matrix by the provided angle. By default, the angle is\n * provided in degrees.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result = a.rotate(90);\n * // => Matrix2D(\n * // [3, 4],\n * // [-1, -2],\n * // [5, 6],\n * // )\n *\n * // Provide the angle in radians\n * const result = a.rotate(Math.PI * 0.5, true);\n * // => Matrix2D(\n * // [3, 4],\n * // [-1, -2],\n * // [5, 6],\n * // )\n * ```\n *\n * @param angle - The angle by which to rotate the matrix.\n * @param degrees - Whether the angle is provided in degrees.\n */\n rotate(angle, degrees = true) {\n if (degrees) {\n angle *= DEG2RAD;\n }\n const a0 = this.values[0], a1 = this.values[1], a2 = this.values[2], a3 = this.values[3], a4 = this.values[4], a5 = this.values[5];\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n return new _Matrix2D(\n a0 * c + a2 * s,\n a1 * c + a3 * s,\n a0 * -s + a2 * c,\n a1 * -s + a3 * c,\n a4,\n a5\n );\n }\n /**\n * Scale the x and y component vectors of the matrix.\n *\n * @remarks\n * If `vec` is provided as a vector, the x and y component vectors of the\n * matrix will be scaled by the x and y parts of the vector, respectively.\n *\n * If `vec` is provided as a scalar, the x and y component vectors will be\n * scaled uniformly by this factor.\n *\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.scale([2, 3]);\n * // => new Matrix2D(\n * // [2, 4],\n * // [9, 12],\n * // [5, 6],\n * // )\n *\n * const result2 = matrix.scale(2);\n * // => new Matrix2D(\n * // [2, 4],\n * // [6, 8],\n * // [5, 6],\n * // )\n * ```\n *\n * @param vec - The factor by which to scale the matrix\n */\n scale(vec) {\n const v = new Vector2(vec);\n return new _Matrix2D(\n this.values[0] * v.x,\n this.values[1] * v.x,\n this.values[2] * v.y,\n this.values[3] * v.y,\n this.values[4],\n this.values[5]\n );\n }\n /**\n * Multiply each value of the matrix by a scalar.\n *\n * * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.mulScalar(2);\n * // => new Matrix2D(\n * // [2, 4],\n * // [6, 8],\n * // [10, 12],\n * // )\n * ```\n *\n * @param s - The value by which to scale each term\n */\n mulScalar(s) {\n return new _Matrix2D(\n this.values[0] * s,\n this.values[1] * s,\n this.values[2] * s,\n this.values[3] * s,\n this.values[4] * s,\n this.values[5] * s\n );\n }\n /**\n * Translate the matrix by the dimensions of the provided vector.\n *\n * @remarks\n * If `vec` is provided as a scalar, matrix will be translated uniformly\n * by this factor.\n *\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.translate([2, 3]);\n * // => new Matrix2D(\n * // [1, 2],\n * // [3, 4],\n * // [16, 22],\n * // )\n *\n * const result2 = matrix.translate(2);\n * // => new Matrix2D(\n * // [1, 2],\n * // [3, 4],\n * // [13, 18],\n * // )\n * ```\n *\n * @param vec - The vector by which to translate the matrix\n */\n translate(vec) {\n const v = new Vector2(vec);\n return new _Matrix2D(\n this.values[0],\n this.values[1],\n this.values[2],\n this.values[3],\n this.values[0] * v.x + this.values[2] * v.y + this.values[4],\n this.values[1] * v.x + this.values[3] * v.y + this.values[5]\n );\n }\n /**\n * Add the provided matrix to this matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n * const a = new Matrix2D(\n * [7, 8],\n * [9, 10],\n * [11, 12],\n * );\n *\n * const result = a.add(b);\n * // => Matrix2D(\n * // [8, 10],\n * // [12, 14],\n * // [16, 18],\n * // )\n * ```\n *\n * @param other - The matrix to add\n */\n add(other) {\n return new _Matrix2D(\n this.values[0] + other.values[0],\n this.values[1] + other.values[1],\n this.values[2] + other.values[2],\n this.values[3] + other.values[3],\n this.values[4] + other.values[4],\n this.values[5] + other.values[5]\n );\n }\n /**\n * Subtract the provided matrix from this matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n * const a = new Matrix2D(\n * [7, 8],\n * [9, 10],\n * [11, 12],\n * );\n *\n * const result = a.sub(b);\n * // => Matrix2D(\n * // [-6, -6],\n * // [-6, -6],\n * // [-6, -6],\n * // )\n * ```\n *\n * @param other - The matrix to subract\n */\n sub(other) {\n return new _Matrix2D(\n this.values[0] - other.values[0],\n this.values[1] - other.values[1],\n this.values[2] - other.values[2],\n this.values[3] - other.values[3],\n this.values[4] - other.values[4],\n this.values[5] - other.values[5]\n );\n }\n toSymbol() {\n return _Matrix2D.symbol;\n }\n toUniform(gl, location) {\n gl.uniformMatrix3x2fv(location, false, this.values);\n }\n equals(other, threshold = EPSILON) {\n return Math.abs(this.values[0] - other.values[0]) <= threshold + Number.EPSILON && Math.abs(this.values[1] - other.values[1]) <= threshold + Number.EPSILON && Math.abs(this.values[2] - other.values[2]) <= threshold + Number.EPSILON && Math.abs(this.values[3] - other.values[3]) <= threshold + Number.EPSILON && Math.abs(this.values[4] - other.values[4]) <= threshold + Number.EPSILON && Math.abs(this.values[5] - other.values[5]) <= threshold + Number.EPSILON;\n }\n exactlyEquals(other) {\n return this.values[0] === other.values[0] && this.values[1] === other.values[1] && this.values[2] === other.values[2] && this.values[3] === other.values[3] && this.values[4] === other.values[4] && this.values[5] === other.values[5];\n }\n};\n_Matrix2D.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Matrix2D\");\n_Matrix2D.identity = new _Matrix2D(1, 0, 0, 1, 0, 0);\n_Matrix2D.zero = new _Matrix2D(0, 0, 0, 0, 0, 0);\nvar Matrix2D = _Matrix2D;\n\n// src/types/vector-transformations.ts\nfunction transformVectorAsPoint(vector, matrix) {\n const m = new Matrix2D(matrix);\n return new Vector2(\n vector.x * m.scaleX + vector.y * m.skewY + m.translateX,\n vector.x * m.skewX + vector.y * m.scaleY + m.translateY\n );\n}\nfunction transformVector(vector, matrix) {\n const m = new Matrix2D(matrix);\n return new Vector2(\n vector.x * m.scaleX + vector.y * m.skewY,\n vector.x * m.skewX + vector.y * m.scaleY\n );\n}\nfunction rotateVector(vector, angle, center = Vector2.zero) {\n const originVector = new Vector2(center);\n const matrix = Matrix2D.fromTranslation(originVector).rotate(angle).translate(originVector.flipped);\n return transformVectorAsPoint(vector, matrix);\n}\n\n// src/types/BBox.ts\nvar _BBox = class _BBox {\n constructor(one, two = 0, three = 0, four = 0) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (typeof one === \"number\") {\n this.x = one;\n this.y = two;\n this.width = three;\n this.height = four;\n return;\n }\n if (one instanceof Vector2) {\n this.x = one.x;\n this.y = one.y;\n if (two instanceof Vector2) {\n this.width = two.x;\n this.height = two.y;\n }\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n this.width = one[2];\n this.height = one[3];\n return;\n }\n this.x = one.x;\n this.y = one.y;\n this.width = one.width;\n this.height = one.height;\n }\n static createSignal(initial, interpolation = _BBox.lerp) {\n return new CompoundSignalContext(\n [\"x\", \"y\", \"width\", \"height\"],\n (value) => new _BBox(value),\n initial,\n interpolation\n ).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n let valueWidth;\n let valueHeight;\n if (typeof value === \"number\") {\n valueX = valueY = valueWidth = valueHeight = value;\n } else if (value instanceof Vector2) {\n valueX = valueWidth = value.x;\n valueY = valueHeight = value.y;\n } else {\n valueX = value.x;\n valueY = value.y;\n valueWidth = value.width;\n valueHeight = value.height;\n }\n return new _BBox(\n map(from.x, to.x, valueX),\n map(from.y, to.y, valueY),\n map(from.width, to.width, valueWidth),\n map(from.height, to.height, valueHeight)\n );\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = (from.position.sub(to.position).ctg + from.size.sub(to.size).ctg) / 2);\n return _BBox.lerp(from, to, new Vector2(arcLerp(value, reverse, ratio)));\n }\n static fromSizeCentered(size) {\n return new _BBox(-size.width / 2, -size.height / 2, size.width, size.height);\n }\n static fromPoints(...points) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const point of points) {\n if (point.x > maxX) {\n maxX = point.x;\n }\n if (point.x < minX) {\n minX = point.x;\n }\n if (point.y > maxY) {\n maxY = point.y;\n }\n if (point.y < minY) {\n minY = point.y;\n }\n }\n return new _BBox(minX, minY, maxX - minX, maxY - minY);\n }\n static fromBBoxes(...boxes) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const box of boxes) {\n const right = box.x + box.width;\n if (right > maxX) {\n maxX = right;\n }\n if (box.x < minX) {\n minX = box.x;\n }\n const bottom = box.y + box.height;\n if (bottom > maxY) {\n maxY = bottom;\n }\n if (box.y < minY) {\n minY = box.y;\n }\n }\n return new _BBox(minX, minY, maxX - minX, maxY - minY);\n }\n lerp(to, value) {\n return _BBox.lerp(this, to, value);\n }\n get position() {\n return new Vector2(this.x, this.y);\n }\n set position(value) {\n this.x = value.x;\n this.y = value.y;\n }\n get size() {\n return new Vector2(this.width, this.height);\n }\n get center() {\n return new Vector2(this.x + this.width / 2, this.y + this.height / 2);\n }\n get left() {\n return this.x;\n }\n set left(value) {\n this.width += this.x - value;\n this.x = value;\n }\n get right() {\n return this.x + this.width;\n }\n set right(value) {\n this.width = value - this.x;\n }\n get top() {\n return this.y;\n }\n set top(value) {\n this.height += this.y - value;\n this.y = value;\n }\n get bottom() {\n return this.y + this.height;\n }\n set bottom(value) {\n this.height = value - this.y;\n }\n get topLeft() {\n return this.position;\n }\n get topRight() {\n return new Vector2(this.x + this.width, this.y);\n }\n get bottomLeft() {\n return new Vector2(this.x, this.y + this.height);\n }\n get bottomRight() {\n return new Vector2(this.x + this.width, this.y + this.height);\n }\n get corners() {\n return [this.topLeft, this.topRight, this.bottomRight, this.bottomLeft];\n }\n get pixelPerfect() {\n return new _BBox(\n Math.floor(this.x),\n Math.floor(this.y),\n Math.ceil(this.width + 1),\n Math.ceil(this.height + 1)\n );\n }\n transform(matrix) {\n return new _BBox(\n transformVectorAsPoint(this.position, matrix),\n transformVector(this.size, matrix)\n );\n }\n transformCorners(matrix) {\n return this.corners.map((corner) => transformVectorAsPoint(corner, matrix));\n }\n /**\n * Expand the bounding box to accommodate the given spacing.\n *\n * @param value - The value to expand the bounding box by.\n */\n expand(value) {\n const spacing = new Spacing(value);\n const result = new _BBox(this);\n result.left -= spacing.left;\n result.top -= spacing.top;\n result.right += spacing.right;\n result.bottom += spacing.bottom;\n return result;\n }\n /**\n * {@inheritDoc expand}\n *\n * @deprecated Use {@link expand} instead.\n */\n addSpacing(value) {\n return this.expand(value);\n }\n includes(point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n }\n intersects(other) {\n return this.left < other.right && this.right > other.left && this.top < other.bottom && this.bottom > other.top;\n }\n intersection(other) {\n const bbox = new _BBox();\n if (this.intersects(other)) {\n bbox.left = Math.max(this.left, other.left);\n bbox.top = Math.max(this.top, other.top);\n bbox.right = Math.min(this.right, other.right);\n bbox.bottom = Math.min(this.bottom, other.bottom);\n }\n return bbox;\n }\n union(other) {\n const bbox = new _BBox();\n bbox.left = Math.min(this.left, other.left);\n bbox.top = Math.min(this.top, other.top);\n bbox.right = Math.max(this.right, other.right);\n bbox.bottom = Math.max(this.bottom, other.bottom);\n return bbox;\n }\n toSymbol() {\n return _BBox.symbol;\n }\n toString() {\n return `BBox(${this.x}, ${this.y}, ${this.width}, ${this.height})`;\n }\n toUniform(gl, location) {\n gl.uniform4f(location, this.x, this.y, this.width, this.height);\n }\n serialize() {\n return { x: this.x, y: this.y, width: this.width, height: this.height };\n }\n};\n_BBox.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Rect\");\nvar BBox = _BBox;\n\n// src/types/Color.ts\nimport { converter, formatHex8, interpolate, parse } from \"culori\";\nfunction parseNumber(num) {\n const r = num >> 16 & 255;\n const g = num >> 8 & 255;\n const b = num & 255;\n return [r / 255, g / 255, b / 255, 1];\n}\nvar _Color = class _Color {\n constructor(value) {\n this.symbol = _Color.symbol;\n if (value === void 0 || value === null) {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 1;\n return;\n }\n if (value instanceof _Color) {\n this.r = value.r;\n this.g = value.g;\n this.b = value.b;\n this.a = value.a;\n return;\n }\n if (typeof value === \"string\") {\n const parsedColor = parse(value);\n if (!parsedColor) {\n throw new Error(`Invalid color string value provided: ${value}`);\n }\n const rgbColor = parsedColor.mode === \"rgb\" ? parsedColor : converter(\"rgb\")(parsedColor);\n if (rgbColor) {\n this.r = clamp(0, 1, rgbColor.r);\n this.g = clamp(0, 1, rgbColor.g);\n this.b = clamp(0, 1, rgbColor.b);\n this.a = clamp(0, 1, rgbColor.alpha ?? 1);\n return;\n }\n }\n if (typeof value === \"number\") {\n const [r, g, b, a] = parseNumber(value);\n this.r = clamp(0, 1, r);\n this.g = clamp(0, 1, g);\n this.b = clamp(0, 1, b);\n this.a = clamp(0, 1, a);\n return;\n }\n if (typeof value === \"object\") {\n if (\"r\" in value && \"g\" in value && \"b\" in value) {\n const obj = value;\n this.r = clamp(0, 1, obj.r / 255);\n this.g = clamp(0, 1, obj.g / 255);\n this.b = clamp(0, 1, obj.b / 255);\n this.a = clamp(0, 1, obj.a ?? 1);\n return;\n }\n }\n throw new Error(`Invalid color value provided: ${value}`);\n }\n /**\n * Interpolates between two colors using LCH color space.\n */\n static lerp(from, to, value, mode = \"lch\") {\n const fromColor = from instanceof _Color ? from : new _Color(from ?? void 0);\n const toColor = to instanceof _Color ? to : new _Color(to ?? void 0);\n const startColorCulori = {\n mode: \"rgb\",\n r: fromColor.r,\n g: fromColor.g,\n b: fromColor.b\n };\n const endColorCulori = {\n mode: \"rgb\",\n r: toColor.r,\n g: toColor.g,\n b: toColor.b\n };\n const interpolationMode = mode ?? \"lch\";\n const interpolator = interpolate(\n [startColorCulori, endColorCulori],\n interpolationMode\n // Use specified interpolation space (casting to bypass TS error)\n );\n const interpolatedLch = interpolator(value);\n const rgbConverter = converter(\"rgb\");\n const interpolatedRgb = rgbConverter(interpolatedLch);\n const a = fromColor.a + (toColor.a - fromColor.a) * value;\n const finalR = interpolatedRgb ? clamp(0, 1, interpolatedRgb.r) : 0;\n const finalG = interpolatedRgb ? clamp(0, 1, interpolatedRgb.g) : 0;\n const finalB = interpolatedRgb ? clamp(0, 1, interpolatedRgb.b) : 0;\n return new _Color({\n r: finalR * 255,\n g: finalG * 255,\n b: finalB * 255,\n a: clamp(0, 1, a)\n // Also clamp alpha just in case\n });\n }\n /**\n * Creates an interpolation function for colors (uses LCH space via culori).\n */\n static createLerp(mode = \"lch\") {\n return (from, to, value) => _Color.lerp(from, to, value, mode);\n }\n /**\n * Creates a signal for the Color type.\n */\n static createSignal(initial, interpolation = _Color.lerp) {\n return new SignalContext(\n initial,\n interpolation,\n void 0,\n (value) => value instanceof _Color ? value : new _Color(value)\n ).toSignal();\n }\n toSymbol() {\n return this.symbol;\n }\n /**\n * Returns the color components as a [r, g, b, a] array (0-1 range).\n */\n gl() {\n return [this.r, this.g, this.b, this.a];\n }\n toUniform(gl, location) {\n gl.uniform4fv(location, this.gl());\n }\n /**\n * Serializes the color to an `rgba()` CSS string.\n */\n serialize() {\n const r = Math.round(this.r * 255);\n const g = Math.round(this.g * 255);\n const b = Math.round(this.b * 255);\n const alphaStr = clamp(0, 1, this.a).toFixed(3);\n return `rgba(${r}, ${g}, ${b}, ${alphaStr})`;\n }\n /**\n * Serializes the color to an `rgb()` CSS string (omitting alpha).\n */\n css() {\n const r = Math.round(this.r * 255);\n const g = Math.round(this.g * 255);\n const b = Math.round(this.b * 255);\n return `rgb(${r},${g},${b})`;\n }\n /**\n * Returns the alpha value of the color (0-1 range).\n */\n alpha() {\n return this.a;\n }\n /**\n * Serializes the color to an RRGGBBAA hex string using culori.\n */\n hex() {\n return formatHex8({\n mode: \"rgb\",\n r: this.r,\n g: this.g,\n b: this.b,\n alpha: this.a\n });\n }\n /**\n * Linearly interpolates from this color to another using LCH space.\n */\n lerp(to, value, mode = \"lch\") {\n return _Color.lerp(this, to, value, mode);\n }\n};\n_Color.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Color\");\nvar Color = _Color;\n\n// src/types/Matrix.ts\nfunction transformAngle(angle, matrix) {\n const degreeVector = Vector2.fromDegrees(angle);\n return transformVector(degreeVector, matrix).degrees;\n}\nfunction transformScalar(scalar, matrix) {\n return Vector2.magnitude(matrix.m11, matrix.m12) * scalar;\n}\n\n// src/types/Origin.ts\nfunction flipOrigin(origin, axis = 2 /* Horizontal */ | 1 /* Vertical */) {\n if (axis & 1 /* Vertical */) {\n if (origin & 4 /* Top */) {\n origin = origin & ~4 /* Top */ | 8 /* Bottom */;\n } else if (origin & 8 /* Bottom */) {\n origin = origin & ~8 /* Bottom */ | 4 /* Top */;\n }\n }\n if (axis & 2 /* Horizontal */) {\n if (origin & 16 /* Left */) {\n origin = origin & ~16 /* Left */ | 32 /* Right */;\n } else if (origin & 32 /* Right */) {\n origin = origin & ~32 /* Right */ | 16 /* Left */;\n }\n }\n return origin;\n}\nfunction originToOffset(origin) {\n if (origin === 3 /* Middle */) {\n return Vector2.zero;\n }\n let x = 0;\n if (origin & 16 /* Left */) {\n x = -1;\n } else if (origin & 32 /* Right */) {\n x = 1;\n }\n let y = 0;\n if (origin & 4 /* Top */) {\n y = -1;\n } else if (origin & 8 /* Bottom */) {\n y = 1;\n }\n return new Vector2(x, y);\n}\n\n// src/app/Project.ts\nfunction createVersionObject(version) {\n return {\n core: version,\n two: version,\n ui: version,\n vitePlugin: version\n };\n}\n\n// src/app/makeProject.ts\nvar defaultUserProjectSettings = {\n shared: {\n background: \"FFFFFF00\",\n range: [0, Infinity],\n size: { x: 1920, y: 1080 }\n },\n rendering: {\n exporter: {\n name: \"@twick/core/wasm\"\n },\n fps: 30,\n resolutionScale: 1,\n colorSpace: \"srgb\"\n },\n preview: {\n fps: 30,\n resolutionScale: 1\n }\n};\nfunction makeProject(project) {\n void DefaultPlugin_default;\n const settings = {\n ...defaultUserProjectSettings,\n ...project.settings,\n shared: {\n ...defaultUserProjectSettings.shared,\n ...project.settings?.shared\n },\n rendering: {\n ...defaultUserProjectSettings.rendering,\n ...project.settings?.rendering\n },\n preview: {\n ...defaultUserProjectSettings.preview,\n ...project.settings?.preview\n }\n };\n const convertedSettings = {\n ...settings,\n shared: {\n ...settings.shared,\n background: new Color(settings.shared.background),\n size: new Vector2(settings.shared.size)\n }\n };\n return {\n ...project,\n name: project.name ?? \"project\",\n settings: convertedSettings,\n plugins: [],\n logger: new Logger(),\n versions: createVersionObject(\"0.10.4\")\n };\n}\nasync function addEditorToProject(project) {\n const url = \"/@id/@twick/2d/editor\";\n const imported = await import(\n /* webpackIgnore: true */\n /* @vite-ignore */\n url\n );\n const plugin = imported.default();\n return {\n ...project,\n plugins: [...project.plugins, plugin]\n };\n}\n\n// src/app/PlaybackManager.ts\nvar PlaybackState = /* @__PURE__ */ ((PlaybackState2) => {\n PlaybackState2[PlaybackState2[\"Playing\"] = 0] = \"Playing\";\n PlaybackState2[PlaybackState2[\"Rendering\"] = 1] = \"Rendering\";\n PlaybackState2[PlaybackState2[\"Paused\"] = 2] = \"Paused\";\n PlaybackState2[PlaybackState2[\"Presenting\"] = 3] = \"Presenting\";\n return PlaybackState2;\n})(PlaybackState || {});\nvar PlaybackManager = class {\n constructor() {\n this.frame = 0;\n this.speed = 1;\n this.fps = 30;\n this.duration = 0;\n this.finished = false;\n this.slides = [];\n this.previousScene = null;\n this.state = 2 /* Paused */;\n this.currentSceneReference = null;\n this.scenes = new ValueDispatcher([]);\n }\n /**\n * Triggered when the active scene changes.\n *\n * @eventProperty\n */\n get onSceneChanged() {\n if (this.currentSceneReference === null) {\n throw new Error(\"PlaybackManager has not been properly initialized\");\n }\n return this.currentSceneReference.subscribable;\n }\n /**\n * Triggered when the scenes get recalculated.\n *\n * @remarks\n * This event indicates that the timing of at least one scene has changed.\n *\n * @eventProperty\n */\n get onScenesRecalculated() {\n return this.scenes.subscribable;\n }\n get currentScene() {\n if (this.currentSceneReference === null) {\n throw new Error(\"PlaybackManager has not been properly initialized\");\n }\n return this.currentSceneReference.current;\n }\n set currentScene(scene) {\n if (!scene) {\n throw new Error(\"Invalid scene.\");\n }\n this.currentSceneReference ?? (this.currentSceneReference = new ValueDispatcher(scene));\n this.currentSceneReference.current = scene;\n }\n setup(scenes) {\n this.scenes.current = scenes;\n this.currentScene = scenes[0];\n }\n async progress() {\n this.finished = await this.next();\n return this.finished;\n }\n async seek(frame) {\n if (frame <= this.frame || this.currentScene.isCached() && this.currentScene.lastFrame < frame) {\n const scene = this.findBestScene(frame);\n if (scene !== this.currentScene) {\n this.currentScene.stopAllMedia();\n this.previousScene = null;\n this.currentScene = scene;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n } else if (this.frame >= frame) {\n this.previousScene = null;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n }\n this.finished = false;\n while (this.frame < frame && !this.finished) {\n this.finished = await this.next();\n }\n return this.finished;\n }\n async reset() {\n this.previousScene = null;\n this.currentScene = this.scenes.current[0];\n this.frame = 0;\n await this.currentScene.reset();\n }\n reload(description) {\n this.scenes.current.forEach((scene) => scene.reload(description));\n }\n async recalculate() {\n this.previousScene = null;\n this.slides = [];\n const speed = this.speed;\n this.frame = 0;\n this.speed = 1;\n const scenes = [];\n try {\n for (const scene of this.scenes.current) {\n await scene.recalculate((frame) => {\n this.frame = frame;\n });\n this.slides.push(...scene.slides.onChanged.current);\n scenes.push(scene);\n }\n } finally {\n this.speed = speed;\n }\n this.scenes.current = scenes;\n this.duration = this.frame;\n }\n async next() {\n if (this.previousScene) {\n await this.previousScene.next();\n if (this.currentScene.isFinished()) {\n this.previousScene = null;\n }\n }\n this.frame += this.speed;\n if (this.currentScene.isFinished()) {\n return true;\n }\n await this.currentScene.next();\n if (this.previousScene && this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n if (this.currentScene.canTransitionOut()) {\n this.previousScene = this.currentScene;\n const nextScene = this.getNextScene(this.previousScene);\n if (nextScene) {\n this.previousScene.stopAllMedia();\n this.currentScene = nextScene;\n await this.currentScene.reset(this.previousScene);\n }\n if (!nextScene || this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n }\n return this.currentScene.isFinished();\n }\n findBestScene(frame) {\n let lastScene = this.scenes.current[0];\n for (const scene of this.scenes.current) {\n if (!scene.isCached() || scene.lastFrame > frame) {\n return scene;\n }\n lastScene = scene;\n }\n return lastScene;\n }\n getNextScene(scene) {\n const scenes = this.scenes.current;\n if (!scene) {\n return scenes[0];\n }\n const index = scenes.findIndex((s) => s === scene);\n if (index < 0) {\n return null;\n }\n return scenes[index + 1] ?? null;\n }\n};\n\n// src/app/PlaybackStatus.ts\nvar PlaybackStatus = class {\n constructor(playback) {\n this.playback = playback;\n }\n /**\n * Convert seconds to frames using the current framerate.\n *\n * @param seconds - The seconds to convert.\n */\n secondsToFrames(seconds) {\n return Math.ceil(seconds * this.playback.fps);\n }\n /**\n * Convert frames to seconds using the current framerate.\n *\n * @param frames - The frames to convert.\n */\n framesToSeconds(frames) {\n return frames / this.playback.fps;\n }\n get time() {\n return this.framesToSeconds(this.playback.frame);\n }\n get frame() {\n return this.playback.frame;\n }\n get speed() {\n return this.playback.speed;\n }\n get fps() {\n return this.playback.fps;\n }\n get state() {\n return this.playback.state;\n }\n /**\n * The time passed since the last frame in seconds.\n */\n get deltaTime() {\n return this.framesToSeconds(1) * this.speed;\n }\n};\n\n// src/app/SharedWebGLContext.ts\nvar SOURCE_URL_REGEX = /^\\/\\/# sourceURL=(.*)$/gm;\nvar INFO_LOG_REGEX = /ERROR: \\d+:(\\d+): (.*)/g;\nvar INFO_TOKEN_REGEX = /^'([^']+)'/;\nvar includeWithoutPreprocessor = `\nThe \\`#include\\` directive requires the use of a preprocessor.\n\nMake sure to import the shader from a file:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl';\n\\`\\`\\`\n\nDo **NOT** use the raw loader:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl?raw';\n\\`\\`\\`\n\nDo **NOT** use \\`#include\\` in an inline string:\n\n\\`\\`\\`ts\nconst shader = \\`\\\\\n#include \"example.glsl\"\n\\`;\n\\`\\`\\`\n\n[Learn more](https://motioncanvas.io/docs/shaders) about working with shaders.\n`;\nvar SharedWebGLContext = class {\n constructor(logger) {\n this.logger = logger;\n this.gl = null;\n this.currentOwner = null;\n this.programLookup = /* @__PURE__ */ new Map();\n }\n borrow(owner) {\n if (this.currentOwner === owner) {\n return this.gl;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = owner;\n this.currentOwner.setup(this.getGL());\n return this.gl;\n }\n /**\n * Dispose the WebGL context to free up resources.\n */\n dispose() {\n if (!this.gl) {\n return;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = null;\n this.gl.useProgram(null);\n for (const { program, fragment, vertex } of this.programLookup.values()) {\n this.gl.deleteProgram(program);\n this.gl.deleteShader(fragment);\n this.gl.deleteShader(vertex);\n }\n this.programLookup.clear();\n this.gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n this.gl.canvas.remove();\n this.gl = null;\n }\n getProgram(fragment, vertex) {\n const key = `${fragment}#${vertex}`;\n if (this.programLookup.has(key)) {\n return this.programLookup.get(key).program;\n }\n const gl = this.getGL();\n const fragmentShader = this.getShader(gl.FRAGMENT_SHADER, fragment);\n const vertexShader = this.getShader(gl.VERTEX_SHADER, vertex);\n if (!fragmentShader || !vertexShader) {\n return null;\n }\n const program = gl.createProgram();\n gl.attachShader(program, fragmentShader);\n gl.attachShader(program, vertexShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n this.logger.error({\n message: \"Failed to initialize the shader program.\",\n remarks: gl.getProgramInfoLog(program) ?? void 0,\n stack: new Error().stack\n });\n gl.deleteProgram(program);\n return null;\n }\n this.programLookup.set(key, {\n program,\n fragment: fragmentShader,\n vertex: vertexShader\n });\n return program;\n }\n getShader(type, source) {\n const gl = this.getGL();\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(shader);\n logGlslError(this.logger, log, source);\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n }\n getGL() {\n if (this.gl) {\n return this.gl;\n }\n this.gl = document.createElement(\"canvas\").getContext(\"webgl2\", {\n depth: false,\n premultipliedAlpha: false,\n stencil: false,\n powerPreference: \"high-performance\"\n });\n if (!this.gl) {\n throw new Error(\"Failed to initialize WebGL.\");\n }\n return this.gl;\n }\n};\nfunction logGlslError(logger, log, source) {\n let sourceUrl = null;\n SOURCE_URL_REGEX.lastIndex = 0;\n const sourceMatch = SOURCE_URL_REGEX.exec(source);\n if (sourceMatch) {\n const url = new URL(sourceMatch[1], window.location.origin);\n url.searchParams.set(\"t\", Date.now().toString());\n sourceUrl = url.toString();\n }\n if (!log) {\n logger.error({\n message: `Unknown shader compilation error.`,\n stack: fakeStackTrace(sourceUrl, 1, 0)\n });\n return null;\n }\n let logged = false;\n let result;\n while (result = INFO_LOG_REGEX.exec(log)) {\n const [, line, message] = result;\n let column = 0;\n const match = message.match(INFO_TOKEN_REGEX);\n if (match) {\n const tokenLine = source.split(\"\\n\")[parseInt(line) - 1];\n const index = tokenLine.indexOf(match[1]);\n if (index !== -1) {\n column = index;\n }\n if (match[1] === \"include\") {\n const line2 = source.split(\"\\n\").find((line3) => line3.startsWith(\"#include\"));\n if (line2) {\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n remarks: includeWithoutPreprocessor\n });\n break;\n }\n }\n }\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n stack: fakeStackTrace(sourceUrl, line, column)\n });\n }\n if (!logged) {\n logger.error({\n message: `Shader compilation error: ${log}`,\n stack: fakeStackTrace(sourceUrl, 1, 0)\n });\n }\n}\nfunction fakeStackTrace(file, line, column) {\n if (!file) {\n return void 0;\n }\n return navigator.userAgent.toLowerCase().includes(\"chrome\") ? ` at (${file}:${line}:${column})` : `@${file}:${line}:${column}`;\n}\n\n// src/app/Player.ts\nvar Player = class {\n constructor(project, settings = {}, initialState = {}, initialFrame = -1) {\n this.project = project;\n this.settings = settings;\n this.initialState = initialState;\n this.initialFrame = initialFrame;\n this.render = new AsyncEventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.duration = new ValueDispatcher(0);\n this.recalculated = new EventDispatcher();\n this.lock = new Semaphore();\n this.startTime = 0;\n this.endTime = Infinity;\n this.requestId = null;\n this.renderTime = 0;\n this.requestedSeek = -1;\n this.requestedRender = false;\n this.requestedRecalculation = true;\n this.active = false;\n this.playerState = new ValueDispatcher({\n loop: true,\n muted: true,\n volume: 1,\n speed: 1,\n ...initialState,\n paused: true\n });\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n this.requestedSeek = initialFrame;\n this.logger = this.project.logger;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.size = settings.size ?? new Vector2(1920, 1080);\n this.resolutionScale = settings.resolutionScale ?? 1;\n this.startTime = settings.range?.[0] ?? 0;\n this.endTime = settings.range?.[1] ?? Infinity;\n this.playback.fps = settings.fps ?? 60;\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: this.size,\n resolutionScale: this.resolutionScale,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures\n });\n scene.onReloaded.subscribe(() => this.requestRecalculation());\n scene.variables.updateSignals(project.variables ?? {});\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n this.activate();\n }\n /**\n * Triggered during each iteration of the update loop when the frame is ready\n * to be rendered.\n *\n * @remarks\n * Player does not perform any rendering on its own. For the animation to be\n * visible, another class must subscribe to this event and perform the\n * rendering itself. {@link Stage} can be used to display the animation.\n *\n * @eventProperty\n */\n get onRender() {\n return this.render.subscribable;\n }\n get onStateChanged() {\n return this.playerState.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n get onDurationChanged() {\n return this.duration.subscribable;\n }\n /**\n * Triggered right after recalculation finishes.\n *\n * @remarks\n * Can be used to provide visual feedback.\n *\n * @eventProperty\n */\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get startFrame() {\n return Math.min(\n this.playback.duration,\n this.status.secondsToFrames(this.startTime)\n );\n }\n get endFrame() {\n return Math.min(\n this.playback.duration,\n this.status.secondsToFrames(this.endTime)\n );\n }\n get finished() {\n return this.playback.finished || this.playback.frame >= this.endFrame;\n }\n async configure(settings) {\n await this.lock.acquire();\n let frame = this.playback.frame;\n let recalculate = false;\n this.startTime = settings.range[0];\n this.endTime = settings.range[1];\n const newFps = Math.max(1, settings.fps);\n if (this.playback.fps !== newFps) {\n const ratio = newFps / this.playback.fps;\n this.playback.fps = newFps;\n frame = Math.floor(frame * ratio);\n recalculate = true;\n }\n if (!settings.size.exactlyEquals(this.size) || settings.resolutionScale !== this.resolutionScale) {\n this.size = settings.size;\n this.resolutionScale = settings.resolutionScale;\n this.playback.reload({\n size: this.size,\n resolutionScale: this.resolutionScale\n });\n }\n this.lock.release();\n if (recalculate) {\n this.playback.reload();\n this.frame.current = frame;\n this.requestRecalculation();\n this.requestedSeek = frame;\n }\n }\n /**\n * Whether the given frame is inside the animation range.\n *\n * @param frame - The frame to check.\n */\n isInRange(frame) {\n return frame >= 0 && frame <= this.playback.duration;\n }\n /**\n * Whether the given frame is inside the user-defined range.\n *\n * @param frame - The frame to check.\n */\n isInUserRange(frame) {\n return frame >= this.startFrame && frame <= this.endFrame;\n }\n requestSeek(value) {\n this.requestedSeek = this.clampRange(value);\n }\n requestPreviousFrame() {\n this.requestedSeek = this.frame.current - this.playback.speed;\n }\n requestNextFrame() {\n this.requestedSeek = this.frame.current + this.playback.speed;\n }\n requestReset() {\n this.requestedSeek = 0;\n }\n requestRender() {\n this.requestedRender = true;\n }\n toggleLoop(value = !this.playerState.current.loop) {\n if (value !== this.playerState.current.loop) {\n this.playerState.current = {\n ...this.playerState.current,\n loop: value\n };\n }\n }\n togglePlayback(value = this.playerState.current.paused) {\n if (value === this.playerState.current.paused) {\n this.playerState.current = {\n ...this.playerState.current,\n paused: !value\n };\n if (value && !this.playerState.current.loop && this.playback.frame === this.playback.duration) {\n this.requestReset();\n }\n }\n }\n toggleAudio(value = this.playerState.current.muted) {\n if (value === this.playerState.current.muted) {\n this.playerState.current = {\n ...this.playerState.current,\n muted: !value\n };\n }\n }\n setAudioVolume(value) {\n const clampedValue = clamp(0, 1, value);\n if (clampedValue !== this.playerState.current.volume) {\n this.playerState.current = {\n ...this.playerState.current,\n volume: clampedValue\n };\n }\n }\n addAudioVolume(value) {\n this.setAudioVolume(this.playerState.current.volume + value);\n }\n setSpeed(value) {\n if (value !== this.playerState.current.speed) {\n this.playback.speed = value;\n this.playback.reload();\n this.playerState.current = {\n ...this.playerState.current,\n speed: value\n };\n this.requestRecalculation();\n }\n }\n setVariables(variables) {\n for (const scene of this.playback.onScenesRecalculated.current) {\n scene.variables.updateSignals(variables);\n }\n }\n /**\n * Activate the player.\n *\n * @remarks\n * A player needs to be active in order for the update loop to run. Each\n * player is active by default.\n */\n activate() {\n this.active = true;\n this.request();\n }\n /**\n * Deactivate the player.\n *\n * @remarks\n * Deactivating the player prevents its update loop from running. This should\n * be done before disposing the player, to prevent it from running in the\n * background.\n *\n * Just pausing the player does not stop the loop.\n */\n deactivate() {\n this.active = false;\n this.sharedWebGLContext.dispose();\n this.playback.currentScene.stopAllMedia();\n if (this.requestId !== null) {\n cancelAnimationFrame(this.requestId);\n this.requestId = null;\n }\n }\n requestRecalculation() {\n this.requestedRecalculation = true;\n this.request();\n }\n async prepare() {\n const state = {\n ...this.playerState.current,\n seek: this.requestedSeek,\n render: this.requestedRender\n };\n this.requestedSeek = -1;\n this.requestedRender = false;\n if (this.requestedRecalculation) {\n if (state.seek < 0) {\n state.seek = this.playback.frame;\n }\n try {\n await this.playback.recalculate();\n this.duration.current = this.playback.frame;\n this.recalculated.dispatch();\n } catch (e) {\n this.requestSeek(state.seek);\n throw e;\n } finally {\n this.requestedRecalculation = false;\n }\n }\n if (!state.loop && this.finished && !state.paused && state.seek < 0 || this.endFrame === this.startFrame) {\n this.togglePlayback(false);\n state.paused = true;\n state.seek = this.endFrame === this.startFrame ? state.seek : this.startFrame;\n }\n if (state.loop && (state.seek > this.endFrame || this.finished && !state.paused) && this.startFrame !== this.endTime) {\n state.seek = this.startFrame;\n }\n return state;\n }\n async run() {\n const state = await this.prepare();\n const previousState = this.playback.state;\n this.playback.state = state.paused ? 2 /* Paused */ : 0 /* Playing */;\n if (state.seek >= 0 || !this.isInUserRange(this.status.frame)) {\n const seekFrame = state.seek < 0 ? this.status.frame : state.seek;\n const clampedFrame = this.clampRange(seekFrame);\n this.logger.profile(\"seek time\");\n await this.playback.seek(clampedFrame);\n this.logger.profile(\"seek time\");\n } else if (state.paused) {\n if (state.render || state.paused && previousState !== 2 /* Paused */) {\n await this.render.dispatch();\n }\n this.request();\n return;\n } else if (this.status.frame < this.endFrame) {\n await this.playback.progress();\n }\n if (!state.paused && this.playback.currentScene.slides.isWaiting()) {\n this.togglePlayback(false);\n state.paused = true;\n }\n await this.render.dispatch();\n this.frame.current = this.playback.frame;\n this.request();\n }\n request() {\n if (!this.active) return;\n this.requestId ?? (this.requestId = requestAnimationFrame(async (time) => {\n this.requestId = null;\n if (time - this.renderTime >= 1e3 / (this.status.fps + 5)) {\n this.renderTime = time;\n await this.lock.acquire();\n try {\n await this.run();\n } catch (e) {\n this.logger.error(e);\n }\n this.lock.release();\n } else {\n this.request();\n }\n }));\n }\n clampRange(frame) {\n return clamp(this.startFrame, this.endFrame, frame);\n }\n};\n\n// src/app/project-settings.ts\nfunction getFullPreviewSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.preview\n };\n}\nfunction getFullRenderingSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.rendering\n };\n}\n\n// src/app/Stage.ts\nvar Stage = class {\n constructor() {\n // TODO Consider adding pooling for canvases.\n this.background = null;\n this.resolutionScale = 1;\n this.colorSpace = \"srgb\";\n this.size = Vector2.zero;\n this.finalBuffer = document.createElement(\"canvas\");\n this.currentBuffer = document.createElement(\"canvas\");\n this.previousBuffer = document.createElement(\"canvas\");\n const colorSpace = this.colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n get canvasSize() {\n return this.size.scale(this.resolutionScale);\n }\n configure({\n colorSpace = this.colorSpace,\n size = this.size,\n resolutionScale = this.resolutionScale,\n background = this.background\n }) {\n if (colorSpace !== this.colorSpace) {\n this.colorSpace = colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n if (!size.exactlyEquals(this.size) || resolutionScale !== this.resolutionScale) {\n this.resolutionScale = resolutionScale;\n this.size = size;\n this.resizeCanvas(this.context);\n this.resizeCanvas(this.currentContext);\n this.resizeCanvas(this.previousContext);\n }\n this.background = typeof background === \"string\" ? background : background?.serialize() ?? null;\n }\n async render(currentScene, previousScene) {\n const previousOnTop = previousScene ? unwrap(currentScene.previousOnTop) : false;\n if (previousScene) {\n await previousScene.render(this.previousContext);\n }\n await currentScene.render(this.currentContext);\n const size = this.canvasSize;\n this.context.clearRect(0, 0, size.width, size.height);\n if (this.background) {\n this.context.save();\n this.context.fillStyle = this.background;\n this.context.fillRect(0, 0, size.width, size.height);\n this.context.restore();\n }\n if (previousScene && !previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n this.context.drawImage(this.currentBuffer, 0, 0);\n if (previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n }\n resizeCanvas(context) {\n const size = this.canvasSize;\n context.canvas.width = size.width;\n context.canvas.height = size.height;\n }\n};\n\n// src/app/TimeEstimator.ts\nvar TimeEstimator = class {\n constructor() {\n this.completion = new ValueDispatcher(0);\n this.startTimestamp = 0;\n this.lastUpdateTimestamp = 0;\n this.nextCompletion = 0;\n }\n get onCompletionChanged() {\n return this.completion.subscribable;\n }\n /**\n * Get the current time estimate.\n *\n * @param timestamp - The timestamp to calculate the estimate against.\n * Defaults to `performance.now()`.\n */\n estimate(timestamp = performance.now()) {\n const elapsed = timestamp - this.startTimestamp;\n const completion = this.completion.current;\n let eta = Infinity;\n if (completion >= 1) {\n eta = 0;\n } else if (completion > 0) {\n const lastUpdateDuration = this.lastUpdateTimestamp - this.startTimestamp;\n eta = lastUpdateDuration / completion - elapsed;\n eta = Math.max(0, eta);\n } else if (this.nextCompletion > 0) {\n eta = elapsed / this.nextCompletion - elapsed;\n }\n return { completion, elapsed, eta };\n }\n /**\n * Update the completion percentage.\n *\n * @param completion - The completion percentage ranging from `0` to `1`.\n * @param timestamp - A timestamp at which the process was updated.\n * Defaults to `performance.now()`.\n */\n update(completion, timestamp = performance.now()) {\n this.completion.current = clamp(0, 1, completion);\n this.lastUpdateTimestamp = timestamp;\n }\n reportProgress() {\n if (window.logProgress) {\n window.logProgress(this.completion.current);\n }\n }\n /**\n * Reset the estimator.\n *\n * @param nextCompletion - If known, the completion percentage of the next\n * update.\n * @param timestamp - A timestamp at which the process started.\n * Defaults to `performance.now()`.\n */\n reset(nextCompletion = 0, timestamp = performance.now()) {\n this.startTimestamp = timestamp;\n this.lastUpdateTimestamp = timestamp;\n this.completion.current = 0;\n this.nextCompletion = nextCompletion;\n }\n};\n\n// src/app/Renderer.ts\nvar RendererState = /* @__PURE__ */ ((RendererState2) => {\n RendererState2[RendererState2[\"Initial\"] = 0] = \"Initial\";\n RendererState2[RendererState2[\"Working\"] = 1] = \"Working\";\n RendererState2[RendererState2[\"Aborting\"] = 2] = \"Aborting\";\n return RendererState2;\n})(RendererState || {});\nvar RendererResult = /* @__PURE__ */ ((RendererResult2) => {\n RendererResult2[RendererResult2[\"Success\"] = 0] = \"Success\";\n RendererResult2[RendererResult2[\"Error\"] = 1] = \"Error\";\n RendererResult2[RendererResult2[\"Aborted\"] = 2] = \"Aborted\";\n return RendererResult2;\n})(RendererResult || {});\nvar Renderer = class {\n constructor(project) {\n this.project = project;\n this.state = new ValueDispatcher(0 /* Initial */);\n this.finished = new EventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.stage = new Stage();\n this.estimator = new TimeEstimator();\n this.lock = new Semaphore();\n this.exporter = null;\n this.abortController = null;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: new Vector2(1920, 1080),\n resolutionScale: 1,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures\n });\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n }\n get onStateChanged() {\n return this.state.subscribable;\n }\n get onFinished() {\n return this.finished.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n /**\n * Returns number of frames that a project will have.\n */\n async getNumberOfFrames(settings) {\n await this.lock.acquire();\n this.estimator.reset();\n this.state.current = 1 /* Working */;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const frames = this.playback.duration;\n this.state.current = 0 /* Initial */;\n this.sharedWebGLContext.dispose();\n this.lock.release();\n return frames;\n }\n frameToTime(frame) {\n return this.status.framesToSeconds(frame);\n }\n timeToFrame(second) {\n return this.status.secondsToFrames(second);\n }\n /**\n * Render the animation using the provided settings.\n *\n * @param settings - The rendering settings.\n */\n async render(settings) {\n if (this.state.current !== 0 /* Initial */) return;\n await this.lock.acquire();\n this.estimator.reset();\n this.state.current = 1 /* Working */;\n let result;\n try {\n this.abortController = new AbortController();\n result = await this.run(settings, this.abortController.signal);\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n if (this.exporter) {\n try {\n await this.exporter.stop?.(result);\n } catch (_) {\n throw Error(e.message);\n }\n this.exporter = null;\n throw Error(e.message);\n }\n }\n this.estimator.update(1);\n this.state.current = 0 /* Initial */;\n this.finished.dispatch(result);\n this.sharedWebGLContext.dispose();\n this.lock.release();\n }\n /**\n * Abort the ongoing render process.\n */\n abort() {\n if (this.state.current !== 1 /* Working */) return;\n this.abortController?.abort();\n this.state.current = 2 /* Aborting */;\n }\n /**\n * Export an individual frame.\n *\n * @remarks\n * This method always uses the default `ImageExporter`.\n *\n * @param settings - The rendering settings.\n * @param time - The timestamp to export.\n */\n async renderFrame(settings, time) {\n await this.lock.acquire();\n try {\n const frame = this.status.secondsToFrames(time);\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n await this.reloadScenes(settings);\n await this.playback.reset();\n await this.playback.seek(frame);\n await this.stage.render(\n this.playback.currentScene,\n this.playback.previousScene\n );\n if (import.meta.hot) {\n import.meta.hot.send(\"twick:export\", {\n frame,\n data: this.stage.finalBuffer.toDataURL(\"image/png\"),\n mimeType: \"image/png\",\n subDirectories: [\"still\", this.project.name]\n });\n }\n } catch (e) {\n this.project.logger.error(e);\n }\n this.lock.release();\n }\n async run(settings, signal) {\n const exporters = [\n FFmpegExporterClient,\n ImageExporter,\n WasmExporter\n ];\n const exporterClass = exporters.find(\n (exporter) => exporter.id === settings.exporter.name\n );\n if (!exporterClass) {\n this.project.logger.error(\n `Could not find the \"${settings.exporter.name}\" exporter.`\n );\n return 1 /* Error */;\n }\n this.exporter = await exporterClass.create(this.project, settings);\n if (this.exporter.configuration) {\n settings = {\n ...settings,\n ...await this.exporter.configuration() ?? {}\n };\n }\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n const from = this.status.secondsToFrames(settings.range[0]);\n this.frame.current = from;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const to = Math.min(\n this.playback.duration,\n this.status.secondsToFrames(settings.range[1])\n );\n await this.playback.seek(from);\n if (signal.aborted) return 2 /* Aborted */;\n await this.exporter.start?.();\n let lastRefresh = performance.now();\n let result = 0 /* Success */;\n const mediaByFrames = await this.getMediaByFrames(settings);\n let generateAudioPromise;\n if (this.exporter && this.exporter.generateAudio) {\n generateAudioPromise = this.exporter.generateAudio(\n mediaByFrames,\n from,\n to\n );\n }\n if (this.exporter && this.exporter.downloadVideos) {\n await this.exporter.downloadVideos(mediaByFrames);\n }\n await this.playback.seek(from);\n try {\n this.estimator.reset(1 / (to - from));\n await this.exportFrame(signal);\n this.estimator.update(clampRemap(from, to, 0, 1, this.playback.frame));\n this.estimator.reportProgress();\n if (signal.aborted) {\n result = 2 /* Aborted */;\n } else {\n let finished = false;\n while (!finished) {\n await this.playback.progress();\n await this.exportFrame(signal);\n this.estimator.update(\n clampRemap(from, to, 0, 1, this.playback.frame)\n );\n this.estimator.reportProgress();\n if (performance.now() - lastRefresh > 1 / 30) {\n lastRefresh = performance.now();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n if (this.playback.finished || this.playback.frame >= to) {\n finished = true;\n }\n if (signal.aborted) {\n result = 2 /* Aborted */;\n finished = true;\n }\n }\n }\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n }\n await this.exporter.stop?.(result);\n if (result === 0 /* Success */ && this.exporter && this.exporter.mergeMedia && generateAudioPromise) {\n try {\n await generateAudioPromise;\n await this.exporter.mergeMedia();\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n }\n }\n await this.exporter?.kill?.();\n this.exporter = null;\n return result;\n }\n async reloadScenes(settings) {\n for (let i = 0; i < this.project.scenes.length; i++) {\n const scene = this.playback.onScenesRecalculated.current[i];\n scene.reload({\n size: settings.size,\n resolutionScale: settings.resolutionScale\n });\n scene.variables.updateSignals(this.project.variables ?? {});\n }\n }\n async exportFrame(signal) {\n this.frame.current = this.playback.frame;\n await this.stage.render(\n this.playback.currentScene,\n this.playback.previousScene\n );\n const sceneFrame = this.playback.frame - this.playback.currentScene.firstFrame;\n await this.exporter.handleFrame(\n this.stage.finalBuffer,\n this.playback.frame,\n sceneFrame,\n this.playback.currentScene.name,\n signal\n );\n }\n async getMediaByFrames(settings) {\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n const from = this.status.secondsToFrames(settings.range[0]);\n this.frame.current = from;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const to = Math.min(\n this.playback.duration,\n this.status.secondsToFrames(settings.range[1])\n );\n await this.playback.seek(from);\n const mediaAssets = [];\n try {\n const currentMediaAssets = this.playback.currentScene.getMediaAssets();\n mediaAssets.push(currentMediaAssets);\n let finished = false;\n while (!finished) {\n await this.playback.progress();\n mediaAssets.push(this.playback.currentScene.getMediaAssets());\n if (this.playback.finished || this.playback.frame >= to) {\n finished = true;\n }\n }\n } catch (e) {\n this.project.logger.error(e);\n }\n return mediaAssets;\n }\n};\n\n// src/media/loadImage.ts\nvar Canvas;\nvar Context;\nfunction loadImage(source) {\n const image = new Image();\n image.src = source;\n return new Promise((resolve, reject) => {\n if (image.complete) {\n resolve(image);\n } else {\n image.onload = () => resolve(image);\n image.onerror = reject;\n }\n });\n}\nfunction loadAnimation(sources) {\n return Promise.all(sources.map(loadImage));\n}\nfunction getImageData(image) {\n Canvas ?? (Canvas = document.createElement(\"canvas\"));\n Context ?? (Context = getContext({ willReadFrequently: true }, Canvas));\n Canvas.width = image.width;\n Canvas.height = image.height;\n Context.clearRect(0, 0, image.width, image.height);\n Context.drawImage(image, 0, 0);\n return Context.getImageData(0, 0, image.width, image.height);\n}\n\n// src/threading/cancel.ts\nfunction cancel(...tasks) {\n const thread = useThread();\n for (const task of tasks) {\n const child = thread.children.find((thread2) => thread2.runner === task);\n if (child && !child.canceled) {\n child.cancel();\n child.time(thread.time());\n }\n }\n}\n\n// src/threading/spawn.ts\nfunction spawn(task) {\n return useThread().spawn(task);\n}\n\n// src/threading/ThreadGenerator.ts\nfunction isPromisable(value) {\n return value && (typeof value === \"object\" || typeof value === \"function\") && \"toPromise\" in value;\n}\nfunction isThreadGenerator(value) {\n return value !== null && typeof value === \"object\" && Symbol.iterator in value && \"next\" in value;\n}\n\n// src/threading/Thread.ts\nvar reusedGenerator = `\nThis usually happens when you mistakenly reuse a generator that is already\nrunning.\n\nFor example, using \\`yield\\` here will run the opacity generator concurrently and\nstore it in the \\`task\\` variable (in case you want to cancel or await it later):\n\n\\`\\`\\`ts\nconst task = yield rect().opacity(1, 1);\n\\`\\`\\`\n\nTrying to \\`yield\\` this task again will cause the current error:\n\n\\`\\`\\`ts\nyield task;\n\\`\\`\\`\n\nPassing it to other flow functions will also cause the error:\n\n\\`\\`\\`ts\n// prettier-ignore\nyield* all(task);\n\\`\\`\\`\n\nTry to investigate your code looking for \\`yield\\` statements whose return value\nis reused in this way. Here's an example of a common mistake:\n\n\\`\\`\\`ts wrong\n// prettier-ignore\nyield* all(\n yield rect().opacity(1, 1), \n yield rect().x(200, 1),\n);\n\\`\\`\\`\n\n\\`\\`\\`ts correct\n// prettier-ignore\nyield* all(\n rect().opacity(1, 1), \n rect().x(200, 1),\n);\n\\`\\`\\`\n`;\ndecorate(noop, threadable());\nfunction* noop() {\n}\nvar Thread = class {\n constructor(runner) {\n this.runner = runner;\n this.children = [];\n /**\n * The current time of this thread.\n *\n * @remarks\n * Used by {@link flow.waitFor} and other time-based functions to properly\n * support durations shorter than one frame.\n */\n this.time = createSignal(0);\n this.parent = null;\n this.isCanceled = false;\n this.isPaused = false;\n this.fixedTime = 0;\n this.queue = [];\n if (this.runner.task) {\n useLogger().error({\n message: `The generator \"${getTaskName(\n this.runner\n )}\" is already being executed by another thread.`,\n remarks: reusedGenerator\n });\n this.runner = noop();\n }\n this.runner.task = this;\n }\n /**\n * The fixed time of this thread.\n *\n * @remarks\n * Fixed time is a multiple of the frame duration. It can be used to account\n * for the difference between this thread's {@link time} and the time of the\n * current animation frame.\n */\n get fixed() {\n return this.fixedTime;\n }\n /**\n * Check if this thread or any of its ancestors has been canceled.\n */\n get canceled() {\n return this.isCanceled || (this.parent?.canceled ?? false);\n }\n get paused() {\n return this.isPaused || (this.parent?.paused ?? false);\n }\n /**\n * Progress the wrapped generator once.\n */\n next() {\n if (this.paused) {\n return {\n value: null,\n done: false\n };\n }\n startThread(this);\n const result = this.runner.next(this.value);\n endThread(this);\n this.value = null;\n return result;\n }\n /**\n * Prepare the thread for the next update cycle.\n *\n * @param dt - The delta time of the next cycle.\n */\n update(dt) {\n if (!this.paused) {\n this.time(this.time() + dt);\n this.fixedTime += dt;\n }\n this.children = this.children.filter((child) => !child.canceled);\n }\n spawn(child) {\n if (!isThreadGenerator(child)) {\n child = child();\n }\n this.queue.push(child);\n return child;\n }\n add(child) {\n child.parent = this;\n child.isCanceled = false;\n child.time(this.time());\n child.fixedTime = this.fixedTime;\n this.children.push(child);\n setTaskName(child.runner, `unknown ${this.children.length}`);\n }\n drain(callback) {\n this.queue.forEach(callback);\n this.queue = [];\n }\n cancel() {\n this.runner.return();\n this.isCanceled = true;\n this.parent = null;\n this.drain((task) => task.return());\n }\n pause(value) {\n this.isPaused = value;\n }\n};\n\n// src/threading/threads.ts\nfunction isPromise(value) {\n return typeof value?.then === \"function\";\n}\ndecorate(threads, threadable());\nfunction* threads(factory, callback) {\n const playback = usePlayback();\n const root = factory();\n setTaskName(root, \"root\");\n const rootThread = new Thread(root);\n callback?.(rootThread);\n let threads2 = [rootThread];\n while (threads2.length > 0) {\n const newThreads = [];\n const queue = [...threads2];\n const dt = playback.deltaTime;\n while (queue.length > 0) {\n const thread = queue.pop();\n if (!thread || thread.canceled) {\n continue;\n }\n const result = thread.next();\n if (result.done) {\n thread.cancel();\n continue;\n }\n if (isThreadGenerator(result.value)) {\n const child = new Thread(result.value);\n thread.value = result.value;\n thread.add(child);\n queue.push(thread);\n queue.push(child);\n } else if (result.value) {\n thread.value = yield result.value;\n queue.push(thread);\n } else {\n thread.update(dt);\n thread.drain((task) => {\n const child = new Thread(task);\n thread.add(child);\n newThreads.unshift(child);\n });\n newThreads.unshift(thread);\n }\n }\n threads2 = newThreads.filter((thread) => !thread.canceled);\n if (threads2.length > 0) yield;\n }\n}\n\n// src/scenes/Scene.ts\nvar SceneRenderEvent = /* @__PURE__ */ ((SceneRenderEvent2) => {\n SceneRenderEvent2[SceneRenderEvent2[\"BeforeRender\"] = 0] = \"BeforeRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"BeginRender\"] = 1] = \"BeginRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"FinishRender\"] = 2] = \"FinishRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"AfterRender\"] = 3] = \"AfterRender\";\n return SceneRenderEvent2;\n})(SceneRenderEvent || {});\n\n// src/scenes/LifecycleEvents.ts\nvar LifecycleEvents = class {\n constructor(scene) {\n this.scene = scene;\n this.beforeRender = new EventDispatcher();\n this.beginRender = new EventDispatcher();\n this.finishRender = new EventDispatcher();\n this.afterRender = new EventDispatcher();\n this.scene.onRenderLifecycle.subscribe(([event, ctx]) => {\n switch (event) {\n case 0 /* BeforeRender */:\n return this.beforeRender.dispatch(ctx);\n case 1 /* BeginRender */:\n return this.beginRender.dispatch(ctx);\n case 2 /* FinishRender */:\n return this.finishRender.dispatch(ctx);\n case 3 /* AfterRender */:\n return this.afterRender.dispatch(ctx);\n }\n });\n this.scene.onReset.subscribe(() => {\n this.beforeRender.clear();\n this.beginRender.clear();\n this.finishRender.clear();\n this.afterRender.clear();\n });\n }\n get onBeforeRender() {\n return this.beforeRender.subscribable;\n }\n get onBeginRender() {\n return this.beginRender.subscribable;\n }\n get onFinishRender() {\n return this.finishRender.subscribable;\n }\n get onAfterRender() {\n return this.afterRender.subscribable;\n }\n};\n\n// src/scenes/SceneState.ts\nvar SceneState = /* @__PURE__ */ ((SceneState2) => {\n SceneState2[SceneState2[\"Initial\"] = 0] = \"Initial\";\n SceneState2[SceneState2[\"AfterTransitionIn\"] = 1] = \"AfterTransitionIn\";\n SceneState2[SceneState2[\"CanTransitionOut\"] = 2] = \"CanTransitionOut\";\n SceneState2[SceneState2[\"Finished\"] = 3] = \"Finished\";\n return SceneState2;\n})(SceneState || {});\n\n// src/scenes/Shaders.ts\nvar UNIFORM_RESOLUTION = \"resolution\";\nvar UNIFORM_DESTINATION_TEXTURE = \"destinationTexture\";\nvar UNIFORM_SOURCE_TEXTURE = \"sourceTexture\";\nvar UNIFORM_TIME = \"time\";\nvar UNIFORM_DELTA_TIME = \"deltaTime\";\nvar UNIFORM_FRAMERATE = \"framerate\";\nvar UNIFORM_FRAME = \"frame\";\nvar UNIFORM_SOURCE_MATRIX = \"sourceMatrix\";\nvar UNIFORM_DESTINATION_MATRIX = \"destinationMatrix\";\nvar FragmentShader = `#version 300 es\n\nin vec2 position;\n\nout vec2 screenUV;\nout vec2 sourceUV;\nout vec2 destinationUV;\n\nuniform mat4 sourceMatrix;\nuniform mat4 destinationMatrix;\n\nvoid main() {\n vec2 position_source = position * 0.5 + 0.5;\n vec4 position_screen = sourceMatrix * vec4(position_source, 0, 1);\n\n screenUV = position_screen.xy;\n sourceUV = position_source;\n destinationUV = (destinationMatrix * position_screen).xy;\n\n gl_Position = (position_screen - 0.5) * 2.0;\n}\n`;\nvar Shaders = class {\n constructor(scene, sharedContext) {\n this.scene = scene;\n this.sharedContext = sharedContext;\n this.gl = null;\n this.positionBuffer = null;\n this.sourceTexture = null;\n this.destinationTexture = null;\n this.positionLocation = 0;\n this.quadPositions = new Float32Array([\n -1,\n 1,\n -1,\n -1,\n 1,\n 1,\n 1,\n -1\n ]);\n this.handleReload = () => {\n if (this.gl) {\n this.updateViewport();\n }\n };\n scene.onReloaded.subscribe(this.handleReload);\n }\n setup(gl) {\n this.gl = gl;\n this.updateViewport();\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, this.quadPositions, gl.STATIC_DRAW);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this.positionLocation);\n this.sourceTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n this.destinationTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.destinationTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n }\n teardown(gl) {\n gl.deleteBuffer(this.positionBuffer);\n gl.disableVertexAttribArray(this.positionLocation);\n gl.deleteTexture(this.sourceTexture);\n gl.deleteTexture(this.destinationTexture);\n this.positionBuffer = null;\n this.sourceTexture = null;\n this.destinationTexture = null;\n this.gl = null;\n }\n updateViewport() {\n if (this.gl) {\n const size = this.scene.getRealSize();\n this.gl.canvas.width = size.width;\n this.gl.canvas.height = size.height;\n this.gl.viewport(0, 0, size.width, size.height);\n }\n }\n getGL() {\n return this.gl ?? this.sharedContext.borrow(this);\n }\n getProgram(fragment) {\n const program = this.sharedContext.getProgram(fragment, FragmentShader);\n if (!program) {\n return null;\n }\n const size = this.scene.getRealSize();\n const gl = this.getGL();\n gl.useProgram(program);\n gl.uniform1i(gl.getUniformLocation(program, UNIFORM_SOURCE_TEXTURE), 0);\n gl.uniform1i(\n gl.getUniformLocation(program, UNIFORM_DESTINATION_TEXTURE),\n 1\n );\n gl.uniform2f(\n gl.getUniformLocation(program, UNIFORM_RESOLUTION),\n size.x,\n size.y\n );\n gl.uniform1f(\n gl.getUniformLocation(program, UNIFORM_DELTA_TIME),\n this.scene.playback.deltaTime\n );\n gl.uniform1f(\n gl.getUniformLocation(program, UNIFORM_FRAMERATE),\n this.scene.playback.fps\n );\n return program;\n }\n copyTextures(destination, source) {\n this.copyTexture(source, this.sourceTexture);\n this.copyTexture(destination, this.destinationTexture);\n }\n clear() {\n const gl = this.getGL();\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n render() {\n const gl = this.getGL();\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n copyTexture(source, texture) {\n const gl = this.getGL();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);\n gl.generateMipmap(gl.TEXTURE_2D);\n }\n};\n\n// src/scenes/Slides.ts\nvar Slides = class {\n constructor(scene) {\n this.scene = scene;\n this.slides = new ValueDispatcher([]);\n this.lookup = /* @__PURE__ */ new Map();\n this.collisionLookup = /* @__PURE__ */ new Set();\n this.current = null;\n this.canResume = false;\n this.waitsForId = null;\n this.targetId = null;\n this.handleReload = () => {\n this.lookup.clear();\n this.collisionLookup.clear();\n this.current = null;\n this.waitsForId = null;\n this.targetId = null;\n };\n this.handleReset = () => {\n this.collisionLookup.clear();\n this.current = null;\n this.waitsForId = null;\n };\n this.handleRecalculated = () => {\n this.slides.current = [...this.lookup.values()];\n };\n this.scene.onReloaded.subscribe(this.handleReload);\n this.scene.onReset.subscribe(this.handleReset);\n this.scene.onRecalculated.subscribe(this.handleRecalculated);\n }\n get onChanged() {\n return this.slides.subscribable;\n }\n setTarget(target) {\n this.targetId = target;\n }\n resume() {\n this.canResume = true;\n }\n isWaitingFor(slide) {\n return this.waitsForId === slide;\n }\n isWaiting() {\n return this.waitsForId !== null;\n }\n didHappen(slide) {\n if (this.current === null) {\n return false;\n }\n for (const key of this.lookup.keys()) {\n if (key === slide) {\n return true;\n }\n if (key === this.current?.id) {\n return false;\n }\n }\n return false;\n }\n getCurrent() {\n return this.current;\n }\n register(name, initialTime) {\n if (this.waitsForId !== null) {\n throw new Error(\n `The animation already waits for a slide: ${this.waitsForId}.`\n );\n }\n const id = this.toId(name);\n if (this.scene.playback.state !== 3 /* Presenting */) {\n if (!this.lookup.has(id)) {\n this.lookup.set(id, {\n id,\n name,\n time: initialTime,\n scene: this.scene,\n stack: new Error().stack\n });\n }\n if (this.collisionLookup.has(name)) {\n this.scene.logger.warn({\n message: `A slide named \"${name}\" already exists.`,\n stack: new Error().stack\n });\n } else {\n this.collisionLookup.add(name);\n }\n }\n this.waitsForId = id;\n this.current = this.lookup.get(id) ?? null;\n this.canResume = false;\n }\n shouldWait(name) {\n const id = this.toId(name);\n if (this.waitsForId !== id) {\n throw new Error(\n `The animation waits for a different slide: ${this.waitsForId}.`\n );\n }\n const data = this.lookup.get(id);\n if (!data) {\n throw new Error(`Could not find the \"${name}\" slide.`);\n }\n let canResume = this.canResume;\n if (this.scene.playback.state !== 3 /* Presenting */) {\n canResume = id !== this.targetId;\n }\n if (canResume) {\n this.waitsForId = null;\n }\n return !canResume;\n }\n toId(name) {\n return `${this.scene.name}:${name}`;\n }\n};\n\n// src/scenes/Variables.ts\nvar Variables = class {\n constructor(scene) {\n this.scene = scene;\n this.signals = {};\n this.variables = {};\n /**\n * Reset all stored signals.\n */\n this.handleReset = () => {\n this.signals = {};\n };\n scene.onReset.subscribe(this.handleReset);\n }\n /**\n * Get variable signal if exists or create signal if not\n *\n * @param name - The name of the variable.\n * @param initial - The initial value of the variable. It will be used if the\n * variable was not configured from the outside.\n */\n get(name, initial) {\n var _a;\n (_a = this.signals)[name] ?? (_a[name] = createSignal(this.variables[name] ?? initial));\n return () => this.signals[name]();\n }\n /**\n * Update all signals with new project variable values.\n */\n updateSignals(variables) {\n this.variables = variables;\n Object.keys(variables).map((variableName) => {\n if (variableName in this.signals) {\n this.signals[variableName](variables[variableName]);\n }\n });\n }\n};\n\n// src/scenes/GeneratorScene.ts\nvar GeneratorScene = class {\n constructor(description) {\n this.cache = new ValueDispatcher({\n firstFrame: 0,\n transitionDuration: 0,\n duration: 0,\n lastFrame: 0\n });\n this.reloaded = new EventDispatcher();\n this.recalculated = new EventDispatcher();\n this.thread = new ValueDispatcher(null);\n this.renderLifecycle = new EventDispatcher();\n this.afterReset = new EventDispatcher();\n this.lifecycleEvents = new LifecycleEvents(this);\n this.previousScene = null;\n this.runner = null;\n this.state = 0 /* Initial */;\n this.cached = false;\n // TODO(refactor): seems to be unused\n this.counters = {};\n this.name = description.name;\n this.size = description.size;\n this.resolutionScale = description.resolutionScale;\n this.logger = description.logger;\n this.playback = description.playback;\n this.runnerFactory = description.config;\n this.creationStack = description.stack;\n this.experimentalFeatures = description.experimentalFeatures ?? false;\n decorate(this.runnerFactory, threadable(this.name));\n this.variables = new Variables(this);\n this.shaders = new Shaders(this, description.sharedWebGLContext);\n this.slides = new Slides(this);\n this.previousOnTop = false;\n }\n get firstFrame() {\n return this.cache.current.firstFrame;\n }\n get lastFrame() {\n return this.firstFrame + this.cache.current.duration;\n }\n get onCacheChanged() {\n return this.cache.subscribable;\n }\n get onReloaded() {\n return this.reloaded.subscribable;\n }\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get onThreadChanged() {\n return this.thread.subscribable;\n }\n get onRenderLifecycle() {\n return this.renderLifecycle.subscribable;\n }\n get onReset() {\n return this.afterReset.subscribable;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n get LifecycleEvents() {\n this.logger.warn(\n \"LifecycleEvents is deprecated. Use lifecycleEvents instead.\"\n );\n return this.lifecycleEvents;\n }\n get previous() {\n return this.previousScene;\n }\n getMediaAssets() {\n return [];\n }\n stopAllMedia() {\n }\n /**\n * Update the view.\n *\n * Invoked after each step of the main generator.\n * Can be used for calculating layout.\n *\n * Can modify the state of the view.\n */\n update() {\n }\n async render(context) {\n let iterations = 0;\n do {\n iterations++;\n await DependencyContext.consumePromises();\n context.save();\n context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n await this.draw(context);\n context.restore();\n } while (DependencyContext.hasPromises() && iterations < 10);\n if (iterations > 1) {\n this.logger.debug(`render iterations: ${iterations}`);\n }\n }\n reload({\n config,\n size,\n stack,\n resolutionScale\n } = {}) {\n if (config) {\n this.runnerFactory = config;\n }\n if (size) {\n this.size = size;\n }\n if (resolutionScale) {\n this.resolutionScale = resolutionScale;\n }\n if (stack) {\n this.creationStack = stack;\n }\n this.cached = false;\n this.reloaded.dispatch();\n }\n async recalculate(setFrame) {\n const cached = this.cache.current;\n cached.firstFrame = this.playback.frame;\n cached.lastFrame = cached.firstFrame + cached.duration;\n if (this.isCached()) {\n setFrame(cached.lastFrame);\n this.cache.current = { ...cached };\n return;\n }\n cached.transitionDuration = -1;\n await this.reset();\n while (!this.canTransitionOut()) {\n if (cached.transitionDuration < 0 && this.state === 1 /* AfterTransitionIn */) {\n cached.transitionDuration = this.playback.frame - cached.firstFrame;\n }\n setFrame(this.playback.frame + 1);\n await this.next();\n }\n if (cached.transitionDuration === -1) {\n cached.transitionDuration = 0;\n }\n cached.lastFrame = this.playback.frame;\n cached.duration = cached.lastFrame - cached.firstFrame;\n await new Promise((resolve) => setTimeout(resolve, 0));\n this.cached = true;\n this.cache.current = { ...cached };\n this.recalculated.dispatch();\n }\n async next() {\n if (!this.runner) {\n return;\n }\n let result = this.execute(() => this.runner.next());\n this.update();\n while (result.value) {\n if (isPromisable(result.value)) {\n const value = await result.value.toPromise();\n result = this.execute(() => this.runner.next(value));\n } else if (isPromise(result.value)) {\n const value = await result.value;\n result = this.execute(() => this.runner.next(value));\n } else {\n this.logger.warn({\n message: \"Invalid value yielded by the scene.\",\n object: result.value\n });\n result = this.execute(() => this.runner.next(result.value));\n }\n this.update();\n }\n if (DependencyContext.hasPromises()) {\n const promises = await DependencyContext.consumePromises();\n this.logger.warn({\n message: \"Tried to access an asynchronous property before the node was ready. Make sure to yield the node before accessing the property.\",\n stack: promises[0].stack,\n inspect: promises[0].owner?.key ?? void 0\n });\n }\n if (result.done) {\n this.state = 3 /* Finished */;\n }\n }\n async reset(previousScene = null) {\n this.counters = {};\n this.previousScene = previousScene;\n this.previousOnTop = false;\n this.runner = threads(\n () => this.runnerFactory(this.getView()),\n (thread) => {\n this.thread.current = thread;\n }\n );\n this.state = 1 /* AfterTransitionIn */;\n this.afterReset.dispatch();\n await this.next();\n }\n getSize() {\n return this.size;\n }\n getRealSize() {\n return this.size.mul(this.resolutionScale);\n }\n isAfterTransitionIn() {\n return this.state === 1 /* AfterTransitionIn */;\n }\n canTransitionOut() {\n return this.state === 2 /* CanTransitionOut */ || this.state === 3 /* Finished */;\n }\n isFinished() {\n return this.state === 3 /* Finished */;\n }\n enterInitial() {\n if (this.state === 1 /* AfterTransitionIn */) {\n this.state = 0 /* Initial */;\n } else {\n this.logger.warn(\n `Scene ${this.name} entered initial in an unexpected state: ${this.state}`\n );\n }\n }\n enterAfterTransitionIn() {\n if (this.state === 0 /* Initial */) {\n this.state = 1 /* AfterTransitionIn */;\n } else {\n this.logger.warn(\n `Scene ${this.name} transitioned in an unexpected state: ${this.state}`\n );\n }\n }\n enterCanTransitionOut() {\n if (this.state === 1 /* AfterTransitionIn */ || this.state === 0 /* Initial */) {\n this.state = 2 /* CanTransitionOut */;\n } else {\n this.logger.warn(\n `Scene ${this.name} was marked as finished in an unexpected state: ${this.state}`\n );\n }\n }\n isCached() {\n return this.cached;\n }\n /**\n * Invoke the given callback in the context of this scene.\n *\n * @remarks\n * This method makes sure that the context of this scene is globally available\n * during the execution of the callback.\n *\n * @param callback - The callback to invoke.\n */\n execute(callback) {\n let result;\n startScene(this);\n startPlayback(this.playback);\n try {\n result = callback();\n } finally {\n endPlayback(this.playback);\n endScene(this);\n }\n return result;\n }\n};\n\n// src/scenes/Inspectable.ts\nfunction isInspectable(value) {\n return value && typeof value === \"object\" && \"validateInspection\" in value;\n}\n\n// src/scenes/Random.ts\nvar Random = class _Random {\n constructor(state) {\n this.state = state;\n /**\n * Previously generated Gaussian random number.\n *\n * @remarks\n * This is an optimization.\n * Since {@link gauss} generates a pair of independent Gaussian random\n * numbers, it returns one immediately and stores the other for the next call\n * to {@link gauss}.\n */\n this.nextGauss = null;\n }\n /**\n * @internal\n */\n static createSeed() {\n return Math.floor(Math.random() * 4294967296);\n }\n /**\n * Get the next random float in the given range.\n *\n * @param from - The start of the range.\n * @param to - The end of the range.\n */\n nextFloat(from = 0, to = 1) {\n return map(from, to, this.next());\n }\n /**\n * Get the next random integer in the given range.\n *\n * @param from - The start of the range.\n * @param to - The end of the range. Exclusive.\n */\n nextInt(from = 0, to = 4294967296) {\n let value = Math.floor(map(from, to, this.next()));\n if (value === to) {\n value = from;\n }\n return value;\n }\n /**\n * Get a random float from a gaussian distribution.\n * @param mean - The mean of the distribution.\n * @param stdev - The standard deviation of the distribution.\n */\n gauss(mean = 0, stdev = 1) {\n let z = this.nextGauss;\n this.nextGauss = null;\n if (z === null) {\n const x2pi = this.next() * 2 * Math.PI;\n const g2rad = Math.sqrt(-2 * Math.log(1 - this.next()));\n z = Math.cos(x2pi) * g2rad;\n this.nextGauss = Math.sin(x2pi) * g2rad;\n }\n return mean + z * stdev;\n }\n /**\n * Get an array filled with random floats in the given range.\n *\n * @param size - The size of the array.\n * @param from - The start of the range.\n * @param to - The end of the range.\n */\n floatArray(size, from = 0, to = 1) {\n return range(size).map(() => this.nextFloat(from, to));\n }\n /**\n Get an array filled with random integers in the given range.\n *\n * @param size - The size of the array.\n * @param from - The start of the range.\n * @param to - The end of the range. Exclusive.\n */\n intArray(size, from = 0, to = 4294967296) {\n return range(size).map(() => this.nextInt(from, to));\n }\n /**\n * Create a new independent generator.\n */\n spawn() {\n return new _Random(this.nextInt());\n }\n next() {\n this.state |= 0;\n this.state = this.state + 1831565813 | 0;\n let t = Math.imul(this.state ^ this.state >>> 15, 1 | this.state);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n};\n\n// src/scenes/Threadable.ts\nfunction isThreadable(value) {\n return value && typeof value === \"object\" && \"onThreadChanged\" in value;\n}\n\n// src/transitions/useTransition.ts\nfunction useTransition(current, previous, previousOnTop) {\n if (previous == null) {\n previous = () => {\n };\n }\n const scene = useScene();\n const prior = scene.previous;\n scene.previousOnTop = previousOnTop ?? false;\n const unsubPrev = prior?.lifecycleEvents.onBeforeRender.subscribe(previous);\n const unsubNext = scene.lifecycleEvents.onBeforeRender.subscribe(current);\n scene.enterInitial();\n return () => {\n scene.enterAfterTransitionIn();\n unsubPrev?.();\n unsubNext();\n };\n}\n\n// src/transitions/fadeTransition.ts\nfunction* fadeTransition(duration = 0.6) {\n const progress = createSignal(0);\n const endTransition = useTransition((ctx) => {\n ctx.globalAlpha = progress();\n });\n yield* progress(1, duration);\n endTransition();\n}\n\n// src/transitions/slideTransition.ts\nfunction* slideTransition(direction = 4 /* Top */, duration = 0.6) {\n const size = useScene().getSize();\n const position = size.getOriginOffset(direction).scale(2);\n const previousPosition = Vector2.createSignal();\n const currentPosition = Vector2.createSignal(position);\n const endTransition = useTransition(\n (ctx) => ctx.translate(currentPosition.x(), currentPosition.y()),\n (ctx) => ctx.translate(previousPosition.x(), previousPosition.y())\n );\n yield* all(\n previousPosition(position.scale(-1), duration),\n currentPosition(Vector2.zero, duration)\n );\n endTransition();\n}\n\n// src/transitions/zoomInTransition.ts\nfunction* zoomInTransition(area, duration = 0.6) {\n const scale = useScene().getSize().div(area.size);\n const currentPosition = Vector2.createSignal(area.position);\n const currentScale = Vector2.createSignal(Vector2.one.div(scale));\n const previousPosition = Vector2.createSignal(0);\n const previousScale = Vector2.createSignal(1);\n const alpha = createSignal(0);\n const endTransition = useTransition(\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.1, 0.5, 0, 1, alpha());\n ctx.translate(currentPosition.x(), currentPosition.y());\n ctx.scale(currentScale.x(), currentScale.y());\n },\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.5, 0.9, 1, 0, alpha());\n ctx.translate(previousPosition.x(), previousPosition.y());\n ctx.scale(previousScale.x(), previousScale.y());\n }\n );\n const timing = (v) => easeInOutCubic(v * v);\n yield* all(\n currentPosition(Vector2.zero, duration, timing),\n previousPosition(area.position.flipped.mul(scale), duration, timing),\n currentScale(1, duration, timing),\n previousScale(scale, duration, timing),\n alpha(1, duration, linear)\n );\n endTransition();\n}\n\n// src/transitions/zoomOutTransition.ts\nfunction* zoomOutTransition(area, duration = 0.6) {\n const scale = useScene().getSize().div(area.size);\n const currentPosition = Vector2.createSignal(\n area.position.flipped.mul(scale)\n );\n const currentScale = Vector2.createSignal(scale);\n const previousPosition = Vector2.createSignal(0);\n const previousScale = Vector2.createSignal(1);\n const alpha = createSignal(0);\n const endTransition = useTransition(\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.1, 0.5, 0, 1, alpha());\n ctx.translate(currentPosition.x(), currentPosition.y());\n ctx.scale(currentScale.x(), currentScale.y());\n },\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.5, 0.9, 1, 0, alpha());\n ctx.translate(previousPosition.x(), previousPosition.y());\n ctx.scale(previousScale.x(), previousScale.y());\n }\n );\n const timing = (v) => easeInOutCubic(Math.sqrt(v));\n yield* all(\n currentPosition(Vector2.zero, duration, timing),\n previousPosition(area.position, duration, timing),\n currentScale(1, duration, timing),\n previousScale(Vector2.one.div(scale), duration, timing),\n alpha(1, duration, linear)\n );\n endTransition();\n}\nexport {\n AsyncEventDispatcher,\n BBox,\n BeatSpring,\n BounceSpring,\n Center,\n Color,\n CompoundSignalContext,\n ComputedContext,\n DEFAULT,\n DEG2RAD,\n DefaultPlugin_default as DefaultPlugin,\n DependencyContext,\n DetailedError,\n Direction,\n EPSILON,\n EventDispatcher,\n EventDispatcherBase,\n ExperimentalError,\n FFmpegExporterClient,\n FlagDispatcher,\n GeneratorScene,\n ImageExporter,\n JumpSpring,\n LifecycleEvents,\n LogLevel,\n Logger,\n Matrix2D,\n Origin,\n PlaybackManager,\n PlaybackState,\n PlaybackStatus,\n Player,\n PlopSpring,\n RAD2DEG,\n Random,\n Renderer,\n RendererResult,\n RendererState,\n SceneRenderEvent,\n SceneState,\n Semaphore,\n Shaders,\n SharedWebGLContext,\n SignalContext,\n Slides,\n SmoothSpring,\n Spacing,\n Stage,\n StrikeSpring,\n Subscribable,\n SubscribableValueEvent,\n SwingSpring,\n Thread,\n UNIFORM_DELTA_TIME,\n UNIFORM_DESTINATION_MATRIX,\n UNIFORM_DESTINATION_TEXTURE,\n UNIFORM_FRAME,\n UNIFORM_FRAMERATE,\n UNIFORM_RESOLUTION,\n UNIFORM_SOURCE_MATRIX,\n UNIFORM_SOURCE_TEXTURE,\n UNIFORM_TIME,\n ValueDispatcher,\n Variables,\n Vector2,\n WasmExporter,\n addEditorToProject,\n all,\n any,\n arcLerp,\n beginSlide,\n boolLerp,\n cancel,\n capitalize,\n chain,\n clamp,\n clampRemap,\n cos,\n createComputed,\n createComputedAsync,\n createEaseInBack,\n createEaseInBounce,\n createEaseInElastic,\n createEaseInOutBack,\n createEaseInOutBounce,\n createEaseInOutElastic,\n createEaseOutBack,\n createEaseOutBounce,\n createEaseOutElastic,\n createRef,\n createRefArray,\n createRefMap,\n createSignal,\n createVersionObject,\n debug,\n decorate,\n deepLerp,\n defaultUserProjectSettings,\n delay,\n deprecate,\n easeInBack,\n easeInBounce,\n easeInCirc,\n easeInCubic,\n easeInElastic,\n easeInExpo,\n easeInOutBack,\n easeInOutBounce,\n easeInOutCirc,\n easeInOutCubic,\n easeInOutElastic,\n easeInOutExpo,\n easeInOutQuad,\n easeInOutQuart,\n easeInOutQuint,\n easeInOutSine,\n easeInQuad,\n easeInQuart,\n easeInQuint,\n easeInSine,\n easeOutBack,\n easeOutBounce,\n easeOutCirc,\n easeOutCubic,\n easeOutElastic,\n easeOutExpo,\n easeOutQuad,\n easeOutQuart,\n easeOutQuint,\n easeOutSine,\n endPlayback,\n endScene,\n endThread,\n errorToLog,\n every,\n experimentalFeatures,\n experimentalLog,\n fadeTransition,\n finishScene,\n flipOrigin,\n getContext,\n getFullPreviewSettings,\n getFullRenderingSettings,\n getImageData,\n getTaskName,\n isInspectable,\n isPromisable,\n isPromise,\n isReactive,\n isThreadGenerator,\n isThreadable,\n isType,\n join,\n lazy,\n linear,\n loadAnimation,\n loadImage,\n loop,\n loopFor,\n makePlugin,\n makeProject,\n makeRef,\n makeRefs,\n makeSpring,\n map,\n modify,\n noop,\n originToOffset,\n range,\n remap,\n rotateVector,\n run,\n sequence,\n setTaskName,\n sin,\n slideTransition,\n spawn,\n spring,\n startPlayback,\n startScene,\n startThread,\n textLerp,\n threadable,\n threads,\n transformAngle,\n transformScalar,\n transformVector,\n transformVectorAsPoint,\n tween,\n unwrap,\n useContext,\n useContextAfter,\n useLogger,\n usePlayback,\n useScene,\n useThread,\n useTime,\n useTransition,\n waitFor,\n zoomInTransition,\n zoomOutTransition\n};\n//# sourceMappingURL=index.js.map","// src/internal.ts\nimport { Player, Stage, getFullPreviewSettings } from \"@twick/core\";\nimport { Vector2 } from \"@twick/core\";\nvar stylesNew = `\n.overlay {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\topacity: 0;\n\ttransition: opacity 0.1s;\n\tz-index: 0;\n }\n .canvas {\n\twidth: 100%;\n\tdisplay: block;\n\topacity: 1;\n\ttransition: opacity 0.1s;\n }\n`;\nvar TEMPLATE = `<style>${stylesNew}</style><div class=\"overlay\"></div>`;\nvar ID = \"twick-player\";\nvar TwickPlayer = class extends HTMLElement {\n static get observedAttributes() {\n return [\n \"playing\",\n \"variables\",\n \"looping\",\n \"fps\",\n \"quality\",\n \"width\",\n \"height\",\n \"volume\"\n ];\n }\n get fps() {\n const attr = this.getAttribute(\"fps\");\n return attr ? parseFloat(attr) : this.defaultSettings?.fps ?? 60;\n }\n get quality() {\n const attr = this.getAttribute(\"quality\");\n return attr ? parseFloat(attr) : this.defaultSettings?.resolutionScale ?? 1;\n }\n get width() {\n const attr = this.getAttribute(\"width\");\n return attr ? parseFloat(attr) : this.defaultSettings?.size.width ?? 0;\n }\n get height() {\n const attr = this.getAttribute(\"height\");\n return attr ? parseFloat(attr) : this.defaultSettings?.size.height ?? 0;\n }\n get variables() {\n try {\n const attr = this.getAttribute(\"variables\");\n return attr ? JSON.parse(attr) : {};\n } catch {\n this.project?.logger.warn(`Project variables could not be parsed.`);\n return {};\n }\n }\n root;\n canvas;\n overlay;\n state = \"initial\" /* Initial */;\n project = null;\n player = null;\n defaultSettings;\n abortController = null;\n playing = false;\n stage = new Stage();\n time = 0;\n duration = 0;\n // in frames\n looping = true;\n volume = 1;\n volumeChangeRequested = true;\n constructor() {\n super();\n this.root = this.attachShadow({ mode: \"open\" });\n this.root.innerHTML = TEMPLATE;\n this.overlay = this.root.querySelector(\".overlay\");\n this.canvas = this.stage.finalBuffer;\n this.canvas.classList.add(\"canvas\");\n this.root.prepend(this.canvas);\n this.setState(\"initial\" /* Initial */);\n }\n setProject(project) {\n this.updateProject(project);\n }\n setState(state) {\n this.state = state;\n this.setPlaying(this.playing);\n }\n setPlaying(value) {\n if (this.state === \"ready\" /* Ready */ && value) {\n this.player?.togglePlayback(true);\n this.playing = true;\n } else {\n this.player?.togglePlayback(false);\n this.playing = false;\n }\n }\n async updateProject(project) {\n const playing = this.playing;\n this.setState(\"initial\" /* Initial */);\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.project = project;\n console.log(project);\n this.defaultSettings = getFullPreviewSettings(this.project);\n const player = new Player(this.project);\n player.setVariables(this.variables);\n player.toggleLoop(this.looping);\n this.player?.onRender.unsubscribe(this.render);\n this.player?.onFrameChanged.unsubscribe(this.handleFrameChanged);\n this.player?.togglePlayback(false);\n this.player?.deactivate();\n this.player = player;\n this.updateSettings();\n this.setState(\"ready\" /* Ready */);\n this.dispatchEvent(new CustomEvent(\"playerready\", { detail: this.player }));\n this.setPlaying(playing);\n this.player.onRender.subscribe(this.render);\n this.player.onFrameChanged.subscribe(this.handleFrameChanged);\n }\n attributeChangedCallback(name, _, newValue) {\n switch (name) {\n case \"playing\":\n this.setPlaying(newValue === \"true\");\n break;\n case \"variables\":\n this.player?.setVariables(this.variables);\n this.player?.requestSeek(this.player.playback.frame);\n this.player?.playback.reload();\n break;\n case \"looping\":\n this.looping = newValue === \"true\";\n this.player?.toggleLoop(newValue === \"true\");\n break;\n case \"fps\":\n case \"quality\":\n case \"width\":\n case \"height\":\n this.updateSettings();\n break;\n case \"volume\":\n this.volume = newValue;\n this.volumeChangeRequested = true;\n }\n }\n /**\n * Runs when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.player?.deactivate();\n this.player?.onRender.unsubscribe(this.render);\n this.removeEventListener(\"seekto\", this.handleSeekTo);\n this.removeEventListener(\"volumechange\", this.handleVolumeChange);\n }\n /**\n * Runs when the element is added to the DOM.\n */\n connectedCallback() {\n this.player?.activate();\n this.player?.onRender.subscribe(this.render);\n this.addEventListener(\"seekto\", this.handleSeekTo);\n this.addEventListener(\"volumechange\", this.handleVolumeChange);\n }\n /**\n * Triggered by the timeline.\n */\n handleSeekTo = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.time = e.detail;\n this.player?.requestSeek(e.detail * this.player.playback.fps);\n this.volumeChangeRequested = true;\n };\n handleVolumeChange = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.volume = e.detail;\n this.player?.playback.currentScene.adjustVolume(this.volume);\n };\n /**\n * Triggered by the player.\n */\n handleFrameChanged = (frame) => {\n if (!this.project || !this.player) {\n return;\n }\n this.time = frame / this.player.playback.fps;\n if (this.volumeChangeRequested || frame === 0) {\n this.player?.playback.currentScene.adjustVolume(this.volume);\n this.volumeChangeRequested = false;\n }\n };\n /**\n * Called on every frame.\n */\n render = async () => {\n if (this.player && this.project) {\n await this.stage.render(\n this.player.playback.currentScene,\n this.player.playback.previousScene\n );\n this.dispatchEvent(new CustomEvent(\"timeupdate\", { detail: this.time }));\n const durationInFrames = this.player.playback.duration;\n if (durationInFrames === this.duration) {\n return;\n }\n this.duration = durationInFrames;\n const durationInSeconds = durationInFrames / this.player.playback.fps;\n this.dispatchEvent(\n new CustomEvent(\"duration\", { detail: durationInSeconds })\n );\n }\n };\n updateSettings() {\n if (!this.defaultSettings) {\n return;\n }\n const settings = {\n ...this.defaultSettings,\n size: new Vector2(this.width, this.height),\n resolutionScale: this.quality,\n fps: this.fps\n };\n this.stage.configure(settings);\n this.player?.configure(settings);\n }\n};\nif (!customElements.get(ID)) {\n customElements.define(ID, TwickPlayer);\n}\n//# sourceMappingURL=internal-H4HUGGQY.js.map"],"names":["num","hue","definition","k","c","linearize","gamma","fn","abs","rgb","sum","val","e","f","M","parseHwb","p","d0","vn","n","lab","lch","u_fn","v_fn","un","f2","C1","b","b2","modeHsl","modeHsv","α","β","transfer","modeA98","modeCubehelix","modeDlab","modeDlch","modeHsi","modeHwb","modeItp","modeJab","modeJch","modeLab","modeLab65","modeLch","modeLch65","modeLchuv","modeLrgb","modeLuv","modeOklab","modeOklch","modeP3","modeProphoto","modeRec2020","modeRgb","modeXyb","modeXyz50","modeXyz65","modeYiq","_DependencyContext","_Vector2","_Matrix2D"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131]}
|
|
1
|
+
{"version":3,"file":"internal-H4HUGGQY-DIx_F8CA.js","sources":["../../../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/index.js","../../../node_modules/.pnpm/@twick+core@0.15.1/node_modules/@twick/core/dist/index.js","../../../node_modules/.pnpm/@twick+player-react@0.15.1/node_modules/@twick/player-react/dist/internal-H4HUGGQY.js"],"sourcesContent":["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–16. \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ón Matemática 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ΔE_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° \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 θ = (26 / 180) * Math.PI;\nexport const cosθ = Math.cos(θ);\nexport const sinθ = Math.sin(θ);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n","import { kCH, kE, sinθ, cosθ, θ, 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 - θ);\n\tlet f = G * Math.sin((h / 180) * Math.PI - θ);\n\tres.a = e * cosθ - (f / 0.83) * sinθ;\n\tres.b = e * sinθ + (f / 0.83) * cosθ;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n","import { kCH, kE, sinθ, cosθ, θ, 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θ + b * sinθ;\n\tlet f = 0.83 * (b * cosθ - a * sinθ);\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) + θ) / 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn 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örn 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örn 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 α = 1.09929682680944;\nconst β = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > β) {\n\t\treturn (Math.sign(v) || 1) * (α * Math.pow(abs, 0.45) - (α - 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 α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < β * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + α - 1) / α, 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ón Matemática 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","// 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","// src/events/EventDispatcherBase.ts\nvar EventDispatcherBase = class {\n constructor() {\n this.subscribable = new Subscribable(this);\n this.subscribers = /* @__PURE__ */ new Set();\n }\n /**\n * {@inheritDoc Subscribable.subscribe}\n */\n subscribe(handler) {\n this.subscribers.add(handler);\n return () => this.unsubscribe(handler);\n }\n /**\n * {@inheritDoc Subscribable.unsubscribe}\n */\n unsubscribe(handler) {\n this.subscribers.delete(handler);\n }\n /**\n * Unsubscribe all subscribers from the event.\n */\n clear() {\n this.subscribers.clear();\n }\n notifySubscribers(value) {\n return [...this.subscribers].map((handler) => handler(value));\n }\n};\nvar Subscribable = class {\n constructor(dispatcher) {\n this.dispatcher = dispatcher;\n }\n /**\n * Subscribe to the event.\n *\n * @param handler - The handler to invoke when the event occurs.\n *\n * @returns A callback function that cancels the subscription.\n */\n subscribe(handler) {\n return this.dispatcher.subscribe(handler);\n }\n /**\n * Unsubscribe from the event.\n *\n * @param handler - The handler to unsubscribe.\n */\n unsubscribe(handler) {\n this.dispatcher.unsubscribe(handler);\n }\n};\n\n// src/events/AsyncEventDispatcher.ts\nvar AsyncEventDispatcher = class extends EventDispatcherBase {\n async dispatch(value) {\n await Promise.all(this.notifySubscribers(value));\n }\n};\n\n// src/events/EventDispatcher.ts\nvar EventDispatcher = class extends EventDispatcherBase {\n dispatch(value) {\n this.notifySubscribers(value);\n }\n};\n\n// src/events/FlagDispatcher.ts\nvar FlagDispatcher = class extends EventDispatcherBase {\n constructor() {\n super(...arguments);\n this.value = false;\n }\n /**\n * Notify all current and future subscribers.\n */\n raise() {\n if (!this.value) {\n this.value = true;\n this.notifySubscribers();\n }\n }\n /**\n * Stop notifying future subscribers.\n */\n reset() {\n this.value = false;\n }\n /**\n * Are subscribers being notified?\n */\n isRaised() {\n return this.value;\n }\n subscribe(handler) {\n const unsubscribe = super.subscribe(handler);\n if (this.value) {\n handler();\n }\n return unsubscribe;\n }\n};\n\n// src/events/ValueDispatcher.ts\nvar ValueDispatcher = class extends EventDispatcherBase {\n /**\n * @param value - The initial value.\n */\n constructor(value) {\n super();\n this.value = value;\n this.subscribable = new SubscribableValueEvent(this);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.current}\n */\n get current() {\n return this.value;\n }\n /**\n * Set the current value of this dispatcher.\n *\n * @remarks\n * Setting the value will immediately notify all subscribers.\n *\n * @param value - The new value.\n */\n set current(value) {\n this.value = value;\n this.notifySubscribers(value);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.subscribe}\n */\n subscribe(handler, dispatchImmediately = true) {\n const unsubscribe = super.subscribe(handler);\n if (dispatchImmediately) {\n handler(this.value);\n }\n return unsubscribe;\n }\n};\nvar SubscribableValueEvent = class extends Subscribable {\n /**\n * Get the most recent value of this dispatcher.\n */\n get current() {\n return this.dispatcher.current;\n }\n /**\n * Subscribe to the event.\n *\n * Subscribing will immediately invoke the handler with the most recent value.\n *\n * @param handler - The handler to invoke when the event occurs.\n * @param dispatchImmediately - Whether the handler should be immediately\n * invoked with the most recent value.\n *\n * @returns Callback function that cancels the subscription.\n */\n subscribe(handler, dispatchImmediately = true) {\n return this.dispatcher.subscribe(\n handler,\n dispatchImmediately\n );\n }\n};\n\n// src/app/Logger.ts\nvar LogLevel = /* @__PURE__ */ ((LogLevel2) => {\n LogLevel2[\"Error\"] = \"error\";\n LogLevel2[\"Warn\"] = \"warn\";\n LogLevel2[\"Info\"] = \"info\";\n LogLevel2[\"Http\"] = \"http\";\n LogLevel2[\"Verbose\"] = \"verbose\";\n LogLevel2[\"Debug\"] = \"debug\";\n LogLevel2[\"Silly\"] = \"silly\";\n return LogLevel2;\n})(LogLevel || {});\nvar Logger = class {\n constructor() {\n this.logged = new EventDispatcher();\n this.history = [];\n this.profilers = {};\n }\n /**\n * Triggered when a new message is logged.\n */\n get onLogged() {\n return this.logged.subscribable;\n }\n log(payload) {\n this.logged.dispatch(payload);\n this.history.push(payload);\n }\n error(payload) {\n console.error(\n \"error from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"error\" /* Error */, payload);\n if (window.browserError) {\n window.browserError(\n typeof payload === \"string\" ? payload : payload.message\n );\n }\n }\n warn(payload) {\n console.warn(\n \"warning from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"warn\" /* Warn */, payload);\n }\n info(payload) {\n console.info(\n \"info from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"info\" /* Info */, payload);\n }\n http(payload) {\n console.log(\n \"http log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"http\" /* Http */, payload);\n }\n verbose(payload) {\n console.log(\n \"verbose log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"verbose\" /* Verbose */, payload);\n }\n debug(payload) {\n this.logLevel(\"debug\" /* Debug */, payload);\n }\n silly(payload) {\n console.log(\n \"silly log from browser process:\",\n typeof payload === \"string\" ? payload : payload.message\n );\n this.logLevel(\"silly\" /* Silly */, payload);\n }\n logLevel(level, payload) {\n const result = typeof payload === \"string\" ? { message: payload } : payload;\n result.level = level;\n this.log(result);\n }\n profile(id, payload) {\n const time = performance.now();\n if (this.profilers[id]) {\n const timeEnd = this.profilers[id];\n delete this.profilers[id];\n const result = payload ?? { message: id };\n result.level ?? (result.level = \"debug\" /* Debug */);\n result.durationMs = time - timeEnd;\n this.log(result);\n return;\n }\n this.profilers[id] = time;\n }\n};\n\n// src/exporter/download-videos.ts\nasync function download(assets) {\n const videoRanges = /* @__PURE__ */ new Map();\n assets.forEach((frameAssets) => {\n frameAssets.forEach((asset) => {\n if (asset.type !== \"video\" || asset.decoder !== \"ffmpeg\") {\n return;\n }\n if (videoRanges.has(asset.src)) {\n const range2 = videoRanges.get(asset.src);\n range2.start = Math.min(range2.start, asset.currentTime);\n range2.end = Math.max(range2.end, asset.currentTime);\n return;\n }\n videoRanges.set(asset.src, {\n start: asset.currentTime,\n end: asset.currentTime\n });\n });\n });\n const videoDurations = Array.from(videoRanges.entries()).map(\n ([src, { start, end }]) => ({\n src,\n startTime: start,\n endTime: end\n })\n );\n videoDurations.forEach(({ src, startTime, endTime }) => {\n console.log(`downloading ${src} from ${startTime}s to ${endTime}s`);\n });\n const response = await fetch(\n \"/twick-ffmpeg-decoder/download-video-chunks\",\n {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(videoDurations)\n }\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const result = await response.json();\n if (!result.success) {\n throw new Error(`Error downloading video chunks: ${result.error}`);\n }\n console.log(\"finished downloading\");\n}\n\n// src/exporter/FFmpegExporter.ts\nvar _FFmpegExporterClient = class _FFmpegExporterClient {\n static async create(_, settings) {\n return new _FFmpegExporterClient(settings);\n }\n constructor(settings) {\n if (settings.exporter.name !== _FFmpegExporterClient.id) {\n throw new Error(\"Invalid exporter\");\n }\n this.settings = settings;\n this.exporterOptions = settings.exporter.options;\n }\n async start() {\n await this.invoke(\"start\", this.settings);\n }\n async handleFrame(canvas) {\n const blob = await new Promise(\n (resolve) => canvas.toBlob(resolve, \"image/png\")\n );\n if (!blob) {\n throw Error(\"Failed to convert canvas to Blob.\");\n }\n const dataUrl = await this.blobToDataUrl(blob);\n await this.invoke(\"handleFrame\", {\n data: dataUrl\n });\n }\n async blobToDataUrl(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n async stop(result) {\n await this.invoke(\"end\", result);\n await fetch(\"/twick-ffmpeg-decoder/finished\", {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({})\n });\n }\n async kill() {\n await this.invoke(\"kill\", {});\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n async generateAudio(assets, startFrame, endFrame) {\n await fetch(\"/audio-processing/generate-audio\", {\n method: \"POST\",\n body: JSON.stringify({\n tempDir: `twick-${this.settings.name}-${this.settings.hiddenFolderId}`,\n assets,\n startFrame,\n endFrame,\n fps: this.settings.fps\n })\n });\n }\n async mergeMedia() {\n const outputFilename = this.settings.name;\n const tempDir = `twick-${this.settings.name}-${this.settings.hiddenFolderId}`;\n const format = this.exporterOptions.format;\n await fetch(\"/audio-processing/merge-media\", {\n method: \"POST\",\n body: JSON.stringify({\n outputFilename,\n tempDir,\n format\n })\n });\n }\n /**\n * Remotely invoke a method on the server and wait for a response.\n *\n * @param method - The method name to execute on the server.\n * @param data - The data that will be passed as an argument to the method.\n * Should be serializable.\n */\n invoke(method, data) {\n if (import.meta.hot) {\n return new Promise((resolve, reject) => {\n const handle = (response) => {\n if (response.method !== method) {\n return;\n }\n _FFmpegExporterClient.response.unsubscribe(handle);\n if (response.status === \"success\") {\n resolve(response.data);\n } else {\n reject({\n message: `An error occurred while exporting the video: ${response.message}`,\n remarks: `Method: ${method}<br>Server error: ${response.message}`,\n object: data\n });\n }\n };\n _FFmpegExporterClient.response.subscribe(handle);\n import.meta.hot.send(\"twick:ffmpeg-exporter\", { method, data });\n });\n } else {\n throw new Error(\"FFmpegExporter can only be used locally.\");\n }\n }\n};\n_FFmpegExporterClient.id = \"@twick/core/ffmpeg\";\n_FFmpegExporterClient.displayName = \"Video (FFmpeg)\";\n_FFmpegExporterClient.response = new EventDispatcher();\n(() => {\n if (import.meta.hot) {\n import.meta.hot.on(\n `twick:ffmpeg-exporter-ack`,\n (response) => _FFmpegExporterClient.response.dispatch(response)\n );\n }\n})();\nvar FFmpegExporterClient = _FFmpegExporterClient;\n\n// src/tweening/helpers.ts\nfunction map(from, to, value) {\n return from + (to - from) * value;\n}\nfunction remap(fromIn, toIn, fromOut, toOut, value) {\n return fromOut + (value - fromIn) * (toOut - fromOut) / (toIn - fromIn);\n}\nfunction clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n}\nfunction clampRemap(fromIn, toIn, fromOut, toOut, value) {\n const remappedValue = remap(fromIn, toIn, fromOut, toOut, value);\n if (fromOut > toOut) [fromOut, toOut] = [toOut, fromOut];\n return clamp(fromOut, toOut, remappedValue);\n}\n\n// src/utils/useScene.ts\nvar SceneStack = [];\nfunction useScene() {\n const scene = SceneStack.at(-1);\n if (!scene) {\n throw new Error(\"The scene is not available in the current context.\");\n }\n return scene;\n}\nfunction startScene(scene) {\n SceneStack.push(scene);\n}\nfunction endScene(scene) {\n if (SceneStack.pop() !== scene) {\n throw new Error(\"startScene/endScene were called out of order.\");\n }\n}\nfunction useLogger() {\n return SceneStack.at(-1)?.logger ?? console;\n}\nfunction finishScene() {\n useScene().enterCanTransitionOut();\n}\n\n// src/utils/DetailedError.ts\nvar DetailedError = class extends Error {\n constructor(props, remarks) {\n if (typeof props === \"string\") {\n super(props);\n this.remarks = remarks;\n } else {\n super(props.message);\n this.remarks = props.remarks;\n this.object = props.object;\n this.durationMs = props.durationMs;\n this.inspect = props.inspect;\n }\n }\n};\n\n// src/utils/useThread.ts\nvar ThreadStack = [];\nfunction useThread() {\n const thread = ThreadStack.at(-1);\n if (!thread) {\n throw new DetailedError(\n \"The thread is not available in the current context.\",\n // language=markdown\n `\\`useThread()\\` can only be called from within generator functions.\n It's not available during rendering.`\n );\n }\n return thread;\n}\nfunction startThread(thread) {\n ThreadStack.push(thread);\n}\nfunction endThread(thread) {\n if (ThreadStack.pop() !== thread) {\n throw new Error(\"startThread/endThread was called out of order.\");\n }\n}\n\n// src/utils/beginSlide.ts\nfunction* beginSlide(name) {\n const { slides } = useScene();\n const thread = useThread();\n slides.register(name, thread.fixed);\n yield;\n while (slides.shouldWait(name)) {\n yield;\n }\n}\n\n// src/utils/capitalize.ts\nfunction capitalize(value) {\n return value[0].toUpperCase() + value.slice(1);\n}\n\n// src/utils/createRef.ts\nfunction createRef() {\n let value;\n const ref = (newValue) => {\n if (newValue !== void 0) {\n value = newValue;\n } else {\n return value;\n }\n };\n return ref;\n}\nfunction makeRef(object, key) {\n return (newValue) => {\n object[key] = newValue;\n };\n}\nfunction makeRefs() {\n return {};\n}\n\n// src/utils/createRefArray.ts\nfunction createRefArray() {\n const target = function() {\n };\n target.array = [];\n return new Proxy(target, Handler);\n}\nvar Handler = {\n apply(target, _, argArray) {\n if (argArray.length === 0) {\n return target.array[0];\n }\n target.array.push(...argArray);\n },\n get(target, property, receiver) {\n const value = Reflect.get(target.array, property, receiver);\n if (typeof value === \"function\") {\n return value.bind(target.array);\n }\n return value;\n },\n set(target, property, value, receiver) {\n return Reflect.set(target.array, property, value, receiver);\n }\n};\n\n// src/utils/createRefMap.ts\nfunction createRefMap() {\n const group = /* @__PURE__ */ new Map();\n group.entries();\n return new Proxy(group, Handler2);\n}\nvar Handler2 = {\n get(target, property) {\n if (Reflect.has(target, property)) {\n return Reflect.get(target, property);\n }\n if (property === \"mapRefs\") {\n return function(callback) {\n const result = [];\n for (const value of target.values()) {\n result.push(callback(value(), result.length));\n }\n return result;\n };\n }\n if (typeof property === \"string\") {\n let value = target.get(property);\n if (!value) {\n value = createRef();\n target.set(property, value);\n }\n return value;\n }\n },\n has(target, property) {\n if (Reflect.has(target, property)) {\n return true;\n }\n if (typeof property === \"string\") {\n return target.has(property);\n }\n return false;\n }\n};\n\n// src/utils/debug.ts\nfunction stringify(value) {\n switch (typeof value) {\n case \"string\":\n return value;\n case \"undefined\":\n return \"undefined\";\n default:\n if (Number.isNaN(value)) {\n return \"NaN\";\n }\n return JSON.stringify(value);\n }\n}\nfunction debug(payload) {\n const result = { message: stringify(payload) };\n if (payload && typeof payload === \"object\") {\n result.object = payload;\n }\n useLogger().debug(result);\n}\n\n// src/utils/deprecate.ts\nfunction deprecate(fn, message, remarks) {\n return function(...args) {\n useLogger().warn({ message, remarks, stack: new Error().stack });\n return fn.apply(this, args);\n };\n}\n\n// src/utils/errorToLog.ts\nfunction errorToLog(error) {\n return {\n message: error.message,\n stack: error.stack,\n remarks: error.remarks\n };\n}\n\n// src/utils/ExperimentalError.ts\nvar experimentalFeatures = `\nThis feature requires enabling the \\`experimentalFeatures\\` flag in your project\nconfiguration:\n\n\\`\\`\\`ts\nexport default makeProject({\n experimentalFeatures: true,\n // ...\n});\n\\`\\`\\`\n\n[Learn more](https://motioncanvas.io/docs/experimental) about experimental\nfeatures.\n`;\nvar ExperimentalError = class extends DetailedError {\n constructor(props, remarks) {\n if (typeof props === \"string\") {\n super({\n message: props,\n remarks: (remarks ?? \"\") + experimentalFeatures\n });\n } else {\n super({\n ...props,\n remarks: (props.remarks ?? \"\") + experimentalFeatures\n });\n }\n }\n};\n\n// src/utils/experimentalLog.ts\nfunction experimentalLog(message, remarks) {\n return {\n level: \"error\" /* Error */,\n message,\n remarks: (remarks ?? \"\") + experimentalFeatures\n };\n}\n\n// src/utils/getContext.ts\nfunction getContext(options, canvas = document.createElement(\"canvas\")) {\n const context = canvas.getContext(\"2d\", options);\n if (!context) {\n throw new Error(\"Could not create a 2D context.\");\n }\n return context;\n}\n\n// src/utils/math.ts\nvar RAD2DEG = 180 / Math.PI;\nvar DEG2RAD = Math.PI / 180;\n\n// src/utils/range.ts\nfunction range(first, second, step) {\n let from = 0;\n let to = first;\n if (second !== void 0) {\n from = first;\n to = second;\n }\n step = step === void 0 ? from < to ? 1 : -1 : step;\n const array = [];\n let length = Math.max(Math.ceil((to - from) / step), 0);\n let index = 0;\n while (length--) {\n array[index++] = from;\n from += step;\n }\n return array;\n}\n\n// src/utils/Semaphore.ts\nvar Semaphore = class {\n constructor() {\n this.resolveCurrent = null;\n this.current = null;\n }\n async acquire() {\n while (this.current) {\n await this.current;\n }\n this.current = new Promise((resolve) => {\n this.resolveCurrent = resolve;\n });\n }\n release() {\n this.current = null;\n this.resolveCurrent?.();\n this.resolveCurrent = null;\n }\n};\n\n// src/utils/useContext.ts\nfunction useContext(callback) {\n return useScene().lifecycleEvents.onBeginRender.subscribe(callback);\n}\nfunction useContextAfter(callback) {\n return useScene().lifecycleEvents.onFinishRender.subscribe(callback);\n}\n\n// src/utils/usePlayback.ts\nvar PlaybackStack = [];\nfunction usePlayback() {\n const playback = PlaybackStack.at(-1);\n if (!playback) {\n throw new Error(\"The playback is not available in the current context.\");\n }\n return playback;\n}\nfunction startPlayback(playback) {\n PlaybackStack.push(playback);\n}\nfunction endPlayback(playback) {\n if (PlaybackStack.pop() !== playback) {\n throw new Error(\"startPlayback/endPlayback were called out of order.\");\n }\n}\n\n// src/utils/useTime.ts\nfunction useTime() {\n return useThread().time();\n}\n\n// src/tweening/interpolationFunctions.ts\nfunction textLerp(from, to, value) {\n if (to.length >= from.length) {\n const current = Math.floor(to.length * value);\n const currentLength = Math.floor(map(from.length - 1, to.length, value));\n let text = \"\";\n for (let i = 0; i < to.length; i++) {\n if (i < current) {\n text += to[i];\n } else if (from[i] || i <= currentLength) {\n text += from[i] ?? to[i];\n }\n }\n return text;\n } else {\n const current = Math.round(from.length * (1 - value));\n const currentLength = Math.floor(map(from.length + 1, to.length, value));\n const text = [];\n for (let i = from.length - 1; i >= 0; i--) {\n if (i < current) {\n text.unshift(from[i]);\n } else if (to[i] || i < currentLength) {\n text.unshift(to[i] ?? from[i]);\n }\n }\n return text.join(\"\");\n }\n}\nfunction deepLerp(from, to, value, suppressWarnings = false) {\n if (value === 0) return from;\n if (value === 1) return to;\n if (from == null || to == null) {\n if (!suppressWarnings) {\n useLogger().warn(\n `Attempting to lerp ${from} -> ${to} may result in unexpected behavior.`\n );\n }\n return void 0;\n }\n if (typeof from === \"number\" && typeof to === \"number\") {\n return map(from, to, value);\n }\n if (typeof from === \"string\" && typeof to === \"string\") {\n return textLerp(from, to, value);\n }\n if (typeof from === \"boolean\" && typeof to === \"boolean\") {\n return value < 0.5 ? from : to;\n }\n if (\"lerp\" in from) {\n return from.lerp(to, value);\n }\n if (from && to && typeof from === \"object\" && typeof to === \"object\") {\n if (Array.isArray(from) && Array.isArray(to)) {\n if (from.length === to.length) {\n return from.map((f, i) => deepLerp(f, to[i], value));\n }\n } else {\n let toObject = false;\n if (!(from instanceof Map) && !(to instanceof Map)) {\n toObject = true;\n from = new Map(Object.entries(from));\n to = new Map(Object.entries(to));\n }\n if (from instanceof Map && to instanceof Map) {\n const result = /* @__PURE__ */ new Map();\n for (const key of /* @__PURE__ */ new Set([...from.keys(), ...to.keys()])) {\n const inter = deepLerp(from.get(key), to.get(key), value, true);\n if (inter !== void 0) result.set(key, inter);\n }\n return toObject ? Object.fromEntries(result) : result;\n }\n }\n }\n return to;\n}\nfunction boolLerp(from, to, value) {\n return value < 0.5 ? from : to;\n}\nfunction arcLerp(value, reverse, ratio) {\n let flip = reverse;\n if (ratio > 1) {\n ratio = 1 / ratio;\n } else {\n flip = !flip;\n }\n const normalized = flip ? Math.acos(clamp(-1, 1, 1 - value)) : Math.asin(value);\n const radians = map(normalized, map(0, Math.PI / 2, value), ratio);\n let xValue = Math.sin(radians);\n let yValue = 1 - Math.cos(radians);\n if (reverse) {\n [xValue, yValue] = [yValue, xValue];\n }\n return { x: xValue, y: yValue };\n}\n\n// src/decorators/decorate.ts\nfunction decorate(fn, ...decorators) {\n const target = { [fn.name]: fn };\n const descriptor = Object.getOwnPropertyDescriptor(target, fn.name);\n if (descriptor) {\n for (let i = decorators.length - 1; i >= 0; i--) {\n decorators[i](target, fn.name, descriptor);\n }\n }\n}\n\n// src/decorators/lazy.ts\nvar UNINITIALIZED = /* @__PURE__ */ Symbol.for(\"@twick/core/decorators/UNINITIALIZED\");\nfunction lazy(factory) {\n return (target, propertyKey) => {\n let value = UNINITIALIZED;\n Object.defineProperty(target, propertyKey, {\n get() {\n if (value === UNINITIALIZED) {\n value = factory.call(this);\n }\n return value;\n }\n });\n };\n}\n\n// src/decorators/threadable.ts\nfunction threadable(customName) {\n return function(_, propertyKey, descriptor) {\n const value = descriptor?.value;\n if (typeof value === \"function\" && value.prototype) {\n const prototype = value.prototype;\n try {\n const nameDescriptor = Object.getOwnPropertyDescriptor(\n prototype,\n \"name\"\n );\n if (!nameDescriptor || nameDescriptor.writable) {\n prototype.name = customName ?? propertyKey;\n }\n } catch {\n }\n prototype.threadable = true;\n }\n };\n}\n\n// src/tweening/spring.ts\ndecorate(spring, threadable());\nfunction* spring(spring2, from, to, settleToleranceOrOnProgress, onProgressOrOnEnd, onEnd) {\n const settleTolerance = typeof settleToleranceOrOnProgress === \"number\" ? settleToleranceOrOnProgress : 1e-3;\n onEnd = typeof settleToleranceOrOnProgress === \"number\" ? onEnd : onProgressOrOnEnd;\n const onProgress = (value, time) => {\n if (typeof settleToleranceOrOnProgress === \"function\") {\n settleToleranceOrOnProgress(value, time);\n } else if (typeof onProgressOrOnEnd === \"function\") {\n onProgressOrOnEnd(value, time);\n }\n };\n spring2 = spring2 ?? {\n mass: 0.05,\n stiffness: 10,\n damping: 0.5\n };\n if (spring2.mass <= 0) {\n useLogger().error(new Error(\"Spring mass must be greater than 0.\"));\n return;\n }\n if (spring2.stiffness < 0) {\n useLogger().error(\n new Error(\"Spring stiffness must be greater or equal to 0.\")\n );\n return;\n }\n if (spring2.damping < 0) {\n useLogger().error(\n new Error(\"Spring damping must be greater or equal to 0.\")\n );\n return;\n }\n const thread = useThread();\n let position = from;\n let velocity = spring2.initialVelocity ?? 0;\n const update = (dt) => {\n if (spring2 === null) {\n return;\n }\n const positionDelta = position - to;\n const force = -spring2.stiffness * positionDelta - spring2.damping * velocity;\n velocity += force / spring2.mass * dt;\n position += velocity * dt;\n };\n const simulationFrames = 120;\n const timeStep = 1 / simulationFrames;\n onProgress(from, 0);\n const startTime = thread.time();\n let simulationTime = startTime;\n let settled = false;\n while (!settled) {\n while (simulationTime < thread.fixed) {\n const difference = thread.fixed - simulationTime;\n if (timeStep > difference) {\n update(difference);\n simulationTime = thread.fixed;\n } else {\n update(timeStep);\n simulationTime += timeStep;\n }\n if (Math.abs(to - position) < settleTolerance && Math.abs(velocity) < settleTolerance) {\n thread.time(simulationTime);\n settled = true;\n break;\n }\n }\n if (!settled) {\n onProgress(position, thread.fixed - startTime);\n yield;\n }\n }\n onProgress(to, thread.fixed - startTime);\n onEnd?.(to, thread.fixed - startTime);\n}\nfunction makeSpring(mass, stiffness, damping, initialVelocity) {\n return {\n mass,\n stiffness,\n damping,\n initialVelocity\n };\n}\nvar BeatSpring = makeSpring(0.13, 5.7, 1.2, 10);\nvar PlopSpring = makeSpring(0.2, 20, 0.68, 0);\nvar BounceSpring = makeSpring(0.08, 4.75, 0.05, 0);\nvar SwingSpring = makeSpring(0.39, 19.85, 2.82, 0);\nvar JumpSpring = makeSpring(0.04, 10, 0.7, 8);\nvar StrikeSpring = makeSpring(0.03, 20, 0.9, 4.8);\nvar SmoothSpring = makeSpring(0.16, 15.35, 1.88, 0);\n\n// src/tweening/timingFunctions.ts\nfunction sin(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.sin(value));\n}\nfunction easeInSine(value, from = 0, to = 1) {\n value = 1 - Math.cos(value * Math.PI / 2);\n return map(from, to, value);\n}\nfunction easeOutSine(value, from = 0, to = 1) {\n value = Math.sin(value * Math.PI / 2);\n return map(from, to, value);\n}\nfunction easeInOutSine(value, from = 0, to = 1) {\n value = -(Math.cos(Math.PI * value) - 1) / 2;\n return map(from, to, value);\n}\nfunction easeInQuad(value, from = 0, to = 1) {\n value = value * value;\n return map(from, to, value);\n}\nfunction easeOutQuad(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 2);\n return map(from, to, value);\n}\nfunction easeInOutQuad(value, from = 0, to = 1) {\n value = value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n return map(from, to, value);\n}\nfunction easeInCubic(value, from = 0, to = 1) {\n value = value * value * value;\n return map(from, to, value);\n}\nfunction easeOutCubic(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 3);\n return map(from, to, value);\n}\nfunction easeInOutCubic(value, from = 0, to = 1) {\n value = value < 0.5 ? 4 * value * value * value : 1 - Math.pow(-2 * value + 2, 3) / 2;\n return map(from, to, value);\n}\nfunction easeInQuart(value, from = 0, to = 1) {\n value = value * value * value * value;\n return map(from, to, value);\n}\nfunction easeOutQuart(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 4);\n return map(from, to, value);\n}\nfunction easeInOutQuart(value, from = 0, to = 1) {\n value = value < 0.5 ? 8 * value * value * value * value : 1 - Math.pow(-2 * value + 2, 4) / 2;\n return map(from, to, value);\n}\nfunction easeInQuint(value, from = 0, to = 1) {\n value = value * value * value * value * value;\n return map(from, to, value);\n}\nfunction easeOutQuint(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 5);\n return map(from, to, value);\n}\nfunction easeInOutQuint(value, from = 0, to = 1) {\n value = value < 0.5 ? 16 * value * value * value * value * value : 1 - Math.pow(-2 * value + 2, 5) / 2;\n return map(from, to, value);\n}\nfunction easeInExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : Math.pow(2, 10 * value - 10);\n return map(from, to, value);\n}\nfunction easeOutExpo(value, from = 0, to = 1) {\n value = value === 1 ? 1 : 1 - Math.pow(2, -10 * value);\n return map(from, to, value);\n}\nfunction easeInOutExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : value === 1 ? 1 : value < 0.5 ? Math.pow(2, 20 * value - 10) / 2 : (2 - Math.pow(2, -20 * value + 10)) / 2;\n return map(from, to, value);\n}\nfunction easeInCirc(value, from = 0, to = 1) {\n value = 1 - Math.sqrt(1 - Math.pow(value, 2));\n return map(from, to, value);\n}\nfunction easeOutCirc(value, from = 0, to = 1) {\n value = Math.sqrt(1 - Math.pow(value - 1, 2));\n return map(from, to, value);\n}\nfunction easeInOutCirc(value, from = 0, to = 1) {\n value = value < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * value, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * value + 2, 2)) + 1) / 2;\n return map(from, to, value);\n}\nfunction createEaseInBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = (s + 1) * value * value * value - s * value * value;\n return map(from, to, value);\n };\n}\nfunction createEaseOutBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = 1 + (s + 1) * Math.pow(value - 1, 3) + s * Math.pow(value - 1, 2);\n return map(from, to, value);\n };\n}\nfunction createEaseInOutBack(s = 1.70158, v = 1.525) {\n return (value, from = 0, to = 1) => {\n value = value < 0.5 ? Math.pow(2 * value, 2) * ((s * v + 1) * 2 * value - s * v) / 2 : (Math.pow(2 * value - 2, 2) * ((s * v + 1) * (value * 2 - 2) + s * v) + 2) / 2;\n return map(from, to, value);\n };\n}\nfunction createEaseInElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : -Math.pow(2, 10 * value - 10) * Math.sin((value * 10 - 10.75) * s);\n return map(from, to, value);\n };\n}\nfunction createEaseOutElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : Math.pow(2, -10 * value) * Math.sin((value * 10 - 0.75) * s) + 1;\n return map(from, to, value);\n };\n}\nfunction createEaseInOutElastic(s = 1.39626) {\n return (value, from = 0, to = 1) => {\n value = value === 0 ? 0 : value === 1 ? 1 : value < 0.5 ? -(Math.pow(2, 20 * value - 10) * Math.sin((20 * value - 11.125) * s)) / 2 : Math.pow(2, -20 * value + 10) * Math.sin((20 * value - 11.125) * s) / 2 + 1;\n return map(from, to, value);\n };\n}\nfunction createEaseInBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce2 = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return 1 - easeOutBounce2(1 - value, from, to);\n };\n}\nfunction createEaseOutBounce(n = 7.5625, d = 2.75) {\n return (value, from = 0, to = 1) => {\n if (value < 1 / d) {\n value = n * value * value;\n } else if (value < 2 / d) {\n value = n * (value -= 1.505 / d) * value + 0.75;\n } else if (value < 2.5 / d) {\n value = n * (value -= 2.25 / d) * value + 0.9375;\n } else {\n value = n * (value -= 2.625 / d) * value + 0.984375;\n }\n return map(from, to, value);\n };\n}\nfunction createEaseInOutBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce2 = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return value < 0.5 ? (1 - easeOutBounce2(1 - 2 * value, from, to)) / 2 : (1 + easeOutBounce2(2 * value - 1, from, to)) / 2;\n };\n}\nfunction linear(value, from = 0, to = 1) {\n return map(from, to, value);\n}\nfunction cos(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.cos(value));\n}\nvar easeInBack = createEaseInBack();\nvar easeOutBack = createEaseOutBack();\nvar easeInOutBack = createEaseInOutBack();\nvar easeInBounce = createEaseInBounce();\nvar easeOutBounce = createEaseOutBounce();\nvar easeInOutBounce = createEaseInOutBounce();\nvar easeInElastic = createEaseInElastic();\nvar easeOutElastic = createEaseOutElastic();\nvar easeInOutElastic = createEaseInOutElastic();\n\n// src/tweening/tween.ts\ndecorate(tween, threadable());\nfunction* tween(seconds, onProgress, onEnd) {\n const thread = useThread();\n const startTime = thread.time();\n const endTime = thread.time() + seconds;\n onProgress(0, 0);\n while (endTime > thread.fixed) {\n const time = thread.fixed - startTime;\n const value = time / seconds;\n if (time > 0) {\n onProgress(value, time);\n }\n yield;\n }\n thread.time(endTime);\n onProgress(1, seconds);\n onEnd?.(1, seconds);\n}\n\n// src/exporter/ImageExporter.ts\nvar EXPORT_FRAME_LIMIT = 256;\nvar EXPORT_RETRY_DELAY = 1e3;\nvar _ImageExporter = class _ImageExporter {\n constructor(logger, settings) {\n this.logger = logger;\n this.frameLookup = /* @__PURE__ */ new Set();\n this.handleResponse = ({ frame }) => {\n this.frameLookup.delete(frame);\n };\n if (settings.exporter.name !== _ImageExporter.id) {\n throw new Error(\n `Invalid exporter name: ${settings.exporter.name}. Expected: ${_ImageExporter.id}`\n );\n }\n const options = settings.exporter.options;\n this.projectName = settings.name;\n this.quality = clamp(0, 1, options.quality / 100);\n this.fileType = options.fileType;\n this.groupByScene = options.groupByScene;\n }\n static async create(project, settings) {\n return new _ImageExporter(project.logger, settings);\n }\n async start() {\n _ImageExporter.response.subscribe(this.handleResponse);\n }\n async handleFrame(canvas, frame, sceneFrame, sceneName, signal) {\n if (this.frameLookup.has(frame)) {\n this.logger.warn(`Frame no. ${frame} is already being exported.`);\n return;\n }\n if (import.meta.hot) {\n while (this.frameLookup.size > EXPORT_FRAME_LIMIT) {\n await new Promise((resolve) => setTimeout(resolve, EXPORT_RETRY_DELAY));\n if (signal.aborted) {\n return;\n }\n }\n this.frameLookup.add(frame);\n import.meta.hot.send(\"twick:export\", {\n frame,\n sceneFrame,\n data: canvas.toDataURL(this.fileType, this.quality),\n mimeType: this.fileType,\n subDirectories: this.groupByScene ? [this.projectName, sceneName] : [this.projectName],\n groupByScene: this.groupByScene\n });\n }\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n async stop() {\n while (this.frameLookup.size > 0) {\n await new Promise((resolve) => setTimeout(resolve, EXPORT_RETRY_DELAY));\n }\n _ImageExporter.response.unsubscribe(this.handleResponse);\n }\n};\n_ImageExporter.id = \"@twick/core/image-sequence\";\n_ImageExporter.displayName = \"Image sequence\";\n_ImageExporter.response = new EventDispatcher();\n(() => {\n if (import.meta.hot) {\n import.meta.hot.on(\"twick:export-ack\", (response) => {\n _ImageExporter.response.dispatch(response);\n });\n }\n})();\nvar ImageExporter = _ImageExporter;\n\n// src/exporter/WasmExporter.ts\nimport loadMp4Module from \"mp4-wasm\";\nvar _WasmExporter = class _WasmExporter {\n constructor(project, settings) {\n this.project = project;\n this.settings = settings;\n }\n static async create(project, settings) {\n return new _WasmExporter(project, settings);\n }\n async start() {\n const resp = await fetch(\"/@mp4-wasm\");\n const buffer = await resp.arrayBuffer();\n const mp4 = await loadMp4Module({\n wasmBinary: buffer\n });\n this.encoder = mp4.createWebCodecsEncoder({\n width: this.settings.size.x,\n height: this.settings.size.y,\n fps: this.project.settings.rendering.fps\n });\n }\n async handleFrame(canvas) {\n const frame = new VideoFrame(canvas, { timestamp: 0 });\n await this.encoder.addFrame(frame);\n frame.close();\n }\n async stop() {\n const buf = await this.encoder.end();\n const formData = new FormData();\n formData.append(\"file\", new Blob([buf], { type: \"video/mp4\" }), \"video.mp4\");\n formData.append(\n \"tempDir\",\n `twick-${this.settings.name}-${this.settings.hiddenFolderId}`\n );\n await fetch(\"/twick-ffmpeg-decoder/finished\", {\n method: \"POST\",\n headers: {\n // eslint-disable-next-line\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({})\n });\n await fetch(\"/uploadVideoFile\", {\n method: \"POST\",\n body: formData\n });\n }\n async generateAudio(assets, startFrame, endFrame) {\n await fetch(\"/audio-processing/generate-audio\", {\n method: \"POST\",\n // TODO: add type and validate on the other side\n body: JSON.stringify({\n tempDir: `twick-${this.settings.name}-${this.settings.hiddenFolderId}`,\n assets,\n startFrame,\n endFrame,\n fps: this.settings.fps\n })\n });\n }\n async mergeMedia() {\n const outputFilename = this.settings.name;\n const tempDir = `twick-${this.settings.name}-${this.settings.hiddenFolderId}`;\n await fetch(\"/audio-processing/merge-media\", {\n method: \"POST\",\n // TODO: add type and validate on the other side\n body: JSON.stringify({\n outputFilename,\n tempDir,\n format: \"mp4\"\n })\n });\n }\n async downloadVideos(assets) {\n await download(assets);\n }\n};\n_WasmExporter.id = \"@twick/core/wasm\";\n_WasmExporter.displayName = \"Video (Wasm)\";\nvar WasmExporter = _WasmExporter;\n\n// src/plugin/makePlugin.ts\nfunction makePlugin(plugin) {\n return typeof plugin === \"function\" ? plugin : () => plugin;\n}\n\n// src/plugin/DefaultPlugin.ts\nvar DefaultPlugin_default = makePlugin({\n name: \"@twick/core/default\",\n exporters() {\n return [WasmExporter, FFmpegExporterClient, ImageExporter];\n }\n});\n\n// src/types/alignment-enums.ts\nvar Direction = /* @__PURE__ */ ((Direction2) => {\n Direction2[Direction2[\"Top\"] = 4] = \"Top\";\n Direction2[Direction2[\"Bottom\"] = 8] = \"Bottom\";\n Direction2[Direction2[\"Left\"] = 16] = \"Left\";\n Direction2[Direction2[\"Right\"] = 32] = \"Right\";\n return Direction2;\n})(Direction || {});\nvar Center = /* @__PURE__ */ ((Center2) => {\n Center2[Center2[\"Vertical\"] = 1] = \"Vertical\";\n Center2[Center2[\"Horizontal\"] = 2] = \"Horizontal\";\n return Center2;\n})(Center || {});\nvar Origin = /* @__PURE__ */ ((Origin2) => {\n Origin2[Origin2[\"Middle\"] = 3] = \"Middle\";\n Origin2[Origin2[\"Top\"] = 5] = \"Top\";\n Origin2[Origin2[\"Bottom\"] = 9] = \"Bottom\";\n Origin2[Origin2[\"Left\"] = 18] = \"Left\";\n Origin2[Origin2[\"Right\"] = 34] = \"Right\";\n Origin2[Origin2[\"TopLeft\"] = 20] = \"TopLeft\";\n Origin2[Origin2[\"TopRight\"] = 36] = \"TopRight\";\n Origin2[Origin2[\"BottomLeft\"] = 24] = \"BottomLeft\";\n Origin2[Origin2[\"BottomRight\"] = 40] = \"BottomRight\";\n return Origin2;\n})(Origin || {});\n\n// src/flow/join.ts\ndecorate(join, threadable());\nfunction* join(first, ...tasks) {\n let all2 = true;\n if (typeof first === \"boolean\") {\n all2 = first;\n } else {\n tasks.push(first);\n }\n const parent = useThread();\n const threads2 = tasks.map((task) => parent.children.find((thread) => thread.runner === task)).filter((thread) => thread);\n const startTime = parent.time();\n let childTime;\n if (all2) {\n while (threads2.find((thread) => !thread.canceled)) {\n yield;\n }\n childTime = Math.max(...threads2.map((thread) => thread.time()));\n } else {\n while (!threads2.find((thread) => thread.canceled)) {\n yield;\n }\n const canceled = threads2.filter((thread) => thread.canceled);\n childTime = Math.min(...canceled.map((thread) => thread.time()));\n }\n parent.time(Math.max(startTime, childTime));\n}\n\n// src/flow/all.ts\ndecorate(all, threadable());\nfunction* all(...tasks) {\n for (const task of tasks) {\n yield task;\n }\n yield* join(...tasks);\n}\n\n// src/flow/any.ts\ndecorate(any, threadable());\nfunction* any(...tasks) {\n for (const task of tasks) {\n yield task;\n }\n yield* join(false, ...tasks);\n}\n\n// src/flow/chain.ts\ndecorate(chain, threadable());\nfunction* chain(...tasks) {\n for (const generator of tasks) {\n if (\"next\" in generator) {\n yield* generator;\n } else {\n generator();\n }\n }\n}\n\n// src/flow/scheduling.ts\ndecorate(waitFor, threadable());\nfunction* waitFor(seconds = 0, after) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n while (targetTime - step > thread.fixed) {\n yield;\n }\n thread.time(targetTime);\n if (after) {\n yield* after;\n }\n}\n\n// src/flow/delay.ts\ndecorate(delay, threadable());\nfunction* delay(time, task) {\n yield* waitFor(time);\n if (\"next\" in task) {\n yield* task;\n } else {\n task();\n }\n}\n\n// src/flow/every.ts\nfunction every(interval, callback) {\n let changed = false;\n decorate(everyRunner, threadable(\"every\"));\n function* everyRunner() {\n const project = usePlayback();\n let acc = 0;\n let tick = 0;\n callback(tick);\n changed = true;\n while (true) {\n if (acc >= project.secondsToFrames(interval)) {\n acc = 0;\n tick++;\n callback(tick);\n changed = true;\n } else {\n changed = false;\n }\n acc++;\n yield;\n }\n }\n return {\n runner: everyRunner(),\n setInterval(value) {\n interval = value;\n changed = false;\n },\n setCallback(value) {\n callback = value;\n changed = false;\n },\n *sync() {\n while (!changed) {\n yield;\n }\n }\n };\n}\n\n// src/flow/loop.ts\nvar infiniteLoop = `\nMake sure to use \\`yield\\` or \\`spawn()\\` to execute the loop concurrently in a\nseparate thread:\n\n\\`\\`\\`ts wrong\n// prettier-ignore\nyield* loop(() => rect().opacity(0).opacity(1, 1));\n\\`\\`\\`\n\n\\`\\`\\`ts correct\nyield loop(() => rect().opacity(0).opacity(1, 1));\n// or\nspawn(loop(() => rect().opacity(0).opacity(1, 1)));\n\\`\\`\\`\n\nIf you want to execute the loop a finite number of times, specify the iteration\ncount as the first argument:\n\n\\`\\`\\`ts\n// prettier-ignore\nyield* loop(10, () => rect().opacity(0).opacity(1, 1));\n// ^ iteration count\n\\`\\`\\`\n`;\ndecorate(loop, threadable());\nfunction* loop(iterations, factory) {\n if (typeof iterations !== \"number\") {\n factory = iterations;\n iterations = Infinity;\n }\n if (iterations === Infinity && useThread().parent === null) {\n useLogger().error({\n message: \"Tried to execute an infinite loop in the main thread.\",\n remarks: infiniteLoop,\n stack: new Error().stack\n });\n return;\n }\n for (let i = 0; i < iterations; i++) {\n const generator = factory(i);\n if (generator) {\n yield* generator;\n } else {\n yield;\n }\n }\n}\n\n// src/flow/loopFor.ts\ndecorate(loopFor, threadable());\nfunction* loopFor(seconds, factory) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n let iteration = 0;\n while (targetTime - step > thread.fixed) {\n const generator = factory(iteration);\n if (generator) {\n yield* generator;\n } else {\n yield;\n }\n iteration += 1;\n }\n thread.time(targetTime);\n}\n\n// src/flow/names.ts\nfunction setTaskName(task, source) {\n const prototype = Object.getPrototypeOf(task);\n if (prototype && !prototype.threadable) {\n prototype.threadable = true;\n try {\n const resolvedName = typeof source === \"string\" ? source : getTaskName(source);\n const nameDescriptor = Object.getOwnPropertyDescriptor(\n prototype,\n \"name\"\n );\n if (!nameDescriptor || nameDescriptor.writable) {\n prototype.name = resolvedName;\n }\n } catch {\n }\n }\n}\nfunction getTaskName(task) {\n return Object.getPrototypeOf(task).name ?? null;\n}\n\n// src/flow/run.ts\nfunction run(firstArg, runner) {\n let task;\n if (typeof firstArg === \"string\") {\n task = runner();\n setTaskName(task, firstArg);\n } else {\n task = firstArg();\n setTaskName(task, task);\n }\n return task;\n}\n\n// src/flow/sequence.ts\ndecorate(sequence, threadable());\nfunction* sequence(delay2, ...tasks) {\n for (const task of tasks) {\n yield task;\n yield* waitFor(delay2);\n }\n yield* join(...tasks);\n}\n\n// src/signals/DependencyContext.ts\nvar _DependencyContext = class _DependencyContext {\n constructor(owner) {\n this.owner = owner;\n this.dependencies = /* @__PURE__ */ new Set();\n this.event = new FlagDispatcher();\n this.markDirty = () => this.event.raise();\n this.invokable = this.invoke.bind(this);\n Object.defineProperty(this.invokable, \"context\", {\n value: this\n });\n Object.defineProperty(this.invokable, \"toPromise\", {\n value: this.toPromise.bind(this)\n });\n }\n static collectPromise(promise, initialValue = null) {\n const handle = {\n promise,\n value: initialValue,\n stack: new Error().stack\n };\n const context = this.collectionStack.at(-1);\n if (context) {\n handle.owner = context.owner;\n }\n promise.then((value) => {\n handle.value = value;\n context?.markDirty();\n });\n this.promises.push(handle);\n return handle;\n }\n static hasPromises() {\n return this.promises.length > 0;\n }\n static async consumePromises() {\n const promises = [...this.promises];\n await Promise.all(promises.map((handle) => handle.promise));\n this.promises = this.promises.filter((v) => !promises.includes(v));\n return promises;\n }\n invoke() {\n }\n startCollecting() {\n if (_DependencyContext.collectionSet.has(this)) {\n throw new DetailedError(\n \"A circular dependency occurred between signals.\",\n `This can happen when signals reference each other in a loop.\n Try using the attached stack trace to locate said loop.`\n );\n }\n _DependencyContext.collectionSet.add(this);\n _DependencyContext.collectionStack.push(this);\n }\n finishCollecting() {\n _DependencyContext.collectionSet.delete(this);\n if (_DependencyContext.collectionStack.pop() !== this) {\n throw new Error(\"collectStart/collectEnd was called out of order.\");\n }\n }\n clearDependencies() {\n this.dependencies.forEach((dep) => dep.unsubscribe(this.markDirty));\n this.dependencies.clear();\n }\n collect() {\n const signal = _DependencyContext.collectionStack.at(-1);\n if (signal) {\n signal.dependencies.add(this.event.subscribable);\n this.event.subscribe(signal.markDirty);\n }\n }\n dispose() {\n this.clearDependencies();\n this.event.clear();\n this.owner = null;\n }\n async toPromise() {\n do {\n await _DependencyContext.consumePromises();\n this.invokable();\n } while (_DependencyContext.hasPromises());\n return this.invokable;\n }\n};\n_DependencyContext.collectionSet = /* @__PURE__ */ new Set();\n_DependencyContext.collectionStack = [];\n_DependencyContext.promises = [];\nvar DependencyContext = _DependencyContext;\n\n// src/signals/symbols.ts\nvar DEFAULT = /* @__PURE__ */ Symbol.for(\"@twick/core/signals/default\");\n\n// src/signals/utils.ts\nfunction isReactive(value) {\n return typeof value === \"function\";\n}\nfunction modify(value, modification) {\n return isReactive(value) ? () => modification(value()) : modification(value);\n}\nfunction unwrap(value) {\n return isReactive(value) ? value() : value;\n}\n\n// src/signals/SignalContext.ts\nvar SignalContext = class extends DependencyContext {\n constructor(initial, interpolation, owner = void 0, parser = (value) => value, extensions = {}) {\n super(owner);\n this.initial = initial;\n this.interpolation = interpolation;\n this.parser = parser;\n this.tweening = false;\n Object.defineProperty(this.invokable, \"reset\", {\n value: this.reset.bind(this)\n });\n Object.defineProperty(this.invokable, \"save\", {\n value: this.save.bind(this)\n });\n Object.defineProperty(this.invokable, \"isInitial\", {\n value: this.isInitial.bind(this)\n });\n if (this.initial !== void 0) {\n this.current = this.initial;\n this.markDirty();\n if (!isReactive(this.initial)) {\n this.last = this.parse(this.initial);\n }\n }\n this.extensions = {\n getter: this.getter.bind(this),\n setter: this.setter.bind(this),\n tweener: this.tweener.bind(this),\n ...extensions\n };\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n set(value) {\n this.extensions.setter(value);\n return this.owner;\n }\n setter(value) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n if (this.current === value) {\n return this.owner;\n }\n this.current = value;\n this.markDirty();\n this.clearDependencies();\n if (!isReactive(value)) {\n this.last = this.parse(value);\n }\n return this.owner;\n }\n get() {\n return this.extensions.getter();\n }\n getter() {\n if (this.event.isRaised() && isReactive(this.current)) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.parse(this.current());\n } catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n invoke(value, duration, timingFunction = easeInOutCubic, interpolationFunction = this.interpolation) {\n if (value === void 0) {\n return this.get();\n }\n if (duration === void 0) {\n return this.set(value);\n }\n const queue = this.createQueue(timingFunction, interpolationFunction);\n return queue.to(value, duration);\n }\n createQueue(defaultTimingFunction, defaultInterpolationFunction) {\n const initial = this.get();\n const queue = [];\n const task = run(\"animation chain\", function* animate() {\n while (queue.length > 0) {\n yield* queue.shift();\n }\n });\n task.to = (value, duration, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(\n this.tween(value, duration, timingFunction, interpolationFunction)\n );\n return task;\n };\n task.back = (time, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(\n this.tween(\n initial,\n time,\n defaultTimingFunction,\n defaultInterpolationFunction\n )\n );\n return task;\n };\n task.wait = (duration) => {\n queue.push(waitFor(duration));\n return task;\n };\n task.run = (generator) => {\n queue.push(generator);\n return task;\n };\n task.do = (callback) => {\n queue.push(\n run(function* () {\n callback();\n })\n );\n return task;\n };\n return task;\n }\n *tween(value, duration, timingFunction, interpolationFunction) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n this.tweening = true;\n yield* this.extensions.tweener(\n value,\n duration,\n timingFunction,\n interpolationFunction\n );\n this.set(value);\n this.tweening = false;\n }\n *tweener(value, duration, timingFunction, interpolationFunction) {\n const from = this.get();\n yield* tween(duration, (v) => {\n this.set(\n interpolationFunction(\n from,\n this.parse(unwrap(value)),\n timingFunction(v)\n )\n );\n });\n }\n dispose() {\n super.dispose();\n this.initial = void 0;\n this.current = void 0;\n this.last = void 0;\n }\n /**\n * Reset the signal to its initial value (if one has been set).\n *\n * @example\n * ```ts\n * const signal = createSignal(7);\n *\n * signal.reset();\n * // same as:\n * signal(7);\n * ```\n */\n reset() {\n if (this.initial !== void 0) {\n this.set(this.initial);\n }\n return this.owner;\n }\n /**\n * Compute the current value of the signal and immediately set it.\n *\n * @remarks\n * This method can be used to stop the signal from updating while keeping its\n * current value.\n *\n * @example\n * ```ts\n * signal.save();\n * // same as:\n * signal(signal());\n * ```\n */\n save() {\n return this.set(this.get());\n }\n /**\n * Check if the signal is currently using its initial value.\n *\n * @example\n * ```ts\n *\n * const signal = createSignal(0);\n * signal.isInitial(); // true\n *\n * signal(5);\n * signal.isInitial(); // false\n *\n * signal(DEFAULT);\n * signal.isInitial(); // true\n * ```\n */\n isInitial() {\n this.collect();\n return this.current === this.initial;\n }\n /**\n * Get the initial value of this signal.\n */\n getInitial() {\n return this.initial;\n }\n /**\n * Get the raw value of this signal.\n *\n * @remarks\n * If the signal was provided with a factory function, the function itself\n * will be returned, without invoking it.\n *\n * This method can be used to create copies of signals.\n *\n * @example\n * ```ts\n * const a = createSignal(2);\n * const b = createSignal(() => a);\n * // b() == 2\n *\n * const bClone = createSignal(b.raw());\n * // bClone() == 2\n *\n * a(4);\n * // b() == 4\n * // bClone() == 4\n * ```\n */\n raw() {\n return this.current;\n }\n /**\n * Is the signal undergoing a tween?\n */\n isTweening() {\n return this.tweening;\n }\n};\n\n// src/signals/CompoundSignalContext.ts\nvar CompoundSignalContext = class extends SignalContext {\n constructor(entries, parser, initial, interpolation, owner = void 0, extensions = {}) {\n var _a;\n super(void 0, interpolation, owner, parser, extensions);\n this.entries = entries;\n this.signals = [];\n this.parser = parser;\n for (const entry of entries) {\n let key;\n let signal;\n if (Array.isArray(entry)) {\n [key, signal] = entry;\n (_a = signal.context).owner ?? (_a.owner = this);\n } else {\n key = entry;\n signal = new SignalContext(\n modify(initial, (value) => parser(value)[entry]),\n map,\n owner ?? this.invokable\n ).toSignal();\n }\n this.signals.push([key, signal]);\n Object.defineProperty(this.invokable, key, { value: signal });\n }\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n getter() {\n return this.parse(\n Object.fromEntries(\n this.signals.map(([key, property]) => [key, property()])\n )\n );\n }\n setter(value) {\n if (isReactive(value)) {\n for (const [key, property] of this.signals) {\n property(() => this.parser(value())[key]);\n }\n } else {\n const parsed = this.parse(value);\n for (const [key, property] of this.signals) {\n property(parsed[key]);\n }\n }\n return this.owner;\n }\n reset() {\n for (const [, signal] of this.signals) {\n signal.reset();\n }\n return this.owner;\n }\n save() {\n for (const [, signal] of this.signals) {\n signal.save();\n }\n return this.owner;\n }\n isInitial() {\n for (const [, signal] of this.signals) {\n if (!signal.isInitial()) {\n return false;\n }\n }\n return true;\n }\n raw() {\n return Object.fromEntries(\n this.signals.map(([key, property]) => [key, property.context.raw()])\n );\n }\n};\n\n// src/signals/ComputedContext.ts\nvar ComputedContext = class extends DependencyContext {\n constructor(factory, owner) {\n super(owner);\n this.factory = factory;\n this.markDirty();\n }\n toSignal() {\n return this.invokable;\n }\n dispose() {\n super.dispose();\n this.last = void 0;\n }\n invoke(...args) {\n if (this.event.isRaised()) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.factory(...args);\n } catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n};\n\n// src/signals/createComputed.ts\nfunction createComputed(factory, owner) {\n return new ComputedContext(factory, owner).toSignal();\n}\n\n// src/signals/createSignal.ts\nfunction createSignal(initial, interpolation = deepLerp, owner) {\n return new SignalContext(\n initial,\n interpolation,\n owner\n ).toSignal();\n}\n\n// src/signals/createComputedAsync.ts\nfunction createComputedAsync(factory, initial = null) {\n let handle;\n const signal = createSignal(factory);\n return createComputed(() => {\n const promise = signal();\n if (!handle || handle.promise !== promise) {\n handle = ComputedContext.collectPromise(\n promise,\n handle?.value ?? initial\n );\n }\n return handle.value;\n });\n}\n\n// src/types/Spacing.ts\nvar _Spacing = class _Spacing {\n constructor(one = 0, two, three, four) {\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n this.left = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (Array.isArray(one)) {\n four = one[3];\n three = one[2];\n two = one[1];\n one = one[0];\n }\n if (typeof one === \"number\") {\n this.top = one;\n this.right = two !== void 0 ? two : one;\n this.bottom = three !== void 0 ? three : one;\n this.left = four !== void 0 ? four : two !== void 0 ? two : one;\n return;\n }\n this.top = one.top;\n this.right = one.right;\n this.bottom = one.bottom;\n this.left = one.left;\n }\n static createSignal(initial, interpolation = _Spacing.lerp) {\n return new CompoundSignalContext(\n [\"top\", \"right\", \"bottom\", \"left\"],\n (value) => new _Spacing(value),\n initial,\n interpolation\n ).toSignal();\n }\n static lerp(from, to, value) {\n return new _Spacing(\n map(from.top, to.top, value),\n map(from.right, to.right, value),\n map(from.bottom, to.bottom, value),\n map(from.left, to.left, value)\n );\n }\n get x() {\n return this.left + this.right;\n }\n get y() {\n return this.top + this.bottom;\n }\n lerp(to, value) {\n return _Spacing.lerp(this, to, value);\n }\n scale(value) {\n return new _Spacing(\n this.top * value,\n this.right * value,\n this.bottom * value,\n this.left * value\n );\n }\n addScalar(value) {\n return new _Spacing(\n this.top + value,\n this.right + value,\n this.bottom + value,\n this.left + value\n );\n }\n toSymbol() {\n return _Spacing.symbol;\n }\n toString() {\n return `Spacing(${this.top}, ${this.right}, ${this.bottom}, ${this.left})`;\n }\n toUniform(gl, location) {\n gl.uniform4f(location, this.top, this.right, this.bottom, this.left);\n }\n serialize() {\n return {\n top: this.top,\n right: this.right,\n bottom: this.bottom,\n left: this.left\n };\n }\n};\n_Spacing.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Spacing\");\nvar Spacing = _Spacing;\n\n// src/types/Type.ts\nvar EPSILON = 1e-6;\nfunction isType(value) {\n return value && typeof value === \"object\" && \"toSymbol\" in value;\n}\n\n// src/types/Vector.ts\nvar _Vector2 = class _Vector2 {\n constructor(one, two) {\n this.x = 0;\n this.y = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (typeof one !== \"object\") {\n this.x = one;\n this.y = two ?? one;\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n return;\n }\n if (\"width\" in one) {\n this.x = one.width;\n this.y = one.height;\n return;\n }\n this.x = one.x;\n this.y = one.y;\n }\n static createSignal(initial, interpolation = _Vector2.lerp, owner) {\n return new CompoundSignalContext(\n [\"x\", \"y\"],\n (value) => new _Vector2(value),\n initial,\n interpolation,\n owner\n ).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n if (typeof value === \"number\") {\n valueX = valueY = value;\n } else {\n valueX = value.x;\n valueY = value.y;\n }\n return new _Vector2(map(from.x, to.x, valueX), map(from.y, to.y, valueY));\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = from.sub(to).ctg);\n return _Vector2.lerp(from, to, new _Vector2(arcLerp(value, reverse, ratio)));\n }\n static createArcLerp(reverse, ratio) {\n return (from, to, value) => _Vector2.arcLerp(from, to, value, reverse, ratio);\n }\n /**\n * Interpolates between two vectors on the polar plane by interpolating\n * the angles and magnitudes of the vectors individually.\n *\n * @param from - The starting vector.\n * @param to - The target vector.\n * @param value - The t-value of the interpolation.\n * @param counterclockwise - Whether the vector should get rotated\n * counterclockwise. Defaults to `false`.\n * @param origin - The center of rotation. Defaults to the origin.\n *\n * @remarks\n * This function is useful when used in conjunction with {@link rotate} to\n * animate an object's position on a circular arc (see examples).\n *\n * @example\n * Animating an object in a circle around the origin\n * ```tsx\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.polarLerp\n * );\n * ```\n * @example\n * Rotating an object around the point `[-200, 100]`\n * ```ts\n * circle().position(\n * circle().position().rotate(180, [-200, 100]),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(false, [-200, 100]),\n * );\n * ```\n * @example\n * Rotating an object counterclockwise around the origin\n * ```ts\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(true),\n * );\n * ```\n */\n static polarLerp(from, to, value, counterclockwise = false, origin = _Vector2.zero) {\n from = from.sub(origin);\n to = to.sub(origin);\n const fromAngle = from.degrees;\n let toAngle = to.degrees;\n const isCounterclockwise = fromAngle > toAngle;\n if (isCounterclockwise !== counterclockwise) {\n toAngle = toAngle + (counterclockwise ? -360 : 360);\n }\n const angle = map(fromAngle, toAngle, value) * DEG2RAD;\n const magnitude = map(from.magnitude, to.magnitude, value);\n return new _Vector2(\n magnitude * Math.cos(angle) + origin.x,\n magnitude * Math.sin(angle) + origin.y\n );\n }\n /**\n * Helper function to create a {@link Vector2.polarLerp} interpolation\n * function with additional parameters.\n *\n * @param counterclockwise - Whether the point should get rotated\n * counterclockwise.\n * @param center - The center of rotation. Defaults to the origin.\n */\n static createPolarLerp(counterclockwise = false, center = _Vector2.zero) {\n return (from, to, value) => _Vector2.polarLerp(from, to, value, counterclockwise, new _Vector2(center));\n }\n static fromOrigin(origin) {\n const position = new _Vector2();\n if (origin === 3 /* Middle */) {\n return position;\n }\n if (origin & 16 /* Left */) {\n position.x = -1;\n } else if (origin & 32 /* Right */) {\n position.x = 1;\n }\n if (origin & 4 /* Top */) {\n position.y = -1;\n } else if (origin & 8 /* Bottom */) {\n position.y = 1;\n }\n return position;\n }\n static fromScalar(value) {\n return new _Vector2(value, value);\n }\n static fromRadians(radians) {\n return new _Vector2(Math.cos(radians), Math.sin(radians));\n }\n static fromDegrees(degrees) {\n return _Vector2.fromRadians(degrees * DEG2RAD);\n }\n /**\n * Return the angle in radians between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n */\n static radians(x, y) {\n return Math.atan2(y, x);\n }\n /**\n * Return the angle in degrees between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n static degrees(x, y) {\n return _Vector2.radians(x, y) * RAD2DEG;\n }\n static magnitude(x, y) {\n return Math.sqrt(x * x + y * y);\n }\n static squaredMagnitude(x, y) {\n return x * x + y * y;\n }\n static angleBetween(u, v) {\n return Math.acos(clamp(-1, 1, u.dot(v) / (u.magnitude * v.magnitude))) * (u.cross(v) >= 0 ? 1 : -1);\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n get magnitude() {\n return _Vector2.magnitude(this.x, this.y);\n }\n get squaredMagnitude() {\n return _Vector2.squaredMagnitude(this.x, this.y);\n }\n get normalized() {\n return this.scale(1 / _Vector2.magnitude(this.x, this.y));\n }\n get safe() {\n return new _Vector2(isNaN(this.x) ? 0 : this.x, isNaN(this.y) ? 0 : this.y);\n }\n get flipped() {\n return new _Vector2(-this.x, -this.y);\n }\n get floored() {\n return new _Vector2(Math.floor(this.x), Math.floor(this.y));\n }\n get perpendicular() {\n return new _Vector2(this.y, -this.x);\n }\n /**\n * Return the angle in radians between the vector and the positive x-axis.\n */\n get radians() {\n return _Vector2.radians(this.x, this.y);\n }\n /**\n * Return the angle in degrees between the vector and the positive x-axis.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n get degrees() {\n return _Vector2.degrees(this.x, this.y);\n }\n get ctg() {\n return this.x / this.y;\n }\n lerp(to, value) {\n return _Vector2.lerp(this, to, value);\n }\n getOriginOffset(origin) {\n const offset = _Vector2.fromOrigin(origin);\n offset.x *= this.x / 2;\n offset.y *= this.y / 2;\n return offset;\n }\n scale(value) {\n return new _Vector2(this.x * value, this.y * value);\n }\n mul(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x * vector.x, this.y * vector.y);\n }\n div(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x / vector.x, this.y / vector.y);\n }\n add(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x + vector.x, this.y + vector.y);\n }\n sub(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x - vector.x, this.y - vector.y);\n }\n dot(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return this.x * vector.x + this.y * vector.y;\n }\n cross(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return this.x * vector.y - this.y * vector.x;\n }\n mod(possibleVector) {\n const vector = new _Vector2(possibleVector);\n return new _Vector2(this.x % vector.x, this.y % vector.y);\n }\n addX(value) {\n return new _Vector2(this.x + value, this.y);\n }\n addY(value) {\n return new _Vector2(this.x, this.y + value);\n }\n toSymbol() {\n return _Vector2.symbol;\n }\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n toUniform(gl, location) {\n gl.uniform2f(location, this.x, this.y);\n }\n serialize() {\n return { x: this.x, y: this.y };\n }\n /**\n * Check if two vectors are exactly equal to each other.\n *\n * @remarks\n * If you need to compensate for floating point inaccuracies, use the\n * {@link equals} method, instead.\n *\n * @param other - The vector to compare.\n */\n exactlyEquals(other) {\n return this.x === other.x && this.y === other.y;\n }\n /**\n * Check if two vectors are equal to each other.\n *\n * @remarks\n * This method allows passing an allowed error margin when comparing vectors\n * to compensate for floating point inaccuracies. To check if two vectors are\n * exactly equal, use the {@link exactlyEquals} method, instead.\n *\n * @param other - The vector to compare.\n * @param threshold - The allowed error threshold when comparing the vectors.\n */\n equals(other, threshold = EPSILON) {\n return Math.abs(this.x - other.x) <= threshold + Number.EPSILON && Math.abs(this.y - other.y) <= threshold + Number.EPSILON;\n }\n};\n_Vector2.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Vector2\");\n_Vector2.zero = new _Vector2();\n_Vector2.one = new _Vector2(1, 1);\n_Vector2.right = new _Vector2(1, 0);\n_Vector2.left = new _Vector2(-1, 0);\n_Vector2.up = new _Vector2(0, 1);\n_Vector2.down = new _Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, -1)`\n */\n_Vector2.top = new _Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, 1)`\n */\n_Vector2.bottom = new _Vector2(0, 1);\n/**\n * A constant equal to `Vector2(-1, -1)`\n */\n_Vector2.topLeft = new _Vector2(-1, -1);\n/**\n * A constant equal to `Vector2(1, -1)`\n */\n_Vector2.topRight = new _Vector2(1, -1);\n/**\n * A constant equal to `Vector2(-1, 1)`\n */\n_Vector2.bottomLeft = new _Vector2(-1, 1);\n/**\n * A constant equal to `Vector2(1, 1)`\n */\n_Vector2.bottomRight = new _Vector2(1, 1);\nvar Vector2 = _Vector2;\n\n// src/types/Matrix2D.ts\nvar _Matrix2D = class _Matrix2D {\n constructor(a, b, c, d, tx, ty) {\n this.values = new Float32Array(6);\n if (arguments.length === 0) {\n this.values = new Float32Array([1, 0, 0, 1, 0, 0]);\n return;\n }\n if (arguments.length === 6) {\n this.values[0] = a;\n this.values[1] = b;\n this.values[2] = c;\n this.values[3] = d;\n this.values[4] = tx;\n this.values[5] = ty;\n return;\n }\n if (a instanceof DOMMatrix) {\n this.values[0] = a.m11;\n this.values[1] = a.m12;\n this.values[2] = a.m21;\n this.values[3] = a.m22;\n this.values[4] = a.m41;\n this.values[5] = a.m42;\n return;\n }\n if (a instanceof _Matrix2D) {\n this.values = a.values;\n return;\n }\n if (Array.isArray(a)) {\n if (a.length === 2) {\n this.values[0] = a[0];\n this.values[1] = a[1];\n this.values[2] = b[0];\n this.values[3] = b[1];\n this.values[4] = c[0];\n this.values[5] = c[1];\n return;\n }\n if (a.length === 3) {\n const x2 = new Vector2(a[0]);\n const y2 = new Vector2(a[1]);\n const z2 = new Vector2(a[2]);\n this.values[0] = x2.x;\n this.values[1] = x2.y;\n this.values[2] = y2.x;\n this.values[3] = y2.y;\n this.values[4] = z2.x;\n this.values[5] = z2.y;\n return;\n }\n this.values[0] = a[0];\n this.values[1] = a[1];\n this.values[2] = a[2];\n this.values[3] = a[3];\n this.values[4] = a[4];\n this.values[5] = a[5];\n return;\n }\n const x = new Vector2(a);\n const y = new Vector2(b);\n const z = new Vector2(c);\n this.values[0] = x.x;\n this.values[1] = x.y;\n this.values[2] = y.x;\n this.values[3] = y.y;\n this.values[4] = z.x;\n this.values[5] = z.y;\n }\n static fromRotation(angle) {\n return _Matrix2D.identity.rotate(angle);\n }\n static fromTranslation(translation) {\n return _Matrix2D.identity.translate(new Vector2(translation));\n }\n static fromScaling(scale) {\n return _Matrix2D.identity.scale(new Vector2(scale));\n }\n get x() {\n return new Vector2(this.values[0], this.values[1]);\n }\n get y() {\n return new Vector2(this.values[2], this.values[3]);\n }\n get scaleX() {\n return this.values[0];\n }\n set scaleX(value) {\n this.values[0] = this.x.normalized.scale(value).x;\n }\n get skewX() {\n return this.values[1];\n }\n set skewX(value) {\n this.values[1] = value;\n }\n get scaleY() {\n return this.values[3];\n }\n set scaleY(value) {\n this.values[3] = this.y.normalized.scale(value).y;\n }\n get skewY() {\n return this.values[2];\n }\n set skewY(value) {\n this.values[2] = value;\n }\n get translateX() {\n return this.values[4];\n }\n set translateX(value) {\n this.values[4] = value;\n }\n get translateY() {\n return this.values[5];\n }\n set translateY(value) {\n this.values[5] = value;\n }\n get rotation() {\n return Vector2.degrees(this.values[0], this.values[1]);\n }\n set rotation(angle) {\n const result = this.rotate(angle - this.rotation);\n this.values[0] = result.values[0];\n this.values[1] = result.values[1];\n this.values[2] = result.values[2];\n this.values[3] = result.values[3];\n }\n get translation() {\n return new Vector2(this.values[4], this.values[5]);\n }\n set translation(translation) {\n const vec = new Vector2(translation);\n this.values[4] = vec.x;\n this.values[5] = vec.y;\n }\n get scaling() {\n return new Vector2(this.values[0], this.values[3]);\n }\n set scaling(value) {\n const scale = new Vector2(value);\n const x = new Vector2(this.values[0], this.values[1]).normalized;\n const y = new Vector2(this.values[2], this.values[3]).normalized;\n this.values[0] = x.x * scale.x;\n this.values[1] = x.y * scale.y;\n this.values[2] = y.x * scale.x;\n this.values[3] = y.y * scale.y;\n }\n /**\n * Get the inverse of the matrix.\n *\n * @remarks\n * If the matrix is not invertible, i.e. its determinant is `0`, this will\n * return `null`, instead.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const inverse = matrix.inverse;\n * // => Matrix2D(\n * // [-2, 1],\n * // [1.5, -0.5],\n * // [1, -2],\n * // )\n * ```\n */\n get inverse() {\n const aa = this.values[0], ab = this.values[1], ac = this.values[2], ad = this.values[3];\n const atx = this.values[4], aty = this.values[5];\n let det = aa * ad - ab * ac;\n if (!det) {\n return null;\n }\n det = 1 / det;\n return new _Matrix2D(\n ad * det,\n -ab * det,\n -ac * det,\n aa * det,\n (ac * aty - ad * atx) * det,\n (ab * atx - aa * aty) * det\n );\n }\n /**\n * Get the determinant of the matrix.\n */\n get determinant() {\n return this.values[0] * this.values[3] - this.values[1] * this.values[2];\n }\n get domMatrix() {\n return new DOMMatrix([\n this.values[0],\n this.values[1],\n this.values[2],\n this.values[3],\n this.values[4],\n this.values[5]\n ]);\n }\n /**\n * Get the nth component vector of the matrix. Only defined for 0, 1, and 2.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 0],\n * [0, 0],\n * [1, 0],\n * );\n *\n * const x = matrix.column(0);\n * // Vector2(1, 0)\n *\n * const y = matrix.column(1);\n * // Vector2(0, 0)\n *\n * const z = matrix.column(1);\n * // Vector2(1, 0)\n * ```\n *\n * @param index - The index of the component vector to retrieve.\n */\n column(index) {\n return new Vector2(this.values[index * 2], this.values[index * 2 + 1]);\n }\n /**\n * Returns the nth row of the matrix. Only defined for 0 and 1.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 0],\n * [0, 0],\n * [1, 0],\n * );\n *\n * const firstRow = matrix.column(0);\n * // [1, 0, 1]\n *\n * const secondRow = matrix.column(1);\n * // [0, 0, 0]\n * ```\n *\n * @param index - The index of the row to retrieve.\n */\n row(index) {\n return [this.values[index], this.values[index + 2], this.values[index + 4]];\n }\n /**\n * Returns the matrix product of this matrix with the provided matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [0, 1],\n * [1, 1],\n * );\n * const b = new Matrix2D(\n * [2, 1],\n * [1, 1],\n * [1, 1],\n * );\n *\n * const result = a.mul(b);\n * // => Matrix2D(\n * // [2, 5],\n * // [1, 3],\n * // [2, 4],\n * // )\n * ```\n *\n * @param other - The matrix to multiply with\n */\n mul(other) {\n const a0 = this.values[0], a1 = this.values[1], a2 = this.values[2], a3 = this.values[3], a4 = this.values[4], a5 = this.values[5];\n const b0 = other.values[0], b1 = other.values[1], b2 = other.values[2], b3 = other.values[3], b4 = other.values[4], b5 = other.values[5];\n return new _Matrix2D(\n a0 * b0 + a2 * b1,\n a1 * b0 + a3 * b1,\n a0 * b2 + a2 * b3,\n a1 * b2 + a3 * b3,\n a0 * b4 + a2 * b5 + a4,\n a1 * b4 + a3 * b5 + a5\n );\n }\n /**\n * Rotate the matrix by the provided angle. By default, the angle is\n * provided in degrees.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result = a.rotate(90);\n * // => Matrix2D(\n * // [3, 4],\n * // [-1, -2],\n * // [5, 6],\n * // )\n *\n * // Provide the angle in radians\n * const result = a.rotate(Math.PI * 0.5, true);\n * // => Matrix2D(\n * // [3, 4],\n * // [-1, -2],\n * // [5, 6],\n * // )\n * ```\n *\n * @param angle - The angle by which to rotate the matrix.\n * @param degrees - Whether the angle is provided in degrees.\n */\n rotate(angle, degrees = true) {\n if (degrees) {\n angle *= DEG2RAD;\n }\n const a0 = this.values[0], a1 = this.values[1], a2 = this.values[2], a3 = this.values[3], a4 = this.values[4], a5 = this.values[5];\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n return new _Matrix2D(\n a0 * c + a2 * s,\n a1 * c + a3 * s,\n a0 * -s + a2 * c,\n a1 * -s + a3 * c,\n a4,\n a5\n );\n }\n /**\n * Scale the x and y component vectors of the matrix.\n *\n * @remarks\n * If `vec` is provided as a vector, the x and y component vectors of the\n * matrix will be scaled by the x and y parts of the vector, respectively.\n *\n * If `vec` is provided as a scalar, the x and y component vectors will be\n * scaled uniformly by this factor.\n *\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.scale([2, 3]);\n * // => new Matrix2D(\n * // [2, 4],\n * // [9, 12],\n * // [5, 6],\n * // )\n *\n * const result2 = matrix.scale(2);\n * // => new Matrix2D(\n * // [2, 4],\n * // [6, 8],\n * // [5, 6],\n * // )\n * ```\n *\n * @param vec - The factor by which to scale the matrix\n */\n scale(vec) {\n const v = new Vector2(vec);\n return new _Matrix2D(\n this.values[0] * v.x,\n this.values[1] * v.x,\n this.values[2] * v.y,\n this.values[3] * v.y,\n this.values[4],\n this.values[5]\n );\n }\n /**\n * Multiply each value of the matrix by a scalar.\n *\n * * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.mulScalar(2);\n * // => new Matrix2D(\n * // [2, 4],\n * // [6, 8],\n * // [10, 12],\n * // )\n * ```\n *\n * @param s - The value by which to scale each term\n */\n mulScalar(s) {\n return new _Matrix2D(\n this.values[0] * s,\n this.values[1] * s,\n this.values[2] * s,\n this.values[3] * s,\n this.values[4] * s,\n this.values[5] * s\n );\n }\n /**\n * Translate the matrix by the dimensions of the provided vector.\n *\n * @remarks\n * If `vec` is provided as a scalar, matrix will be translated uniformly\n * by this factor.\n *\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const matrix = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n *\n * const result1 = matrix.translate([2, 3]);\n * // => new Matrix2D(\n * // [1, 2],\n * // [3, 4],\n * // [16, 22],\n * // )\n *\n * const result2 = matrix.translate(2);\n * // => new Matrix2D(\n * // [1, 2],\n * // [3, 4],\n * // [13, 18],\n * // )\n * ```\n *\n * @param vec - The vector by which to translate the matrix\n */\n translate(vec) {\n const v = new Vector2(vec);\n return new _Matrix2D(\n this.values[0],\n this.values[1],\n this.values[2],\n this.values[3],\n this.values[0] * v.x + this.values[2] * v.y + this.values[4],\n this.values[1] * v.x + this.values[3] * v.y + this.values[5]\n );\n }\n /**\n * Add the provided matrix to this matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n * const a = new Matrix2D(\n * [7, 8],\n * [9, 10],\n * [11, 12],\n * );\n *\n * const result = a.add(b);\n * // => Matrix2D(\n * // [8, 10],\n * // [12, 14],\n * // [16, 18],\n * // )\n * ```\n *\n * @param other - The matrix to add\n */\n add(other) {\n return new _Matrix2D(\n this.values[0] + other.values[0],\n this.values[1] + other.values[1],\n this.values[2] + other.values[2],\n this.values[3] + other.values[3],\n this.values[4] + other.values[4],\n this.values[5] + other.values[5]\n );\n }\n /**\n * Subtract the provided matrix from this matrix.\n *\n * @remarks\n * This method returns a new matrix representing the result of the\n * computation. It will not modify the source matrix.\n *\n * @example\n * ```ts\n * const a = new Matrix2D(\n * [1, 2],\n * [3, 4],\n * [5, 6],\n * );\n * const a = new Matrix2D(\n * [7, 8],\n * [9, 10],\n * [11, 12],\n * );\n *\n * const result = a.sub(b);\n * // => Matrix2D(\n * // [-6, -6],\n * // [-6, -6],\n * // [-6, -6],\n * // )\n * ```\n *\n * @param other - The matrix to subract\n */\n sub(other) {\n return new _Matrix2D(\n this.values[0] - other.values[0],\n this.values[1] - other.values[1],\n this.values[2] - other.values[2],\n this.values[3] - other.values[3],\n this.values[4] - other.values[4],\n this.values[5] - other.values[5]\n );\n }\n toSymbol() {\n return _Matrix2D.symbol;\n }\n toUniform(gl, location) {\n gl.uniformMatrix3x2fv(location, false, this.values);\n }\n equals(other, threshold = EPSILON) {\n return Math.abs(this.values[0] - other.values[0]) <= threshold + Number.EPSILON && Math.abs(this.values[1] - other.values[1]) <= threshold + Number.EPSILON && Math.abs(this.values[2] - other.values[2]) <= threshold + Number.EPSILON && Math.abs(this.values[3] - other.values[3]) <= threshold + Number.EPSILON && Math.abs(this.values[4] - other.values[4]) <= threshold + Number.EPSILON && Math.abs(this.values[5] - other.values[5]) <= threshold + Number.EPSILON;\n }\n exactlyEquals(other) {\n return this.values[0] === other.values[0] && this.values[1] === other.values[1] && this.values[2] === other.values[2] && this.values[3] === other.values[3] && this.values[4] === other.values[4] && this.values[5] === other.values[5];\n }\n};\n_Matrix2D.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Matrix2D\");\n_Matrix2D.identity = new _Matrix2D(1, 0, 0, 1, 0, 0);\n_Matrix2D.zero = new _Matrix2D(0, 0, 0, 0, 0, 0);\nvar Matrix2D = _Matrix2D;\n\n// src/types/vector-transformations.ts\nfunction transformVectorAsPoint(vector, matrix) {\n const m = new Matrix2D(matrix);\n return new Vector2(\n vector.x * m.scaleX + vector.y * m.skewY + m.translateX,\n vector.x * m.skewX + vector.y * m.scaleY + m.translateY\n );\n}\nfunction transformVector(vector, matrix) {\n const m = new Matrix2D(matrix);\n return new Vector2(\n vector.x * m.scaleX + vector.y * m.skewY,\n vector.x * m.skewX + vector.y * m.scaleY\n );\n}\nfunction rotateVector(vector, angle, center = Vector2.zero) {\n const originVector = new Vector2(center);\n const matrix = Matrix2D.fromTranslation(originVector).rotate(angle).translate(originVector.flipped);\n return transformVectorAsPoint(vector, matrix);\n}\n\n// src/types/BBox.ts\nvar _BBox = class _BBox {\n constructor(one, two = 0, three = 0, four = 0) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n if (one === void 0 || one === null) {\n return;\n }\n if (typeof one === \"number\") {\n this.x = one;\n this.y = two;\n this.width = three;\n this.height = four;\n return;\n }\n if (one instanceof Vector2) {\n this.x = one.x;\n this.y = one.y;\n if (two instanceof Vector2) {\n this.width = two.x;\n this.height = two.y;\n }\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n this.width = one[2];\n this.height = one[3];\n return;\n }\n this.x = one.x;\n this.y = one.y;\n this.width = one.width;\n this.height = one.height;\n }\n static createSignal(initial, interpolation = _BBox.lerp) {\n return new CompoundSignalContext(\n [\"x\", \"y\", \"width\", \"height\"],\n (value) => new _BBox(value),\n initial,\n interpolation\n ).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n let valueWidth;\n let valueHeight;\n if (typeof value === \"number\") {\n valueX = valueY = valueWidth = valueHeight = value;\n } else if (value instanceof Vector2) {\n valueX = valueWidth = value.x;\n valueY = valueHeight = value.y;\n } else {\n valueX = value.x;\n valueY = value.y;\n valueWidth = value.width;\n valueHeight = value.height;\n }\n return new _BBox(\n map(from.x, to.x, valueX),\n map(from.y, to.y, valueY),\n map(from.width, to.width, valueWidth),\n map(from.height, to.height, valueHeight)\n );\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = (from.position.sub(to.position).ctg + from.size.sub(to.size).ctg) / 2);\n return _BBox.lerp(from, to, new Vector2(arcLerp(value, reverse, ratio)));\n }\n static fromSizeCentered(size) {\n return new _BBox(-size.width / 2, -size.height / 2, size.width, size.height);\n }\n static fromPoints(...points) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const point of points) {\n if (point.x > maxX) {\n maxX = point.x;\n }\n if (point.x < minX) {\n minX = point.x;\n }\n if (point.y > maxY) {\n maxY = point.y;\n }\n if (point.y < minY) {\n minY = point.y;\n }\n }\n return new _BBox(minX, minY, maxX - minX, maxY - minY);\n }\n static fromBBoxes(...boxes) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const box of boxes) {\n const right = box.x + box.width;\n if (right > maxX) {\n maxX = right;\n }\n if (box.x < minX) {\n minX = box.x;\n }\n const bottom = box.y + box.height;\n if (bottom > maxY) {\n maxY = bottom;\n }\n if (box.y < minY) {\n minY = box.y;\n }\n }\n return new _BBox(minX, minY, maxX - minX, maxY - minY);\n }\n lerp(to, value) {\n return _BBox.lerp(this, to, value);\n }\n get position() {\n return new Vector2(this.x, this.y);\n }\n set position(value) {\n this.x = value.x;\n this.y = value.y;\n }\n get size() {\n return new Vector2(this.width, this.height);\n }\n get center() {\n return new Vector2(this.x + this.width / 2, this.y + this.height / 2);\n }\n get left() {\n return this.x;\n }\n set left(value) {\n this.width += this.x - value;\n this.x = value;\n }\n get right() {\n return this.x + this.width;\n }\n set right(value) {\n this.width = value - this.x;\n }\n get top() {\n return this.y;\n }\n set top(value) {\n this.height += this.y - value;\n this.y = value;\n }\n get bottom() {\n return this.y + this.height;\n }\n set bottom(value) {\n this.height = value - this.y;\n }\n get topLeft() {\n return this.position;\n }\n get topRight() {\n return new Vector2(this.x + this.width, this.y);\n }\n get bottomLeft() {\n return new Vector2(this.x, this.y + this.height);\n }\n get bottomRight() {\n return new Vector2(this.x + this.width, this.y + this.height);\n }\n get corners() {\n return [this.topLeft, this.topRight, this.bottomRight, this.bottomLeft];\n }\n get pixelPerfect() {\n return new _BBox(\n Math.floor(this.x),\n Math.floor(this.y),\n Math.ceil(this.width + 1),\n Math.ceil(this.height + 1)\n );\n }\n transform(matrix) {\n return new _BBox(\n transformVectorAsPoint(this.position, matrix),\n transformVector(this.size, matrix)\n );\n }\n transformCorners(matrix) {\n return this.corners.map((corner) => transformVectorAsPoint(corner, matrix));\n }\n /**\n * Expand the bounding box to accommodate the given spacing.\n *\n * @param value - The value to expand the bounding box by.\n */\n expand(value) {\n const spacing = new Spacing(value);\n const result = new _BBox(this);\n result.left -= spacing.left;\n result.top -= spacing.top;\n result.right += spacing.right;\n result.bottom += spacing.bottom;\n return result;\n }\n /**\n * {@inheritDoc expand}\n *\n * @deprecated Use {@link expand} instead.\n */\n addSpacing(value) {\n return this.expand(value);\n }\n includes(point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n }\n intersects(other) {\n return this.left < other.right && this.right > other.left && this.top < other.bottom && this.bottom > other.top;\n }\n intersection(other) {\n const bbox = new _BBox();\n if (this.intersects(other)) {\n bbox.left = Math.max(this.left, other.left);\n bbox.top = Math.max(this.top, other.top);\n bbox.right = Math.min(this.right, other.right);\n bbox.bottom = Math.min(this.bottom, other.bottom);\n }\n return bbox;\n }\n union(other) {\n const bbox = new _BBox();\n bbox.left = Math.min(this.left, other.left);\n bbox.top = Math.min(this.top, other.top);\n bbox.right = Math.max(this.right, other.right);\n bbox.bottom = Math.max(this.bottom, other.bottom);\n return bbox;\n }\n toSymbol() {\n return _BBox.symbol;\n }\n toString() {\n return `BBox(${this.x}, ${this.y}, ${this.width}, ${this.height})`;\n }\n toUniform(gl, location) {\n gl.uniform4f(location, this.x, this.y, this.width, this.height);\n }\n serialize() {\n return { x: this.x, y: this.y, width: this.width, height: this.height };\n }\n};\n_BBox.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Rect\");\nvar BBox = _BBox;\n\n// src/types/Color.ts\nimport { converter, formatHex8, interpolate, parse } from \"culori\";\nfunction parseNumber(num) {\n const r = num >> 16 & 255;\n const g = num >> 8 & 255;\n const b = num & 255;\n return [r / 255, g / 255, b / 255, 1];\n}\nvar _Color = class _Color {\n constructor(value) {\n this.symbol = _Color.symbol;\n if (value === void 0 || value === null) {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 1;\n return;\n }\n if (value instanceof _Color) {\n this.r = value.r;\n this.g = value.g;\n this.b = value.b;\n this.a = value.a;\n return;\n }\n if (typeof value === \"string\") {\n const parsedColor = parse(value);\n if (!parsedColor) {\n throw new Error(`Invalid color string value provided: ${value}`);\n }\n const rgbColor = parsedColor.mode === \"rgb\" ? parsedColor : converter(\"rgb\")(parsedColor);\n if (rgbColor) {\n this.r = clamp(0, 1, rgbColor.r);\n this.g = clamp(0, 1, rgbColor.g);\n this.b = clamp(0, 1, rgbColor.b);\n this.a = clamp(0, 1, rgbColor.alpha ?? 1);\n return;\n }\n }\n if (typeof value === \"number\") {\n const [r, g, b, a] = parseNumber(value);\n this.r = clamp(0, 1, r);\n this.g = clamp(0, 1, g);\n this.b = clamp(0, 1, b);\n this.a = clamp(0, 1, a);\n return;\n }\n if (typeof value === \"object\") {\n if (\"r\" in value && \"g\" in value && \"b\" in value) {\n const obj = value;\n this.r = clamp(0, 1, obj.r / 255);\n this.g = clamp(0, 1, obj.g / 255);\n this.b = clamp(0, 1, obj.b / 255);\n this.a = clamp(0, 1, obj.a ?? 1);\n return;\n }\n }\n throw new Error(`Invalid color value provided: ${value}`);\n }\n /**\n * Interpolates between two colors using LCH color space.\n */\n static lerp(from, to, value, mode = \"lch\") {\n const fromColor = from instanceof _Color ? from : new _Color(from ?? void 0);\n const toColor = to instanceof _Color ? to : new _Color(to ?? void 0);\n const startColorCulori = {\n mode: \"rgb\",\n r: fromColor.r,\n g: fromColor.g,\n b: fromColor.b\n };\n const endColorCulori = {\n mode: \"rgb\",\n r: toColor.r,\n g: toColor.g,\n b: toColor.b\n };\n const interpolationMode = mode ?? \"lch\";\n const interpolator = interpolate(\n [startColorCulori, endColorCulori],\n interpolationMode\n // Use specified interpolation space (casting to bypass TS error)\n );\n const interpolatedLch = interpolator(value);\n const rgbConverter = converter(\"rgb\");\n const interpolatedRgb = rgbConverter(interpolatedLch);\n const a = fromColor.a + (toColor.a - fromColor.a) * value;\n const finalR = interpolatedRgb ? clamp(0, 1, interpolatedRgb.r) : 0;\n const finalG = interpolatedRgb ? clamp(0, 1, interpolatedRgb.g) : 0;\n const finalB = interpolatedRgb ? clamp(0, 1, interpolatedRgb.b) : 0;\n return new _Color({\n r: finalR * 255,\n g: finalG * 255,\n b: finalB * 255,\n a: clamp(0, 1, a)\n // Also clamp alpha just in case\n });\n }\n /**\n * Creates an interpolation function for colors (uses LCH space via culori).\n */\n static createLerp(mode = \"lch\") {\n return (from, to, value) => _Color.lerp(from, to, value, mode);\n }\n /**\n * Creates a signal for the Color type.\n */\n static createSignal(initial, interpolation = _Color.lerp) {\n return new SignalContext(\n initial,\n interpolation,\n void 0,\n (value) => value instanceof _Color ? value : new _Color(value)\n ).toSignal();\n }\n toSymbol() {\n return this.symbol;\n }\n /**\n * Returns the color components as a [r, g, b, a] array (0-1 range).\n */\n gl() {\n return [this.r, this.g, this.b, this.a];\n }\n toUniform(gl, location) {\n gl.uniform4fv(location, this.gl());\n }\n /**\n * Serializes the color to an `rgba()` CSS string.\n */\n serialize() {\n const r = Math.round(this.r * 255);\n const g = Math.round(this.g * 255);\n const b = Math.round(this.b * 255);\n const alphaStr = clamp(0, 1, this.a).toFixed(3);\n return `rgba(${r}, ${g}, ${b}, ${alphaStr})`;\n }\n /**\n * Serializes the color to an `rgb()` CSS string (omitting alpha).\n */\n css() {\n const r = Math.round(this.r * 255);\n const g = Math.round(this.g * 255);\n const b = Math.round(this.b * 255);\n return `rgb(${r},${g},${b})`;\n }\n /**\n * Returns the alpha value of the color (0-1 range).\n */\n alpha() {\n return this.a;\n }\n /**\n * Serializes the color to an RRGGBBAA hex string using culori.\n */\n hex() {\n return formatHex8({\n mode: \"rgb\",\n r: this.r,\n g: this.g,\n b: this.b,\n alpha: this.a\n });\n }\n /**\n * Linearly interpolates from this color to another using LCH space.\n */\n lerp(to, value, mode = \"lch\") {\n return _Color.lerp(this, to, value, mode);\n }\n};\n_Color.symbol = /* @__PURE__ */ Symbol.for(\"@twick/core/types/Color\");\nvar Color = _Color;\n\n// src/types/Matrix.ts\nfunction transformAngle(angle, matrix) {\n const degreeVector = Vector2.fromDegrees(angle);\n return transformVector(degreeVector, matrix).degrees;\n}\nfunction transformScalar(scalar, matrix) {\n return Vector2.magnitude(matrix.m11, matrix.m12) * scalar;\n}\n\n// src/types/Origin.ts\nfunction flipOrigin(origin, axis = 2 /* Horizontal */ | 1 /* Vertical */) {\n if (axis & 1 /* Vertical */) {\n if (origin & 4 /* Top */) {\n origin = origin & ~4 /* Top */ | 8 /* Bottom */;\n } else if (origin & 8 /* Bottom */) {\n origin = origin & ~8 /* Bottom */ | 4 /* Top */;\n }\n }\n if (axis & 2 /* Horizontal */) {\n if (origin & 16 /* Left */) {\n origin = origin & ~16 /* Left */ | 32 /* Right */;\n } else if (origin & 32 /* Right */) {\n origin = origin & ~32 /* Right */ | 16 /* Left */;\n }\n }\n return origin;\n}\nfunction originToOffset(origin) {\n if (origin === 3 /* Middle */) {\n return Vector2.zero;\n }\n let x = 0;\n if (origin & 16 /* Left */) {\n x = -1;\n } else if (origin & 32 /* Right */) {\n x = 1;\n }\n let y = 0;\n if (origin & 4 /* Top */) {\n y = -1;\n } else if (origin & 8 /* Bottom */) {\n y = 1;\n }\n return new Vector2(x, y);\n}\n\n// src/app/Project.ts\nfunction createVersionObject(version) {\n return {\n core: version,\n two: version,\n ui: version,\n vitePlugin: version\n };\n}\n\n// src/app/makeProject.ts\nvar defaultUserProjectSettings = {\n shared: {\n background: \"FFFFFF00\",\n range: [0, Infinity],\n size: { x: 1920, y: 1080 }\n },\n rendering: {\n exporter: {\n name: \"@twick/core/wasm\"\n },\n fps: 30,\n resolutionScale: 1,\n colorSpace: \"srgb\"\n },\n preview: {\n fps: 30,\n resolutionScale: 1\n }\n};\nfunction makeProject(project) {\n void DefaultPlugin_default;\n const settings = {\n ...defaultUserProjectSettings,\n ...project.settings,\n shared: {\n ...defaultUserProjectSettings.shared,\n ...project.settings?.shared\n },\n rendering: {\n ...defaultUserProjectSettings.rendering,\n ...project.settings?.rendering\n },\n preview: {\n ...defaultUserProjectSettings.preview,\n ...project.settings?.preview\n }\n };\n const convertedSettings = {\n ...settings,\n shared: {\n ...settings.shared,\n background: new Color(settings.shared.background),\n size: new Vector2(settings.shared.size)\n }\n };\n return {\n ...project,\n name: project.name ?? \"project\",\n settings: convertedSettings,\n plugins: [],\n logger: new Logger(),\n versions: createVersionObject(\"0.10.4\")\n };\n}\nasync function addEditorToProject(project) {\n const url = \"/@id/@twick/2d/editor\";\n const imported = await import(\n /* webpackIgnore: true */\n /* @vite-ignore */\n url\n );\n const plugin = imported.default();\n return {\n ...project,\n plugins: [...project.plugins, plugin]\n };\n}\n\n// src/app/PlaybackManager.ts\nvar PlaybackState = /* @__PURE__ */ ((PlaybackState2) => {\n PlaybackState2[PlaybackState2[\"Playing\"] = 0] = \"Playing\";\n PlaybackState2[PlaybackState2[\"Rendering\"] = 1] = \"Rendering\";\n PlaybackState2[PlaybackState2[\"Paused\"] = 2] = \"Paused\";\n PlaybackState2[PlaybackState2[\"Presenting\"] = 3] = \"Presenting\";\n return PlaybackState2;\n})(PlaybackState || {});\nvar PlaybackManager = class {\n constructor() {\n this.frame = 0;\n this.speed = 1;\n this.fps = 30;\n this.duration = 0;\n this.finished = false;\n this.slides = [];\n this.previousScene = null;\n this.state = 2 /* Paused */;\n this.currentSceneReference = null;\n this.scenes = new ValueDispatcher([]);\n }\n /**\n * Triggered when the active scene changes.\n *\n * @eventProperty\n */\n get onSceneChanged() {\n if (this.currentSceneReference === null) {\n throw new Error(\"PlaybackManager has not been properly initialized\");\n }\n return this.currentSceneReference.subscribable;\n }\n /**\n * Triggered when the scenes get recalculated.\n *\n * @remarks\n * This event indicates that the timing of at least one scene has changed.\n *\n * @eventProperty\n */\n get onScenesRecalculated() {\n return this.scenes.subscribable;\n }\n get currentScene() {\n if (this.currentSceneReference === null) {\n throw new Error(\"PlaybackManager has not been properly initialized\");\n }\n return this.currentSceneReference.current;\n }\n set currentScene(scene) {\n if (!scene) {\n throw new Error(\"Invalid scene.\");\n }\n this.currentSceneReference ?? (this.currentSceneReference = new ValueDispatcher(scene));\n this.currentSceneReference.current = scene;\n }\n setup(scenes) {\n this.scenes.current = scenes;\n this.currentScene = scenes[0];\n }\n async progress() {\n this.finished = await this.next();\n return this.finished;\n }\n async seek(frame) {\n if (frame <= this.frame || this.currentScene.isCached() && this.currentScene.lastFrame < frame) {\n const scene = this.findBestScene(frame);\n if (scene !== this.currentScene) {\n this.currentScene.stopAllMedia();\n this.previousScene = null;\n this.currentScene = scene;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n } else if (this.frame >= frame) {\n this.previousScene = null;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n }\n this.finished = false;\n while (this.frame < frame && !this.finished) {\n this.finished = await this.next();\n }\n return this.finished;\n }\n async reset() {\n this.previousScene = null;\n this.currentScene = this.scenes.current[0];\n this.frame = 0;\n await this.currentScene.reset();\n }\n reload(description) {\n this.scenes.current.forEach((scene) => scene.reload(description));\n }\n async recalculate() {\n this.previousScene = null;\n this.slides = [];\n const speed = this.speed;\n this.frame = 0;\n this.speed = 1;\n const scenes = [];\n try {\n for (const scene of this.scenes.current) {\n await scene.recalculate((frame) => {\n this.frame = frame;\n });\n this.slides.push(...scene.slides.onChanged.current);\n scenes.push(scene);\n }\n } finally {\n this.speed = speed;\n }\n this.scenes.current = scenes;\n this.duration = this.frame;\n }\n async next() {\n if (this.previousScene) {\n await this.previousScene.next();\n if (this.currentScene.isFinished()) {\n this.previousScene = null;\n }\n }\n this.frame += this.speed;\n if (this.currentScene.isFinished()) {\n return true;\n }\n await this.currentScene.next();\n if (this.previousScene && this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n if (this.currentScene.canTransitionOut()) {\n this.previousScene = this.currentScene;\n const nextScene = this.getNextScene(this.previousScene);\n if (nextScene) {\n this.previousScene.stopAllMedia();\n this.currentScene = nextScene;\n await this.currentScene.reset(this.previousScene);\n }\n if (!nextScene || this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n }\n return this.currentScene.isFinished();\n }\n findBestScene(frame) {\n let lastScene = this.scenes.current[0];\n for (const scene of this.scenes.current) {\n if (!scene.isCached() || scene.lastFrame > frame) {\n return scene;\n }\n lastScene = scene;\n }\n return lastScene;\n }\n getNextScene(scene) {\n const scenes = this.scenes.current;\n if (!scene) {\n return scenes[0];\n }\n const index = scenes.findIndex((s) => s === scene);\n if (index < 0) {\n return null;\n }\n return scenes[index + 1] ?? null;\n }\n};\n\n// src/app/PlaybackStatus.ts\nvar PlaybackStatus = class {\n constructor(playback) {\n this.playback = playback;\n }\n /**\n * Convert seconds to frames using the current framerate.\n *\n * @param seconds - The seconds to convert.\n */\n secondsToFrames(seconds) {\n return Math.ceil(seconds * this.playback.fps);\n }\n /**\n * Convert frames to seconds using the current framerate.\n *\n * @param frames - The frames to convert.\n */\n framesToSeconds(frames) {\n return frames / this.playback.fps;\n }\n get time() {\n return this.framesToSeconds(this.playback.frame);\n }\n get frame() {\n return this.playback.frame;\n }\n get speed() {\n return this.playback.speed;\n }\n get fps() {\n return this.playback.fps;\n }\n get state() {\n return this.playback.state;\n }\n /**\n * The time passed since the last frame in seconds.\n */\n get deltaTime() {\n return this.framesToSeconds(1) * this.speed;\n }\n};\n\n// src/app/SharedWebGLContext.ts\nvar SOURCE_URL_REGEX = /^\\/\\/# sourceURL=(.*)$/gm;\nvar INFO_LOG_REGEX = /ERROR: \\d+:(\\d+): (.*)/g;\nvar INFO_TOKEN_REGEX = /^'([^']+)'/;\nvar includeWithoutPreprocessor = `\nThe \\`#include\\` directive requires the use of a preprocessor.\n\nMake sure to import the shader from a file:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl';\n\\`\\`\\`\n\nDo **NOT** use the raw loader:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl?raw';\n\\`\\`\\`\n\nDo **NOT** use \\`#include\\` in an inline string:\n\n\\`\\`\\`ts\nconst shader = \\`\\\\\n#include \"example.glsl\"\n\\`;\n\\`\\`\\`\n\n[Learn more](https://motioncanvas.io/docs/shaders) about working with shaders.\n`;\nvar SharedWebGLContext = class {\n constructor(logger) {\n this.logger = logger;\n this.gl = null;\n this.currentOwner = null;\n this.programLookup = /* @__PURE__ */ new Map();\n }\n borrow(owner) {\n if (this.currentOwner === owner) {\n return this.gl;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = owner;\n this.currentOwner.setup(this.getGL());\n return this.gl;\n }\n /**\n * Dispose the WebGL context to free up resources.\n */\n dispose() {\n if (!this.gl) {\n return;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = null;\n this.gl.useProgram(null);\n for (const { program, fragment, vertex } of this.programLookup.values()) {\n this.gl.deleteProgram(program);\n this.gl.deleteShader(fragment);\n this.gl.deleteShader(vertex);\n }\n this.programLookup.clear();\n this.gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n this.gl.canvas.remove();\n this.gl = null;\n }\n getProgram(fragment, vertex) {\n const key = `${fragment}#${vertex}`;\n if (this.programLookup.has(key)) {\n return this.programLookup.get(key).program;\n }\n const gl = this.getGL();\n const fragmentShader = this.getShader(gl.FRAGMENT_SHADER, fragment);\n const vertexShader = this.getShader(gl.VERTEX_SHADER, vertex);\n if (!fragmentShader || !vertexShader) {\n return null;\n }\n const program = gl.createProgram();\n gl.attachShader(program, fragmentShader);\n gl.attachShader(program, vertexShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n this.logger.error({\n message: \"Failed to initialize the shader program.\",\n remarks: gl.getProgramInfoLog(program) ?? void 0,\n stack: new Error().stack\n });\n gl.deleteProgram(program);\n return null;\n }\n this.programLookup.set(key, {\n program,\n fragment: fragmentShader,\n vertex: vertexShader\n });\n return program;\n }\n getShader(type, source) {\n const gl = this.getGL();\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(shader);\n logGlslError(this.logger, log, source);\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n }\n getGL() {\n if (this.gl) {\n return this.gl;\n }\n this.gl = document.createElement(\"canvas\").getContext(\"webgl2\", {\n depth: false,\n premultipliedAlpha: false,\n stencil: false,\n powerPreference: \"high-performance\"\n });\n if (!this.gl) {\n throw new Error(\"Failed to initialize WebGL.\");\n }\n return this.gl;\n }\n};\nfunction logGlslError(logger, log, source) {\n let sourceUrl = null;\n SOURCE_URL_REGEX.lastIndex = 0;\n const sourceMatch = SOURCE_URL_REGEX.exec(source);\n if (sourceMatch) {\n const url = new URL(sourceMatch[1], window.location.origin);\n url.searchParams.set(\"t\", Date.now().toString());\n sourceUrl = url.toString();\n }\n if (!log) {\n logger.error({\n message: `Unknown shader compilation error.`,\n stack: fakeStackTrace(sourceUrl, 1, 0)\n });\n return null;\n }\n let logged = false;\n let result;\n while (result = INFO_LOG_REGEX.exec(log)) {\n const [, line, message] = result;\n let column = 0;\n const match = message.match(INFO_TOKEN_REGEX);\n if (match) {\n const tokenLine = source.split(\"\\n\")[parseInt(line) - 1];\n const index = tokenLine.indexOf(match[1]);\n if (index !== -1) {\n column = index;\n }\n if (match[1] === \"include\") {\n const line2 = source.split(\"\\n\").find((line3) => line3.startsWith(\"#include\"));\n if (line2) {\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n remarks: includeWithoutPreprocessor\n });\n break;\n }\n }\n }\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n stack: fakeStackTrace(sourceUrl, line, column)\n });\n }\n if (!logged) {\n logger.error({\n message: `Shader compilation error: ${log}`,\n stack: fakeStackTrace(sourceUrl, 1, 0)\n });\n }\n}\nfunction fakeStackTrace(file, line, column) {\n if (!file) {\n return void 0;\n }\n return navigator.userAgent.toLowerCase().includes(\"chrome\") ? ` at (${file}:${line}:${column})` : `@${file}:${line}:${column}`;\n}\n\n// src/app/Player.ts\nvar Player = class {\n constructor(project, settings = {}, initialState = {}, initialFrame = -1) {\n this.project = project;\n this.settings = settings;\n this.initialState = initialState;\n this.initialFrame = initialFrame;\n this.render = new AsyncEventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.duration = new ValueDispatcher(0);\n this.recalculated = new EventDispatcher();\n this.lock = new Semaphore();\n this.startTime = 0;\n this.endTime = Infinity;\n this.requestId = null;\n this.renderTime = 0;\n this.requestedSeek = -1;\n this.requestedRender = false;\n this.requestedRecalculation = true;\n this.active = false;\n this.playerState = new ValueDispatcher({\n loop: true,\n muted: true,\n volume: 1,\n speed: 1,\n ...initialState,\n paused: true\n });\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n this.requestedSeek = initialFrame;\n this.logger = this.project.logger;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.size = settings.size ?? new Vector2(1920, 1080);\n this.resolutionScale = settings.resolutionScale ?? 1;\n this.startTime = settings.range?.[0] ?? 0;\n this.endTime = settings.range?.[1] ?? Infinity;\n this.playback.fps = settings.fps ?? 60;\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: this.size,\n resolutionScale: this.resolutionScale,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures\n });\n scene.onReloaded.subscribe(() => this.requestRecalculation());\n scene.variables.updateSignals(project.variables ?? {});\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n this.activate();\n }\n /**\n * Triggered during each iteration of the update loop when the frame is ready\n * to be rendered.\n *\n * @remarks\n * Player does not perform any rendering on its own. For the animation to be\n * visible, another class must subscribe to this event and perform the\n * rendering itself. {@link Stage} can be used to display the animation.\n *\n * @eventProperty\n */\n get onRender() {\n return this.render.subscribable;\n }\n get onStateChanged() {\n return this.playerState.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n get onDurationChanged() {\n return this.duration.subscribable;\n }\n /**\n * Triggered right after recalculation finishes.\n *\n * @remarks\n * Can be used to provide visual feedback.\n *\n * @eventProperty\n */\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get startFrame() {\n return Math.min(\n this.playback.duration,\n this.status.secondsToFrames(this.startTime)\n );\n }\n get endFrame() {\n return Math.min(\n this.playback.duration,\n this.status.secondsToFrames(this.endTime)\n );\n }\n get finished() {\n return this.playback.finished || this.playback.frame >= this.endFrame;\n }\n async configure(settings) {\n await this.lock.acquire();\n let frame = this.playback.frame;\n let recalculate = false;\n this.startTime = settings.range[0];\n this.endTime = settings.range[1];\n const newFps = Math.max(1, settings.fps);\n if (this.playback.fps !== newFps) {\n const ratio = newFps / this.playback.fps;\n this.playback.fps = newFps;\n frame = Math.floor(frame * ratio);\n recalculate = true;\n }\n if (!settings.size.exactlyEquals(this.size) || settings.resolutionScale !== this.resolutionScale) {\n this.size = settings.size;\n this.resolutionScale = settings.resolutionScale;\n this.playback.reload({\n size: this.size,\n resolutionScale: this.resolutionScale\n });\n }\n this.lock.release();\n if (recalculate) {\n this.playback.reload();\n this.frame.current = frame;\n this.requestRecalculation();\n this.requestedSeek = frame;\n }\n }\n /**\n * Whether the given frame is inside the animation range.\n *\n * @param frame - The frame to check.\n */\n isInRange(frame) {\n return frame >= 0 && frame <= this.playback.duration;\n }\n /**\n * Whether the given frame is inside the user-defined range.\n *\n * @param frame - The frame to check.\n */\n isInUserRange(frame) {\n return frame >= this.startFrame && frame <= this.endFrame;\n }\n requestSeek(value) {\n this.requestedSeek = this.clampRange(value);\n }\n requestPreviousFrame() {\n this.requestedSeek = this.frame.current - this.playback.speed;\n }\n requestNextFrame() {\n this.requestedSeek = this.frame.current + this.playback.speed;\n }\n requestReset() {\n this.requestedSeek = 0;\n }\n requestRender() {\n this.requestedRender = true;\n }\n toggleLoop(value = !this.playerState.current.loop) {\n if (value !== this.playerState.current.loop) {\n this.playerState.current = {\n ...this.playerState.current,\n loop: value\n };\n }\n }\n togglePlayback(value = this.playerState.current.paused) {\n if (value === this.playerState.current.paused) {\n this.playerState.current = {\n ...this.playerState.current,\n paused: !value\n };\n if (value && !this.playerState.current.loop && this.playback.frame === this.playback.duration) {\n this.requestReset();\n }\n }\n }\n toggleAudio(value = this.playerState.current.muted) {\n if (value === this.playerState.current.muted) {\n this.playerState.current = {\n ...this.playerState.current,\n muted: !value\n };\n }\n }\n setAudioVolume(value) {\n const clampedValue = clamp(0, 1, value);\n if (clampedValue !== this.playerState.current.volume) {\n this.playerState.current = {\n ...this.playerState.current,\n volume: clampedValue\n };\n }\n }\n addAudioVolume(value) {\n this.setAudioVolume(this.playerState.current.volume + value);\n }\n setSpeed(value) {\n if (value !== this.playerState.current.speed) {\n this.playback.speed = value;\n this.playback.reload();\n this.playerState.current = {\n ...this.playerState.current,\n speed: value\n };\n this.requestRecalculation();\n }\n }\n setVariables(variables) {\n for (const scene of this.playback.onScenesRecalculated.current) {\n scene.variables.updateSignals(variables);\n }\n }\n /**\n * Activate the player.\n *\n * @remarks\n * A player needs to be active in order for the update loop to run. Each\n * player is active by default.\n */\n activate() {\n this.active = true;\n this.request();\n }\n /**\n * Deactivate the player.\n *\n * @remarks\n * Deactivating the player prevents its update loop from running. This should\n * be done before disposing the player, to prevent it from running in the\n * background.\n *\n * Just pausing the player does not stop the loop.\n */\n deactivate() {\n this.active = false;\n this.sharedWebGLContext.dispose();\n this.playback.currentScene.stopAllMedia();\n if (this.requestId !== null) {\n cancelAnimationFrame(this.requestId);\n this.requestId = null;\n }\n }\n requestRecalculation() {\n this.requestedRecalculation = true;\n this.request();\n }\n async prepare() {\n const state = {\n ...this.playerState.current,\n seek: this.requestedSeek,\n render: this.requestedRender\n };\n this.requestedSeek = -1;\n this.requestedRender = false;\n if (this.requestedRecalculation) {\n if (state.seek < 0) {\n state.seek = this.playback.frame;\n }\n try {\n await this.playback.recalculate();\n this.duration.current = this.playback.frame;\n this.recalculated.dispatch();\n } catch (e) {\n this.requestSeek(state.seek);\n throw e;\n } finally {\n this.requestedRecalculation = false;\n }\n }\n if (!state.loop && this.finished && !state.paused && state.seek < 0 || this.endFrame === this.startFrame) {\n this.togglePlayback(false);\n state.paused = true;\n state.seek = this.endFrame === this.startFrame ? state.seek : this.startFrame;\n }\n if (state.loop && (state.seek > this.endFrame || this.finished && !state.paused) && this.startFrame !== this.endTime) {\n state.seek = this.startFrame;\n }\n return state;\n }\n async run() {\n const state = await this.prepare();\n const previousState = this.playback.state;\n this.playback.state = state.paused ? 2 /* Paused */ : 0 /* Playing */;\n if (state.seek >= 0 || !this.isInUserRange(this.status.frame)) {\n const seekFrame = state.seek < 0 ? this.status.frame : state.seek;\n const clampedFrame = this.clampRange(seekFrame);\n this.logger.profile(\"seek time\");\n await this.playback.seek(clampedFrame);\n this.logger.profile(\"seek time\");\n } else if (state.paused) {\n if (state.render || state.paused && previousState !== 2 /* Paused */) {\n await this.render.dispatch();\n }\n this.request();\n return;\n } else if (this.status.frame < this.endFrame) {\n await this.playback.progress();\n }\n if (!state.paused && this.playback.currentScene.slides.isWaiting()) {\n this.togglePlayback(false);\n state.paused = true;\n }\n await this.render.dispatch();\n this.frame.current = this.playback.frame;\n this.request();\n }\n request() {\n if (!this.active) return;\n this.requestId ?? (this.requestId = requestAnimationFrame(async (time) => {\n this.requestId = null;\n if (time - this.renderTime >= 1e3 / (this.status.fps + 5)) {\n this.renderTime = time;\n await this.lock.acquire();\n try {\n await this.run();\n } catch (e) {\n this.logger.error(e);\n }\n this.lock.release();\n } else {\n this.request();\n }\n }));\n }\n clampRange(frame) {\n return clamp(this.startFrame, this.endFrame, frame);\n }\n};\n\n// src/app/project-settings.ts\nfunction getFullPreviewSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.preview\n };\n}\nfunction getFullRenderingSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.rendering\n };\n}\n\n// src/app/Stage.ts\nvar Stage = class {\n constructor() {\n // TODO Consider adding pooling for canvases.\n this.background = null;\n this.resolutionScale = 1;\n this.colorSpace = \"srgb\";\n this.size = Vector2.zero;\n this.finalBuffer = document.createElement(\"canvas\");\n this.currentBuffer = document.createElement(\"canvas\");\n this.previousBuffer = document.createElement(\"canvas\");\n const colorSpace = this.colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n get canvasSize() {\n return this.size.scale(this.resolutionScale);\n }\n configure({\n colorSpace = this.colorSpace,\n size = this.size,\n resolutionScale = this.resolutionScale,\n background = this.background\n }) {\n if (colorSpace !== this.colorSpace) {\n this.colorSpace = colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n if (!size.exactlyEquals(this.size) || resolutionScale !== this.resolutionScale) {\n this.resolutionScale = resolutionScale;\n this.size = size;\n this.resizeCanvas(this.context);\n this.resizeCanvas(this.currentContext);\n this.resizeCanvas(this.previousContext);\n }\n this.background = typeof background === \"string\" ? background : background?.serialize() ?? null;\n }\n async render(currentScene, previousScene) {\n const previousOnTop = previousScene ? unwrap(currentScene.previousOnTop) : false;\n if (previousScene) {\n await previousScene.render(this.previousContext);\n }\n await currentScene.render(this.currentContext);\n const size = this.canvasSize;\n this.context.clearRect(0, 0, size.width, size.height);\n if (this.background) {\n this.context.save();\n this.context.fillStyle = this.background;\n this.context.fillRect(0, 0, size.width, size.height);\n this.context.restore();\n }\n if (previousScene && !previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n this.context.drawImage(this.currentBuffer, 0, 0);\n if (previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n }\n resizeCanvas(context) {\n const size = this.canvasSize;\n context.canvas.width = size.width;\n context.canvas.height = size.height;\n }\n};\n\n// src/app/TimeEstimator.ts\nvar TimeEstimator = class {\n constructor() {\n this.completion = new ValueDispatcher(0);\n this.startTimestamp = 0;\n this.lastUpdateTimestamp = 0;\n this.nextCompletion = 0;\n }\n get onCompletionChanged() {\n return this.completion.subscribable;\n }\n /**\n * Get the current time estimate.\n *\n * @param timestamp - The timestamp to calculate the estimate against.\n * Defaults to `performance.now()`.\n */\n estimate(timestamp = performance.now()) {\n const elapsed = timestamp - this.startTimestamp;\n const completion = this.completion.current;\n let eta = Infinity;\n if (completion >= 1) {\n eta = 0;\n } else if (completion > 0) {\n const lastUpdateDuration = this.lastUpdateTimestamp - this.startTimestamp;\n eta = lastUpdateDuration / completion - elapsed;\n eta = Math.max(0, eta);\n } else if (this.nextCompletion > 0) {\n eta = elapsed / this.nextCompletion - elapsed;\n }\n return { completion, elapsed, eta };\n }\n /**\n * Update the completion percentage.\n *\n * @param completion - The completion percentage ranging from `0` to `1`.\n * @param timestamp - A timestamp at which the process was updated.\n * Defaults to `performance.now()`.\n */\n update(completion, timestamp = performance.now()) {\n this.completion.current = clamp(0, 1, completion);\n this.lastUpdateTimestamp = timestamp;\n }\n reportProgress() {\n if (window.logProgress) {\n window.logProgress(this.completion.current);\n }\n }\n /**\n * Reset the estimator.\n *\n * @param nextCompletion - If known, the completion percentage of the next\n * update.\n * @param timestamp - A timestamp at which the process started.\n * Defaults to `performance.now()`.\n */\n reset(nextCompletion = 0, timestamp = performance.now()) {\n this.startTimestamp = timestamp;\n this.lastUpdateTimestamp = timestamp;\n this.completion.current = 0;\n this.nextCompletion = nextCompletion;\n }\n};\n\n// src/app/Renderer.ts\nvar RendererState = /* @__PURE__ */ ((RendererState2) => {\n RendererState2[RendererState2[\"Initial\"] = 0] = \"Initial\";\n RendererState2[RendererState2[\"Working\"] = 1] = \"Working\";\n RendererState2[RendererState2[\"Aborting\"] = 2] = \"Aborting\";\n return RendererState2;\n})(RendererState || {});\nvar RendererResult = /* @__PURE__ */ ((RendererResult2) => {\n RendererResult2[RendererResult2[\"Success\"] = 0] = \"Success\";\n RendererResult2[RendererResult2[\"Error\"] = 1] = \"Error\";\n RendererResult2[RendererResult2[\"Aborted\"] = 2] = \"Aborted\";\n return RendererResult2;\n})(RendererResult || {});\nvar Renderer = class {\n constructor(project) {\n this.project = project;\n this.state = new ValueDispatcher(0 /* Initial */);\n this.finished = new EventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.stage = new Stage();\n this.estimator = new TimeEstimator();\n this.lock = new Semaphore();\n this.exporter = null;\n this.abortController = null;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: new Vector2(1920, 1080),\n resolutionScale: 1,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures\n });\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n }\n get onStateChanged() {\n return this.state.subscribable;\n }\n get onFinished() {\n return this.finished.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n /**\n * Returns number of frames that a project will have.\n */\n async getNumberOfFrames(settings) {\n await this.lock.acquire();\n this.estimator.reset();\n this.state.current = 1 /* Working */;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const frames = this.playback.duration;\n this.state.current = 0 /* Initial */;\n this.sharedWebGLContext.dispose();\n this.lock.release();\n return frames;\n }\n frameToTime(frame) {\n return this.status.framesToSeconds(frame);\n }\n timeToFrame(second) {\n return this.status.secondsToFrames(second);\n }\n /**\n * Render the animation using the provided settings.\n *\n * @param settings - The rendering settings.\n */\n async render(settings) {\n if (this.state.current !== 0 /* Initial */) return;\n await this.lock.acquire();\n this.estimator.reset();\n this.state.current = 1 /* Working */;\n let result;\n try {\n this.abortController = new AbortController();\n result = await this.run(settings, this.abortController.signal);\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n if (this.exporter) {\n try {\n await this.exporter.stop?.(result);\n } catch (_) {\n throw Error(e.message);\n }\n this.exporter = null;\n throw Error(e.message);\n }\n }\n this.estimator.update(1);\n this.state.current = 0 /* Initial */;\n this.finished.dispatch(result);\n this.sharedWebGLContext.dispose();\n this.lock.release();\n }\n /**\n * Abort the ongoing render process.\n */\n abort() {\n if (this.state.current !== 1 /* Working */) return;\n this.abortController?.abort();\n this.state.current = 2 /* Aborting */;\n }\n /**\n * Export an individual frame.\n *\n * @remarks\n * This method always uses the default `ImageExporter`.\n *\n * @param settings - The rendering settings.\n * @param time - The timestamp to export.\n */\n async renderFrame(settings, time) {\n await this.lock.acquire();\n try {\n const frame = this.status.secondsToFrames(time);\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n await this.reloadScenes(settings);\n await this.playback.reset();\n await this.playback.seek(frame);\n await this.stage.render(\n this.playback.currentScene,\n this.playback.previousScene\n );\n if (import.meta.hot) {\n import.meta.hot.send(\"twick:export\", {\n frame,\n data: this.stage.finalBuffer.toDataURL(\"image/png\"),\n mimeType: \"image/png\",\n subDirectories: [\"still\", this.project.name]\n });\n }\n } catch (e) {\n this.project.logger.error(e);\n }\n this.lock.release();\n }\n async run(settings, signal) {\n const exporters = [\n FFmpegExporterClient,\n ImageExporter,\n WasmExporter\n ];\n const exporterClass = exporters.find(\n (exporter) => exporter.id === settings.exporter.name\n );\n if (!exporterClass) {\n this.project.logger.error(\n `Could not find the \"${settings.exporter.name}\" exporter.`\n );\n return 1 /* Error */;\n }\n this.exporter = await exporterClass.create(this.project, settings);\n if (this.exporter.configuration) {\n settings = {\n ...settings,\n ...await this.exporter.configuration() ?? {}\n };\n }\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n const from = this.status.secondsToFrames(settings.range[0]);\n this.frame.current = from;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const to = Math.min(\n this.playback.duration,\n this.status.secondsToFrames(settings.range[1])\n );\n await this.playback.seek(from);\n if (signal.aborted) return 2 /* Aborted */;\n await this.exporter.start?.();\n let lastRefresh = performance.now();\n let result = 0 /* Success */;\n const mediaByFrames = await this.getMediaByFrames(settings);\n let generateAudioPromise;\n if (this.exporter && this.exporter.generateAudio) {\n generateAudioPromise = this.exporter.generateAudio(\n mediaByFrames,\n from,\n to\n );\n }\n if (this.exporter && this.exporter.downloadVideos) {\n await this.exporter.downloadVideos(mediaByFrames);\n }\n await this.playback.seek(from);\n try {\n this.estimator.reset(1 / (to - from));\n await this.exportFrame(signal);\n this.estimator.update(clampRemap(from, to, 0, 1, this.playback.frame));\n this.estimator.reportProgress();\n if (signal.aborted) {\n result = 2 /* Aborted */;\n } else {\n let finished = false;\n while (!finished) {\n await this.playback.progress();\n await this.exportFrame(signal);\n this.estimator.update(\n clampRemap(from, to, 0, 1, this.playback.frame)\n );\n this.estimator.reportProgress();\n if (performance.now() - lastRefresh > 1 / 30) {\n lastRefresh = performance.now();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n if (this.playback.finished || this.playback.frame >= to) {\n finished = true;\n }\n if (signal.aborted) {\n result = 2 /* Aborted */;\n finished = true;\n }\n }\n }\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n }\n await this.exporter.stop?.(result);\n if (result === 0 /* Success */ && this.exporter && this.exporter.mergeMedia && generateAudioPromise) {\n try {\n await generateAudioPromise;\n await this.exporter.mergeMedia();\n } catch (e) {\n this.project.logger.error(e);\n result = 1 /* Error */;\n }\n }\n await this.exporter?.kill?.();\n this.exporter = null;\n return result;\n }\n async reloadScenes(settings) {\n for (let i = 0; i < this.project.scenes.length; i++) {\n const scene = this.playback.onScenesRecalculated.current[i];\n scene.reload({\n size: settings.size,\n resolutionScale: settings.resolutionScale\n });\n scene.variables.updateSignals(this.project.variables ?? {});\n }\n }\n async exportFrame(signal) {\n this.frame.current = this.playback.frame;\n await this.stage.render(\n this.playback.currentScene,\n this.playback.previousScene\n );\n const sceneFrame = this.playback.frame - this.playback.currentScene.firstFrame;\n await this.exporter.handleFrame(\n this.stage.finalBuffer,\n this.playback.frame,\n sceneFrame,\n this.playback.currentScene.name,\n signal\n );\n }\n async getMediaByFrames(settings) {\n this.stage.configure(settings);\n this.playback.fps = settings.fps;\n this.playback.state = 1 /* Rendering */;\n const from = this.status.secondsToFrames(settings.range[0]);\n this.frame.current = from;\n await this.reloadScenes(settings);\n await this.playback.recalculate();\n await this.playback.reset();\n const to = Math.min(\n this.playback.duration,\n this.status.secondsToFrames(settings.range[1])\n );\n await this.playback.seek(from);\n const mediaAssets = [];\n try {\n const currentMediaAssets = this.playback.currentScene.getMediaAssets();\n mediaAssets.push(currentMediaAssets);\n let finished = false;\n while (!finished) {\n await this.playback.progress();\n mediaAssets.push(this.playback.currentScene.getMediaAssets());\n if (this.playback.finished || this.playback.frame >= to) {\n finished = true;\n }\n }\n } catch (e) {\n this.project.logger.error(e);\n }\n return mediaAssets;\n }\n};\n\n// src/media/loadImage.ts\nvar Canvas;\nvar Context;\nfunction loadImage(source) {\n const image = new Image();\n image.src = source;\n return new Promise((resolve, reject) => {\n if (image.complete) {\n resolve(image);\n } else {\n image.onload = () => resolve(image);\n image.onerror = reject;\n }\n });\n}\nfunction loadAnimation(sources) {\n return Promise.all(sources.map(loadImage));\n}\nfunction getImageData(image) {\n Canvas ?? (Canvas = document.createElement(\"canvas\"));\n Context ?? (Context = getContext({ willReadFrequently: true }, Canvas));\n Canvas.width = image.width;\n Canvas.height = image.height;\n Context.clearRect(0, 0, image.width, image.height);\n Context.drawImage(image, 0, 0);\n return Context.getImageData(0, 0, image.width, image.height);\n}\n\n// src/threading/cancel.ts\nfunction cancel(...tasks) {\n const thread = useThread();\n for (const task of tasks) {\n const child = thread.children.find((thread2) => thread2.runner === task);\n if (child && !child.canceled) {\n child.cancel();\n child.time(thread.time());\n }\n }\n}\n\n// src/threading/spawn.ts\nfunction spawn(task) {\n return useThread().spawn(task);\n}\n\n// src/threading/ThreadGenerator.ts\nfunction isPromisable(value) {\n return value && (typeof value === \"object\" || typeof value === \"function\") && \"toPromise\" in value;\n}\nfunction isThreadGenerator(value) {\n return value !== null && typeof value === \"object\" && Symbol.iterator in value && \"next\" in value;\n}\n\n// src/threading/Thread.ts\nvar reusedGenerator = `\nThis usually happens when you mistakenly reuse a generator that is already\nrunning.\n\nFor example, using \\`yield\\` here will run the opacity generator concurrently and\nstore it in the \\`task\\` variable (in case you want to cancel or await it later):\n\n\\`\\`\\`ts\nconst task = yield rect().opacity(1, 1);\n\\`\\`\\`\n\nTrying to \\`yield\\` this task again will cause the current error:\n\n\\`\\`\\`ts\nyield task;\n\\`\\`\\`\n\nPassing it to other flow functions will also cause the error:\n\n\\`\\`\\`ts\n// prettier-ignore\nyield* all(task);\n\\`\\`\\`\n\nTry to investigate your code looking for \\`yield\\` statements whose return value\nis reused in this way. Here's an example of a common mistake:\n\n\\`\\`\\`ts wrong\n// prettier-ignore\nyield* all(\n yield rect().opacity(1, 1), \n yield rect().x(200, 1),\n);\n\\`\\`\\`\n\n\\`\\`\\`ts correct\n// prettier-ignore\nyield* all(\n rect().opacity(1, 1), \n rect().x(200, 1),\n);\n\\`\\`\\`\n`;\ndecorate(noop, threadable());\nfunction* noop() {\n}\nvar Thread = class {\n constructor(runner) {\n this.runner = runner;\n this.children = [];\n /**\n * The current time of this thread.\n *\n * @remarks\n * Used by {@link flow.waitFor} and other time-based functions to properly\n * support durations shorter than one frame.\n */\n this.time = createSignal(0);\n this.parent = null;\n this.isCanceled = false;\n this.isPaused = false;\n this.fixedTime = 0;\n this.queue = [];\n if (this.runner.task) {\n useLogger().error({\n message: `The generator \"${getTaskName(\n this.runner\n )}\" is already being executed by another thread.`,\n remarks: reusedGenerator\n });\n this.runner = noop();\n }\n this.runner.task = this;\n }\n /**\n * The fixed time of this thread.\n *\n * @remarks\n * Fixed time is a multiple of the frame duration. It can be used to account\n * for the difference between this thread's {@link time} and the time of the\n * current animation frame.\n */\n get fixed() {\n return this.fixedTime;\n }\n /**\n * Check if this thread or any of its ancestors has been canceled.\n */\n get canceled() {\n return this.isCanceled || (this.parent?.canceled ?? false);\n }\n get paused() {\n return this.isPaused || (this.parent?.paused ?? false);\n }\n /**\n * Progress the wrapped generator once.\n */\n next() {\n if (this.paused) {\n return {\n value: null,\n done: false\n };\n }\n startThread(this);\n const result = this.runner.next(this.value);\n endThread(this);\n this.value = null;\n return result;\n }\n /**\n * Prepare the thread for the next update cycle.\n *\n * @param dt - The delta time of the next cycle.\n */\n update(dt) {\n if (!this.paused) {\n this.time(this.time() + dt);\n this.fixedTime += dt;\n }\n this.children = this.children.filter((child) => !child.canceled);\n }\n spawn(child) {\n if (!isThreadGenerator(child)) {\n child = child();\n }\n this.queue.push(child);\n return child;\n }\n add(child) {\n child.parent = this;\n child.isCanceled = false;\n child.time(this.time());\n child.fixedTime = this.fixedTime;\n this.children.push(child);\n setTaskName(child.runner, `unknown ${this.children.length}`);\n }\n drain(callback) {\n this.queue.forEach(callback);\n this.queue = [];\n }\n cancel() {\n this.runner.return();\n this.isCanceled = true;\n this.parent = null;\n this.drain((task) => task.return());\n }\n pause(value) {\n this.isPaused = value;\n }\n};\n\n// src/threading/threads.ts\nfunction isPromise(value) {\n return typeof value?.then === \"function\";\n}\ndecorate(threads, threadable());\nfunction* threads(factory, callback) {\n const playback = usePlayback();\n const root = factory();\n setTaskName(root, \"root\");\n const rootThread = new Thread(root);\n callback?.(rootThread);\n let threads2 = [rootThread];\n while (threads2.length > 0) {\n const newThreads = [];\n const queue = [...threads2];\n const dt = playback.deltaTime;\n while (queue.length > 0) {\n const thread = queue.pop();\n if (!thread || thread.canceled) {\n continue;\n }\n const result = thread.next();\n if (result.done) {\n thread.cancel();\n continue;\n }\n if (isThreadGenerator(result.value)) {\n const child = new Thread(result.value);\n thread.value = result.value;\n thread.add(child);\n queue.push(thread);\n queue.push(child);\n } else if (result.value) {\n thread.value = yield result.value;\n queue.push(thread);\n } else {\n thread.update(dt);\n thread.drain((task) => {\n const child = new Thread(task);\n thread.add(child);\n newThreads.unshift(child);\n });\n newThreads.unshift(thread);\n }\n }\n threads2 = newThreads.filter((thread) => !thread.canceled);\n if (threads2.length > 0) yield;\n }\n}\n\n// src/scenes/Scene.ts\nvar SceneRenderEvent = /* @__PURE__ */ ((SceneRenderEvent2) => {\n SceneRenderEvent2[SceneRenderEvent2[\"BeforeRender\"] = 0] = \"BeforeRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"BeginRender\"] = 1] = \"BeginRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"FinishRender\"] = 2] = \"FinishRender\";\n SceneRenderEvent2[SceneRenderEvent2[\"AfterRender\"] = 3] = \"AfterRender\";\n return SceneRenderEvent2;\n})(SceneRenderEvent || {});\n\n// src/scenes/LifecycleEvents.ts\nvar LifecycleEvents = class {\n constructor(scene) {\n this.scene = scene;\n this.beforeRender = new EventDispatcher();\n this.beginRender = new EventDispatcher();\n this.finishRender = new EventDispatcher();\n this.afterRender = new EventDispatcher();\n this.scene.onRenderLifecycle.subscribe(([event, ctx]) => {\n switch (event) {\n case 0 /* BeforeRender */:\n return this.beforeRender.dispatch(ctx);\n case 1 /* BeginRender */:\n return this.beginRender.dispatch(ctx);\n case 2 /* FinishRender */:\n return this.finishRender.dispatch(ctx);\n case 3 /* AfterRender */:\n return this.afterRender.dispatch(ctx);\n }\n });\n this.scene.onReset.subscribe(() => {\n this.beforeRender.clear();\n this.beginRender.clear();\n this.finishRender.clear();\n this.afterRender.clear();\n });\n }\n get onBeforeRender() {\n return this.beforeRender.subscribable;\n }\n get onBeginRender() {\n return this.beginRender.subscribable;\n }\n get onFinishRender() {\n return this.finishRender.subscribable;\n }\n get onAfterRender() {\n return this.afterRender.subscribable;\n }\n};\n\n// src/scenes/SceneState.ts\nvar SceneState = /* @__PURE__ */ ((SceneState2) => {\n SceneState2[SceneState2[\"Initial\"] = 0] = \"Initial\";\n SceneState2[SceneState2[\"AfterTransitionIn\"] = 1] = \"AfterTransitionIn\";\n SceneState2[SceneState2[\"CanTransitionOut\"] = 2] = \"CanTransitionOut\";\n SceneState2[SceneState2[\"Finished\"] = 3] = \"Finished\";\n return SceneState2;\n})(SceneState || {});\n\n// src/scenes/Shaders.ts\nvar UNIFORM_RESOLUTION = \"resolution\";\nvar UNIFORM_DESTINATION_TEXTURE = \"destinationTexture\";\nvar UNIFORM_SOURCE_TEXTURE = \"sourceTexture\";\nvar UNIFORM_TIME = \"time\";\nvar UNIFORM_DELTA_TIME = \"deltaTime\";\nvar UNIFORM_FRAMERATE = \"framerate\";\nvar UNIFORM_FRAME = \"frame\";\nvar UNIFORM_SOURCE_MATRIX = \"sourceMatrix\";\nvar UNIFORM_DESTINATION_MATRIX = \"destinationMatrix\";\nvar FragmentShader = `#version 300 es\n\nin vec2 position;\n\nout vec2 screenUV;\nout vec2 sourceUV;\nout vec2 destinationUV;\n\nuniform mat4 sourceMatrix;\nuniform mat4 destinationMatrix;\n\nvoid main() {\n vec2 position_source = position * 0.5 + 0.5;\n vec4 position_screen = sourceMatrix * vec4(position_source, 0, 1);\n\n screenUV = position_screen.xy;\n sourceUV = position_source;\n destinationUV = (destinationMatrix * position_screen).xy;\n\n gl_Position = (position_screen - 0.5) * 2.0;\n}\n`;\nvar Shaders = class {\n constructor(scene, sharedContext) {\n this.scene = scene;\n this.sharedContext = sharedContext;\n this.gl = null;\n this.positionBuffer = null;\n this.sourceTexture = null;\n this.destinationTexture = null;\n this.positionLocation = 0;\n this.quadPositions = new Float32Array([\n -1,\n 1,\n -1,\n -1,\n 1,\n 1,\n 1,\n -1\n ]);\n this.handleReload = () => {\n if (this.gl) {\n this.updateViewport();\n }\n };\n scene.onReloaded.subscribe(this.handleReload);\n }\n setup(gl) {\n this.gl = gl;\n this.updateViewport();\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, this.quadPositions, gl.STATIC_DRAW);\n gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this.positionLocation);\n this.sourceTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n this.destinationTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.destinationTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n }\n teardown(gl) {\n gl.deleteBuffer(this.positionBuffer);\n gl.disableVertexAttribArray(this.positionLocation);\n gl.deleteTexture(this.sourceTexture);\n gl.deleteTexture(this.destinationTexture);\n this.positionBuffer = null;\n this.sourceTexture = null;\n this.destinationTexture = null;\n this.gl = null;\n }\n updateViewport() {\n if (this.gl) {\n const size = this.scene.getRealSize();\n this.gl.canvas.width = size.width;\n this.gl.canvas.height = size.height;\n this.gl.viewport(0, 0, size.width, size.height);\n }\n }\n getGL() {\n return this.gl ?? this.sharedContext.borrow(this);\n }\n getProgram(fragment) {\n const program = this.sharedContext.getProgram(fragment, FragmentShader);\n if (!program) {\n return null;\n }\n const size = this.scene.getRealSize();\n const gl = this.getGL();\n gl.useProgram(program);\n gl.uniform1i(gl.getUniformLocation(program, UNIFORM_SOURCE_TEXTURE), 0);\n gl.uniform1i(\n gl.getUniformLocation(program, UNIFORM_DESTINATION_TEXTURE),\n 1\n );\n gl.uniform2f(\n gl.getUniformLocation(program, UNIFORM_RESOLUTION),\n size.x,\n size.y\n );\n gl.uniform1f(\n gl.getUniformLocation(program, UNIFORM_DELTA_TIME),\n this.scene.playback.deltaTime\n );\n gl.uniform1f(\n gl.getUniformLocation(program, UNIFORM_FRAMERATE),\n this.scene.playback.fps\n );\n return program;\n }\n copyTextures(destination, source) {\n this.copyTexture(source, this.sourceTexture);\n this.copyTexture(destination, this.destinationTexture);\n }\n clear() {\n const gl = this.getGL();\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n render() {\n const gl = this.getGL();\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n copyTexture(source, texture) {\n const gl = this.getGL();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);\n gl.generateMipmap(gl.TEXTURE_2D);\n }\n};\n\n// src/scenes/Slides.ts\nvar Slides = class {\n constructor(scene) {\n this.scene = scene;\n this.slides = new ValueDispatcher([]);\n this.lookup = /* @__PURE__ */ new Map();\n this.collisionLookup = /* @__PURE__ */ new Set();\n this.current = null;\n this.canResume = false;\n this.waitsForId = null;\n this.targetId = null;\n this.handleReload = () => {\n this.lookup.clear();\n this.collisionLookup.clear();\n this.current = null;\n this.waitsForId = null;\n this.targetId = null;\n };\n this.handleReset = () => {\n this.collisionLookup.clear();\n this.current = null;\n this.waitsForId = null;\n };\n this.handleRecalculated = () => {\n this.slides.current = [...this.lookup.values()];\n };\n this.scene.onReloaded.subscribe(this.handleReload);\n this.scene.onReset.subscribe(this.handleReset);\n this.scene.onRecalculated.subscribe(this.handleRecalculated);\n }\n get onChanged() {\n return this.slides.subscribable;\n }\n setTarget(target) {\n this.targetId = target;\n }\n resume() {\n this.canResume = true;\n }\n isWaitingFor(slide) {\n return this.waitsForId === slide;\n }\n isWaiting() {\n return this.waitsForId !== null;\n }\n didHappen(slide) {\n if (this.current === null) {\n return false;\n }\n for (const key of this.lookup.keys()) {\n if (key === slide) {\n return true;\n }\n if (key === this.current?.id) {\n return false;\n }\n }\n return false;\n }\n getCurrent() {\n return this.current;\n }\n register(name, initialTime) {\n if (this.waitsForId !== null) {\n throw new Error(\n `The animation already waits for a slide: ${this.waitsForId}.`\n );\n }\n const id = this.toId(name);\n if (this.scene.playback.state !== 3 /* Presenting */) {\n if (!this.lookup.has(id)) {\n this.lookup.set(id, {\n id,\n name,\n time: initialTime,\n scene: this.scene,\n stack: new Error().stack\n });\n }\n if (this.collisionLookup.has(name)) {\n this.scene.logger.warn({\n message: `A slide named \"${name}\" already exists.`,\n stack: new Error().stack\n });\n } else {\n this.collisionLookup.add(name);\n }\n }\n this.waitsForId = id;\n this.current = this.lookup.get(id) ?? null;\n this.canResume = false;\n }\n shouldWait(name) {\n const id = this.toId(name);\n if (this.waitsForId !== id) {\n throw new Error(\n `The animation waits for a different slide: ${this.waitsForId}.`\n );\n }\n const data = this.lookup.get(id);\n if (!data) {\n throw new Error(`Could not find the \"${name}\" slide.`);\n }\n let canResume = this.canResume;\n if (this.scene.playback.state !== 3 /* Presenting */) {\n canResume = id !== this.targetId;\n }\n if (canResume) {\n this.waitsForId = null;\n }\n return !canResume;\n }\n toId(name) {\n return `${this.scene.name}:${name}`;\n }\n};\n\n// src/scenes/Variables.ts\nvar Variables = class {\n constructor(scene) {\n this.scene = scene;\n this.signals = {};\n this.variables = {};\n /**\n * Reset all stored signals.\n */\n this.handleReset = () => {\n this.signals = {};\n };\n scene.onReset.subscribe(this.handleReset);\n }\n /**\n * Get variable signal if exists or create signal if not\n *\n * @param name - The name of the variable.\n * @param initial - The initial value of the variable. It will be used if the\n * variable was not configured from the outside.\n */\n get(name, initial) {\n var _a;\n (_a = this.signals)[name] ?? (_a[name] = createSignal(this.variables[name] ?? initial));\n return () => this.signals[name]();\n }\n /**\n * Update all signals with new project variable values.\n */\n updateSignals(variables) {\n this.variables = variables;\n Object.keys(variables).map((variableName) => {\n if (variableName in this.signals) {\n this.signals[variableName](variables[variableName]);\n }\n });\n }\n};\n\n// src/scenes/GeneratorScene.ts\nvar GeneratorScene = class {\n constructor(description) {\n this.cache = new ValueDispatcher({\n firstFrame: 0,\n transitionDuration: 0,\n duration: 0,\n lastFrame: 0\n });\n this.reloaded = new EventDispatcher();\n this.recalculated = new EventDispatcher();\n this.thread = new ValueDispatcher(null);\n this.renderLifecycle = new EventDispatcher();\n this.afterReset = new EventDispatcher();\n this.lifecycleEvents = new LifecycleEvents(this);\n this.previousScene = null;\n this.runner = null;\n this.state = 0 /* Initial */;\n this.cached = false;\n // TODO(refactor): seems to be unused\n this.counters = {};\n this.name = description.name;\n this.size = description.size;\n this.resolutionScale = description.resolutionScale;\n this.logger = description.logger;\n this.playback = description.playback;\n this.runnerFactory = description.config;\n this.creationStack = description.stack;\n this.experimentalFeatures = description.experimentalFeatures ?? false;\n decorate(this.runnerFactory, threadable(this.name));\n this.variables = new Variables(this);\n this.shaders = new Shaders(this, description.sharedWebGLContext);\n this.slides = new Slides(this);\n this.previousOnTop = false;\n }\n get firstFrame() {\n return this.cache.current.firstFrame;\n }\n get lastFrame() {\n return this.firstFrame + this.cache.current.duration;\n }\n get onCacheChanged() {\n return this.cache.subscribable;\n }\n get onReloaded() {\n return this.reloaded.subscribable;\n }\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get onThreadChanged() {\n return this.thread.subscribable;\n }\n get onRenderLifecycle() {\n return this.renderLifecycle.subscribable;\n }\n get onReset() {\n return this.afterReset.subscribable;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n get LifecycleEvents() {\n this.logger.warn(\n \"LifecycleEvents is deprecated. Use lifecycleEvents instead.\"\n );\n return this.lifecycleEvents;\n }\n get previous() {\n return this.previousScene;\n }\n getMediaAssets() {\n return [];\n }\n stopAllMedia() {\n }\n /**\n * Update the view.\n *\n * Invoked after each step of the main generator.\n * Can be used for calculating layout.\n *\n * Can modify the state of the view.\n */\n update() {\n }\n async render(context) {\n let iterations = 0;\n do {\n iterations++;\n await DependencyContext.consumePromises();\n context.save();\n context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n await this.draw(context);\n context.restore();\n } while (DependencyContext.hasPromises() && iterations < 10);\n if (iterations > 1) {\n this.logger.debug(`render iterations: ${iterations}`);\n }\n }\n reload({\n config,\n size,\n stack,\n resolutionScale\n } = {}) {\n if (config) {\n this.runnerFactory = config;\n }\n if (size) {\n this.size = size;\n }\n if (resolutionScale) {\n this.resolutionScale = resolutionScale;\n }\n if (stack) {\n this.creationStack = stack;\n }\n this.cached = false;\n this.reloaded.dispatch();\n }\n async recalculate(setFrame) {\n const cached = this.cache.current;\n cached.firstFrame = this.playback.frame;\n cached.lastFrame = cached.firstFrame + cached.duration;\n if (this.isCached()) {\n setFrame(cached.lastFrame);\n this.cache.current = { ...cached };\n return;\n }\n cached.transitionDuration = -1;\n await this.reset();\n while (!this.canTransitionOut()) {\n if (cached.transitionDuration < 0 && this.state === 1 /* AfterTransitionIn */) {\n cached.transitionDuration = this.playback.frame - cached.firstFrame;\n }\n setFrame(this.playback.frame + 1);\n await this.next();\n }\n if (cached.transitionDuration === -1) {\n cached.transitionDuration = 0;\n }\n cached.lastFrame = this.playback.frame;\n cached.duration = cached.lastFrame - cached.firstFrame;\n await new Promise((resolve) => setTimeout(resolve, 0));\n this.cached = true;\n this.cache.current = { ...cached };\n this.recalculated.dispatch();\n }\n async next() {\n if (!this.runner) {\n return;\n }\n let result = this.execute(() => this.runner.next());\n this.update();\n while (result.value) {\n if (isPromisable(result.value)) {\n const value = await result.value.toPromise();\n result = this.execute(() => this.runner.next(value));\n } else if (isPromise(result.value)) {\n const value = await result.value;\n result = this.execute(() => this.runner.next(value));\n } else {\n this.logger.warn({\n message: \"Invalid value yielded by the scene.\",\n object: result.value\n });\n result = this.execute(() => this.runner.next(result.value));\n }\n this.update();\n }\n if (DependencyContext.hasPromises()) {\n const promises = await DependencyContext.consumePromises();\n this.logger.warn({\n message: \"Tried to access an asynchronous property before the node was ready. Make sure to yield the node before accessing the property.\",\n stack: promises[0].stack,\n inspect: promises[0].owner?.key ?? void 0\n });\n }\n if (result.done) {\n this.state = 3 /* Finished */;\n }\n }\n async reset(previousScene = null) {\n this.counters = {};\n this.previousScene = previousScene;\n this.previousOnTop = false;\n this.runner = threads(\n () => this.runnerFactory(this.getView()),\n (thread) => {\n this.thread.current = thread;\n }\n );\n this.state = 1 /* AfterTransitionIn */;\n this.afterReset.dispatch();\n await this.next();\n }\n getSize() {\n return this.size;\n }\n getRealSize() {\n return this.size.mul(this.resolutionScale);\n }\n isAfterTransitionIn() {\n return this.state === 1 /* AfterTransitionIn */;\n }\n canTransitionOut() {\n return this.state === 2 /* CanTransitionOut */ || this.state === 3 /* Finished */;\n }\n isFinished() {\n return this.state === 3 /* Finished */;\n }\n enterInitial() {\n if (this.state === 1 /* AfterTransitionIn */) {\n this.state = 0 /* Initial */;\n } else {\n this.logger.warn(\n `Scene ${this.name} entered initial in an unexpected state: ${this.state}`\n );\n }\n }\n enterAfterTransitionIn() {\n if (this.state === 0 /* Initial */) {\n this.state = 1 /* AfterTransitionIn */;\n } else {\n this.logger.warn(\n `Scene ${this.name} transitioned in an unexpected state: ${this.state}`\n );\n }\n }\n enterCanTransitionOut() {\n if (this.state === 1 /* AfterTransitionIn */ || this.state === 0 /* Initial */) {\n this.state = 2 /* CanTransitionOut */;\n } else {\n this.logger.warn(\n `Scene ${this.name} was marked as finished in an unexpected state: ${this.state}`\n );\n }\n }\n isCached() {\n return this.cached;\n }\n /**\n * Invoke the given callback in the context of this scene.\n *\n * @remarks\n * This method makes sure that the context of this scene is globally available\n * during the execution of the callback.\n *\n * @param callback - The callback to invoke.\n */\n execute(callback) {\n let result;\n startScene(this);\n startPlayback(this.playback);\n try {\n result = callback();\n } finally {\n endPlayback(this.playback);\n endScene(this);\n }\n return result;\n }\n};\n\n// src/scenes/Inspectable.ts\nfunction isInspectable(value) {\n return value && typeof value === \"object\" && \"validateInspection\" in value;\n}\n\n// src/scenes/Random.ts\nvar Random = class _Random {\n constructor(state) {\n this.state = state;\n /**\n * Previously generated Gaussian random number.\n *\n * @remarks\n * This is an optimization.\n * Since {@link gauss} generates a pair of independent Gaussian random\n * numbers, it returns one immediately and stores the other for the next call\n * to {@link gauss}.\n */\n this.nextGauss = null;\n }\n /**\n * @internal\n */\n static createSeed() {\n return Math.floor(Math.random() * 4294967296);\n }\n /**\n * Get the next random float in the given range.\n *\n * @param from - The start of the range.\n * @param to - The end of the range.\n */\n nextFloat(from = 0, to = 1) {\n return map(from, to, this.next());\n }\n /**\n * Get the next random integer in the given range.\n *\n * @param from - The start of the range.\n * @param to - The end of the range. Exclusive.\n */\n nextInt(from = 0, to = 4294967296) {\n let value = Math.floor(map(from, to, this.next()));\n if (value === to) {\n value = from;\n }\n return value;\n }\n /**\n * Get a random float from a gaussian distribution.\n * @param mean - The mean of the distribution.\n * @param stdev - The standard deviation of the distribution.\n */\n gauss(mean = 0, stdev = 1) {\n let z = this.nextGauss;\n this.nextGauss = null;\n if (z === null) {\n const x2pi = this.next() * 2 * Math.PI;\n const g2rad = Math.sqrt(-2 * Math.log(1 - this.next()));\n z = Math.cos(x2pi) * g2rad;\n this.nextGauss = Math.sin(x2pi) * g2rad;\n }\n return mean + z * stdev;\n }\n /**\n * Get an array filled with random floats in the given range.\n *\n * @param size - The size of the array.\n * @param from - The start of the range.\n * @param to - The end of the range.\n */\n floatArray(size, from = 0, to = 1) {\n return range(size).map(() => this.nextFloat(from, to));\n }\n /**\n Get an array filled with random integers in the given range.\n *\n * @param size - The size of the array.\n * @param from - The start of the range.\n * @param to - The end of the range. Exclusive.\n */\n intArray(size, from = 0, to = 4294967296) {\n return range(size).map(() => this.nextInt(from, to));\n }\n /**\n * Create a new independent generator.\n */\n spawn() {\n return new _Random(this.nextInt());\n }\n next() {\n this.state |= 0;\n this.state = this.state + 1831565813 | 0;\n let t = Math.imul(this.state ^ this.state >>> 15, 1 | this.state);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n};\n\n// src/scenes/Threadable.ts\nfunction isThreadable(value) {\n return value && typeof value === \"object\" && \"onThreadChanged\" in value;\n}\n\n// src/transitions/useTransition.ts\nfunction useTransition(current, previous, previousOnTop) {\n if (previous == null) {\n previous = () => {\n };\n }\n const scene = useScene();\n const prior = scene.previous;\n scene.previousOnTop = previousOnTop ?? false;\n const unsubPrev = prior?.lifecycleEvents.onBeforeRender.subscribe(previous);\n const unsubNext = scene.lifecycleEvents.onBeforeRender.subscribe(current);\n scene.enterInitial();\n return () => {\n scene.enterAfterTransitionIn();\n unsubPrev?.();\n unsubNext();\n };\n}\n\n// src/transitions/fadeTransition.ts\nfunction* fadeTransition(duration = 0.6) {\n const progress = createSignal(0);\n const endTransition = useTransition((ctx) => {\n ctx.globalAlpha = progress();\n });\n yield* progress(1, duration);\n endTransition();\n}\n\n// src/transitions/slideTransition.ts\nfunction* slideTransition(direction = 4 /* Top */, duration = 0.6) {\n const size = useScene().getSize();\n const position = size.getOriginOffset(direction).scale(2);\n const previousPosition = Vector2.createSignal();\n const currentPosition = Vector2.createSignal(position);\n const endTransition = useTransition(\n (ctx) => ctx.translate(currentPosition.x(), currentPosition.y()),\n (ctx) => ctx.translate(previousPosition.x(), previousPosition.y())\n );\n yield* all(\n previousPosition(position.scale(-1), duration),\n currentPosition(Vector2.zero, duration)\n );\n endTransition();\n}\n\n// src/transitions/zoomInTransition.ts\nfunction* zoomInTransition(area, duration = 0.6) {\n const scale = useScene().getSize().div(area.size);\n const currentPosition = Vector2.createSignal(area.position);\n const currentScale = Vector2.createSignal(Vector2.one.div(scale));\n const previousPosition = Vector2.createSignal(0);\n const previousScale = Vector2.createSignal(1);\n const alpha = createSignal(0);\n const endTransition = useTransition(\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.1, 0.5, 0, 1, alpha());\n ctx.translate(currentPosition.x(), currentPosition.y());\n ctx.scale(currentScale.x(), currentScale.y());\n },\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.5, 0.9, 1, 0, alpha());\n ctx.translate(previousPosition.x(), previousPosition.y());\n ctx.scale(previousScale.x(), previousScale.y());\n }\n );\n const timing = (v) => easeInOutCubic(v * v);\n yield* all(\n currentPosition(Vector2.zero, duration, timing),\n previousPosition(area.position.flipped.mul(scale), duration, timing),\n currentScale(1, duration, timing),\n previousScale(scale, duration, timing),\n alpha(1, duration, linear)\n );\n endTransition();\n}\n\n// src/transitions/zoomOutTransition.ts\nfunction* zoomOutTransition(area, duration = 0.6) {\n const scale = useScene().getSize().div(area.size);\n const currentPosition = Vector2.createSignal(\n area.position.flipped.mul(scale)\n );\n const currentScale = Vector2.createSignal(scale);\n const previousPosition = Vector2.createSignal(0);\n const previousScale = Vector2.createSignal(1);\n const alpha = createSignal(0);\n const endTransition = useTransition(\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.1, 0.5, 0, 1, alpha());\n ctx.translate(currentPosition.x(), currentPosition.y());\n ctx.scale(currentScale.x(), currentScale.y());\n },\n (ctx) => {\n ctx.globalAlpha = clampRemap(0.5, 0.9, 1, 0, alpha());\n ctx.translate(previousPosition.x(), previousPosition.y());\n ctx.scale(previousScale.x(), previousScale.y());\n }\n );\n const timing = (v) => easeInOutCubic(Math.sqrt(v));\n yield* all(\n currentPosition(Vector2.zero, duration, timing),\n previousPosition(area.position, duration, timing),\n currentScale(1, duration, timing),\n previousScale(Vector2.one.div(scale), duration, timing),\n alpha(1, duration, linear)\n );\n endTransition();\n}\nexport {\n AsyncEventDispatcher,\n BBox,\n BeatSpring,\n BounceSpring,\n Center,\n Color,\n CompoundSignalContext,\n ComputedContext,\n DEFAULT,\n DEG2RAD,\n DefaultPlugin_default as DefaultPlugin,\n DependencyContext,\n DetailedError,\n Direction,\n EPSILON,\n EventDispatcher,\n EventDispatcherBase,\n ExperimentalError,\n FFmpegExporterClient,\n FlagDispatcher,\n GeneratorScene,\n ImageExporter,\n JumpSpring,\n LifecycleEvents,\n LogLevel,\n Logger,\n Matrix2D,\n Origin,\n PlaybackManager,\n PlaybackState,\n PlaybackStatus,\n Player,\n PlopSpring,\n RAD2DEG,\n Random,\n Renderer,\n RendererResult,\n RendererState,\n SceneRenderEvent,\n SceneState,\n Semaphore,\n Shaders,\n SharedWebGLContext,\n SignalContext,\n Slides,\n SmoothSpring,\n Spacing,\n Stage,\n StrikeSpring,\n Subscribable,\n SubscribableValueEvent,\n SwingSpring,\n Thread,\n UNIFORM_DELTA_TIME,\n UNIFORM_DESTINATION_MATRIX,\n UNIFORM_DESTINATION_TEXTURE,\n UNIFORM_FRAME,\n UNIFORM_FRAMERATE,\n UNIFORM_RESOLUTION,\n UNIFORM_SOURCE_MATRIX,\n UNIFORM_SOURCE_TEXTURE,\n UNIFORM_TIME,\n ValueDispatcher,\n Variables,\n Vector2,\n WasmExporter,\n addEditorToProject,\n all,\n any,\n arcLerp,\n beginSlide,\n boolLerp,\n cancel,\n capitalize,\n chain,\n clamp,\n clampRemap,\n cos,\n createComputed,\n createComputedAsync,\n createEaseInBack,\n createEaseInBounce,\n createEaseInElastic,\n createEaseInOutBack,\n createEaseInOutBounce,\n createEaseInOutElastic,\n createEaseOutBack,\n createEaseOutBounce,\n createEaseOutElastic,\n createRef,\n createRefArray,\n createRefMap,\n createSignal,\n createVersionObject,\n debug,\n decorate,\n deepLerp,\n defaultUserProjectSettings,\n delay,\n deprecate,\n easeInBack,\n easeInBounce,\n easeInCirc,\n easeInCubic,\n easeInElastic,\n easeInExpo,\n easeInOutBack,\n easeInOutBounce,\n easeInOutCirc,\n easeInOutCubic,\n easeInOutElastic,\n easeInOutExpo,\n easeInOutQuad,\n easeInOutQuart,\n easeInOutQuint,\n easeInOutSine,\n easeInQuad,\n easeInQuart,\n easeInQuint,\n easeInSine,\n easeOutBack,\n easeOutBounce,\n easeOutCirc,\n easeOutCubic,\n easeOutElastic,\n easeOutExpo,\n easeOutQuad,\n easeOutQuart,\n easeOutQuint,\n easeOutSine,\n endPlayback,\n endScene,\n endThread,\n errorToLog,\n every,\n experimentalFeatures,\n experimentalLog,\n fadeTransition,\n finishScene,\n flipOrigin,\n getContext,\n getFullPreviewSettings,\n getFullRenderingSettings,\n getImageData,\n getTaskName,\n isInspectable,\n isPromisable,\n isPromise,\n isReactive,\n isThreadGenerator,\n isThreadable,\n isType,\n join,\n lazy,\n linear,\n loadAnimation,\n loadImage,\n loop,\n loopFor,\n makePlugin,\n makeProject,\n makeRef,\n makeRefs,\n makeSpring,\n map,\n modify,\n noop,\n originToOffset,\n range,\n remap,\n rotateVector,\n run,\n sequence,\n setTaskName,\n sin,\n slideTransition,\n spawn,\n spring,\n startPlayback,\n startScene,\n startThread,\n textLerp,\n threadable,\n threads,\n transformAngle,\n transformScalar,\n transformVector,\n transformVectorAsPoint,\n tween,\n unwrap,\n useContext,\n useContextAfter,\n useLogger,\n usePlayback,\n useScene,\n useThread,\n useTime,\n useTransition,\n waitFor,\n zoomInTransition,\n zoomOutTransition\n};\n//# sourceMappingURL=index.js.map","// src/internal.ts\nimport { Player, Stage, getFullPreviewSettings } from \"@twick/core\";\nimport { Vector2 } from \"@twick/core\";\nvar stylesNew = `\n.overlay {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\topacity: 0;\n\ttransition: opacity 0.1s;\n\tz-index: 0;\n }\n .canvas {\n\twidth: 100%;\n\tdisplay: block;\n\topacity: 1;\n\ttransition: opacity 0.1s;\n }\n`;\nvar TEMPLATE = `<style>${stylesNew}</style><div class=\"overlay\"></div>`;\nvar ID = \"twick-player\";\nvar TwickPlayer = class extends HTMLElement {\n static get observedAttributes() {\n return [\n \"playing\",\n \"variables\",\n \"looping\",\n \"fps\",\n \"quality\",\n \"width\",\n \"height\",\n \"volume\"\n ];\n }\n get fps() {\n const attr = this.getAttribute(\"fps\");\n return attr ? parseFloat(attr) : this.defaultSettings?.fps ?? 60;\n }\n get quality() {\n const attr = this.getAttribute(\"quality\");\n return attr ? parseFloat(attr) : this.defaultSettings?.resolutionScale ?? 1;\n }\n get width() {\n const attr = this.getAttribute(\"width\");\n return attr ? parseFloat(attr) : this.defaultSettings?.size.width ?? 0;\n }\n get height() {\n const attr = this.getAttribute(\"height\");\n return attr ? parseFloat(attr) : this.defaultSettings?.size.height ?? 0;\n }\n get variables() {\n try {\n const attr = this.getAttribute(\"variables\");\n return attr ? JSON.parse(attr) : {};\n } catch {\n this.project?.logger.warn(`Project variables could not be parsed.`);\n return {};\n }\n }\n root;\n canvas;\n overlay;\n state = \"initial\" /* Initial */;\n project = null;\n player = null;\n defaultSettings;\n abortController = null;\n playing = false;\n stage = new Stage();\n time = 0;\n duration = 0;\n // in frames\n looping = true;\n volume = 1;\n volumeChangeRequested = true;\n constructor() {\n super();\n this.root = this.attachShadow({ mode: \"open\" });\n this.root.innerHTML = TEMPLATE;\n this.overlay = this.root.querySelector(\".overlay\");\n this.canvas = this.stage.finalBuffer;\n this.canvas.classList.add(\"canvas\");\n this.root.prepend(this.canvas);\n this.setState(\"initial\" /* Initial */);\n }\n setProject(project) {\n this.updateProject(project);\n }\n setState(state) {\n this.state = state;\n this.setPlaying(this.playing);\n }\n setPlaying(value) {\n if (this.state === \"ready\" /* Ready */ && value) {\n this.player?.togglePlayback(true);\n this.playing = true;\n } else {\n this.player?.togglePlayback(false);\n this.playing = false;\n }\n }\n async updateProject(project) {\n const playing = this.playing;\n this.setState(\"initial\" /* Initial */);\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.project = project;\n console.log(project);\n this.defaultSettings = getFullPreviewSettings(this.project);\n const player = new Player(this.project);\n player.setVariables(this.variables);\n player.toggleLoop(this.looping);\n this.player?.onRender.unsubscribe(this.render);\n this.player?.onFrameChanged.unsubscribe(this.handleFrameChanged);\n this.player?.togglePlayback(false);\n this.player?.deactivate();\n this.player = player;\n this.updateSettings();\n this.setState(\"ready\" /* Ready */);\n this.dispatchEvent(new CustomEvent(\"playerready\", { detail: this.player }));\n this.setPlaying(playing);\n this.player.onRender.subscribe(this.render);\n this.player.onFrameChanged.subscribe(this.handleFrameChanged);\n }\n attributeChangedCallback(name, _, newValue) {\n switch (name) {\n case \"playing\":\n this.setPlaying(newValue === \"true\");\n break;\n case \"variables\":\n this.player?.setVariables(this.variables);\n this.player?.requestSeek(this.player.playback.frame);\n this.player?.playback.reload();\n break;\n case \"looping\":\n this.looping = newValue === \"true\";\n this.player?.toggleLoop(newValue === \"true\");\n break;\n case \"fps\":\n case \"quality\":\n case \"width\":\n case \"height\":\n this.updateSettings();\n break;\n case \"volume\":\n this.volume = newValue;\n this.volumeChangeRequested = true;\n }\n }\n /**\n * Runs when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.player?.deactivate();\n this.player?.onRender.unsubscribe(this.render);\n this.removeEventListener(\"seekto\", this.handleSeekTo);\n this.removeEventListener(\"volumechange\", this.handleVolumeChange);\n }\n /**\n * Runs when the element is added to the DOM.\n */\n connectedCallback() {\n this.player?.activate();\n this.player?.onRender.subscribe(this.render);\n this.addEventListener(\"seekto\", this.handleSeekTo);\n this.addEventListener(\"volumechange\", this.handleVolumeChange);\n }\n /**\n * Triggered by the timeline.\n */\n handleSeekTo = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.time = e.detail;\n this.player?.requestSeek(e.detail * this.player.playback.fps);\n this.volumeChangeRequested = true;\n };\n handleVolumeChange = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.volume = e.detail;\n this.player?.playback.currentScene.adjustVolume(this.volume);\n };\n /**\n * Triggered by the player.\n */\n handleFrameChanged = (frame) => {\n if (!this.project || !this.player) {\n return;\n }\n this.time = frame / this.player.playback.fps;\n if (this.volumeChangeRequested || frame === 0) {\n this.player?.playback.currentScene.adjustVolume(this.volume);\n this.volumeChangeRequested = false;\n }\n };\n /**\n * Called on every frame.\n */\n render = async () => {\n if (this.player && this.project) {\n await this.stage.render(\n this.player.playback.currentScene,\n this.player.playback.previousScene\n );\n this.dispatchEvent(new CustomEvent(\"timeupdate\", { detail: this.time }));\n const durationInFrames = this.player.playback.duration;\n if (durationInFrames === this.duration) {\n return;\n }\n this.duration = durationInFrames;\n const durationInSeconds = durationInFrames / this.player.playback.fps;\n this.dispatchEvent(\n new CustomEvent(\"duration\", { detail: durationInSeconds })\n );\n }\n };\n updateSettings() {\n if (!this.defaultSettings) {\n return;\n }\n const settings = {\n ...this.defaultSettings,\n size: new Vector2(this.width, this.height),\n resolutionScale: this.quality,\n fps: this.fps\n };\n this.stage.configure(settings);\n this.player?.configure(settings);\n }\n};\nif (!customElements.get(ID)) {\n customElements.define(ID, TwickPlayer);\n}\n//# sourceMappingURL=internal-H4HUGGQY.js.map"],"names":["num","hue","definition","k","c","linearize","gamma","fn","abs","rgb","sum","val","e","f","M","parseHwb","p","d0","vn","n","lab","lch","u_fn","v_fn","un","f2","C1","b","b2","modeHsl","modeHsv","α","β","transfer","modeA98","modeCubehelix","modeDlab","modeDlch","modeHsi","modeHwb","modeItp","modeJab","modeJch","modeLab","modeLab65","modeLch","modeLch65","modeLchuv","modeLrgb","modeLuv","modeOklab","modeOklch","modeP3","modeProphoto","modeRec2020","modeRgb","modeXyb","modeXyz50","modeXyz65","modeYiq","_DependencyContext","_Vector2","_Matrix2D"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131]}
|